2013-04-27 14 views
10

Visual Studio, winforms ile bir uygulama yapıyordum ve openTK kullanıyorum. Geçenlerde çapraz platform yapmayı düşündüm. Mono kullanacağım çünkü başka bir şey bilmiyorum. Ve GTK + ile hiç deneyimim yok. Benim uygulamamda, şu anda 4 tane pencere var (tabii ki gelecekte daha fazla olacak). Windows, Linux ve OS X'te hızlı uygulama yapmak istiyorum. Okudum, GTK + 'nın WinForms'tan daha iyi olduğunu, ancak yine de hangisinin seçileceğini bilmiyorum. Yani, GTK + için her şeyi yeniden veya WinForms ve ile kalmalıyım neden? Ayrıca, benim için bu işi yapacak herhangi bir araç var mı?GUI'yi Mono için WinForms yerine GTK + ile yeniden yazmalı mıyım?

+0

[WinForms ve GtkSharp with Mono] 'nın olası kopyası (http://stackoverflow.com/questions/751884/winforms-vs-gtksharp-with-mono) –

+1

Mono özellikle .NET çekirdeği ile çok fazla hız kazanıyor 5 desteğini arkasına atarak. ASP.NET ayrıca bir UI geliştirme seçeneği olarak daha büyük bir oyuncu haline geliyor ve Mono ile güzel oynayacak. – VoteCoffee

+0

WinForms ile uğraştıktan sonra, GTK + 'nın kesinlikle daha iyi olduğunu söyleyebilirim. Ayrıca bir bonus olarak her bir GTK + yazılı uygulamasının, bir programcının geçersiz kılmadığı ayrı bir dosyada yapılandırmanın bir yolu vardır. Örneğin. Her metin parçacığı için Emacs hareket tuşlarını etkinleştirin. –

cevap

14

Dürüst olmak gerekirse, harika bir yanıt vermek için hedef kitleniz/amaçlanan pazar hakkında bize daha fazla bilgi vermeniz gerekecek, ancak orada gelişen bazı deneyimlerden $ 0.02, masaüstündeki Mono için GUI geliştirmesinin çok "Doğru" yapmak istiyorsanız -target ilişkisi. Paylaşılan arka uç modunu son derece modüler bir şekilde geliştirmeniz ve ardından platform başına bir kullanıcı arayüzü yazmanız gerekecektir. emekleme döneminde uygulama en eğer Mono üzerinde uygulandığını

, Windows

Windows.Forms hemen Windows'u hedefleyebilir ve OS X ve Linux üzerinde biraz sakat bir şekilde dağıtmak için izin büyük bir koltuk değneği. Ancak, IRC'de, Mono'daki Windows.Forms geliştirmesinin esasen ölü olduğu söylendi. Eski hatalar güncellenmez ve örneğin, bir kaç dakika içinde, OS X üzerinde RichTextBox'ta çalışmayan SelectionBackColor'a (bir lib Mono'nun Windows OS'de Windows.Forms'taki bir problemi) rastladım. Olduğu gibi, belki de sınırlarını kodlayabilirsiniz hızlı yardımcı programları için iyi bir şey (örnek için soru here bakın). gerçek, ticari, son kullanıcı uygulamayı varsa, Interface Builder ile arabirim, um alışması ihtiyacımız olacak, OS X hedef için

OS X

. XCode ve Interface Builder 'un kesinlikle kullanımını gerektirdiğini, OS X çalıştıran bir kutuya erişiminizin olduğunu açıklığa kavuşturmalıyım. Aksi takdirde, Windows.Forms veya tercihen Gtk # ile kaldınız.

Xamarin, XCode'da yerleşik yerel UI'lere IDE saplama bağlantılarını yapmak için harika bir iş çıkardı. IOS geliştirme için de böyle yapıyorlar. Belgelerin zayıf olmasına rağmen oldukça iyi çalışıyor. great video from 2011 from Michael Hutchingson describing this process var, ama sanırım dişte uzun sürüyor (yani "eski"). (Direct link to video)

Mac App Store'u hedeflemek istiyorsanız, Interface Builder'ın tek gerçek seçiminiz olduğunu varsayıyorum. Ama bak, C# kodunuza gömülmüş yerli bir kullanıcı arayüzü, yani her şey düşünülen, büyük bir uzlaşma.

Linux

