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.
¿qué tal una etiqueta al lado del control? – DarkSquirrel42
Bueno, eso es posible, pero quiero tenerlo dentro del control mismo. –
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