两个窗体A,B。怎样从A登陆到B。

解决方案 »

  1.   

    主要是窗体间传值问题
    设我们需要点击主窗体FMMain中的某一个按钮时打开子窗体FMChild并将某一个值传给子窗体FMChild,一般情况下,我们点击按钮显示子窗体FMChild的代码为: 
    FMChild fmChild = new FMChild(); 
    fmChild.ShowDialog(); 
    fmChild.Dispose(); 
    如果我们需要将主窗体FMMain中的string strValueA的值传给FMChild,那么我们首先对strValueA进行如下处理: private string strValueA; 
    public string StrValueA 

    get 

    return strValueA; 

    set 

    strValueA = value; 


    使其成为主窗体FMMain的一个属性,接着修改显示子窗体的代码为以下两种的其中一种。 方法一: FMChild fmChild = new FMChild(); 
    fmChild.ShowDialog(this); 
    fmChild.Dispose(); 
    方法二: FMChild fmChild = new FMChild(); 
    FMChild.Owner = this; 
    fmChild.ShowDialog(); 
    fmChild.Dispose(); 
    然后在修改子窗体FMChild中申明一个主窗体FMMain对象, FMMain fmMain; 
    在需要使用主窗体FMMain的string strValueA的地方加上如下代码: fmMain = (FMMain)this.Owner; 
    这样,就可以获得主窗体FMMain中strValueA的值了。 这时,如果你需要将子窗体FMChild中的string strValueB传给主窗体FMMain,同样处理string strValueB。 private string strValueB; 
    public string StrValueB 

    get { return strValueB; } 
    set { strValueB = value; } 

    那么你在关闭子窗体代码fmChild.Dispose();后,可以写一些代码来保存或者处理FMChild的strValueB,例如: string strTmp = fmChild.StrValueB; 
    注意,在Visual C#智能设备Pocket PC 2003设备应用程序中显示子窗体FMChild只能使用: FMChild fmChild = new FMChild();FMChild.Owner = this;fmChild.ShowDialog();fmChild.Dispose(); 
    在Visual C#智能设备Pocket PC 2003的设备应用程序中ShowDialog()没有重载。 
    C#窗体间传值的几种方法 
    调用窗体(父):Form1,被调用窗体(子):Form2 
    方法1: 所有权法 
    //Form1: 
    //需要有一个公共的刷新方法 
    public void Refresh_Method() 

    //... 

    //在调用Form2时,要把Form2的所有者设为Form1 
    Form2 f2 = new Form2() ; 
    f2.Owner = this; 
    f2.ShowDialog() ; 
    //Form2: 
    //在需要对其调用者(父)刷新时 
    Form1 f1 ; 
    f1 = (Form1)this.Owner; 
    f1.Refresh_Method() ; 
    方法2:自身传递法 
    //Form1: 
    //需要有一个公共的刷新方法 
    public void Refresh_Method() 

    //... 

    Form2 f2 = new Form2() ; 
    f2.ShowDialog(this) ; 
    //Form2: 
    private Form1 p_f1; 
    public Form2(Form1 f1) 

    InitializeComponent(); 
    p_f1 = f1; 

    //刷新时 
    p_f1.Refresh_Method() ; 
    方法3:属性法 
    //Form1: 
    //需要有一个公共的刷新方法 
    public void Refresh_Method() 

    //... 

    //调用时 
    Form2 f2 = new Form2() ; 
    f2.P_F1 = this; 
    f2.Show() ; //Form2: 
    private Form1 p_f1; 
    public Form1 P_F1 

    get{return p_f1;} 
    set{p_f1 = value;} 

    //刷新时 
    p_f1.Refresh_Method() ; 
    方法4:委托法 
    //声明一个委托 
    public delegate void DisplayUpdate(); 
    //Form1: 
    //需要有一个公共的刷新方法 
    public void Refresh_Method() 

    //... 

    //调用时 
    Form2 f2 = new Form2() ; 
    f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ; 
    f2.Show() ; 
    //Form2: 
    //声明事件 
    public event DisplayUpdate ShowUpdate; 
    //刷新时,放在需要执行刷新的事件里 
    ShowUpdate(); 
    Form1中放一个Label1,一个Button1,Form1为主窗口,当点击Button1时,执行: 
    Form2 f2 = new Form2(); 
    f2.ShowDialog(this); Form2中放一个TextBox1,一个Button1,当点击Button1时执行: Form1 f1 = (Form1)this.Owner; 
    f1.Label1.Text = this.TextBox1.Text; 注意:Form1中的label1要设为public 
    用C#实现两个WinForm间的传值 这个题目我曾经出给来公司面试的人,也曾经出给刚毕业的大学生,几乎是没有人会做啊。难道这个问题真的这么难么?现在我给出实现的主要源代码(开发平台为VC#2005)。 实现的思路: 
        从Form1传递到Form2: 2个窗体即两个类,两个窗体间的数据传送,可以采用构造函数来实现。     从Form2返回到Form1,并传递数据:实例化Form2后,打f2用ShowDialog()方法,然后等待f2关闭时再回传数据到Form1。 实现步骤及代码:       1:新建两个窗口: Form1,Form2; 
          2:打开Form2,添加一个textBox:textBox1;添加一个Button:button1;然后添加一个构造函数: 
            //定义一个变量,用来传值。 
            public string returnValue ;         public Form2(string txtValue) 
            { 
                InitializeComponent();             this.textBox1.Text = txtValue; 
            } 
    然后在button1的单击事件中添加如下代码: 
            private void button1_Click(object sender, EventArgs e) 
            { 
                returnValue = this.textBox1.Text; 
                this.Close(); 
            } 
          3:Form1中添加一个textBox:textBox1;添加一个Button:button1;然后在button1的单击事件中添加如下代码: 
            private void button1_Click(object sender, EventArgs e) 
            { 
                string txtValue = this.textBox1.Text; 
                Form2 f2 = new Form2(txtValue); 
                f2.ShowDialog(); 
                this.textBox1.Text = f2.returnValue; 
            } 
    Form1 中 (父窗口:) 
    public class Form1 : System.Windows.Forms.Form 

          private System.Windows.Forms.Button btnOpen; 
          public System.Windows.Forms.TextBox txtContent; //注意是public       ........       ........       [STAThread] 
        static void Main() 
        { 
              Application.Run(new Form1()); 
        }     private void btnOpen_Click(object sender, System.EventArgs e) 
        { 
          Form2 frm=new Form2(this); 
          frm.ShowDialog(); 
        } } Form2中(子窗口) public class Form2 : System.Windows.Forms.Form 

              private System.Windows.Forms.Button button1; 
              private System.Windows.Forms.TextBox txtValue;           private Form _parentForm=null; 
          public Form2() 
          {  
                InitializeComponent(); 
          }       public Form2(Form parentForm) 
          { 
              InitializeComponent(); 
              this._parentForm =parentForm; 
          }           ........           ........ 
      //更新父窗口中文本框中的值! 应该有用