• ベストアンサー

VB.NETでティッカーのようなものをスムーズに

VB.NETを使い、文字列を横に流す、いわゆるティッカーのようなものを制作しています。 Labelに文字列を入れ、TimerのTickごと(現状Interval=2)にLabel1.Left -= 2という動作をさせていて、 これを5つ(Label1~Label5)同時に行っているのですが、パソコンのスペックによってか、時々動作が重くなる時があります。 近頃のPCとしては大した処理ではないと思うのですが、どのようなコードを書いたらもっとスムーズに動かせるでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

Timer.Intervalプロパティの値はミリ秒単位です。 通常のディスプレイは60fps(≒17ミリ秒に1回のペース)で画面を表示しますので、 2ミリ秒に1回という短いペースでラベルを更新しても意味がありません。 むしろPCにとって負担なだけです。 人間の目では、リフレッシュレートが30fps(≒33ミリ秒に1回のペース)を切ると「カクついている」と感じると言われています。 以上の情報を参考に、ラベルの更新頻度を再調整してみてください。

takumiboo
質問者

お礼

なるほど、なめらかに動かそうとするあまり逆にカクカクにしていたということですね。 ありがとうございました!

関連するQ&A

  • VBでの質問です

    VBでの質問です 5分を計るタイマーを作っていて5分たつと止まるプログラムを作っていて、コンマ以下のケタが長くて、しかも止まらない( Label1.Text = n5.Subtract(Now).ToStringをLabel1.Text = n5.Subtract(Now).TotalMinutesにしてIf Label1.Text = "00:00:00" ThenをIf Label1.Text = "0" Thenにした時は止まりました)ので止まるようにするにはどこを変えればいいですか? 教えてください 以下コードです Public Class Form1 Dim n5 As DatePrivate Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load n5 = Now.AddMinutes(5) Timer1.Interval = 1000 Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = n5.Subtract(Now).ToString If Label1.Text = "00:00:00" Then MsgBox("時間になりました。") Timer1.Stop() End If End Sub 長文ですいません

  • Labelの文字をスクロールする際にちらつきが・・・

    お世話になります。 フォームにあるラベルに文字を表示し、その文字をスクロールするプログラムを作成しました。 スクロールはできるのですが、スクロールする際に文字がちらついて(早い点滅のような感じ)しまいます。 どのようにすれば、ちらつきを無くすることができますか? よろしくお願いします。 (VB2008にて作成) Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Label1.Text = "文字のスクロール" 'タイマーのインターバルで文字の進む速度が決まります Timer1.Interval = 5 Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim objG As Graphics objG = Label1.CreateGraphics() 'ここで一旦クリアしないと真っ黒になります objG.Clear(Label1.BackColor) '左端を決めて、文字を描画する objG.DrawString(Label1.Text, Label1.Font, New SolidBrush(Label1.ForeColor), iLeft, 0) '左端をずらす iLeft += 1 If iLeft > Label1.Width Then '右端までいったら戻す iLeft = 0 End If objG.Dispose() End Sub

  • VB2008でフォームに文字列をスクロールさせたい

    VB2008でフォーム上に右~左にフェイドイン、フェイドアウトする 物を作ろうとしてるのですが、どうしてもわからないので書き込みしました。 フォーム1にテキストボックスとボタンがあり、 ボタンを押す事によりテキストボックスの文字列をフォーム2の画面上に 表示し、右~左(HTMLLで言うとキーマー)に動くようにしたいのですが 右からって事は一番右の値が+だと思うのですがフォーム2は大きさを自由に 変更できるので大きさをさらに大きくした場合途中で消えてしまいます。 あと、タイマーでするとタイマーが終わるまで実行できないので 文字が流れてる間もボタンを押す事にyの値を変えて、 複数実行させたいのです。 以下が試しに書いてみたプログラムです。 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim objG As Graphics objG = Form2.CreateGraphics() objG.Clear(Form2.BackColor) objG.DrawString(Text1.Text, Label1.Font, New SolidBrush(Label1.ForeColor), iLight, 50 + Form2.Width) iLight += -1 If iLight < -50 Then Timer1.Stop() End If objG.Dispose() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Interval = 1 Timer1.Start() End Sub すみませんがよろしくお願いします。

  • vc++子ウィンドウにおけるTimer動作について

    visualc++2008について。 Form2^ form12 = gcnew Form2(); form12->Show(); の記述で子ウィンドウを表示させるところまでできたのですが、その子ウィンドウでキッチンタイマーの動作をさせようと考えています。がTimer_tickが動作しません。 ShowではなくRunじゃないかとかいろいろ考えてやってみたのですが、ことごとくエラーでした。 Timerの動作部分TickにはTimer_tickを紐付けしてあります。 Timer動作もTureで、記述コードもとりあえず this->label1->Text = DateTime::Now.ToString("HH:mm:ss"); でまず、動作しているかの確認を行っています。 わかる方ご教授お願いします。

  • 【VB6】Timerコントロールは何個まで配置できるか

    お世話になります。 VB6において、ひとつのアプリケーション中で使用できるTimerコントロールの数は、一般に何個くらいが限界でしょうか。 多数のTimerを使用することで、メソッドの呼び出しが極端に遅延するなどの影響は有り得るでしょうか。 現在作成中のアプリでは、既に15個ほどのTimerコントロールを使っています。 ここにフォームを1枚追加し、更にTimerを10個増やそうとしています。 いずれも、Interval=1000で動作させます。 Windows2000での実行が前提です。 環境やOSによって条件等異なると思いますが、どうぞお教えください。

  • VB6でラベルの文字列に色を付けたい

    VB6でラベルの文字列に色を付けたいのですが、 どうすればよいのでしょうか? Label1 = "abcde" とかだったら、bcだけ赤字にするとかできますでしょうか?

  • VB6でスロットを作成したい

    VB6歴2ヶ月の初心者です。 フォーム上に ラベルコントロールが三つ コマンドボタンが二つ タイマーコントロールが一つ あります。 タイマーのプロパティは Enabled False Interval 10 です。 スロットを作成したいのですが、 ボタン1を一回押すごとに左からスロットが回り、 最後にボタン2で動きを止めたいのです。 一応自分でも書いてみたのですが、ここで行き詰まりました。 ウワァァァァァァヽ(`Д´)ノァァァァァァン! Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False End Sub Private Sub Timer1_Timer() Dim slot As Integer slot = Int(Rnd(1) * 9 + 1) Label1.Caption = slot End Sub 思い通りに動かすにはどんなコードにしたらいいですか?

  • vb6のTEXTBOX

    教えて下さい。 vb6の環境下でTextbox、もしくはLabelのでそれに表示させる文字位置を枠内のセンターに持っていきたいのですが、その方法を教えて下さい。 横方向はプロパティ-でセンターに持っていけるのですが。縦方向がわかりません。教えて下さい。

  • VB.Net Windowsフォームでクラウド

    漠然とした事なのですが、お教え下さいませ。 クラウド上に SQL Server が動作していたとして、それをネット経由で VB.Net の Windowsフォームで作成したシステムで動作させることは可能なのでしょうか? 接続文字をクラウド上で動作する文字列に変更するだけで使えないものでしょうか? 一般的にはどうなのでしょうか? やはりASP.Net などのシステムで制作しないとダメなものなのでしょうか?

  • VB、教えてください。

    VB、教えてください。 5つのラベルが縦に並んでいます。 label0 label1 label2 label3 label4 あらかじめ、 Dim m as integer=0 を宣言し、 どうにかして "label"という文字列とmという数字をくっつけ、 label0 label1… という風にできないでしょうか。 そして label"m".text=10*m というような表示を作りたいのですが。 下記のようなイメージです。分かりにくかったらごめんなさい。 Public Class Form1 Dim m As Integer = 0 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click lblmessage(+("m").Text = 10*m m = m + 1 End Sub End Class

専門家に質問してみよう