Laden...

NumericTextBox (basierend auf dem Windows-Standard-Control)

Erstellt von Th69 vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.237 Views
Th69 Themenstarter:in
4.939 Beiträge seit 2008
vor 14 Jahren
NumericTextBox (basierend auf dem Windows-Standard-Control)

NumericTextBox:

nachdem es schon einige Beiträge zu diesem Thema gibt, jedoch noch kein Beitrag direkt die Verwendung des Window-Standard-Controls mit Style = ES_NUMBER erwähnt, möchte ich folgende kleine Komponente vorstellen:


namespace Common.Controls
{
    public partial class NumericTextBox : System.Windows.Forms.TextBox
    {
        public NumericTextBox()
        {
            InitializeComponent();

            SetNumStyle();
        }

        public NumericTextBox(IContainer container)
        {
            container.Add(this);

            InitializeComponent();

            SetNumStyle();
        }

        private const int GWL_STYLE = -16;
        private const int ES_NUMBER = 0x2000;

        [DllImport("user32", EntryPoint = "GetWindowLongA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
        private static extern int GetWindowLong(int hWnd, int nIndex);
        [DllImport("user32", EntryPoint = "SetWindowLongA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
        private static extern int SetWindowLong(int hWnd, int nIndex, int dwNewLong);

        private void SetNumStyle()
        {
            int nStyle = GetWindowLong(Handle.ToInt32(), GWL_STYLE);
            SetWindowLong(Handle.ToInt32(), GWL_STYLE, nStyle | ES_NUMBER);
        }

        public new HorizontalAlignment TextAlign
        {
            get
            {
                return base.TextAlign;
            }

            set
            {
                base.TextAlign = value;
                SetNumStyle();
            }
        }
    }
}

Einzig die Eigenschaft 'TextAlign' musste ich neu überschreiben, da diese den Style wieder zurückgesetzt hat (immer diese Bugs im Framework -)

Es können dann in die TextBox nur noch Ziffern (0-9) eingegeben werden und jedes andere Zeichen wird mit einem ToolTip verweigert.
Einzig Copy & Paste von Texten ist (leider) noch möglich!

Im Anhang befindet sich die komplette Komponente.

NumericTextBox, Numerische TextBox, Textbox nur mit Zahlen

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Th69,

Einzig Copy & Paste von Texten ist (leider) noch möglich!

der Ansatz, das zu nutzen, was das Control schon von Hause aus bietet, ist nicht schlecht, aber das, was das Control von Hause aus biete, ist wegen des genannten Problems eben leider nicht so doll.

Hallo zusammen,

in [FAQ] In einer TextBox nur bestimmte Zeichen/Eingaben zulassen gibt es eine TextBox, die diese Copy&Paste-Problem nicht hat. Und dort findet man auch noch weitere interessante Überlegungen zu dem Thema.

herbivore