Hi,
ich brauch mal Hilfe bei einem TCP IP Chat den ich in Visual Basic geschrieben hab (nicht wirklich selbst, war ein Youtube Tutorial und ich habs nachgemacht)
Also, ich möchte, dass meine zwei RichTextBoxen und meine TextBox transparent sind, bzw. ich durch sie hindurch auf meinen Desktop gucken kann, also dass ich meinen Desktophintergrund sehe.
Die Schrift soll aber nicht transparent werden, wie es der Fall ist, wenn ich in den Form Optionen Opacity runterdrehe.
Kann mir da einer Helfen? Und wenn ja, wie ich dass dann in meinen Code reinbaue?
Ich schreib euch unten noch den Code rein und ein zwei Lösungsansätze, die ich im Internet gefunden hab, aber bei mir nicht geklappt haben.
Ich sag schon mal Danke im voraus
Code:
Imports System.Net.Sockets, System.Threading, System.IO
Public Class Form1
Dim Listener As New TcpListener(8000)
Dim Client As TcpClient
Dim Message As String
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
Listener.Stop()
Application.Exit()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
Listener.Start()
Dim listthread As New Thread(New ThreadStart(AddressOf listening))
listthread.Start()
End Sub
Private Sub listening()
Listener.Start()
End Sub
Private Sub btnSendMsg_Click(sender As Object, e As EventArgs) Handles btnSendMsg.Click
If rtbTextToSend.Text = "" Then
MsgBox("Geben Sie einen Text ein!", MsgBoxStyle.Exclamation, "Zu sendender Text fehlt")
Else
Try
Client = New TcpClient(tbip.Text, 8000)
Dim writer As New StreamWriter(Client.GetStream())
writer.Write(rtbTextToSend.Text)
rtbReceivedText.AppendText(Format(Now, "[dd.MM | hh:mm:ss]]") & " Du: " & rtbTextToSend.Text & vbCrLf)
rtbTextToSend.Clear()
writer.Flush()
Catch ex As Exception
MsgBox("Fehler")
End Try
End If
End Sub
Private Sub tmrListener_Tick(sender As Object, e As EventArgs) Handles tmrListener.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
rtbReceivedText.AppendText(Format(Now, "[dd.MM | hh:mm:ss]]") & " Er/Sie: " & Message & vbCrLf)
End If
End Sub
Private Sub rtbTextToSend_KeyDown(sender As Object, e As KeyEventArgs) Handles rtbTextToSend.KeyDown
If e.KeyCode = Keys.Enter Then
btnSendMsg.PerformClick()
End If
End Sub
End Class
Lösungsansätze
Code:
Class TransparentControl
Inherits Control
Public Sub New()
MyBase.SetStyle(ControlStyles.UserPaint, True)
MyBase.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
MyBase.SetStyle(ControlStyles.SupportsTransparentBackColor, True)
MyBase.SetStyle(ControlStyles.ResizeRedraw, True)
MyBase.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
End Sub
Private Sub InitializeComponent()
Me.SuspendLayout()
Me.ResumeLayout(False)
End Sub
End Class
Class TransparentRichTextBox
Inherits RichTextBox
Public Sub New()
MyBase.ScrollBars = RichTextBoxScrollBars.None
End Sub
Protected Overloads Overrides ReadOnly Property CreateParams() As CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
cp.ExStyle = cp.ExStyle = cp.ExStyle Or &H2O
Return cp
End Get
End Property
Protected Overloads Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs)
End Sub
Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
MyBase.OnTextChanged(e)
MyBase.Parent.Refresh()
End Sub
End Class
Code:
Public Sub Hallo()
Me.BackColor = Color.Transparent
Me.TransparencyKey = Color.Transparent
Me.BackColor = Color.Transparent
End Sub