如何在C#中制作自定义GUI

5
我对使用C#制作自定义GUI很感兴趣,并希望获得一些建议。附上的图片一般是我想创建的 - 即绘制文本,框/背景,图片,线条,圆圈和其他GUI元素(如文本输入字段等)。

我不知道从哪里开始,从谷歌搜索中我所能了解到的是,GDI +和使用绘画事件可能能够做到我想要的 - 但我不知道这是否是制作这样一个东西的正确方法,或者它是否与其他工具相比速度慢/无效。

//something along the lines of this: 
private void Form1_Paint(object sender, PaintEventArgs e)
{
    System.Drawing.Graphics graphicsObj;

    graphicsObj = this.CreateGraphics();

    Pen myPen = new Pen(System.Drawing.Color.Red, 5);

    Rectangle myRectangle = new Rectangle(20, 20, 250, 200);

    graphicsObj.DrawRectangle(myPen, myRectangle);
}

感谢您的时间,如果我有任何错误之处请原谅;我甚至很难向Google描述我想要做什么---所以非常感谢您的帮助! 来自3ds max的基于节点的酷炫GUI界面

2
作为一个长期使用WPF的人,我可以使用WPF来实现这个功能。然而,我怀疑这是否是最佳解决方案。我也曾经使用过游戏引擎,但它们主要使用C++和自己的GUI库。非常希望听到其他答案。 - Kolky
你绝对不想为所有事情使用Paint事件。GUI由控件、控件和更多的控件组成。寻找一些WinForms或WPF框架。 - H H
1
这是一个比较广泛的问题,因为它完全取决于应用程序以及GUI元素如何与其背后的程序逻辑进行交互。WPF的MVVM旨在使GUI设计师独立于其背后的业务逻辑程序员。当然,这会产生一些开销和延迟,但对于通用GUI/程序交互而言,这是一个相当不错的方法。 - Adwaenyth
2个回答

3

你是否考虑使用WPF? 根据您提供的截图,我会推荐这个桌面GUI技术,它比您使用的WinForms更加适合。

  • 通过我提供的链接学习WPF和XAML的基础知识。
  • 然后学习Canvas面板。
  • 接下来建议您学习模板

好了,以上内容应该可以帮助您入门。如果您有任何具体问题,我们在SO上都会乐意帮助您。

更新 在Items控件中使用Canvas面板的示例:https://dannyvanderkraan.wordpress.com/2015/02/12/wpf-listbox-with-arbitrary-positioning-and-custom-shaped-items/


非常感谢您的回答。说实话,我对WPF并不了解(除了它有很多看起来像HTML的东西),我会去研究一下。相比WinForms,WPF有哪些方面更适合呢?再次感谢您的帮助! - return true
除了性能原因(它以不同于WinForms的方式呈现图形),由于其核心非常依赖于XAML,它也更适合开发丰富的GUI。使用WinForms时,您经常需要自己拼凑WinControl或购买非常昂贵的控件才能获得所需的功能。而使用WPF,例如在您的示例中,您可以将Canvas面板作为ItemsControl中的ItemTemplate,并根据从各种控件组装的ItemTemplate渲染每个项目,使其看起来像屏幕截图中的那样。所有这些都是本地支持的。开发体验非常流畅和舒适。 - Danny van der Kraan
无法比这更好了,再次感谢您的帮助! - return true
欢迎查看我的一篇旧博客文章(请参见更新答案)。它描述了我之前所说的步骤。不过这有点高级,你可能需要在了解更多关于WPF后再查看它。 - Danny van der Kraan

0

你可以使用WPF,或者搜索Windows Forms主题。通过自定义Windows Forms,您可以创建令人惊叹的自定义GUI。如果您要创建新项目,我建议您使用WPF,因为它更容易实现自定义GUI(特别是透明度)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接