我正在尝试通过点击另一个活动表单中的按钮来更改模态主窗体上TextBox上的文本,需要帮助。
Main form *Modal mode
public void changetext(){
textbox1.text = textnew;
}
form2 *active form
private void btnChange_Click(object sender, EventArgs e)
{
mainform form1 = new mainform;
public String textnew = "NEW"
form1.changetext();
this.close
}
我已经厌倦了使用这段代码,但它给了我错误:在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke。:
public void LabelWrite(string value)
{
if (InvokeRequired)
Invoke(new LabelWriteDelegate(LabelWrite), value);
else
{
textBox1.Text = value;
}
}
delegate void LabelWriteDelegate(string value);
答案 0 :(得分:1)
我认为这是一个逻辑问题。如果我理解您的要求,您有一个包含搜索文本框的主表单。当用户启动serach时,您打开一个模式窗体,其中显示所有可能的结果。用户选择他想要的值,然后在主窗体中获得结果。它是否正确?如果是这样,你应该这样做:
例如:
var result = null;
var modal = new ModalForm(query);
if(modal.ShowDialog() == DialogResult.OK) // This means the user has selected a value
{
result = modal.SelectedResult;
}
modal.Close();
modal.Dispose();
答案 1 :(得分:0)
最简单的方法是将新文本传递给模态窗口。 例如:
主要表格模态模式
public void changetext(String textnew){
textbox1.text = textnew;
}
form2活动表单
private void btnChange_Click(object sender, EventArgs e)
{
mainform form1 = new mainform;
form1.changetext("NEW");
this.close
}
如果我是你,我也会更改表单名称,它们有点令人困惑。
附:我仍然无法获得所需的this.close
。