Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
NumericTextBox (basierend auf dem Windows-Standard-Control)
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.389

Themenstarter:

NumericTextBox (basierend auf dem Windows-Standard-Control)

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Th69,
Zitat
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
private Nachricht | Beiträge des Benutzers