Einem Tastatur Key eine Methode zuweisen



  • Hallo Zusammen,
    ich schreibe gerade eine Windows Forms-Anwendung.
    Wie kann ich mit der ArrowUp Taste diese Methode ausführen?

    private: System::Void button1_MouseDown(System::Object^  sender, System::Windows::Forms::MouseEventArgs^  e)
            {
                    PortNum = FIRSTPORTCL;   
                    DataValue = 1;
                    cbDOut(BoardNum, PortNum, DataValue);
    
                    PortNum = FIRSTPORTCH;
                    DataValue = automanu;           
                    cbDOut(BoardNum, PortNum, DataValue);
            }
    

    MfG Markus



  • KeyDown abfangen, nach Deiner Taste fragen und die Methode aufrufen ?



  • Hallo Knuddlbaer,

    ich weiß nicht was Du meinst. KeyDown abfangen mache ich als event der Form1,
    Weiß dann aber nicht weiter.

    if(???Key??? == ???vkKeyUp???)
            button1_MouseDown(??????)
    

    Habe echt ein Syntax Problem!

    Kenne wohl jemanden der das in Borland hinkriegen würde, der ist abervon Visual Studio sehr verwundert.

    Währe echt schön wenn Dir was einfallen würde.

    MfG Markus



  • Ups, nu bin ich durcheinander geraten.

    Beispiel:

    /************************************************************************/
    	/*                                                                      */
    	/************************************************************************/
    	System::Void RechnungDetail::RechnungDetail_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e)
    	{
    		e->Handled = true;
    		if(e->KeyCode == Keys::Escape)
    			Close();
    		else if(e->KeyCode == Keys::F11)
    			buchenToolStripMenuItem_Click(sender,e);
    		else if(e->KeyCode == Keys::F5)
    			fh.fhevents->raise_RechnungUebersicht(buttonEdit1->Text);
    		else if(e->KeyCode == Keys::F3)
    		{
    			bindingNavigatorAddNewItem_Click(sender,e);
    			buttonEdit2->Focus();
    		}
    		else
    			e->Handled = false;
    	}
    

    KeyPreview muss auf true sein in der entsprechenden Form



  • Hallo Knuddlbaer,

    1000 Dank für Deine schnelle Antwort!

    Habe es jetzt so probiert:

    private: System::Void Form1_KeyPress(System::Object^  sender, System::Windows::Forms::KeyPressEventArgs^  e) 
    		 {
    			e->Handled = true;
    
    			if(e->KeyCode == Keys::Up)
    					button1_MouseDown(sender,e); 
    		 }
    

    Das gibt allerdings viel Mecker:
    e:\projektordner\programm c++\zeppcon\zeppcon0.0.1\zeppcon0.0.1\Form1.h(940) : error C2039: 'KeyCode': Ist kein Element von 'System::Windows::Forms::KeyPressEventArgs'
    c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll: Siehe Deklaration von 'System::Windows::Forms::KeyPressEventArgs'
    e:\projektordner\programm c++\zeppcon\zeppcon0.0.1\zeppcon0.0.1\Form1.h(941) : error C2664: 'ZeppCon001::Form1::button1_MouseDown': Konvertierung des Parameters 2 von 'System::Windows::Forms::KeyPressEventArgs ^' in 'System::Windows::Forms::MouseEventArgs ^' nicht möglich
    Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
    Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.

    Habe es auch mit KeyChar versucht, das funktioniert auch nicht.



  • Wie sieht die Fehlermeldung aus wenn Du KeyChar verwendest ?

    btw.: Ich würde das was button1 macht in ne Methode auslagern und die dann vom Keypress UND Mousedown aufrufen, Du musst sonst die MauseEventargs manuell zusammenbasteln.



  • Hallo Knuddlbaer,

    bin bei meinem Problem etwas weiter gekommen.
    Habe zu testzwecken mal ein Testprogramm geschrieben.

    private: System::Void Form1_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) 
    			 {
    				e->Handled = true;
    
    				if(e->KeyCode == Keys::Up)
    				{
    					label1->Text = "Taste gedrueckt!";
    				}
    			 }
    	private: System::Void Form1_KeyUp(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) 
    			 {
    				e->Handled = true;
    
    				if(e->KeyCode == Keys::Up)
    				{
    					label1->Text = "Taste nicht gedrueckt!";
    				}
    			 }
    

    Habe keine Fehlermeldung. Es funktioniert aber nur die Methode KeyUp!
    Beim drücken der Taste Up tut sich nichts.
    Beim loslassen funktioniert es!
    Hast du vieleicht eine Idee?



  • Kommst Du überhaupt in die Methode Key_Down rein ?
    (Leg mal nen Breakpoint)

    Btw.: handled solltest Du nur auf true setzen wenn Du auch wirklich die Taste behandelt hast.



  • Hallo Knuddlbaer,

    was ist ein Breakpoint? Ein Haltepunkt für den Debugger? Und was muss ich dann tun?
    Ohne "e->Handled = true;" funktioniert es auch nicht.
    Wieso komme ich in KeyUp rein und in KeyDown nicht?



  • Generell funktioniert es prima. Ich hab einfach ein Projekt aufgemacht, ne leere Form , Keys::Up gedrückt und geht.

    e->Handled solltest Du Dir in der MSDN noch mal ansehen, damit Du weißt was es macht.

    Welchen Wert hat KeyPreview von Form1 ? (wenn true pack es mal irgendwo zum download , das man sich mal ansehen kann wie Du es bei Dir hast, mit Kristallkugel bin ich in letzter Zeit zu oft auf die Nase gefallen)



  • Hallo Knuddlbaer,

    habe nun statt Keys::Up, Keys::NumPad8 benutzt, da KeyDown wohl Probs mit nichtalphanumerischen Keys hat. Das funktioniert. KeyPreview der Form1 hatte ich,
    wie von Dir gelernt, natürlich auf true gesetzt.
    Werde jetzt probieren, in der Methode KeyDown die Methode MouseDown aufzurufen!

    Weißt Du vieleicht wie ich ein MouseDown für Button1 simulieren kann?


Anmelden zum Antworten