我使用委托在2表单之间传递数据 MainForm的;
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();
在form2中
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的null对象(ViewList.FocusedItem);
答案 0 :(得分:1)
您可以为要传递数据的表单创建另一个构造函数。构造函数将获取所需数据类型的参数,但请确保使用
调用默认构造函数: base()
答案 1 :(得分:1)
似乎你是在创建时调用委托。我理解正确您打算将数据从MainForm
传递到PropertiesForm
,但初始化仅在PropertiesForm
加载期间发生。您很可能遇到架构问题,但现在只需尝试更改ViewList_SelectedIndexChanged
方法,如下所示:
public PassData passdata = null;
private void ViewList_SelectedIndexChanged(object sender, EventArgs e)
{
if(passdata != null)
{
passdata(ViewList.FocusedItem);
}
}
答案 2 :(得分:0)
我认为在表单之间传递数据不是一个好主意。尝试使用一些中间人来包含数据。
答案 3 :(得分:0)
这样做,
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.
}
}