我有一个带复选框的列表视图。
我有几个问题我似乎无法找到答案:
我似乎无法找到任何属性来从左到右更改垂直滚动条?所有其他滚动条默认为右侧 - 但没有?
我想在ItemChecked事件触发时更新标签,以指示列表中已检查的项目数。我知道当列表填充时会触发ItemChecked事件,但是我已经在我的应用程序的其他地方通过设置' DoEvents'变量为false,直到填充表单 - 并在触发此类事件时检查该变量的状态 - 如下所示:
Private Sub SpecificUsers_ItemChecked(ByVal sender as System.Object, ByVal e as System.Windows.Forms.ItemCheckedEventArgs) Handles lstSpecificUsers.ItemChecked
If DoEvents Then
' Set standard string
Dim s as String = "You have currently selected " & lstSpecificUsers.CheckedItems.Count & " users"
If lstSpecificUsers.CheckedItems.Count = 1 Then
' if only 1 selected, show user not users
s = s.SubString(0, s.Length - 1)
End If
lblSpecificUsers.Text = s
End If
End Sub
问题是,列表视图位于选项卡中;并且看起来列表在打开选项卡之前实际上并没有实际填充 - 因此DoEvents已经是真的,这意味着它需要一个永恒的加载,因为它执行上述代码几千次。
列表视图在加载选项卡之前没有填充的任何原因?
非常感谢任何帮助!
答案 0 :(得分:0)
首先,有了这么多项和数据库,DataGridView可能是更好的选择。对于错误的Scroll,您可能将RightToLeft设置为True。如果Form Property为True,我认为它不会让你在孩子身上改变它。
检查的问题是,许多控件仅在需要时进行绘制/更新。如果没有人能看到LV,那么它并没有完成所有包括勾选检查的绘画。要“修复”这个,首先强制它加载填充表单中的表单:
Private Sub Form1_Load(sender etc etc etc
Dim lvi As ListViewItem
For n As Integer = 0 To something
LV.Items.Add(lvi)
If foo Then
lvi.Checked = True ' I assume...
Next
' LV.RedrawItems doesnt work because there is no one looking
' force it to scroll
LV.TopItem = LV.Items(LV.Items.Count - 1)
End Sub
从事件处理程序中删除Handles子句:
Private lvDrawn As Boolean = False
Private Sub LV_ItemChecked(sender As Object, e As ItemCheckedEventArgs)
'Handles LV.ItemChecked REMOVED
If lvDrawn Then
' your code here
End If
End Sub
使用TabControl:
,在控件可见时将事情搞砸了Private Sub TabCtrl_Selected(sender As Object, e As TabControlEventArgs)
Handles TabControl1.Selected
If e.TabPage Is tabWithLV Then
If lvDrawn = False Then
' first time thru, so Add the handler
AddHandler LV.ItemChecked, AddressOf LV_ItemChecked
' we left it at the bottom, so reset
LV.TopItem = LV.Items(0)
' set the just_do_this_once flag
lvDrawn = True
End If
End If
End Sub
将TopItem设置为底部会强制加载列表;删除Handles会阻止Check事件触发。然后,只有当Handler变得可见时,才会将Handler挂起。您可以使用LV.VisibleChanged
事件而不是TabControl事件 - 这只是我遇到的第一件事。