Laden...

In überschriebener Textbox mit Enter weiterspringen

Erstellt von chr1s81 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.390 Views
C
chr1s81 Themenstarter:in
102 Beiträge seit 2006
vor 16 Jahren
In überschriebener Textbox mit Enter weiterspringen

Hallo,

ich bin grade dabei ein neues Textbox Steuerelement zu entwickeln. In dieser Textbox soll das Feld nicht mit TAB sondern mit der Entertaste verlassen werden. Nun hab ich vorher mal gegooglet und hier im Forum rumgestöbert und folgenden Lösungsansatz gefunden:



        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            
            TextBox textbox = (TextBox)sender;
            ConfigReader reader = new ConfigReader("");
            
            if (e.KeyChar == (char)Keys.Enter)
            {
                if (textbox.Focused == true)
                {
                    GetNextControl(textbox, true).Focus();
                    e.Handled = true;
                }

            }

        }


Das hat auf meiner Testform auch soweit wunderbar funktioniert. Nun hab ich eine neue Klasse geschrieben die das Textbox Control überschreibt und habe dort folgenden Code eingefügt:



        protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
        {
            //base.OnKeyPress(e);
            if (e.KeyChar == (char)Keys.Enter)
            {
                //this.SelectNextControl(this, true, true, true, true).ToString();
               this.GetNextControl(this,true).Focus(); // hier tritt der Fehler auf
               e.Handled = true;
            }
        }

Jetzt platziere ich das Control auf meiner Testform und drücke die Enter Taste.
Bei dem Focus() Befehl bekomme ich nun eine Exception (object null exception)
Im Code hab ich da auch nen Kommentar dran gemacht.
Kann mir jemand sagen was ich falsch mache ? Benutze ich die falsche Funktion oder ist der Ansatz komplett falsch ???
Ich entwickel auf Windows XP SP 2 mit .NET 2.0 (3.0)

T
94 Beiträge seit 2006
vor 16 Jahren

ich nehm an, dass er die Controls durchgeht, wenn du GetNextControl aufrufst. die sind in form.controls gespeichert. in deiner klasse sind aber keine weiteren controls - nur deine textbox.

du müsstest also deine form mitübergeben. etwa so:


 // wenn du die textbox erstellst
 customtextbox ct = new customtextbox(this); // this bezieht sich auf die form

 //und in deiner klasse:
 formobjekt.GetNextControl(this,true).Focus();

hoffe du hast verstanden, was ich meine 😉 falls nicht, nochmal melden

mfg

If you don't like me for who I am, then you don't like me for who I am, but all you're gonna get, is who I am.

830 Beiträge seit 2005
vor 16 Jahren

Hallo,

das würde ich allerdings tunlichst lassen.

Ein Control sollte/darf nicht entscheiden, welches Control im Parent als nächstes den Focus bekommen soll.

Nimm lieber ein Event für deine Textbox, wenn die Enter-Taste gedrückt wird dieses auslösen und im Parent-Control dieses Abfangen und das Parent-Control entscheiden lassen, welches Control als nächstes dran ist.

Gruss
Friedel

Ohne Ziel ist auch der Weg egal.

C
chr1s81 Themenstarter:in
102 Beiträge seit 2006
vor 16 Jahren

Danke schonmal für die Antworten,

ich hab jetzt mal folgenden Code probiert:



        protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
        {
            //base.OnKeyPress(e);
            if (e.KeyChar == (char)Keys.Enter)
            {
               SendKeys.Send("{TAB}");
               e.Handled = true;
            }
        }


Das funzt (anscheinend) wunderbar!
Sind mit dem Sendkeys irgendwelche Probleme bekannt die in einem solchen zusammenhang auftreten könnten ?

MfG
Christoph

830 Beiträge seit 2005
vor 16 Jahren

Also mir nicht...

Finde die Lösung allemal besser als die vorherigen Lösungsansätze, welche mit Sicherheit für mehr Probleme gesorgt hätten.

Gruss
Friedel

Ohne Ziel ist auch der Weg egal.