2

私のプロジェクトのメイン フォームはフォーム 1 です。これは実際には患者ウィンドウを検索しています。DB からの既存の患者のリストで満たされたコンボボックスがあります。このコンボボックスには、以下に記述された関数がファイルされています。この関数はコンストラクタから呼び出されます。

    public void fillComboBox()
    {
        items.Clear();
        items.Add("Select Name");
        MainDataContext context = new MainDataContext(); //dotConnect Linq to sqlite
        var query = from p in context.Patients
                    orderby p.Name ascending
                    select p;
        foreach (Patient p in query)
        {
            items.Add(p.Name);
        }
        comboBox1.DataSource = items;
    }

(正常に動作します)。items のタイプは「List<string>」です。すべての新しいフォームの作成時に、form1 のインスタンスを渡します。お気に入り

Form3 f3 = 新しい Form3(これ);

患者が見つかった後、コントロールは Form3 に移動して患者情報を表示するか、必要に応じて編集します (正常に動作します)。次に、Form4 に移動して、赤ちゃんの成長チャートを作成します (正常に動作します)。新しい患者を追加すると、問題が表示されます。コントロールは、ボタン 'New Patient' によって Form1 から Form2 に移動します。Form2 で患者を追加し、Form3 と Form4 に移動します (正常に動作します)。Form4 での作業が完了したら、このコードでコントロールが Form1 に転送されます

    Form1 f1;
    public Form4(Form1 f1)
    {            
        InitializeComponent(); //and etc
        this.f1 = f1;
    }
    //...other functions etc
    private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        f1.Show();
    }

ただし、Form1 のコンボ ボックスは更新されません。同じ古いリストが含まれています。しかし、このようにForm4で新しいForm1を作成すると

private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        Form1 form1 = new Form1();
        form1.Show();
    }

それはうまくいきますが、このように。Form1 の 1 つのインスタンスが表示され、もう 1 つのインスタンスが非表示になります。上記の説明のように、この新しい Form1 はその子フォーム (2,3,4) を作成します。私はこれを望んでいないので、以前のソリューションに戻りました (Form4 で新しいインスタンスを作成せずに Form1 に移動します)。しかし、これはコンボボックス(フォーム1)で更新がなく、プログラムを閉じるとエラーが発生します。

コレクションが変更されました。列挙操作が実行されない場合があります。

Form4でもこのコードを試しました

private void button4_Click(object sender, EventArgs e)
    {
        this.Close();
        f1.fillcombobox();
        f1.Show();
    }

また、Form1 の onShown および onLoad イベントをオーバーライドしようとしましたが、痛みと無駄だけではありません。それから私は試しました

Application.Restart();

患者が挿入された後の Form2。これは確かに私を助けました。しかし、別の問題につながります。コントロールは、新しい患者が挿入された後に Form3 に移動したかった Form1 に移動します。

私を助けてください。私はこれが混乱であることを知っていますが、あなたの助けに感謝します:)

4

2 に答える 2

1

コレクションが変更されました。列挙操作が実行されない場合があります。

このエラーは、コレクション (おそらく foreach) を列挙し、同時にそれを変更していることを示しています。これは許可されていません。列挙しているコレクションを変更することはできません。

ただし、例外をスローしている行を表示する必要があります。

于 2013-08-18T09:10:49.403 に答える
1

同じリスト インスタンス (アイテムと呼ばれる) を使用しているようで、それが List オブジェクトであると思われるため、リストの内容が変更されたときにコントロールに通知されないため、UI でデータが更新されません。

items コレクションに BindingList を使用してみましたか? この例を見てください

于 2013-08-18T11:33:26.387 に答える