Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

185
Vistas
Mi control de usuario solo debe agregarse a un cierto tipo de control

¿Cómo puedo hacer que mi control de usuario solo se pueda agregar en un cierto tipo de control (aquí en mi caso, específicamente SplitContainer )?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Necesitas cuidar algunas cosas:

  1. Comportamiento del elemento de la caja de herramientas del control
  2. Comportamiento del diseñador de control
  3. Comportamiento de tiempo de ejecución en tiempo de ejecución del control (opcional)

Cuando suelta el control de la caja de herramientas en una superficie de diseño, debe evitar que se suelte en un control no deseado; es responsabilidad del método CreateComponents de la clase ToolBoxItem asignada al control.

Después de agregar el control a la superficie de diseño (por ejemplo, en el padre deseado), debe evitar arrastrarlo sobre los controles no deseados; es responsabilidad del método CanBeParentedTo de la clase ControlDesigner asignada al control.

Finalmente, es posible que desee incluso evitar agregarlo a controles no deseados mediante programación en tiempo de ejecución; que en este caso, es responsabilidad del método OnParentChanged del control.

Ejemplo: limitar un control para que se aloje solo en un SplitterContainer

 using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing.Design; using System.Windows.Forms; using System.Windows.Forms.Design;
 [ToolboxItem(typeof(MyControlToolBoxItem))] [Designer(typeof(MyControlDesigner))] public class MyControl : Control { protected override void OnParentChanged(EventArgs e) { if (Parent != null && !(Parent is SplitterPanel)) throw new Exception("You can add this control only to a SplitterContainer."); base.OnParentChanged(e); } }
 public class MyControlDesigner : ControlDesigner { public override bool CanBeParentedTo(IDesigner parentDesigner) { if (parentDesigner.Component is SplitterPanel) return true; else return false; } }
 public class MyControlToolBoxItem : ToolboxItem { protected override IComponent[] CreateComponentsCore(IDesignerHost host, System.Collections.IDictionary defaultValues) { if (defaultValues.Contains("Parent")) { var parent = defaultValues["Parent"]; if (parent != null && parent is SplitterPanel) return base.CreateComponentsCore(host, defaultValues); } var svc = (IUIService)host.GetService(typeof(IUIService)); if (svc != null) svc.ShowError("You can drop this control only over a SplitterContainer."); return null; } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda