Entwickler-Ecke
Sonstiges (.NET) - Suche hilfe bei Zuweisung eines "Befehls" für einen Button
Alex66955 - Mi 04.06.08 13:48
Titel: Suche hilfe bei Zuweisung eines "Befehls" für einen Button
Guten Tag an alle,
Zuerst muss ich euch sagen das ich keine Ahnung von C sharp habe. Jedoch kleine Vorkenntnisse in anderen Programmiersprachen. Wenn ihr meint das ich das als Anfänger nicht hinbekomme könnt ihr mir es gleich sagen dann muss ich eine andere Lösung finden.
Also hier mein Problem: ich habe für eines technisches Projekt eine Software. Diese ist sehr einfach gehalten und in C Sharp geschrieben. Ich besitze den Sourcecode als Visual Studio Projekt.
Kurz ausgedrückt verbindet die Software sich mit einem Server und übermittelt bei Tasten Eingabe auf der Tastatur die Zeichen an den Server weiter. Soweit ist auch alles Super.
Nur müsste ich dieses Programm abändern das nicht bei Eingabe auf der Tastatur sondern beim Klicken auf einen "Button" ein bestimmter Buchstabe gesendet wird.
Also Zusammenfassend zum Beispiel : beim anklicken des Knopfes_1 wird der Buchstabe "
a" gesendet und analog dazu für weitere Buttons..
Kann mir jemand weiter helfen. Ihr würdet meinem Projekt einen großen Schritt weiter helfen.
PS: Ich weis nicht was helfen würde zum veranschaulichen des Programms deswegen ein kleines Bild.
Alex
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am Mi 04.06.2008 um 14:07
JüTho - Mi 04.06.08 14:31
Hallo,
das, was für "Tastendruck abschicken" passiert, müsste in einem Key-Ereignis stehen. Höchstwahrscheinlich gibt es in diesem Programm eine oder mehrere Methoden, deren Namen mit KeyDown oder KeyPress oder KeyUp enden. Dort steht dann der Code, der die Tastencodes weiterleitet; dafür wird vielleicht SendKeys-Methode oder SendKeys-Klasse benutzt (das ist aber nicht gesagt).
Den gleichen Code musst Du in einen ButtonClick-EventHandler einbauen.
Besser ist es vermutlich, eine neue Methode "Tastencode abschicken" zu erstellen und diese Methode von allen Stellen aus abzurufen, wo es benutzt wird. Aber wie aufwändig das ist, hängt von der Gesamtkonstruktion der Anwendung ab.
Jürgen
PS. Ich habe mir das Bild erst nachträglich angesehen. Aber mir sagt es weder zum Ablauf des Programms noch zu Deinem Problem etwas.
Alex66955 - Mi 04.06.08 14:41
Erstmal vielen dank für Antwort. Bin jetzt schon froh das sich jemand gemeldet hat :)
Also ich hab mal schnell nachgesehen. Hier der Code und du hattest recht war untere keypress eingetragen.
Also ich kann soviel erkennen das hier die Eingabe in dem Textfeld verschickt wird mittels den Verbindungsangaben. Richtig? Und nun muss ich ein teil dieser Befehle in mein eigene Button Click-EventHandler einfügen? Mhh nur noch wie
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| private void txtInput_KeyPress(object sender, KeyPressEventArgs e) { if(e.KeyChar=='\r') { Send(txtInput.Text+_connectionSettings.NewLineSequence); txtInput.Text=String.Empty; e.Handled = true; } }
private void txtOutput_KeyPress(object sender, KeyPressEventArgs e) { if(!_connectionSettings.BufferedInput) { switch(e.KeyChar) { case '\r': Send(_connectionSettings.NewLineSequence); break; default: Send(e.KeyChar.ToString()); break; } e.Handled=true; } } |
Achja zu dem Bild. Ich weis halt nicht was euch weiterhelfen würde. Nehme Kritik gerne an um in Zukunft zielgerichteter Mein Problem zu schildern
Alex
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
JüTho - Mi 04.06.08 19:18
Hallo Alex,
Alex66955 hat folgendes geschrieben: |
Also ich kann soviel erkennen das hier die Eingabe in dem Textfeld verschickt wird mittels den Verbindungsangaben. Richtig? |
Ich verstehe nicht genau, wozu die Input-TextBox und wozu die Output-TextBox gedacht ist. (Das erschließt sich mir auch nicht aus dem Bild.)
Bei der Input-Box wird offensichtlich dies ausgeführt (Pseudo-Code):
Quelltext
1: 2: 3: 4: 5:
| Wenn '\r' (also CR) eingegeben wird, dann: * sende den gesamten aktuellen Input-Text * sende den als "NewLine" vereinbarten String * leere die Input-Box * damit ist die Eingabeprüfung abgeschlossen |
Bei der Output-Box wird dies ausgeführt:
Quelltext
1: 2: 3: 4: 5: 6:
| Wenn BufferedInput nicht vorgesehen ist (was das genau zu bedeuten hat, muss aus der Doku "Deines" Programms ersichtlich sein), dann erledige dies: * Eingabe von CR: sende den als "NewLine" vereinbarten String * Eingabe sonst: sende das aktuelle Zeichen (das muss wegen der Deklaration der Send-Methode als String geschehen) * damit ist die Eingabeprüfung abgeschlossen |
Jetzt musst Du zunächst entscheiden, was der Button erledigen soll; meine Vermutung: Der gesamte Inhalt der Input-Box soll durch Knopfdruck als Zeile übertragen werden. Dann stimmt die Arbeit mit dem Ablauf von txtInput_KeyPress überein, und meine Empfehlung für eine separate Methode kommt zum Tragen:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private void SendInput() { Send(txtInput.Text + _connectionSettings.NewLineSequence); txtInput.Text=String.Empty; } |
Der bisherige EventHandler verkürzt sich entsprechend:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void txtInput_KeyPress(object sender, KeyPressEventArgs e) { if(e.KeyChar=='\r') { SendInput(); e.Handled = true; } } |
Für den Button musst Du einen EventHandler erzeugen (gehe in der IDE mit dem Formular in den Designer, Doppelklick auf den Button); in den dadurch erzeugten Code-Rumpf brauchst Du nur den Aufruf von SendInput() einzufügen - fertig.
Viel Erfolg! Jürgen
Alex66955 - Do 05.06.08 00:06
Wieder mal danke für die Antwort.
Also ich denke mal das die Inbox das Textfeld ist in der ich meine Eingabe mache. Da die Software ein Telnet Client ist kann man die Eingabe in der Outbox ausgeben lassen. Sprich Ich gebe ein Befehl ein und dieser wird dann in der Outbox nochmals dargestellt.
Habe heute mittag bevor du mir geschrieben hast ein bisschen rumprobiert. Und auf Anhieb scheint es zu funktionieren. Der Code sieht ganz ähnlich aus wie deiner. Bin mir jedoch nicht sicher ob er auch 100% korrekt ist.
C#-Quelltext
1: 2: 3: 4:
| private void button1_Click(object sender, EventArgs e) { Send("a" + _connectionSettings.NewLineSequence); } |
a ist der Buchstabe der gesendet werden soll. Habe mir dann schnell einen Telnet Server geholt um es zu testen. Ich bin mir jetzt nur nicht sicher ob er was anderes mitsendet. Also habe dann statt "a" "help" eingetragen und siehe da es erscheint die Hilfe im Ausgabe Fenster. Aber am Projekt an dem ich arbeite funktioniert es nur mit dem genauen Wert sprich den Ascii Code--> Binär Codec. Un ich vermute das er noch was mitsendet da es mittels Buttons nur teilweise funktioniert.
bin Ratlos
Alex
JüTho - Do 05.06.08 09:08
Hallo Alex,
Alex66955 hat folgendes geschrieben: |
... funktioniert es nur mit dem genauen Wert sprich den Ascii Code--> Binär Codec. Un ich vermute das er noch was mitsendet da es mittels Buttons nur teilweise funktioniert.
bin Ratlos |
Wenn genau ein vorgegebener String übertragen werden soll, stimmt der Code offensichtlich überein. Die Frage könnte sein, ob die eigentliche Methode Send() noch etwas anderes macht; dies könntest Du studieren.
Jürgen
Alex66955 - Do 05.06.08 15:15
JüTho hat folgendes geschrieben: |
Hallo Alex,
Alex66955 hat folgendes geschrieben: | ... funktioniert es nur mit dem genauen Wert sprich den Ascii Code--> Binär Codec. Un ich vermute das er noch was mitsendet da es mittels Buttons nur teilweise funktioniert.
bin Ratlos |
Wenn genau ein vorgegebener String übertragen werden soll, stimmt der Code offensichtlich überein. Die Frage könnte sein, ob die eigentliche Methode Send() noch etwas anderes macht; dies könntest Du studieren.
Jürgen |
Ja du hast Recht.
Ich weis zwar nicht wozu die Funktion dient aber in dem Programm kann man vor dem Verbinden festlegen "Buffered Input" Ja/Nein. Wenn ich diese Methode Deaktiviere und dann mit dem Server verbinde sendet er bei jeder Tastatur Eingabe sofort den dazu gehörigen Ascii Code ohne Bestätigen der Enter Taste. Dies funktioniert dann auch mit meinem Projekt jedoch ohne Buttons. Lass ich diese Option aktiviert dann kann ich im Eingabe Feld mein Befehl hinschreiben und erst beim Betätigen der Enter Taste werden die Buchstaben bzw. die Ascii folge gesendet.
Ich denke wenn ich den Aktuellen Button betätige wird er nach Methode zwei gesendet. Also muss wahrscheinlich noch etwas zu dem aktuellen Befehl hinzugefügt werden.
Hast du vielleicht eine Idee nach was ich im Code suchen muss? hat ja schon einmal geklappt :)
EDIT: Kann man statt "a" auch direkt den Hex Code angeben? Wenn ja dann könnte ich das auch noch ausprobieren.
lg Alex
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!