CompactFramework und seltsames Verhalten von "Enter" in Textboxen

Laurenzis69

Grünschnabel
Hallo Com,

ich habe ein seltsames Problem, auf das ich mir derzeit keinen Reim machen kann.

In Form 1 existiert eine Textbox, hier wird mittels des "KeyDown" Ereignisses geprüft ob die Enter-Taste gedrückt wurde. Wenn ja, wird eine 2te Form geöffnet, wieder mit einer Textbox. Auch in dieser Textbox wird wieder mittels des "KeyDown" Ereignisses auf "Enter" geprüft. Wurde "Enter" gedrückt, so soll sich das 2te Form schliessen (this.close) und im ersten Form wieder die Textbox aktiviert werden (textbox1.focus()).

Problem: Sobald ich im 2ten Form "Enter" drücke, wird dieses geschlossen im ersten Form aber SOFORT wieder das "Keypress-Ereignis" mit "Enter" ausgelöst und somit wieder das 2te Form angezeigt.

Als Abfrage nutze ich:

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
Select Case (e.KeyCode.ToString())
Case "Return"
Dim frmTest As Form
frmTest = New Form2
frmTest.ShowDialog()
frmTest.Dispose()
TextBox1.Focus()
End Select
End Sub

Versucht habe ich das sowohl (wie hier zu sehen) in Basic.NET alsauch mit C# - in 2003 und 2005 jeweils das selbe Verhalten (also keine Änderung zwischen CF 1.1 und 2.0). Interessanterweise passiert das NICHT bei einer Windowsanwendung, aber halt bei einer PocketPC-Anwendung und genau in einer solchen habe ich dieses Problem.

Für Hilfe wäre ich wirklich dankbar ;)


Markus.
 
Hi Markus!

Wirklich sehr seltsam. Könntest Du mal 2 bitte kleine Demos erstellen,
damit man das Verhalten mal nachvollziehen kann. Also eine für .net1.1 und eine fürs CF1.1.
 
Also,

Erstmal lieben Dank für die schnelle Antwort.

Demos hab ich welche, kein Thema, die kann ich Dir gerne zur Verfügung stellen. Desweiteren, damit es so richtig seltsam wird, habe ich jetzt mal folgendes getestet:

Anstatt des Codes "Return" habe ich jetzt mal als Case die "F23" genutzt (wird ja von den CF-Geräten als Enter ausgegeben).

Wenn ich das mache, dann habe ich den Effekt genau "andersrum", sprich, das 2te Form "übernimmt" das Enter des ersten Forms, sprich es wird angezeigt, läuft direkt in das "Keydown-Event" und wird wieder geschlossen. Ganz lustig sind in dem Zusammenhang auch Messageboxen - bei "F23" wird bei dieser automatisch die vordefinierte Taste gedrückt...

Wenn ich Dir die Demos mailen soll, einfach bescheidgeben.


Grüße,

Markus.
 
Hi!

Sry das ich mich erst jetzt melde. Irgendwie wurde des Thema nicht aboniert. Komisch.
Poste die Demos bitte hier als Anhang.
Somit lässt dich der Sachverhalt auch besser für dritte nachvollziehen...
Ich versuch was ich kann, muss aber anmerken das ich noch nicht viel mit dem CF gemacht hab.
Wer Dir aber sicher mit dem richtigen Framework weiter helfen können...
Mal schauen wie Du's implementiert hast.
 
Hy,

nochmal Danke für Deine Antwort - ich habe das Problem mittlerweile allerdings lösen können. Da über dieses Problem aber evtl. noch der ein oder andere fallen könnte, hier die Lösung:

Manche PocketPCs senden für die Enter-Taste nicht 1 sondern 2 Ereignisse - zum einen das Ereignis Taste "F23" und zum anderen das Ereignis "Return".
Mein Problem war, daß ich in den Forms teilweise einfach nur geprüft hatte, ob eine Taste gedrückt wurde - wenn ja wurde das Form geschlossen, das nächste geöffnet und dort dann direkt den Focus auf ein Eingabefeld gelegt. In diesem Form wurde dann speziell auf die Enter-Taste geprüft.

Ergebnis: Form bekommt auf Grund der Enter-Taste zunächst das Ereignis "F23" - das "OnKeyDown" Ereignis wird ausgelöst und das Form geschlossen, das nächste Form geöffnet, und dort kommt dann das 2te noch anstehende Ereignis "Return" an. Deshalb dieses seltsame Verhalten.

Hier der Code der mir das Problem gelöst hat (C#):

private void Form2_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode.ToString()=="F23")
{
return;
}
this.Close();
}

Wichtig wäre noch zu erwähnen, daß dies ausschliesslich auf den Geräten passiert, im Emulator z.B. ist dieses Verhalten nicht zu beobachten.


Grüße an alle und danke für die Hilfsangebote,


Markus.
 

Neue Beiträge

Zurück