Hi zusammen,
vermutlich mache ich mir das Leben wie immer zu kompliziert, aber aus Fehlern lernt man ja .. sagt man zumindest.
Ich benötige mal wieder Eure Hilfe bei folgendem Problem:
Ich habe EINE Windows-Form. In dieser Form gibt es ein Panel. Innerhalb der Form reagiere ich auf KEY_DOWN :
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.Equals(Keys.F12))
{
mainPanel.Controls.Add(new Kontroller_1());
}
}
Ich prüfe also: falls F12 gedrückt wurde, dann lege ins Panel ein UserControl-Objekt, in diesem Fall heisst es Kontroller_1.
In diesem Kontroller gibt es NICHTS, außer einer Textbox. Ich möchte nun, dass diese Textbox den Focus bekommt - aber: das klappt einfach nicht.
Normalerweise, wenn ich kein Key_DOWN-Event auslöse, sondern einfach irgendwo im Code manuell ein neues Controll hinzufüge, springt der Focus in das erste Controller-Element - und gut ist.
Mit Key_Down setzt der den Focus weißgott wo hin, ich verzweifele bald.
textBox.Focus();
funktioniert genauso wenig wie
textBox.Select();
und wenn ich innerhalb des Konstruktors meiner Kontroller-Klasse auf 'ActiveControl' zugreifen will, gibt es eine NullReferenzException.
Was soll ich machen, weiß jemand Rat ?
Danke und liebe Grüße
Sterraf
Hallo,
was du versuchen könntest wäre, den Focus über die API SetFocus zu setzen.
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode.Equals(Keys.F12))
{
var tmpKontroller = new Kontroller_1();
mainPanel.Controls.Add( tmpKontroller );
SetFocus( tmpKontroller.YourTextBoxName.Handle );
}
}
vllt hat jemand anders eine elegantere Lösung
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"
OHMAN !
Ja sicher - jetzt check ich das auch. Der Key-Down-Handler zieht den Focus auf sich und gibt es erstmal nicht ab, es sei denn man gibt ihm den direkten Befehl - genau so wie Du es gemacht hast.
Bah - versteh einer die Welt 😃
Vielen Dank für die Hilfe, das rettet mir den Tag!
LG
Sterraf
Hallo Sterraf,
man sein, dass SetFocus hier (ausnahmsweise) funktioniert, aber ActiveControl zu Setzen ist schon das korrektere.
Das Control, auf das man den Focus setzen will, muss natürlich erstellt (und nicht null) sein.
Bitte beachte vorsorglich [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
herbivore