djkennethcool
Goto Top

VB LAN Chat - Einkommende Nachricht ganz nach oben statt ganz nach unten

VB LAN Chat - Einkommende Nachricht ganz nach oben statt ganz nach unten

Moin Leute,
Ich binn gerade dabei einen LAN Chat zu Programmieren.
Und nun habe ich das Problehm das wenn ich eine Nachricht an einen Partner sende das die nachricht (in einer RichTextBox) ganz unten in der Box kommt.
z.B.
ganz alt
alt
neu
neuer

ich will es aber so haben:

neuer
neu
alt
ganz alt

geht das ?

Hier mein Code:


Imports System.Net.Sockets
Imports System.Threading
Imports System.IO


Public Class Form1
Dim Listener As New TcpListener(55555)
Dim client As TcpClient
Dim message As String = ""
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Listener.Stop()
End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim listthread As New Thread(New ThreadStart(AddressOf Listening))
listthread.Start()
End Sub

Private Sub listening()
Listener.Start()
End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Textbox abfragen ob leer
If RichTextBox2.Text = "" Then
MsgBox("Bitte erst eine Nachricht eintragen!", vbExclamation, "Achtung!")
Exit Sub
End If

client = New TcpClient(TextBox1.Text, 55555)
Dim writer As New StreamWriter(client.GetStream())

writer.Write(RichTextBox2.Text)
writer.Flush()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Listener.Pending = True Then
message = ""
client = Listener.AcceptTcpClient()

Dim reader As New StreamReader(client.GetStream())
While reader.Peek > -1
message = message + Convert.ToChar(reader.Read()).ToString
End While

RichTextBox1.Text = RichTextBox1.Text & message & vbCrLf

Else : End If


End Sub
End Class


und dann würde ich gerne wenn ich eine Nachricht schreibe und die Sende das ich zum Senden nicht auf einen Button klicken muss sondern nur Enter (Eingabe) drücken muss und das die nachricht nach dem senden aus der Box wo ich die eigegeben habe gelöscht wird.


mfg DJK
Kommentar vom Moderator Biber am Jun 19, 2010 um 15:47:12 Uhr
Beitrag war gepostet im Bereich "C und C++".
?!???
Ganz falscher Film - da könnte ja auch jemand einen Wulff als Bundespräsident vorschlagen...
Verschoben nach VB und #.NET-Krams.

Content-Key: 145170

Url: https://administrator.de/contentid/145170

Printed on: April 16, 2024 at 12:04 o'clock

Member: bastla
bastla Jun 18, 2010 at 20:28:45 (UTC)
Goto Top
Hallo DJKennethcool!

Die geänderte Reihenfolge sollte sich so machen lassen:
RichTextBox1.Text = message & vbCrLf & RichTextBox1.Text
Das Reagieren auf die Enter-Taste könnte so gehen:
Private Sub RichTextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
    If InStr(RichTextBox2.Text, vbLf) > 0 Then
        client = New TcpClient(TextBox1.Text, 55555)
        Dim writer As New StreamWriter(client.GetStream())
        writer.Write(RichTextBox2.Text)
        writer.Flush()
        
        RichTextBox2.Text = ""  
    End If
End Sub
[Edit] Code für "RichTextBox2" angepasst [/Edit]

Grüße
bastla

P.S.: Das wäre wohl der bessere Bereich für Deine Frage gewesen ...
Member: DJKennethcool
DJKennethcool Jun 18, 2010 at 20:53:15 (UTC)
Goto Top
Gut das mit ganz nach oben geht ! nur der andere Quelltext wo muss der hin :D ich finde gerade keinen anhaltspunkt face-sad
das mit den Enter geht irgentwie net face-sad

Mein Aktueller Code:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Textbox abfragen ob leer
If RichTextBox2.Text = "" Then
MsgBox("Bitte erst eine Nachricht eintragen!", vbExclamation, "Achtung!")
Exit Sub
End If

If InStr(RichTextBox1.Text, vbLf) > 0 Then
client = New TcpClient(TextBox1.Text, 55555)
Dim writer As New StreamWriter(client.GetStream())
writer.Write(RichTextBox2.Text)
writer.Flush()

RichTextBox1.Text = ""
End If
End Sub
Member: bastla
bastla Jun 18, 2010 at 22:06:32 (UTC)
Goto Top
Hallo DJKennethcool!
das mit den Enter geht irgentwie net face-sad
Das Sub war so gemeint, wie es gepostet ist - als Code für das Ereignis "RichTextBox1_TextChanged" - daher entweder einfach einfügen, oder per Doppelklick auf die RichTextBox1 das entsprechende Sub erzeugen und die Zeilen 2 bis 9 dort einfügen ...

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 19, 2010 at 10:32:23 (UTC)
Goto Top
JO muss ich den alten Code Löschen ?
Oder kann ich den lassen ?
Und noch eine kleine info:
RTB1 = Einkommende nachrichten
RTB2 = Nachrichtschreiben

ich hatte erst nur die RTB1 für den einkommenden Text geschrieben.

mfg DJK
Member: bastla
bastla Jun 19, 2010 at 11:28:14 (UTC)
Goto Top
Hallo DJKennethcoll!

Ja, sorry; der Code sollte für die "Eingabebox", daher also die RTB2, sein - habe ich oben angepasst ...
Den alten Code für den Button kannst Du auch stehen lassen; den für die RTB1 solltest Du entfernen.

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 19, 2010 at 14:57:36 (UTC)
Goto Top
Geht irgent wie nicht face-sad
Kannst du mir vill. einen Vollen Quelltext geben also so wo alles drin ist (So wie ich oben ein habe ;) )
Oder ein wie ich den Button Programmiere das der button auf enter hört ? (Der Button darf aber nur auf Enter hören wenn das fenster aktiv ist !)
Member: bastla
bastla Jun 19, 2010 at 15:53:08 (UTC)
Goto Top
Hallo DJKennethcool!

Ich hatte eigentlich angenommen, dass Du mit Enter in der RTB2 die Eingabe abschicken wolltest - wozu dann noch den Button?

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 19, 2010 at 17:42:37 (UTC)
Goto Top
Aso muss ich den löschen ?
Ich wollte den noch da lassen für die die gerne Buttons drücken ;)
Member: bastla
bastla Jun 19, 2010 at 18:24:02 (UTC)
Goto Top
Aso muss ich den löschen ?
Nein, wieso denn?

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 19, 2010 at 20:11:58 (UTC)
Goto Top
So es geht !
Dann habe ich noch 2 Sachen.
Nr.1: Kann ich es machen das nach dem Absenden der Inhalt (das geschriebene) der RTB2 gelöscht wird ?

Nr.2: Und kann ich noch eine Kleine Info machen wo man erkennt ob die nachricht angekommen ist ?

mfg DJK

