Visual Basic.NET - Construir nombre de campo

   
Vista:

Construir nombre de campo

Publicado por Jose (38 intervenciones) el 18/01/2009 15:25:59
Hola,
Mi problema es el siguiente.
En Acces yo puedo para construir el nombre de un campo de forma dinamica por ejemplo

Tengo los campos B0,B1,B2,B3....B36 en un formulario y para acceder a estos campos hago lo siguiente

Dim I as integer,S as string

For I = 0 to 36
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Construir nombre de campo

Publicado por Damian (824 intervenciones) el 19/01/2009 01:40:23
No se entiende que quieres hacer, y lo quieres hacer lo haces desde VB.NET?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por Jose (38 intervenciones) el 19/01/2009 02:29:05
Ante todo gracias por responder.
Basandome en la pregunta anteriormente hecha.
En access existen lo que se llama Formularios; en estos formularios se puedes poner diferentes objetos:botones, etiquetas, campos de texto (textbox)...etc.
Lo mismo se puede hacer en VB.net
En mi formulario que ya hice en Access y en VBA(Excel2003) lo expuesto en mi pregunta funciona, pero yo quiero implementar esa funcionalidad en un formulario de VB.net que entre otras cosas tiene los campos (textbox) con los nombres B0,B1,B2...B36.. y en el desarrollo del programa entre otras cosas tengo que afectar a los campos mencionados (el valor 0 con eso es suficiente), pero no quiero hacerlo teniendo que poner B0 = 0:B1 = 0:B2 = 0...B36=0; quiero hacerlo utilizando un lazo For..Next de la forma que expuse en mi pregunta. Yo no lo veo tan complicado de entender, pero repito yo no se hacerlo en VB.net (se hacerlo en VBA Excel y en VBA Access. Yo quiero construir el nombre de un campo de formulario (que ya existe) el formulariony el campo a través de codigo VB.Net y poderlo utilizar en el programa para lo que haga falta. Yo se que en el foro hay personas para las que sera algo muy simple y otros para los que será un misterio.

Un saludo y gracias por vuestra colaboración.

José
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por P3L30N2009 (6 intervenciones) el 19/01/2009 09:08:18
No, no es nada complicado ahora que lo has expuesto mas claramente (creo).

Dim Text As Object
For Each Text In Me.Controls
If TypeOf Text Is TextBox Then
Text.Text = 0
End If
Next Text
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por Jose (38 intervenciones) el 19/01/2009 17:25:07
Hola y mil gracias por la respuesta. Me ha hecho recordar algo en lo que no pensé.
Refirirendome siempre a la pregunta origen para el lazo For....Next
Con lo que me acabas de enviar puedo muy bien poner a 0 TODOS los controles TextBox, pero yo no quiero ponerlos todos a cero sino solo aquellos que me haga falta.
Si tengo como nombres de controles (textBox) por ejemplo, ENTRADAS, SALIDAS, SALDO...ETC, B0,B1,B2...B36 yo en mi desarrollo solo deseo cambiar los valores a los controles B0,B1,B2...B36 solo a estos y no a los otros. Yo deseo poder contruir por codigo el nombre de los controles y poderlo utilizar en el codigo. Naturalmente que conozco el nombre de los controles a utilizar, pero no conozco el nombre del control sobre el que voy a actuar (y que esta dentro de B0,B1,B2...B36) ya que esto depende del valor de una condición que será la que me indique sobre que control actuar y no puedo utilizar una instrucción Select Case...end Select. Tengo que rreconstruir el nombre del control dinamicamente en el código del procedimiento.

Un saludo

José
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por Damian (824 intervenciones) el 19/01/2009 18:03:24
Seria en el mismo codigo que te pasaron recien agregarle otra condicion, entonces te quedaria asi:

Dim Text As Object
Dim i as integer

For Each Text In Me.Controls
If TypeOf Text Is TextBox Then
If Me.Controls.Item(i).Text = "B" & i Then
Text.Text = 0
End If
i+=1
End If
Next Text

Este for te va a recorrer todas las cajas de texto, pero solo cambiara aquellas donde su propiedad Name sea B0,B1,B2,etc.por eso debes agregar un contador en este caso i.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por P3L30N2009 (6 intervenciones) el 19/01/2009 22:45:19
cita:
"pero no conozco el nombre del control sobre el que voy a actuar (y que esta dentro de B0,B1,B2...B36) ya que esto depende del valor de una condición que será la que me indique sobre que control actuar y no puedo utilizar una instrucción Select Case...end Select. Tengo que rreconstruir el nombre del control dinamicamente en el código del procedimiento. "

end cita:

¿Sabes lo que estás diciendo, o es que yo no lo entiendo?

agur
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por Damian (824 intervenciones) el 19/01/2009 23:09:38
Esa parte donde pones esa cita la obvie porque tampoco comprendi, entonces lo que hice fue solucionarlo con Exit cita().jajjaja

cita:
"pero no conozco el nombre del control sobre el que voy a actuar (y que esta dentro de B0,B1,B2...B36) ya que esto depende del valor de una condición que será la que me indique sobre que control actuar y no puedo utilizar una instrucción Select Case...end Select. Tengo que rreconstruir el nombre del control dinamicamente en el código del procedimiento. "
Exit Cita()
end cita:
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por Jose (1 intervención) el 19/01/2009 23:50:15
Hola,
continuando con mi problema y sin responder a lo que no quiero comprender, le diré que el codigo que me han mandado no funciona, NO HACE LO QUE YO DESEO. .El primero me pone todos los TextBox a 0 (u otro valor), y el que ha modificado en el siguiente post no funciona.
Imaginemos (para no tener que venir hacia atrá) que construyo un formulario en el cual inserto campos de varios typos (Button, TectBox, Label etc.) entre los nombres de estos campos (controles) hay 37 TextBox cuyos nombres van de (B0,B1,B2..B36).
Algunas veces tengo que ponerlos todos a 0 (el primer código que se me ha mandado puede servir), pero otras veces yo deseo saber que valor hay en el textBox (B0), otras el valor del (B4) y así. según el desarrollo del programa estos controles toman diferentes valores(ej. 0 a 60) y segun el valor que hay en esos controles hago una afectación a otra serie de controles (A0,A1,A2...A36)
Independientemente de si hay muchos o pocos controles, lo que deseo es (conociendo el nombre de los controles puesto que ya los cree), es a través del código en un lazo for...Next, construir el nombre de esos controles (B0 a B36), mirar el valor que tiene y en funcion de eso tomar una decisión. Lo que no quiero es tener que repetir 37 veces (si B0 = 4 entonces hacer...);deseo hacerlo con un lazo for...Next.
Les agradezco de antemano el trabajo por responderme y lamento que mi larga ausencia en un pais de lengua francesa haya dado lugar a que no me pueda expresar de forma a hacerme comprender, pero así son las cosas. Si en algo les incomodé les pido disculpas y les agradezco su colaboración.

Un saludo

José
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por Jose (38 intervenciones) el 20/01/2009 00:04:12
Esto es lo que quiero reemplazar por un lazo for pero como tengo muchos mas controles TextBox que los abajo mencionados el código enviado no sirve.

Private Sub Reset_S()
Me.S0.Text = 0 : Me.S1.Text = 0 : Me.S2.Text = 0
Me.S3.Text = 0 : Me.S4.Text = 0 : Me.S5.Text = 0
Me.S6.Text = 0 : Me.S7.Text = 0 : Me.S8.Text = 0
Me.S9.Text = 0 : Me.S10.Text = 0 : Me.S11.Text = 0
Me.S12.Text = 0 : Me.S13.Text = 0 : Me.S14.Text = 0
Me.S15.Text = 0 : Me.S16.Text = 0 : Me.S17.Text = 0
Me.S18.Text = 0 : Me.S19.Text = 0 : Me.S20.Text = 0
Me.S21.Text = 0 : Me.S22.Text = 0 : Me.S23.Text = 0
Me.S24.Text = 0 : Me.S25.Text = 0 : Me.S26.Text = 0
Me.S27.Text = 0 : Me.S28.Text = 0 : Me.S29.Text = 0
Me.S30.Text = 0 : Me.S31.Text = 0 : Me.S32.Text = 0
Me.S33.Text = 0 : Me.S34.Text = 0 : Me.S35.Text = 0
Me.S36.Text = 0
End Sub

Private Sub Reset_H()
Me.H0.Text = 0 : Me.H1.Text = 0 : Me.H2.Text = 0
Me.H3.Text = 0 : Me.H4.Text = 0 : Me.H5.Text = 0
Me.H6.Text = 0 : Me.H7.Text = 0 : Me.H8.Text = 0
Me.H9.Text = 0 : Me.H10.Text = 0 : Me.H11.Text = 0
Me.H12.Text = 0 : Me.H13.Text = 0 : Me.H14.Text = 0
Me.H15.Text = 0 : Me.H16.Text = 0 : Me.H17.Text = 0
Me.H18.Text = 0 : Me.H19.Text = 0 : Me.H20.Text = 0
Me.H21.Text = 0 : Me.H22.Text = 0 : Me.H23.Text = 0
Me.H24.Text = 0 : Me.H25.Text = 0 : Me.H26.Text = 0
Me.H27.Text = 0 : Me.H28.Text = 0 : Me.H29.Text = 0
Me.H30.Text = 0 : Me.H31.Text = 0 : Me.H32.Text = 0
Me.H33.Text = 0 : Me.H34.Text = 0 : Me.H35.Text = 0
Me.H36.Text = 0
End Sub
Procedimiento en VBA (Excel2003) que funciona perdectamente en el programa (Excel2003)

Private Sub BTN1_45(N)
Dim I As Integer, R As String, S As String, A As String
Dim K As Integer, L As Integer, CuentaMise As Integer, CuentaGana As Integer
Dim Cuenta30 As Integer, Cuenta60 As Integer, Repite3 As Integer
Dim Respuesta
CuentaMise = 0: CuentaGana = 0
Cuenta30 = 30
Cuenta60 = Val(Me.TOPEJUEGO)
Repite3 = Val(Me.REPETICIONES)
For I = 0 To 36
R = "R" & Trim$(Str$(I))
S = "S" & Trim$(Str$(I))
A = "A" & Trim$(Str$(I))
If Val(Me(R).Caption) > 0 Then
CuentaMise = CuentaMise + Val(Me(A).Caption)
If I = N Then
CuentaGana = CuentaGana + (36 * Val(Me(A).Caption))
If Me.UNAVEZ = True Then
Me(R).Caption = 0
Me(R).BackColor = &HFFFFFF
Me(S).Caption = 0
Else
Me(R).Caption = 0
Me(R).BackColor = &HFFFFFF
End If
End If
End If
Next
'Llamada al Procedimiento para el calculo de apuestas
'Call CALCULODEAPUESTAS
Call CALCULADEAPUESTASIGUALADAS
TOTALGIROS = Val(TOTALGIROS) + 1
Me.APUESTA = CuentaMise
Me.GANADO = CuentaGana
Me.BALANCE = Val(Me.BALANCE) + CuentaGana - CuentaMise
If Val(Me.PERDIDAMAXIMA) > Val(Me.BALANCE) Then Me.PERDIDAMAXIMA = Me.BALANCE
If Val(Me.GANANCIAMAXIMA) < Val(Me.BALANCE) Then Me.GANANCIAMAXIMA = Me.BALANCE
If Val(Me.BALANCE) > 0 Then Me.POSITIVO = Val(Me.POSITIVO) + 1
If Val(Me.BALANCE) < 0 Then Me.NEGATIVO = Val(Me.NEGATIVO) + 1
'Me.CUMULO = Val(Me.BALANCE) + CuentaGana - CuentaMise
Me.CUENTAHOTNUMBERS.Caption = Str$(CuentaMise)
If Val(Me.APUESTAMAXIMA) < Val(Me.CUENTAHOTNUMBERS.Caption) Then Me.APUESTAMAXIMA = Me.CUENTAHOTNUMBERS.Caption
'Controla si se han pasado los giros de 30
'Modifico y pongo en comentario para tener en cuenta todas las jugadas
If Val(Me.CUENTASALIDOS.Caption) >= Cuenta30 Then
Call RESETSALIDOS
End If
'Controla si se han pasado las jugadas del HotNumber
For I = 0 To 36
R = "R" & Trim$(Str$(I))
If Val(Me(R).Caption) >= Cuenta60 Then
Me(R).Caption = 0
Me(R).BackColor = &HFFFFFF
End If
Next
'Aumenta el contador de 1
Me.CUENTASALIDOS.Caption = Str$(Val(Me.CUENTASALIDOS.Caption) + 1)
'Aqui modifico para tener en cuenta todas las jugadas
For I = 0 To 36
S = "S" & Trim$(Str$(I))
If I = N Then
Me(S).Caption = Str$(Val(Me(S).Caption) + 1)
End If
Next
'Call ANOTAPERMANENCIA(N)
'Ve si existe un HotNumber
For I = 0 To 36
S = "S" & Trim$(Str$(I))
R = "R" & Trim$(Str$(I))
If Val(Me(R).Caption) > 0 Then
Me(R).Caption = Str$(Val(Me(R).Caption) + 1)
Select Case I
Case 1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36
Me(R).BackColor = &HFF&
Case 2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35
Me(R).BackColor = &H0&
Case Else
Me(R).BackColor = &H0&
End Select
End If
If Val(Me(S).Caption) >= Repite3 Then
If Val(Me(R).Caption) = 0 Then
Me(R).Caption = "1"
End If
End If
Next
Me.J = ""
For I = 0 To 36
R = "R" & Trim$(Str$(I))
If Val(Me(R).Caption) > 0 Then
Me.J = Trim$(Me.J) & Str$(I) & " - "
End If
Next
DoEvents
If Me!PAUSAENTEST = True Then
Respuesta = MsgBox("¿Continuar con pausa?", vbYesNo + vbCritical + vbDefaultButton2, "Pausa en comprobación")
If Respuesta = vbNo Then Me!PAUSAENTEST = False
End If
End Sub

Espero de esta foema hacerme comprender

Un saludo

José
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Construir nombre de campo

Publicado por Jose (38 intervenciones) el 20/01/2009 02:43:59
Hola,
He estado trabajando el código que se me mando y CASI he encontrado lo que buscaba
Aquí pongo el código que he encontrado

Dim J As String, P As String
Dim I As Integer
Dim S As Object
For I = 1 To 17
J = "J" & Trim$(Str$(I))
P = "P" & Trim$(Str$(I))
For Each S In Me.Controls
If TypeOf S Is TextBox Then
If (S.name = J) OrElse (S.name = P) Then
S.Text = "" 'funciona
'Exit For
End If
End If
Next
Next
Me.J18.Text = ""

Para que fuese como yo deseo habría que quitar lo siguiente

For Each S In Me.Controls
If TypeOf S Is TextBox Then
If S.name = J Then
S.Text = 11 'funciona
'Exit For
End If
End If
Next
Y que siguiese funcionando pues en VBA el codigo es mas corto
Dim I as Integer,J as String
For I = 1 to 17
J = “J” & Trim$(Str$(I))
Me(J) = 11
Next

Que es lo que yo deseo.
De cualquier forma con el código expuesto arriba ya me funciona

Un saludo y gracias por su colaboración

José
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar