Convert bzw. NumericTextbox



  • Hi,
    Also, ich will eine Textbox erstellen wo man nur Zahlen eintragen kann, damit man als Höhen angabe z.B. nicht "B" eingibt...falls das mit VC# nicht möglich ist, will ich wissen, wie man aus einer norameln textbox ziffern ausliest und sie in "double"
    speichert ? ALso erst in einen String kopieren, und dann den String umwandlend un in "double" konvertieren ?Wie geht das alles ?

    mfg
    FoX



  • Wenn Du .NET 2.0 nutzt, dann MaskedTextBox.
    Umwandeln: z.B. Conver.ToDouble()



  • ähhmm,...

    kann man nich iwie einen filter einbauen, das die Textbox nichts anderes außer Zahlen annimmt ? .. weil die maskted textbox is nich so gut, weil man immer diese MASKCHARS hat .. und wenn man dem user dann noch kommerzahlen eingeben lassen will, wird schwer...^^also gibt es nicht einen filter der sozusagen für diese Textbox alles außer zahlen sperrtt ?

    mfg fox





  • evtl wär auch noch numeric up down was für dich. bin mir aber nicht mehr sicher ob man auch fließkommazahlen verwenden darf.



  • Versuch mal diese Klasse...
    Hoffe geholfen zu haben ! 😉

    public class NumberBox : System.Windows.Forms.TextBox
        {
            public enum Type
            {
                Integer,
                Double
            }
    
            private Type _type = Type.Integer;
            private bool _autoSelect = false;
            [System.ComponentModel.Category("Verhalten")]
            public Type InputType
            {
                get
                {
                    return this._type;
                }
                set
                {
                    this._type = value;
                }
            }
            [System.ComponentModel.Category("Verhalten")]
            public bool AutoSelect
            {
                get
                {
                    return this._autoSelect;
                }
                set
                {
                    this._autoSelect = value;
                }
            }
    
            private bool IsInputValid(string text)
            {
                bool result = true;
                try
                {
                    switch (this.InputType)
                    {
                        case Type.Integer:
                            System.Convert.ToInt64(text);
                            break;
                        case Type.Double:
                            System.Convert.ToDouble(text);
                            break;
                    }
                }
                catch (System.Exception ex)
                {
                    System.Console.WriteLine(ex.Message);
                    result = false;
                }
    
                return result;
            }
    
            protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
            {
                if (System.Char.IsControl(e.KeyChar) == false)
                {
                    string text = base.Text.Substring(0, base.SelectionStart) + e.KeyChar.ToString() + base.Text.Substring(base.SelectionStart + base.SelectionLength);
                    e.Handled = !this.IsInputValid(text);
                }
                base.OnKeyPress(e);
            }
    
            protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
            {
                bool result = false;
                if (keyData == (System.Windows.Forms.Keys)System.Windows.Forms.Shortcut.CtrlV || keyData == (System.Windows.Forms.Keys)System.Windows.Forms.Shortcut.ShiftIns)
                {
                    System.Windows.Forms.IDataObject data = System.Windows.Forms.Clipboard.GetDataObject();
                    string text = base.Text.Substring(0,base.SelectionStart) + System.Convert.ToString(data.GetData(System.Windows.Forms.DataFormats.Text)+base.Text.Substring(base.SelectionStart+base.SelectionLength));
                    result = !this.IsInputValid(text);
                }
                if (result == false)
                {
                    result = base.ProcessCmdKey(ref msg, keyData);
                }
                return result;
            }
            protected override void OnEnter(EventArgs e)
            {
                if (this.AutoSelect)
                {
                    this.SelectAll();
                }
            }
        }
    


  • Ernsti schrieb:

    Versuch mal diese Klasse...

    Versuch mal selbst und nutze dabei Copy & Paste. 😉


Anmelden zum Antworten