2009-07-12 20 views
9

planeo añadir funcionalidades al cuadro de texto con la siguiente:cómo poner un control extendido WinForms en caja de herramientas

public class TextBoxExt : TextBox 
    { 
     protected override void OnKeyPress(KeyPressEventArgs e) 
     { 
      base.OnKeyPress(e); 
     } 

    } 

La pregunta es ¿cómo podemos utilizar este TextBoxExt? ¿Hay alguna forma de incluir esta clase en ToolBox para que podamos arrastrar y soltarla en el formulario? Si no, ¿cuál es la mejor manera de usar TextBoxExt?

Respuesta

14
  1. Cree su proyecto con TextBoxExt, asegúrese de que compila bien.
  2. Con la forma que desea TextBoxExt, abra la caja de herramientas, haga clic y seleccione "elegir los elementos" derecho
  3. Examinar para que .exe o DLL que se ha compilado en 1)
  4. asegúrese de que tiene una garrapata TextBoxExt junto a él, pulse OK
  5. TextBoxExt debería aparecer en la caja de herramientas, arrástrelo hasta el formulario

(Hay otra forma de hacer esto, abrir el archivo del diseñador y cambiar el nombre de las instancias de cuadro de texto a TextBoxExt pero Manual la edición de los archivos del diseñador puede considerarse peligrosa por algunos)

+0

He realizado muchos controles extendidos y esta es la forma de agregarlos al formulario. Además, puede agregar ese proyecto a su solución actual y también agregar la referencia al dll de su proyecto (TextBoxExt) al proyecto en el que planea usar TextBoxExt. –

3

Cualquier control personalizado en su proyecto debe aparecer automáticamente en la Caja de herramientas. He descubierto que, a veces, los controles no se muestran hasta que cierra un Visual Studio de reapertura. Supongo que el problema tiene algo que ver con el almacenamiento en caché de los contenidos de la Caja de herramientas.

+0

Además, asegúrese de que su proyecto/solución se construya. –

0

Necesita agregar un constructor a su clase derivada.

public class TextBoxExt : TextBox  
{   
    public TextBoxExt() 
    { 
    } 

    protected override void OnKeyPress(KeyPressEventArgs e)   
    {    
     base.OnKeyPress(e);   
    }  
} 
+0

No realmente. Sin constructor funciona también. –

+0

Disculpas, lo probé sin agregar el constructor y las minas funcionaron bien. No estoy muy seguro de cómo no está recibiendo automáticamente el control. – James

0

Su control debería aparecer en la caja de herramientas para su solución automáticamente. Para que aparezca para otros proyectos, debe elegir Elementos de la Caja de herramientas, como han dicho otros.

Si desea proporcionar una funcionalidad especial en tiempo de diseño, también deberá proporcionar algunos atributos adicionales relacionados con el diseñador y probablemente su propia clase derivada de ControlDesigner.

0

Caí en esta trampa hace solo un par de horas.
Tengo un proyecto de aplicación para Windows .NET 2.0 con algunos UserControls personalizados; funcionó bien Así que decidí ordenar mis archivos en subcarpetas, para hacer mi proyecto un poco más limpio.
Después de eso, el diseñador de Visual Studio 2010 dejó de cargar mis formularios y ToolBox ya no mostrará mis controles.
Me asusté, moviendo los archivos fuente en la raíz del proyecto, reiniciando ToolBox, pero nada parecía funcionar. Después de eso, recordé que utilicé ReSharper "Eliminar referencias no utilizadas", así que traté de poner de nuevo la referencia no utilizada, en particular System.Data: ¡problema resuelto! : O
No puedo decir por qué, pero esto funcionó para mí.
Espero que mi experiencia pueda ayudar a alguien más. :)
adiós, Nando

0

he creado un constructor vacío para mi implementación personalizada de UltraGridBagLayoutPanel. Aunque david.healed es correcto, no es necesario, es bastante útil poner un punto de interrupción para comprobar que cuando el formulario se inicializa está utilizando su clase para implementar su control personalizado.

Habría sido mucho más fácil editar el archivo de diseñador, pero lo intenté y cambié el tipo de campo para el control y también cambié la asignación del campo a una nueva instancia de mi control personalizado.

private Infragistics.Win.Misc.UltraGridBagLayoutPanel ultraGridBagLayoutPanel1; 
this.ultraGridBagLayoutPanel1 = new Infragistics.Win.Misc.UltraGridBagLayoutPanel(); 

a

private Athia.Reports.ultraGridBagLayoutPanel1 ultraGridBagLayoutPanel1; 
this.ultraGridBagLayoutPanel1 = new Athia.Reports.ultraGridBagLayoutPanel1(); 

Hacer esto destruye Visual Studio cada vez, y para solucionarlo requiere el uso de un editor de texto para poner de nuevo otra vez. Por lo tanto, a menos que alguien pueda describir lo que está mal con mi implementación de este enfoque, quizás llamar a la clase igual que el nombre de control no es una gran idea, creo que la única forma segura y confiable de lograrlo es como describe Calanus en los pasos 1 a 5 o como una pequeña desviación de eso, como Rob Windsor señala correctamente reiniciar VS, traerá el control a la Caja de herramientas automáticamente. Desafortunadamente para mí, tengo que cambiar todos los controles secundarios de la clase original a mi clase personalizada :-(.

6

Sé que esta es una vieja pregunta, pero tal vez sigue siendo útil para otra persona que tiene el mismo problema, como yo - como todavía está en la parte superior de Google :)

Puede interesarle usar ToolboxItemAttribute (http://msdn.microsoft.com/en-us/library/system.componentmodel.toolboxitemattribute(v=vs.110).aspx).

Lo hice para resolver el problema.

[ToolboxItem(true)] 
public class PanelTitle : LabelControl { 
    // Whatever code to override LabelControl here... 
} 

Reconstruya la solución y el control extendido se debe mostrar en la caja de herramientas.

0

Dentro de la misma solución esto debería funcionar automáticamente. Sin embargo, descubrí que si Target Framework no se corresponde, Toolbox no se completa. (Supongo que realmente las necesidades de referencia deben ser de la misma versión o más bajas que el objetivo de referencia.) (Obtuve una advertencia sobre Frameworks que no coinciden) Al hacer que estos sean el mismo Framework objetivo, recompilar, reiniciar VS. el control se llenó correctamente (También agregué el atributo ToolboxItem (verdadero))

Cuestiones relacionadas