2016-11-23 10 views
0

非常に長い文字列を持つニュースティッカータイプのループを作成する方法を試しています。私のコントロールは、表示される文字列変数を取るので、私は正しいシーケンスに変数を変更する必要があります。ニュースティッカーの表示

私は下の行に沿って作業していましたが、これは文字列の最後に到達するまでうまく動作します。

しかし、いったん私が最後に到達したら、どのように最初に戻って行くのかわからない。このプロセスを簡略化するコントロールを見たり、コードの実行方法を教えたりした人はいますか?

currentPosは、文字列内の位置を表す整数で、maxStringLengthは、文字iのqtyを一度に表示できる変数です。文字列はデータベースからロードされ、長さは5文字以上になります。

どのようにそこに到達するかについての提案や指針は素晴らしいでしょう。誰かがこれを行うための自由なコントロールを見つけたら、それはまた適切かもしれません。

+0

私は何かを見逃していますが、maxStringLenghtに等しいときにcurrentPosを0にリセットできませんか? – Jaxedin

+0

私はサイクリングを続けて、文字列の最後にいるときに、最初に戻ってジャンプするのではなく、文字列の最後に追加したいと思っています。終わりのないループのようなものです(テキストが円とその定数ループであると想像してください) –

+0

したがって、substrを取るたびに、文字列の最後にそれをプッシュする必要があります。例の 'MY STRING'は最初の4文字が' MY S 'になりますので、 'TRING MY S'のように最後まで押してください。それは意味がありますか? – Jaxedin

答えて

0

フォームにTimerコントロールを追加し、プロパティまたはFormloadEnabled=Trueと設定します。そのTickイベントのハンドラーを作成します。今度はLabelを追加し、必要に応じていくつかの行を追加します。

このTick

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
     Timer1.Interval = 1 'Sets the interval of the Timer speed 
     Label1.Left = Label1.Left - 3 'How much pixel will be deducted to the left of the control 
     If Label1.Left < 0 - Label1.Width Then 'Loops the strings back to right 
      Label1.Left = Width '^ 
     End If 
    End Sub 

.Interval - n.Left - n両方のハンドラは、速度を制御します。

+0

Thnks、テキストを表示するために別のコントロールを使用しているので、本当に変数に入りたいと思っています。さらに、これはすべてのテキストがなくなるまで続きます、私は本当にそれが最後の文字の最後にimmediatlyループを開始したいと思います。 –

0

これは私のために幻想的でした。

グローバル変数:

dim TickerText as string 

それから私は、SQLクエリからティッカーテキスト行を持って、データテーブルを経由してTickerText変数にそれを保存しました。

cmdstr = "SELECT TOP(1) MAX(ID) as LastID, Highlight FROM dbo.HighlightTable Group By Highlight" 

Dim da1 As New SqlDataAdapter(cmdstr, con) 
    Dim dt1 As New DataTable 

    da1.Fill(dt1) 

    Dim dv1 As DataView = dt1.DefaultView 


    For Each rowview As DataRowView In dv1 

     TickerText = rowview(1) 

    Next 

    'Salesticker is my label on the main form 
    SalesTicker.Text = TickerText 

    'this statement starts the ticker out blank, so all text comes in from the right hand side of the screen 
    SalesTicker.Left = Width 

私のタイマーコードは上記で使用されたコンキスタドールと同じです。私はちょうどそれを遅くするために間隔を35に変更しました。それはループ上で美しく実行されます。

+0

DataViewを使用する理由あなたが1つの行だけを持っていることを知っているなら、なぜFor-Eachですか? – LarsTech

+0

あなたは読者を簡単に利用することができますが、読者をループさせる必要はありませんか?私は多くの違いは見られません。 – Tammi

+0

For Each or Do - 複数のレコードを意味しますが、 'If​​ dt1.Rows.Count> 0 Then Then TickerText = dt1.Rows(0)(" Highlight ")。ToString' – LarsTech

関連する問題