0

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

2 回答 2

1

我认为有一个逻辑问题。如果我理解您的要求,您将拥有一个包含搜索文本框的主表单。当用户启动搜索时,您会打开一个模式表单,其中显示所有可能的结果。用户选择他想要的值,然后你在主窗体中得到结果。它是否正确?如果是这样,您应该这样做:

  • 在包含结果的模态表单上创建一个公共属性。
  • 创建公共属性或在模式表单上创建新的构造函数以传递查询。
  • 在主窗体上,您可以访问模态窗体的公共属性,只要它没有被释放。

例如:

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();
于 2012-11-19T10:08:13.910 回答
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
        }

如果我是你,我也会更改表单名称,它们有点令人困惑。PS我仍然没有得到this.close需要的东西。

于 2012-11-19T08:22:03.093 回答