elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Crear 5 form y que aparezcan en forma aleatoria. con vb 2012
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012  (Leído 3,910 veces)
Edierb

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Crear 5 form y que aparezcan en forma aleatoria. con vb 2012
« en: 29 Marzo 2017, 18:37 »

Hola muchachos buen día.
Bueno el asunto es el siguiente, estoy creando un cuestionario con 5 preguntas una pregunta por cada form, lo que quiero es hacer que cuando inicie el programa las preguntas o mas bien los form salgan de una forma aleatoria y que no se repitan las que ya se han contestado.


« Última modificación: 29 Marzo 2017, 21:35 por Edierb » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Crear forma que aparezcan en forma aleatoria.
« Respuesta #1 en: 29 Marzo 2017, 19:05 »

Hola muchachos buen día.
Hola.

Bueno el asunto es el siguiente, estoy creando un cuestionario con 5 preguntas una pregunta por cada forma

Pues lo primero de todo: muestra el código -y aclara si tu duda es sobre VB6, o más bien VB.NET.

¡Saludos!


En línea


Edierb

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Crear forma que aparezcan en forma aleatoria.
« Respuesta #2 en: 29 Marzo 2017, 20:05 »

Bueno estoy trabajando con VB 2012
En línea

Edierb

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Crear forma que aparezcan en forma aleatoria.
« Respuesta #3 en: 29 Marzo 2017, 21:32 »

bueno el código es este.
 
Código
  1. Private Sub Siguiente_Click(sender As Object, e As EventArgs) Handles Siguiente.Click
  2.        form3.Show()
  3.        Me.Hide()
  4.    End Sub
este es el código que tengo para pasar de un form a otro, las preguntas las tengo en form independientes.
lo que quiero es que cada ves que clike en el boton los form no salgan en orden si no en forma aleatoria y que no se repitan los que ya han salido.

y este es el codigo donde se hace la verificación de las respuestas

Código
  1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  2.        Me.Close()
  3.        Dim puntaje As Integer
  4.        puntaje = 0
  5.        If Form2.RadioButton3.Checked = True Then puntaje = puntaje + 5
  6.        If form3.RadioButton3.Checked = True Then puntaje = puntaje + 5
  7.        If Form4.RadioButton1.Checked = True Then puntaje = puntaje + 5
  8.        If RadioButton1.Checked = True Then puntaje = puntaje + 5
  9.  
  10.  
  11.        MsgBox("Su puntuacion es:" + Str(puntaje) + "/25", MsgBoxStyle.Exclamation)
  12.        If puntaje >= 20 Then
  13.            MsgBox("Felicidades")
  14.            Timer1.Enabled = True
  15.        ElseIf MsgBox("Debe estudiar un poco más") Then
  16.            Timer1.Enabled = False
  17.        End If
  18.    End Sub

« Última modificación: 29 Marzo 2017, 22:40 por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Crear forma que aparezcan en forma aleatoria.
« Respuesta #4 en: 29 Marzo 2017, 23:19 »

bueno el código es este.
 
Código
  1. Private Sub Siguiente_Click(sender As Object, e As EventArgs) Handles Siguiente.Click
  2.        form3.Show()
  3.        Me.Hide()
  4.    End Sub
este es el código que tengo para pasar de un form a otro, las preguntas las tengo en form independientes.
lo que quiero es que cada ves que clike en el boton los form no salgan en orden si no en forma aleatoria y que no se repitan los que ya han salido.

Bueno, una forma óptima de hacerlo sería mediante el uso de una pila:

Código
  1. ' Una colección enumerable para especificar cuales forms queremos procesar/mostrar.
  2. Private forms As IEnumerable(Of Form) = {Form2, Form3, Form4, Form5, etc...}
  3.  
  4. ' Una pila en la que iremos añadiendo una referencia de los forms de manera desordenada (aleatoria).
  5. Private ReadOnly stackForm As New Stack(Of Form)
  6.  
  7. ' Una instancia de la class Random que utilizaremos para generar secuencias numéricas aleatorias.
  8. Private ReadOnly rand As New Random()
  9.  
  10. Private Sub Siguiente_Click(sender As Object, e As EventArgs) Handles Siguiente.Click
  11.  
  12.    ' Si la pila de forms está vacía...
  13.    If (stackForm.Count = 0) Then
  14.        ' Ordenamos la secuencia enumerable de forma aleatoria.
  15.        Me.forms = (From x As Form In forms Order By rand.Next())
  16.        ' e iteramos la secuencia resultante para ir añadiendo todos los forms a la pila.
  17.        For Each f As Form In Me.forms
  18.            stackForm.Push(f)
  19.        Next f
  20.    End If
  21.  
  22.    ' Eliminanos el siguiente elemento de la pila para obtener el siguiente Form.
  23.    Dim nextForm As Form = stackForm.Pop()
  24.    ' Ocultamos el Form principal, mostramos el form obtenido, y etcétera...
  25.    Me.Hide()
  26.    nextForm.ShowDialog(Me)
  27.    Me.Show()
  28.  
  29. End Sub

Si tienes cualquier duda al respecto, pregunta.

¡Un saludo!
« Última modificación: 30 Marzo 2017, 00:26 por Eleкtro » En línea


Edierb

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012
« Respuesta #5 en: 30 Marzo 2017, 00:18 »

Hola muchas gracias por responder, bueno la verdad si tengo preguntas, la verdad soy nuevo y no se mucho de programación,  mi pregunta seria: este código que me das los ingreso en un form nuevo o lo ingredo en cada uno de los form donde tengo las preguntas.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.709



Ver Perfil
Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012
« Respuesta #6 en: 30 Marzo 2017, 00:25 »

este código que me das los ingreso en un form nuevo o lo ingredo en cada uno de los form donde tengo las preguntas.

Ese código debes añadirlo tan solo al Form principal, o mejor dicho al form que vayas a usar para mostrar los demás forms que contengan "las preguntas".

EDITO:
Por cierto, en el código que te mostré me acabo de dar cuenta que escribí mal el nombre del botón:
Private Sub Siguiente_Click(sender As Object, e As EventArgs) Handles Button.Click
Debería ser así:
Private Sub Siguiente_Click(sender As Object, e As EventArgs) Handles Siguiente.Click
...lo comento para evitarte posibles confusiones.

¡Saludos!
« Última modificación: 30 Marzo 2017, 00:29 por Eleкtro » En línea


Edierb

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012
« Respuesta #7 en: 30 Marzo 2017, 01:23 »

ok gracias
voy a intentar, luego le comento haber como me va
En línea

Edierb

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012
« Respuesta #8 en: 30 Marzo 2017, 14:45 »

Ese código debes añadirlo tan solo al Form principal, o mejor dicho al form que vayas a usar para mostrar.
Hola saludos.
Bueno el código corre bien cumple su función que es la de generar form  aleatoriamente, el problema es que para que esto suceda siempre tengo que darle clik al form  principal y esto no es lo que se quiere, lo que yo busco es que cuando de clik en el botón iniciar me abra un form hay contesto una serie de preguntas y luego le doy clik en el botón siguiente y que me habrá otro form y asi sucesivamente, además los form  que ya he contestado se repiten y no quiero que se repitan.
Le agradezco por su colaboración, claro que si hay otra forma de crear un cuestionario tipo text con preguntas aleatorias me gustaría me comentara como hacerlo.
Saludos.
En línea

NEBIRE


Desconectado Desconectado

Mensajes: 2.339


Ver Perfil
Re: Crear 5 form y que aparezcan en forma aleatoria. con vb 2012
« Respuesta #9 en: 30 Marzo 2017, 18:45 »

