【WinForm】C# 记录页面切换学习过程

记录页面切换学习过程,希望对各位有需要的朋友有所帮助,也希望对本人不完善的想法加以指导纠正,感谢!

想法介绍:是一个上位机系统的页面切换程序,页面分为三层有【FM1】“FM1 WelcomeForm”欢迎使用界面、【FM2】“FM2 LoginForm”登录界面、【FM3】“FM3 MainForm”主页,主页里面会有Panel里面的各个应用页面“PG1”、“PG2”,可以通过按钮进行页面切换;

第一步:建立各层窗口页面

第二步:各个窗口内部控件的添加

(1)欢迎使用界面【FM1】“FM1 WelcomeForm”

欢迎使用界面有一个页面切换按钮“button1”在工具箱拖拽过来修改名称即可

*还添加了一个“Panel1”,【Dock】属性设为“Fill”这一个“Panel1”是为了比例缩放而做的;

(2)登录界面【FM2】“FM2 LoginForm”

登录界面分别有“textBox_username”、“textBox_password”、“button1”在工具箱拖拽过来修改名称即可

*还添加了一个“Panel1”,【Dock】属性设为“Fill”这一个“Panel1”是为了比例缩放而做的;

(3)用户界面1【FM3】“FM3 MainForm”

用户界面1有Panel:“mainPanel”、Button:“openPG1”“openPG2”在工具箱拖拽过来修改名称即可

*还添加了一个“Panel1”,【Dock】属性设为“Fill”这一个“Panel1”是为了比例缩放而做的;

*用户界面1内部“mainPanel”的页面切换这次就先不记录了,因为做的并不好,希望有看到的朋友私信指导一下,感谢!

(4)准备“mainPanel”内部的PG1和PG2,方便后续扩展完善

*此处设置属性【FormBorderStyle】设成None,其他就根据需求添加一下;

完成后就可以进行功能代码的编写啦;

第三步:欢迎使用界面代码的编写

双击【登录页面】按钮建立button1_Click按钮事件并输入切换页面代码

        private void button1_Click(object sender, EventArgs e)
        {
            Form FM2 = new FM2();//FM2 是窗口的(Name)
            FM2.ShowDialog(this);
            this.Close();
        }

效果演示:

控件比例缩放程序:

#region 控件缩放

        double formWidth;//窗体原始宽度
        double formHeight;//窗体原始高度
        double scaleX;//水平缩放比例
        double scaleY;//垂直缩放比例
        Dictionary<string, string> controlInfo = new Dictionary<string, string>();
        //控件中心Left,Top,控件Width,控件Height,控件字体Size

        //获取控件初始信息:GetAllInitInfo()
        protected void GetAllInitInfo(Control CrlContainer)
        {
            if (CrlContainer.Parent == this)
            {
                formWidth = Convert.ToDouble(CrlContainer.Width);
                formHeight = Convert.ToDouble(CrlContainer.Height);
            }
            foreach (Control item in CrlContainer.Controls)
            {
                if (item.Name.Trim() != "")
                    controlInfo.Add(item.Name, (item.Left + item.Width / 2) + "," + (item.Top + item.Height / 2) + "," + item.Width + "," + item.Height + "," + item.Font.Size);
                if ((item as UserControl) == null && item.Controls.Count > 0)
                    GetAllInitInfo(item);
            }
        }

        //获取窗体缩放比例:ControlsChaneInit()
        private void ControlsChangeInit(Control CrlContainer)
        {
            scaleX = (Convert.ToDouble(CrlContainer.Width) / formWidth);
            scaleY = (Convert.ToDouble(CrlContainer.Height) / formHeight);
        }

        //窗体改变时修改控件大小:ControlsChange()
        private void ControlsChange(Control CrlContainer)
        {
            double[] pos = new double[5];//pos数组保存当前控件中心Left,Top,控件Width,控件Height,控件字体Size
            foreach (Control item in CrlContainer.Controls)
            {
                if (item.Name.Trim() != "")
                {
                    if ((item as UserControl) == null && item.Controls.Count > 0)
                        ControlsChange(item);
                    string[] strs = controlInfo[item.Name].Split(',');
                    for (int j = 0; j < 5; j++)
                    {
                        pos[j] = Convert.ToDouble(strs[j]);
                    }
                    double itemWidth = pos[2] * scaleX;
                    double itemHeight = pos[3] * scaleY;
                    item.Left = Convert.ToInt32(pos[0] * scaleX - itemWidth / 2);
                    item.Top = Convert.ToInt32(pos[1] * scaleY - itemHeight / 2);
                    item.Width = Convert.ToInt32(itemWidth);
                    item.Height = Convert.ToInt32(itemHeight);
                    try
                    {
                        item.Font = new Font(item.Font.Name, float.Parse((pos[4] * Math.Min(scaleX, scaleY)).ToString()));
                    }
                    catch
                    {
                    }
                }
            }
        }

        protected override void OnSizeChanged(EventArgs e)
        {
            base.OnSizeChanged(e);
            if (controlInfo.Count > 0)
            {
                ControlsChangeInit(this.Controls[0]);
                ControlsChange(this.Controls[0]);
            }
        }

        #endregion
        public FM1()
        {
            InitializeComponent();

            //获取控件初始信息
            GetAllInitInfo(this.Controls[0]);

            //上电窗体最大化
            this.WindowState = FormWindowState.Maximized;
        }

