将WinForms的标识填充到文本框中

时间:2010-11-16 13:25:35

标签: c# visual-studio winforms

我有以下三种形式:

Form1中

窗体2

Form3

Form1和Form3正在与Form2进行通信。我想如果Form1访问Form2而不是

Form1应将其身份保留为 Form2的textbox1 。如果Form3访问Form2而不是Form3

应将其身份保留为 Form2的textbox2。

有可能吗?。

以下是Visted Means。

按Form1

Form2 f2= new Form2();
f2.Show();

按Form3

Form2 f2= new Form2();
f2.Show();

身份就像“Form1”“Form3”

4 个答案:

答案 0 :(得分:2)

我相信您要求打开Form2的表单为文本框设置一些特定值。您可以在Form2上拥有一个设置文本框文本的属性。

public partial class Form2 : Form
{
     /*.......*/
       public string Identity
       {
           set
           {
              textbox1.Text = value;
           }
       }
}

然后在Form1或Form3中:

Form2 form2 = new Form2();
form2.Identity = this.Name;
form2.Show();

答案 1 :(得分:1)

要做的最好的事情是为每个表单重载Show方法,以接受类似“上一个表单”参数的内容,该参数将作为调用者的引用(您可以将此作为Form对象,然后可以访问其属性,或者仅作为String)。然后,无论您在现有表单中显示第二个表单,都可以将有关现有表单的信息传递给第二个表单的Show方法。第二种形式的Show方法将使用显示它的表单的名称来更新其文本框。

例如,每个表单都包含一个重载的Show方法:

public void Show(Form previousForm)
{
    //Set the textbox on this form to contain the name of the calling form
    myTextBox.Text = previousForm.Name;

    //Call the base class's method to show this form
    base.Show();
}

您可以通过调用其重载的Show方法来显示另一个表单:

private void ShowOtherFormButton(object sender, EventArgs e)
{
    //Create a new instance of the form you want to display
    Form2 myOtherForm = new Form2();

    //Show the other form, passing the calling form as a parameter
    myOtherForm.Show(this);
}

这样,任何表单都不负责甚至不允许更新其他表单包含的控件。您不必公开任何其他属性,或者记得在要显示的表单上调用任何其他方法 - 它内置于您必须调用的Show方法中。

或者,您可以以相同的方式重载每个表单的构造函数,但如果您希望能够在每个表单的现有实例之间移动,那么这将无效。在为每个表单创建 new 实例时,您只能指定有关上一个表单的信息。

答案 2 :(得分:0)

您需要对来电者的引用。您可以通过覆盖表单的构造函数来完成此操作。

public partial class Form2 : Form
{
    Form _caller;//Caller form

    //Default constructor 
    public Form1()
    {
        InitializeComponent();
    }

    public Form1(Form caller)
    {
        InitializeComponent();
        this._caller = caller;
        textbox2.Text = caller.Name;
    }   
}

现在你要做的就是使用新的构造函数调用Form2:

Form2 form2Instance = new Form2(this);
form2Instance.Show();

无论哪种形式称为Form2,现在都将其名称写在Form2的textbox2上

答案 3 :(得分:0)

您需要在窗口窗体之间传递数据(即,此方案中的窗体名称),以便您可以在Form2中获取它。 请参阅lint以在窗口窗体之间传递数据:http://www.vbdotnetheaven.com/UploadFile/thiagu304/passdata12262006073406AM/passdata.aspx