Crea un nuevo proyecto, añade un formulario con un solo botón y añade una clase llamada "cuestionario"...

No he tenido tiempo de probarlo (creando un fichero de ejemplo y tal) si te sale algún error trata de solucionarlo y si no puedes me comentas... ahora tengo que salir...

Este sería el código para la clase:
Código
  1. Public Class Cuestionario
  2.    Private p_Preguntas() As CuestionProfesor
  3.    Private p_NumPreguntas As Integer
  4.    Private p_Next As Integer
  5.    Private p_Aciertos As Integer
  6.  
  7.    Private Rnd_M As Integer
  8.    Private Rnd_Q As Integer
  9.    Private Rnd_P As Integer
  10.  
  11.  
  12.    Public Enum RespuestasPosibles
  13.        RESPUESTA_A = 0
  14.        RESPUESTA_B = 1
  15.        RESPUESTA_C = 2
  16.        RESPUESTA_D = 3
  17.    End Enum
  18.  
  19.    ''' <summary>
  20.    ''' La pregunta que rellena el profesor.
  21.    ''' </summary>
  22.    ''' <remarks>Al hacer el test, se envía al alumno, una copia de la pregunta y respuestas únicamente.</remarks>
  23.    Public Structure CuestionProfesor
  24.        Public Pregunta As String
  25.        Public Respuesta1 As String
  26.        Public Respuesta2 As String
  27.        Public Respuesta3 As String
  28.        Public Respuesta4 As String
  29.        Public Solucion As RespuestasPosibles    '
  30.        Friend Acierto As Boolean ' para no hacer trampas...
  31.  
  32.        ''' <summary>
  33.        ''' Convierte una pregunta del profesor en una del alumno.
  34.        ''' </summary>
  35.        ''' <returns>Devuelve una copia idéntica de la pregunta y las posibles respuestas.</returns>
  36.        ''' <remarks></remarks>
  37.        Friend Function Convertir() As CuestionAlumno
  38.            With Convertir
  39.                .Pregunta = Me.Pregunta
  40.                .Respuesta1 = Me.Respuesta1
  41.                .Respuesta2 = Me.Respuesta2
  42.                .Respuesta3 = Me.Respuesta3
  43.                .Respuesta4 = Me.Respuesta4
  44.            End With
  45.            Return Convertir
  46.        End Function
  47.    End Structure
  48.  
  49.    ''' <summary>
  50.    ''' La pregunta que se envía para ser respondida.
  51.    ''' </summary>
  52.    ''' <remarks>Es una copia de la "pregunta del profesor"</remarks>
  53.    Public Structure CuestionAlumno
  54.        Public Pregunta As String
  55.        Public Respuesta1 As String
  56.        Public Respuesta2 As String
  57.        Public Respuesta3 As String
  58.        Public Respuesta4 As String
  59.  
  60.        Public Function Convertir(ByRef Texto As String) As RespuestasPosibles
  61.            Select Case Texto
  62.                Case "0" : Return RespuestasPosibles.RESPUESTA_A
  63.                Case "1" : Return RespuestasPosibles.RESPUESTA_B
  64.                Case "2" : Return RespuestasPosibles.RESPUESTA_C
  65.                Case "3" : Return RespuestasPosibles.RESPUESTA_D
  66.                Case Else : Return RespuestasPosibles.RESPUESTA_A
  67.            End Select
  68.        End Function
  69.    End Structure
  70.  
  71.    ''' <summary>
  72.    ''' Envía al cliente la pregunta actual del test.
  73.    ''' </summary>
  74.    ''' <param name="Pregunta">Una estructura conteniendo la pregunta y las posibles respuestas.</param>
  75.    ''' <param name="Respuesta">El índice de respuesta que dió el usuario del cliente.</param>
  76.    ''' <remarks></remarks>
  77.    Public Event Test(ByRef Pregunta As CuestionAlumno, ByRef Respuesta As RespuestasPosibles)
  78.    ''' <summary>
  79.    ''' Solicita al cliente los datos de una cuestión.
  80.    ''' </summary>
  81.    ''' <param name="Pregunta">Pregunta que se formula</param>
  82.    ''' <param name="Respuesta1">Posible respuesta -A-</param>
  83.    ''' <param name="Respuesta2">Posible Respuesta -B-</param>
  84.    ''' <param name="Respuesta3">Posible respuesta -C-</param>
  85.    ''' <param name="Respuesta4">Posible respuesta -D-</param>
  86.    ''' <param name="Solucion">Indice de la solución correcta a la pregunta entre las 4 (rango 0-3)</param>
  87.    ''' <remarks></remarks>
  88.    Public Event EntrarPregunta(ByRef Pregunta As String, ByRef Respuesta1 As String, ByRef Respuesta2 As String, ByRef Respuesta3 As String, ByRef Respuesta4 As String, ByRef Solucion As RespuestasPosibles)
  89.    ''' <summary>
  90.    ''' Informa al cliente que se ya se han realizado todas las preguntas del cuestionario.
  91.    ''' </summary>
  92.    ''' <param name="Aciertos">Entrega el número de aciertos que se obtuvo.</param>
  93.    ''' <param name="RepetirTest">Pregunta al cliente si se desea repetir (reiniciar) el mismo test</param>
  94.    ''' <remarks></remarks>
  95.    Public Event FinDeCuestionario(ByVal Aciertos As Byte, ByRef RepetirTest As Boolean)
  96.    ''' <summary>
  97.    ''' Solicita el cliente si desea rellenar el cuestionario actual
  98.    ''' </summary>
  99.    ''' <param name="NumPreguntas">Un valor 0, expresa que no se desea realizar otro cuestionario.</param>
  100.    ''' <remarks></remarks>
  101.    Public Event IntroducirNuevoCuestionario(ByRef NumPreguntas As Byte)
  102.  
  103.  
  104.  
  105.  
  106.    ''' <summary>
  107.    ''' Devuelve el número de preguntas que tiene el cuestionario actual.
  108.    ''' </summary>
  109.    ''' <value></value>
  110.    ''' <returns></returns>
  111.    ''' <remarks></remarks>
  112.    Public ReadOnly Property CantidadDePreguntas As Integer
  113.        Get
  114.            Return p_NumPreguntas
  115.        End Get
  116.        'Set(ByVal value As Byte)
  117.        '    Call ComenzarTest(value)
  118.        'End Set
  119.    End Property
  120.  
  121.    ''' <summary>
  122.    ''' Solicita la entrega de una nueva cuestión.
  123.    ''' </summary>
  124.    ''' <remarks>Si alcanza el final, devuelve un evento para solicitar si se desea barajar de nuevo el test actual.</remarks>
  125.    Public Sub Siguiente()
  126.        Dim r As RespuestasPosibles
  127.        Dim ca As CuestionAlumno
  128.        Dim np As Byte = 0
  129.  
  130.        If (p_Next < p_NumPreguntas) Then
  131.            ca = p_Preguntas(p_Next).Convertir
  132.            RaiseEvent Test(ca, r)
  133.            If (p_Preguntas(p_Next).Solucion = r) Then
  134.                p_Preguntas(p_Next).Acierto = True
  135.                p_Aciertos += 1
  136.            End If
  137.  
  138.            p_Next += 1
  139.        End If
  140.  
  141.        If (p_Next = p_NumPreguntas) Then
  142.            Dim barajaOtraVez As Boolean = False
  143.  
  144.            RaiseEvent FinDeCuestionario(p_Aciertos, barajaOtraVez)
  145.  
  146.            If (barajaOtraVez = True) Then
  147.                Call Barajar()
  148.                ca = p_Preguntas(p_Next).Convertir
  149.                RaiseEvent Test(ca, r) ' aquí, p_next vale ahora mismo 0.
  150.                If (p_Preguntas(p_Next).Solucion = r) Then
  151.                    p_Preguntas(p_Next).Acierto = True
  152.                    p_Aciertos += 1
  153.                End If
  154.            Else
  155.                RaiseEvent IntroducirNuevoCuestionario(np)
  156.                If (np > 0) Then
  157.                    Call ComenzarTest(np)
  158.                End If
  159.            End If
  160.            'Call MessageBox.Show("No existe la pregunta número: " & p_next.ToString & vbNewLine & "Realice una nueva petición, el número máximo de pregunta es: " & (p_NumPreguntas-1).ToString)
  161.        End If
  162.    End Sub
  163.  
  164.    'Public Sub New()
  165.    '    Me.New(6)
  166.    'End Sub
  167.  
  168.    'Public Sub New(ByVal NumPreguntas As Byte)
  169.    '    Call ComenzarTest(NumPreguntas)
  170.    'End Sub
  171.  
  172.    ''' <summary>
  173.    ''' Solicita al cliente que introduzca los datos del nuevo cuestionario.
  174.    ''' </summary>
  175.    ''' <param name="NumPreguntas">Cantidad de preguntas que tendrá el cuestionario</param>
  176.    ''' <remarks>Se invoca al crear la clase y cuendo se ha finalizado el cuestionario actual</remarks>
  177.    Public Sub ComenzarTest(ByVal NumPreguntas As Byte)
  178.        Dim k As Integer, q As CuestionProfesor
  179.  
  180.        If (p_NumPreguntas = 0) Then
  181.            Rnd_M = 5 : Rnd_Q = 11 : Rnd_P = 767
  182.        Else ' evitamos números pares...
  183.            Rnd_M = ((Rnd_M Mod 81) + 2)
  184.            Rnd_Q = ((Rnd_Q Mod 353) + 4)
  185.            Rnd_P = ((Rnd_P Mod 2311) + 8)
  186.        End If
  187.  
  188.        p_NumPreguntas = NumPreguntas
  189.        ReDim p_Preguntas(0 To p_NumPreguntas)
  190.  
  191.        For k = 0 To NumPreguntas - 1
  192.            With q
  193.                .Pregunta = ""
  194.                .Respuesta1 = ""
  195.                .Respuesta2 = ""
  196.                .Respuesta3 = ""
  197.                .Respuesta4 = ""
  198.                .Solucion = 0
  199.                ' ahora se ofrece la oportunidad de rellenar el cuestionario (que quizás esté guardado en un fichero)...
  200.                RaiseEvent EntrarPregunta(.Pregunta, .Respuesta1, .Respuesta2, .Respuesta3, .Respuesta4, .Solucion)
  201.                p_Preguntas(k) = q ' y se almacena...
  202.            End With
  203.        Next
  204.  
  205.        Call Barajar()
  206.    End Sub
  207.  
  208.  
  209.    ''' <summary>
  210.    ''' Reinicia el cuestionario. Baraja los test del cuestionario actual y restablece a 0 el número de aciertos.
  211.    ''' </summary>
  212.    ''' <remarks></remarks>
  213.    Public Sub Reset()
  214.        Call Barajar()
  215.    End Sub
  216.  
  217.    ''' <summary>
  218.    ''' Baraja las preguntas del test y se obtiene una lista en orden aleatorio.
  219.    ''' </summary>
  220.    ''' <remarks>El 'siguiente' se resetea al índice 0 del cuestionario.</remarks>
  221.    Private Sub Barajar() ' es mejor que sea un método privado, Y a su vez Se crea el método Reset, más explícito...
  222.        Dim k As Integer, az As Integer, tmp As CuestionProfesor
  223.  
  224.        For k = p_NumPreguntas - 1 To 1 Step -1
  225.            az = (Random(az) Mod (k + 1)) ' proporciona un valor entre 0 y k.
  226.  
  227.            tmp = p_Preguntas(az)
  228.            p_Preguntas(az) = p_Preguntas(k)
  229.            p_Preguntas(k) = tmp
  230.        Next
  231.        p_Next = 0
  232.        p_Aciertos = 0
  233.    End Sub
  234.  
  235.    ''' <summary>
  236.    ''' Genera un número random pseudoaleatorio.
  237.    ''' </summary>
  238.    ''' <param name="n">Semilla desde la que generar el siguiente número</param>
  239.    ''' <returns>Devuelve un entero entre 0 y (Rnd_P -1)</returns>
  240.    ''' <remarks>Hay que ser cuidadoso al elegir el valor de los parámetros internos que utiliza la función. Si todos los parámetros son congruentes entre sí, podría devolver números predecibles, incluso siempre el mismo (típicamente el 0).</remarks>
  241.    ''' Puede recurrirse al propio entorno NET para generar los números aleatorios.
  242.    Private Function Random(ByVal n As Integer) As Integer
  243.        Random = (((n * Rnd_M) + Rnd_Q) Mod Rnd_P)
  244.    End Function
  245.  
  246. End Class
  247.  

