• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

WinFormC# 记录页面切换学习过程

武飞扬头像
你好阿劲
帮助1

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

想法介绍:是一个上位机系统的页面切换程序,页面分为三层有【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按钮事件并输入切换页面代码

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

效果演示:

学新通

控件比例缩放程序:

  1.  
    #region 控件缩放
  2.  
     
  3.  
    double formWidth;//窗体原始宽度
  4.  
    double formHeight;//窗体原始高度
  5.  
    double scaleX;//水平缩放比例
  6.  
    double scaleY;//垂直缩放比例
  7.  
    Dictionary<string, string> controlInfo = new Dictionary<string, string>();
  8.  
    //控件中心Left,Top,控件Width,控件Height,控件字体Size
  9.  
     
  10.  
    //获取控件初始信息:GetAllInitInfo()
  11.  
    protected void GetAllInitInfo(Control CrlContainer)
  12.  
    {
  13.  
    if (CrlContainer.Parent == this)
  14.  
    {
  15.  
    formWidth = Convert.ToDouble(CrlContainer.Width);
  16.  
    formHeight = Convert.ToDouble(CrlContainer.Height);
  17.  
    }
  18.  
    foreach (Control item in CrlContainer.Controls)
  19.  
    {
  20.  
    if (item.Name.Trim() != "")
  21.  
    controlInfo.Add(item.Name, (item.Left item.Width / 2) "," (item.Top item.Height / 2) "," item.Width "," item.Height "," item.Font.Size);
  22.  
    if ((item as UserControl) == null && item.Controls.Count > 0)
  23.  
    GetAllInitInfo(item);
  24.  
    }
  25.  
    }
  26.  
     
  27.  
    //获取窗体缩放比例:ControlsChaneInit()
  28.  
    private void ControlsChangeInit(Control CrlContainer)
  29.  
    {
  30.  
    scaleX = (Convert.ToDouble(CrlContainer.Width) / formWidth);
  31.  
    scaleY = (Convert.ToDouble(CrlContainer.Height) / formHeight);
  32.  
    }
  33.  
     
  34.  
    //窗体改变时修改控件大小:ControlsChange()
  35.  
    private void ControlsChange(Control CrlContainer)
  36.  
    {
  37.  
    double[] pos = new double[5];//pos数组保存当前控件中心Left,Top,控件Width,控件Height,控件字体Size
  38.  
    foreach (Control item in CrlContainer.Controls)
  39.  
    {
  40.  
    if (item.Name.Trim() != "")
  41.  
    {
  42.  
    if ((item as UserControl) == null && item.Controls.Count > 0)
  43.  
    ControlsChange(item);
  44.  
    string[] strs = controlInfo[item.Name].Split(',');
  45.  
    for (int j = 0; j < 5; j )
  46.  
    {
  47.  
    pos[j] = Convert.ToDouble(strs[j]);
  48.  
    }
  49.  
    double itemWidth = pos[2] * scaleX;
  50.  
    double itemHeight = pos[3] * scaleY;
  51.  
    item.Left = Convert.ToInt32(pos[0] * scaleX - itemWidth / 2);
  52.  
    item.Top = Convert.ToInt32(pos[1] * scaleY - itemHeight / 2);
  53.  
    item.Width = Convert.ToInt32(itemWidth);
  54.  
    item.Height = Convert.ToInt32(itemHeight);
  55.  
    try
  56.  
    {
  57.  
    item.Font = new Font(item.Font.Name, float.Parse((pos[4] * Math.Min(scaleX, scaleY)).ToString()));
  58.  
    }
  59.  
    catch
  60.  
    {
  61.  
    }
  62.  
    }
  63.  
    }
  64.  
    }
  65.  
     
  66.  
    protected override void OnSizeChanged(EventArgs e)
  67.  
    {
  68.  
    base.OnSizeChanged(e);
  69.  
    if (controlInfo.Count > 0)
  70.  
    {
  71.  
    ControlsChangeInit(this.Controls[0]);
  72.  
    ControlsChange(this.Controls[0]);
  73.  
    }
  74.  
    }
  75.  
     
  76.  
    #endregion
学新通
  1.  
    public FM1()
  2.  
    {
  3.  
    InitializeComponent();
  4.  
     
  5.  
    //获取控件初始信息
  6.  
    GetAllInitInfo(this.Controls[0]);
  7.  
     
  8.  
    //上电窗体最大化
  9.  
    this.WindowState = FormWindowState.Maximized;
  10.  
    }

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

建立FM2_Load窗口登录事件

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

建立button1_Click按钮事件

  1.  
    private void button1_Click(object sender, EventArgs e)
  2.  
    {
  3.  
    if (String.IsNullOrEmpty(this.textBox_username.Text))
  4.  
    {
  5.  
    MessageBox.Show("用户名不能为空");
  6.  
    }
  7.  
    else if (String.IsNullOrEmpty(this.textBox_password.Text))
  8.  
    {
  9.  
    MessageBox.Show("密码不能为空");
  10.  
    }
  11.  
    else if (!this.textBox_username.Text.Equals("admin"))
  12.  
    {
  13.  
    MessageBox.Show("用户名不存在");
  14.  
    }
  15.  
    else if (!this.textBox_password.Text.Equals("admin"))
  16.  
    {
  17.  
    MessageBox.Show("密码不正确");
  18.  
    }
  19.  
    else
  20.  
    {
  21.  
    //登录成功,跳转到主页面
  22.  
    Form FM3 = new FM3();
  23.  
    FM3.ShowDialog(this);
  24.  
    this.Close();
  25.  
    }
  26.  
    }
学新通

效果演示:

学新通

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

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

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

建立FM3_Load窗口登录事件

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

建立openPG1_Click按钮事件

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

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

  1.  
    private void openPG2_Click(object sender, EventArgs e)
  2.  
    {
  3.  
    this.mainPanel.Controls.Clear();
  4.  
    PG2 pg2 = new PG2();
  5.  
    pg2.TopLevel = false;
  6.  
    //pg2.Width = mainPanel.Size.Width;
  7.  
    //pg2.Height = mainPanel.Size.Height;
  8.  
    pg2.Show();
  9.  
    this.mainPanel.Controls.Add(pg2);
  10.  
    }

效果演示:

学新通

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhigjgeh
系列文章
更多 icon
同类精品
更多 icon
继续加载