Principales respuestas
Pregunta Para Asier Villanueva

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
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 .NETPí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
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 .NETPíldoras JS
Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ... -
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.
- Editado Rudolf Heiner domingo, 28 de febrero de 2016 10:37
-
-
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 .NETPíldoras JS
Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ... -
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
-
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 .NETPí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
-