如何在2个表单之间传递数据?

时间:2011-04-24 19:04:53

标签: c# delegates

我使用委托在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);

4 个答案:

答案 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.
    }
}