我想将参数传递给文本框。我有以下代码,它传递参数但不是我想要的方式。 我的主要表单已打开,我想从我的搜索表单中传递参数。当我使用下面的代码时,它会打开另外一个主窗体,参数显示在那里。我希望能够以打开的主要形式显示。
当我擦除frmMain.Show();没有任何反应。
Main frmMain = new Main();
artikal = "TEST TEST";
frmMain.ed_artiakal.Text = artikal;
frmMain.Show();
有什么建议吗?
答案 0 :(得分:2)
您有许多变种可以解决您的问题。
选项1 定义和使用自定义事件。
搜索表单代码:
public event EventHandler ArtikalTextChanged;
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (ArtikalTextChanged != null)
ArtikalTextChanged(this, EventArgs.Empty);
}
主要表单代码:
private void button1_Click(object sender, EventArgs e)
{
Search search = new Search();
search.ArtikalTextChanged += OnArtikalTextChanged;
search.Show();
}
private void OnArtikalTextChanged(object sender, EventArgs e)
{
this.ed_artiakal.Text = (sender as Search).textBox1.Text;
}
不要忘记将搜索表单的textBox1设为公开。
选项2 在搜索表单中获取主表单的实例:
搜索表单代码:
private void textBox1_TextChanged(object sender, EventArgs e)
{
var mainForm = Application.OpenForms.OfType<Main>().FirstOrDefault();
mainForm.ed_artiakal.Text = textBox1.Text;
}
主要表单代码:
private void button1_Click(object sender, EventArgs e)
{
Search search = new Search();
search.Show();
}
不要忘记在主表单中公开ed_artiakal控件。
选项3 表格之间共享数据(推荐) 但是,如果您的应用程序很大并且您希望使其可扩展和灵活,我建议您使用数据绑定技术在表单之间共享数据而不耦合它们。您可以阅读以下文章:http://msdn.microsoft.com/en-us/library/h974h4y2(v=vs.90).aspx
答案 1 :(得分:0)
我已通过以下方式解决了我的问题。
在我的搜索表单上,我创建了一个公共字符串,当我显示表单时,我在我的案例中引用了该字符串GetItemCode。
这里的关键是使用ShowDialog()而不是使用Show()。
搜索表格
Search frmSearch = new Search();
frmSearch.ShowDialog();
ed_artiakal.Text = frmSearch.GetItemCode;
主要表格
public string GetItemCode
{
get { return Artikal; }
}
现在当我关闭搜索表单时,值会显示在我主表单的TextBox中。
感谢您的回答和评论!