Forum: PC-Programmierung C# Frage von C++Builder-Umsteiger


von Axel Stab (Gast)


Lesenswert?

Hallo Leute,

ich möchte eine Art Hyperterminal mit C# realisieren, also ein
Terminalfenster für die serielle Kommunikation. Das wird ein Teil einer
größeren Anwendung. Die Schnittstellen-Komponente läuft schon ganz gut,
und als C# Neuling mit BCB-Vorkenntnissen finde ich mich generell auch
ganz gut zurecht, bzw. bin sogar sehr begeistert. Aber vielleicht hat
ja jemand aus der Embedded-Welt schon was fertiges. Ich mühe mich
gerade mit Eingabe-Events von der TextBox-Komponente ab, vielleicht
kann mir jemand auf die Sprünge helfen.

Später möchte ich auch noch eine OLE-Schnittstelle zur Office-Welt
einbauen, hat das schonmal jemand gemacht? Muss ja nicht in C# sein,
zum Glück lässt die "babylonische Sprachverwirrung" unter (bzw.
"über") .net ja merklich nach.

Viele Grüße

Axel

von Somnatic (Gast)


Lesenswert?

was willst du denn genau wissen ?

Wichtig sind:
KeyDown (Taste gedrückt)
KeyUp (Tase wieder losgelassen)
KeyPress (beides zusammen)

TextChanged (Der Text hat sich verändert - wie auch immer ;) )

Alternativ kannst du das Ganze auch subclassen, aber dazu wird dann
wieder die Win32API benötigt.
Die Frage die sich stellt, ist die: Was genau willst du machen ;)

Bzgl. Office Welt: Mit dem RichtTextControl stehen dir
Formatierungsmöglichkeiten für Text offen .. Das ist schonmal etwas ..
Aber auch hier die Frage: Einsatzzweck ?

von Axel Stab - info@axelstab.de (Gast)


Lesenswert?

Hallo somnaticuser,

1)Text in ein Fenster eintippen, bei Return über die serielle
rausjagen.
2)Empfangene Zeichen in einem anderen Fenster darstellen, neue Zeile,
wenn line feed kam.
3)Vorgefertigte Kommandos aus anderen Textboxen per Klick rausjagen.
4) DDE oder OLE Schnittstelle, um "live" aus Word/Excel Strings
auszutauschen

Hab mich jetzt so einigermaßen durchgewurschtelt. Ich dachte es gäbe
sowas wie AppendLine, sollte man meinen. Hab lange gebraucht um
festzustellen, dass man \r\n und Append Text braucht. Mit dem on
enter Event hat irgendwie nicht so geklappt, hab mir erstmal mit
textBox.Lines.Length beholfen, um eine neue Zeile zu erkennen.

Bleibt noch die Sache mit dem DDE/OLE o-.ä. -Server. Ich hab sowas mal
bei einem PIC-Debugger gesehen, da brauchte man nur eine Zeile in eine
Excel-Tabelle einzufügen, und schon hatte man "lebendige" Daten, echt
cool. Ich hab da bisher immer mit csv Dateien rumgepfuscht, das geht ja
nicht so weiter. Einfach mal eine simple Tabelle/Kurve in Excel per DDE
verknüpfen, das sollte doch eigentlich nicht so schwer sein.

Vielen Dank für sachdienlich Hinweise

Axel







private void textBox1_TextChanged ( object sender, EventArgs e ){
 int l;
 string outbuf;
 l =
 outbuf = " ";
 if ( l >=  2 ){
  outbuf = textBox1.Lines[ l - 2 ];
  textBox2.Text = Convert.ToString ( l ) + " " +  outbuf;//nur z.
test
 }
}

von Somnatic (Gast)


Lesenswert?

ad 1)
* Eine TextBox auf die Form ziehen
* Im Property Fenster auf Events umschalten -> Dort KeyPress auswählen
* Den folgenden Code eingeben:
private void textBox1_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs e)
{
  if (e.KeyChar == (char)13)
  {
    // Hier der Code zum rausjagen
    textBox1.Text = "";
  }
}

ad 2)
Angenommen du hast die Zeichen in einer Variable namens "buff" vom
Typ string gespeichert.

Du kannst dann ganz einfach:

string buff;
string[] allLines = buff.Split('\n');

alternativ kannst du anstatt dem Zeichen \n auch ein anderes nehmen,
musst halt schauen was du geliefert bekommst.
allLines enthält dann alle Zeilen "untereinander"

ad 3)
Du könntest doch beispielsweise eine ComboBox nehmen. Daneben noch
einen Button platzieren und fertig.
Beispiel:
Die ComboBox kannst du über die Item Property (Eigenschaft) gleich mal
füttern (schon während der Design - Zeit).
Als Event Handler für den button reicht dann ein einfaches:
JageRaus(comboBox1.SelectedText);
Wenn du erklärende Worte in der ComboBox willst, kannst du auch zwei
Arrays (oder besser ArrayLists) anlegen. Eines in der ComboBox (Items)
mit den Worten. Eines mit den Befehlen irgendwo im Programm. Du nimmst
dann den ausgewählten Index der ComboBox, aber den Inhalt aus dem Array
(mit demselben Index).

Kann dir ja eine kurze BeispielApp schicken wenn du willst.

ad 4)
Ich kann dir mal nachschauen, aber bist du sicher dass das nicht über
VBA oder ähnliches gelöst wurde.

von Axel Stab - info@axelstab.de (Gast)


Lesenswert?

aha! aha! Danke für die Tipps! BeispielApp ist eigentlich nicht nötig,
die Sache mit der Office-Schnittstelle wäre wichtiger. Kann sein, dass
das über VBA gelöst wurde, nach der Installation schien halt irgendwo
ein DDE-Server zu laufen. Habe auch mal gesehen, wie Leute so ein
Programm mit dem BCB realisiert haben. DDE geht unter C# nicht mehr,
aber irgendwie wird es doch sowas named pipes o.ä. geben. Ein
Excel/Word Makro mitt Buttons wäre auch akzeptabel.

von Somnatic (Gast)


Lesenswert?

hmm . .also bzgl. C# + Excel könnte dir evtl. das da weiterhelfen:

http://www.codeproject.com/csharp/csharp_excel.asp

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.