¿Qué tienes hecho hasta el momento.?
Si no tienes ni por donde empezar:
Lo ideal es que esté diseñado tipo test...
Una pregunta y 3-4-5 respuestas posibles donde elgir (un número fijo facilita la cuestión a un novato).
Así debería empezar por crear una estructura así:
private type PreguntaRespuestas
Pregunta as string
RespuestaA as string
RespuestaB as string
RespuestaC as string
RespuestaD as string
Solucion as byte
end type
' y las declaraciones de variables (algunas son redundantes pero ayudan a un novato a entender mejor...
Private NumPreguntas As Integer ' Numero total de preguntas que tiene el fichero.
Private NumPregunta As Integer ' n de pregunta.
Private Nivel As Byte ' Nivel actual
Private Pregunta As PreguntaRespuestas ' Datos d ela pregunta
Private Respuesta As Integer ' respuesta que da el usuario
Private Aciertos As Integer ' Cantidad de aciertos hasta el momento
Private Ruta As String ' la ruta donde s elocaliza el fichero
Private Canal As Integer ' Canal de lectura/escritura del fichero
Luego se trata de leer el fichero, una entrada por cada pregunta...
Con "line input" se leen líneas enteras, así que el fichero debe mantener la estructura de más arriba, además, debería haber una cabecera en el fichero que indique cuantas preguntas contiene el fichero...
El código para leer la siguiente pregunta podría ser tal que así:
(primero hay que abrirlo, desde la carga del proyecto y en adelante, desde el botón de cambiar la ruta)
Private Sub LeerSiguientePregunta()
Dim sol As String
If (Not EOF(Canal)) Then
On Error GoTo ProblemoGordo
With Pregunta
' leer la pregunta del fichero.
Line Input #Canal, .Pregunta
Line Input #Canal, .RespuestaA
Line Input #Canal, .RespuestaB
Line Input #Canal, .RespuestaC
Line Input #Canal, .RespuestaD
Line Input #Canal, sol
.Solucion = Val(sol)
' pasar los datos a la interfaz.
LabPregunta.Caption = .Pregunta
OptRespuesta(0).Caption = "A) " & .RespuestaA
OptRespuesta(1).Caption = "B) " & .RespuestaB
OptRespuesta(2).Caption = "C) " & .RespuestaC
OptRespuesta(3).Caption = "D) " & .RespuestaD
' actualizar numero de pregunta e informar luego del numero.
NumPregunta = (NumPregunta + 1)
FraPreguntas.Caption = "Pregunta Nº: " & CStr(NumPregunta) & " de " & CStr(NumPreguntas)
' desactivar como respuesta la previa elegida.
OptRespuesta(Respuesta).Value = False
Respuesta = -1
End With
' Activar el boton de examinar: Se activa cuando se pulse en una respuesta.
Exit Sub
ProblemoGordo:
MsgBox "Ocurrio un problema al tratar de leer la siguiente pregunta del fichero..." & vbCrLf & Err.Description, vbCritical, "Ocurrio un error de lectura..."
Err.Clear
Else
MsgBox "El fichero no tiene mas preguntas... Carga otro si lo deseas...", vbInformation, "No hay mas preguntas en este fichero:"
End If
Call Cerrar
End Sub
Los botones examinar y leer siguient epregunta, podrían ser tal que así:
Private Sub ComExaminar_Click()
ComExaminar.Enabled = False
Call ValidarRespuesta
ComSiguiente.Enabled = True
End Sub
Private Sub ComSiguiente_Click()
ComSiguiente.Enabled = False
ShaRespuesta.Visible = False
ShaSolucion.Visible = False
If (NumPregunta < NumPreguntas) Then
Call LeerSiguientePregunta
Else
Call PresentarResultados
End If
End Sub
Validar la respuesta que da el usuario...
' Mostrar resultado de la pregunta actual.
Private Sub ValidarRespuesta()
Dim t As Long
t = ((OptRespuesta(0).Height - ShaSolucion.Height) \ 2)
If (Respuesta = Pregunta.Solucion) Then
Aciertos = (Aciertos + 1)
LabAciertos.Caption = "Aciertos: " & CStr(Aciertos)
ShaRespuesta.BackColor = vbGreen
Nivel = ((Aciertos - 1) Mod 5) ' 0-4 = nivel 0; 5-9 = nivel 1, etc...
LabNivel.Caption = "Nivel: " & CStr(Nivel)
Else
ShaRespuesta.BackColor = vbRed
End If
ShaSolucion.Top = (OptRespuesta(Pregunta.Solucion).Top + t)
ShaSolucion.Visible = True
ShaRespuesta.Top = (OptRespuesta(Respuesta).Top + t)
ShaRespuesta.Visible = True
End Sub
...y no sigo porque si no, te lo doy todo hecho...
Te falta comprobar/abrir/cargar el fichero.... responder a qué pasa cuando se pulsa en un control 'option'... y poco más.
Te pongo una imagen de como podría ser la interfaz...
Este foro es el de VB6 y versones anteriores, el de NET está en más arriba... aunque a veces llegan aquí equivocadamente...