面向初学者的 C# GUI 编程:从哪里开始? [关闭]
Posted
技术标签:
【中文标题】面向初学者的 C# GUI 编程:从哪里开始? [关闭]【英文标题】:C# GUI programming for beginners: Where to start? [closed] 【发布时间】:2011-01-02 06:03:36 【问题描述】:我是一名 C++/Java 开发人员,不了解 .Net 或 GUI。我需要为 2000/XP/Vista/7 开发一个 Windows 应用程序。
我想我已经得出结论,C# 是最好和最快的方法(如果我错了,请纠正我)。你有什么建议吗?我应该学习哪种 GUI 方法? (表格?还有其他东西吗?)
这是在 .Net 2.0 模式下编译的最佳方式吗?这将是一个供公众下载的应用程序。
【问题讨论】:
【参考方案1】:对于桌面应用程序,基本上有两种选择; WinForms 和 Windows Presentation Foundation (WPF)。
WinForms 更传统地构建,因此更容易学习。因此,WinForms 可能是一个更简单的开始,但如果您打算实际使用您在 .NET 的 GUI 开发中获得的知识,我会说您最好从一开始就深入 WPF。这是一个更丰富的框架,微软正在努力开发桌面应用程序。它也类似于 Silverlight,这意味着当您了解 WPF 时,您也可以轻松进入 Silverlight。
This other question 在 WPF 入门时提供了一些有用的资源。 还可以查看this tutorial at MSDN。 WpfTutorial 显然也为您提供了一些不错的提示!祝你好运!
【讨论】:
给我-1的人能否就他们不同意的地方发表评论,以便我们都可以从中吸取教训? @bambuska - “WinForms 是更传统的构建方式,因此更容易学习” 通常不是这样。仅当您来自事件驱动的 GUI 背景时。 感谢您的评论。你是对的,但与 WPF 相比,我仍然认为这是有效的。许多其他 GUI 选项是事件驱动的,因此可以与 WinForms(Java Swing、Delphi、Qt、..)相媲美,而 WPF 与大多数其他选项不同。【参考方案2】:在我个人的开发经验中,在 Windows 上快速部署 GUI 应用程序时,Windows Forms 非常简单。 WPF 当然是另一种选择,但使用它可能需要您花一些时间熟悉 XAML。 Windows 窗体的外观和感觉就像 Java 的许多可用 GUI 选项,在我看来,它比它们中的大多数要好得多。
如果您希望在 .NET 中实现最快的 GUI 开发时间,Windows 窗体就是它。
【讨论】:
我不同意。 WPF 速度更快,尤其是来自 Web 背景的情况下。 WPF 的设计故事要好得多,并且至少具有与 WinForms 一样好的代码访问权限。 我不同意 codekaizen。如果我们谈论的是速度,WinForms 对于没有见过面的人来说要快得多。此外,视觉设计师实际上可以工作,并且不需要单独的程序(即 Blend)来使用。 请记住,尽管 OP 已经是一位经验丰富的 Java 开发人员 - 对他来说,仅仅学习一个 Java GUI 框架会比一个完全的新平台和一组更容易吗?工具? @Dmitri - 你有新人学习 WPF 与 Winforms 的经验吗?我愿意。 WPF 对他们来说很容易。这对您来说很难,因为您有使用 WinForms 传统方法的经验。此外,您不需要单独的程序。是什么让你有这样的想法? VS Express 运行良好。 我的观点是根据有人从 Java 转向 .NET 进行 GUI 开发的。 WPF 是一个非常强大(而且相当简单)的平台,但是对于以前从未使用过类似工具的人来说,学习曲线可能会更加陡峭。体面的 Java GUI 工具都与 Windows 窗体设计器非常相似,但我知道没有一个像 WPF。【参考方案3】:是的。 C# 是 .NET 开发的首选语言。由于您使用 Java 进行了编程,您会发现该语言看起来非常熟悉(不过它看起来更简洁一些,并且有一些非常好的特性,例如委托,如果您真的想使用,甚至可以使用指针,尽管您不会在大多数情况下都需要)。
它是 SWF(系统 Windows 窗体)或 MWF(托管 Windows 窗体 - 使用 System.Drawing 以托管代码编写的 SWF 的轻量级版本 - 它将您从作为经典 SWF 基础的 WinAPI 中解放出来)。
还有 GTK-Sharp,一个用于 C-Sharp 的 GTK+ 绑定,但由于您是为 Windows 开发的,用户会发现为您的应用程序安装第三方 GUI 框架很奇怪。
我不建议使用 WPF。它直接调用底层图形硬件,这意味着它非常快,但根本不便携。它只能在具有 DirectX 兼容硬件渲染单元(显卡)的 x86 系统(不是 SPARC 等)上运行,并且不能在具有强硬件抽象的系统上运行(如大多数 Unices,如 BSD、Linux 或 Solaris)。
Novell 还表示,由于 WPF 对硬件的依赖性很强(Novell 希望 Mono 能够在许多处理器平台上移植),他们将永远不会在不久的将来实施 WPF。不要使用 WPF。软件不再只是一种一次性产品,当涉及到操作系统时,我们正处于旋转时代。你今天运行的平台不一定是你明天要运行的平台。 WPF 是由 Microsoft 和 Intel 开发的专有且受专利保护的技术。如果您使用它,您会发现自己处于一个非常好的 Win32-on-x86 供应商锁定状态。这意味着您肯定会发现自己迟早会完全重写您的应用程序。只需从一开始就编写可移植软件,即使您现在不需要这种可移植性。我从经验告诉你,明天你将需要便携性。绝对!
【讨论】:
SWF 和 MWF 不是谈论 Windows 上的 Windows 窗体开发的有效术语。 System.Windows.Forms = WinForms = 托管窗口窗体。您是在谈论使用 Mono 的 Linux 上的 WinForms 吗?如果是这样,您应该在回答中澄清,以免 OP 感到困惑。【参考方案4】:您可以使用 Windows 窗体或 Windows Presentation Foundation 来开发您的 GUI;不过,Windows 窗体可能会让您感觉更熟悉。如果您在 Google 上搜索 Windows 窗体教程,您将获得许多入门选项。
如果您需要使用 .NET 2.0,您将仅限于 Win Forms。 WPF 需要 .NET 3.5。
我建议下载微软的免费Visual Studio Express Edition 用于开发。它包括一个出色的拖放式 GUI 设计工具。
【讨论】:
从技术上讲,WPF 只需要 .Net 3.0。 2008 express edition 不应该提供对 2.0、3.0 和 3.5 的访问权限吗? 是的 Chris,但他可能需要为没有最新版本 .net 的客户开发程序【参考方案5】:我建议先学习 Winforms,然后再迁移 WPF。 Winforms 更容易学习并且可以快速运行。然而,未来是 WPF,所以我不会把它留在黑暗中。我发布了一些用于 GUI 开发工作的好书和链接。
书籍
Design of Everyday Things 一本关于界面设计的好书。它不是特定于软件的,但 GUI 设计人员必须阅读。 Coding Horror。他在他的book list 上推荐了很多开发书籍,但这些都是专门与接口相关的:Don't Make Me ThinkAbout Face 3.0The Inmates Are Running the AsylumGUI Bloopers
网页链接
Are Confirmation Dialogs Harmful?Guido van Rossum(Python 的创造者)的博客文章 GUI Articles Joel Spolsky (joelonsoftware.com) 的几篇关于 GUI 的文章 Interfaced Systems International 有很多资源,尤其是在他们的UI References 页面上 User Experience Guidelines for Windows Vista【讨论】:
【参考方案6】:我不同意所有 WinForms 倡导者的观点。这并不容易。对于具有 GUI 编程传统经验的人来说,这可能会更容易,但这张海报没有。
WPF 有更好的设计故事,而且数据绑定比 WinForms 好得多。您可以至少与 WinForms 一样快地在 WPF 上启动和运行,然后走得更远,而不会遇到 WinForms 的限制。再加上 VS 2010 中的设计时数据绑定,我想说任何刚开始 GUI 开发的人都应该完全绕过 Winforms。
【讨论】:
我也强烈建议直接从 WPF 开始。我维护一个复杂的 winforms 应用程序,我希望我们在启动时拥有 WPF。【参考方案7】:C# WinForms 在让实用的 GUI 快速运行方面是最快的。虽然如果你想制作一个复杂的 GUI,包括动画、3D 等,WPF 会更好。
您可以使用CodePlex 找到一些好的工作项目,以学习有关 WinForms 和 WPF 的最佳实践。
您还可以查看here 以获取有关 WPF 和 WinForms 的一些好书。
【讨论】:
【参考方案8】:C# 是肯定的。将 Winforms 用于业务线应用程序/经典 GUI。
读取 petzold '用 c# 编程窗口'
或者只是潜入视觉工作室。用 VS 创建 GUI 真的很简单——你会喜欢的
您会发现从 java 到 c# 的语言转换非常简单(不是 gui 位)
【讨论】:
【参考方案9】:我想我已经得出结论,C# 是最好和最快的方法(如果我错了,请纠正我)。你有什么推荐的?
就个人而言,我会坚持使用 Java。我们(意思是OffByZero,我共同创立的公司)发布了一个名为OBZVault 的加密文本编辑器,它是用Java 编写的。
我们最初在 Linux 中编写它,然后移植到 Mac OS X 和 Windows。我们发现 Windows 端口提供了完全可以接受的外观和感觉 - 几乎(但不完全)类似于原生 Windows 应用程序。
我们使用InnoSetup 构建了一个原生 Windows 安装程序,发现也相当不错。
底线:除非您想学习一门新的语言和平台,或者您对 .NET 等不同平台提供的功能有特殊需求,否则请坚持使用 Java 进行 Windows 开发。您需要学习 Java GUI 框架,但如果您切换到 .NET,则必须学习 WPF 或 WinForms。
对于经验丰富的 .NET 开发人员,在 WinForms 或 WPF 中构建 Windows 应用程序可能会更快,但如果您已经精通 Java,我建议您坚持使用这些工具(语言、库, IDE) 你知道的。
【讨论】:
这没有回答问题,看起来太像贵公司的广告了。 底线:你没有理解他的问题并想把你的应用卖给他? “我想我已经得出结论,C# 是最好和最快的方法(如果我错了,请纠正我)” 好吧,我个人认为他错了;如果他已经是一位经验丰富的 Java 开发人员并且不需要特定的 .NET 功能,那么仅仅为了编写 Windows 应用程序而学习新的开发环境是没有意义的。我相信他学习如何用 Java 编写 GUI 应用程序比他学习如何用 C# 编写 GUI 应用程序要快。 根据我自己的商业经验,最终的 Windows 应用程序可能足够接近原生外观和感觉就足够了。 是的,我是。 OP 是一位经验丰富的 Java 开发人员。如果您只想制作一个 GUI 应用程序,为什么还要学习全新的平台和工具集?我的意思是,如果您将其作为学习练习,请继续进行,但从任何其他角度来看都没有任何意义。 对于那些投票否决我的答案的人来说一个问题 - 是因为我建议 OP 选择 C# 而不是 Java 是错误的,还是因为我链接到了我自己的商业 Java 应用程序?以上是关于面向初学者的 C# GUI 编程:从哪里开始? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章