Несколько экземпляров формы

#vb.net

#vb.net

Вопрос:

В основном мой сервер отправляет клиенту строку, которая затем разбивается на стороне клиента с использованием Dim data() As String = receivedString.Split("|"c) примера строки было бы MESSAGE|TestUser|This Is The Message то, что я хочу сделать, когда эта строка будет получена, — это сначала проверить, отправлял ли этот пользователь сообщение этому клиенту ранее (уже должно появиться окно с текущим «чатом»), отправил ли пользователь сообщение, прежде чем добавить текст, чтобы указать расширенное текстовое поле. если пользователь не отправил сообщение до создания нового экземпляра «окна чата», а затем все будущие сообщения с сервера отправляются в этот экземпляр окна.

спасибо, Хоулахан

 Dim data() As String = message.Split("|"c)
    Select Case data(0)
        Case "MESSAGE"
            Try
                If conversations.ContainsKey(data(1)) Then
                    Dim convoWindow As ChatWindow
                    convoWindow = conversations.Item(data(1))
                    convoWindow.RichTextBox1.AppendText(data(2))
                Else
                    conversations.Add(data(1), New ChatWindow())
                    Dim convoWindow As ChatWindow
                    convoWindow = conversations.Item(data(1))
                    convoWindow.Show()
                    convoWindow.RichTextBox1.AppendText(data(2))
                End If
  

Ответ №1:

Вы могли бы добиться этого множеством способов. Первое, что приходит мне в голову, — это создать объект словаря, который связывает ваш TestUser как ключ в ассоциации с Form , представляющим диалог. например

 conversations.Add(testUser, new FormConversation(...))
  

При получении сообщения вы должны ссылаться на словарь, который отслеживает все ваши текущие разговоры.

Если не существует ключа с именем пользователя, создайте новую форму и добавьте пользователя в словарь вместе со ссылкой на форму. Если один существует, который может быть извлечен из словаря на основе имени пользователя, просто выведите его на передний план и передайте ему сообщение.

Комментарии:

1. Я обновил свой первый пост, пытаясь сделать то, что вы объяснили, я не уверен, что я на правильном пути, но это создает окно чата, но это окно просто зависает, не совсем уверен, почему спасибо

2. Я не уверен, что код, который я опубликовал, выполняется без каких-либо ошибок во время выполнения, но новый экземпляр формы недоступен, действует так, как будто он разбился

3. @Houlahan Согласно вашему приведенному выше коду, вы не создаете экземпляр своей формы. Вы просто объявляете это. например Dim convoWindow As New ChatWindow()

4. но разве я не создаю экземпляр своей формы, когда я создаю ее в словаре? conversations.Add(data(1), New ChatWindow()) а затем просто объявить его как элемент в словаре (новый экземпляр окна чата)?

5. я нашел проблему! это не выдало ошибку, но я мог видеть это в трассировке стека, в котором richtextbox, в который я пытался добавить данные, выдавал ошибку перекрестного потока 🙂 спасибо за вашу помощь!