Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net ListView滚动条和ListView.ItemChecked问题_.net_Vb.net_Listview_Events - Fatal编程技术网

VB.Net ListView滚动条和ListView.ItemChecked问题

VB.Net ListView滚动条和ListView.ItemChecked问题,.net,vb.net,listview,events,.net,Vb.net,Listview,Events,我有一个带有复选框的列表视图 我有几个问题似乎无法找到答案: 我似乎找不到任何属性来从左向右更改垂直滚动条?所有其他滚动条默认为右侧-但否 我想在触发ItemChecked事件时更新标签,以指示列表中已检查的项目数。我知道在填充列表时会触发ItemChecked事件,但我在应用程序的其他地方已将“DoEvents”变量设置为false,直到填充表单为止,并在触发类似事件时检查该变量的状态,如下所示: Private Sub SpecificUsers_ItemChecked(ByVal send

我有一个带有复选框的列表视图

我有几个问题似乎无法找到答案:

我似乎找不到任何属性来从左向右更改垂直滚动条?所有其他滚动条默认为右侧-但否

我想在触发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
问题是,listview位于选项卡中;在打开选项卡之前,列表似乎不会实际填充,因此DoEvents已经是真的,这意味着加载要花很长时间,因为它要执行上面的代码几千次

为什么listview在加载选项卡之前不填充


任何帮助都将不胜感激

首先,有这么多项目和一个数据库,DataGridView可能是更好的选择。对于错误一侧的滚动,您可能已将RightToLeft设置为True。如果Form属性为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设置为底部将强制加载列表;卸下句柄可防止检查事件触发。然后,只有当处理程序变得可见时,才将其挂起。您可能可以使用LV.VisibleChanged事件而不是TabControl事件-这只是我想到的第一件事。

LV中大致有多少项以及从何处填充?列表中大约有1500项。数据从数据库收集到一个数据集中,然后填充listview-全部在表单上加载事件-但只有当您第一次单击包含列表视图的选项卡时,数据才会实际填充,并且在该点为每个项目触发itemchecked事件否,当您向LV添加项目时,LV实际上已填充,设置断点并轮询项目计数;只是有些东西在第一次展示给用户之前是不会被绘制的。对于滚动条,将RightToLeft属性更改为FALSE。@RightToLeft属性不会更新;当我尝试改变它时,它只是保持“是”,这就是为什么我感到困惑。至于listview,我知道这一点,但不明白为什么或如何解决这个问题-因此问题就来了。如果表单也是RightToLeft,它可能不允许您更改它感谢您的回复。我的问题是,我有不同控件的其他选项卡,“DoEvents”是在加载所有内容后设置的。此解决方案意味着,如果用户从未加载包含listview的选项卡,则DoEvents永远不会设置为true,这意味着表单上的其他地方将出现问题。。。。实际上,我刚刚发布了第二个'DoEvents'变量。啊!这就是为什么我使用了一个不同的var名称的部分原因——这是为了服务于这种情况,而不是干扰其他东西