Serializacion de las propiedades del un componente con Interfaz System.ComponentModel.IExtenderProvider

28/09/2005 - 18:26 por Alvaro E. Gonzalez V. | Informe spam
Hola a todos

Tengo un componente que hereda la interfaz System.ComponentModel.IExtenderProvider, pero las
propiedades implementadas por este las incluye en la serializacion de cada componente o control
"extendido", yo necesito que estas propiedades sean incliudas al final de todo las instrucciones de
inizialzación.

¿Alguien me puede brindar ayuda para lograrlo?

Saludos
Alvaro

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
28/09/2005 - 19:53 | Informe spam
Dudo que se pueda pero puedes implementar la interface ISupportInitialize en
el componente y recien ejecutar el codigo que tengas en el seteo de
propiedades al llamarse a EndInit, que siempre se llama al final de la
inicializacion del formulario.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#2 Alvaro E. Gonzalez V.
29/09/2005 - 02:24 | Informe spam
Gracias Eduardo;

tienes un ejemplo sencillo de como seria la implentación...?

Saludos
Alvaro


Eduardo A. Morcillo [MS MVP VB] wrote:
Dudo que se pueda pero puedes implementar la interface ISupportInitialize en
el componente y recien ejecutar el codigo que tengas en el seteo de
propiedades al llamarse a EndInit, que siempre se llama al final de la
inicializacion del formulario.

Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MS MVP VB]
29/09/2005 - 04:59 | Informe spam
Aqui va:
[ProvideProperty("MiPropiedad", typeof(Control))]
public class MiExtender : Component, IExtenderProvider, ISupportInitialize
{

public MiExtender() {
}

public void BeginInit() {
_onInit = true;
}

public bool CanExtend(object extendee) {
return extendee is Control;
}

public void EndInit() {

_onInit = false;

// Ejecuto el proceso con todos los controles
foreach(Control ctrl in _props.Keys) {
HacerAlgo(ctrl, _props[ctrl]);
}

}

public string GetMiPropiedad(Control control) {

return (string) _props[control];

}

public void SetMiPropiedad(Control control, string valor) {

_props.Add(control, valor);

// si no estoy dentro de BeginInit/EndInit
// ejecuto el proceso que quiero hacer
// con el control
if (!_onInit)
HacerAlgo(control, valor);

}

private void HacerAlgo(Control control, string valor) {
// Aqui hago lo que necesite con el control
}

private bool _onInit;
private Hashtable _props = new Hashtable();

}

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#4 Alvaro E. Gonzalez V.
30/09/2005 - 02:35 | Informe spam
Gracias Eduardo,

Eduardo A. Morcillo [MS MVP VB] wrote:
Aqui va:
[ProvideProperty("MiPropiedad", typeof(Control))]
public class MiExtender : Component, IExtenderProvider, ISupportInitialize
{

public MiExtender() {
}

public void BeginInit() {
_onInit = true;
}

public bool CanExtend(object extendee) {
return extendee is Control;
}

public void EndInit() {

_onInit = false;

// Ejecuto el proceso con todos los controles
foreach(Control ctrl in _props.Keys) {
HacerAlgo(ctrl, _props[ctrl]);
}

}

public string GetMiPropiedad(Control control) {

return (string) _props[control];

}

public void SetMiPropiedad(Control control, string valor) {

_props.Add(control, valor);

// si no estoy dentro de BeginInit/EndInit
// ejecuto el proceso que quiero hacer
// con el control
if (!_onInit)
HacerAlgo(control, valor);

}

private void HacerAlgo(Control control, string valor) {
// Aqui hago lo que necesite con el control
}

private bool _onInit;
private Hashtable _props = new Hashtable();

}

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida