Abgeteilt von String wert aus textbox überprüfen
Bitte nur ein Thema pro Thread [Hinweis] Wie poste ich richtig? Punkt 1.2
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.
Keine Ahnung, was du dann machst. Funktioniert bei mir mit demselben Code anstandslos.
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
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();
}
}
}
Hast du dein Event normal über den Designer abonniert? Falls nein, solltest du das im Code machen.
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
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
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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
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.
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?
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.
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) ...
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.