Laden...

Benutzerdefinierte Textbox

Erstellt von northdrive vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.661 Views
N
northdrive Themenstarter:in
43 Beiträge seit 2006
vor 18 Jahren
Benutzerdefinierte Textbox

Hallo,

ich finde mal wieder die Bäume nicht im Wald ...

Ich möchte mir eine Textbox bauen, die nur Integerwerte annimmt, und die über einen Wertebereich verfügt.
Hierzu habe ich eine neue Steuerelementebibliothek in VS2005 angewählt. Aber danach verliert sich der Erfolg in meinem Unwissen ??
Ich gebe der Textbox einen Errorprovider um eine Fehleingabe direkt abzufangen. Ich möchte bei jedem Textbox.leave Ereignis die Prüfung starten.
Wahrscheinlich mache ich hier ein paar haarsträubende Fehler aber ich habe mit der Suche nichts wirklich hilfreiches gefunden 😦

ich bin sowohl für direkte Hinweise, als auch für einen Link, der auf eine gutverständliche Quelle verweist dankbar.

so hier der Code :


{
    public partial class IntBox1 : System.Windows.Forms.TextBox
    {
        private System.Windows.Forms.ErrorProvider fehler = new System.Windows.Forms.ErrorProvider();
        private System.ComponentModel.CancelEventArgs exit = new System.ComponentModel.CancelEventArgs();
        int? minWert = null;
        int? maxWert = null;
        int testwert;
        string ausgabe;


        [Browsable(true)]
        [Category("Grenzen")]
        [Description("Legt den Minimalwert für die Integerbox fest")]
        public int? MinWert
        {
            set 
            {
                this.minWert = value;
            }
            get
            {
                return this.minWert;
            }
        }
        
        [Browsable(true)]
        [Category("Grenzen")]
        [Description("Legt den  Maximalwert für die Integerbox fest")]
        public int? MaxWert
        {
            set
            {
                this.maxWert = value;
            }
            get
            {
                return this.maxWert;
            }

        }


        private void Pruefung(object sender, EventHandler e)
        {
            
            try
            {
                testwert = Convert.ToInt32(this.Text);
            }
            catch
            {
                fehler.SetError(this, "Dies ist kein Integerwert");
                exit.Cancel = true;
                return;
            }

            if (testwert < minWert)
            { 
                ausgabe="Bitte geben Sie einen Wert größer als " +Convert.ToString(MinWert)+ " ein!";
                fehler.SetError(this, ausgabe);
                exit.Cancel = true;
                return;
            }

            if (testwert > maxWert)
            {
                ausgabe = "Bitte geben Sie einen Wert größer als " + Convert.ToString(maxWert) + " ein!";
                fehler.SetError(this, ausgabe);
                exit.Cancel = true;
                return;
            }

            fehler.SetError(this, string.Empty);
            exit.Cancel = false;
            return;

        }



        public IntBox1()
        {
            InitializeComponent();
            this.TextChanged += new EventHandler(
        }

        private void IntBox1_Load(object sender, EventArgs e)
        {

        }








    }

}
564 Beiträge seit 2006
vor 18 Jahren

Hallo!

Unter net2.0 kannst du eine MaskedTextBox verwenden. Die könnte dein Problem lösen.

der Marcel

EDIT: Sorry, mein Vorschlag passt ncht. Du möchtest ja auch einen bestimmten Wertebereich eingrenzen.

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo northdrive,

warum beim Leave? Verwende besser Validating. Entsprechend muss du dann OnValidating überschreiben und dort base.OnValidating und Pruefung aufrufen.

herbivore

PS: Vielleicht auch interessant In einer TextBox nur bestimmte Zeichen/Eingaben zulassen

N
northdrive Themenstarter:in
43 Beiträge seit 2006
vor 18 Jahren

hallo herbivore,

mein Problem ist : ich weiß nicht genau wie ich das tun soll, kannst du mir eine (online) Literaturstelle empfehlen wo das für "peep" beschrieben ist ?

danke

northdrive

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo northdrive,

verstehe nicht genau dein Problem. Ich würde mal meinen, alles was du brauchst steht in der MSDN. Und die sollte besser auf deinem Rechner sein, so oft wie man die braucht.

==> Control.Validating-Ereignis

herbivore

PS: Allgemeines über Events und wie man damit umgeht, solltest du am besten einem guten C#-Buch entnehmen.

N
northdrive Themenstarter:in
43 Beiträge seit 2006
vor 18 Jahren

hallo herbivore,

auch wenn ich versuche, das von dir erstellte Ereignis mit der Texbox zu implementieren, bekomme ich Fehlermeldungen :

Das System beschwert sich, dass es keine Definitionen für load, AutoscaleDimensions...
erhält.

Ich habe hier ein paar eigentlich nicht schlechte Bücher stehen, aber die Erstellung von Steuerelementen ist in diesen wirklich nicht wundervoll dargestellt...

Kannst du mir bitte erklären was ich falsch mache ?? oder was ich noch implementieren muss ??

danke northdrive

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo northdrive,

Ich habe hier ein paar eigentlich nicht schlechte Bücher stehen, aber die Erstellung von Steuerelementen ist in diesen wirklich nicht wundervoll dargestellt...

man braucht m.E. nicht ein Buch direkt über Steuerelemente. Wichtig ist das EventHandling als solches zu verstehen.

Das System beschwert sich, dass es keine Definitionen für load, AutoscaleDimensions...erhält.

Beides kommt in dem Codeausschnitt oben nicht vor. Daher ist es schwer zu sagen, woran es liegt. Aber es scheint mir ja um Syntaxfehler zu gehen. Die sollte man auch als Angänger selber lösen können bzw. lösen lernen.

Leider kann ein Forum auch keine Einfühung in die Programmierung vonm Steuerelementen leisten.

herbviore