2015-08-28 102 views
-1

我有2種形式。首先是一個簡單的記事本,我做了一個查找功能。是非常好的作品,但我加了this.Close();得到結果。如果我不關閉FindForm,Find按鈕的操作不起作用。我看到第一個表單被阻止,我不能寫另一個文本。如果我刪除this.close(),並且在按下查找之後關閉FindForm工作。 如何在新線程中打開FindForm?我用FindForm f = new FindForm();f.showDialog(); 如果我做一個Thread Th;我使用這個線程來打開FindForm,我的功能將不再工作。是否有任何方法打開其他形式沒有阻止第一種形式?顯示或顯示對話框其他形式C#

FindForm

public FindDialog() 
{ 
    InitializeComponent(); 
} 
private void button_Find_Click_1(object sender, EventArgs e) 
{ 
    Form1.FindText = textBox_Text.Text; 
    this.Close(); 
} 

的MainForm

public void findNewToolStripMenuItem_Click(object sender, EventArgs e) 
{ 

    FindDialog gtl = new FindDialog(); 
    gtl.Show(); 
    richTextBox1.Select(); 

    if (FindText != null) 
    { 
     k = richTextBox1.Find(FindText); 
    } 

} 
+0

顯示實際的代碼。你不能使用gui對象的後臺線程。 – LarsTech

+0

你想打開單個表單並使父表單正常工作嗎? –

+0

private void button_Find_Click_1(object sender,EventArgs e) Form1.FindText = textBox_Text.Text; this.Close(); } – RedoColor

回答

3

調用ShowDialog將阻塞調用者,直到對話框關閉(即它是模態) - 如果你不想那麼這種行爲稱之爲Show做哪些將無模式地打開子窗體(即呼叫代碼可以繼續)

例如,您可以執行如下操作:

public void findNewToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    FindDialog gtl = new FindDialog(); 
    gtl.Show(); // Execution will continue immediately 
    richTextBox1.Select(); 
    if (FindText != null) 
    { 
     k = richTextBox1.Find(FindText); 
    } 
} 
+0

如果我使用顯示不工作...我的意思是..工作,但我需要關閉並再次打開找到第一個變量 – RedoColor

+0

所以,第一次沒有找到任何東西 – RedoColor

+0

要讓父母對行動的反應孩子窗口,你可能*想要提出一個事件,或者傳遞一個委託來調用,而不是依賴於設置屬性,或者至少在設置屬性時進行搜索。 –