2012-06-20 38 views
1

我在我的項目中有兩種形式,form1和form2。我爲我的項目添加了一個新類。它有一個方法接受一個表單對象,它應該能夠做以下事情。如何編寫一個類方法來處理c#中的現有表單#

  1. 顯示接受的形式的對象(frm.ShowDialog())

  2. 當我按下enterkey所顯示的形式(FRM)它應該關閉。 (無需向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(); 
    } 

} 

回答

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(); 
      } 
     }   
    } 
} 
+0

謝謝你的史蒂夫。這給了我一個錯誤。 「警告字段'WindowsFormsApplication15.Class1._frm'永遠不會分配給,並始終將其默認值爲空' – chaarr

+0

答覆已更新。我認爲這會避免錯誤,但現在不能測試。 – Steve

+0

哇,那工作。你是男人。謝了哥們。 – chaarr

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(); 
} 
+0

謝謝嗯。 frm.close()和frm.dispose()不工作,因爲我在類中的不同方法。 – chaarr

+0

@chaarr - 你是什麼意思,它確實工作?如果您將引用發送到表單,那麼它應該可以工作,只要您調用方法就行了。 –

0

創建自己的Form類,並使用AcceptButton,這樣

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

     AcceptButton = yourOkButtonObject; 
    } 
} 

其中yourOkButtonObject是「OK」布通,我想目前表單上的對象。如果沒有任何其他的按鈕確認的形式。

+0

謝謝你Tigran.can你請解釋一下這個更多? – chaarr

+0

您將表單的AcceptButton設置爲您要按「ENTERed」按鈕的按鈕,然後按*您的*表單類型。在你的程序中使用你的表單類型之後。所以*您的應用程序中的所有*表單將關閉ENTER按鈕按 – Tigran

相關問題