На данный момент я работаю над создателем тестов. Вот какова проблемма. На форме создателя тестов помещены:
1. Поле для вопроса 2. Поле для ответа №1 2. Поле для ответа №2 2. Поле для ответа №3 2. Поле для ответа №4 2. Поле для ответа №5
Возле каждого поля для ответа существует галочка, помечающая правильный ли это ответ. В нижней масти формы есть кнопка Next, переводящяя пользователя к написанию следующего вопроса и кнопка Back, возвращяющая пользователя к написанию предыдущего вопроса.
1. Как сделать чтобы при нажатии на кнопке Next программа переходила к созданию следующего вопроса, очищая все поля, в то же время не удаляя вопроса из памяти, чтобы при нажатии на кнопку Back пользователь переходил к предыдущему вопросу.
2. Как сделать чтобы при выборе элемента меню Save все введенные вопросы и ответы сохранялись в файле примерно в вот таком виде:
[Q1] Кто я такой?
[A1] Человек [Correct]
[A2] Инопланетянин
[A3] Млекопитающее
[A4] Машина
[A5] Не знаю
[Q2] Где я живу?
[A1] На Земле [Correct]
[A2] На Планете [Correct]
[A3] На Луне
[A4] Дома [Correct]
[A5] Не знаю
Пожалуйста, опубликуйте конкретный сниппет кода, так как я начинающий программист!
Не совсем понятен вопрос, т.к. мы ж незнаем как ты загружаешь вопросы, что делают кнопки назад/вперёд (понятно что это навигация по вопросам, но каким образом..) Могу лишь общие советы дать:
1. Как сделать чтобы при нажатии на кнопке Next программа переходила к созданию следующего вопроса, очищая все поля, в то же время не удаляя вопроса из памяти, чтобы при нажатии на кнопку Back пользователь переходил к предыдущему вопросу.
1) На все вопросы одна форма. Не в коем случае не делай на кнопках назад/вперед вызовы других форм. Это криво.
2) Вопросы хранятся в файле как я понял, вот и нужно подгружать из файла тот вопрос который нужен. Навигация будет всё через те же Назад/Вперёд, но по нажатию на них будет происходить чтение из файла нужный вопросов и замена старых вопросов на только-что считанные
2. Как сделать чтобы при выборе элемента меню Save все введенные вопросы и ответы сохранялись в файле примерно в вот таком виде:
Подобно кнопки (батона) у пункта меню есть событие "клик". При создании пункта ты указывал имя его. Вот и пиши в коде, например что-то вроде:
Private sub mnuSave_Click()
' здесь обработка записи в файл
End Sub
Пример записи в файл:
open "C:\1.txt" for output as #1
print #1, "Hello amigo!"
close #1
Но с работой с файлами нужно разобраться подробнее, там много нюансов. Ты спрашивай если чё не понятно, не стесняйся
Собственно программа должна работать таким образом:
1. Пользователь вводит один вопрос.
2. Пользователь нажимает кнопку Next, и вопрос который он только что набрал исчезает (все поля очищаются) но при этом если он нажмет на Back, он вернется к толко что написаному вопросу.
Я делал подобный тест. Различия в том что у моего нет кнопки Назад и возможен только один вариант ответа.
Для твоей задачи надо все вопросы и введенные ответы хранить в массиве (или массивах) и кнопками Назад/Вперед просто убавлять/привавлять переменную, а затем считывать данные из массива с индексом, равным этой переменной. (И еще: перед изменением значения переменой, текущие данные с формы надо сохранять с массив)
ZagZag, помогите пожалуйста с этими массивами. Как я уже говорил я не очень разбираюсь на данный момент в Visual Basic 6. Не могли бы вы опубликовать сниппет кода как вы это делали, пожалуйста...
Это новая терминология или... первый раз слышу. Мне понятнее "кусок кода"
На форму 2 текстовика и 2 кнопки
Option Explicit
Private lngIndex As Long
Private arData() As String
Private Sub Command1_Click()
If lngIndex = 1 Then Exit Sub
arData(lngIndex) = Text1.Text & ";" & Text2.Text
lngIndex = lngIndex - 1
LoadQuestion
End Sub
Private Sub Command2_Click()
If lngIndex = UBound(arData) Then Exit Sub
arData(lngIndex) = Text1.Text & ";" & Text2.Text
lngIndex = lngIndex + 1
LoadQuestion
End Sub
Private Sub Form_Load()
Command1.Caption = "Назад"
Command2.Caption = "Далее"
'Загрузка вопросов
ReDim arData(1 To 10)
arData(2) = "Какого цвета подсолнух?;Незнаю "
'Текущий вопрос = 1
lngIndex = 1
'Показать текущий вопрос
LoadQuestion
End Sub
Private Sub LoadQuestion()
Dim arTmp() As String
Caption = "Текущий вопрос = " & lngIndex
Text1.Text = ""
Text2.Text = ""
arTmp = Split(arData(lngIndex), ";"
If UBound(arTmp) = -1 Then Exit Sub ' В дальнейшем эту строку можно убрать, она предотвращает ошибку если arData(lngIndex) = ""
Text1.Text = arTmp(0)
Text2.Text = arTmp(1)
End Sub
ZagZag, большое спасибо за фрагмент кода. Он полностью работает. Будет время, разберусь в нем по подробнее, дабы понять его суть и научиться самому такое делать. По поводу термина СНИППЕТ прошу меня извинить, так как я использую его из английского языка.
Snippet is a programming term for a small region of re-usable source code or text. Ordinarily, these are formally-defined operative units to incorporate into larger programming modules. Snippets are often used to clarify the meaning of an otherwise "cluttered" function, or to minimize the use of repeated code that is common to other functions.
ZagZag, вот есть у меня набор вопросов и ответов. Как теперь сохранить все введенные данные в файл?
Private Sub Command1_Click()
Dim arTemp() As String
Dim lngIndex As Long, lngCount As Long
ReDim arTemp(1 To 2)
arTemp(1) = "Вопрос1;Ответ1;Ответ2;Ответ3;Ответ4;Ответ5"
arTemp(2) = "Вопрос2;Ответ1;Ответ2;Ответ3;Ответ4;Ответ5"
lngCount = UBound(arTemp)
If lngCount = -1 Then Exit Sub
Open App.Path & "\1.txt" For Output As #1
For lngIndex = 1 To lngCount
Print #1, "[Q" & lngIndex & "]"
Print #1, "[A1] " & Split(arTemp(lngIndex), ";"(1)
Print #1, "[A2] " & Split(arTemp(lngIndex), ";"(2)
Print #1, "[A3] " & Split(arTemp(lngIndex), ";"(3)
Print #1, "[A4] " & Split(arTemp(lngIndex), ";"(4)
Print #1, "[A5] " & Split(arTemp(lngIndex), ";"(5)
Next
Close #1
End Sub