GTK#和Windows Forms有什么区别?

GTK#和windows窗体有什么区别? 他们完全不同吗?

谢谢

Gtk# :

GTK#是Gtk +工具包的.NET绑定。 该工具包是用C语言编写的,用于提高速度和兼容性,而GTK#binding提供了一个易于使用,面向对象的API供管理使用。 它正在由Mono项目积极开发,并且有各种可用的实际应用程序( Banshee , F-Spot , Beagle , MonoDevelop )。

通常,GTK#应用程序是使用MonoDevelop编写的,它提供了一个用于创建GTK#GUI的可视化设计器。

平台:Unix,Windows,OSX

优点:

  • 通过其Gtk +传统为可访问性提供良好支持。
  • 布局引擎非常适合处理国际化环境,并且可以在不破坏应用程序的情况下适应字体大小。
  • 应用程序与Gnome桌面集成。
  • API是Gtk +开发人员所熟悉的。
  • 大型Gtk +社区。
  • 可以使用Win32端口,在Windows XP上具有原生外观。
  • 此时API相当稳定,并且正在添加语法糖以改善它。
  • Unicode支持非常出色。

缺点:

  • Gtk +应用程序像MacOS X上的外国应用程序一样运行。
  • 文档不完整。

Windows.Forms :

Windows.Forms是Microsoft为Win32工具包开发的绑定。 作为数百万Windows开发人员(尤其是内部企业应用程序)使用的流行工具包,Mono项目决定生成兼容的实现(Winforms),以允许这些开发人员轻松移植其应用程序以在Linux和其他Mono平台上运行。

虽然.Net实现是对Win32工具包的绑定,但Mono实现是用C#编写的,以允许它在多个平台上工作。 大多数Windows.Forms API都适用于Mono,但是某些应用程序(尤其是第三方控件)偶尔会绕过API和P / Invoke直接进入Win32 API。 这些调用可能必须改为在Mono上工作。

通常,Winforms应用程序是使用Microsoft的Visual Studio或SharpDevelop编写的,它们都提供了用于创建Winforms GUI的可视化设计器。

平台:Windows,Unix,OSX

优点:

  • 存在大量文档(书籍,教程,在线文档)。
  • 大型活跃开发者社区。
  • 最简单的方法来移植现有的Windows.Forms应用程序。

缺点:

  • 固定布局使国际化变得棘手。
  • 在非Windows平台上看起来很陌生。
  • 调用Win32 API的代码不可移植。

资料来源: 挑选合适的工具包

它们都是GUI工具包,每个工具包都有自己的优点和缺点。 根据我的经验:

  • Winforms不需要在Windows上安装,Gtk#需要在Windows上安装。
  • Winforms在Visual Studio中拥有设计师,Gtk#拥有独立设计师并在MonoDevelop中集成设计。
  • Winforms绑定到Windows,Gtk#是跨平台的。
  • Winforms很慢而且闪烁。 Gtk更快。
  • 大多数Winforms控件都是围绕标准Windows控件的包装器,并提供非常有限的function。 Gtk小部件function更丰富。
  • Gtk允许创建具有复杂布局的表单和小部件。 Winforms只提供简单的布局变体,FlowLayout和TableLayout和AutoSize太弱,无法使用复杂的表单来resize并自动适应不同的字体大小,不同的分辨率。
  • 开罗比Gdi +更快,function更多(Cairo支持更多类型文件的输出和输入,例如svg,pdf)
  • Gtk#是开源的,winforms不是
  • Winforms和Gtk#有第三方控件/小部件(但是,使用Gtk#对它们的需求较少,因为基本控件工作得非常好)。

简而言之,我不建议使用Winforms(除非有充分的理由没有比.NET FW更多的依赖),而是使用Gtk#或WPF。

它们是用于创建具有不同来源的窗口化应用程序的不同图形工具包。

GTK#是GTK库的绑定,主要用于linux / unix。 它也适用于Windows,但它不是它所设计的原生环境。

Winforms是另一个工具包,这个工具包来自微软。

它们是完全不同的API,用于实现相同的结果,但每个API更适合于平台。

如果你正在寻找.net中的多平台窗口,Qt可能是一个选择,因为它得到LGPLed。

简而言之:是的

两者都是GUI-Tookits,但WinForms(如名称所示)主要是为windows开发的。 GTK是为Gimp开发的,是一种用于多操作系统工具包的方法。

如果您的应用程序仅在Windows上运行,则在大多数情况下您应该使用WinForms。

如果你的应用程序将在不同的操作系统下运行(如linux,bsd,windows,macos等),你会更喜欢GTK。

有关更好的解释,请看这里 。