天天看点

C# 两窗体间控件调用

第一种方法:

假设有两个窗体:Form1、Form2。  其中Form1 里面有控件 Label1;;   Form2里面有 button1;

目标:通过点击Form2的button1来改变Form1里的Label1的Text属性。

方法:

step1:

       在Form1窗体类中定义一个静态成员,来保存当前主窗体对象:

       public static Form1 ForForm2 = null;

step2:

       在Form1的构造函数里面初始化静态成员:

       ForForm2 = this;

step3:

       把Label1的可见级别从private调整为public(在属性栏里的Modifiers)

开始使用:

       在Form2里的button1_Click事件里面直接调用Form1的Label1控件:

       Form1.ForForm2.Label1.Text = "调用成功";

第二种方法:

     在Form1的按钮点击显示Form2的Click函数中

    Form2 f2 = new Form2();

            f2.Owner = this;

            f2.Show(); 

     在Form2的响应要操作Form1中的控件的函数中

           Form1 f1 = (Form1)this.Owner;

            f1.label1.Text = "调用成功"; 

     注意:Form1中被操作的控件的属性应设置为Public。    

第三种方法:

     要把Form1中被操作的控件的属性应设置为Public,

     修改Form2的构造函数

         public Form2(Form1 parent)

         {

            InitializeComponent();

            paf = parent;

         }

      其中声明:private Form1 paf;

     在Form1中点击Button1显示Form2

           Form2 f2 = new Form2(this);

            f2.Show();

    最后在Form2的Button Click函数

          private void button1_Click(object sender, EventArgs e)

        {

            paf.label1.Text = "调用成功";

        }

以上三种方法都是将控件的访问属性修改为public(默认为private),这在OPP中是不提倡的。如果要操作窗体控件可以写一个公共的方法在方法中修改控件。

第四种方法:

        如要操作Form1中的Label控件,可以再Form1扥类中定义相应的方法

public void SetText(string text,bool status)

        {

            label1.Text = text;

            button1.Enabled = status;

        }

        在Form2中先声明一个Form字段用以引用Form1;

         Form form1;

         同时还要修改Form2的构造函数

         public Form2(Form form1)

        {

            InitializeComponent();

            this.form1 = form1;

        }

       最后在处理函数中调用SetText方法

private void button1_Click(object sender, EventArgs e)

        {

            (form1 as Form1).SetText("调用成功", true);

        }

         其中(form1 as Form1)是将form1转换为Form1类型的对象。

c#