2015-08-28 103 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

要让父母对行动的反应孩子窗口,你可能*想要提出一个事件,或者传递一个委托来调用,而不是依赖于设置属性,或者至少在设置属性时进行搜索。 –