Je développe actuellement une application dans laquelle je veux afficher un UserControl dans un menu contextuel. J'ai pu (accomplir quelque peu ceci en utilisant ToolStripControlHost). Montré dans (code NumericUpDownToolStripItem): ci-dessous est le code de l'objet (écrit dans VC++. Net 2.0). Note: Il y a des questions SO semi-similaires sur ce sujet, mais aucune ne semble concerner les contrôles usuels de sérialisation, juste un objet standard dans les contrôles userc.ToolStripControlHost hébergeant un concepteur UserControl Sérialisation ne se produira pas
L'objet est représenté par le code de la commande usercontrol, qui est un contrôle usercool avec une étiquette, et un contrôle numericupdown. Le problème: lorsque je charge le concepteur pour mon application, je peux très bien ajouter mon NumericUpDownToolStripItem, cependant, lorsque j'ouvre l'utilitaire propertly pour éditer mon userercontrol, aucune de ces données n'est sérialisée dans la méthode InitializeComponent de mon objet NumericUpDownToolStripItem. L'effet de ceci est mon contrôle charge avec tous les défauts à l'exécution. Et chaque fois que je recharge mon formulaire, les modifications sont perdues.
J'ai essayé d'utiliser le tutoriel TypeConverter situé On Msdn, mais cela n'a pas fonctionné correctement. Tout compilé juste bien, sauf que mon objet est devenu complètement grisé dans la grille de conception (juste la propriété d'accesseur, pas tout le menupic). Un autre problème que j'ai remarqué est que cette méthode n'est pas particulièrement conçue pour UserControls, qui peut avoir plusieurs propriétés modifiables différentes, et ne peut pas avoir une surcharge pour chacun.
Alors, j'ai les questions suivantes:
- Est-ce que je fais pratique, ou est mon chemin-off structurent les normes. Je suis sûr qu'il y a beaucoup de redondance dans les attributs.
- Quelle est la méthode correcte pour sérialiser un «enfant» usercontrol contenu dans un autre «parent» UserControl \ toolstriphost. Toutes les propriétés dans 'enfant' sont des valeurs simples (chaînes, nombres décimaux, etc.).
- Lorsque la classe TypeConverter n'est pas implémentée, chaque fois que je change une propriété (un texte d'étiquette par exemple), la peinture de l'objet se dresse et se comporte bizarrement, jusqu'à ce que je relaie le menu contextuel. Existe-t-il un moyen approprié d'informer le concepteur de repeindre parce que j'ai fait un changement? (J'ai utilisé invalider qui a été douteux au mieux).
Merci d'avance. Je vais continuer à faire des recherches et garder la question à jour.
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
};
Désolé pour la résurrection de fil, mais cela semble être le seul poste que je peux trouver face à cette question précise. Je me demande ce que vous avez fait pour que votre concepteur d'hôte de contrôle soit visible - je n'arrive pas à le faire apparaître dans un studio visuel, quoi que je fasse. J'ai appliqué tout ce que les revendications MSDN est censé permettre le support de concepteur, et rien. Quelques pointeurs seraient très appréciés. –
Je ne me souviens pas exactement de ce que j'ai fait, mais je sais que ce contrôle est sorti et est "en produit". Je vais essayer de retrouver le code et de rediffuser le contrôle pour voir s'il y a une différence. – greggorob64
Vérifiez mon nouveau poste ci-dessous, j'ai rediffusé ma configuration de travail actuelle – greggorob64