Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Вызов процедуры по button click


Автор: ololok 11.2.2012, 20:06
Всем доброе время суток!

Пишу программу-тест на VB. 
Все находится и должно происходить на одной форме. Каждый следующий вопрос вызывается процедурой. 
По идеи, следующий вопрос должен выдаваться при нажатии Button1. В этом и проблема, не знаю как сделать это.

Код

Public Class Form4
    Private Sub q1()
        Label1.Text = "Вопрос1"
        RadioButton1.Text = "ответ1"
        RadioButton2.Text = "о2"
        RadioButton3.Text = "о3"
        RadioButton4.Text = "о4"
    End Sub
    Private Sub q2()
        Label1.Text = "Вопрос2"
        RadioButton1.Text = "о1"
        RadioButton2.Text = "о2"
        RadioButton3.Text = "о3"
        RadioButton4.Text = "о4"
    End Sub
    Private Sub q3()
        Label1.Text = "Вопрос3"
        RadioButton1.Text = "о1"
        RadioButton2.Text = "о2"
        RadioButton3.Text = "о3"
        RadioButton4.Text = "о4"
    End Sub

    Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Call q1()
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call q2() //вызывается только процедура q2, как дальше ума не преложу
    End Sub
End Class


Пользовался гуглом, ответа не получил.

Заранее спасибо.

P.S. В VB новичок

Автор: Данкинг 11.2.2012, 20:33
А зачем процедуры? Куда логичнее хранить вопросы-ответы в массиве (о БД речи не идёт, как я понимаю), ввести глобальную переменную, и при каждом клике эту переменную увеличивать, подставляя соответствующие варианты вопросов из массива.

Автор: ololok 12.2.2012, 08:20
Данкинг, можно по подробнее?

Автор: Данкинг 12.2.2012, 10:27
Что подробнее? Переменные объявляются оператором DIM. smile Задаёшь массив: первый элемент - вопрос, следующие три - ответы, следующий - правильный ответ. Вводишь переменную-счётчик. При каждом клике увеличиваешь её на единицу и выводишь соответствующие ответы.

Автор: ololok 12.2.2012, 10:38
Данкинг
Код

Public Class Form4
    Dim question(26), ansver(3, 26) As String
    question(0) = "Вопрос1"
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       'здесь будет увеличение и все такое
    End Sub
End Class


 question(0) = "Вопрос1" подчеркивает волнистой линией и сообщает: "Требуется объявление"

В чем проблема понять не могу

Заранее спасибо

Автор: Данкинг 12.2.2012, 11:12
Разве индексы элементов не с единицы начинаются? Хотя могу ошибаться.

Автор: ololok 12.2.2012, 12:02
Данкинг, они начинаются с нуля. Но я пробовал и с единицы, все равно, такая же ошибка

Автор: ololok 13.2.2012, 18:18
Всем спасибо

Я сам разобрался

Создал 2 массива: 1 - просто вопросы, 2 - трех мерный массив, содержащий возможные ответы.

Значения элементам присваиваю в процедуре (так не появляется ошибка)

Администрацию прошу не сносить тему, а хранить для потомков. 

Автор: Akina 13.2.2012, 19:50
Перемещено в VB .NET.

Автор: diadiavova 13.2.2012, 20:42
ololok, Вместо массива лучше использовать очередь, а для вопроса создай отдельный класс, в котором для вопроса и вариантов ответа будет по свойству. Загони экземпляры этого класса в очередь и выбирай по клику
Код

Public Class Form4
    Dim questions As New Queue(Of Question) 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If questions.Count = 0 Then
            Me.Label1.Text = "Тест завершен"
            Exit Sub
        End If
        With questions.Dequeue
            Me.Label1.Text = .Text
            Me.RadioButton1.Text = .Variant1
            Me.RadioButton2.Text = .Variant2
            Me.RadioButton3.Text = .Variant3
        End With
    End Sub



    Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
        questions.Enqueue(New Question With {.Text = "question1", .Variant1 = "q1v1", .Variant2 = "q1v2", .Variant3 = "q1v3"})
        questions.Enqueue(New Question With {.Text = "question2", .Variant1 = "q2v1", .Variant2 = "q2v2", .Variant3 = "q2v3"})
        questions.Enqueue(New Question With {.Text = "question3", .Variant1 = "q3v1", .Variant2 = "q3v2", .Variant3 = "q3v3"})
        questions.Enqueue(New Question With {.Text = "question4", .Variant1 = "q4v1", .Variant2 = "q4v2", .Variant3 = "q4v3"})
    End Sub
End Class

Public Class Question
    Property Text As String
    Property Variant1 As String
    Property Variant2 As String
    Property Variant3 As String
End Class

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)