0

我在这段代码中通过引用传递一个值

Private Sub login()

    Dim login As New login(lListClients, bConnected)

    login.ShowDialog()

    login.Dispose()

    If (bConnected = True) Then
        Console.WriteLine("Mokmeuh")
        Button3.Visible = True
        Button4.Visible = True
        Button7.Visible = True
   End If

End Sub

这是登录表单

Public Class login

    Private lListClients As List(Of Client)
    Private bConnected As Boolean

    Sub New(ByRef lListClients As List(Of Client), ByRef bConnected As Boolean)

        InitializeComponent()
        Me.lListClients = lListClients
        Me.bConnected = bConnected

    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim sID = TextBox1.Text, sPassword As String = TextBox2.Text

        For Each cClient As Client In lListClients
            If (Equals(cClient.getID, sID)) Then
                If (Equals(cClient.getPassword, sPassword)) Then
                    bConnected = True
                    MessageBox.Show("Vous êtes connecté vous pouvez continuez")
                    Me.Close()
                End If
            Else
                MessageBox.Show("Votre ID n'existe pas")
                TextBox1.Clear()
                TextBox2.Clear()
                TextBox1.Focus()
            End If
        Next

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        For Each m As Object In Me.Controls
            If TypeOf m Is TextBox Then
                CType(m, TextBox).Text = Nothing
            End If
        Next

        Me.Close()

    End Sub

    Private Sub login_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        TextBox1.Select()

    End Sub

End Class

每当我启动它时,表单 1 中的 bConnected 值始终为 false,但在登录表单中,它在销毁时为 true,所以我在这里真的很困惑我已经通过引用传递了值,当在 login.vb 中设置为 true 时,在 form1.vb 中也是如此,但条件If (bConnected = True)永远不会为真。

所以我需要一些帮助谢谢

顺便说一句:对不起我的英语不好

4

1 回答 1

1

虽然可以通过引用传递参数,但不能存储这些引用。如果要更改参数的值,则必须在被调用的方法中进行。否则,运行时无法确保变量仍然存在。

AList(Of T)已经是一个引用类型。所以通过引用传递这个参数通常是不合理的。该变量lListClients保存对实际列表对象的引用。当按值传递变量时,此引用被复制并传递给方法,从而导致对同一对象的另一个引用。您希望通过引用传递它的唯一原因是从被调用的方法中更改变量的值,即分配一个新列表。

您的问题的解决方案非常简单。创建公共属性:

Public Class login
    Public Property Connected As Boolean

    '...
    Connected = True
    '...
 End Class

并使用login对象检查值:

If login.Connected Then 

当然,在检查值之前,您不应该处置该对象。

于 2013-09-06T06:30:57.150 回答