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++;
                }
                   
            } /**/

 

如有疑問歡迎留言(黎明工作室)

后續更新協議傳輸數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM