0

我正在制作一个 Windows 窗体应用程序,它涉及 C# 中的多个窗体。
我用 ShowDialog() 调用主表单中的第二个表单。

然后我尝试用自定义对象填充组合框(在第二个表单上)。自定义类有一个将 DataTable 转换为 ArrayList 的方法。但是,每当我尝试向 ArrayList 添加项目时,都会引发 SplitPanel 绘制事件的事件处理程序。此外,该面板放置在主窗体上。

这是代码:

这是我显示第二种形式的地方:

frmInsertSurovina insertSurovina = new frmInsertSurovina(0);
        insertSurovina.ShowDialog();

这是我填充组合框的地方:

private void frmInsertSurovina_Load(object sender, EventArgs e)
    {
        if (mode == 0) button1.Text = "Внеси";
        else button1.Text = "Зачувај";

        DB data=new DB();
        DataTable devizi = data.GetDevizi();
        DeviziCollection collDevizi = new DeviziCollection();
        collDevizi.LoadCollection(devizi);
        cmbDeviza.DataSource = collDevizi.Collection;
        cmbDeviza.DisplayMember = "Text";
        cmbDeviza.ValueMember = "Value";

        //some other code here
    }

这是自定义类:

public class DeviziCollection
{
    public ArrayList Collection { get; set; }
    public DeviziCollection()
    {
    }
    public void LoadCollection(DataTable table)
    {
        foreach (DataRow row in table.Rows)
        {
            Deviza item = new Deviza();
            item.Text = row["Naziv"].ToString();
            item.Value = row["ID"].ToString();
            Collection.Add(item);
        }
    }

}

现在,在最后一行Collection.Add(Item);执行frmInsertSurovina_Loadbeaks 和程序跳转到未定义的地方。(我之前提到过绘制事件引发,但我从代码中删除了它,它不再引发。当我调试时,程序只是继续运行,加载事件处理程序未完成。有趣的是Paint 事件处理程序的代码就在我调用第二种形式的代码块之后)。

这可能是一个错误吗?请帮忙!

4

1 回答 1

0

毕竟是个例外。我刚刚添加

Collection=new ArrayList();

在 LoadCollection() 方法中。

于 2012-07-08T01:18:39.880 回答