0

私はオンラインで探していますが、私がやろうとしていることに対する答えが見つかりません。私は MDI アプリケーションを作成しており、子フォームには DataGrid があります。子フォームでその DataGrid の DoubleClick イベントをサブスクライブする方法を理解する必要があります。

では、Form1 が親であるとしましょう。Form2 は子です。私はそのように Form2 を開きました:

Form2 f = new Form2 { Text = "Child", MdiParent = this };
f.Show();

ユーザーがそのフォーム (f) でデータグリッドをダブルクリックすると、それを検出できる必要があります。誰かが私を正しい方向に向けることができますか?

(これが明確に説明されていることを願っています)

4

2 に答える 2

1

AppDeveloper の答えはあなたが必要とするものですが、問題の核心は、親 MDI コンテナー (Form1) に対する Form2 の DataGrid のデフォルトの可視性である可能性があると感じています。Form1 は Form2 の DataGrid 内の任意のイベントをサブスクライブできますが、DataGrid がpublic (またはinternal ) としてマークされている場合のみです。既定では、その子コントロールはprivateとしてマークされるため、Form2 にのみ表示されます。

したがって、DataGrid のアクセス修飾子をprivateからpublicに変更するだけで、次のように Form1 からのイベントをリッスンできるはずです。

Form2 childForm = new Form2();
childForm.MdiParent = this;
// Form2.myDataGrid must be public/internal
childForm.myDataGrid.DoubleClick += new EventHandler(MyDataGridOnDoubleClick);
childForm.Show();

コンポーネント間の密結合を避けたい場合は、これを処理するより良い方法がありますが、これが A から B への最短ルートです。

于 2013-02-04T22:28:31.177 に答える
1

クラスからクラスにmyDataGrid.DoubleClick継承されたものを使用できますDataGridSystem.Windows.Forms.Control

    private void Form_Load()
    {
        myDataGrid.DoubleClick += MyDataGridOnDoubleClick;
    }

    private void MyDataGridOnDoubleClick(object sender, EventArgs eventArgs)
    {
        //throw new NotImplementedException();
    }
于 2013-02-04T21:36:53.180 に答える