Autor Beitrag
Alex66955
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 04.06.08 13:48 
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 user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Mi 04.06.2008 um 14:07
Einloggen, um Attachments anzusehen!
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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


ausblenden 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mi 04.06.08 19:18 
Hallo Alex,

user profile iconAlex66955 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):
ausblenden 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:
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private void SendInput() 
{
  //  einfach kopieren
  Send(txtInput.Text + _connectionSettings.NewLineSequence);
  txtInput.Text=String.Empty;
}

Der bisherige EventHandler verkürzt sich entsprechend:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 05.06.08 09:08 
Hallo Alex,
user profile iconAlex66955 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 Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Do 05.06.08 15:15 
user profile iconJüTho hat folgendes geschrieben:
Hallo Alex,
user profile iconAlex66955 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