Para aumentar la funcionalidad del Panel de Control, es necesario hacer un nuevo control derivado de la clase "ToolParts"
public override ToolPart[] GetToolParts()
{
ToolPart[] toolparts = new ToolPart[3];
WebPartToolPart wptp = new WebPartToolPart();
CustomPropertyToolPart custom = new CustomPropertyToolPart();
//Crea el panel en el primer lugar
toolparts[0] = new MyToolPanel.MyToolPart();
toolparts[1] = wptp;
toolparts[2] = custom;
return toolparts;
}
El nuevo panel hay que codificarlo en una clase separada, en donde un override del evento "Init" permite inicializar las variables necesarias
private void CustomToolPart_Init(object sender, System.EventArgs e)
{
//Inicializar aqui lo que sea necesario
}
Con otro override del "RenderToolPart" se puede preparar el código de HTML necesario. Con un override del evento "ApplyChanges" se consigue que la WebPart aplique los cambios en el código de la WebPart misma
public override void ApplyChanges()
{
try
{
//Aqui es donde las cosas interesantes ocurren...
base.ApplyChanges();
ToolPane tp = this.ParentToolPane;
WebPart myWP = tp.SelectedWebPart;
((Label)myWP.FindControl("myTexto")).Text = "Lista seleccionada: " + myList.SelectedItem.Value;
ChildControlsCreated = false;
EnsureChildControls();
}
catch(Exception ex)
{
UnError = "Error: " + ex.ToString();
}
}
Los eventos "CancelChanges" y "SyncChanges" también se pueden utilizar para transferir información a la WebPart si el usuario utiliza el botón de "Cancelar" o después de que el evento "ApplyChanges" ha terminado de actuar.
Aqui puede encontrar el codigo de la WebPart