【问题标题】:VB.NET WPF NullReference ExceptionVB.NET WPF NullReferenceException
【发布时间】:2011-05-12 18:38:45
【问题描述】:

我有一个带有父节点和两个子节点的 TreeView。每个节点都包含一个存储在 TreeViewItem 中的复选框。我希望在用户检查父节点时将两个子节点复选框设置为 IsChecked=true,并且我希望在用户取消选中父节点时将两个子节点复选框设置为 IsChecked=false。

我有一个 for 循环,其中子节点复选框存储在列表中。父节点复选框选中/取消选中事件应该遍历子节点复选框列表,但我在访问列表时遇到问题。由于某种原因,该列表在父节点检查/取消检查事件中等于“无”。谁能解释我应该如何访问该列表?

这是我的代码:

Public Class Question

Dim childCheckbox As CheckBox
Dim childCheckboxes() As CheckBox

Public Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

    Dim parentCheckbox = New CheckBox
    Dim parentNode = New TreeViewItem

    parentCheckbox.Uid = "All Sites"

    AddHandler parentCheckbox.Checked, AddressOf chkbox_AllChecked
    AddHandler parentCheckbox.Unchecked, AddressOf chkbox_AllUnchecked

    parentCheckbox.Content = "All Sites"
    parentNode.Header = parentCheckbox

    For Each osite In sites

                Dim childNode = New TreeViewItem
                Dim childCheckbox = New CheckBox

                AddHandler childCheckbox.Checked, AddressOf chkbox_Checked
                AddHandler childCheckbox.Unchecked, AddressOf chkbox_Unchecked

                childCheckbox.Uid = osite.SiteName.ToString

                childCheckbox.Content = osite.SiteName.ToString
                childNode.Header = childCheckbox
                parentNode.Items.Add(childNode)

                'Add all childCheckbox to an array for use by parentChildbox methods to check/uncheck all
                childCheckboxes(i) = childCheckbox

                i += 1

            Next
            TreeView1.Items.Add(parentNode)


    End Sub

Private Sub chkbox_AllChecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
    Dim chk = DirectCast(sender, CheckBox)

            'MessageBox.Show(chk.Uid.ToString)


            'This part doesn't work. 
            For Each child In childCheckboxes
                child.IsChecked = True
            Next

    End Sub

Private Sub chkbox_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs)
  Dim chk = DirectCast(sender, CheckBox)

            'MessageBox.Show("Check!")
            MessageBox.Show(chk.Uid.ToString)

End Sub

Private Sub chkbox_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs)
   Dim chk = DirectCast(sender, CheckBox)

          'MessageBox.Show("Uncheck!")
           MessageBox.Show(chk.Uid.ToString)

End Sub

End Class

感谢您的帮助!

【问题讨论】:

    标签: wpf vb.net


    【解决方案1】:

    你能不能换行试试:

    Dim childCheckboxes() As CheckBox
    

    收件人:

    Dim childCheckboxes as new list(of CheckBox)
    

    【讨论】:

    • 感谢解决了 NullReference 异常,但是当我尝试在 chkbox_AllChecked 方法中使用 childCheckboxes 列表时它仍然是空的...知道为什么它在那里是空的吗?
    • 不要按索引分配列表元素,而是使用 .Add() 方法。
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2010-09-30
    相关资源
    最近更新 更多