簡體   English   中英

如何從私有子集中的變量中獲取值或使不丟失值的公共變量

[英]How to get values from variable in a private sub or make public variable that does not lose value

我打算在不久的將來創建一個有關測驗的項目,現在我正在練習一些代碼,這是我的問題。 我在private sub Button_Click有一個變量。 所有變量都可以正常工作,但是由於它是一個私有變量,因此我無法在其他Private sub Button3_Click訪問它,因此我決定將其設為公共變量。

然后,當我運行它時,它僅顯示數據庫中的最后一項,並且返回我的原始代碼,並且顯示了數據庫中的所有數據,並且當我檢查自動將數據插入到表中時,我通過單選按鈕創建了一個事件。 因此,我需要變量標簽,但是在我的事件中無法訪問它。

注意:當數據庫包含除panel1,button2和button3之外的數據時,我所有的控件都是以編程方式添加的。

這是我的原始代碼:

'This is for adding controls like labels and radiobutton dependeng in a number of data from database
 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      Try
        Dim conn As OleDbConnection = GetDBConnection()
        Dim cmd As New OleDbCommand("SELECT * FROM tblEcobags ORDER BY N ASC", conn)
        cmd.Prepare()
        Dim dataReader As OleDbDataReader = cmd.ExecuteReader()
        Do While dataReader.Read
            Dim Cpanel As New Panel()
            Dim count As Integer = Panel1.Controls.OfType(Of Panel)().ToList().Count
            count = Panel1.Controls.OfType(Of Panel)().ToList().Count
            Cpanel.Location = New Point(10, (25 * count) * 2.2)
            Cpanel.Size = New Size(537, 51)
            Cpanel.Name = "Cpanel" & (count + 1)
            Cpanel.BackColor = Color.White
            Panel1.Controls.Add(Cpanel)


            Dim label As New Label()
            count = Cpanel.Controls.OfType(Of Label)().ToList().Count
            label.Location = New Point(10, (25 * count))
            label.AutoSize = True
            label.Name = "label_" & (count + 1)
            label.Text = dataReader.Item("N") & "."
            label.Font = New Font(label.Font.FontFamily, 10, FontStyle.Bold)
            Cpanel.Controls.Add(label)

            Dim lblQ As New Label()
            count = Cpanel.Controls.OfType(Of TextBox)().ToList().Count
            lblQ.Location = New System.Drawing.Point(40, 25 * count)
            lblQ.AutoSize = True
            lblQ.Name = "lblQ" & (count + 1)
            lblQ.Text = dataReader.Item("ProductDes")
            lblQ.Font = New Font(lblQ.Font.FontFamily, 11)
            Cpanel.Controls.Add(lblQ)

            Dim rbChoiceA As New RadioButton()
            count = Cpanel.Controls.OfType(Of RadioButton)().ToList().Count
            rbChoiceA.Location = New Point(40, 25)
            rbChoiceA.AutoSize = True
            rbChoiceA.Name = "rb" & (count + 1)
            rbChoiceA.Text = dataReader.Item("Each")
            rbChoiceA.Font = New Font(rbChoiceA.Font.FontFamily, 10)
            AddHandler rbChoiceA.CheckedChanged, AddressOf rbChoiceA_Checked
            Cpanel.Controls.Add(rbChoiceA)

            Dim rbChoiceB As New RadioButton()
            count = Cpanel.Controls.OfType(Of RadioButton)().ToList().Count
            rbChoiceB.Location = New Point(200, 25)
            rbChoiceB.AutoSize = True
            rbChoiceB.Name = "rb" & (count + 1)
            rbChoiceB.Text = dataReader.Item("PerDozen")
            rbChoiceB.Font = New Font(rbChoiceB.Font.FontFamily, 10)
            Cpanel.Controls.Add(rbChoiceB)


        Loop
        Button2.Enabled = False
        conn.Dispose()
        conn.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub
'this is an event that i can't access my "label" that I add programmatically
Private Sub rbChoiceA_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
 Try
        Dim conn As OleDbConnection = GetDBConnection()
        Dim cmd As New OleDbCommand("INSERT INTO tblSubmit(N)VALUES('" & must be label.text & "') ", conn)
        cmd.ExecuteNonQuery()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

您可以在數據庫或文本文件或SQL中或在程序中將Variable設置為static,例如string myvar = "static";

對不起,我的描述不好,但我現在知道了。 我曾經從任何函數外部聲明它,但是我犯的錯誤是用括號聲明變量,我不知道兩者之間的區別,因此我需要知道沒有括號的函數。 這是我修改過的聲明,因此任何函數都必須可以訪問

Dim label as Label()

我的button2_Click事件中的更新代碼出錯

label = new label() ' I got error here

但是,當我刪除聲明中的括號時,它就起作用了。

Dim label as label

所以我想問一下兩者之間有什么區別,為什么我所使用的沒有比下面的有效。 預先感謝您的配合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM