net drop control and c# winforms drag-and-drop containers windows-forms-designer

c# - control - drag and drop vb net



Winforms Designer: ¿Cómo desactivar mi usercontrol para que no sea un contenedor? (2)

Tengo una configuración relativamente simple. Tengo un control de usuario personalizado que tiene un montón de componentes, algunos cuadros de texto y una vista de lista.

En el diseñador, puedo arrastrar y soltar otros controles en mi usercontrol, y los agrega a la instancia de control de usuario. No quiero esto

¿Cómo puedo decir explícitamente "No permitir que se agreguen controles adicionales a este control de usuario?"


Esa no es la forma en que funciona. Cuando suelta su control de usuario en un formulario, no se admite la adición de controles. Eso requiere un diseñador especial, esta respuesta muestra lo que se requiere. Tal vez parece que los controles se agregan, pero simplemente se superponen a su control de usuario. Su padre sigue siendo la forma.

Si un programador abre su propia clase de control de usuario en el diseñador, entonces, seguro, puede agregar controles a su antojo. La única forma de detener esto es no enviar el código fuente y usar la palabra clave sellada para evitar derivar de él.


Podría crear una propiedad booleana MyContainer.DisableAddControls o algo así.

Si su MyContainer.Controls.Add(..) está anulado, entonces puede lanzar alguna excepción personalizada en ese método Add() siguiente manera:

if(DisableAddControls) { throw new DisableAddControlsException(); }

Si hereda ese método directamente de ContainerControl , puede manejar el evento ControlAdded y lanzar allí la excepción.

myContainer.ControlAdded += myContainerControlAdded; private void Control_Added(object sender, System.Windows.Forms.ControlEventArgs e) { if(DisableAddControls) { throw new DisableAddControlsException(); } }

Pensándolo bien, esto no arrojará a tu diseñador en el momento del diseño ... no importa.