PS: Sorry das ich soviel arbeit mache face-sad
Member: bastla
bastla Jun 19, 2010 at 20:25:02 (UTC)
Goto Top
Hallo DJKennethcool!
Nr.1: Kann ich es machen das nach dem Absenden der Inhalt (das geschriebene) der RTB2 gelöscht wird ?
Sollte eigentlich schon passieren - siehe Zeile
RichTextBox2.Text = ""
Nr.2: Und kann ich noch eine Kleine Info machen wo man erkennt ob die nachricht angekommen ist ?
Leider weiß ich nicht, wie Du feststellen kannst, ob die Nachricht angekommen ist ... face-sad
PS: Sorry das ich soviel arbeit mache face-sad
Never mind - ich muss ja schließlich nicht antworten (mach' es aber zumeist gerne face-smile) ...

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 19, 2010 at 21:36:44 (UTC)
Goto Top
Also Nr.1 geht bis jetzt leider nicht face-sad
Und Nr.2 wollte ich eigentlich das wenn ich eine nachricht sende und die am anderen PC ankommt das untern z.B. ein Labe ist wo dan steht nachricht angekommen

mfg DJK
Member: bastla
bastla Jun 19, 2010 at 21:46:37 (UTC)
Goto Top
Hallo DJK!

Zu Nr. 1: Wird die RTB2 gar nicht gelöscht, oder nur nicht, wenn über den Button gesendet wurde?

Zu Nr. 2: Wie gesagt weiß ich leider nicht, wie das Ankommen signalisiert wird bzw geprüft werden kann ...

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 20, 2010 at 10:55:53 (UTC)
Goto Top
Zu Nr.1 Also das geht überhaupt nicht egal ob ich enter drücke oder den button nutze

Zu Nr.2 Schade face-sad

(Nr.3 leider kann ich nur im netzwerk hin und her senden wenn ich den router von dem Switch nehme wieso ?
und ich kann auch nicht an W-Lan gerate schreiben ! Weist du woran das liegt ?)

mfg DJK
Member: bastla
bastla Jun 20, 2010 at 12:17:50 (UTC)
Goto Top
Hallo DJK!

Leider kann ich Nr. 1 nicht nachvollziehen - bei meinem Test funktioniert das Löschen (allerdings habe ich das Senden nur durch eine "MsgBox" simuliert) - eigentlich könnte ich mir daher nur vorstellen, dass wegen eines Fehlers (zB beim Senden) die Zeile
RichTextBox2.Text = ""
bei Dir gar nicht mehr erreicht wird - geh' das vielleicht einmal schrittweise (mit F8) durch ...
Bei Nr.3 muss ich leider passen face-sad ...

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 20, 2010 at 14:47:38 (UTC)
Goto Top
Zu Nr.1 Warum eine MsgBox ? (MsgBox sind wie die von Windows [Fehler meldung] )
Meinst du nich TextBox ?

Nr.3 Naja OK ich werde mal nachforschen ;)
Member: bastla
bastla Jun 20, 2010 at 15:00:22 (UTC)
Goto Top
Hallo DJK!
Zu Nr.1 Warum eine MsgBox ? (MsgBox sind wie die von Windows [Fehler meldung] )
Da ich nur die Teilaspekte "Reagieren auf die Enter-Taste" und "Löschen der RTB2" testen wollte (und daher auf meiner "Form1" nur die "RichTextBox2" existiert), sieht mein Code so aus:
    Private Sub RichTextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox2.TextChanged
        If InStr(RichTextBox2.Text, vbLf) > 0 Then
            MsgBox("Gesendet!")  

            RichTextBox2.Text = ""  
        End If
    End Sub
Die "MsgBox" ist eigentlich auch nicht nötig, aber eine einfache Möglichkeit zu signalisieren, dass der "Then"-Zweig ausgeführt wird - also eine reine Test-/Debugging-Maßnahme, weshalb auch eine "TextBox" nicht sinnvoll wäre (da würde ich noch eher ein "Debug.Print" ins Direktfenster verwenden) ...

Du kannst übrigens mit dem Code oben auch testen - dazu müsstest Du nur vorübergehend Dein bisheriges "Private Sub RichTextBox2_TextChanged(..." umbenennen. Mit der Zeile
MsgBox("Gesendet:" & vbCrLf & RichTextBox2.Text)
als Ersatz der Zeile 3 wird's noch etwas informativer ...

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 25, 2010 at 10:03:03 (UTC)
Goto Top
Geht leider nicht face-sad
Wenn ich es so mache wie du es stehen hast meldet sich: If Listener.Pending = True Then

mfg DJK
Member: bastla
bastla Jun 25, 2010 at 10:29:36 (UTC)
Goto Top
Hallo DJK!

Kann ich leider jetzt nicht nachvollziehen - und was meinst Du mit "meldet sich"?

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 25, 2010 at 11:50:23 (UTC)
Goto Top
Also ich kann den Code einfügen und das programm starten nur nach 10Sek. beendet sich das programm und VB sagt das liegt an den code: If Listener.Pending = True Then

mfg DJK
Member: bastla
bastla Jun 25, 2010 at 14:54:56 (UTC)
Goto Top
Hallo DJK!

Woran es in diesem Fall liegt, kann ich Dir leider auch nicht sagen ...

Grüße
bastla
Member: DJKennethcool
DJKennethcool Jun 26, 2010 at 17:32:27 (UTC)
Goto Top
Achso Ok ich werde mal ein bissel ausprobieren ;)

mfg DJK