none
Simulador de circuitos RRS feed

  • Pregunta

  • Hola a todos, estoy intentando programar un simulador de circuitos en VB 2015, para insertar los circuitos, lo que hago es crear en ejecución un picture box donde va a estar la imagen del circuito y así poder crear todos los que se quieran, el código es el siguiente:

    Dim Shapes(10) As PictureBox   

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click       
            Dim i As Integer
            Shapes(i) = New PictureBox
            Shapes(i).Name = "res" + Str(i)
            Shapes(i).Location = New Point(10 + 50 * i, 20)
            Shapes(i).Size = New Size(40, 20)
            Shapes(i).Visible = True
            Me.Controls.Add(Shapes(i))
            AddHandler Shapes(i).Click, AddressOf shapes_Click

    End Sub

    Con este código tengo un problema, los PictureBox hacen referencia al mismo evento shapes_Click, no logro distinguir a cual de los picturebox creados en ejecución se les dio click, con el fin mover dicho objeto, y lo otro es que si esta es la mejor manera de programar el simulador de circuitos, no se si haya otra manera de hacerlo.

    De antemano muchas gracias.

    jueves, 3 de agosto de 2017 18:32

Respuestas

  • Si bien las instancias de tipo PictureBox creadas de forma dinámica comparten el mismo controlador de evento (evento Click), el parámetro sender contiene la referencia del objeto que desencadeno el evento, por ejemplo:

    Private Sub Click_PictureBox(sender As Object, e As EventArgs)
            'Mostrar el nombre del objeto que desencadeno el evento Click
    	MessageBox.Show(CType(sender, PictureBox).Name)
    End Sub


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 3 de agosto de 2017 21:49
  • "Creative86" escribió:

    > Con este código tengo un problema, los PictureBox hacen referencia al mismo evento shapes_Click,
    > no logro distinguir a cual de los picturebox creados en ejecución se les dio click, con el fin
    > mover dicho objeto, ...

    Hola:

    Porque en el supuesto controlador de evento llamado shapes_Click tendrás que referenciar el objeto PictureBox que ha desencadenado su evento Click, tal y como muestra el siguiente ejemplo:

        Private Sub shapes_Click(sender As Object, e As EventArgs)
    
            ' Referenciamos el control PictureBox que ha desencadenado el evento Click.
            '
            Dim pb As PictureBox = DirectCast(sender, PictureBox)
    
            ' Para que observes que funciona, mostramos su nombre
            MessageBox.Show(String.Format("Se ha hecho click en el control '{0}.'", pb.Name))
    
        End Sub


    > ... y lo otro es que si esta es la mejor manera de programar el simulador de circuitos,
    > no se si haya otra manera de hacerlo.

    Siento no poder responderte, pero no tengo ni idea de "simuladores de circuitos". :-(

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    sábado, 5 de agosto de 2017 10:54
    Moderador

Todas las respuestas

  • Hola a todos, como puedo cambiar de posición un picturebox que se ha creado en ejecución, ya que todos los handler van a apuntar al mismo evento que este caso es el evento clic, y no tengo como distinguir cual fue el picturebox al cual se le dio click.

    Gracias.

    jueves, 3 de agosto de 2017 21:03
  • Si bien las instancias de tipo PictureBox creadas de forma dinámica comparten el mismo controlador de evento (evento Click), el parámetro sender contiene la referencia del objeto que desencadeno el evento, por ejemplo:

    Private Sub Click_PictureBox(sender As Object, e As EventArgs)
            'Mostrar el nombre del objeto que desencadeno el evento Click
    	MessageBox.Show(CType(sender, PictureBox).Name)
    End Sub


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 3 de agosto de 2017 21:49
  • "Creative86" escribió:

    > Con este código tengo un problema, los PictureBox hacen referencia al mismo evento shapes_Click,
    > no logro distinguir a cual de los picturebox creados en ejecución se les dio click, con el fin
    > mover dicho objeto, ...

    Hola:

    Porque en el supuesto controlador de evento llamado shapes_Click tendrás que referenciar el objeto PictureBox que ha desencadenado su evento Click, tal y como muestra el siguiente ejemplo:

        Private Sub shapes_Click(sender As Object, e As EventArgs)
    
            ' Referenciamos el control PictureBox que ha desencadenado el evento Click.
            '
            Dim pb As PictureBox = DirectCast(sender, PictureBox)
    
            ' Para que observes que funciona, mostramos su nombre
            MessageBox.Show(String.Format("Se ha hecho click en el control '{0}.'", pb.Name))
    
        End Sub


    > ... y lo otro es que si esta es la mejor manera de programar el simulador de circuitos,
    > no se si haya otra manera de hacerlo.

    Siento no poder responderte, pero no tengo ni idea de "simuladores de circuitos". :-(

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    sábado, 5 de agosto de 2017 10:54
    Moderador
  • Entiendo que te refieres a esquemas tipo transistores, capacitores, resistencias, y demás, me parece que cargar picture para cada esquema sera muy pesado para un programa, yo generaria variables y mediante Graphic de System.Drawing efectuaria los esquemas, almacenandolos.

    Saludos

    sábado, 5 de agosto de 2017 21:47