Announcement

Collapse
No announcement yet.

Ich kann aus einer funktion nichts an einem control ändern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ich kann aus einer funktion nichts an einem control ändern

    Hallo,
    Ich habe schon seit einer Woche ein problem mit vb.net.
    Gerade erst bin ich von vb6 auf vb.net umgestiegen!
    Mein Problem: ich kann in einem Sub nichts zu einer listview hinzufügen!
    Mein code:
    [highlight=vbnet]Imports System.Windows.Forms
    Imports System
    Imports System.Net.Sockets
    Imports System.Net
    Imports System.Text
    Public Class Form1 ' der ganze code ist in form1, ich habe kein modul genommen
    Dim cSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Dim tSocket As Socket
    Dim cCount As Integer = 0
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    startListen()
    ListView1.AutoResizeColumns(ColumnHeaderAutoResize Style.HeaderSize)
    End Sub
    Public Sub startListen()
    Dim IPeo As New IPEndPoint(IPAddress.Parse("0.0.0.0"), 7878)
    cSocket.Bind(IPeo)
    cSocket.Listen(100)
    Dim ConnectThread As New System.Threading.Thread(AddressOf AcceptConnections)
    ConnectThread.Start()
    End Sub
    Public Sub AcceptConnections()
    Do While True
    tSocket = cSocket.Accept
    cCount += 1
    Dim ReceiveThread As New System.Threading.Thread(AddressOf recvData)
    ReceiveThread.Start()
    Send(tSocket, "Authenticate//1234")
    Loop
    End Sub

    Public Sub recvData()
    On Error Resume Next
    Dim rSocket As Socket = tSocket
    Dim recvBytes(5024) As Byte ' Übertrieben O_O
    Dim recvBytesLen As Integer = 0
    Dim Packet() As Byte = Nothing
    Dim strPacket As String = Nothing

    Do While True
    recvBytesLen = rSocket.Receive(recvBytes, 1024, SocketFlags.None)
    If rSocket.Connected = True And recvBytesLen > 0 Then
    ReDim Preserve Packet(recvBytesLen)
    Array.Copy(recvBytes, 0, Packet, 0, recvBytesLen)
    strPacket = Encoding.Default.GetString(Packet)
    AnalyzePacket(rSocket, strPacket) ' hier wird die sub in der der fehler ist aufgerufen
    Else
    Exit Do
    End If
    Loop
    End Sub
    Private Sub AnalyzePacket(ByVal sSocket As Socket, ByVal Message As String)
    Dim command() As String = Message.Split("//")
    Select Case command(0)
    'das ruft er nicht auf, der addet nix -.-
    Case "INFO"
    Dim info() As String = Split(Message, "//")
    Dim SplitInfo() As String = Split(info(1), ";;")
    ListView1.Items(0).Text = "warar" ' hier entsteht der fehler ! Alle sachen hiernach werden nicht mehr ausgeführt und auch zu listview wird nichts hinzugefügt
    Case Else
    MsgBox("Nicht gültig..!")
    End Select
    MsgBox(command(0) & "|" & Len(command(0)))
    End Sub
    End Class[/highlight]
    Das Problem liegt bei ListView1.Items(0).Text = "warar" ;
    Das wird nicht aufgerufen und auch alle messageboxen oder anderes die nach items(0).text kommen werden nicht mehr ausgeführt, das heißt das programm bricht an dieser stelle ab, sozusagen wie mit exit sub!
    SanCo
    Zuletzt editiert von SanCo; 17.10.2009, 12:41.

  • #2
    Hallo und willkommen,

    der Code ist leider nicht lesbar. Bitte formatieren den so dass das Helfen - das beginnt beim Lesen der Frage - so einfach wie möglich ist. Das sollte in deinem Interesse sein.

    Somit habe ich den Code auch nicht gelesen. Wenn du aber schreibst dass du erst vor einer Woche zu VB.net gekommen bist dann empfehler ich dir Visual Basic 2008 zu lesen.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Nunja, was kann ich da noch besser formulieren?
      Mein Problem liegt das ich in meiner sub die auch ausgeführt wird nichts mehr zu einer listviev hinzufügen kann, auch nicht zu einer textbox. An der stelle wo ich versuche etwas an einer sache von der form zu ändern (textbox1.text zB.) bricht das programm einfach die sub ab und addet nichts zu meiner listview1!
      Noch etwas zu dem programm: es ist ein server mit sockets. Es soll mal ein chatprogramm sein wo man die clints die in der liste sind anschreiben kann!
      SanCo

      PS:
      Ein buch hab ich mir auch schon gekauft; ich lese schon fleißig dadrin, ich habe allerdings eine antwort noch nicht geunden
      Zuletzt editiert von SanCo; 17.10.2009, 10:35.

      Comment


      • #4
        nunja, was kann ich da noch besser formulieren?
        -> formatieren
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          -> formatieren
          Achso, danke

          Ja, ich versuch mein bestes!

          //So habs jetzt etwas besser formatiert!
          Zuletzt editiert von SanCo; 17.10.2009, 11:09.

          Comment


          • #6
            Originally posted by SanCo View Post
            //So habs jetzt etwas besser formatiert!
            Tut mir leid, das ist nur Einbildung. Zur Formatierung von Code gehören vor allem Einrückungen, und die sind bei dir nicht vorhanden. Dadurch ist der Code immer noch nicht lesbar.

            Dein Hauptfehler ist, dass du den ganzen Textbereich als Zitat gekennzeichnet hast. Er sollte aber, wie in der "obersten" Diskussion Wichtig: Formatierung von VB.Net-Code von gfoidl beschrieben, als [highlight=vbnet]...dein Text...[/highlight ] markiert werden oder wenigstens mit dem #-Button als allgemeiner Code.

            Die Textfärbung kann/soll/muss entfallen. Stattdessen gibt es die Kommentare von VB.NET.

            Jürgen

            Comment


            • #7
              Originally posted by Jürgen Thomas View Post
              Tut mir leid, das ist nur Einbildung. Zur Formatierung von Code gehören vor allem Einrückungen, und die sind bei dir nicht vorhanden. Dadurch ist der Code immer noch nicht lesbar.

              Dein Hauptfehler ist, dass du den ganzen Textbereich als Zitat gekennzeichnet hast. Er sollte aber, wie in der "obersten" Diskussion Wichtig: Formatierung von VB.Net-Code von gfoidl beschrieben, als [highlight=vbnet]...dein Text...[/highlight ] markiert werden oder wenigstens mit dem #-Button als allgemeiner Code.

              Die Textfärbung kann/soll/muss entfallen. Stattdessen gibt es die Kommentare von VB.NET.

              Jürgen
              OK, mach ich!
              Aber: woher soll ein neuling das denn wissen, ich glaube es gibt wenige die sich erstmal alle posts durchlesen. Es müsste auch ein butten , wie es ihn auch für quote gibt, für vb.net code geben!
              MfG SanCo

              PS:
              Hat eig. keiner eine idee, ich habe jetzt schon 100 mal alles geändert allerdings noch keine hilfe bekommen

              Comment


              • #8
                Ich bin jetzt schon ein schritt weitergekommen und jetzt kommt endlich eine fehlermeldung:
                Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement ListView1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
                Wie kann ich diesen Fehler beheben?
                MfG SanCo

                Edit:
                ich habs: CheckForIllegalCrossThreadCalls = False
                vielen dank
                Zuletzt editiert von SanCo; 17.10.2009, 12:52.

                Comment


                • #9
                  Such im Forum mal nach Invoke. Mit Invokes ist es möglich auch auf Steuerelemente zuzugreifen die einem andren Thread gehören.
                  Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                  Comment


                  • #10
                    Originally posted by SanCo View Post
                    Aber: woher soll ein neuling das denn wissen, ich glaube es gibt wenige die sich erstmal alle posts durchlesen.
                    Das ist nicht nötig. Es ist die oberste Diskussion mit dem Hinweis "Wichtig"; es ist wohl nicht zuviel verlangt, wenigstens diese eine durchzulesen.

                    Es müsste auch ein butten , wie es ihn auch für quote gibt, für vb.net code geben!
                    Das würde mir auch gefallen, aber gfoidl hat schon vor langer Zeit darauf hingewiesen, dass das nicht so einfach ist. Aber unter Windows gibt es diese netten kleinen Hinweisfenster (Tooltip genannt): Wenn man mit der Maus über ein Feld geht und kurz wartet, bekommt man einen Hinweis. Auf dem von mir schon genannten #-Button steht "Code einfügen [CODE]", so wie du den Zitat-Button verwendet hast.

                    Jürgen

                    Comment


                    • #11
                      Es müsste auch ein butten , wie es ihn auch für quote gibt, für vb.net code geben!
                      Wenn du möchtest das sowas endlich umgesetzt wird, bitte den Admin in diesem Thread nerven. Vielleicht passiert ja wirklich irgendwann mal was


                      Edit:
                      ich habs: CheckForIllegalCrossThreadCalls = False
                      vielen dank
                      Das ist keine Lösung. Sondern du sagst dem Framework das es weggucken soll und selber hoffst das nichts schlimmes passiert. Du machst aber weiterhin unsynchronisierte CrossthreadCalls die inherent problembelastet sind und nur meistens funktionieren aber eben nicht immer.

                      Wenn du unbedingt aus dem Thread die GUI ändern willst solltest du das über die Control.Invoke Methode machen.

                      Hintergrund siehe hier . Wie man Invoke benutzt siehst du im Beispielcode insbesondere in der SetText Methode. Zwar anhand einer Textbox aber bei einer Listview(oder jedem anderen Winforms Control) geht das natürlich equivalent.

                      Comment

                      Working...
                      X