2013-04-27 32 views
10

Tôi đã làm một ứng dụng với Visual Studio, winforms và tôi đang sử dụng openTK. Gần đây tôi đã nghĩ về việc làm cho nó đa nền tảng. Tôi sẽ sử dụng Mono, bởi vì tôi không biết gì khác tương tự. Và tôi hoàn toàn không có kinh nghiệm với GTK +. Trong ứng dụng của tôi, hiện tại có 4 cửa sổ (tất nhiên sẽ có nhiều hơn trong tương lai). Tôi muốn làm cho ứng dụng nhanh chóng trong Windows, Linux và OS X. Tôi đã đọc, rằng GTK + là tốt hơn so với WinForms, nhưng vẫn không chắc chắn để lựa chọn. Vì vậy, tôi nên làm lại mọi thứ cho GTK + hoặc ở lại với WinForms và tại sao? Ngoài ra, là có bất kỳ công cụ, mà sẽ làm công việc này cho tôi?Tôi có nên viết lại GUI với GTK + thay vì WinForms cho Mono không?

+0

có thể trùng lặp của [WinForms vs GtkSharp với Mono] (http://stackoverflow.com/questions/751884/winforms-vs-gtksharp-with-mono) –

+1

Mono đang đạt được nhiều động lượng, đặc biệt là với lõi .NET 5 ném hỗ trợ của họ đằng sau nó. ASP.NET cũng đang trở thành một cầu thủ lớn hơn như là một lựa chọn phát triển giao diện người dùng và sẽ chơi tốt đẹp với Mono. – VoteCoffee

+0

Sau khi đấu tranh với WinForms tôi có thể nói với bạn rằng GTK + chắc chắn tốt hơn nhiều. Cũng như một tiền thưởng mỗi ứng dụng viết GTK + có một cách để cấu hình trong một tập tin riêng biệt những điều mà một lập trình viên đã không ghi đè. Ví dụ. bật các phím di chuyển Emacs cho mọi tiện ích văn bản. –

Trả lời

14

Thành thật mà nói, bạn sẽ cần phải cho chúng tôi biết thêm về thị trường/dự định để cung cấp câu trả lời tuyệt vời, nhưng $ 0,02 của tôi từ một số kinh nghiệm phát triển đó là phát triển GUI cho Mono trên máy tính để bàn -câu chuyện mục tiêu nếu bạn muốn làm điều đó "Đúng". Bạn sẽ cần phải phát triển các phụ trợ chung một cách đặc biệt theo mô-đun, và sau đó viết UI một lần cho mỗi nền tảng.

của Windows

Windows.Forms như thực hiện trên Mono là một cái nạng tuyệt vời nếu ứng dụng của bạn trong giai đoạn phôi thai, cho phép bạn để nhắm mục tiêu của Windows ngay và triển khai một cách hơi tê liệt trên OS X và Linux. Tuy nhiên, lưu ý rằng tôi đã được thông báo trên IRC rằng sự phát triển Windows.Forms trên Mono về cơ bản là đã chết. Lỗi cũ không được cập nhật, và, như một ví dụ, tôi chạy vào SelectionBackColor không làm việc trong RichTextBox trên OS X (đó là một vấn đề trong một mono lib sử dụng cho Windows.Forms trên OS X) trong vòng vài phút thử nghiệm. Neat rằng nó ở đó, có lẽ tốt cho các tiện ích nhanh chóng, nơi bạn có thể mã xung quanh những hạn chế của nó (xem câu hỏi here cho một ví dụ).

OS X

Đối nhắm mục tiêu OS X, nếu bạn có một thực tế, thương mại, ứng dụng người dùng cuối, bạn sẽ cần phải làm quen với, um, giao tiếp với Interface Builder. Tôi nên làm rõ ở đây rằng việc sử dụng XCode và Trình tạo giao diện hoàn toàn yêu cầu mà bạn có quyền truy cập vào một hộp đang chạy OS X. Nếu không, bạn bị mắc kẹt với Windows.Forms hoặc, tốt hơn là tôi nghĩ là Gtk #.

Xamarin đã thực hiện một công việc tuyệt vời làm cho các kết nối IDE của nó ra các kết nối với UI gốc được xây dựng trong XCode. Đó là cách họ làm điều đó để phát triển iOS. Nó hoạt động khá tốt, mặc dù tài liệu yếu. Có một great video from 2011 from Michael Hutchingson describing this process, mặc dù tôi cho rằng nó dài trên răng (tức là "cũ"). (Direct link to video)

Tôi giả định Trình tạo giao diện cũng là lựa chọn thực sự duy nhất của bạn nếu bạn muốn nhắm mục tiêu Mac App Store. Nhưng hãy xem, đó là một giao diện người dùng bản địa đã được nhúng vào mã C# của bạn, đó là tất cả mọi thứ được xem xét, một sự thỏa hiệp tuyệt vời.

Linux

tôi đã không thực sự nhắm Linux. Có vẻ như Gtk # sẽ là một sự phù hợp tự nhiên, nhưng tôi không có nhiều sự giúp đỡ ở đó. Nội dung của tôi được xây dựng trong Windows.Forms và có các cạnh thô, giống như trong OS X. Nếu tôi nghiêm túc hơn, tôi sẽ bắt đầu với Gtk # và đó là nơi MonoDevelop cũng có GUI RAD của nó.

Ví dụ về một nghiêm trọng, trưởng thành, crossplatform Gtk # ứng dụng

lưu ý nhanh: Banshee sử dụng Gtk# để nhắm mục tiêu OS X, Windows (alpha), và Linux. Bạn có thể nhận được một số bối cảnh tuyệt vời về mức độ khó khăn khi sử dụng Gtk # trên nền tảng ứng dụng lớn bằng cách xem its mailing list và các tài nguyên khác.

Xin lỗi, tin tức không dễ dàng hơn. Không có câu trả lời bằng bạc/đơn phải.


201607 UPDATE: Tôi nghĩ câu trả lời đang dần trở thành sử dụng để nhắm mục tiêu Xamarin.Forms cross-platform. Bạn có thể vẫn gặp khó khăn khi viết một giao diện Mac riêng biệt ngay bây giờ, nhưng có lý do để tin rằng nó sẽ có hỗ trợ Xamarin.Forms tại một số điểm; xem bên dưới.

Thật không may, nếu bạn đang nhắm mục tiêu Linux, tôi nghĩ bạn vẫn ở trong cùng một chiếc thuyền như trước đây.

  • Windows: Bây giờ bạn có thể sử dụng Xamarin.Forms and UWP.
  • macOS: Bạn vẫn còn ở cùng một nơi, nhưng tôi đã có nhân viên Xamarin cho tôi biết cuối tuần trước rằng Xamarin.Forms là không chính thức trong phát triển cho OS X. Tôi tin rằng this is the repo on GitHub. (Thậm chí có một chi nhánh cho tvOS.)
+1

Cảm ơn bạn đã chia sẻ trải nghiệm của mình. –

+0

Tại sao bạn không muốn xem xét sử dụng JavaFX? Nó hỗ trợ xây dựng GUI động đa nền tảng. http://docs.oracle.com/javafx/ –

+0

@OlowookereEmmanuel Vâng, OP chắc chắn đang sử dụng & quen thuộc với môi trường phát triển của Microsoft và được hỏi cụ thể về GTK # so với Mono. Mặc dù Java và C# thường cảm thấy rất giống nhau, di chuyển từ người này sang người khác cũng sẽ mất một cái nhìn đầu lại nghiêm túc, và sẽ không cho phép bạn tận dụng các thư viện được viết bằng ngôn ngữ yêu thích của bạn - ở đây, C#. Điều đó nói rằng, JavaFX có thể là một lựa chọn thú vị.Hy vọng nó tốt hơn Swing! ; ^) – ruffin

10

Tôi khuyên bạn nên cân nhắc đối tượng mục tiêu của mình là gì. Việc viết UI bằng cách sử dụng một framework như GTK # có thể là một ý tưởng hay nhưng với người dùng trung bình, ứng dụng của bạn sẽ không giống như các ứng dụng Windows/OSX khác của họ. Cách tốt nhất để thực hiện điều này (có thể không thực hiện được do hạn chế về thời gian/ngân sách) là đặt logic ứng dụng của bạn vào một assembly riêng và sau đó viết UI cho mỗi nền tảng, sử dụng Winform (hoặc WPF) cho Windows, MonoMac/Ca cao cho OSX và GTK # cho Linux. Nó cũng sẽ không hạn chế bạn sử dụng các tính năng có sẵn trên tất cả nền tảng làm suy giảm trải nghiệm người dùng rất nhiều.

+2

+1 để đề cập đến WPF, IMO là cách duy nhất thực sự khả thi để tạo Giao diện người dùng trên máy tính để bàn nghiêm túc trong Windows kể từ bây giờ. –

+0

Thứ hai trên giao diện người dùng gốc. Nếu bạn không cần giao diện người dùng gốc, tại sao không làm giao diện người dùng đó dưới dạng ứng dụng web/trình duyệt? Mỗi nền tảng hiện đại có thể làm HTML và hỗ trợ tốt hơn nhiều so với GTK +. – Mathieson

1

Tôi đang đối mặt với một vấn đề tương tự bây giờ - nhưng những gì Karl-Johan nói về việc giữ logic ứng dụng riêng biệt sẽ làm cho công việc trở nên dễ dàng hơn nhiều. Nhìn vào một mẫu ViewModel (MVVM), và bạn sẽ có ít mã hơn để viết lại và kiểm tra cho mỗi nền tảng, vì logic trung tâm trở thành UI bất khả tri.

Các vấn đề liên quan