Avere testo all’interno del controllo NumericUpDown, dopo il numero

È ansible in WinForms mostrare un testo all’interno di un controllo NumericUpDown? Ad esempio, voglio mostrare il valore nel mio controllo numerico di controllo è micro ampers quindi dovrebbe essere come “1 uA”.

Grazie.

Non c’è nessuna funzionalità integrata nel controllo standard. Tuttavia, è abbastanza facile aggiungerlo creando un controllo personalizzato che eredita dalla class UpdateEditText e sovrascrive il metodo UpdateEditText per formattare il numero di conseguenza.

Ad esempio, potresti avere la seguente definizione di class:

 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"; } } 

Oppure, per un’implementazione più completa, consulta questo esempio di progetto: NumericUpDown con unità di misura

Recentemente sono incappato in questo problema e ho trovato la splendida risposta di Cody Gray. L’ho usato a mio vantaggio, ma di recente ho fatto eco con uno dei commenti sulla sua risposta parlando di come il testo fallirà la convalida se il suffisso è ancora lì. Ho creato una soluzione rapida probabilmente non così professionale per questo.

Fondamentalmente il campo this.Text viene letto per i numeri.

Una volta che i numeri sono stati trovati, vengono inseriti in this.Text , ma è necessario un rimbalzo o qualsiasi altra cosa si voglia chiamare per assicurarsi che non si crei uno stack overflow .

Una volta che il nuovo testo con solo numero è, il normale ParseEditText(); e UpdateEditText(); sono chiamati a completare il processo.

Questa non è la soluzione più facile da usare o efficiente, ma la maggior parte dei computer moderni dovrebbe essere perfettamente adatta a questo.

Inoltre noterai che ho creato una proprietà per modificare il suffisso solo per un uso più facile nell’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; } } 

Sentiti libero di migliorare la mia risposta o correggermi se qualcosa non va, sono un programmatore autodidatta che sta ancora imparando.