我有一个显示消息项的列表视图。当父窗口打开时,它启动一个计时器,检查每个xx数量以查看是否已发送任何新消息。然后清除listview控件并每次重建它(不确定这是否是最好的方法)。
无论如何,如果在重建listview时鼠标位于listview项目的顶部,则listview行为空白。但是,将鼠标从项目上移开并重新放回项目会重绘得很好。
构建我的列表视图的代码如下:
Private Sub LoadMessages()
Dim QueryString As String
Try
lsvMail.Items.Clear()
QueryString = "SELECT * FROM Mail WHERE recipient = '" & Current_User.DisplayName & "' ORDER BY sent DESC"
Dim ExQry As New MySqlCommand(QueryString, MySQLConn)
Dim da As New MySqlDataAdapter(ExQry)
da.Fill(dsMessages, "Messages")
Dim tempDT As DataTable = dsMessages.Tables("Messages")
If dsMessages.Tables.Count > 0 And dsMessages.Tables(0).Rows.Count > 0 Then
For x = 0 To (dsMessages.Tables(0).Rows.Count - 1)
Dim lvi As New ListViewItem(tempDT.Rows(x)("is_replied").ToString)
lvi.SubItems.Add(tempDT.Rows(x)("sender").ToString)
If CBool(tempDT.Rows(x)("is_read")) = True Then
lvi.Font = RegularFont
Else
lvi.Font = BoldFont
End If
If CBool(tempDT.Rows(x)("is_followup")) = True Then
lvi.ForeColor = Color.Red
Else
lvi.ForeColor = Color.Black
End If
lvi.SubItems.Add(tempDT.Rows(x)("subject").ToString)
lvi.SubItems.Add(tempDT.Rows(x)("sent").ToString)
lvi.SubItems.Add(tempDT.Rows(x)("is_followup").ToString)
lvi.Name = tempDT.Rows(x)("id").ToString
lsvMail.Items.Add(lvi)
Next
End If
da = Nothing
tempDT = Nothing
dsMessages.Clear()
Catch ex As Exception
CreateLog("Module: LoadMailMessages()" & vbNewLine & "Exception Error: " & ex.Message)
MsgBox("Exception Error: " & ex.Message, MsgBoxStyle.Critical, "Module: LoadMailMessages()")
End Try
End Sub
如上所述,我有一个只调用LoadMessages()例程的计时器事件。 我想要一个活着的'输入到消息窗口,以便在窗口打开时新列表将显示在列表视图中。
感谢任何帮助 - 谢谢。
答案 0 :(得分:0)
尝试添加刷新:
Next
lvi.Refresh()
End If