zoukankan      html  css  js  c++  java
  • C#学习及上位机开发学习之多窗口切换

    多窗口切换

    【功能目标】

    1、实现多窗口切换(Panel)

    2、动态生成窗口内文本框以及标签(重点)

    3、改变文本框内容

    【效果图】

    imageimageimage

    【代码详解】

    1、多窗口切换

    如要实现多窗口切换,需要用到Panel,对于这个控件不熟悉的可以看我上一篇介绍;

    Panel是容器控件,我们需要把这些页面的控件分别放入四个容器中,每个容器开始都设计为不显示属性(Visible = false);

    当点击按钮时切换页面,改变显示属性;

    如下代码所示

    当前有四个容器

    group_voltage、group_soc、group_soh、group_fujia

    private void Btn_Volatage_Click(object sender, EventArgs e)
           {//电压显示
               State_Show = 0;
               group_voltage.Visible = true;
               group_soc.Visible = false;
               group_soh.Visible = false;
               group_fujia.Visible = false;
           }

           private void Btn_SOC_Click(object sender, EventArgs e)
           {//SOC显示
               State_Show = 1;
               group_voltage.Visible = false;
               group_soc.Visible = true;
               group_soh.Visible = false;
               group_fujia.Visible = false;
              
               //this.group_soc.BringToFront();
           }

           private void Btn_SOH_Click(object sender, EventArgs e)
           {
               State_Show = 2;
               group_voltage.Visible = false;
               group_soc.Visible = false;
               group_soh.Visible = true;
               group_fujia.Visible = false;
              
           }

           private void Btn_ADD_Click(object sender, EventArgs e)
           {
               State_Show = 3;
               group_voltage.Visible = false;
               group_soc.Visible = false;
               group_soh.Visible = false ;
               group_fujia.Visible = true;
           }

    2、动态生成文本框数组

    利用一个循环,不断声明,在每个循环中,首先先声明一个控件类,然后修改她的名字(也就是ID),再者修改它的TEXT,长度,宽度。

    然后最后有一句将标签或者文本框装入容器

    group_voltage.Controls.Add(Label_Voltage);//将字符添加到容器group_voltage中

    [小提示]
    Control是什莫?
    Control是控件类;容器类控件有此属性,因为他的内部可以添加控件。

    此处有个问题,就是容器如果拖拉到重合的话,会发生一个问题,容器1可能被拉入容器2,就是容器被放入容器。我们需要的是这几个容器是独立的。

    那么需要怎末解决呢?

    我们一开始不要将其位置属性调好。只需要一个调好即可,其他的打乱。

    如下图所示:

    图中四个方框就是四个容器,然后我们在代码初始化中对其进行操作。

    image

    也就是每各容器需要设置宽度

    //设置宽度
    this.group_voltage.Width = 552;
    this.group_voltage.Height = 363;

    然后其他容器还需要多设定一个,让容器的Location和容器1相等。

    group_soc.Location = group_voltage.Location;

    下方示例代码,有文本框以及标签的声明。

    对于标签文字,我们直接循环来实现。

    而对于文本框,我们需要改变文本框里面的值,所以我们采用数组。

    在主程序中需要声明四个数组,全局变量。

    /*声明数据数组*/
           /*1电池电压数组2电池SOC数组3电池SOH数组*/
           TextBox[] Voltage_Battery = new TextBox[5 * 20];
           TextBox[] Soc_Battery = new TextBox[5 * 20];
           TextBox[] Soh_Battery = new TextBox[5 * 20];
           TextBox[] Fj_Battery = new TextBox[5 * 20];

    之后对数组操作部分代码如下所示

    public void PAGE_Init()
            {

                //声明暂存变量
                int i=0,j=0;
                //1电池组电压容器创建
                //添加文本框与字符
                for (i = 0; i < 5;i++ )
                {
                    for (j=0;j<20;j++)
                    {
                        //创建标签与显示窗体
                        Label Label_Voltage = new Label();

                        //设置标签属性
                        Label_Voltage.Name = "Label_Volatage" + (i + j * 5 + 1).ToString();
                        Label_Voltage.Text = "电池" + (i + j * 5 + 1).ToString();
                        Label_Voltage.Width = Width_Label;
                        Label_Voltage.Height = Height_Label;

                        //位置确定
                        Label_Voltage.Location = new Point(15 + i * (Width_Label + Width_Text + 6), 15 + j * (12 + Height_Label));

                        group_voltage.Controls.Add(Label_Voltage);//将字符添加到容器1中
                        //电池组电压数组设置
                        Voltage_Battery[i + j * 5] = new TextBox();//注意!!!先声明对象
                        Voltage_Battery[i + j * 5].Name = "Voltage_Battery" + i.ToString();
                        Voltage_Battery[i + j * 5 ].Text = (i + j * 5 + 1).ToString();
                        Voltage_Battery[i + j * 5].Width = Width_Text;
                        Voltage_Battery[i + j * 5].Height = Height_Text;
                        Voltage_Battery[i + j * 5 ].Location = new Point(67 + i * (Width_Label + Width_Text + 6), 11 + j * (4 + Height_Text));
                        group_voltage.Controls.Add(Voltage_Battery[i + j * 5]);//将电压组添加到容器1中
                    }
                }
               //设置宽度
               this.group_voltage.Width = 552;
               this.group_voltage.Height = 363;
               
                //SOC容器搭建
                //添加文本框与字符
                for (i = 0; i < 5; i++)
                {
                    for (j = 0; j < 20; j++)
                    {
                        //创建标签
                        Label Label_Soc = new Label();

                        //设置标签属性
                        Label_Soc.Name = "Label_SOC" + (i + j * 5 + 1).ToString();
                        Label_Soc.Text = "SOC" + (i + j * 5 + 1).ToString();
                        Label_Soc.Width = Width_Label;
                        Label_Soc.Height = Height_Label;
                        //设置文本框数组属性
                        Soc_Battery[i + j * 5] = new TextBox();//注意!!!先声明对象
                        Soc_Battery[i + j * 5].Name = "SOC_Battery" + (i + j * 5 + 1).ToString();
                        Soc_Battery[i + j * 5].Text = (i + j * 5 + 1).ToString();
                        Soc_Battery[i + j * 5].Width = Width_Text;
                        Soc_Battery[i + j * 5].Height = Height_Text;

                        //位置确定
                        Label_Soc.Location = new Point(15 + i * (Width_Label + Width_Text + 6), 15 + j * (12 + Height_Label));
                        group_soc.Controls.Add(Label_Soc);//将字符添加到容器2中

                        Soc_Battery[i + j * 5].Location = new Point(67 + i * (Width_Label + Width_Text + 6), 11 + j * (4 + Height_Text));
                        group_soc.Controls.Add(Soc_Battery[i + j * 5]);//将SOC添加到容器2中
                    }
                }
                //设置宽度位置
                this.group_soc.Width = 552;
                this.group_soc.Height = 363;
                group_soc.Location = group_voltage.Location;


    }

    3、文本框内容改变

    当文本框内容需要改变时,我们直接修改TEXT即可。

    下面还有一个遍历控件的函数可以检测控件中符合要求的。(做保留学习用)

    如下代码如下所示

    foreach (Control C in group_voltage.Controls)//遍历容器中每个控件
                {

                    if (C.Name == "Voltage_Battery10")
                    {//如果此控件的名字为?则
                        C.Text = temp1.ToString();
                        temp1++;
                    }
                       
                } /**/

    如有疑问欢迎留言(黎明工作室)

    后续更新协议传输数据

  • 相关阅读:
    优化SQL查询:如何写出高性能SQL语句
    提高SQL执行效率的16种方法
    Spring Ioc DI 原理
    java内存泄漏
    转:js闭包
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Best Time to Buy and Sell Stock with Cooldown
    LeetCode Length of Longest Fibonacci Subsequence
    LeetCode Divisor Game
    LeetCode Sum of Even Numbers After Queries
  • 原文地址:https://www.cnblogs.com/flyingjun/p/6810776.html
Copyright © 2011-2022 走看看