Y éste el código para el formulario:
Código
  1. Public Class Form1
  2.    Private WithEvents Test As New Cuestionario
  3.    Private Fios As IO.StreamReader
  4.  
  5.    ' Realizar la siguiente pregunta
  6.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.        Test.Siguiente()
  8.    End Sub
  9.  
  10.    ' Hacer la pregunta.
  11.    ' La rpopia clase, verifica la respuesta y lleva la cuenta de aciertos y al final del test, notifica el resultado.
  12.    Private Sub Test_Test(ByRef Pregunta As Cuestionario.CuestionAlumno, ByRef Respuesta As Cuestionario.RespuestasPosibles) Handles Test.Test
  13.        With Pregunta
  14.            Dim R As String = InputBox(.Respuesta1 & vbNewLine & .Respuesta2 & vbNewLine & .Respuesta3 & vbNewLine & .Respuesta4 & vbNewLine & vbTab & "( ELIJA COMO RESPUESTA 0, 1,2 Ó 3)", .Pregunta)
  15.            Respuesta = Pregunta.Convertir(R)
  16.        End With
  17.    End Sub
  18.  
  19.  
  20.    ' El cliente debe indicar las preguntas que tendrá el nuevo cuestionario.
  21.    ' un valor de 0, indica que ya no se desea hacer más test.
  22.    ' En el ejemplo, se lee la primera línea del fichero, que contiene el número de preguntas que contiene el cuestionario dentro del fichero.
  23.    ' Uno debe proveer
  24.    Private Sub Test_IntroducirNuevoCuestionario(ByRef NumPreguntas As Byte) Handles Test.IntroducirNuevoCuestionario
  25.        Fios.Close()
  26.        Dim fin As Boolean = MessageBox.Show("¿Desea dar por finalizado la sesión de tests (S/N)?", "Nuevo cuestionario...", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
  27.        If (fin = False) Then
  28.            Fios = New IO.StreamReader(Application.ExecutablePath & "\Cuestionario.txt")
  29.            NumPreguntas = Convert.ToByte(Fios.ReadLine) ' ojo: Cambiar al gusto y necesidad...
  30.        Else
  31.            NumPreguntas = 0
  32.        End If
  33.    End Sub
  34.  
  35.    ' Solicita al cliente cada test, uno a uno. debe introducirse los datos procedentes de donde sea...
  36.    '   en este ejemplo se proveen de un simple fichero de texto, que está formateado así:
  37.    '  NumPreguntas: ' tiene el número de preguntas que aloja el fichero, en el ejemplo no se verifica si esto es correcto.
  38.    '  Pregunta X
  39.    '    Respuesta A
  40.    '    Respuesta B
  41.    '    Respuesta C
  42.    '    Respuesta D
  43.    '    Solución A-D
  44.    ' En el ejemplo provisto no se verifica que todo esté correcto, se da por hecho que es así.
  45.    Private Sub Test_EntrarPregunta(ByRef Pregunta As String, ByRef Respuesta1 As String, ByRef Respuesta2 As String, ByRef Respuesta3 As String, ByRef Respuesta4 As String, ByRef Solucion As Byte) Handles Test.EntrarPregunta
  46.        Pregunta = Fios.ReadLine
  47.  
  48.        Respuesta1 = Fios.ReadLine
  49.        Respuesta2 = Fios.ReadLine
  50.        Respuesta3 = Fios.ReadLine
  51.        Respuesta4 = Fios.ReadLine
  52.  
  53.        Solucion = Fios.ReadLine
  54.    End Sub
  55.  
  56.  
  57.    Private Sub Test_FinDeCuestionario(ByVal Aciertos As Byte, ByRef RepetirTest As Boolean) Handles Test.FinDeCuestionario
  58.        Dim numPreg As Integer = Test.CantidadDePreguntas        
  59.        Dim btn As Windows.Forms.MessageBoxButtons = vbYesNo
  60.        Dim ico As Windows.Forms.MessageBoxIcon
  61.  
  62.        ' Seleccionamos un icono en función del número de aciertos podría personalizarse mejor con iconos específicos creados al efecto).
  63.        If (Aciertos < (numPreg / 2)) Then
  64.            ico = MessageBoxIcon.Warning
  65.        Else
  66.            ico = MessageBoxIcon.Information
  67.        End If
  68.  
  69.        RepetirTest = MessageBox.Show("El número de aciertos fue: " & Aciertos.ToString & vbNewLine & "Sobre " & numPreg.ToString & " preguntas" & vbNewLine & vbNewLine & vbTab & "¿Desea repetir el mismo cuestionario (S/N)?", "Se ha finalizado el cuestionario.", btn, ico)
  70.    End Sub
  71.  
  72.  
  73.  
  74.  
  75.    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  76.        Fios = New IO.StreamReader(Application.StartupPath & "\Cuestionario.txt")
  77.        Test.ComenzarTest(Convert.ToByte(Fios.ReadLine))
  78.    End Sub
  79.  
  80.    Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
  81.        Fios.Close()
  82.        Fios = Nothing
  83.    End Sub
  84. End Class
  85.  

Para probarlo debes crear un fichero de texto llamado cuestionario.txt en la ruta del ejecutable (nota que si está en debug, la carpeta es distinta de si está compilado), con la siguiente estructura (OJO un dato por cada línea, y por línea se entiende Un SALTO de LINEA...

'  NumPreguntas: ' tiene el número de preguntas que aloja el fichero, en el ejemplo
(por cada pregunta que indique numpreguntas debe haber esta estructura)
'  Pregunta X el texto de la pregunta, por ejemplo: Test 01: De qué color es la hierba?
'    Respuesta A  el texto de una posible respuesta, por ejemplo: 0 - Azul
'    Respuesta B   por ejemplo 1 - Blanco
'    Respuesta C  por ejemplo 2 - verde
'    Respuesta D  por ejemplo 3 - Gris
'    Solución 0-3 un valor numérico entre 0 y 3 , por ejemplo 2


---------------------------------------------------
p.d.: no se utiliza ningún formulario extra, todo la operación de mostrar los test recáe sobre un objeto inputbox.... que para el caso de ejemplo que se trata, es más que suficiente... ya tu tendrás que poner algo de tu parte y modificarlo a tus necesidades.

Lo que se hace aleatoriamente es reordenar las preguntas en el array y lueo se procede a mostrarlas en ese orden (desordenado, barajado), como cuando barajas un mazo de cartas y luego las muestras una a una...
« Última modificación: 30 Marzo 2017, 20:14 por NEBIRE » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines