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多个窗体界面间的切换

窗体切换特效

C# WinForm 当窗体控件图片过多时,切换界面的显示会发生闪烁,该怎么取消闪烁。(注:双缓冲开启了)

Selenium 如何从 iframe 切换回主文档进行操作

C# WinForm中,如何判断窗口已打开

C#如何通过一个按钮实现窗体界面的中英文切换?