| 
	
		|  Autor | Tema: Accion sobre un array de controles (labels)  (Leído 2,087 veces) |  
	| 
			| 
					
						| Güan 
								
								 Desconectado 
								Mensajes: 63
								
								   | 
 
   Wenas a todos, vereis, eske estaba haciendo un juegecillo, donde un shape qe se mueve, y al tocar un label, "label1" (hay 20, index del 0 al 19) te salte un msgbox. Esto lo comprueba un timer con un interval de 1, y no me apetece escribir 20 codes iguales. Sin matriz, el code (para 1 label) sería: Código: Private Sub Timer1_Timer()If Shape1.Top >= Label1.Top And Shape1.Top + Shape1.Height <= Label1.Top + Label1.Height Then
 If Shape1.Left >= Label1.Left And Shape1.Left + Shape1.Width <= Label1.Left + Label1.Width Then
 MsgBox "OK"
 End If
 End If
 End Sub
 
 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 Shape1.Move X - 495 / 2, Y - 495 / 2
 End Sub
Pero no tengo mucha idea sobre matrices de controles, y nose qe hay qe poner junto con label1 para qe funcione con todos por igual... Sabeis como se haría? Gracias
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| DrakoX 
								
								 Desconectado 
								Mensajes: 191
								
								   | 
 
podrias hacerlo con un For, prueba de la siguiente manera Private Sub Timer1_Timer()For i = 0 To 19
 If Shape1.Top >= Label(i).Top And Shape1.Top + Shape1.Height <= Label(i).Top + Label(i).Height Then
 If Shape1.Left >= Label(i).Left And Shape1.Left + Shape1.Width <= Label(i).Left + Label(i).Width Then
 MsgBox "OK"
 End If
 End If
 Next i
 End Sub
salu2 y suerte salu2
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Güan 
								
								 Desconectado 
								Mensajes: 63
								
								   | 
 
mmm.... no, no me sirve, no me da error, pero ignora cuando pasa por encima... el problema del codigo qe me has dado creo qe es qe el timer es unicamente de una milésima de segundo, y en cada milésima tiene qe comprobar los 10 uno a uno, por tanto aparte de qe senota qe se relentiza un poco, cada vex qe pasa una milésima, i pasa a ser 0 otra vez, por tanto no llega a comprobar las 20. no se puede poner, por ejemplo label1(0 to 19).top , o algo asi? tiene qe haber una forma mas facil, sin chapuzas...   |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| DrakoX 
								
								 Desconectado 
								Mensajes: 191
								
								   | 
 
t animas a pasarme el code,así veo bien como tienes
 el tema de los arrays
 
 salu2
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Güan 
								
								 Desconectado 
								Mensajes: 63
								
								   | 
 
Lo he vuelto a revisar, tenia un problema en la ecuación, para qe salte el mensaje cuando se toqen, tu codigo ya me funciona, qeda así: Private Sub Timer1_Timer()For i = 0 To 15
 If Shape1.Top > Label1(i).Top - Shape1.Height + 1 And Label1(i).Top + Label1(i).Height - 1 > Shape1.Top Then
 If Shape1.Left > Label1(i).Left - Shape1.Width + 1 And Label1(i).Left + Label1(i).Width - 1 > Shape1.Left Then
 MsgBox "OK"
 End If
 End If
 Next
 End Sub
 
 Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 Shape1.Move X - 495 / 2, Y - 495 / 2
 End Sub
 
   Pero vamos, qe yo veo un poco chapuza tener qe ir contando todo el numero de labels hasta llegar al qe se toca cada 10 milesima de segundo (le he cambiado el intervalo de tiempo a 10, porqe sino en la 9 ya no saltaba nunca, y en la 8, solo a veces... De todas formas tiene qe aver algo mas sencillo para hacerlo, pero de todos modos gracias por las respuestas |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| DrakoX 
								
								 Desconectado 
								Mensajes: 191
								
								   | 
 
yo no revise tu code ni nada,simplemente te di una forma de hacerlo,
 
 seguramente alla una forma mejor de hacerlo,
 pero esto es lo que s eme viene a la kabeza
 
 salu2
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Güan 
								
								 Desconectado 
								Mensajes: 63
								
								   | 
 
   ei gentes, me ha surgido otro problemilla qe tiene qe ver con el codigo anterior.    aver, yo qiero qe cuando el shape toqe un label cualqiera por la parte de arriba, el interruptor Xarr se encienda, y cuando no lo toqe, se apague. El codigo qe uso, aunqe para esto no me sirve es:  Private Sub Timer1_Timer()Dim i As Integer
 For i = 0 To 19
 If Shape1.Top <= Label1(i).Top + Label1(i).Height And Label1(i).Top <= Shape1.Top Then
 If Label1(i).Left <= Shape1.Left And Label1(i).Left + Label1(i).Width >= Shape1.Left + Shape1.Width Then
 Xarr = True
 else
 Xarr = False
 End If
 End If
 Next
 End Sub
   Esta vez la ecuación qe uso para qe avise cuando se tocan si qe esta bien (xDD, comprovada). El problema de este código es qe el interruptor solo se enciende cuando coinciden el shape el label de index, llamemoslo x. Como los labels estan esparcidos, no puede coincidir el shape con todos a la vez, por tanto el interruptor esta siempre apagado, nose si me explico. Bueno, aver si alguien me puede ayudar un pokillo con esto, porqe me faltan ideas.    |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Problemas con Labels y cadenas en C#
							« 1 2 » .NET (C#, VB.NET, ASP)
 | dark_headhunter | 12 | 11,454 |  22 Diciembre 2010, 21:25 pm por Edu
 |  
						|   |   | [SNIPPET-VB6] DrawGraph - Dibujar sobre controles. Programación Visual Basic
 | F3B14N | 0 | 1,812 |  12 Marzo 2011, 14:48 pm por F3B14N
 |  
						|   |   | Duda sobre una accion concreta en los Sims 3 Juegos y Consolas
 | crazykenny | 4 | 3,339 |  18 Noviembre 2012, 11:44 am por crazykenny
 |  
						|   |   | Sobre controles creados de forma dinamica .NET (C#, VB.NET, ASP)
 | rulovive | 5 | 4,877 |  28 Mayo 2018, 19:54 pm por rulovive
 |  
						|   |   | Array de Controles con Eventos en VB.NET .NET (C#, VB.NET, ASP)
 | bybaal | 3 | 4,649 |  20 Enero 2021, 06:50 am por bybaal
 |    |