在我的应用程序中,我有一个包含5个不同listview控件的表单。我想在这里做两件事,我已经变得有点困惑......
1。当我点击Listview1的第3行(例如)时,我是否可以这样做,它为所有listview控件选择第3行?我在Listview1的_SelectedIndexChanged事件中设置了以下代码,它可以正常工作,但是,如果用户点击任何列表视图的第3行,我想这样做,它会将所有listview控件更改为第3行。
Private Sub lsvRegisters_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lsvRegisters.SelectedIndexChanged
Try
If Not lsvRegisters.SelectedItems.Count = 0 Then
Dim index As Integer = lsvRegisters.SelectedIndices(0)
If lsvRegister_Hardware.Items.Count > 0 Then lsvRegister_Hardware.Items(index).Selected = True
If lsvRegister_Software.Items.Count > 0 Then lsvRegister_Software.Items(index).Selected = True
If lsvRegister_Processes.Items.Count > 0 Then lsvRegister_Processes.Items(index).Selected = True
If lsvRegister_System.Items.Count > 0 Then lsvRegister_System.Items(index).Selected = True
If lsvRegister_Misc.Items.Count > 0 Then lsvRegister_Misc.Items(index).Selected = True
End If
Catch ex As Exception
CreateLog("Module: lsvRegisters_SelectedIndexChanged()" & vbNewLine & "Exception Error: " & ex.Message)
MsgBox("Exception Error: " & ex.Message, MsgBoxStyle.Critical, "Module: lsvRegisters_SelectedIndexChanged()")
End Try
End Sub
其次:
2. 我有没有办法让所有listview控件都将高亮显示条作为活动颜色?目前,它仅显示具有蓝色高亮条的聚焦列表视图控件,而其他颜色为暗灰色。我想(如果可能的话)所有listview控件都显示为蓝色,无论它是否有焦点。
任何帮助表示赞赏。 感谢
更新 listview控件的多个选择现在按要求工作,但是,一旦listview失去焦点,它只会保持第一个单元格突出显示如下所示:
我设置listview控件的代码来自数据集。我已经演示了第一个listview,但它们都是一样的。
Try
QueryString = "SELECT * FROM Registers WHERE StoreID = '" & _StoreCode & "'"
Dim ExQry As New MySqlCommand(QueryString, MySQLConn)
Dim da As New MySqlDataAdapter(ExQry)
da.Fill(dsStoreDetail, "StoreDetail")
Dim tempDT As DataTable = dsStoreDetail.Tables("StoreDetail")
If dsStoreDetail.Tables.Count > 0 And dsStoreDetail.Tables(0).Rows.Count > 0 Then
For x = 0 To (dsStoreDetail.Tables(0).Rows.Count - 1)
Dim lvi_RegistersItem As ListViewItem = lsvRegisters.Items.Add(tempDT.Rows(x)("Online").ToString)
lvi_RegistersItem.SubItems.Add(tempDT.Rows(x)("Lane").ToString)
lvi_RegistersItem.SubItems.Add(tempDT.Rows(x)("Host_Name").ToString)
lvi_RegistersItem.SubItems.Add(tempDT.Rows(x)("Reg_Type").ToString)
lvi_RegistersItem.SubItems.Add(tempDT.Rows(x)("Operator").ToString)
lvi_RegistersItem.SubItems.Add(tempDT.Rows(x)("Register_Locked").ToString)
Next
Else
lblEmptyString.Visible = True
End If
dsStoreDetail.Clear()
tempDT = Nothing
Catch ex As Exception
CreateLog("Module: LoadStoreData()" & vbNewLine & "Exception Error: " & ex.Message)
MsgBox("Exception Error: " & ex.Message, MsgBoxStyle.Critical, "Module: LoadStoreData()")
lblEmptyString.Visible = True
End Try
我已将所有listview控件设置为FullRowSelect = True,但仅限于设计时 - 不确定是否重要。
答案 0 :(得分:0)
是的,这是我对此的结论,它会以与你不同的名字制作,我很害怕。
要开始,请设置所有ListView以进行设置:
HideSelection = True
MultiSelect = false
这是我在所有ListViews中选择的Index已更改的内容。
Private Sub ListView2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView2.SelectedIndexChanged
If Not Working And ListView2.SelectedIndices.Count <> 0 Then
UpdateAllListViewes(ListView2.SelectedIndices)
End If
End Sub
Working是一个Private Boolean,用于避免对UpdateAllListViews函数的不必要调用。 UpdateAllListViews将所有列表框发送到UpdateSelectedIndex函数,并且索引将亮起。如您所见,在执行此操作时,Working Boolean将更新为True。这可以跳过,但如果出现问题,调试将变成一场噩梦。
Private Sub UpdateAllListViewes(ByVal Indexes As ListView.SelectedIndexCollection)
Working = True
UpdateSelectedIndex(ListView2, Indexes(0))
UpdateSelectedIndex(ListView3, Indexes(0))
UpdateSelectedIndex(ListView4, Indexes(0))
UpdateSelectedIndex(ListView5, Indexes(0))
Working = False
End Sub
最后如何更新所选索引:
Private Sub UpdateSelectedIndex(ByVal lv As ListView, ByVal Index As Integer)
For i As Integer = 0 To lv.Items.Count - 1
If i = Index Then
lv.Items(i).Selected = True
lv.Items(i).BackColor = Color.DodgerBlue
lv.Items(i).ForeColor = Color.White
Else
lv.Items(i).Selected = False
lv.Items(i).BackColor = Color.White
lv.Items(i).ForeColor = Color.Black
End If
Next
End Sub
DodgerBlue是ListView的SelectedIndex颜色。这应该解决问题1和2.
答案 1 :(得分:0)
我发现其他人的答案很有用,但尝试了另一种方式,并以这种简单方式创建了有用的方法:
Private Sub ListView2_ItemSelectionChanged(sender As Object, e As ListViewItemSelectionChangedEventArgs) Handles ListView2.ItemSelectionChanged
If Not (e.IsSelected) Then
ListView3.Items(e.ItemIndex).BackColor = Color.White
ListView4.Items(e.ItemIndex).BackColor = Color.White
ListView5.Items(e.ItemIndex).BackColor = Color.White
Else
ListView3.Items(e.ItemIndex).BackColor = Color.LightSkyBlue
ListView4.Items(e.ItemIndex).BackColor = Color.LightSkyBlue
ListView5.Items(e.ItemIndex).BackColor = Color.LightSkyBlue
End If
End Sub
每次你在listview上选择一个项目时,代码都会点亮同一索引中的其他listview项目。
例如Handles ListView2.ItemSelectionChanged
处理事件。
Not (e.IsSelected)
询问选择的类型。
然后你给出一个颜色ListView3.Items(e.ItemIndex).BackColor = Color.LightSkyBlue
函数.IsSelected
返回一个布尔值,表示“它被选中,或者未被选中”这样的动作,你只需要将旧颜色赋予反复选择的未选项......并为新选择添加新颜色。祝你好运!!