在 C# 中以已打开的窗体传递参数
本文关键字:窗体 参数 | 更新日期: 2023-09-27 18:30:35
我想将参数传递给文本框。我有以下代码,它正在传递参数,但不是我想要的方式。我的主表单已经打开,我想从我的搜索表单传递参数。当我使用下面的代码时,它会打开 mt 1 另一个主窗体,参数显示在那里。我希望能够通过打开的主窗体显示。
当我擦除 frmMain.Show() 时,什么也没发生。
Main frmMain = new Main();
artikal = "TEST TEST";
frmMain.ed_artiakal.Text = artikal;
frmMain.Show();
有什么建议吗?
您有许多变体可以解决问题。
选项 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;
}
不要忘记公开搜索表单的文本框1。
选项 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
我通过以下方式解决了我的问题。
在我的搜索表单上,我创建了一个公共字符串,当我显示表单时,我在GetItemCode中引用了该字符串。
这里的关键是使用 ShowDialog() 而不是使用 Show()。
搜索表单
Search frmSearch = new Search();
frmSearch.ShowDialog();
ed_artiakal.Text = frmSearch.GetItemCode;
主形式
public string GetItemCode
{
get { return Artikal; }
}
现在,当我关闭搜索表单时,该值显示在主窗体上的文本框中。
感谢您的回答和评论!