窗口2获的值,如何传递到窗口1里,并将值的内容显示在textBox里。

咨询:Form2窗口, 获的值,如何传递到主窗口Form1里,并在textBox1里显示出内容。
以下是Form1窗口:

img


打开窗口如下图:就是Form2窗口。

img


Form1主窗口代码如下:


 public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
         没有获得值           
        //  Form2 f2 = new Form2();
           // this.textBox2.Text = f2.str;    
        }
     以下代码: 测试按钮事件,也没有获得值
    private void button3_Click(object sender, EventArgs e)
        {
            Form2 f2 = (Form2)this.Owner;
            this.textBox2.Text = f2.str; ;
       }
  
       

Form2代码如下:
鼠标双击时获得值赋给 str变量,测试了,str是有获得文本值。但不知如何将str 获得值,传递到Form1 窗口里,显示在textBox里。


        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            str = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
           this.textBox3.Text =str;
           Close();
        }

请老顾指导一下,望能有详细代码。非常感谢!

记得你上个问题我是回答过的,通过C#的委托可以实现,但很遗憾,这么高级的跨窗体实现并未被你看上(苦笑)。

今天特意再用你这个问题写了一个专门使用委托实现的示例,先看运行效果:

img

完整的示例源码我放在了这里,供参考:

回答:获得值是很简单的,只需要通过一个静态变量即可,把窗体2的那个值给到静态变量,然后同事窗体1先开启一个监听事件,监听间隔可以设置为1秒,然后等待这个变量被赋值,被赋值之后赋值给textbox的事件触发,此时就达到了你想要的效果。需要处理的是你是否需要将这个监听器删除掉。技术点为如何开启一个监听器,以及如何移出一个监听器,记得有一个组件叫timer的,你可以试试看

你的运行效果,是我想要的。 我按照你的方法无法实现,不知哪里代码写错了。委托不会使用,请老师检查一下。
Form1代码

using System.Delegate;
 private void button1_Click(object sender, EventArgs e)
        {
            var frm2 = new Form2();
            frm2.OnProductSelected = productName =>
            {
                textBox1.Text = productName;
            };
            frm2.ShowDialog();
        }

Form2代码如下:

    public Action OnProductSelected { get; set; }
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
          var selectproductName = dataGridView1[e.ColumnIndex, e.RowIndex].Value.ToString();
           OnProductSelected?.Invoke(selectproductName);
          Close();

Product.cs代码:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _20230130play
{
    public class Product
    {
        public int Id { get; set; }
        public string Text { get; set; }
       
    }
}



请老师检查一下,代码哪里写错了、或写漏了。特别是引用委托,调用Product.cs 文件,哪里有错误。