Forum: PC-Programmierung Vc# textBox


von Dieter (Gast)


Lesenswert?

Hallo,

in meiner Anwendung habe ich zwei TextBoxen und einen Button.

Gebe ich in die textBox1 x Zeichen ein, betätige dann den Button,
erscheint in der textBox2 der Text von textBox1.

Nun möchte ich aber dass das Zeichen welches ich in die textbox1
eingebe unmittelbar nach Tastendruck (Tastatur) in der textBox2
erscheint.

Wie kann ich also erkennen, ob in der textBox1 ein Zeichen eingegeben
wurde und dies dann unmittelbar in der textBox2 ausgeben.


Danke für Eure Hilfe
Dieter

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

indem du das entsprechende Event (TextChanged) abfängst und
entsprechend behandelst.

Matthias

von Thomas L. (tom)


Lesenswert?

Wenn du Microsofts Visual Studio verwendest, dann kannst du dort wo die
Properties (Eigenschaften) sind umschalten, sodass du Events auswählen
kannst. Dort findest du dann auch einen der sich TextChanged oder
ähnlich nennt - dort dann doppelklicken und du landest in einer fix
fertig vorgegebenen Funktionsdeklaration - da kommt dann dein Code rein
:)

von Dieter (Gast)


Lesenswert?

Danke,

hat soweit funktioniert.

Möchte an dieser Stelle noch fragen welche Bücher ihr über C# empfehlen
könnt.

Habe gute Kenntnisse in C, aber nur wenig in objektorientierter
Programmierung und garkeine mit VC#.

Danke und Gruß

von Thomas L. (tom)


Lesenswert?

Ich empfehle meist Go To C#
(http://www.amazon.de/exec/obidos/ASIN/3827319323/qid%3D1145094976/302-2332517-7804053).

Am sinnvolsten ist jedoch dennoch: Probieren, probieren, probieren -
nur so lernt man es ...
Wenn man mal was konkretes braucht, kann man immer noch jederzeit im
Inet nachschlagen.

von Dieter (Gast)


Lesenswert?

Habe nun noch eine Problem (Frage)


Kurze Einführung:

Mein PDA mit WM5.0 kommuniziert per Bluetooth mit meinem Laptop über
Terminalprogramme.

Zuerst konnte ich die Zeichen in einer textBox nur über das betätigen
eines Buttons "oCom.Write(textBox1.Text);" senden.
Durch den Event Handler klappt das Senden nun Zeichenweise und ohne
betätigen des "send" Buttons. Nochmal danke für die Hilfe.

Das Empfangen von Zeichen klappt zwar auch, muß aber immer den
"receive" Button betätigen um diese vermutlich aus dem Empfangsbuffer
in die textBox zu bekommen.

private void button4_Click(object sender, EventArgs e)//receiveButton
{
            textBox1.Text = oCom.ReadExisting();

}

Habe auch hier versucht mit dem Event Handler zu arbeiten.
--> kein Erfolg

Code aus Form1.Designer.cs

this.serialPort1.PortName = "COM12";     // benutzter Comport
this.serialPort1.DataReceived += new
          System.IO.Ports.SerialDataReceivedEventHandler(this.test);


Code aus Form1.cs

private void test(object sender, SerialDataReceivedEventArgs e)
{
            textBox1.Text = oCom.ReadExisting();
}

Wie gesagt, das klappt so nicht.

Ich frage mich nun ob ich die falsche Klassen Methode verwende ?


Von meinem Verständnis her, müsste doch wenn (ein) Zeichen (8Bit)
empfangen wurden, ein Flag gesetzt werden.
Gibt es sowas wie ein Event Handler für dieses Flag ?
Wenn ja, welches Flag muß ich abfragen ?

Vermutlich ist der Lösungsweg in C# anderst. Aber so würde ich auf
Mikrocontroller Basis vorgehen.

Ich brauche somit wieder etwas Unterstützung.

Danke und Gruß

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

auf den ersten Blick seh ich keinen Fehler. Wird deine Eventhandler
überhaupt aufgerufen?

Matthias

von Thomas L. (tom)


Lesenswert?

@dieter: wie Matthias schon gesagt hat, setze mal einen Breakpoint in
deinen EventHandler "textBox1.Text = oCom.ReadExisting();" und schau
ob er dort rein springt.
Darauf achten, dass in Visual Studio auf Debug gestellt ist (oben wo du
Debug/Release auswählen kannst).

von arc (Gast)


Lesenswert?

Vielleicht auch nur oCom.Open() vergessen oder
oCom.ReceivedBytesThreshold != 1?

von Wolfram (Gast)


Lesenswert?

nein , er greift aus einem anderen Thread auf ein Object zu, dies klappt
unter Net2.0 nicht mehr.

von arc (Gast)


Lesenswert?

"Klappt" schon, da Control.CheckForIllegalCrossThreadCalls nur vom
Debugger gesetzt wird und nicht wenn das Programm normal gestartet
wird.
Zum anderen wurde bislang keine InvalidOperationException erwähnt.
Falls das aber der Fall sein sollte, entweder die Daten im einem
thread-sicheren Objekt zwischenspeichern (einfacher string reicht),
oder eine Variante mit Invoke, BackgroundWorker etc. z.b.

delegate void AppendTextDelegate(string s);

textBox1.Invoke(new AppendTextDelegate(textBox1.AppendText),
oCom.ReadExisting());

von Dieter (Gast)


Lesenswert?

Hallo,

und danke für die Schützenhilfe.

Habe das Ding mittlerweile -für mich zufriedenstellend- am Laufen.

Nun möchte ich eine Menüführung einbinden.
Also ich ziehe ein "MainMenu (heist so bei WM5.0)" aus der Toolbox in
die Form und kann dann einen Menue Baum realisieren.

Möcht, dass sich beim Anwählen eines bestimmten Menüpunktes ein neues
Fenster (Form) öffnet, welches wiederum mit Elementen aus der Toolbox
befüllt werden kann.

Das wird der nächste Punkt sein, den ich in Angriff nehme. Habe bereits
was versucht; war aber nicht erfolgreich.

Ein Buch habe ich mir auch bestellt "Charles Petzold Windows
programmieren mit C#". So heist das glaube ich. War teuer genug und
hoffe das taugt was. Wenn nicht läßt Ebay grüßen.

Sollte ich nicht weiterkommen und kurz vor'm Verzweifeln sein, werd
ich mich melden.

Gruß
Dieter

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.