3

MySQL テーブルのデータを表示するアプリケーションがあります。基本的に、私のアプリケーションは 2 つのフォームで構成されています。メイン フォームと、データベースにデータを追加するためのフォームです。

メイン フォームには、データベース内のすべてのエントリと関連情報が表示されます。ユーザーがデータベースに新しいエントリを追加したい場合、情報の入力を求めるセカンダリ フォームが開かれます。情報が入力されたら、ユーザーが [送信] ボタンを押すと、フォームが閉じます。私の問題は、セカンダリ フォームを閉じたときlistBoxに、メイン フォームが更新されず、新しく追加されたエントリが反映されないことです。

ユーザーがセカンダリ フォームを送信したときに実行されるコードは次のとおりです。

    private void closeWindow()
    {
        mainForm parent = new mainForm();
        parent.listParts.Refresh();
        this.Close();
    }

更新するために を呼び出したときにlistBox、新しく追加した情報が表示されない理由はありますか? おそらく私は間違った順序で何かを呼んでいますか?それとも、そのRefresh()方法はそのように機能しませんか?

どんな助けでも大歓迎です!または、これを行うためのより良い方法を知っている場合は、それを聞いてみたいです!

4

3 に答える 3

4

問題は、間違ったフォームを更新していることです:

private void closeWindow()
{
    mainForm parent = new mainForm();
    parent.listParts.Refresh();
    this.Close();
}

を使用 new mainForm()しているため、「mainForm」の完全に別のインスタンスを割り当て、そのコンテンツを更新しています。これは、既存の開いているフォームには影響しません。

mainFormへの参照をセカンダリ フォームのコンストラクタに渡すことをお勧めします。次に、を呼び出すために使用する必要がある mainForm のインスタンスを認識Refresh()します。

于 2012-04-06T17:47:05.960 に答える
2

リードは、あなたがしたことがうまくいかない理由について答えを出しました。実際にそれを修正する方法の1つの可能な解決策は次のとおりです。

MainForm のいくつかのイベント ハンドラーで:

var otherForm = new SomeOtherForm();
otherForm.Closed += (sender, args) =>
{
  //update the listbox in MainForm here
};

リストボックスを更新するために 2 番目のフォームからの情報が必要な場合は、 でSomeOtherForm必要なデータを公開するパブリック プロパティを作成しますMainForm

于 2012-04-06T17:51:35.073 に答える
1

もう一度データをリロードする必要があると思います。もう一度取得して、データソースを設定します

あなたの最初のフォームのタイプであるあなたの子フォームに親プロパティを持ってください。

このようなもの。

あなたの親フォーム

public partial class KitTypes : Form
{

 public void ReloadData()
 {
   // Get the data and Set as datasource of control
 }

}

そして子フォーム

public partial class Kit : Form
{
    private int _KitId=0;
    private KitTypes _parentForm = null;


 public Kit(KitTypes parentForm)
 {
   _parentForm =parentForm;
 }
}

そして、最初のフォームから、このオブジェクトを作成するときに、親フォームをパラメーターとして渡します

  Kit objChild=new kit(this);
  objChild.Show();

あなたの子フォームでは、このように親フォームのパブリックメソッドを呼び出すことができます

this._parentForm.ReloadData(); 
于 2012-04-06T17:46:20.610 に答える