C# GUI编程入门:从哪里开始?

26

我是一名C++/Java开发人员,对.Net或GUI没有什么概念。我需要为2000/XP/Vista/7开发一个Windows应用程序。

我认为我已经得出结论,C#是最好和最快的方法(如果我错了,请纠正我)。你有什么建议?我应该学习哪种GUI方法?(Forms?其他的东西?)

在.Net 2.0模式下编译是最好的方式吗?这将是一个供公众下载的应用程序。

9个回答

20

对于桌面应用程序,基本上有两个选择: WinFormsWindows Presentation Foundation (WPF)。

WinForms更传统,因此更容易学习。因此,如果您计划实际使用您所获得的GUI开发知识来开发.NET,我建议您最好从头开始深入研究WPF。它是一个更丰富的框架,也是微软为桌面应用程序付出努力的地方。它也类似于Silverlight,这意味着当你了解WPF时,你也可以轻松地进入Silverlight。

祝好运!


2
能否给我点踩的人评论一下,说明他们不同意什么,这样我们都能从中学习? - stiank81
1
@bambuska - “WinForms更传统,因此更容易学习。” 通常情况下并不是这样。只有当你来自事件驱动的GUI背景时才是这样。 - codekaizen
3
谢谢您的评论。您说得对,但与WPF相比,我仍然认为这是有效的。许多其他GUI选项都是事件驱动的,因此与WinForms相似(例如Java Swing、Delphi、Qt等),而WPF与大多数其他选项不同。 - stiank81

15

在我个人的开发经验中,Windows Forms 是快速部署 Windows 平台 GUI 应用程序最简单的方法之一。当然,WPF 也是另一种选择,但使用它可能需要您花费一些时间熟悉 XAML。Windows Forms的外观和感觉与Java的许多可用GUI选项相似,但在我看来比其中大多数都要好得多。

如果您想在.NET中实现最快速的GUI开发时间,Windows Forms是首选。


2
我不同意。WPF更快,特别是对于有Web背景的人来说。WPF的设计故事更好,而且至少与WinForms一样具有良好的代码访问性。 - codekaizen
8
我不同意codekaizen的观点。如果我们谈论速度,对于那些没有接触过这两种技术的人来说,WinForms要快得多。此外,可视化设计器实际上可以正常工作,而且不需要另一个程序(即Blend)来使用。 - Dmitri Nesteruk
1
请记住,OP已经是一名有经验的Java开发人员 - 对他来说,学习一个Java GUI框架比学习一个全新的平台和一整套工具更容易些,不是吗? - Duncan Bayne
1
@Dmitri - 你有没有帮助新手学习WPF和Winforms的经验?我有。对于他们来说,WPF很容易。只是对于你来说有点难,因为你已经习惯了WinForms传统的方法。另外,你不需要一个单独的程序。是什么让你有这个想法?VS Express完全可以胜任。 - codekaizen
2
我的观点是针对那些从Java转向.NET进行GUI开发的人。WPF是一个非常强大(而且相当容易)的平台,但对于从未使用过类似平台的人来说,学习曲线可能会更陡峭。像Windows Forms设计器一样,不错的Java GUI工具都非常相似,但我不知道有哪个工具类似于WPF。 - Nathan Taylor
显示剩余3条评论

9
是的。当涉及到.NET开发时,C#是首选语言。由于您已经使用Java编程,您会发现该语言非常熟悉(它看起来更加清晰,并且具有一些非常好的功能,例如委托,如果您真的想要,甚至可以使用指针,尽管在大多数情况下您不需要)。
它是SWF(System Windows Forms)或MWF(Managed Windows Forms - 使用System.Drawing编写的托管代码轻量级版本的SWF - 它使您摆脱了基础经典SWF的WinAPI)。
还有GTK-Sharp,这是一个用于C-Sharp的GTK+绑定,但由于您正在为Windows开发,用户会发现安装第三方GUI框架很奇怪。
我不建议使用WPF。它直接调用底层图形硬件,这意味着它非常快,但完全不可移植。它只能在x86系统上运行(而不是SPARC等),并且需要支持DirectX的硬件渲染单元(显卡),并且无法在具有强硬件抽象的系统上运行(例如大多数类Unix操作系统,如BSD或Linux或Solaris)。
Novell还表示,由于其强烈的硬件依赖性(Novell希望Mono可在许多处理器平台上移植),他们不会在不久的将来实现WPF。不要使用WPF。软件不再只是一种一次性产品,当涉及到操作系统时,我们处于旋转时代。您今天运行的平台不一定是明天要运行的平台。 WPF是由Microsoft和Intel开发的专有和受专利保护的技术。如果您使用它,您将发现自己处于非常好的Win32-on-x86供应商锁定中。这意味着您最终肯定会完全重写应用程序。即使您今天不需要可移植性,也请从一开始编写可移植软件。我从经验告诉您,明天您会需要可移植性。绝对!

