Obecnie rozwijam aplikację, w której chcę wyświetlić UserControl w menu kontekstowym. Byłem w stanie (nieco osiągnąć to za pomocą ToolStripControlHost). Wyświetlany w (NumericUpDownToolStripItem kod): poniżej jest kod dla obiektu (napisany w VC++ .net 2.0). Uwaga: Na tym są częściowo podobne pytania SO, ale żaden nie wydaje się zajmować serializacją kontroli użytkownika, tylko standardowym obiektem w kontrolkach użytkownika.ToolStripControlHost hosting projektanta UserControl Serializacja nie pojawi się
Wyświetlany po obiekcie jest kod rzeczywistego sterowania użytkownika, który jest sterowaniem użytkownika z etykietą i kontrolką numericupdown.
Problem: Kiedy ładuję projektanta do mojej aplikacji, mogę dodać mój NumericUpDownToolStripItem dobrze, jednak gdy otworzę użycie, aby odsłonić go w sposób umożliwiający edycję mojej kontroli użytkownika, żadna z tych danych nie jest serializowana do metody InitializeComponent z mojego obiektu NumericUpDownToolStripItem. Efektem tego są moje obciążenia sterujące z wszystkimi ustawieniami domyślnymi w czasie wykonywania. Za każdym razem, gdy ponownie ładuję formularz, modyfikacje są tracone.
Próbowałem używać samouczka TypeConverter znajdującego się pod adresem On Msdn, ale nie działał poprawnie. Wszystko skompilowane w porządku, z wyjątkiem tego, że mój obiekt stał się całkowicie szary w siatce projektowej (tylko właściwość akcesora, a nie cały menupik). Kolejnym problemem, który zauważyłem, jest to, że ta metoda nie jest specjalnie zaprojektowana dla UserControls, która może mieć kilka różnych modyfikowalnych właściwości i nie może mieć przeciążenia dla każdej z nich.
Więc mam następujące pytania:
- Czy to, co robię, jest praktyczny, czy mój sposób struktura-off normy. Jestem pewien, że w atrybutach jest dużo redundancji.
- Jaka jest prawidłowa metoda serializowania elementu potomnego kontrolki użytkownika zawartego w innym obiekcie macierzystym UserControl \ toolstriphost. Wszystkie właściwości w podrzędnym są prostymi wartościami (ciągi, ułamki dziesiętne itd.).
- Gdy klasa TypeConverter nie jest zaimplementowana, za każdym razem, gdy zmieniłem właściwość (tekst etykiety na przykład), obraz obiektu zostałby wywołany i zachowywał się dziwnie, dopóki nie zmieniłem kontekstu \ menu lub formularza. Czy istnieje odpowiedni sposób poinformowania projektanta o przemalowaniu, ponieważ dokonałem zmiany? (Użyłem unieważnienia, które w najlepszym przypadku było podejrzane).
Z góry dziękuję. Zamierzam kontynuować to badanie i aktualizować pytanie.
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
};
Niestety na zmartwychwstanie wątku, ale to wydaje się być jedynym postu mogę znaleźć do czynienia z dokładnie tej kwestii. Zastanawiam się, co zrobiłeś, aby twój projektant hosta kontrolnego był widoczny - nie wydaje mi się, żeby to studio graficzne go wyświetlało, bez względu na to, co robię. Zastosowałem wszystko, co twierdzi firma MSDN, aby umożliwić wsparcie projektanta i nic. Niektóre wskaźniki byłyby bardzo cenne. –
Nie pamiętam dokładnie, co zrobiłem, ale wiem, że ta kontrola została wydana i jest "w produkcie". Zamierzam spróbować wyśledzić kod i odświeżyć kontrolę, aby sprawdzić, czy jest jakaś różnica. – greggorob64
Sprawdź mój nowy wpis poniżej, Prześlij moją aktualną konfigurację roboczą – greggorob64