【问题标题】:c# - changing the appearance of my windows formc# - 改变我的windows窗体的外观
【发布时间】:2014-05-08 19:18:27
【问题描述】:

我正在开发一个 Windows 窗体。我想更改表单及其控件的物理外观。我能够使用 Skincrafter 演示,但这使应用程序变得更重。我对浏览选项卡、移动窗口等时的“沉重”感觉不满意。这是一个相当简单的程序,不使用 skincrafter 时我没有这个问题。不使用它时,GUI 反应灵敏,我想保持这种状态。

我尝试了许多不同的皮肤,结果在每种情况下都非常相似。

所以我不会使用 skincrafter,除非有人指出导致 GUI 变慢的可能原因。我按照他们的教程进行操作,没有做任何其他事情。简单的过程。之前:快速 GUI - 之后:慢速 GUI。

谁能推荐我另一种更改控件/表单外观的方法?有没有办法在不依赖第三方皮肤软件的情况下以编程方式更改控件和表单的外观?

请注意,我不希望我的用户更换皮肤。我想申请一个,就是这样。

谢谢 史蒂夫

编辑: 该项目还远未完成,所以我要给 WPF 一些真正好的想法,所以当我有现在的 4 倍大时,我最终不会这样做。 我已经开始转换了,应该问题不大。发现timer和serialport不能在toolbox前面,timer被dispatchtimer替换。到目前为止没什么大不了的。 让我想使用 WPF 的另一件事是我可能需要制作图表(绘图)来显示温度随时间的变化。我使用串行端口与读取一堆温度传感器和风扇速度的外部 USB 控制器(虚拟 COM 端口)进行通信。我怀疑使用 WPF 绘图会更好。 最后一件事:它只是关于颜色/字体,但更多的是关于按钮的外观,实际窗口的外观(边框形状)。我想做的是与 html 和 css 类似的事情。我确实想要自定义标签,让它们看起来像“数字显示器”,用于实时温度和风扇速度测量。

再次感谢大家提供的帮助!

【问题讨论】:

  • 您可以查看商业控件套件,例如 Telerik 和 DevExpress。但是如果你真的很关心我听说的 UI,最好转向 WPF。在 Windows 窗体中这并非不可能,但肯定更难。
  • 我还建议您为此寻找第三方。你不太可能在合理的延迟内想出更好的东西。要么,要么完全放弃剥皮的想法。
  • Can anyone recommend me another way to change the appearance of my controls/form? - 您正在寻找WPF。在创建基于 .Net 的 Windows 桌面应用程序时,它是首选的 UI 框架。 winforms 是一项非常古老的技术,不支持任何级别的丰富性或自定义。
  • 感谢您的建议。与许多较小的公司一样,我们没有内部程序员,我们也没有分包这个的预算。我之前做过一些 winform 的工作,这个稍微重要一点,因为它会被最终用户使用,而不是我之前做的那些我是唯一的用户(实验室应用程序)。我想知道将整个项目移动到 WPF 会有多困难,但我会研究一下。谢谢
  • 这几乎完全取决于您设计项目的好坏。如果您遵循一些好的做法并将您的逻辑与 UI 分开,那应该相当简单,因为您可以重用其他层。

标签: c# skin


【解决方案1】:

在遥远的过去,我通过子类化开箱即用的控件(标签、文本框等)并让该子类从XML 文件(也可以使用 app.config)。

这种方法很容易实施,而且我没有看到明显的性能下降。

如果您只想要一个一致的新外观并且不需要让最终用户从各种皮肤中进行选择,那么子类化方法非常简单。例如,要修改Label 的外观:

public MyLabel : Label
{
    MyLabel()
    {
        this.ForeColor = Colors.Blue;
    }
}

然后,如果您的代码中当前有标签,请改用 MyLabel。

如果您要开始一个新项目,我强烈建议您改用 WPF。它提供了一个更加灵活的 UI 框架。一个关键特性是将外观与 UI 实现分开。

【讨论】:

  • 感谢您的建议。与许多较小的公司一样,我们没有内部程序员,我们也没有分包这个的预算。我之前做过一些 winform 的工作,这个稍微重要一点,因为它会被最终用户使用,而不是我之前做的那些我是唯一的用户(实验室应用程序)。我想知道将整个项目移动到 WPF 会有多困难,但我会研究一下。谢谢
  • 如果它是一个现有项目并且您没有内部程序员,那么改进 WinForms 可能是一个更好的解决方案。我将添加更多关于如何子类化的细节。如果你只需要改进外观而不是让它成为一个灵活的皮肤(因为用户可以选择哪个皮肤),那么子类策略真的很容易。
  • 值得一提的是,“自定义” 的想法不仅仅是改变颜色或 UI 元素的属性,winforms 中的真正自定义需要一种称为“所有者绘制”的技术",真的很麻烦很繁琐。
  • @HighCore:当然可以,但是可以通过可用属性显着改善基本的黑底灰外观。 OP 的目标是让这个应用程序比内部应用程序更好一点,因为最终客户会在有限的资金和编程专业知识的限制下看到它。
  • 我编辑了我的问题。似乎 WPF 可能是一种更好的方法,因为我可能需要图形和窗口的边框形状。如果我不能将我的项目移动到 WPF,我可能最终会这样做!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 2012-02-04
  • 2012-12-03
  • 1970-01-01
相关资源
最近更新 更多