【问题标题】:Passing a list's items by Reference within Vb.net application在 Vb.net 应用程序中通过引用传递列表项
【发布时间】:2014-12-26 15:02:02
【问题描述】:

我想更改布尔列表的内容,所以我通过引用将它传递给一个方法,如下所示:

 Dim liste As New List(Of Boolean)
    liste.Add(lbl1.Visible)
    liste.Add(lbl2.Visible)
    RaiseEvent rgProcS9Selection(liste, SelectedIndex)

在方法中:

    Private Sub rgProcS9SelectionMethod(ByRef ComposantsVisibility As List(Of Boolean), ByVal SelectedIndex As Integer)
            ComposantsVisibility.Clear()
            If SelectedIndex = 0 Then
                For index As Integer = 0 To 1
                    ComposantsVisibility.Add(False)
                Next
            Else
                For index As Integer = 0 To 11
                    ComposantsVisibility.Add(True)
                Next
            End IF
End Sub

列表的内容值已更改,但标签 (lbl1, lbl2) 的可见性仍然相同。

  1. 那么,我需要知道为什么项目没有通过引用传递?
  2. 如何修复我的代码

【问题讨论】:

  • 因为列表内容布尔不是标签。您存储的 Bool 值 恰好 源自某些标签,这一事实不会创建与标签的链接。您的列表包含布尔值而不是标签对象
  • 为什么你甚至期望标签改变它们的可见性只是因为你将列表中的一些bools 从false 更改为true?这就像您希望您的汽车在您启动割草机时启动一样,因为两者都使用燃料运行。

标签: .net vb.net winforms collections reference


【解决方案1】:

您需要two 列表。一个用于可见性,一个用于标签

Dim liste As New List(Of Boolean)
Dim listeL As New List(Of Label)
liste.Add(lbl1.Visible)
liste.Add(lbl2.Visible)
listeL.Add(lbl1)
listeL.Add(lbl2)
RaiseEvent rgProcS9Selection(liste, listeL, SelectedIndex)

最后是rgProcS9SelectionMethod:

Private Sub rgProcS9SelectionMethod(ByVal ComposantsVisibility As List(Of Boolean), ByVal ComposantsLabels As List(Of Label), ByVal SelectedIndex As Integer)
    ...
    ...
    For i = 0 To ComposantsLabels.Count - 1
        ComposantsLabels(i).Visible = ComposantsVisibility(i)
    Next
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-15
    • 2018-06-29
    • 2013-01-14
    • 2016-01-30
    • 2014-12-29
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多