GTK#和Windows Forms有什么区别?

时间:2009-04-28 08:44:33

标签: c# winforms mono gtk monodevelop

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

由于

4 个答案:

答案 0 :(得分:23)

Gtk#

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

通常,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的代码不是 便携式的。

来源:Picking the Right Toolkit

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:2)

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

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

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

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

如果您正在寻找.net中的多平台窗口,Qt现在可能是LGPLed的一个选项。

答案 3 :(得分:0)

简而言之:是的

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

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

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

要获得更好的解释,请查看here