È 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.