2011-06-03 43 views
7

Después de una tonelada de google, no pude llegar a nada ..C# WinForms NumericUpDown de control (la eliminación de la caja de incremento)

¿Hay alguna manera de obtener un control NumericUpDown que no tiene el cuadro de giro?

Necesito un cuadro de texto que solo acepta enteros, y un numericUpDown tiene el comportamiento perfecto que estoy buscando. Sin embargo, necesito ocultar la casilla numérica para restricciones de espacio.

Cuando trato de hacer algo como numericUpDown.Controls [0] .Hide() o numericUpDown.Controls.RemoveAt (0), el cuadro de giro desaparece pero deja un vacío inutilizable donde solía estar el cuadro de giro. Por lo tanto, los números se desplazan en ese punto, lo que significa que el espacio se desperdicia ...

¿Hay alguna otra solución para esto?

Gracias ..

Respuesta

10

Puede heredar de NumericUpDown. El truco es ocultar el control cuando se crea el control.

public class NumericUpDownWitoutButtons : NumericUpDown 
{ 
    public NumericUpDownWitoutButtons() 
    { 
     Controls[0].Visible = false; 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     e.Graphics.Clear(SystemColors.Window); 
     base.OnPaint(e); 
    } 
} 

Si el lugar donde se encuentran los botones debe verse raro, anule también OnPaint.

Además, probablemente no necesite NumericUpDown. ¿Sería suficiente validar que solo se pueden escribir los dígitos? C# Numbers Only Textbox

+0

Acabo de probar esto, lo siento, no funciona .. El lado derecho del cuadro de texto tiene un espacio que no se puede usar .. El texto comienza a desplazarse cuando toca el espacio en blanco donde solían estar los botones Arriba :( – krebstar

+0

@krebstar - actualicé la respuesta –

+0

Hola, gracias por la ayuda. Pero todavía no resuelve mi problema. Aquí hay una foto para mostrarte de lo que estoy hablando: http://imgur.com/EP1OD – krebstar

0

Me conformé con deshabilitar los botones de flecha, como menos feo que tratar de ocultarlos o eliminarlos.

Inmediatamente después de este código repetitivo:

internal MainWin() 
{ 
    InitializeComponent(); 

, añadir lo siguiente:

myNumericUpDown.Controls[0].Enabled = false; // Disable the arrow buttons. 

también: establecer InterceptArrowKeys a false en las propiedades del control, para evitar que las teclas de flecha (en el teclado) de incremento y decrementando myNumericUpDown.Value.

maneras: Bad

myNumericUpDown.Controls[0].Hide(); // Hide the arrow buttons. 
    // This leaves a gray patch that turns white after minimize-and-restore. 

myNumericUpDown.Controls.RemoveAt(0); // Remove the arrow buttons. 
    // This leaves a gray patch that turns white after minimize-and-restore. 

media mala manera:

Forget los anteriores. Establezca solo Increment en 0 en las propiedades del control. Los botones de flecha todavía funcionan, y las teclas de flecha (en el teclado) todavía se interceptan, pero ahora no hacen nada. Tristemente, los botones de no acción son probablemente menos intuitivos que los botones de flecha desactivados. (Me sorprende que incluso acepta Increment = 0 Una versión inteligente de este control sería perfectamente ocultar los botones de flecha cuando el incremento es 0..)

otra solución (s):

Un número- La casilla se puede implementar como TextBox con un código adicional que restringe la entrada solo a números, y devuelve o anuncia un valor numérico (decimal o su elección).(La búsqueda encuentra muchos ejemplos diversos y complejos). Los datos pegados se diferencian de las pulsaciones de teclas, por lo que se necesita código adicional para manejar las pegadas. (Upside: puede hacer que la caja de números sea más inteligente que el NumericUpDown incorporado: NumericUpDown acepta estúpidamente y muestra . hasta que el usuario presiona Intro o abandona el campo, incluso si especifica DecimalPlaces = 0, y acepta y muestra múltiples puntos decimales, que no tiene sentido.)

un número entero-box es más sencillo que un número de cuadro generalizada que acepta números reales (opcionalmente en notación de coma flotante) y devuelve un tipo de número real (float, double, o decimal).

Cuestiones relacionadas