none
Pregunta Para Asier Villanueva RRS feed

  • Pregunta

  • Saludos Asier, me preguntaba eso esta hecho para que funcione con un empleado, como hago ahora para que funcione para varios empleados son 12 en total, te dejo el codigo,

    saludos rudolf heiner.


        Private Sub frm_atencionalcliente_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            Dim labelsEmpleados() As Label = {lblNomEmp1, lblNomEmp2, lblNomEmp3, lblNomEmp4, lblNomEmp5, lblNomEmp6, lblNomEmp7, lblNomEmp8, lblNomEmp9, lblNomEmp10, lblNomEmp11, lblNomEmp12}
            Dim pictureEmpleados() As PictureBox = {pbEmpleado1, pbEmpleado2, pbEmpleado3, pbEmpleado4, pbEmpleado5, pbEmpleado6, pbEmpleado7, pbEmpleado8, pbEmpleado9, pbEmpleado10, pbEmpleado11, pbEmpleado12}

            Dim empleados As IEnumerable(Of empleado) = nue_emp.GetEmpleados()

            For i As Integer = 0 To empleados.Count() - 1
                labelsEmpleados(i).Text = empleados(i).Nombre
                pictureEmpleados(i).ImageLocation = empleados(i).Ruta
                pictureEmpleados(i).Enabled = True
            Next

        End Sub

        Private Sub pbEmpleado1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pbEmpleado1.Click
            'Una vez seleccionado el empleado se ativa la pagina de mesas
            Me.TabControl1.SelectedTab = TabPage2
        End Sub

        Private Sub pbMesa_Click(sender As Object, e As EventArgs) Handles pbMesa1.Click, pbMesa2.Click, pbMesa3.Click, pbMesa4.Click, _
            pbMesa5.Click, pbMesa6.Click, pbMesa7.Click, pbMesa8.Click, pbMesa9.Click, pbMesa10.Click, pbMesa11.Click, pbMesa12.Click, _
            pbMesa13.Click, pbMesa14.Click, pbMesa15.Click, pbMesa16.Click, pbMesa17.Click, pbMesa18.Click, pbMesa19.Click, pbMesa20.Click, _
            pbMesa21.Click, pbMesa22.Click, pbMesa23.Click, pbMesa24.Click, pbMesa25.Click, pbMesa26.Click, pbMesa27.Click, pbMesa28.Click, _
            pbMesa29.Click, pbMesa30.Click, pbMesa31.Click, pbMesa32.Click, pbMesa33.Click, pbMesa34.Click, pbMesa35.Click, pbMesa36.Click, _
            pbMesa37.Click, pbMesa38.Click, pbMesa39.Click, pbMesa40.Click

            ' PictureBox sobre el que se ha hecho click
            Dim pict = CType(sender, PictureBox)
            ' Obtener número de mesa de la propiedad Tag
            Dim numeroMesa As Integer = pict.Tag
            ' Localizar el TextBox con el mismo valor en la propiedad Tag
            Dim txt = TabPage2.Controls.OfType(Of TextBox) _
                .FirstOrDefault(Function(t) t.Tag = numeroMesa)

            'Una vez seleccionado la messa se agregra el nombre del empleado y el color rojo que significa ocupado
            txt.Text = numeroMesa.ToString & " " & lblNomEmp1.Text
            txt.BackColor = Color.Red
            Me.TabControl1.SelectedTab = TabPage3
        End Sub

    sábado, 27 de febrero de 2016 22:33

Respuestas

  • Deberías mantener en una variable a nivel de formulario el empleado actual y asignarlo cuando se selecciona un empleado:

        Private empleadoActual As Integer
        Private Sub pbEmpleado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            'Una vez seleccionado el empleado se ativa la pagina de mesas
            empleadoActual = pictureEmpleados.IndexOf(sender)
            Me.TabControl1.SelectedTab = TabPage2
        End Sub

    De esta forma podrías recuperar en cualquier momento el Label correspondiente al empleado:

        Private Sub pbMesa_Click(sender As Object, e As EventArgs)
            Dim mesaIndex = pictureMesas.FindIndex(sender)
            If mesaIndex >= 0 Then
                Dim txt As TextBox = textboxMesas(mesaIndex)
                'Una vez seleccionado la messa se agregra el nombre del empleado y el color rojo que significa ocupado
                txt.Text = (mesaIndex + 1) & " " & labelsEmpleados(empleadoActual).Text
                txt.BackColor = Color.Red
                Me.TabControl1.SelectedTab = TabPage3
            End If
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Rudolf Heiner domingo, 28 de febrero de 2016 17:19
    domingo, 28 de febrero de 2016 14:24

