繁体   English   中英

C#将模式窗体上的文本框文本从另一个窗体更改

[英]C# change textbox text on a modal form from an another form

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

我认为这是一个逻辑问题。 如果我了解您的要求,则您有一个包含搜索文本框的主表单。 当用户启动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();

最简单的方法是将新文本传递到模式窗口。 例如:

主要形式模态模式

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM