Şu anda, bir bağlam menüsünde UserControl görüntülemek istediğim bir uygulama geliştiriyorum. Ben (biraz ToolStripControlHost kullanarak bunu başardı) başardı. (NumericUpDownToolStripItem kodu) içinde gösterilmiştir: aşağıdaki nesnenin kodudur (VC++. Net 2.0 ile yazılmıştır). Not: Bu konuda yarı benzer SO soruları vardır, ancak hiçbirisi usercontrols serisinde sadece standart nesne serileştiren usercontrols ile ilgilenmiyor.ToolStripControlHost bir UserControl tasarımcısı barındırma Serileştirme gerçekleşmeyecek
Nesneyi izleyen, bir usercontrol olan bir gerçek usercontrol kodudur ve bir numericupdown denetimi.
Sorun: Tasarımcımı uygulamam için yüklediğimde, NumericUpDownToolStripItem öğemi ekleyebilirim, ancak, usercontrolımı düzenlemek için açığa çıkarılmış mülkün kullanımını açtığımda, bu verilerin hiçbiri InitializeComponent yöntemine serileştirilmiyor benim NumericUpDownToolStripItem nesnesinin. Bunun etkisi, çalışma zamanında tüm varsayılan değerler ile kontrol yüklerim. Ve formumu yeniden yüklediğimde, değişiklikler kayboluyor.
On Msdn'da bulunan TypeConverter eğitimini kullanmayı denedim, ancak düzgün çalışmadı. Her şey gayet iyi derlenmişti, nesnem tamamen tasarım kılavuzunda tamamen grileşti (sadece menşeli değil, sadece erişimci mülkiyeti). Fark ettiğim bir başka sorun da, bu yöntemin, farklı modifiye edilebilir özelliklere sahip olabilecek ve muhtemelen her biri için bir aşırı yüklenmeye sahip olmayan UserControls için tasarlanmamış olmasıdır.
Yani, şu soru var:
- Ben pratik yapıyorum, yoksa benim yapısı yolu kapalı normlar olduğunu. Eminim özniteliklerde fazlalık var.
- Başka bir UserControl \ toolstriphost 'ebeveyni' içinde bulunan bir usercontrol 'child' serileştirmek için doğru yöntem nedir. 'Çocuk' daki herhangi bir özellik basit değerlerdir (Strings, Decimals, vb.).
- TypeConverter sınıfı uygulanmadığında, bir özelliği her değiştirdiğimde (örneğin bir etiket metni), bağlamın menüsünü veya formunu serbest bırakıncaya kadar, nesnenin resmi tümüyle kilitlenir ve garip davranır. Tasarımcıyı tekrar boyamak için uygun bir yol var mı, çünkü değişiklik yaptım mı? (En iyi tehlikeli olan geçerliliği kullanmıştım).
Şimdiden teşekkürler. Bunu araştırmaya ve soruyu güncel tutmaya devam edeceğim.
NumericUpDownToolStripItem Class:
[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability::All)]
public ref class NumericUpDownToolStripItem : public ToolStripControlHost
{
public:
[DesignerSerializationVisibility(DesignerSerializationVisibility::Content |
DesignerSerializationVisibility::Visible)]
property LabeledNumericUpDown ^LabeledNumericUpDownControl
{
LabeledNumericUpDown ^get() { return (LabeledNumericUpDown^)this->Control; }
}
public: NumericUpDownToolStripItem(void) :
ToolStripControlHost(gcnew LabeledNumericUpDown()) {}
protected: void OnSubscribeControlEvents(Control ^control) new { //irrelevant to question }
protected: void OnUnsubscribeControlEvents(Control ^control) new { //irrelevant to question }
};
public ref class LabeledNumericUpDown : public UserControl
{
public: [ DesignerSerializationVisibility(DesignerSerializationVisibility::Content |
DesignerSerializationVisibility::Visible)]
property String ^DisplayText {
String ^get() {
return this->label->Text;
}
void set(String ^val) {
if(this->label->Text != val)
{
this->label->Text = val;
this->Invalidate();
}
}
}
//constructor
//destructor
//initiailecomponent
};
iplik diriliş için üzgünüm, ama bu tam olarak bu konu ile ilgili bulabilirsiniz sadece post gibi görünüyor. Denetleyici ana bilgisayar tasarımcısını görünür kılmak için ne yaptığınızı merak ediyorum - Ne yaptığımın bir önemi yok, ben görsel stüdyonun göstermesini sağlayamıyorum. MSDN iddialarının tasarımcı desteğini etkinleştirmesi gerektiği her şeyi uyguladım ve hiçbir şey. Bazı işaretçiler çok takdir edilecektir. –
Tam olarak ne yaptığımı hatırlamıyorum, ama bu kontrolün piyasaya sürüldüğünü ve "üründe" olduğunu biliyorum. Kodu takip etmeye çalışacağım ve herhangi bir fark olup olmadığını görmek için kontrolün kendisini yeniden yayınlayacağım. – greggorob64
Yeni gönderiyi kontrol edin, şu anki çalışma kurulumumu yeniden yayınladım – greggorob64