VB2005のLABEL等のコントロールの表示速度がVB6時代より遅い

このQ&Aのポイント
  • VB2005のLABEL等のコントロールの表示速度がVB6時代よりかなり遅いように感じます。実際遅いのですが、早くする方法はございますか?
  • LABELを80個ほど並べて実行してもLABELが右から左へぱらぱらと表示されますのでプログラムの影響ではないと思います。
  • タイマーで1秒周期でデータをファイルに書き込んでいるのですが、表示が終わるまでタイマーイベントが待たされるため、フォームの切り替えで1秒周期に歯抜けが生じることがあります。改善策をご存知の方がいらっしゃいましたら教えてください。
回答を見る
  • ベストアンサー

VB2005のLABEL等のコントロールの表示速度がVB6時代よりかな

VB2005のLABEL等のコントロールの表示速度がVB6時代よりかなり遅いように感じます。 実際遅いのですが、早くする方法はございますか? 例えば何もコードを書いていない新規フォームにLABELを80個ほど並べて実行しても LABELが右から左へぱらぱらと表示されますのでプログラムの影響ではないと思います。 表示は我慢するとして、タイマーで1秒周期でデータをファイルに書き込んでいるのですが表示が終わるまで タイマーイベントが待たされるようで、そのフォームの切り替えを何度か行うと1秒周期のデータ書き込みに に歯抜けがでる時がありこれが1番困っています。 改善策をご存知の方がいらっしゃいましたら宜しくお願いいたします。

  • OVERQ
  • お礼率84% (87/103)

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

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

とりあえず歯抜けの対策です。 System.Threading.Timer を使用してください。 これを使用することで、 UIスレッドとは別のスレッドで、作業させることができます。 または、バックグラウンドワーカーを生成し、 バックグラウンドワーカーで、 ファイルへの書き込み処理を行ってください。

OVERQ
質問者

お礼

御礼が遅くなり申し訳ありません。(四苦八苦してたもので) 結果から言うとうまくいきました! 下記コードのようにバックグラウンドワーカーを作成したところ、1秒ごとのCSV書き出しが 100%歯抜けになることなく動作しています。色々テストをして、どんなに画面表示を重くしても問題ありません。 この度は有難う御座いました。 Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Static T1 As Integer Do T1 = timeGetTime Call DataLogging() 'CSV出力処理 System.Threading.Thread.Sleep(1000 - (timeGetTime - T1)) '1秒からCSV出力処理にかかった時間を引き、その間Threadスリープ Loop While gblnEndFlg = False End Sub

