Autor
|
Tema: Accion sobre un array de controles (labels) (Leído 1,873 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
|
10,840
|
22 Diciembre 2010, 21:25 pm
por Edu
|
|
|
[SNIPPET-VB6] DrawGraph - Dibujar sobre controles.
Programación Visual Basic
|
F3B14N
|
0
|
1,620
|
12 Marzo 2011, 14:48 pm
por F3B14N
|
|
|
Duda sobre una accion concreta en los Sims 3
Juegos y Consolas
|
crazykenny
|
4
|
3,010
|
18 Noviembre 2012, 11:44 am
por crazykenny
|
|
|
Sobre controles creados de forma dinamica
.NET (C#, VB.NET, ASP)
|
rulovive
|
5
|
4,055
|
28 Mayo 2018, 19:54 pm
por rulovive
|
|
|
Array de Controles con Eventos en VB.NET
.NET (C#, VB.NET, ASP)
|
bybaal
|
3
|
4,006
|
20 Enero 2021, 06:50 am
por bybaal
|
|