微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用多个视图构buildC#.NET窗口应用程序

我正在重写一个旧的应用程序,并将其作为尝试C#和.NET开发的好机会(我通常在C中做了很多插件)。

应用程序基本上是一个收集数据的计时器 它有一个开始视图和一个button来开始测量。 在测量过程中,根据用户想要查看的信息,该应用程序有五个不同的视图。

切换视图的最佳做法是什么? 从开始运行? 在运行视图之间?

思路:

在C#中忽略无效的邮件服务器证书

在.NET中的事务性打开/写入/replace?

使用WebProxy的HttpWebRequests工作,然后在一段时间后失败

我可以在Windows应用程序中而不是在网页中包含reCAPTCHA吗?

开发BLE Windows 8.1

使用一个表单并隐藏并显示控件

使用一个开始窗体,然后使用TabControl的窗体

使用六个单独的表格

在同一进程中创build的所有其他线程之后停止线程

如何获得在Windows上使用.NET的实际目录path?

.net File.copy复制许多小文件时(非networking)很慢,

C#调用本地​​C ++的所有function:使用什么types?

在WCF和Windows服务中下载大文件

创建一堆覆盖面板是一个设计时间的噩梦。

我建议使用一个选项卡控件与每个“视图”在一个单独的选项卡上,然后在运行时选择正确的选项卡。 您可以通过在表单的Load事件中添加类似的内容来避免显示标签页头:

tabControl1.Top = tabControl1.Top - tabControl1.ItemSize.Height; tabControl1.Height = tabControl1.Height + tabControl1.ItemSize.Height; tabControl1.Region = new Region(new RectangleF(tabPage1.Left,tabPage1.Top,tabPage1.Width,tabPage1.Height + tabControl1.ItemSize.Height));

我所做的是有一个小组,你的不同意见将在主表格上。 然后为您的不同视图创建用户控件。

然后,当我想在“视图”之间切换时,将其停靠在主窗体上的Panel上。代码看起来有点像这样。

我preffer这是因为你可以重用你的意见,就像如果你想打开一个标签中的视图,你可以停靠在标签页内的用户控制…甚至继承tabpage而不是usercontrol使一些更通用

public partial class MainForm : Form { public enum FormViews { A,B } private MyViewA viewA; //user control with view a on it private MyViewB viewB; //user control with view b on it private FormViews _formView; public FormViews FormView { get { return _formView; } set { _formView = value; OnFormViewChanged(_formView); } } protected virtual void OnFormViewChanged(FormViews view) { //contentPanel is just a System.Windows.Forms.Panel docked to fill the form switch (view) { case FormViews.A: if (viewA != null) viewA = new MyViewA(); //extension method,you Could use a static function. this.contentPanel.DockControl(viewA); break; case FormViews.B: if (viewB != null) viewB = new MyViewB(); this.contentPanel.DockControl(viewB); break; } } public MainForm() { InitializeComponent(); FormView = FormViews.A; //simply change views like this } } public static class PanelExtensions { public static void DockControl(this Panel thisControl,Control controlTodock) { thisControl.Controls.Clear(); thisControl.Controls.Add(controlTodock); controlTodock.Dock = DockStyle.Fill; } }

选项卡表单通常是很好的…但是只有当你想让用户能够随时看到任何视图时……听起来你可能不会。

单独的形式绝对有效,但是您需要确保交换机看起来不错…如果您确定新表单看起来与旧表单的大小和位置完全相同,那么对于不断变化的控件来说,它看起来就像是一样的。

我经常使用的方法实际上是预先设置个人“面板”控件上的所有控件,然后根据需要显示和隐藏这些面板。 “面板”控制基本上是一个控制容器…你可以移动面板和它的所有控制相对移动。 如果您显示或隐藏面板,其上的控件也一样。 他们对这样的情况很好。

我经常使用的方法实际上是预先设置个人“面板”控件上的所有控件,然后根据需要显示和隐藏这些面板。

而不是使每个视图在一个单一的形式内的面板,你可以使每个视图UserControl。 然后创建一个窗体并编写代码来创建并在窗体中显示正确的UserControl并从一个切换到另一个。 这将更容易维护,因为你将有一个单独的类为每个视图,而不是一个单独的Form类与6个面板,每个都有自己的控制 – 这似乎很难和错误倾向于维护。

我也将检查WPF或智能客户端软件工厂的 复合应用指南

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