繁体   English   中英

使用自定义DialogForm进行Winform,使用ComboBox从List <>进行提供

[英]Winform with Custom DialogForm with ComboBox feeding from List<>

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

我有的:

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

问题:

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

请求:

任何人都可以建议如何提供不在同一表格上的ComboBox ,最好不要复制数据/ List<> 我可以做大多数其他事情,逻辑流程都是正确的。 我知道如何在同一表单上以正常方式将项添加到集合中。

编辑:

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

编辑2:

我还是大学一年级。 我们还没有完成DataBinding ,但我知道有更好的方法来完成我想要完成的任务,我还没有想到的工具。 我在课堂前工作。 谢谢你的帮助,非常快! 会不断尝试!

当您创建第二个表单的实例时,将构造函数传递给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
    }
}
class MyDialog : Form
{
    public IEnumerable<Whatever> Items
    {
        get { return _items; }
        set 
        { 
            _items = value; 
            someComboBox.Items = value; 
        }
    }

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

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

如果你被迫沿着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 - 它在各方面都要好得多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM