• ベストアンサー

VB.NETでタイマー作成

タイトルのとおり、VB.NETで、指定した時間(分単位)を過ぎたときにアラームをならし、メッセージを出すというアプリを作成しています。 はじめは「Sleep」を使っていたのですが、スリープしている間は操作が利かなくなってしまうため、「Timer」コントロールを使って、数えたいと思っています。 どのようなコードが考えられるでしょうか?教えてください。

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

  • ベストアンサー
  • takasebou
  • ベストアンサー率42% (61/144)
回答No.2

そのタイマーはどの程度の精度を求められるのでしょうか? タイマーコントロールはあまり精度がよくないので(他の負荷によってイベントが起きる時間が変わる事がある)、正確なタイマーを求めたいならあまり向きません。だいたいでよければタイマーコントロールでインターバルを指定すればいいかと思われます。 とはいっても、.NETはさわった事がないのですが、 VB 6でしたら、このようなコードが有用です。 dim i as double dim j as long j = (指定した分) * 60 '[秒] i = Timer + j '[秒] do i > Timer doEvents loop Beep MsgBox "メッセージ" Timer関数は0時からの経過時間を秒単位での値を返すステートメントです。実際には倍密度で、コンマ二桁までの値(10ミリ秒単位)を取得できます。 i の値に現在から秒単位で時間をプラスして、その時間が過ぎるまで Do While で回す。 doEventsコマンドは他の処理にCPU処理をあけ渡すコマンドです(これをいれないとSleepと一緒で結局固まります)。 Do Whileを使わずタイマーコントロールを使うなら、50ミリ秒単位くらいでインターバルを指定して、グローバル変数にいれておいた値と比べて……とかすればいいと思います。 以上です。

YSK-Dream
質問者

お礼

ありがとうございました。 .NETなので、アドバイスいただいたロジックを.NET用に変えていたのですが、Timer関数はそのままつかえないらしく、いろいろ試したもののだめでした。 まだ工夫が必要なようです。 でもだいぶ参考になりました。ほんとに感謝です☆

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

Timerコントロールのintervalを指定し、タイムアウト・イベントに反応してメッセージを表示するだけです。

YSK-Dream
質問者

お礼

さっそくありがとうございました。 ただ、具体的にどうやればいいのかがわかりません。 もうちょっと考えて見ます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

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

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

  • 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】Timerコントロールは何個まで配置できるか

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

  • 続・タイマーとShowdialog(VB2010)

    タイマーコントロールについて の続きになります。 一つ方法を考えました。いくつか問題ありですが・・。 ApplicationEvent.vbの部分を Namespace My Partial Friend Class MyApplication Protected Overrides Function OnInitialize( _ ByVal commandLineArgs As _ System.Collections.ObjectModel.ReadOnlyCollection(Of String) _ ) As Boolean 'スプラッシュウィンドウを表示する最短時間を0.5秒にする Me.MinimumSplashScreenDisplayTime = 500 Return MyBase.OnInitialize(commandLineArgs) End Function      'スプラッシュスクリーンのタイマーコントロール設定 Friend Sub Splash() With SplashScreen1.Timer1 .Enabled = True .Interval = 500 End With SplashScreen1.Timer1.Start() End Sub ' この書き方あってますか?とりあえずは反映されてるようですけれど・・・ End Class End Namespace SplashScreen1の部分を Public Class SplashScreen1 Friend Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     ' クリックで閉じる DialogResult = DialogResult.OK Me.Close() End Sub Friend Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' タイマーコントロール発動時、瞬時に停止させる。スクリーンは消えないように。 Me.Timer1.Enabled = False Me.ShowDialog() End Sub End Class と、してみましたが・・・問題が発生するのです。 この時、スクリーンフォームがMe.ShowDialog()と書いてあるにもかかわらず、 メインフォームとともに操作可能・・つまりモードレスであるShowで表示されるのです。上記のコードを実行してもらえれば分かると思いますが・・。 また、メインフォームが前方に、スクリーンフォームが後方に行ってしまいます。これはどのようにすれば良いでしょうか? Me.TopMost = True としても駄目でした。 BringToFrontを使っても同じでした。

  • VB.NETで作成したDLLについて

    ご回答宜しくお願い致します。 現在、VBでユーザーコントロールのDLLを作成し、 DLLをC#で使用するというプログラムを開発してます。 そこで、以下のような現象が起こり 対応できかねております。 まず、VBで以下のメソッドを書きました。 Public Sub showMessage(ByVal bol As Boolean)     MessageBox.Show(bol) End Sub そして、C#からDLLのコントロール ( Panel1 ) を呼び出し、 private void Panel1_MouseClick(object sender, MouseEventArgs e) {     Panel1.setSelectedFlg(true); } これでメッセージボックスが表示されると思ったんですが表示されません。 VBのMessageBoxを別の処理に変えても全く動作しません。 メソッドを動作させる方法はございますでしょうか 宜しくお願い致します。

  • VBからエクセルファイル作成

    VBでエクセルファイルを作成する処理を作っていて、ファイルは作成されるのですが、自動的にシートが3シート作られます。 作成時にシート数を指定することはできるのでしょうか? ネットでいろいろ調べるのですが、VBからのエクセル操作について書かれているサイトがあまりみつかりません。 よいサイトがありましたら、あわせて教えてください。 よろしくお願いします。

  • VB.netユーザコントロールのフォーカス

    VB.net(2008)でユーザコントロール(TextBoxなど)を作成していますが、そのコントロールに フォーカスが移りません。 ユーザコントロールではWndProcをオーバライドし、enabled指定時の動作のみを 定義していますが、そのコントロールにSelectALLでフォーカスを移そうとしても 飛んでくれません。 何が問題なのでしょうか? よろしくお願いいたします。

  • エクセルのセルからVB等で作成したアプリの変数を参照するには

    エクセルのセルからVB等で作成したアプリの変数を参照する方法がわかりません。 また、そのアプリで変数が更新された際に自動的にセルの内容が変わるといった仕組みは無いでしょうか。 楽天証券のリアルタイムスプレッドシートは、セルで"=app|code!field"のような形で情報を参照できるので、何らかの方法があると思っています。 また、上記の式をエクセルに入力すると、「APP.EXEを起動しますか」といったメッセージが出ますので、参照はできるのだと思います。 VBのアプリからセルをいじると、パフォーマンスが悪く困っています。 アプリはVBにはこだわっておりません。 また、ヒントとなるような情報だけでもかまいません。 よろしくお願いします。

  • VB.NET2005 TextBox 高さ(Height) 変更

    VB.NET2005でWindowsアプリケーションを作成しています。 フォーム上のコントロールについて質問させてください。 System.Windows.Forms.TextBoxのHeightを フォントサイズに関わらず、指定したいです。 MSゴシック10ptのフォントサイズ指定で Height="25"にしたいのですが、"21"になってしまいます。 独自にコントロールを作らなければならないとは思うのですが、 手順が判りません。 教えてください

  • VB6.0のソフトのようなフォームは?

    調べるのもキーワードすら思い浮かばないため質問します。 フォーム自体にコントロール等を貼り付け操作するソフトの作り方はいろんなサイトに記載ありますが、 例えば、VB6.0のソフトのように、起動したらメニュー等だけしかないですよね。そこで新規プロジェクト等を作成していくといろいろできるようになりますよね。 このように、ソフト(フォーム?)を起動し、プロジェクト単位でその内容を保存・読込みで管理できるソフトの枠組み?をどうように作ればいいのかわかりません。 これはコントロールとか何かの参照で簡単に使えるものなのでしょうか? 後教授願います。