代码之家  ›  专栏  ›  技术社区  ›  mahesh

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

  •  0
  • mahesh  · 技术社区  · 14 年前

    我有以下三种形式:

    表格1

    表格2

    表3

    表单1和表单3正在与表单2通信。我想如果我去拜访我

    表单1应该将其标识留给 表单2文本框1 . 如果3号表格访问了2号表格而不是3号表格

    应该把它的身份留给 表单2的文本框2。

    有可能吗?.

    这里是指如下。

    按表格1

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

    按表格3

    Form2 f2=新的Form2();
    f2.显示();
    

    像身份一样 “表单1” “表格3”

    4 回复  |  直到 14 年前
        1
  •  1
  •   Cody Gray BugGuyBCS    14 年前

    最好的办法是超载 Show 方法,使每个窗体接受类似“previous form”的参数,该参数将用作调用方的引用 (你也可以这样做 Form 对象,然后您可以访问其属性,或仅作为 String ). 然后,无论您从现有窗体中显示第二个窗体,都可以将现有窗体的信息传递到 显示 第二种形式的方法。第二种形式 显示 方法将使用显示它的窗体的名称更新它的文本框。

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

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

    通过调用一个窗体的重载 显示 方法:

    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);
    }
    

    这样,任何表单都不负责甚至不允许更新其他表单包含的控件。您不必公开任何其他属性,也不必记得在要显示的窗体上调用任何其他方法它就内置在 显示 方法,无论如何都必须调用它。

    或者,您可以以相同的方式重载每个表单的构造函数,但是如果您希望能够在每个表单的现有实例之间移动,那么这将不起作用。只有在创建 新的 每个窗体的实例。

        2
  •  2
  •   msergeant    14 年前

    我相信您是在请求打开Form2的表单来设置文本框的特定值。您可以在窗体2上有一个设置文本框文本的属性。

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

    然后在表格1或表格3中:

    Form2 form2 = new Form2();
    form2.Identity = this.Name;
    form2.Show();
    
        3
  •  0
  •   Slime recipe    14 年前

    你需要一个来电者的证明。可以通过重写窗体的构造函数来完成此操作。

    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上

        4
  •  0
  •   Nanda    14 年前

    您需要在窗口窗体之间传递数据(即,本场景中的窗体名称),以便可以在窗体2中获取数据。 引用lint在窗口窗体之间传递数据: http://www.vbdotnetheaven.com/UploadFile/thiagu304/passdata12262006073406AM/passdata.aspx