関連するQ&A

  • VBのタイマーコントロールについて

    VB2005のタイマーコントロールで疑問があります。 ピクチャーボックスコントロールにラベルを貼り付けて タイマーコントロールで文字がスクロールする プログラムを作ったのですが、 タイマーコントロールのインターバルを10msから120msまで 500回タイマーのイベントをカウントしたタイムとストップウォッチで 計ったタイムを比べたらズレが生じることが分かりました。 人間の手で計っていますが、計測方法としては、タイマーをスタートするボタンと同時にストップウォッチのスタートを押し、カウンターが500回で止まった時点でストップウォッチを止める方法でWindowXPでCPUがCore2 DuoのパソコンとWindowsMeでCPUがPentiumIIIのノートパソコンで下記のように計測しました。 WindowsXP 10ms…8秒24、20ms…15秒84、30ms…15秒82、40ms…24秒64、50ms…31秒60、60ms…31秒72、70ms…41秒21、80ms…47秒40、90ms…47秒32 後省略 WindowsMe 10ms…28秒25、20ms…28秒21、30ms…28秒10、40ms…28秒23、50ms…28秒28、60ms…57秒20、70ms…57秒43、以下ほぼ一緒なので省略110ms…56秒93でした。 その後、VBのヘルプの検索で、Windowsのタイマーの精度は55msとあるのを発見したのですが、WindowsMeのノートパソコンでは、55msの精度にあったデータが帰ってきたのですが、 WindowsXPのパソコンは、どう見ても内部精度は違うような結果に見えます。 どなたかタイマーの精度について知っておられる方、教えてもらえますか? よろしくお願いします。

  • Labelコントロールで"&"が"_"に変換される

    こんにちは。 いつもお世話になっております。 早速ですが質問させて下さい。 内容はタイトル通りなのですが、 Labelコントロールのキャプションに"&"をセットすると "_"に置き換わってしまいます。 --------------------------------------------- Private Sub Command1_Click() Label1.Caption = "test & test" Debug.Print "test & test" Debug.Print Label1.Caption   End Sub --------------------------------------------- 上記でフォームのラベルには"test _test"と表示されてしまいます。 Debug.Printを使用した結果は"test & test"と表示されるのですが。 原因をご存知の方がみえましたらご教示下さい。 <環境> Windows 2000 , VB6.0

  • 【VB2005】タイマーイベント

    フォームに例えば、Labelが仮に3つあります。 タイマーのイベント使って、下記のような条件のコードが 書きたいのですが、Labelをたぶん配列にしてどうこうするのが 理解できてなくて困ってます。 ・手順 (1) ↓タイマー処理(1秒間隔) (2) Label1~Label3までの背景色をすべてシステムカラーにする (3) Label1~Label3のどれかをランダムで、背景色を赤にする (4) また(1)の処理に戻る どうしても判らないのでアドバイスお願いします。

  • C#のlabelの表示について

    C#のlabelの表示について カテ違いですが、C#のカテゴリがないのでここで質問させていただきます。 以下の時刻を表示するプログラムを作成したのですが、        //現在の時刻を取得  DateTime dt = DateTime.Now; int Second_1 = dt.Second % 10; int Second_2 = dt.Second / 10; int Minute_1 = dt.Minute % 10; int Minute_2 = dt.Minute / 10; int Hour_1 = dt.Hour % 10; int Hour_2 = dt.Hour / 10; label1.Text = Second_1.ToString(); label2.Text = Second_2.ToString(); label3.Text = Minute_1.ToString(); label4.Text = Minute_2.ToString(); label5.Text = Hour_1.ToString(); label6.Text = Hour_2.ToString(); if (int.Parse(label1.Text) == 0 && int.Parse(label2.Text) == 0) { int a; for (a = 0; a < 10; a++) { pictureBox4.Top += 1; System.Threading.Thread.Sleep(30); } for (a = 0; a < 50; a++) { pictureBox4.Top += 5; System.Threading.Thread.Sleep(10); } pictureBox4.Top = 12; } label1は「秒」の1の位、 label2は「秒」の10の位、 pictureBox4は「分」の1の位の画像を表示しています。 pictureBoxとlabelを重ねて、画像の上に時刻を表示しています。 秒が0になったとき(分の位が一つ上がるとき)、 分の位の画像を移動させて(forループ2つ)再び元の位置に戻しているのですが(pictureBox4.Top = 12;) そのとき秒が「00」とはならず「59」のままで、このループが終わると「00」を飛ばして「01」となります。 ちなみにこの部分はタイマーで0.2秒ごとに回しています。 原因がわかりませんので、ご教授願います。 また、ループには概算で0.8秒かかりますが、この間、タイマーの呼び出しは実行されているのでしょうか? 加えて、pictureBox4.Topの値を動かしていますが、重ねて配置しているlabelも一緒に動いてくれます。 いろいろなサイト様を参考に、 this.label3.Parent = this.pictureBox4; と親コントロールをFormから変更したのですが、このためでしょうか? 変な表現がありましたらご容赦ください。 よろしくお願いします。

  • textboxとLabelを動的に変更する

    VB.netとaspで開発しています。 VB.netでDBからデータを取得して、画面に値を表示する際に 値が入っていたらLabelコントロールで値を表示し、入っていなかったらtextboxコントロールを表示させたいのですが、やり方がわかりません。 ご存知の方、よろしくお願いします。

  • Labelコントロールの(左右)余白について

    最近になってMicrosoft Visual Basic 2008 (ProfessinaolEdition)を触り始めたばかりです。 「Windowsフォームアプリケーション」で作成しています。 Labelコントロールって、TextBoxと比べて、コントロール内(左右)に少し余白がありますよね?Paddingプロパティを0にしてもこの余白はそれ以上小さくなってくれません。 これを、TextBoxと同じぐらいのギリギリ右に寄せて表示することはできないものでしょうか。 それをやろうとすると、Labelを2つ重ねたり、またはカスタムコントロールを作る等の方法しかないでしょうか。 それとも、私が何か凄い勘違いや見落としをしているのでしょうか?? ご指摘いただけるか、或いは回避方法等をご存じの方、おられましたらお願いします。

  • VB2008でユーザーコントロールのイベントについて

    VB2008でユーザーコントロールのイベントについて 作成したユーザーコントロールを(1)フォームに配置した時のみ実行される (2)フォームを実行した時のみ実行される それぞれ処理を分けたいのですが、適切なイベントが見つかりません。 何か区分けのできる方法はあるのでしょうか? 何方か教えていただけませんか

  • VB.NET ToolTipの表示条件について

    VB2010、Winアプリ こんにちわ。 フォーム上に存在するTextBoxやLabelコントロールに ToolTipを表示させています。 ToolTipを表示させるための条件とかって設定出来ないんでしょうか? その条件というのは 「TextBoxやLabelコントロールの幅以上のテキストが入力されている」 場合のみToolTipを表示させたいというものです。 思いついた方法としては コントロールの幅と入力文字数を係数として格納しておき MouseのHoverとかのイベント時に文字数チェックを行い その判定により表示するかしないかを決定する、 というものぐらいしか自分には思いつきませんでした。 もっとスマートな方法があれば教えていただければと思います。 よろしくお願いします。。。 (TextBoxのWordWrapプロパティで折り返しを判断しているものを 見れれば楽にできるのかなぁなんて思ったりもしましたが どう判断しているかわからなかったもので。。。)

  • VB タイマーコントロールをインデックスを使用し130個作成しました。

    VB タイマーコントロールをインデックスを使用し130個作成しました。 タイマーイベントの表記はどのようにするのでしょうか。 Private Sub Timer(0)_Timer()  ~ End Sub とするとエラーになります。タイマーコントロールのインデックスの使い方が分かりません。よろしくお願いします。

  • VBのフォーム表示について

    VB初心者なので教えてください。 VB5.0でフォームを表示して5秒後に他のフォームを表示したい のですが、どうすればよいのでしょうか? よろしくお願いします。

専門家に質問してみよう