2015-10-01 3 views
0

Я программировал около двух месяцев. У меня проблема с сохранением тусклого значения после оператора if. У меня есть цикл, который, если не содержит до 100 (это процент), перестает вводить в radgrid. Моя работа для этого - сохранить значение в текстовом поле, но это вряд ли кажется эффективным. Итак, как сохранить это значение в памяти, а не в текстовом поле. Вот код.Сохранение Dim value after if заявление

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

Просто объявить (Dim) переменный перед вашим циклом –

+0

Awesome- мата спасибо. Положите его в начале попытки, и это сработало. Я знал, что это должно быть просто: на полдня начинали задумываться, как добавить переменные цикла, которые оказались + =. Я верю свой здравый смысл. – BAS

ответ

1

У вас возникли проблемы с Scope. Мне нравится думать о Scope как о наборе ящиков, как о тех, кто гнездится в русских куклах. Вы можете хранить меньше ящиков внутри других ящиков. Новый Scope создается и помещается INSIDE в предыдущую область каждый раз, когда код вводит Sub, функцию, цикл и несколько других случаев. Когда вы объявляете переменную, она помещается в текущую область. Ваш код сможет получить доступ к переменным из любой области, в которой он находится внутри, но не может видеть никаких переменных, которые объявлены внутри меньших областей внутри. Ваш код «может видеть, но не в».

Проблема, с которой вы сталкиваетесь, заключается в том, что вы объявляете свою переменную внутри области «Если», и когда она попадает в «End If», область видимости исчезает, принимая вашу переменную с ней. Решение состоит в том, чтобы объявить вашу переменную более высокой, чтобы она зависала в течение всего времени, в котором она вам нужна. Попробуйте объявить свою переменную ПЕРЕД ИТОЙ «И» и установите ее значение внутри.

BTW, это также почему элементы управления формой работают для хранения ваших данных. Они существуют в очень большой степени - времени жизни экземпляра формы.

Вы можете прочитать больше о том, как сфера работает в VB.NET здесь https://msdn.microsoft.com/en-us/library/1t0wsc67.aspx

+0

Awesome- спасибо помощнику. Положите его в начале попытки, и это сработало. Я знал, что это должно быть просто: на полдня начинали задумываться, как добавить переменные цикла, которые оказались + =. Я верю свой здравый смысл. – BAS

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 

я определен внутри функции, и, следовательно, будет иметь его значение сброса каждый раз, когда вызывается функция.

счетчик определяется как уровень класса или модуля, поэтому он сохраняет свое значение между вызовами функций, и его значение остается постоянным до тех пор, пока форма не будет закрыта.

См: https://msdn.microsoft.com/en-us/library/ms973875.aspx

Edit: Другие люди более корректны в том, что переменная, определенная с «блок», как если для, в то время, и т.д. будут иметь объем этого блока.

См: https://msdn.microsoft.com/en-us/library/1t0wsc67.aspx

+0

Другие ребята пост работал- спасибо за отзывы, хотя. – BAS