C#窗口切换问题:如何切换回主窗体
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#窗口切换问题:如何切换回主窗体相关的知识,希望对你有一定的参考价值。
(环境VS2010,C#,WPF工程)
是这样的,我有一个程序,本来就是Mainwindow,运行的时候自动显示的就是这个窗体,也没有经过实例化什么Mainwindow XX=new XXXX的语句
现在我想做到这样:
为窗口Mainwindow设计一个小窗体,当点击Mainwindow上的按钮时,主窗体隐藏,小窗体显示;当点击小窗体上的一个按钮时,小窗体隐藏,主窗体恢复显示。(有点像悬浮窗那种的)
我已经知道可以用shutdown的方法使两者同步关闭,但是从小窗体恢复成主窗体时遇到了问题:
我在主窗体的cs文件中使用Preview smallwindow=new Preview()
在Window_Loaded中将smallwindow的visibility设置成hidden
在按钮事件中写this.Hide()以及smallwindow.Show()
但在子窗体Preview.cs中遇到了问题,不知道如何把主窗体恢复显示,this应该不管用了吧,而且Mainwindow没有那种new语句,也没有为它定义名称,这样也没法用XX.Visibility=XXX来实现了.如何破?
代码如下:
主窗口:
public partial class frmMain : Form
public static frmMain f0 = null; //用来引用主窗口
public frmMain()
InitializeComponent();
f0 = this; //赋值
private void button1_Click(object sender, EventArgs e)
new frmCx().Show();
this.Hide();
子窗口:
public partial class frmCx : Form
public frmCx()
InitializeComponent();
private void frmCx_FormClosing(object sender, FormClosingEventArgs e)
frmMain.f0.Show(); //显示主窗口
参考技术A 变量法
smallwindow 添加
public Mainwindow mainwindow ;
我在主窗体的cs文件中使用Preview smallwindow=new Preview()
添加 smallwindow.mainwindow = this; 参考技术B 定义一个Mainwindow类型的变量mainwindow,当显示小窗体时,把this赋予小窗体中的mainwindow,然后就可以在小窗体中用mainwindow.hide() 参考技术C 在子窗体可以使用this.Owner来获取父窗体的实例本回答被提问者采纳 参考技术D //主窗体
public partial class MainForm : Form
Preview smallWindow;
public MainForm()
InitializeComponent();
smallWindow = new Preview(this);
private void button1_Click(object sender, EventArgs e)
this.Hide();
smallWindow.Show();
//子窗体
public partial class Preview : Form
private Form mainWindow;
public Preview(Form mainWindow)
InitializeComponent();
this.mainWindow = mainWindow;
private void button1_Click(object sender, EventArgs e)
this.Hide();
mainWindow.Show();
private void Preview_FormClosed(object sender, FormClosedEventArgs e)
mainWindow.Show();
C#窗口的切换
最近在学习TCP/UDP,线程那部分,感觉好难,但是若不努力迎上去难道问题自己就能迎刃而解么?既然什么都要自己不断努力那就好好加油吧!
今天就记录一下我之前各种找的窗口切换问题吧~
1、第一个方法比较简单,也比较萌,是我最近无意间发现的~
1 public MainFrom_Client() 2 { 3 InitializeComponent(); 4 SetMainTreadState(); 5 } 6 7 //先设定主窗体(也就是MainFrom_Client)的透明度和任务栏状态 8 private void SetMainTreadState() 9 { 10 //这个其实是障眼法!把主窗体(也就是MainFrom_Client)的弄成隐形的, 11 //只需要把Opacity改成100就出来了,哈哈哈哈哈哈哈哈 12 this.Opacity = 0; 13 //然后在把菜单栏运行的显示也隐形掉 14 this.ShowInTaskbar = false; 15 } 16 17 private void ResetMainThreadState() 18 { 19 this.Opacity = 100; 20 this.ShowInTaskbar = true; 21 //把当前控件带到前面来就好了 22 this.BringToFront(); 23 }
此时窗体是隐形的,可以随便重新设定一个函数,等满足设定的某个特定条件时就调用ResetMainThreadState()函数,这样主窗体MainFrom_Client就会显示出来了~
萌萌哒的掩耳盗铃方式~
2、还有一个就是实打实的窗体调用问题了(查了好久的知识,累死宝宝了T^T)
我的Program.cs文件,先确定最先出现的登录界面Login_interface()。
1 static void Main() 2 { 3 Application.EnableVisualStyles(); 4 Application.SetCompatibleTextRenderingDefault(false); 5 Login_interface login_1 = new Login_interface(); 6 login_1.Show(); 7 Application.Run(); 8 }
一般的Program.cs文件里都是Application.Run(new Login_interface());,这样最大的问题就是,如果我从登录界面进入用户界面,想要关闭登录界面的话,系统就会自动以为你退出了程序,这样我就没办法进入到用户界面,此时如果我非要进入用户界面的话,就可以用类似1的方法,用隐藏等各种方式以此不显示登录界面。
这种方法其实不错,可是我就是有点死性子,所以我一定要关闭登录界面,所以在Program.cs中设定好了Application.Run();,这样我后面怎么“虐待”登录界面,都不会影响程序的继续使用。
然后就是我的登录界面的程序了~简单了吧~
1 #region 由登陆界面进入到用户界面 2 private void button1_Click(object sender, EventArgs e) 3 { 4 5 if (textBox_UserName.Text == "1" && textBox_PassWord.Text == "1") 6 { 7 this.Close(); 8 User_Panel fm = new User_Panel(); 9 fm.Show(); 10 } 11 else 12 { 13 MessageBox.Show("用户名与密码错误,请重新输入"); 14 } 15 } 16 #endregion
以上是关于C#窗口切换问题:如何切换回主窗体的主要内容,如果未能解决你的问题,请参考以下文章
C# WinForm 当窗体控件图片过多时,切换界面的显示会发生闪烁,该怎么取消闪烁。(注:双缓冲开启了)