C#WinForms - 如何通过另一种形式从一个表单上的文本框中检索数据?

时间:2009-05-06 17:44:52

标签: c# winforms

我有一个在一个表单内执行的方法,但我需要从另一个表单中检索数据以传递给该方法。

这是最好的方法吗?

5 个答案:

答案 0 :(得分:2)

您可以在一个表单上公开一个属性,然后从另一个表单中调用它。当然,你需要一些方法来获取form1的实例。您可以将它作为程序类或其他父类中的静态属性。通常在这种情况下,我有一个保存实例的静态应用程序类。

public static class Application
{
public static MyForm MyFormInstance { get; set; }
}

然后,当您启动第一个表单时,将应用程序MyFormInstance属性设置为第一个表单的实例。

MyForm instance = new MyForm();
Application.MyFormInstance = instance;

将属性添加到第二个表单。

public String MyText
{ get { return textbox1.Text; }
  set { textbox1.Text = value; }
}

然后您可以通过以下方式从第二个表单访问它:

Application.MyFormInstance.MyText

答案 1 :(得分:1)

在具有需要数据的文本框的表单上,公开返回文本的Property或Method。 IE:

internal string TextBoxTest
{
   get{ return this.textBox1.Text;}
}

答案 2 :(得分:1)

有类似的帖子here

下面的视频将清除很多关于在两种表单之间传递数据的概念。

有多种方法可以在两个表单之间传递数据,请检查这些链接,这些链接包含示例视频

HTH

答案 3 :(得分:0)

不要这样做。

更长的版本:为什么您的视图会直接与其他视图交互?

版本更长:

如果带有感兴趣的字段的表单与某种形式的数据对象进行交互,然后将其传递给感兴趣的方法,那么它不会创建公开该字段的公共属性,而是提供更好的封装和绝缘,不会发生变化。

应该仔细考虑感兴趣的方法的位置 - 如果它控制视图的各个方面(在你的情况下是WinForm),那么它可能适当地是该类的成员 - 如果不是,也许它真正的家就在数据对象?

答案 4 :(得分:0)

假设formB在formA中初始化,我建议在formB的构造函数中添加一个字符串,发送Texbox1.Text

,如

class formB: Form{
   private string data;
   public formB(string data)
    {
        InitializeComponent();
        this.data = data;
    }
  //rest of your code for the class

}