if语句后保持Dim值

时间:2015-10-01 13:00:52

标签: vb.net

我已经编程了大约两个月了。我在if语句后保持昏暗值时遇到问题。我有一个循环,如果不加起来100(它是一个百分比)停止进入一个radgrid。我的工作是将值存储在文本框中,但这似乎不太有效。那么我如何将这个值存储在内存中而不是文本框中。这是代码。

    Dim p As Integer = RadGridView1.CurrentRow.Index - 1    
        Try    
            For int1 = p To 0 Step -1
                If RadGridView1.Rows(Row).Cells(1).IsCurrent AndAlso Me.RadGridView1.IsInEditMode AndAlso RadGridView1.ActiveEditor.Value <> 0 Then   
                    If RadGridView1.Rows(int1).Cells(1).Value <> Nothing Then Exit For
                    Dim total As String = 0
                    total += RadGridView1.Rows(int1).Cells("PC").Value

                    Dim int2 As Integer
                    int2 += RadGridView1.Rows(int1 - 1).Cells("PC").Value

`this  is my problem here i want this dim value after the if statement    
    Dim percenttotal = int2 + RadGridView1.Rows(Row - 1).Cells("PC").Value

'my workaround is to keep the value in a textbox
    TextBox3.Text = int2 + RadGridView1.Rows(Row - 1).Cells("PC").Value

                End If
            Next

            If RadGridView1.Rows(Row).Cells(1).IsCurrent AndAlso Me.RadGridView1.IsInEditMode AndAlso RadGridView1.ActiveEditor.Value <> 0 Then

' i want this code to be the above dim value not to come from a textbox             
      If TextBox3.Text <> 100 Then
                    MsgBox("Your % above does not equal 100", MsgBoxStyle.Critical, "Value Error")
                    e.Cancel = True
                End If
            End If

2 个答案:

答案 0 :(得分:1)

您遇到Scope问题。我喜欢将Scope视为一组盒子,就像嵌套俄罗斯娃娃一样。您可以将较小的盒子放在其他盒子里面。每次代码进入Sub,function,loop和其他一些情况时,都会创建一个新的Scope并将其放在上一个范围内。声明变量时,它将放在当前作用域中。您的代码将能够从其当前内部的任何范围访问变量,但是它无法看到在其中较小范围内声明的任何变量。你的代码“可以看出来,但不能看到”。

您遇到的问题是您在“If”范围内声明了您的变量,当它触及范围消失的“End If”时,将变量带入其中。解决方案是在更高的范围内声明您的变量,以便它在您需要的整个时间内保持不变。尝试在“If”之前声明变量并在其中设置它的值。

顺便说一句,这也是表单控件用于存储数据的原因。它们存在于非常高的范围内,即表单实例的生命周期。

您可以在此处阅读有关范围如何在VB.NET中工作的更多信息https://msdn.microsoft.com/en-us/library/1t0wsc67.aspx

答案 1 :(得分:0)

您可能遇到了变量范围问题。

请考虑以下代码:

Public Class Form1


    Dim counter As Integer

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim i As Integer
    i += 1
    counter += 1

    MsgBox("i: was clicked " & i & " times!" & vbCrLf & "counter: was clicked " & counter & " times!")
End Sub
End Class

i在函数中定义,因此每次调用函数时都会重置其值。

计数器被定义为类或模块级别,因此它在函数调用之间保留其值,并且其值在表单关闭之前是持久的。

请参阅:https://msdn.microsoft.com/en-us/library/ms973875.aspx

编辑:其他人更正确的是,使用像“If”,“For”,“While”等“块”定义的变量将具有该块的范围。

请参阅:https://msdn.microsoft.com/en-us/library/1t0wsc67.aspx