1
SWFе’ҢMWFдёҚжҳҜе…ідәҺWindowsдёҠзҡ„Windows FormsејҖеҸ‘зҡ„жңүж•ҲжңҜиҜӯгҖӮSystem.Windows.Forms = WinForms = жүҳз®ЎзӘ—дҪ“гҖӮдҪ жҳҜеңЁи°Ҳи®әдҪҝз”ЁMonoеңЁLinuxдёҠзҡ„WinFormsеҗ—пјҹеҰӮжһңжҳҜиҝҷж ·пјҢдҪ еә”иҜҘеңЁдҪ зҡ„еӣһзӯ”дёӯжҫ„жё…пјҢд»Ҙе…Қи®©жҸҗй—®иҖ…ж„ҹеҲ°еӣ°жғ‘гҖӮ - Ash

3
你可以使用Windows Forms或Windows Presentation Foundation来开发GUI;虽然,Windows Forms可能对你更加熟悉。如果你在Google上搜索“Windows Forms教程”,你会得到很多入门选项。
如果你需要使用.NET 2.0,你将受限于Win Forms。WPF需要.NET 3.5。
我建议下载微软免费的Visual Studio Express Edition用于开发。它包括一个优秀的拖放式GUI设计工具。

从技术上讲,WPF 只需要 .Net 3.0。 - codekaizen
2008 Express 版本不应该提供对 2.0、3.0 和 3.5 的访问权限吗? - Chris
是的,Chris,但他可能需要为没有最新版本.NET的客户开发程序。 - Daniel Sorichetti

3
我建议先学习Winforms,然后再转向WPF。Winforms更容易学习,并且可以快速获得一些工作成果。但是未来的趋势是WPF,因此不应该忽视它。我发布了一些关于GUI开发的好书和链接。
书籍:
- 日常物品的设计:这是一本非常好的关于界面设计的书籍。它并不特定于软件,但对于GUI设计师来说是必读的。 - Coding Horror:他在书单中推荐了很多开发书籍,但以下是与界面相关的书籍:

不要让我思考

关于面向用户设计3.0

疯人院的管理者

GUI失误

网站链接


3
我不同意所有WinForms支持者的看法。它并不更容易。对于那些拥有传统GUI编程经验的人来说可能会更容易,但是这位发帖者并没有这种经验。
WPF有更好的设计架构,数据绑定比WinForms好得多。你可以至少与WinForms一样快地开始使用WPF,然后在不受WinForms限制的情况下更进一步。再加上VS 2010中的设计时数据绑定,我认为任何刚开始GUI开发的人都应该完全绕过WinForms。

1
我强烈建议直接开始使用WPF。我维护一个复杂的WinForms应用程序,如果当初我们就使用WPF就好了。 - softveda

1

C# WinForms 在快速实现实用 GUI 方面是最快的。但如果你想制作复杂的 GUI,包括动画、3D 等,WPF 更好。

你可以使用 CodePlex 查找一些好的工作项目,以了解 WinForms 和 WPF 的最佳实践。

你也可以在 这里 找到一些关于 WPF 和 WinForms 的好书。


1

毫无疑问是C#。用Winforms来开发业务应用程序/经典GUI。

阅读Petzold的“使用C#编程Windows”

或者直接使用Visual Studio进行开发。使用VS创建GUI非常容易 - 你会喜欢它的。

你会发现从Java转换到C#语言相当简单(不过GUI部分可能需要花费一些功夫)。


-3
我认为C#是最好和最快的方法(如果我错了,请纠正我)。你有什么建议?
个人而言,我会坚持使用Java。我们(指我共同创立的公司OffByZero)发布了一个名为OBZVault的加密文本编辑器,它是用Java编写的。
我们最初在Linux上编写它,然后移植到Mac OS X和Windows。我们发现Windows版本提供了一个完全可接受的外观和感觉 - 几乎(但不完全)像一个本地的Windows应用程序。
我们使用InnoSetup构建了一个本地的Windows安装程序,并发现它非常好用。

总之,除非你想学习一种新的语言和平台,或者你需要不同平台(如.NET)提供的特定功能,否则在Windows开发中仍然应该使用Java。你需要学习Java GUI框架,但如果你转向.NET,你还需要学习WPF或WinForms。

对于有经验的.NET开发人员来说,使用WinForms或WPF构建Windows应用程序可能会更快,但如果你已经精通Java,我建议坚持使用你所熟悉的工具(语言、库、IDE)。


6
这并没有回答问题,而且看起来太像贵公司的广告了。 - yu_sha
2
是的,我是。OP是一位经验丰富的Java开发人员。如果你只想制作一个单独的GUI应用程序,为什么要学习全新的平台和一整套工具呢?我的意思是,如果你把它当作一个学习练习,那就去做吧,但从任何其他角度来看,这都没有任何意义。 - Duncan Bayne
对于那些投票反对我的答案的人,我有一个问题 - 是因为我建议 OP 选择 Java 而不是 C#,还是因为我链接到了我自己的商业 Java 应用程序? - Duncan Bayne
这就是我讨厌StackOverflow的原因。你因为持有与主流不一致的合理想法或理论而被踩。所有给你踩票的人都不好! - D3vtr0n
+100 是我作为澳大利亚人的奖励。放心吧,伙计 :) - D3vtr0n
显示剩余4条评论

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