【问题标题】:How to Transferring objects between windows forms in c#如何在 C# 中的窗体之间传输对象
【发布时间】:2009-08-08 17:45:13
【问题描述】:

我在 windows 窗体中得到了一个 ListView。当窗体加载 ListView 时,加载人员对象。当一些用户双击 ListView ,从 ListView.SelectedItem 属性获取人员对象并打开一个新表单并将此对象传输到新打开的表单时,我想这样做。

这是我将人员对象加载到 ListView 的代码:

public static void GetAll(ListView list)
{
    list.Items.Clear();
    using (FirebirdEntityz context = new FirebirdEntityz())
    {
        ObjectQuery<PERSONEL> query = context.PERSONEL;
        foreach (var item in query)
        {
            var mylist = new ListViewItem { Text = item.NAME };
            mylist.SubItems.Add(item.SURNAME);
            mylist.Tag = item;
            list.Items.Add(mylist);
        }
    }
}

private void Form1_Load(object sender, EventArgs e)
{                     
    GetAll(listView1);
}

这是我的个人转移对象:

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    PERSONEL personel = (PERSONEL)listView1.SelectedItems[0].Tag;
}

【问题讨论】:

  • 我希望 FirebirdEntityz 应该是 FirebirdEntityZ 而不是 FirebirdEntities

标签: c# .net winforms


【解决方案1】:

您可能只需在表单中添加一个公共PERSONEL 属性,然后在您的SelectedIndexChanged 事件处理程序中设置它。然后可以访问您的选择器表单的任何代码都可以访问您自定义选择的PERSONEL 属性。

【讨论】:

    【解决方案2】:

    在即将打开的新表单中,在表单类中添加一个新属性;

    private PERSONNEL Personnel{get; set;}
    public ShowPersonnel(PERSONNEL _personnel){
       this.Personnel = _personnel;
       //do whatever you want here
    }
    

    在主窗体中;

    private void listView1_SelectedIndexChanged(object sender, EventArgs e){
            PERSONNEL personnel = listView1.SelectedItems[0].Tag as PERSONNEL;
            Form2 form2 = new Form2();
            form2.ShowPersonnel(personnel);
            form2.Show();
    
    }
    

    可能包含拼写错误。将人员更改为人员。

    【讨论】:

      【解决方案3】:
      • 一种方法是拥有公共财产 正如 Factor Mystic 所建议的那样。
      • 或者你可以有一个参数化的ctor 并传递 Personnel 对象。虽然, 这可能会产生一些问题 Visual中表单的设计视图 工作室。

      【讨论】:

        【解决方案4】:

        您应该能够设置列表视图控件的显示成员。在进入 for 循环之前,请执行以下操作:

        list.DisplayMember = "Name"
        

        然后绑定对象。

        list.DataSource = query.ToList()
        

        所选项目将为您提供已绑定的对象...

        MessageBox.Show(((PERSONEL)list.SelectedItem).Name);
        

        这就是它在 .net 2.0 中的工作方式。但我确信在 3.0 及更高版本中可能有办法做到这一点......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-03-19
          • 2021-02-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-17
          • 1970-01-01
          相关资源
          最近更新 更多