咨询:Form2窗口, 获的值,如何传递到主窗口Form1里,并在textBox1里显示出内容。
以下是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#的委托可以实现,但很遗憾,这么高级的跨窗体实现并未被你看上(苦笑)。
今天特意再用你这个问题写了一个专门使用委托实现的示例,先看运行效果:
完整的示例源码我放在了这里,供参考:
回答:获得值是很简单的,只需要通过一个静态变量即可,把窗体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 文件,哪里有错误。