第四步:登录界面程序代码编写

建立FM2_Load窗口登录事件

private void FM2_Load(object sender, EventArgs e)
        {
            this.Owner.Hide();
        }

建立button1_Click按钮事件

private void button1_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(this.textBox_username.Text))
            {
                MessageBox.Show("用户名不能为空");
            }
            else if (String.IsNullOrEmpty(this.textBox_password.Text))
            {
                MessageBox.Show("密码不能为空");
            }
            else if (!this.textBox_username.Text.Equals("admin"))
            {
                MessageBox.Show("用户名不存在");
            }
            else if (!this.textBox_password.Text.Equals("admin"))
            {
                MessageBox.Show("密码不正确");
            }
            else
            {
                //登录成功,跳转到主页面
                Form FM3 = new FM3();
                FM3.ShowDialog(this);
                this.Close();
            }
        }

效果演示:

*若要窗口能有控件比例缩放功能复制上述【控件比例缩放程序代码】到FM2相应程序段即可;

第五步:用户界面1程序代码编写

*该页面想法是在页面下方有一排页面切换按钮进行Panel内部页面的切换的,目前只是写了两个示例而且页面显示不完美,后续完善后会专门发帖补充,也希望有看到的私信指点,感谢!

建立FM3_Load窗口登录事件

        private void FM3_Load(object sender, EventArgs e)
        {
            this.Owner.Hide();
        }

建立openPG1_Click按钮事件

        private void openPG1_Click(object sender, EventArgs e)
        {
            this.mainPanel.Controls.Clear();    //初始化主panel
            PG1 pg1 = new PG1();                // 实例化要在pnlMain里显示的form(PG1是新建的一个form)
            pg1.TopLevel = false;               //设置属性
            //pg1.Width= mainPanel.Size.Width;
            //pg1.Height= mainPanel.Size.Height;
            pg1.Show();                         //显示form
            this.mainPanel.Controls.Add(pg1);   //把from添加到pnlMain里
        }

建立openPG2_Click按钮事件(两个按钮事件代码功能一样只是要显示的Form不一样)

        private void openPG2_Click(object sender, EventArgs e)
        {
            this.mainPanel.Controls.Clear();
            PG2 pg2 = new PG2();
            pg2.TopLevel = false;
            //pg2.Width = mainPanel.Size.Width;
            //pg2.Height = mainPanel.Size.Height;
            pg2.Show();
            this.mainPanel.Controls.Add(pg2);
        }

效果演示:

上述就是目前的学习过程及实现过程了,希望对有需要的朋友有帮助,更希望有朋友加以指点共同学习!

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值