Realizar otra vez y dar el resultado del IF

Iniciado por carlosuc99, 27 Enero 2013, 11:28 AM

0 Miembros y 1 Visitante están viendo este tema.

carlosuc99

Tengo este If:

Código (vbnet) [Seleccionar]
If lights.Value(LightType.Landing) = True Then
                Me.RichTextBox1.Text = "Landing Lights ON"
            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?

Eleкtro

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 (vbnet) [Seleccionar]
If lights.Value(LightType.Landing) = true  Then Me.RichTextBox1.Text = "Landing Lights ON" else Me.RichTextBox1.Text = "Landing Lights OFF"

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


Saludos








carlosuc99

Bueno, aquí tenéis más código:

Código (vbnet) [Seleccionar]
Private Sub FlighInfo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Try
            If lights.Value(LightType.Landing) = True Then
                Me.RichTextBox1.Text = "Landing Lights ON"
            End If
        Catch ex As Exception

        End Try
    End Sub
    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged

    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.

Eleкtro

#3
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 (vbnet) [Seleccionar]

   Private Sub FlighInfo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
           Try : If lights.Value(LightType.Landing) = True Then Me.RichTextBox1.Text = Me.RichTextBox1.Text & " " & "Landing Lights ON" : Catch : End Try
   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 (vbnet) [Seleccionar]


     Dim Lights_Count as int32 = 0 ' esto en las declaraciones, fuera de los subs

     Private Sub FlighInfo_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
          Try : If lights.Value(LightType.Landing) = True Then Lights_Count +=1 : Add_Lights_ON() : _
          Catch : End Try
      End Sub

   private sub Add_Lights_ON()
        Dim light_string as string = nothing
        for each num in Lights_Count : light_string = light_string & " " & "Landing Lights ON" : NEXT
        Me.RichTextBox1.Text = light_string
   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.








$Edu$

Código (vb) [Seleccionar]

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 (vb) [Seleccionar]

RichTextBox1.Text += Environment.NewLine & "Landing Lights ON"

carlosuc99

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"

$Edu$


Eleкtro

#7
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.








carlosuc99

#8
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.

TomaSs

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 ;)