1

プロジェクトには、form1とform2の2つのフォームがあります。プロジェクトに新しいクラスを追加しました。フォームオブジェクトを受け入れるメソッドがあり、次のことができるはずです。

  1. 受け入れられたフォームオブジェクトを表示します(frm.ShowDialog())

  2. 表示されたフォーム(frm)でEnterキーを押すと、閉じます。(form2のkeydownイベントにコードを追加せずに)。新しく追加されたクラスによって処理される必要があります。

新しいkeyeventhandlerを追加しようとしましたが、ここから先に進む方法がわかりません。(Dispose()が機能しません)これを解決するのを手伝ってください。ありがとうございました。

class Class1
{
    public static void SearchResultBox(Form2 frm) 
    {            
        frm.KeyDown += new KeyEventHandler(frm_KeyDown);
        frm.ShowDialog();

    }

    static void frm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode==Keys.Enter)
        {


        }
        throw new NotImplementedException();
    }

}
4

3 に答える 3

0

frm.close()およびfrm.dispose()は、要求しているタスクを実行しません。

static void frm_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode==Keys.Enter)
    {
        frm.close();
        frm.dispose();

    }
    throw new NotImplementedException();
}
于 2012-06-20T10:52:20.680 に答える
0

独自のFormクラスを作成し、次のようにAcceptButtonを使用します

public class MyOwnForm : Form 
{
    private override OnLoad(...)
    {
        base.OnLoad(..);

        AcceptButton = yourOkButtonObject;
    }
}

フォームに表示されていると思わyourOkButtonObjectれる「OK」ボタンのオブジェクトはどこにありますか。フォームを確認する他のボタンがない場合。

于 2012-06-20T10:53:00.643 に答える
0

渡されたフォームへの参照を保持し、その参照を使用してフォームを閉じる必要があります

class Class1 
{   
    private static Form2 _frm = null;  
    public static void SearchResultBox(Form2 frm)      
    {                     
         _frm = frm;
         frm.KeyDown += new KeyEventHandler(frm_KeyDown);         
         frm.ShowDialog();      
    }      
    static void frm_KeyDown(object sender, KeyEventArgs e)     
    {         
        if (e.KeyCode==Keys.Enter)         
        {     
             if(_frm != null)
             {      
                 _frm.Close();
                 _frm.Dispose();
             }
        }         
    }
}  
于 2012-06-20T10:53:09.247 に答える