C# WinForms:在同一窗口中显示新窗体
我是一名经验丰富的MVC开发人员,第一次尝试为我工作的公司开发内部WinForms生产应用程序 当我的应用程序第一次加载时,它会加载一个LoginForm(它从BaseForm继承来设置窗口大小、NotifyIcon属性等)。成功登录后,我希望保留相同的窗口,但用新屏幕替换内容。这看起来很基本,但即使在搜索了如何做到这一点之后,没有一个像我期望的那样工作 我尝试过这样的代码:C# WinForms:在同一窗口中显示新窗体,c#,winforms,C#,Winforms,我是一名经验丰富的MVC开发人员,第一次尝试为我工作的公司开发内部WinForms生产应用程序 当我的应用程序第一次加载时,它会加载一个LoginForm(它从BaseForm继承来设置窗口大小、NotifyIcon属性等)。成功登录后,我希望保留相同的窗口,但用新屏幕替换内容。这看起来很基本,但即使在搜索了如何做到这一点之后,没有一个像我期望的那样工作 我尝试过这样的代码: private void Button_Click(object sender, RoutedEventArgs e)
private void Button_Click(object sender, RoutedEventArgs e)
{
Window1 W1 = new Window1();
W1.Show();
this.Close();
}
但当然,这会打开一个新窗口并关闭当前窗口,这不是我想要的。我想保留相同的父窗口,只替换内容
我有两个问题(它们有点相关):
1) 如何简单地用新表单替换父窗口内容,而不是在新窗口中打开它?现在我的表单位于单独的WinForms控件(LoginForm和ChatForm)中。为了实现这一点,我是否需要以不同的方式构建我的项目
2) ChatForm包含一个SplitContainer,左侧有按钮(参见下面的屏幕截图)。单击每个按钮时,右侧窗格的内容应发生更改。用户控件(一个用于聊天队列,一个用于聊天窗口,传递参数让它知道我们正在与哪个人聊天)最能代表这些功能吗
我只是想了解一下基本的WinForms项目架构和不同内容屏幕之间的导航
您可以将第一个“窗口”的控件放在面板上,使用Dock=DockStyle。填充
而不是直接在表单上。第二个“窗口”的控件位于另一个类似的Dock
ed面板上。两个面板都在表格上。然后panel1.SendToBack()代码>。(或panel2.BringToFront();
)
或者你可以:
Controls.Remove(panel1);
Controls.Add(panel2);
如果您愿意这样做。您可以将第一个“窗口”的控件放在面板上,使用Dock=DockStyle.Fill而不是直接放在表单上。第二个“窗口”的控件位于另一个类似的Dock
ed面板上。两个面板都在表格上。然后panel1.SendToBack()代码>。(或panel2.BringToFront();
)
或者你可以:
Controls.Remove(panel1);
Controls.Add(panel2);
如果您愿意的话。我强烈建议您创建一个登录用户控件和聊天用户控件
与web相比,窗口就像一个页面。。。如果不刷新页面,就无法切换页面。因此,如果希望保持ajax的酷炫外观,可以创建一个单页面应用程序,并在其中粘贴不同的控件
至于架构,不建议将所有控件放置在窗口级别或使用布局控件(面板)创建逻辑分隔
构建良好的用户控件租用机制是winforms应用程序的标准体系结构
祝你好运。我强烈建议你创建一个登录用户控件和聊天用户控件
与web相比,窗口就像一个页面。。。如果不刷新页面,就无法切换页面。因此,如果希望保持ajax的酷炫外观,可以创建一个单页面应用程序,并在其中粘贴不同的控件
至于架构,不建议将所有控件放置在窗口级别或使用布局控件(面板)创建逻辑分隔
构建良好的用户控件租用机制是winforms应用程序的标准体系结构
祝你好运。1)是的,你必须以不同的方式设计项目
将窗体视为一个父窗体。所有其他表单(登录、聊天)都需要设计为用户控件。然后您必须将所有控件放置在父窗体中,并且必须以编程方式管理这些控件的顺序,即登录应先于聊天等。然后引入类似于NavigationController的类,它将负责管理控件的顺序,例如隐藏登录和显示聊天等。该类可以在内部维护一个堆栈来管理转换
2) 是的,你说得对。使用UserControls的相同概念也适用于这里
MVC开发人员在使用WinForms时确实感到非常困难。但好消息是,通过手动实现MVC的理论概念,您可以在WinForms中完成类似的设计。1)是的,您必须以不同的方式构建项目
将窗体视为一个父窗体。所有其他表单(登录、聊天)都需要设计为用户控件。然后您必须将所有控件放置在父窗体中,并且必须以编程方式管理这些控件的顺序,即登录应先于聊天等。然后引入类似于NavigationController的类,它将负责管理控件的顺序,例如隐藏登录和显示聊天等。该类可以在内部维护一个堆栈来管理转换
2) 是的,你说得对。使用UserControls的相同概念也适用于这里
MVC开发人员在使用WinForms时确实感到非常困难。但好消息是,通过手动实现MVC的理论概念,您可以在WinForms中完成类似的设计。为了获得这种效果,我将使用TabControl
布局右侧,并根据单击的按钮简单地切换选项卡页面
如果您愿意,也有隐藏选项卡的方法,这将模拟交换面板
控件,但没有丑陋的控件。Add()
调用。为了获得这种效果,我将使用选项卡控件
来布置右侧,并根据单击的按钮简单地切换选项卡页面
如果您愿意,也有隐藏选项卡的方法,可以模拟交换面板
控件,但不使用丑陋的控件。Add()
调用。我的建议是清除所有控件(或您希望清除的控件),然后在同一表单上添加其他控件。我的建议是清除所有