Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在两个表单之间传递数据?_C#_Delegates - Fatal编程技术网

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)它不会在两个表单之间传递数据吗?是的,在你初始化它之前它不会传递数据。如果
,尝试在
上设置断点,您将发现它是否已初始化