我已经编程了大约两个月了。我在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
答案 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”等“块”定义的变量将具有该块的范围。