Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: carlosuc99 en 27 Enero 2013, 11:28 am



Título: Realizar otra vez y dar el resultado del IF
Publicado por: carlosuc99 en 27 Enero 2013, 11:28 am
Tengo este If:

Código
  1. If lights.Value(LightType.Landing) = True Then
  2.                Me.RichTextBox1.Text = "Landing Lights ON"
  3.            End If

El valor lights.Value(LightType.Landing) cambia. El problema que tengo es que cuando ejecuta el If me pone en el RichTextBox1 el texto. Si cambio el valor de la variable de ejecución del If el texto que ya escribió sigue escrito en el If. Pero si vuelvo a poner el valor de la variable de ejecución del If en True. Como ya escribió el texto anteriormente no lo vuelve a poner. Cómo puedo hacer para que si la variable vuelve a cambiar a True me ponga otra vez el texto?


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: Eleкtro en 27 Enero 2013, 11:51 am
Perdona pero no se entiende muy bien la explicación que dás, y muestras muy poco código, el problema no debe estar en el IF sinó en el modo en que lo empleas en tú código... si la comprobación solo se ejecuta una vez, obviamente no va a volver a cambiar de valor una segunda vez después de haberse comprobado ya...

Quizás esto te sirva:

Código
  1. If lights.Value(LightType.Landing) = true  Then Me.RichTextBox1.Text = "Landing Lights ON" else Me.RichTextBox1.Text = "Landing Lights OFF"

Código
  1. while not 0 = 1
  2.   If lights.Value(LightType.Landing) = true Then Me.RichTextBox1.Text = "Landing Lights ON" else Me.RichTextBox1.Text = "Landing Lights OFF"
  3. end while

Saludos


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: carlosuc99 en 27 Enero 2013, 13:14 pm
Bueno, aquí tenéis más código:

Código
  1. Private Sub FlighInfo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  2.        Try
  3.            If lights.Value(LightType.Landing) = True Then
  4.                Me.RichTextBox1.Text = "Landing Lights ON"
  5.            End If
  6.        Catch ex As Exception
  7.  
  8.        End Try
  9.    End Sub
  10.    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
  11.  
  12.    End Sub

Si yo pongo lights.Value(LightType.Landing) en true, en el RichTextBox1 me pone "Landing Lights ON" si yo pongo lights.Value(LightType.Landing) en false en el RichTextBox1 sigue poniendo "Landing Lights ON". Hasta aquí todo BIEN. Lo que yo quiero es que si vuelvo a poner lights.Value(LightType.Landing) en true. No me sobreescriba sobre el código anterior. Si no que me mantenga el código anterior y añada más. Ej: En el RichTextBox1 me pone "Landing Lights ON". Pues si lo vuelvo a poner en true me añada otro "Landing Lights ON" al que ya hay quedando: "Landing Lights ON Landing Lights ON". Si lo vuelvo a poner en false y luego otra vez en true me añada otro Landing Lights ON a los dos que ya hay.


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: Eleкtro en 27 Enero 2013, 13:56 pm
Si el texto del Rich siempre es el mismo y solo lo cambias para añadir más "lights ON", entonces es tán sencillo como AÑADIR el "landing lights ON" en lugar de REEMPLAZAR como estabas haciendo.

Ejemplo:
Código
  1.    Private Sub FlighInfo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  2.            Try : If lights.Value(LightType.Landing) = True Then Me.RichTextBox1.Text = Me.RichTextBox1.Text & " " & "Landing Lights ON" : Catch : End Try
  3.    End Sub


Eso es la manera más sencilla, luego puedes tener un poco más de control sobre el asunto por ejemplo así:

Código
  1.  
  2.      Dim Lights_Count as int32 = 0 ' esto en las declaraciones, fuera de los subs
  3.  
  4.      Private Sub FlighInfo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  5.           Try : If lights.Value(LightType.Landing) = True Then Lights_Count +=1 : Add_Lights_ON() : _
  6.           Catch : End Try
  7.       End Sub
  8.  
  9.    private sub Add_Lights_ON()
  10.         Dim light_string as string = nothing
  11.         for each num in Lights_Count : light_string = light_string & " " & "Landing Lights ON" : NEXT
  12.         Me.RichTextBox1.Text = light_string
  13.    end sub

Es lo mismo pero, la segunda manera te puede ayudar a añadir más cosas o en fín... tener más control sobre el string.

PD: Los codes los he hecho a mano, pero creo que no hay error de sintaxis.

Saludos.


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: $Edu$ en 27 Enero 2013, 14:33 pm
Código
  1. RichTextBox1.Text += " Landing Lights ON"

Solo cambia eso y funciona.

Pero tal vez tienes el richtexbox1 amplio, es decir multilinea y quieres hacer que cada linea nueva de "Landing lights on" quede debajo asi que en ese caso cambias por esto otro:

Código
  1. RichTextBox1.Text += Environment.NewLine & "Landing Lights ON"
  2.  


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: carlosuc99 en 27 Enero 2013, 15:21 pm
Ante todo gracias,

@$Edu$ y @EleKtro H@cker. Vuestros códigos realizan lo mismo. Pero sigue sin ser lo que quiero.

Esto lo que hace es repetir varias veces el "Landing Lights ON" cuando es true y se procesa el if. Pero yo no quiero eso.

Lo que yo quiero es que cada vez que yo pongo el true y se procese el IF. Solo se ponga el Landing Lights ON una vez. Pero si yo lo pongo en false y luego lo vuelvo a poner en true, quiero que me añada una vez más el Landing Lights ON a lo que ya había. Ej: Si yo lo pongo en true. En el RichtTextBox1 me pone "Landing Lights ON", lo pongo en false, a continuación se vuelve a poner en true, cuando se vuelva a poner en true quiero que añada 1 vez más el Landing Lights ON quedando así: "Landing Lights ON Landing Lights ON", si lo vuelvo a poner en false y luego lo vuelvo a poner en true se añade otro quedando así: "Landing Lights ON Landing Lights ON Landing Lights ON"


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: $Edu$ en 27 Enero 2013, 16:02 pm
Se me exploto el cerebro, ya vuelvo.


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: Eleкtro en 27 Enero 2013, 16:13 pm
carlosuc99,

Me he leido 2 veces tú último comentario pero por más vueltas que le doy, no le encuentro diferencia,

Porque dejando a un lado el "False", cada vez que el valor es "true", se debe agregar un "lights ON", ¿Correcto?, pues eso es lo que hacen los codes que te hemos proporcionado :-/


¿O quizás quieres esto?:

1. inicias la APP
2. haces: off, on, off. on.        (el valor sería "lights on   lights on")
3. luego haces por ejemplo:  off, on.      ¿y aquí entonces quieres que el contador reinicie y que el valor sólo séa "lights on" (una vez)?

¿Eso es lo que quieres?

EDITO: Bueno la verdad es que no le encuentro sentido si es eso, porque habría que marcar algún tipo de pauta, y pausas... es decir, marcar un margen de tiempo.


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: carlosuc99 en 27 Enero 2013, 19:25 pm
Vamos a ver, a lo mejor me explico mal.

Qué pasa con los códigos que me dejasteis?

Pongo la variable en true. Y en el RichTextBox1 se escribe Landing Lights ON, pero no es que se escriba una vez si no que cuando está seleccionado se está escribiendo continuamente. No es exacto pero mientras está seleccionado creo que se escriben 3 Landing Lights ON por segundo. Y claro eso hace que se escriban muchos mientras está seleccionado.

Yo no quiero eso. Quiero que cuando se selecciono SOLO SE ESCRIBA UNA VEZ. Y si luego lo desseleccionas y lo vuelves a poner en true. Se AÑADA UNO MAS AL QUE YA HABIA.

Me entendeis? A lo mejor os tengo que poner un video de lo que hace ahora.

