Actualmente estoy desarrollando una aplicación en la que deseo mostrar un UserControl dentro de un menú contextual. Pude (algo lograr esto usando ToolStripControlHost). Se muestra en (código NumericUpDownToolStripItem): a continuación se muestra el código del objeto (escrito en VC++. Net 2.0). Nota: Hay preguntas SO semejantes a esto, pero ninguna parece tratarse de serializar controles de usuario, solo un objeto estándar en los controles de usuario.ToolStripControlHost que aloja un diseñador de UserControl Serializar no ocurrirá
Se muestra a continuación del objeto el código para el control de usuario real, que es un control de usuario con una etiqueta y un control de reducción numérica.
El problema: cuando cargo el diseñador para mi aplicación, puedo agregar mi NumericUpDownToolStripItem muy bien, sin embargo, cuando abro el uso expuesto para editar mi usercontrol, ninguno de esos datos se serializa en el método InitializeComponent de mi objeto NumericUpDownToolStripItem. El efecto de esto es mi control carga con todos los valores predeterminados en tiempo de ejecución. Y cada vez que recargo mi formulario, las modificaciones se pierden.
He intentado utilizar el tutorial TypeConverter ubicado en On Msdn, pero no funcionó correctamente. Todo compilado muy bien, excepto que mi objeto se volvió completamente gris en la cuadrícula de diseño (solo la propiedad del descriptor de acceso, no el menálico completo). Otro problema que noté es que este método no está especialmente diseñado para UserControls, que puede tener varias propiedades modificables diferentes, y no puede tener una sobrecarga para cada uno.
lo tanto, tengo las siguientes preguntas:
- es lo que estoy haciendo práctico, o es mi estructura de forma-off las normas. Estoy seguro de que hay mucha redundancia en los atributos.
- ¿Cuál es el método correcto para serializar un 'control' de usuario contenida en otro UserControl \ toolstriphost 'parent'? Cualquier propiedad en 'niño' son valores simples (cadenas, decimales, etc.).
- Cuando la clase TypeConverter no está implementada, cada vez que cambiaba una propiedad (un texto de etiquetas por ejemplo), la pintura del objeto se levantaba y se comportaba de forma extraña, hasta que volví a consultar el contexto \ menú o formulario. ¿Hay alguna manera adecuada de informar al diseñador para que vuelva a pintar porque he realizado un cambio? (Utilicé invalidación que ha sido dudosa en el mejor de los casos).
Gracias de antemano. Voy a continuar investigando esto y mantener la pregunta actualizada.
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
};
Lo siento por la resurrección hilo, pero esto parece ser el único puesto que puedo encontrar tratamiento de este problema exacto. Me pregunto qué hizo para que su diseñador de control de host sea visible: parece que no puedo hacer que Visual Studio lo muestre, haga lo que haga. Apliqué todo lo que MSDN afirma que se supone que permite el soporte de diseñador, y nada. Algunos consejos serían muy apreciados. –
No recuerdo exactamente lo que hice, pero sé que este control se lanzó y está "en el producto". Voy a intentar rastrear el código y volver a publicar el control para ver si hay alguna diferencia. – greggorob64
Revise mi nueva publicación a continuación, volví a publicar mi configuración de trabajo actual – greggorob64