私のプロジェクトのメイン フォームはフォーム 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 に移動します。
私を助けてください。私はこれが混乱であることを知っていますが、あなたの助けに感謝します:)