在 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();

有什么建议吗?

在 C# 中以已打开的窗体传递参数

您有许多变体可以解决问题。

选项 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; }
        }

现在,当我关闭搜索表单时,该值显示在主窗体上的文本框中。

感谢您的回答和评论!