0

我被卡住了,在网站上找不到任何可以帮助我的东西。

我有的:

我有一个 WinForms 应用程序,使用 Visual Studio 2010 用 C# 编写。我构建了一个包含大约 10 个数据字段和属性的自定义类。在我的主表单上,我为每个对象的外壳声明了一个 List<>。它在表单级别声明。我为数据输入创建了一个自定义表单(因为MessageBox/Interaction.InputBox不起作用),主要是文本框和DateTime元素。也有一个ComboBox。卡在Customdialog_Load事件处理程序 - 想要在表单加载时填写。

问题:

ComboBox当表单加载以输入数据时,我需要提供项目。它需要从List<>主窗体中的特定属性中获取,我们称之为ClientName. 如果在我的列表中有 50 个客户List<>,那么我希望他们的名称属性填充组合框Collection[]

要求:

任何人都可以建议如何喂养ComboBox不在同一表格上的,最好不要复制 data/ List<>。其他大部分我都可以做,逻辑流程都是正确的。我确实知道如何在同一个表单上以正常方式将项目添加到集合中。

编辑:

如果必须,我可以在主窗体上为客户名称创建一个单独的数组。但它必须在主窗体上。所以组合框仍然需要从不同形式的数组中填充。

编辑2:

我还在大学一年级。我们还没有完成DataBinding,但我确实知道有更好的方法来完成我想要完成的事情,只是我还没有想到这些工具。我的工作远远领先于班级。谢谢大家的帮助,很快!会继续努力!

4

3 回答 3

1

当您创建第二个表单的实例时,在构造函数中传递对您的 List 的引用并将其存储在第二个表单内的表单级变量中。然后使用它在该表单加载事件中初始化您的组合框

在你的主要形式

List<Customer> myCustomerList;

.....
using(Customdialog f = new CustomDialog(myCustomerList))
{
    if(DialogResult.OK == f.ShowDialog())
    {
        ..... 
    }
}

在您的 CustomDialog 类中

public class CustomDialog
{
    List<Customer> _customerList;

    public CustomDialog(List<Customer> customers)
    {
        InitializeComponent();
        _customerList = customers;
    }

    private void CustomDialog_Load(object sender, EventArgs e)
    {
         comboBox1.DataSource = _customerList; 
         comboBox1.ValueMember = "Id";  // Supposing the Customer object contains ID property
         comboBox1.DisplayMember = "ClientName";   // The property shown on the combobox items
    }
}
于 2012-08-06T17:52:56.037 回答
1
class MyDialog : Form
{
    public IEnumerable<Whatever> Items
    {
        get { return _items; }
        set 
        { 
            _items = value; 
            someComboBox.Items = value; 
        }
    }

    public MyDialog(IEnumerable<Whatever> items) 
    { 
        InitializeComponent();
        Items = items;
    }
}

现在您可以通过构造函数和/或稍后单独传递它们。

于 2012-08-06T17:54:17.347 回答
0

如果您被迫走Winforms路线,那么:(但听起来您需要一些关于传递东西的建议(也许是数据绑定?)

理想情况下,您需要将数据传递到自定义表单(我假设您有一个主表单和一个弹出窗口/另一个打开的表单)。

一种方法是在第二个表单上创建一个属性,该属性是List<>类型并在打开表单之前分配它......例如

在 form2.cs

// an auto property will work well here
public List<YourClass> YourClassList { get; set;}

然后在你的 form1.cs

// When the user opens the second form
Form2 frm2 = new Form2();
frm2.YourClassList = yourClassListFromThisForm;
frm2.ShowDialog(); // etc

您是否也有填充框或使用数据绑定的问题?

老实说,如果您在这方面没有做太多工作,我会认真考虑迁移到 WPF - 它在各个方面都好得多

于 2012-08-06T17:54:45.287 回答