WinFormC# 记录页面切换学习过程
记录页面切换学习过程,希望对各位有需要的朋友有所帮助,也希望对本人不完善的想法加以指导纠正,感谢!
想法介绍:是一个上位机系统的页面切换程序,页面分为三层有【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);
-
}
效果演示:
上述就是目前的学习过程及实现过程了,希望对有需要的朋友有帮助,更希望有朋友加以指点共同学习!
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhigjgeh
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22