PD: Umm, me acabo de dar cuenta. El valor de la variable del IF, la cojo de otra aplicación, en concreto de Flight Simulator.  Lo cojo gracias a una libería. A lo mejor es porque lo actualiza continuamente y la variable se está poniendo true cada vez que actualiza. En este caso como lo puedo arreglar? Si se puede hacer que lo inserte cuando el valor de la variable cambie me valdría. Es más, creo que sería mejor.


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: TomaSs en 27 Enero 2013, 21:20 pm
Es que, como puedo comprobar, utilizas un timer para comprobarlo en todo momento. Lo que debes hacer, debajo del if poner el enabled del timer a false, y cuando vuelves a colocar la variable del if en true, pues pones el timer en true. De esta manera solo te lo escribirá la primera vez y no seguirá comprobando con el timer.

Pero de todos modos, creo que eso que estás intentando hacer se podrá hacer directamente con los eventos adecuados. No se decirte con cuales ya que no se de que manera cambias el valor de la variable del if, pero bueno...

Espero que te sirva ;)


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: carlosuc99 en 27 Enero 2013, 22:00 pm
Oye, y como puedo hacer que ejecute el texto en el RichTextBox1 cada vez que cambie el valor de la variable a true o false?


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: 3mp3z@ndo en 27 Enero 2013, 22:16 pm
No se si te he entendido bien, pero según entiendo lo que quieres lo puedes hacer con los codigos que te han dejado, y para evitar que siga escribiendo pienso que te vendría bien volver a poner la variable a FALSE, de esta forma solo escribiria una vez, a la espera de que el valor de la variable vuelva a cambiar. En el momento que cambia a TRUE vuelves a concatenar y a poner en FALSE la variable.

Un saludo


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: carlosuc99 en 28 Enero 2013, 15:22 pm
No se si te he entendido bien, pero según entiendo lo que quieres lo puedes hacer con los codigos que te han dejado, y para evitar que siga escribiendo pienso que te vendría bien volver a poner la variable a FALSE, de esta forma solo escribiria una vez, a la espera de que el valor de la variable vuelva a cambiar. En el momento que cambia a TRUE vuelves a concatenar y a poner en FALSE la variable.

Un saludo

No puedo hacer eso porque entonces apagaría las luces del avión en el simulador.

Cómo puedo hacer para que se ejecute una función cada vez que la variable cambia a True o False?


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: carlosuc99 en 28 Enero 2013, 19:22 pm
Vale, ya lo he arreglado:

He puesto donde llamo al Offset de conexión del programa esto:

Código
  1. Dim parkBrakes As Offset(Of UShort) = New Offset(Of UShort)(&HBC8) 'Offset con el que llamo al programa
  2.    Dim lastLights As Boolean
  3.  
  4. 'Mas codigo del programa
  5.  
  6. Private Sub FlighInfo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  7.        Try
  8.  
  9.           Dim currentLights As Boolean
  10.            currentLights = lights.Value(LightType.Landing)
  11.            If currentLights <> lastLights Then
  12.                lastLights = currentLights
  13.                Dim Message2 As String = IIf(currentLights, "Landing Lights ON", "Landing Lights OFF")
  14.                RichTextBox1.Text += Environment.NewLine & (Message2)
  15.            End If
  16.        Catch ex As Exception
  17.  
  18.        End Try
  19.    End Sub
  20.    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged
  21.  
  22.    End Sub
  23.  

Pero ahora tengo una duda. Por que si defino la variable lastLights dentro del Private Sub FlighInfo no funciona? Pasa el error anteriormente mencionado, se repite el mensaje varias veces.


Título: Re: Realizar otra vez y dar el resultado del IF
Publicado por: spiritdead en 28 Enero 2013, 20:09 pm
No puedo hacer eso porque entonces apagaría las luces del avión en el simulador.

Cómo puedo hacer para que se ejecute una función cada vez que la variable cambia a True o False?

facil :) crea 1 variable auxiliar del tipo boolean, q valide si ya fue encendido o no, para que pueda repetirte la accion, de esta manera si esta prendido no se duplica, y si esta apagado realiza el encendido