C#でいくつかのフォームを含むWindowsフォームアプリケーションを作成しています。
ShowDialog()を使用して、メインフォームから2番目のフォームを呼び出します。
次に、(2番目のフォームの)コンボボックスにカスタムオブジェクトを入力しようとします。カスタムクラスには、DataTableをArrayListに変換するメソッドがあります。ただし、ArrayListに項目を追加しようとすると、SplitPanelペイントイベントのイベントハンドラーが発生します。さらに、そのパネルはメインフォームに配置されます。
コードは次のとおりです。
これは、2番目のフォームを表示する場所です。
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_Load
とプログラムは未定義のどこかにジャンプします。(ペイントイベントが発生することは前に述べましたが、コードから削除したため、発生しなくなりました。デバッグ中は、プログラムはLoadイベントハンドラーが未完成のまま機能し続けます。興味深いのは、 Paintイベントハンドラーのコードは、2番目のフォームを呼び出しているコードブロックの直後にありました)。
これはバグでしょうか?助けてください!