Laden...

Control-Fokus wechseln mit Enter-Taste

Erstellt von Roman78 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.904 Views
Hinweis von Coffeebean vor 9 Jahren

Abgeteilt von String wert aus textbox überprüfen

Bitte nur ein Thema pro Thread [Hinweis] Wie poste ich richtig? Punkt 1.2

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren
Control-Fokus wechseln mit Enter-Taste

Wird wohl so sein. Aber mal was anderes zum gleichen Bastelprojekt.

Habe 2 Textboxen und 2 Buttons (klassiches Logon screen). Wie komme ich jetzt von textbox1 zu textbox2 mit der Enter taste?

Ich habe jetzt:

       public void textbox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
             textbox2.Focus(); 
        }

Aber er will nicht zur textbox2. Alternativ wäre auch ein tap Ersatz möglich.

B
357 Beiträge seit 2010
vor 9 Jahren

Keine Ahnung, was du dann machst. Funktioniert bei mir mit demselben Code anstandslos.

K
89 Beiträge seit 2013
vor 9 Jahren

Ansonsten kannst du auch googlen.
Das war das erste Eregbnis und hier werden noch weitere Möglichkeiten genannt. Eine davon funktiniert bestimmt.
http://stackoverflow.com/questions/1087786/press-enter-to-move-to-next-control

J
251 Beiträge seit 2012
vor 9 Jahren
R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Hab es auch mal neu gestartet, aber geht immer noch nicht.

Auch gegoogeld hab ich (daher kommt ja meine Lösung, die nicht funktioniert). Habe einiges probiert, aber irgendwie mach ich was falsch. (debugger werde ich noch mal testen)

Also hier mal das ganze, vielleicht hab ich etwas vergessen oder in der falschen Reihenfolge.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void textbox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
             textbox2.Focus();
        }

        string user,password;

        private void OK_Click(object sender, EventArgs e)
        {
            user = textbox1.Text;
            password = textbox2.Text;
            if (user == "") { MessageBox.Show("Benutzername eingeben"); textbox1.Focus(); return; }
            if (password == "") { MessageBox.Show("Kennwort eingeben"); textbox2.Focus(); return; }  
      
            ProcessStartInfo StartNAV = new ProcessStartInfo();
            StartNAV.FileName = "C:\\Windows\\System32\\psexec.exe";
            StartNAV.WindowStyle = ProcessWindowStyle.Hidden;
            StartNAV.Arguments = "-u Heiko.info\\" + user + " -p " + password + " C:\\windows\\notepad.exe";
            Process.Start(StartNAV); 
            Close(); 
            }

        private void Cancel_Click(object sender, EventArgs e)
        {
            Close();
        }

    }
}

B
357 Beiträge seit 2010
vor 9 Jahren

Hast du dein Event normal über den Designer abonniert? Falls nein, solltest du das im Code machen.

K
89 Beiträge seit 2013
vor 9 Jahren

Lies dir den Artikel von Jamikus durch, debugge und schaue, ob in die if gesprungen wird. Wenn ja liegt es an Focus. Dann würde ich mal eine andere MEthode versuchen

2.207 Beiträge seit 2011
vor 9 Jahren

Hallo Roman78,

dein Code compiliert gar nicht, weil allein die Klammern nicht stimmen.

Wenn du schon Code postest, dann bitte welchen, der kompiliert.

Mit dem Debugger hättest du dir hier fast jede Frage sparen können 😉

Gruss

Coffeebean

3.825 Beiträge seit 2006
vor 9 Jahren

Wenn Dich der Piepton stört bei der Entertaste bau noch


e.Handled = true;
e.SuppressKeyPress = true;

in den Code ein.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Ah, das kommt weil ich das mitten im editieren kopiert habe. Entschuldigung.

Habe jetzt mal das ganze ausgeholt. Und probiere es aufs neue. Das KeyDown stand auch in der Form1.Designer.cs drin. Auch da habe ich es mal raus geholt.

Habe den Code einfach im Form rein geschrieben, da lag wohl der fehler. Habe es jetzt mal über den Designer gemacht und dann geht es auch. Sehe jetzt auch er macht:

this.textbox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textbox1_KeyDown); 

und vorher wolle er es aus dem SystemHandler holen.

Gut wieder was gelernt. Also weniger mit copy paste... (bin halt mehr Borland Pascal 7 gewöhnt... jaja ich werde alt 😄 )

@Bernd, Danke für den Tipp.

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Bin wieder am verfeinern meines kleinen Programms.

Wollte jetzt, wenn man in der 2. Textbox auf Enter drückt, das nicht nur OK gefocust wird sonder gedrückt wird.

Habe jetzt:

private void textbox2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;
                e.SuppressKeyPress = true;
                OK.Focus();
            }
        }

Man muss nun immer 2 mal Enter drücken, das erste mal um das Focus auf OK zu legen un das 2. mal um OK zu drucken. Um also

private void OK_Click(object sender, EventArgs e)

aus zu führen.

Gibt es eine Möglichkeit um OK_Click direkt mit dem drücken von Enter aus der textbox2 auszulösen?

709 Beiträge seit 2008
vor 9 Jahren

Gibt es eine Möglichkeit um OK_Click direkt mit dem drücken von Enter aus der textbox2 auszulösen?

Klar! Du kannst es selbst aufrufen.

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Und wie? Konnte über google leider nichts finden.

709 Beiträge seit 2008
vor 9 Jahren
private void textbox2_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        e.Handled = true;
        e.SuppressKeyPress = true;

        OK_Click(this, EventArgs.Empty);
    }
}

private void OK_Click(object sender, EventArgs e) ...

R
Roman78 Themenstarter:in
18 Beiträge seit 2015
vor 9 Jahren

Danke, es hat funktioniert.

463 Beiträge seit 2009
vor 9 Jahren

Ganz sauber ist es nicht, da man Eventhandler niemals selber aufrufen sollte... Noch dazu rufst du den Eventhandler mit einem falschen sender auf!

Besser wäre es, die Funktion welche der OK Eventhandler ausführt in eine eigene Methode zu stellen und diese vom beiden Eventhandler aus aufzurufen.