2011-05-07 12 views
14

¿Es posible en WinForms mostrar un texto dentro de un control NumericUpDown? Por ejemplo, quiero mostrar que el valor en mi control numérico de reducción es micro ampers, así que debería ser como "1 uA".Tener texto dentro del control NumericUpDown, después del número

Gracias.

+0

¿qué tal una etiqueta al lado del control? – DarkSquirrel42

+0

Bueno, eso es posible, pero quiero tenerlo dentro del control mismo. –

+0

Podría intentar colocar una etiqueta sobre el control, de lo contrario no puedo pensar en una propiedad para anexar una cadena al final de un número de arriba hacia abajo. – lpd

Respuesta

25

No hay tal funcionalidad integrada en el control estándar. Sin embargo, es bastante fácil de agregar al crear un control personalizado que hereda de la clase NumericUpDown y anula el UpdateEditText method para formatear el número en consecuencia.

Por ejemplo, es posible que tenga la siguiente definición de clase:

public class NumericUpDownEx : NumericUpDown 
{ 
    public NumericUpDownEx() 
    { 
    } 

    protected override void UpdateEditText() 
    { 
     // Append the units to the end of the numeric value 
     this.Text = this.Value + " uA"; 
    } 
} 

O, para una aplicación más completa, vea este proyecto de ejemplo: NumericUpDown with unit measure

+0

¿Hay algún proyecto de ejemplo similar con código C#? – GregNash

+0

@greg No tengo idea. Pero VB.NET y C# deberían ser igualmente fáciles de leer para cualquier desarrollador de .NET. Si eso falla, siempre hay traductores automáticos. –

+0

Acabo de enterarme de esto y funciona bien. Agregué una propiedad y la hice visible en el diseñador, pero por alguna razón el texto adjunto no se muestra en el diseñador. Un problema menor y funciona bien, pero ¿alguien tiene algún consejo sobre cómo hacerlo visible? –

1

poco me encontré con este tema y encontré Cody Gray respuesta increíble Lo aproveché para mi ventaja, pero hace poco resuene con uno de los comentarios sobre su respuesta que habla de cómo fallará el texto en la validación si el sufijo aún está allí. He creado una solución rápida probablemente no tan profesional para esto.

Básicamente, el campo this.Text se lee para los números.

vez que los números se encuentran que se ponen en this.Text, pero se necesita una supresión de rebotes o como se quiera llamarlo para asegurarse de que no creamos un desbordamiento de pila .

Una vez que se ingresa el nuevo texto con solo el número, se llama a ParseEditText(); y UpdateEditText(); para completar el proceso.

Esta no es la solución más amigable o eficiente, pero la mayoría de las computadoras modernas de hoy en día deberían estar perfectamente bien con eso.

También notará que he creado una propiedad para cambiar el sufijo para facilitar el uso en el editor.

public class NumericUpDownUnit : System.Windows.Forms.NumericUpDown 
    { 

     public string Suffix{ get; set; } 

     private bool Debounce = false; 

     public NumericUpDownUnit() 
     { 

     } 

     protected override void ValidateEditText() 
     { 
      if (!Debounce) //I had to use a debouncer because any time you update the 'this.Text' field it calls this method. 
      { 
       Debounce = true; //Make sure we don't create a stack overflow. 

       string tempText = this.Text; //Get the text that was put into the box. 
       string numbers = ""; //For holding the numbers we find. 

       foreach (char item in tempText) //Implement whatever check wizardry you like here using 'tempText' string. 
       { 
        if (Char.IsDigit(item)) 
        { 
         numbers += item; 
        } 
        else 
        { 
         break; 
        } 
       } 

       decimal actualNum = Decimal.Parse(numbers, System.Globalization.NumberStyles.AllowLeadingSign); 
       if (actualNum > this.Maximum) //Make sure our number is within min/max 
        this.Value = this.Maximum; 
       else if (actualNum < this.Minimum) 
        this.Value = this.Minimum; 
       else 
        this.Value = actualNum; 

       ParseEditText(); //Carry on with the normal checks. 
       UpdateEditText(); 

       Debounce = false; 
      } 

     } 

     protected override void UpdateEditText() 
     { 
      // Append the units to the end of the numeric value 
      this.Text = this.Value + Suffix; 
     } 
    } 

dude en mejorar mi respuesta o corregir si algo está mal, yo soy un programador autodidacta todavía está aprendiendo.

Cuestiones relacionadas