c#各个窗体间变量和空间相互引用方法

本文详细介绍了在Windows窗体应用程序中,通过窗体间的简单引用、MDI项目中的子窗体操作、静态类实现全局变量共享以及通过主窗体变量控制子窗体实例化的四种方法。涵盖了变量、控件的访问与引用技巧,适用于理解窗体间数据共享与交互的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:窗体间简单的引用。一个窗体调用另一个窗体的变量或控件。

       如form4调用form3中的变量:只需要把form3中的变量设置为public类型,然后在form4中new一个form3,直接就可以调用了。

       如form4调用form3中的控件:同样只要在Form3.Designer.cs里面把空间的访问类型设置为public即可,ep:publicSystem.Windows.Forms.Label label1;

//Form3.cs

    public partial class Form3 : Form

    {

        public Form3()

        {

            InitializeComponent();

        }

 

        public string p = "f3";//公有变量

}

//Form3.Designer.cs

    partial class Form3

    {

 

        #region Windows Form Designer generated code

       ……

        #endregion

 

        public System.Windows.Forms.Label label1;//公有控件

 

//Form4.cs

       private void Form4_Load(object sender, EventArgs e)

        {

            Form3  f3 = new Form3();

            f3.p = "f4";

            f3.label1.Text = "sad"+f3.p;

            f3.Show();

     }

方法二:对于mdi项目来说,我们有时可能会同时打开多个子窗体,并且需要在各个窗体间相互传递参数或引用,而且又不能每次使用都new一次。此时对他们的操作就相对麻烦点。

做mdi项目首先要把父窗体的IsMdiContainer属性设置为true,使其作为mdi项目的父窗体假如这里的父窗体为Mainform,然后再创建子窗体Form1和Form2。这里我们在Form2的实例化窗体f2中使用Form1窗体的实例f1,并且这个f1窗体和f2窗体始终存在。在Form2中添加一个按钮button1名称叫“显示Form1”,它的单击事件如

private void button1_Click(object sender, EventArgs e)

{

            Form1 f1 = null;

            bool find = false;

            foreach (Form f in this.MdiParent.MdiChildren)//这里的this就是指Form2

            {

                if (f is Form1)

                {

                    f1 = (Form1)f;

                    f1.Show();

                    f1.Focus();

                    find = true;

                    break;

                }

            }

            if (find == false)

            {

                f1= new Form1();

                f1.MdiParent = this.MdiParent;

                f1.Show();

            }

}

 

Mainform窗体的Load事件

 private void Mainform_Load(object sender, EventArgs e)

 {

            Form2 f2 = new Form2 ();

            f2.Show();

}

运行程序,其结果就是无论点击多少次f2中的“显示Form1”按钮,始终打开的是同一个窗体,并且f1就是Form1窗体的这个实例化窗体,而不会每次点击按钮就new一个Form1窗体。

这里的原理就是搜索所有mdi父窗体(即Mainform)的子窗体名称等于Form1的窗体,如果搜索到则显示出来(然后就可以对f1进行其他操作了),否则创建新的form1窗体,然后设置其父窗体为Mainform并显示出来。

 

方法三:这次我们就用静态类(也就是全局变量)来实现各个窗体间的引用。例如我们创建一个StaticClass静态类,然后定义静态变量a,b以及方法GetSum()。

Namespace NameSpace1

{

    public static class StaticClass

    {

        public static int a;

 

        public static int b;

 

        public static int GetSum()

        {

            return a + b;

        }

    }

}

在使用时我们直接调用这个静态类就行,而不需要进行实例化(当然你也实例不了,呵呵)

Namespace NameSpace1

{

   private void Form1_Load(object sender, EventArgs e)

        {

            StaticClass.a = 12;

            StaticClass.b = 2;

            int sum = StaticClass.GetSum();//sum=14

            int sum2=getsum2();//sum2=14

}

     Public int getsum2()

     {

         return StaticClass.GetSum();

}

}

方法四:主窗体Test新建一个变量:

private string _Bianhao;
        /// <summary>
        /// 报表项编号
        /// </summary>
        public string Bianhao
        {
            set { _Bianhao = value; }
            get { return _Bianhao; }
        }

主窗体打开子窗体:

Edit frm = new Edit();
 frm.ShowDialog(this);


子窗体中:

Test frm = (Test)this.Owner;
 frm.Bianhao = this.comboBox2.Text;


相信到这里您已经知道如何通过全局变量来时实现各个窗体间的变量应用了。以上代码需要注意的地方一个是命名空间Namespace NameSpace1,如果他们不在同一个命名空间中还要在类名前加上空间名称;另一个地方需要注意的是静态类没有构造函数,不能实例化关于静态类.更多的知识可以参考其他资料.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值