在C#中以已打开的形式传递参数

时间:2014-11-17 13:49:24

标签: c#

我想将参数传递给文本框。我有以下代码,它传递参数但不是我想要的方式。 我的主要表单已打开,我想从我的搜索表单中传递参数。当我使用下面的代码时,它会打开另外一个主窗体,参数显示在那里。我希望能够以打开的主要形式显示。

当我擦除frmMain.Show();没有任何反应。

Main frmMain = new Main();
artikal = "TEST TEST";

frmMain.ed_artiakal.Text = artikal;
frmMain.Show();

有什么建议吗?

2 个答案:

答案 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中。

感谢您的回答和评论!