【问题标题】:Passing an instance of a list through forms C#通过表单 C# 传递列表的实例
【发布时间】:2015-04-12 02:14:52
【问题描述】:

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

在第一个表单上,可以右键单击汽车并选择编辑。我正在尝试将所选汽车的实例从第一种形式传递到第二种形式。它需要 1 个参数(Car selectedCar)。但是,我发现很难将实例发送到可以修改构建、制造商、颜色等的第二种形式。我该怎么办?我已经尝试了几个小时,这让我难以置信。

我将非常感谢任何帮助,感谢您的宝贵时间。

编辑:

感谢所有 cmets。这是一些代码,只是对我要完成的工作的更详细说明。

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

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

(这就是我正在寻求帮助的内容)- 如果用户选择汽车并单击编辑,则会显示“添加和编辑”表单,并且文本字段会填充相应的数据,这些数据已经存在于“汽车”列表中对于每辆特定的汽车,所以......建造、制造商和颜色。

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

代码: (这是使用 1 个参数启动 CarForm 时运行的代码,即从 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,拥有关于汽车的所有信息,它的构造、制造商和颜色。所以我只是试图通过使用汽车数据启动表单来传递它,然后从“添加和编辑表单”访问数据。

我能够从“添加和编辑”表单添加一辆新车,并将其传递回主表单,但我正在努力从主车填充“添加汽车”表单。

很抱歉这篇冗长的帖子。

【问题讨论】:

  • 是的,这是可能的,我们应该如何提供帮助?
  • WinForms 中没有什么特别的东西可以阻止你这样做 - 只是传递实例。或者向我们展示您在代码中的尝试。
  • 这很简单,听起来您已经完成了大部分工作。如果代码,请发布相关部分并描述您尝试过的内容以及为什么它不起作用。
  • 肯定贴一些代码。
  • @TheodorosChatzigiannakis 我已经发布了一些代码,很抱歉它冗长。

标签: c# forms list


【解决方案1】:

大多数评论者都比我优秀,他们希望您发布代码以帮助分析您在做什么并为您提供必要的指导。今天早上我心情很好,所以我将列出你可以做的事情,但由于没有真正的代码,所以让你自己弄清楚如何做。

您有两种方法可以尝试。

1) 热土豆法。 无论您的用户在第一个表单中单击哪个元素来选择汽车,如果您将该列表直接绑定到汽车,您可以从该项目数据项中获取对汽车的引用。然后你可以将它传递给你的第二个表单。

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

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

【讨论】:

    【解决方案2】:

    两种形式的关系是什么? 2nd form 是否在某些事件后打开?在这种情况下,您可以通过构造函数将列表或选定项传递给其他表单。

    或者您可以将列表设为静态字段,以便在所有表单之间共享。您可以使用 静态字符串变量 或保存当前选定项目的东西,然后您可以在其他形式中使用它。

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 2022-11-16
      相关资源
      最近更新 更多