C#从另一个表单更改模式表单上的文本框文本

时间:2012-11-19 08:09:35

标签: c#

我正在尝试通过点击另一个活动表单中的按钮来更改模态主窗体上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);

2 个答案:

答案 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