2011-03-29 45 views
0

我曾經閱讀過一篇關於如何創建一個新窗體的教程,並使其在所有其他窗口之上,因此您只能點擊它 - 就像在Internet Explorer中一樣,例如當您單擊瀏覽文件時您不能單擊主窗口直到完成使用瀏覽窗口。如何創建新表單並使所有其他表單無法點擊直至該表單被丟棄?

什麼是從表單獲取值的最佳方式,對於我的第二種形式的exmpale我有一個列表框,當用戶單擊其中一個值時,第一個表單(mainform)應該獲取事件 - 是這可能嗎?

回答

2

你在找什麼是展現形式爲模式對話框。 Form.ShowDialog()Here you can read more about this topic.

您可以在幾個方式訪問父窗體(回體)

  • 製作模式窗體構造函數,作爲參數
  • 認沽父窗體參考接受父母成可以訪問一些全局變量從模式的窗體
  • ...

爲了得到孩子的事件形成,你可以做這樣的事情:

form.myListBox.SelectedIndexChanged += new System.EventHandler(this.myListBox_SelectedIndexChanged); 
form.ShowDialog(); 

您需要公開myListBox控件以便從父(調用者)窗體訪問它。

+0

非常感謝:)爲我工作。我用這個有點不同,但工作:) – 2011-03-29 18:39:04

3

只需使用模態窗體,通過在創建實例後調用.ShowDialog()來完成。

要獲取值,只需將它們存儲在窗體的屬性中,然後在父窗口/代碼超出範圍之前從父窗口/代碼讀取這些屬性。您將在新窗體的代碼隱藏中處理SelectionChanged事件,並使用該值設置屬性。

6

這聽起來像你想:

using (MyCustomForm form = new MyCustomForm(...)) 
{ 
    if (form.ShowDialog() == DialogResult.OK) { 
     // Now use the values in form 
     // (e.g. through properties of the form) 
    } 
} 
+0

您的答案並不完整。您錯過了從父窗體獲取值的部分。 – HABJAN 2011-03-29 16:23:53

+0

@HABJAN:這個問題是關於從孩子*形式獲取價值的問題,據我所知...因此我的意見。如果我的問題不夠清楚,希望OP能提供更多關於他們想要做什麼的細節。 – 2011-03-29 16:25:24

+0

啊..對不起,我誤解了這個問題。我的錯。 – HABJAN 2011-03-29 16:31:13

0

試試這個:

創建形式和 在你調用代碼執行以下操作:

MyForm form = new MyForm(); 
form.ShowDialog(); 

要得到值回來,只需在表單上創建映射到控件值的屬性(確保在訪問屬性之前不要處理表單!):

public class MyForm 
{ 
//... 

    public string FirstName 
    { 
    get 
    { 
     return firstNameTextBox.Text; 
    } 
    } 
} 

對話完成後,從您的調用代碼然後調用屬性:

MyForm form = new MyForm(); 
if(form.ShowDialog() == DialogResult.OK) 
{ 
    string myFirstName = form.FirstName; 
    // etc 
} 
+0

這不會真正幫助,因爲我需要值作爲一個事件 - 有人選擇名稱的時刻。 – 2011-03-29 18:37:43

相關問題