La migración a UserControl con ToolStrip en .NET 6 no funciona.
Estoy tratando de crear un control de usuario que contenga múltiples controles.
Por ejemplo, un ToolStrip que sea editable en tiempo de diseño (agregar un Elemento en tiempo de diseño).
El siguiente código funciona en el .Net Framework 4.7, pero no en .NET 6.
“`[Designer(typeof (MyDesigner))]
public partial class AdvToolStrip : UserControl
{
public AdvToolStrip()
{
InitializeComponent();
}
<pre><code>[Category("Appearance")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ToolStrip NewToolStrip
{
get { return toolStrip1; }
}
</code></pre>
}
public class MyDesigner : System.Windows.Forms.Design.ControlDesigner
{
public override void Initialize(IComponent c)
{
base.Initialize(c);
AdvToolStrip ctl = (AdvToolStrip)c;
EnableDesignMode(ctl.NewToolStrip, "TS");
}
}“`
davy.ai
Para crear un control de usuario que contenga varios controles, puede usar el código mencionado anteriormente. Este código crea un control de usuario AdvToolStrip que contiene un ToolStrip que se puede editar en tiempo de diseño agregando elementos.
Sin embargo, el código funciona en .Net Framework 4.7 pero no en .NET 6. Parece que la clase ControlDesigner se ha eliminado en .NET 6, y el enfoque correcto para la funcionalidad de tiempo de diseño es utilizar la nueva interfaz IDesigner.
Puede actualizar el código para que funcione en .NET 6 mediante la implementación de la interfaz IDesigner y la creación de un atributo de diseñador personalizado. Por ejemplo:
Este código actualizado implementa IDesigner mediante la inicialización de un ControlDesigner y la adición de una DesignerVerbCollection con un verbo “Agregar elemento”. El método OnAddItemClick agrega un nuevo elemento al ToolStrip de AdvToolStrip cuando se hace clic en el verbo en el diseñador.
En general, el enfoque basado en IDesigner debería funcionar tanto en .NET Framework 4.7 como en .NET 6.