C# 如何在两个表单之间传递数据?
我使用委托在两个表单之间传递数据 主要形式C# 如何在两个表单之间传递数据?,c#,delegates,C#,Delegates,我使用委托在两个表单之间传递数据 主要形式 public delegate void PassData(ListViewItem itemss); public PassData passdata; private void ViewList_SelectedIndexChanged(object sender, EventArgs e) { passdata(ViewList.FocusedItem); } call PropertiesForm Properties1 pr
public delegate void PassData(ListViewItem itemss);
public PassData passdata;
private void ViewList_SelectedIndexChanged(object sender, EventArgs e)
{
passdata(ViewList.FocusedItem);
}
call PropertiesForm
Properties1 pro = new Properties1();
pro.Show();
表格2
public void f_pass(ListViewItem item)
{
this.item = item;
}
private void Properties1_Load(object sender, EventArgs e)
{
Main main = new Main();
main.passdata += new Main.PassData(f_pass);
}
当我运行它时,passdata(ViewList.FocusedItem)上有一个错误是null对象 您可以为要向其传递数据的表单创建另一个构造函数。构造函数将接受所需数据类型的参数,但请确保使用
: base()
在创建委托之前,您似乎已调用该委托。据我所知,您打算将数据从
MainForm
传递到PropertiesForm
,但初始化仅在PropertiesForm
加载期间发生。很可能您存在架构问题,但目前只需尝试更改视图列表\u选择的索引更改方法,如下所示:
public PassData passdata = null;
private void ViewList_SelectedIndexChanged(object sender, EventArgs e)
{
if(passdata != null)
{
passdata(ViewList.FocusedItem);
}
}
我认为在表单之间传递数据不是一个好主意。尝试使用一些中间人来包含数据。这样做
public partial class Main : Form
{
public delegate void PassData(ListViewItem itemss);
public static event PassData PassDataEvent;
private void ViewList_SelectedIndexChanged(object sender, EventArgs e)
{
if (PassDataEvent != null)
{
PassDataEvent(ViewList.FocusedItem);
}
}
}
public partial class Properties1 : Form
{
public Properties1()
{
InitializeComponent();
this.Load += new EventHandler(Main_Load);
}
void Properties1_Load(object sender, EventArgs e)
{
Main.PassDataEvent += new Main.PassData(Main_PassDataEvent);
}
void Main_PassDataEvent(ListViewItem itemss)
{
//do your logic.
}
}
您何时调用passdata()。你能给我看一些更详细的信息吗?我在私有的void ViewList中调用passdata(ViewList.FocusedItem)(你选择了主表单的dexchanged可能重复我这样做了,但是如果使用if(passdata!=null)它不会在两个表单之间传递数据吗?是的,在你初始化它之前它不会传递数据。如果
,尝试在上设置断点,您将发现它是否已初始化