通过表单C#传递列表实例

时间:2015-04-11 16:24:12

标签: c# forms list

我有一个名为Car的类,它接受参数(字符串构建,字符串制造商,字符串颜色)。我还有一份汽车清单,其中存放了所有汽车。汽车以及其数据的形式显示。一切正常。我有两种形式,一种是显示汽车的主要形式,另一种是可以添加新车或修改现有车型的形式。

在第一张表格中,可以右键单击汽车并选择编辑。我试图将选定汽车的实例从第一种形式传递到第二种形式。它需要1个参数(Car selectedCar)。我发现很难将实例发送到第二种形式,在那里可以修改构建,制造商,颜色等。我怎么能这样做?我已经尝试了好几个小时,这令人难以置信。

我将非常感谢您的帮助,谢谢您的时间。

修改

感谢您的所有评论。这里有一些代码,只是对我正在努力完成的更详细的解释。

我有两种形式: 主表单 - 显示汽车及其相应信息。汽车存储在汽车列表中。我有一个汽车类,需要构建,制造商和汽车的字符串。目前已设置属性。可以在这里选择一辆车,以便稍后进行编辑。或者添加新表格。

**添加&编辑表格** - 如果在主表单上单击了添加新车,则此表单允许添加新车,它具有构建,制造商和颜色的文本字段。提交此表单后,数据将被发送回主表单,然后将其添加到汽车列表中。

(这就是我要寻求帮助的方法) - 如果用户选择汽车并点击编辑,则添加&编辑表单显示,文本字段填充相应的数据,这些数据已存在于每辆特定汽车的汽车列表中,因此......构建,制造商和颜色。

在主窗体上,我需要将选定的汽车(分配给_SelectedCar)发送到Add&编辑表单,填充文本字段,以便对其进行编辑。

CODE: (这是当CarForm以1参数启动时运行的代码,即从MainForm存储的Car。

public partial class CarForm : Form
    {
    Car storedCar;
    bool editMode;
    public  CarForm(Car storedCar):this()
        {
            this.storedCar = storedCar;
            this.Text = "Edit Car";
            editMode = true;
            carBuildText.Text = storedCar.Build;
            carManufacturerText.Text = storedCar.Manufacturer;
            carColour.Text = storedCar.Colour;
        }
}

在MainForm中,单击编辑按钮时,将运行当前代码,但它不起作用。特定的选定汽车将分配给_storedCar

private void editCar_Click(object sender, EventArgs e)
        {
            CarForm carForm = new CarForm(_storedCar)
        }

所以_StoredCar拥有关于Car的所有信息,它的构建,制造商和颜色。因此,我只是尝试通过启动带有汽车数据的表单来传递它,然后从Add& amp;编辑表格。

我可以从Add& amp;中添加一辆新车。编辑表单,并将其传递回主表单,但我很难填充主汽车添加汽车表格。

对于这篇冗长的帖子感到抱歉。

2 个答案:

答案 0 :(得分:0)

大多数评论者都比我更好,他们希望您发布代码以帮助分析您正在做的事情,并为您提供必要的指导。今天早上我心情很好,所以我要列出你可以做的事情,但是留下来找出你没有实际代码的方法。

您可以尝试两种方法。

1) Hot Potato方法。    无论您的用户在第一个表单中点击选择汽车的元素是什么,如果您将该列表直接绑定到汽车,您可以从该项目数据项获得汽车的参考。然后你可以将它传递给你的第二个表格。

2)分享是关怀    如果您无法从列表中引用Car,或者您希望汽车列表仅在第一个表单之外具有重要性,则创建第三个静态类来保存该列表。当有人点击第一个表单中的项目时,使用您从该项目中获得的任何标识符,在静态类中找到该项目本身并将其传递给第二个表单。

请注意,无论是哪种情况,第一个表单上的UI可能会立即显示更改,也可能不会立即显示更改,具体取决于您是否使用数据绑定,如果是,则使用哪些绑定属性。

答案 1 :(得分:0)

两种形式的关系是什么?特定事件后第二张表格会打开吗?在这种情况下,您可以通过构造函数将列表或选定项目传递给另一种形式。

或者您可以使列表成为静态字段,以便在所有表单之间共享。您可以使用静态字符串变量或包含当前所选项目的内容,然后您可以以其他形式使用它。