C# 在窗体之间传递对象及其所有值

C# 在窗体之间传递对象及其所有值,c#,forms,oop,object,parameter-passing,C#,Forms,Oop,Object,Parameter Passing,如何将对象及其所有值从表格A传递到表格B 下面是我制作的一些“假设代码”,我搜索了一个列表,以多态方式预订一个Act。找到名字后,我会根据预订的小时数计算价格。所有这些都是使用对象“s”完成的。所有这些代码都在表格a的按钮上 private void btnEnter_Click(object sender, EventArgs e) { string searchName = Convert.ToString(lstActs.SelectedItem);

如何将对象及其所有值从表格A传递到表格B

下面是我制作的一些“假设代码”,我搜索了一个列表,以多态方式预订一个Act。找到名字后,我会根据预订的小时数计算价格。所有这些都是使用对象“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();
}

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

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 myNewForm = new Confirm(data);
myNewForm.ShowDialog();

你的确认课的成绩取决于歌手课的价值,不是吗?如果是,您可以向Confirm构造函数添加一个参数,如下所示:

public Confirm(Singer singer)
{
    //null-check I suppose
}
因此,您编写的按钮按下处理程序的结尾如下:

Confirm myNewForm = new Confirm(s);//where s is Singer
    myNewForm.ShowDialog();
    this.Hide();
否则,您可以添加新的公共属性以确认类,并在显示对话框之前为其赋值:

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

嘿,谢谢你的回复。你是在建议我创建一个名为confirmation data的新类吗?因为我有一个名为“Confirm”的表单,这就是我需要将对象及其所有数据传递到的表单。在底部,我只是在表单之间切换。谢谢你的时间!“确认数据”只是一个传输对象。是的,一门新课。由于要传递到确认视图的数据(singer)在底部不可访问,因此需要使用另一个对象。你也可以将歌手列表(list)作为传输对象传递。嘿,伙计,我像你说的那样添加了一个新类,然后将数据作为参数传递给新表单,并向该表单添加另一个构造函数以接收数据私有数据传输数据;public Confirm(){InitializeComponent();}public Confirm(DataTransfer data){this.data=data;}我现在得到一个错误:可访问性不一致:参数类型“DataTransfer”的可访问性不如方法“Confirm.Confirm(DataTransfer)”。。。任何想法,谢谢!将“数据传输”类标记为公共类。你,我的朋友,是一个救生员。非常感谢你!嘿,谢谢你的回复,我已经尝试了这些,由于某些原因,我无法访问新表单上对象的或其任何数据。我也尝试过重载构造函数,但似乎无法访问对象:/