【问题标题】:Passing Object and all of its values between forms在表单之间传递对象及其所有值
【发布时间】:2016-01-11 13:17:12
【问题描述】:

如何将一个对象及其所有值从表单 A 传递到表单 B?

以下是我生成的一些“假设代码”,我在其中搜索列表以多态地预订法案。找到名称后,我会根据预订的时间计算价格。所有这些都是使用对象's'完成的。所有这些代码都在表单 A 上的一个按钮上。

private void btnEnter_Click(object sender, EventArgs e)
{            
    string searchName = Convert.ToString(lstActs.SelectedItem);
    foreach (Singer s in singers)
    {
        if (String.Compare(searchName, s.Name) == 0)
        {
            s.HoursBooked = Convert.ToInt32(nudHours.Value);
            MessageBox.Show(Convert.ToString(s.HoursBooked), s.Name);
            double price = s.CalculatePrice(s.Price, s.HoursBooked);
            MessageBox.Show(Convert.ToString(price));
        }
    }


    Confirm myNewForm = new Confirm();
    myNewForm.ShowDialog();
    this.Hide();
}

【问题讨论】:

    标签: c# forms oop object parameter-passing


    【解决方案1】:

    使用要显示的数据创建一个新类:

    public class ConfirmationData
    {
        // some properties
    }
    

    填充对象:

    ConfirmationData data = new ConfirmationData();
    
    string searchName = Convert.ToString(lstActs.SelectedItem);
    foreach (Singer s in singers)
    {
        if (String.Compare(searchName, s.Name) == 0)
        {
            s.HoursBooked = Convert.ToInt32(nudHours.Value);
            MessageBox.Show(Convert.ToString(s.HoursBooked), s.Name);
            double price = s.CalculatePrice(s.Price, s.HoursBooked);
            MessageBox.Show(Convert.ToString(price));
    
            .... fill 'data' with the Information you want to display
        }
    }
    

    最后将数据传递给Confirm Dialog并显示出来:

    Confirm myNewForm = new Confirm(data);
    myNewForm.ShowDialog();
    

    【讨论】:

    • 您好,感谢您的回复。您是在建议我创建一个名为确认数据的新课程吗?仅仅因为我有一个名为“确认”的表单,这就是我需要的对象以及传递给它的所有数据。在底部,我只是在表格之间切换。感谢您的宝贵时间!
    • “确认数据”只是一个传输对象。是的,一个新的班级。因为要传递给 Confirm 视图的数据(歌手)在底部无法访问,所以您需要使用另一个对象。您还可以传递歌手列表 (List) 作为传输对象。
    • 嘿伙计,我添加了一个新类,如你所说,然后我将数据作为参数传递给新表单,并为该表单添加了另一个构造函数以接收数据私有 DataTransfer 数据;公共确认(){初始化组件(); } public Confirm(DataTransfer data) { this.data = data;我现在收到错误:不一致的可访问性:参数类型“DataTransfer”比方法“Confirm.Confirm(DataTransfer)”更难访问...任何想法,谢谢!
    • 将“DataTransfer”类标记为公开。
    • 你,我的朋友是一个救生员。非常感谢!
    【解决方案2】:

    您的 Confirm 类的工作取决于 Singer 类的值,不是吗?如果是这样,您可以向 Confirm 构造函数添加一个参数,如下所示:

    public Confirm(Singer singer)
    {
        //null-check I suppose
    }
    

    所以您编写的按钮按下处理程序将像这样结束:

    Confirm myNewForm = new Confirm(s);//where s is Singer
        myNewForm.ShowDialog();
        this.Hide();
    

    否则,您可以在 Confirm 类中添加一个新的公共属性,并在显示对话框之前为其赋值:

    Confirm myNewForm = new Confirm();
    myNewForm.Singer = s;
        myNewForm.ShowDialog();
        this.Hide();
    

    【讨论】:

    • 您好,感谢您的回复,我已经尝试过这些,但由于某种原因,我无法访问新表单上的对象“s”或其任何数据。我也尝试过重载构造函数,但似乎无法访问该对象:/
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2013-11-25
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    相关资源
    最近更新 更多