Laden...

KeyEvent bei PictureBox abfragen

Erstellt von SGT_BOB vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.436 Views
S
SGT_BOB Themenstarter:in
125 Beiträge seit 2005
vor 19 Jahren
KeyEvent bei PictureBox abfragen

Hallo Leute.

Ja...genau... ich schon wieder... 😁

Also ich hab schon wieder ein Problem mit dem PictureBox-Element. Und zwar möchte ich bestimmte Tasten abfangen. Habs mal so versucht:

Im Konstruktor:


pbox.KeyDown += new KeyEventHandler(PBoxOnKeyDown);


protected void PBoxOnKeyDown(object obj, KeyEventArgs kea)
{
	Keys key = kea.KeyCode;				Console.WriteLine("PBoxOnKeyDown: "+key.ToString());
}

Hab erst mal nur eine Kontrollausgabe um zu sehen ob da überhaupt was passiert.
Aber mir wird nix ausgegeben.
Irgendwie scheint er da nicht drauf anzuspringen. Wieso nicht???

*************************
Ich bin root, ich darf das... 😜
root>_
*************************

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo SGT_BOB,

weil nur das Control den Input bekommt, das den Fokus hat. Das ist bei deiner PictureBox wohl nicht der Fall. Den Fokus kannst du mit Control.Focus () setzen, allerdings ist der Fokus gleich wieder weg, wenn du eine TextBox, Button o.ä. anklickst.

Die andere Möglichkeit, wäre KeyDown für das Form zu registrieren und vorher Form.KeyPreview auf true setzen.

herbivore

S
SGT_BOB Themenstarter:in
125 Beiträge seit 2005
vor 19 Jahren

Hui, ein Wochenendfrühaufsteher. 😁

Hatte der PictureBox den Focus schon gegeben, aber irgendwie hat's auch nicht so wirklich funktioniert. Hab auch keine anderen Steuerelemente auf der Form. Hmmm... 🙁

Das KeyPreview ist auch auf true, ist es das nicht standarmäßig???

Weiß nicht mehr weiter.

Kann das damit zusammenhängen, das ich ein MDI From erstellt hab. Eigentlich doch nicht oder, da ich ja so auch nur ein Unterformular erstellt habe. Oder???

*************************
Ich bin root, ich darf das... 😜
root>_
*************************

49.485 Beiträge seit 2005
vor 19 Jahren

Hallo SGT_BOB,

Das KeyPreview ist auch auf true, ist es das nicht standarmäßig???

Sowas verrät ja freundlicherweise die Doku:

true if the form will receive all key events; false if the currently selected control on the form receives key events. The default is false.

Weiß nicht mehr weiter.

Wenn du KeyPreview auf true hast, kommen die Tastendrücke (zusätzlich= beim Form an. Du musst also deinen KeyDown-Handler für die Form und nicht für die PictureBox registrieren. Hast du das so?

herbivore

S
SGT_BOB Themenstarter:in
125 Beiträge seit 2005
vor 19 Jahren

Erst mal Danke daß du dich so mit meinem Thema auseinander setzt. 😉

Ums kurz zu fassen, in diesem Thread hab ich schon erklärt, worauf das ganze hinauslaufen soll.

Ich hab jetzt eine MDI Form mit zwei Unterformularen und je einer PictureBox. In dem einem Fenster wird mein Quellbild geladen und in das andere sollen nach und nach, ausgewählte Bildschirmausschnitte kopiert werden. (siehe Thread).
Ich möchte jetzt die Tasten von der jeweils ausgewählten Form (bzw. dessen PictureBox) die Tasten abfragen, um das Auswahlrechteck zu bewegen.
Hoffe das ich das jetzt einigermaßen erklären konnte. 😁

Muss dafür nicht jeweils die PictureBox das KeyEvent zugewiesen bekommen.


pbox.KeyDown += new KeyEventHandler(PBoxOnKeyDown);
pbox.KeyUp += new KeyEventHandler(PBoxOnKeyUp);

Wenn die PictureBox jetzt den Focus hat, müssten ich doch mit dem folgendem Code ein Ausgabe bekommen, oder?


                protected void PBoxOnKeyDown(object obj, KeyEventArgs kea)
	{
		Keys key = kea.KeyCode;
		Console.WriteLine("obj: "+obj.ToString());
		Console.WriteLine("PBoxOnKeyDown: "+key.ToString());
	}
	
	protected void PBoxOnKeyUp(object obj, KeyEventArgs kea)
	{
		Keys key = kea.KeyCode;
		Console.WriteLine("obj: "+obj.ToString());
		Console.WriteLine("PBoxOnKeyDown: "+key.ToString());
	}

Momentant hab ichs so gemacht, wie du's (herbivore) mir beschrieben hast.


...
this.KeyPreview = true;
...
this.KeyDown += new KeyEventHandler(PBoxOnKeyDown);
this.KeyUp += new KeyEventHandler(PBoxOnKeyUp);

Aber so wird nur zwischen den beiden Formen hin und her geswitcht.

Vielleicht hast du oder jemand anders ja noch eine Idee.

*************************
Ich bin root, ich darf das... 😜
root>_
*************************