SORU
25 EKİM 2009, Pazar


Nasıl bir soyut temel sınıf uygulayan bir Formu işlemek için Visual Studio 2008 Windows Forms tasarımcısı alabilir miyim?

Windows Formları kalıtsal Denetimleri ile ilgili bir sorun ile meşgul oldum ve yardıma ihtiyacım var.

Listedeki öğeler için temel sınıf (selfmade GUI liste bir panel yapılmış) kullanıyorum ve bazı listeye eklenemedi her veri türü için denetimleri devralınan.

Yok sorun değil, ama ben şimdi öğrendim, bu doğru değil, taban kontrol soyut bir sınıf'den bu yana yöntemleri, gereken uygulanan tüm miras denetimleri olarak adlandırılan içinde kod tabanı-kontrol, ama olmamalıdır ve olamaz uygulanan taban sınıf.

Özet olarak temel kontrol işaretliyorum, Visual Studio 2008 Tasarımcısı penceresi yüklemek için reddediyor.

Bir şekilde temel denetim Tasarımcı iş soyut yapılmış olabilir.

CEVAP
9 Mart 2010, Salı


Bunu yapmak için bir yol (ve bu temiz bir şekilde yapmak için bir yol buldum) olması gerektiğini BİLİYORDUM. Sheng çözüm tam olarak ne ben ile geldi gibi geçici bir çözüm ama sonra bir arkadaşım çekti o Form sınıf sonunda kalıtsal bir abstract Sınıf yapmalıyız, neler yapacak bu işi. Eğer onlar yapabiliyorsa, biz de yapabiliriz.

Sorun bu koddan gittik

Form1 : Form

Sorun

public class Form1 : BaseForm
...
public abstract class BaseForm : Form

Bu ilk soru oyun haline geldiği yer. Daha önce de söylediğim gibi, bir arkadaşım System.Windows.Forms.Form soyut bir temel sınıf uygulayan işaret etti. Bulabildik...

Daha iyi bir çözüm kanıtı

Bu, tasarımcının temel soyut bir sınıf uygulayan bir sınıf göstermek için mümkün olduğunu biliyorduk, sadece hemen temel soyut bir sınıf uygulayan bir tasarımcı sınıf gösteremedi. Max 5 arasındakileri de olmalı, ama soyutlama katmanı 1 test ettik ve başlangıçta bu çözüm geldi.

İlk Çözüm

public class Form1 : MiddleClass
...
public class MiddleClass : BaseForm
... 
public abstract class BaseForm : Form
... 

Bu gerçekten çalışıyor ve tasarımcı, ince işler, sorun çözüldü.... üretim uygulamada miras fazladan bir düzeyi olması dışında sadece win tasarımcısı bir yetersizlik nedeniyle gerekli oldu!

Bu çok iyi ama 100% kesin bir çözüm değil. Temelde #if DEBUG rafine çözüm için kullanın.

Rafine Çözüm

Form1.cs

#if DEBUG
public class Form1 : MiddleClass
#else 
public class Form1 : BaseForm
#endif
...

MiddleClass.cs

public class MiddleClass : BaseForm
... 

BaseForm.cs

public abstract class BaseForm : Form
... 

Bu ne çözümü anlatılan yalnızca "ilk çözüm ise hata ayıklama modunda ise.", Hiç bir hata ayıklama yapı ile üretim modu serbest bırakacaksınız ve her zaman hata ayıklama modunda tasarım olmasıdır.

Tasarımcı her zaman kod geçerli modu dahili karşı çalışır, olamaz yayım modunda tasarımcısı kullanın. Ancak, hata ayıklama modunda tasarım ve kodu yayın modunda inşa serbest olduğu sürece, gitmek iyidir.

En garantili çözüm ise basit bir yönerge ile tasarım modu için test yapabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alexis gillis

    alexis gilli

    23 HAZİRAN 2011
  • DorkmanScott

    DorkmanScott

    14 NİSAN 2006
  • guau . .

    guau . .

    25 Ocak 2008