Todas las respuestas

  • Hola Rudolf,

    viendo ahora tu código (en el que ya has creado algunos arrays de controles), y viendo que este caso se te va a dar más a menudo yo cambiaría el planteamiento.

    Te pongo el código y te lo comento después:

        Private ReadOnly labelsEmpleados As List(Of Label)
        Private ReadOnly pictureEmpleados As List(Of PictureBox)
        Private ReadOnly pictureMesas As List(Of PictureBox)
        Private ReadOnly textboxMesas As List(Of TextBox)
    
        Public Sub New()
    
            ' Esta llamada es exigida por el diseñador.
            InitializeComponent()
    
            labelsEmpleados = New List(Of Label) From
                {lblNomEmp1, lblNomEmp2, lblNomEmp3, lblNomEmp4, lblNomEmp5, lblNomEmp6, lblNomEmp7, lblNomEmp8, lblNomEmp9, lblNomEmp10, lblNomEmp11, lblNomEmp12}
            pictureEmpleados = New List(Of PictureBox) From
                {pbEmpleado1, pbEmpleado2, pbEmpleado3, pbEmpleado4, pbEmpleado5, pbEmpleado6, pbEmpleado7, pbEmpleado8, pbEmpleado9, pbEmpleado10, pbEmpleado11, pbEmpleado12}
            pictureMesas = New List(Of PictureBox) From
                {pbMesa1, pbMesa2, pbMesa3, pbMesa4, pbMesa5, pbMesa6, pbMesa7, pbMesa8, pbMesa9, pbMesa10, pbMesa11, pbMesa12, pbMesa13, pbMesa14, pbMesa15, pbMesa16, pbMesa17, pbMesa18, pbMesa19, pbMesa20, pbMesa21, pbMesa22, pbMesa23, pbMesa24, pbMesa25, pbMesa26, pbMesa27, pbMesa28, pbMesa29, pbMesa30, pbMesa31, pbMesa32, pbMesa33, pbMesa34, pbMesa35, pbMesa36, pbMesa37, pbMesa38, pbMesa39, pbMesa40}
            textboxMesas = New List(Of TextBox) From
                {txtMesa1, txtMesa2, txtMesa3, txtMesa4, txtMesa5, txtMesa6, txtMesa7, txtMesa8, txtMesa9, txtMesa10, txtMesa11, txtMesa12, txtMesa13, txtMesa14, txtMesa15, txtMesa16, txtMesa17, txtMesa18, txtMesa19, txtMesa20, txtMesa21, txtMesa22, txtMesa23, txtMesa24, txtMesa25, txtMesa26, txtMesa27, txtMesa28, txtMesa29, txtMesa30, txtMesa31, txtMesa32, txtMesa33, txtMesa34, txtMesa35, txtMesa36, txtMesa37, txtMesa38, txtMesa39, txtMesa40}
    
            ' Handler para el evento click de los PictureBox de mesas
            For Each pictureMesa As PictureBox In pictureMesas
                AddHandler pictureMesa.Click, AddressOf pbMesa_Click
            Next
            ' Handler para el evento click de los PictureBox de los empleados
            For Each pictureEmpleado As PictureBox In pictureEmpleados
                AddHandler pictureEmpleado.Click, AddressOf pbEmpleado_Click
            Next
        End Sub
        Private Sub frm_atencionalcliente_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
            Dim empleados As IEnumerable(Of empleado) = nue_emp.GetEmpleados()
    
            For i As Integer = 0 To empleados.Count() - 1
                labelsEmpleados(i).Text = empleados(i).Nombre
                pictureEmpleados(i).ImageLocation = empleados(i).Ruta
                pictureEmpleados(i).Enabled = True
            Next
    
        End Sub
    
        Private Sub pbEmpleado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            'Una vez seleccionado el empleado se ativa la pagina de mesas
            Me.TabControl1.SelectedTab = TabPage2
        End Sub
    
        Private Sub pbMesa_Click(sender As Object, e As EventArgs)
            Dim mesaIndex = pictureMesas.FindIndex(sender)
            If mesaIndex >= 0 Then
                Dim txt As TextBox = textboxMesas(mesaIndex)
                'Una vez seleccionado la messa se agregra el nombre del empleado y el color rojo que significa ocupado
                txt.Text = (mesaIndex + 1) & " " & lblNomEmp1.Text
                txt.BackColor = Color.Red
                Me.TabControl1.SelectedTab = TabPage3
            End If
        End Sub
    

    En primer lugar creo a nivel de formulario variables para las colecciones de los diferentes controles, para poder acceder a estas colecciones desde los diferentes métodos. Yo utilizo objetos List por manías personales pero podrías utilizar perfectamente Arrays.

    Creo un método New (constructor) para inicializar estas colecciones.
    La llamada al método InitializeComponent es necesaria para que se inicialicen los controles y propiedades definidos en el diseñador de formularios.
    En el constructor también asigno el controlador del evento Click a los PictureBox de empleados y mesas. De esta forma no es necesario añadir al método la cláusula Handless con toda la colección de controles (el resultado es el mismo pero el código queda mucho más limpio y mantenible).

    También he cambiado el método pbMesa_Click. Al tener los controles en colecciones podemos obtener el número de mesa a partir del índice en el que se encuentra dentro de la colección, por lo que ya no sería necesario el uso de la propiedad Tag para identificar el número de mesa correspondiente al control.

    Cualquier duda me comentas.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    domingo, 28 de febrero de 2016 9:49
  • hola Asier, gracias por responder, mira aqui en esta parte del codigo:

    el lblNomEmp1 sigue siendo el mismo y deberia ser para el empleado que seleccione como podria hacerlo porfavor ?

     Private Sub pbMesa_Click(sender As Object, e As EventArgs)
            Dim mesaIndex = pictureMesas.FindIndex(sender)
            If mesaIndex >= 0 Then
                Dim txt As TextBox = textboxMesas(mesaIndex)
                'Una vez seleccionado la messa se agregra el nombre del empleado y el color rojo que significa ocupado
                txt.Text = (mesaIndex + 1) & " " & lblNomEmp1.Text
                txt.BackColor = Color.Red
                Me.TabControl1.SelectedTab = TabPage3
            End If
        End Sub

    quedo de ti, saludos, rudolf heiner.


    domingo, 28 de febrero de 2016 10:18
  • Saludos Asier, ya coloque tu codigo en mi programa, tiene un error, quedo de ti, te pongo la imagen:

    domingo, 28 de febrero de 2016 10:34
  • Cierto, perdona pero no he podido probar el código porque tendría que montarme todo el formulario.

    Si lo reemplazas por:

    Dim mesaIndex = pictureMesas.IndexOf(sender)

    debería funcionar.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    domingo, 28 de febrero de 2016 13:01
  • ya funciona Asier, pero como hago con esto:

    el lblNomEmp1 sigue siendo el mismo y deberia ser para el empleado que seleccione como podria hacerlo porfavor ?

     Private Sub pbMesa_Click(sender As Object, e As EventArgs)
            Dim mesaIndex = pictureMesas.FindIndex(sender)
            If mesaIndex >= 0 Then
                Dim txt As TextBox = textboxMesas(mesaIndex)
                'Una vez seleccionado la messa se agregra el nombre del empleado y el color rojo que significa ocupado
                txt.Text = (mesaIndex + 1) & " " & lblNomEmp1.Text
                txt.BackColor = Color.Red
                Me.TabControl1.SelectedTab = TabPage3
            End If
        End Sub

    domingo, 28 de febrero de 2016 13:18
  • Deberías mantener en una variable a nivel de formulario el empleado actual y asignarlo cuando se selecciona un empleado:

        Private empleadoActual As Integer
        Private Sub pbEmpleado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            'Una vez seleccionado el empleado se ativa la pagina de mesas
            empleadoActual = pictureEmpleados.IndexOf(sender)
            Me.TabControl1.SelectedTab = TabPage2
        End Sub

    De esta forma podrías recuperar en cualquier momento el Label correspondiente al empleado:

        Private Sub pbMesa_Click(sender As Object, e As EventArgs)
            Dim mesaIndex = pictureMesas.FindIndex(sender)
            If mesaIndex >= 0 Then
                Dim txt As TextBox = textboxMesas(mesaIndex)
                'Una vez seleccionado la messa se agregra el nombre del empleado y el color rojo que significa ocupado
                txt.Text = (mesaIndex + 1) & " " & labelsEmpleados(empleadoActual).Text
                txt.BackColor = Color.Red
                Me.TabControl1.SelectedTab = TabPage3
            End If
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Rudolf Heiner domingo, 28 de febrero de 2016 17:19
    domingo, 28 de febrero de 2016 14:24
  • Gracias Asier, todo funciona muy bien, gracias por tu ayuda,

    saludos,

    rudolf heiner!

    domingo, 28 de febrero de 2016 17:19