0

这是我的代码的示例输出,一个简单的聊天程序:

John says: Hello there!
Marsha says: Hi there!
John says:  First sentence.
Marsha says:  Second Sentence.

在文本框控件中,如上所示。但是,在用于存储对话的字典中,它将是这样的:

John says: First sentence.
Marsha says: Hi there!
John says: First sentence.
Marsha says: Second sentence.

我已经多次检查了我的代码......对于我的生活,我无法确切地说出我可能在哪里出错。

我已将问题追溯到 sendmsgbutton 方法,如下所示:

Private Sub sendMsgButton_Click(sender As System.Object, e As System.EventArgs) Handles sendMsgButton.Click
    If rtnConnectStatus(t) = False Then
        RaiseEvent statusCheck("Not Connected" + ControlChars.CrLf)
    Else
        Dim completeMsg As String
        msg.Name = nameText.Text
        msg.Message = msgTxt.Text
        completeMsg = msg.ToString
        msgRecorded.Text &= completeMsg
        RaiseEvent statusCheck("Message Sent." + ControlChars.CrLf)
        msgList.Add(msgListIndex, msg)
        'RaiseEvent debugBox(msg, msgListIndex)
        msgListIndex += 1
        RaiseEvent DataSend(completeMsg)
        msgTxt.Clear()
    End If
End Sub

这是 msgList 继承自的字典类:

Public Class MsgDictionary
     Inherits DictionaryBase

Public Property Item(ByVal key As Integer) As MsgObj
    Get
        Return CType(Dictionary(key), MsgObj)
    End Get
    Set(ByVal m As MsgObj)
        Dictionary(key) = m
    End Set
End Property

Public Sub Add(ByVal index As Integer, ByVal m As MsgObj)
    Dictionary.Add(index, m)
End Sub

End Class 

我的下一个测试是查看它是否只是消息值或者名称值是否也受此影响。

在此先感谢您提供任何帮助/建议。

编辑:为了澄清,每个字典条目的名称和字符串部分作为单个字典对象的属性。

4

1 回答 1

2

问题很清楚:当现实需要不同的事物时,您正在考虑使用字典执行一个一个关联。您的代码将“约翰说:”与“你好!”相关联。然后到“第一句话”。(您最终看到的值)。您要做的就是将“John 说:”与操作列表相关联。

如果你想依赖一个字典,你应该重新定义它,以便它可以将每个键关联到一个值列表,即:

Dim newDic = New Dictionary(Of String, List(Of String))

然后你可以用正确的信息填充它。例子:

Dim msgList As New List(Of String)
msgList.Add("Hello there!")
msgList.Add("First sentence.")
newDic.Add("John says:", msgList)

从逻辑上讲,您必须使此代码适应您真正需要的内容(即重新定义您的自定义字典和数据类型)。

于 2013-07-12T20:16:52.923 回答