Gerçekten Linux hedeflemediniz. Gtk # doğal bir uyum olurdu gibi görünüyor, ama ben orada fazla yardım yok. Benim şeyler Windows.Forms içinde inşa eder ve OS X'de olduğu gibi pürüzlü kenarlar vardır. Daha ciddi aldım, Gtk # ile başlayacağım ve MonoDevelop'un GUI RAD'sinin de olduğu yer burası.Ciddi, olgun, crossplatform GTK # app

Hızlı not ait

Örnek: Banshee OS X, Windows (alfa) ve Linux hedef Gtk# kullanır. Gtk # 'yı büyük bir uygulama çapraz platformunda its mailing list ve diğer kaynakları kontrol ederek kullanmanın ne kadar zor olduğu konusunda bazı harika içerikler alabilirsiniz.

Maalesef haberler daha kolay değil. Gümüş mermi/tek bir doğru cevap yoktur.


201607 GÜNCELLEME: Cevabın yavaş yavaş çapraz platform hedeflemek için Xamarin.Forms kullanmak haline geliyor düşünüyorum. Şimdilik ayrı bir Mac arayüzü yazdırabilirsiniz, ancak Xamarin.Forms bir noktada da destek olacağına inanmak için bir sebep var; aşağıya bakınız.

Maalesef, Linux'u hedefliyorsanız, sanırım şu an için hala aynı teknede olduğunuzu düşünüyorum.

  • Windows: Artık Xamarin.Forms and UWP kullanabilirsiniz.
  • macOS: Hala aynı yerde bulunuyorsunuz, ama bir Xamarin çalışanı bana geçen hafta sonu Xamarin.Forms'un OS X için geliştirme aşamasında olduğunu söyledi. this is the repo on GitHub. (TvOS için bir şube bile var.)
+1

Deneyiminizi paylaştığınız için teşekkür ederiz. –

+0

Neden JavaFX'i kullanmayı düşünmek istemiyorsunuz? Cross-platform dinamik GUI'leri oluşturmayı destekler. http://docs.oracle.com/javafx/ –

+0

@OlowookereEmmanuel Peki, OP kesinlikle kullanıyor ve Microsoft geliştirme ortamına aşina ve özellikle GTK # vs. Mono hakkında sorular sordu. Java ve C# çoğu zaman birbirine çok benzer hissediyorlarsa da, birinden diğerine geçerken de ciddi bir başa dönecekler ve favori diliniz ne olursa olsun yazılan kütüphaneleri kullanmanıza izin vermeyeceklerdir - burada C#. Bu, JavaFX'in ilginç bir alternatif olabileceğini söyledi.Umarım Swing'den daha iyidir! ; ^) WPF'den bahsetmek için ^) – ruffin

10

Hedef kitlenizin ne olduğunu düşünmenizi öneririm. Kullanıcı arayüzünü GTK # gibi bir çerçeve kullanarak yazmak iyi bir fikir gibi görünebilir, ancak ortalama kullanıcı için uygulamanızın diğer Windows/OSX uygulamaları gibi görünmeyeceği gibi, insanların bunu kullanmasını engelleyebilirsiniz (gerçekten başka bir şekilde istisna olmadıkça).

Bunu yapmanın en iyi yolu (zaman/bütçe kısıtlamalarından dolayı mümkün olmayabilir) uygulama mantığınızı ayrı bir derlemeye koymak ve ardından Windows için Winform (veya WPF) kullanarak her bir platform için kullanıcı arabirimi yazmaktır. MonoMac/Linux için OSX ve GTK # için Kakao. Ayrıca, kullanıcı deneyimini çok fazla düşürecek tüm platformlarda kullanılabilen özellikleri kullanmanızla da sınırlı değildir.

+2

+1, IMO'nun şu anda Windows'da ciddi bir Masaüstü Kullanıcı Arayüzü oluşturmanın tek geçerli yolu olduğu. Yerel UI'de ikinci kez –

+0

. Yerel kullanıcı arayüzüne ihtiyacınız yoksa, bunun yerine bir web/tarayıcı uygulaması olarak neden yapılmaz? Her modern platform HTML yapabilir ve GTK + 'dan çok daha iyi desteklenir. – Mathieson

1

Şimdi benzer bir sorunla karşı karşıyayım - ama Karl-Johan'in uygulama mantığını ayrı tutma konusunda ne dediği, işi daha kolaylaştıracaktır. Bir ViewModel modeline (MVVM) bakın ve merkezi mantık UI agnostik hale geldikçe her bir platformu yeniden yazmak ve test etmek için çok daha az kodunuz olacaktır.

İlgili konular