我正在使用 Visual Studio、winforms 制作应用程序,我正在使用 openTK。最近我想让它跨平台。我将使用 Mono,因为我不知道其他类似的东西。而且我完全没有使用 GTK+ 的经验。在我的应用中,目前有4个窗口(当然以后会更多)。我想让应用程序在 Windows、Linux 和 OS X 上运行得更快。我读过,GTK+ 比 WinForms 好,但仍然不确定该选择哪个。那么,我应该为 GTK+ 重新制作所有内容还是继续使用 WinForms,为什么?另外,是否有任何工具可以为我完成这项工作?
最佳答案
老实说,您需要告诉我们更多关于您的受众/预期市场的信息,才能提供一个很好的答案,但我从一些开发经验中获得的 0.02 美元是 Mono 的 GUI 开发如果您想“正确”地做桌面,那么桌面是一个多目标事件。您将需要非常模块化地开发共享后端,然后为每个平台编写一次 UI。
window
如果您的应用还处于起步阶段,那么在 Mono 上实现的 Windows.Forms 是一个很好的拐杖,它允许您立即以 Windows 为目标,并在 OS X 和 Linux 上以有点残缺的方式部署。但是请注意,我在 IRC 上被告知在 Mono 上开发 Windows.Forms 基本上已经死了。旧错误没有得到更新,例如,我在几分钟的测试中遇到了 SelectionBackColor 在 OS X 上的 RichTextBox 中不起作用(这是 OS X 上用于 Windows.Forms 的 lib Mono 中的一个问题)。整洁,它就在那里,也许对快速实用程序有好处,您可以在其中编写代码来绕过它的限制(有关示例,请参见问题 here)。
操作系统
针对 OS X,如果你有一个真正的、商业的、最终用户的应用程序,你将需要习惯,嗯,与 Interface Builder 交互. 我应该在这里明确指出,使用 XCode 和 Interface Builder 绝对需要您可以访问运行 OS X 的机器。否则,您将无法使用 Windows.Forms,或者,我认为最好是 Gtk#。
Xamarin 在其 IDE 与 XCode 中构建的 native UI 的连接 stub 方面做得非常出色。这也是他们为 iOS 开发所做的。它工作得相当好,尽管文档很薄弱。有一个 great video from 2011 from Michael Hutchingson describing this process ,尽管我认为它已经过时了(即“旧”)。 ( Direct link to video )
如果您想瞄准 Mac App Store,我假设 Interface Builder 也是您唯一真正的选择。但是看,这是一个 stub 到您的 C# 代码的 native UI,从所有方面考虑,这是一个很好的妥协。
Linux
我还没有真正针对 Linux。似乎 Gtk# 很适合,但我没有太多实际帮助。我的东西构建在 Windows.Forms 中,并且有一些粗糙的边缘,就像在 OS X 中一样。如果我变得更认真,我会从 Gtk# 开始,这也是 MonoDevelop 拥有其 GUI RAD 的地方。
一个严肃、成熟、跨平台的 Gtk# 应用程序示例
快速说明:Banshee使用 Gtk#以 OS X、Windows(alpha)和 Linux 为目标。通过查看 its mailing list,您可以了解在大型应用程序跨平台上使用 Gtk# 有多么困难。和其他资源。
抱歉,这个消息并不容易。没有 Elixir /唯一正确答案。
201607 更新:我认为答案正在慢慢变成使用 Xamarin.Forms 来定位跨平台。您现在可能仍然无法编写单独的 Mac 界面,但有理由相信 Xamarin.Forms 也会在某个时候得到支持;见下文。
不幸的是,如果您的目标是 Linux,我认为您现在仍然和以前一样在同一条船上。
关于c# - 我应该用 GTK+ 而不是 WinForms 为 Mono 重写 GUI 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16254547/
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
使用rspec-rails3.0+,测试设置分为spec_helper和rails_helper我注意到生成的spec_helper不需要'rspec/rails'。这会导致zeus崩溃:spec_helper.rb:5:in`':undefinedmethod`configure'forRSpec:Module(NoMethodError)对thisissue最常见的回应是需要'rspec/rails'。但这是否会破坏仅使用spec_helper拆分rails规范和PORO规范的全部目的?或者这无关紧要,因为Zeus无论如何都会预加载Rails?我应该在我的spec_helper中做