以下是我的代码的示例输出,一个简单的聊天程序:
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
我的下一个测试是查看它是否仅 消息值,或者名称值是否也受此影响。
提前感谢您提供有关此方面的任何帮助/建议。
编辑:只是为了澄清,每个字典条目的名称和字符串部分作为单个字典对象的属性。
答案 0 :(得分:2)
问题很明显:当现实需要一个不同的东西时,你正在考虑一个字典逐个执行关联。您的代码将“John说:”与“Hello there!”相关联。然后到“第一句话”。 (你最终看到的值)。你要做的就是将“约翰说:”与一系列行动联系起来。
如果你想依赖字典,你应该重新定义它,以便它可以将每个键与一个值列表相关联,即:
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)
逻辑上,您必须根据实际需要调整此代码(即重新定义自定义词典和数据类型)。