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

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

       如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,如果他们不在同一个命名空间中还要在类名前加上空间名称;另一个地方需要注意的是静态类没有构造函数,不能实例化关于静态类.更多的知识可以参考其他资料.

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C是一种程序设计语言,也是一门通用的高级编程语言。它由美国贝尔实验室的丹尼斯·里奇(Dennis Ritchie)和肯·汤普逊(Ken Thompson)于20世纪70年代开发出来。C语言作为一种抽象层次较低的语言,提供了丰富的底层操作,使得程序员可以更加精细地控制计算机硬件的操作。 C语言具有简洁、高效、灵活的特点,因此在计算机领域得到了广泛的应用。它可用于开发操作系统、编写嵌入式系统、实现网络通信、设计图形界面等。此外,许多其他编程语言(如C++、Java)的底层也是通过C语言实现的,因此学习C语言对于理解其他编程语言的原理和机制非常重要。 C语言的语法相对简单,主要包括基本的数据类型、变量、表达式、函数等。它也提供了丰富的控制结构,如条件语句、循环语句等,使得程序员能够编写复杂的逻辑和算法。C语言还支持指针操作,这是它独有的特性,通过指针可以直接访问和操纵内存的数据,提高了程序的运行效率。 然而,C语言也存在一些不足之处。由于它较为底层,缺乏对高级抽象的支持,因此编写大规模的程序可能会比较困难。另外,C语言对于错误处理和内存管理等方面没有自动化的支持,需要程序员自己负责,容易出现错误和内存泄漏等问题。 总的来说,C语言是一门重要且有影响力的编程语言,它为计算机领域做出了重要贡献,并在各个领域都有广泛的应用。学习C语言对于提高编程能力、理解底层原理和深入学习其他编程语言都具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值