Visual Basic - Acensor

Life is soft - evento anual de software empresarial
<<>>
 
Vista:

Acensor

Publicado por Marta G (1 intervención) el 17/10/2024 20:38:00
Estoy estudiando la carrera de programación y me han pedido que haga un simulador de un ascensor donde se cotiza un BTN y se mueve hacia esa posición, pero no entiendo cómo hacerlo. Si alguien pudiera apoyarme con una pequeña explicación. Al parecer tengo que hacer dos temporizadores para bajar uno y que el otro suba, pero no entiendo cómo implementarlo

' Mover el ascensor
Private Sub MoverElevador(pisoDestino As Integer)
'Dim pisoActual As Integer = 1
Dim alturaPiso As Integer = 40
Dim posicionInicial As Integer = labelAscensor.Top
' Simular movimiento del ascensor
While pisoActual <> pisoDestino
If pisoActual < pisoDestino Then
pisoActual += 1
Else
pisoActual -= 1
End If

labelAscensor.Top = posicionInicial - (pisoActual - 1) * alturaPiso
System.Threading.Thread.Sleep(200)
Me.Refresh()
End While
End Sub

' Evento de Click en los botones de piso
Private Sub Boton_Click(sender As Object, e As EventArgs)
Dim btn As Button = CType(sender, Button)
Dim pisoDestino As Integer = Integer.Parse(btn.Text.Replace("Piso ", ""))
MoverElevador(pisoDestino)
End Sub

' Evento que se dispara al hacer clic en un botón de piso
Private Sub BotonPiso_Click(sender As Object, e As EventArgs)
Dim boton As Button = CType(sender, Button)
Dim pisoSeleccionado As Integer = Integer.Parse(boton.Text.Replace("Piso ", ""))

' Mover el ascensor al piso seleccionado
MoverElevador(pisoSeleccionado)
End Sub

'Timer 1 de elevador
' Evento Tick del Timer para subir
Private Sub TimerSubir_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If pisoActual < 4 Then
pisoActual += 1 ' Aumentar el piso actual
labelAscensor.Top = posicionInicial - (pisoActual - 1) * alturaPiso ' Mover el ascensor hacia arriba
Else
Timer1.Stop() ' Detener el Timer al llegar al último piso
End If
End Sub

' Evento Tick del Timer para bajar
Private Sub TimerBajar_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
If pisoActual > 1 Then
pisoActual -= 1 ' Disminuir el piso actual
labelAscensor.Top = posicionInicial - (pisoActual - 1) * alturaPiso ' Mover el ascensor hacia abajo
Else
Timer2.Stop() ' Detener el Timer al llegar al primer piso
End If
End Sub
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
sin imagen de perfil
Val: 145
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Acensor

Publicado por Sah1d Ra (194 intervenciones) el 11/03/2025 18:29:56
Saludos, Vi tu código y son a mi parecer muchas cosas por controlar, a mi en lo personal me gusta
poner el mínimo código posible por lo que controlo menos cosas.

Te dejo lo siguiente espero te sirva, Controles dentro del FORM:
Check1 (Index = 0, Left = 120, Tp = 360)
VScroll1 (Left = 1440, Max = 13, Min = 1, Top = 120, Value = 1)
Timer1 (Interval = 1000)

Código del FORM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Option Explicit
 
Private Sub Check1_Click(Index As Integer)
 If Index = VScroll1.Value - 1 Then Exit Sub
 If InStr(Timer1.Tag, ";" + CStr(Index) + ";") = 0 Then
  Timer1.Tag = Timer1.Tag + ";" + Check1(Index).Tag + ";"
 Else
  Timer1.Tag = Replace(Timer1.Tag, ";" + CStr(Index) + ";", "")
 End If
End Sub
 
Private Sub Form_Load()
 Dim Tempo As Integer
 For Tempo = 0 To 12
  If Tempo > 0 Then Load Check1(Tempo)
  Check1(Tempo).Caption = "Piso " + CStr(13 - Tempo)
  Check1(Tempo).Tag = CStr(Tempo + 1)
  Check1(Tempo).Visible = True
  If Tempo > 0 Then Check1(Tempo).Top = Check1(Tempo - 1).Top + Check1(Tempo - 1).Height + 15
  VScroll1.Value = Tempo + 1
 Next Tempo
End Sub
 
Private Sub Timer1_Timer()
 If Timer1.Tag <> "" Then
  Dim Texto As String
  Texto = Mid(Timer1.Tag, 2): Texto = Mid(Texto, 1, InStr(Texto, ";") - 1)
  If VScroll1.Value > Val(Texto) Then
   VScroll1.Value = VScroll1.Value - 1
  ElseIf VScroll1.Value < Val(Texto) Then
   VScroll1.Value = VScroll1.Value + 1
  Else
   Timer1.Tag = Replace(Timer1.Tag, ";" + Texto + ";", "")
   Check1(Val(Texto) - 1).Value = 0
  End If
 End If
End Sub

Te recomiendo usar la indentación para una mejor comprensión de código.

Felices líneas de programac10n. (221)
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
sin imagen de perfil
Val: 145
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Acensor

Publicado por Sah1d Ra (194 intervenciones) el 12/03/2025 18:50:37
En el Check1 falto especificar Style = 1 Graphical
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