Visual C#で連続してバルーン通知する方法

このQ&Aのポイント
  • Visual C# 2010を使用して、連続してバルーン通知を行う方法を解説します。
  • 通常、バルーン表示を指定秒数が到達する前に行うと前回のバルーンが消えてしまうため、最低10秒表示する方法を紹介します。
  • Form1にbutton1とnotifyIcon1を設置し、ボタンをクリックしたらバルーンを10回表示するプログラムを実装します。
回答を見る
  • ベストアンサー

Visual C#で連続してバルーン通知したい

Visual C# 2010を使用しております。 バルーン表示を必ず指定した秒数実行してほしいです。 バルーン表示を指定秒数が到達する前に行うと、前回のバルーン表示が消えてしまいます。 Form1にbutton1とnotyfyIcon1を設置し、ボタンをクリックしたらバルーンを10回表示するプログラムです。 下記のソースを実行するとわかると思います。 private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { notifyIcon1.BalloonTipText = "test" + i; notifyIcon1.ShowBalloonTip(10000); } } 実行すると「test9」のバルーンが1個表示されて終わってしまいます。 これを「test1」のバルーンを10秒表示後「test2」のバルーンを10秒表示… のように最低10秒表示するようにしたいのですが、どのようにすればよいでしょうか?

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

sleepで10秒眠ればいいんじゃないですか? #タイマー起動して10秒単位でトリガを起こす方がスマートではあるけど

xkuonx
質問者

お礼

回答ありがとうございます。 実はループ中に他処理をしていて、if文にて条件に当てはまったらバルーン表示、という内容になっています。 sleepすると他処理も停止してしまいますか? その場合、処理速度が1ループ毎に10秒遅くなってしまうので今回の場合使えません。

xkuonx
質問者

補足

ArrayListとタイマーにて目的を達成できました。 public partial class Form1 : Form { System.Collections.ArrayList DataList = new System.Collections.ArrayList(); public Form1() { InitializeComponent(); timer1.Interval = 10000; } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { if (i % 2 == 0) { DataList.Add("test" + i); timer1.Enabled = true; } } } private void timer1_Tick(object sender, EventArgs e) { if (DataList.Count != 0) { notifyIcon1.BalloonTipText = DataList[0].ToString(); notifyIcon1.ShowBalloonTip(10000); DataList.RemoveAt(0); } } } ありがとうございました。

関連するQ&A

  • C# 2010 PrintPreviewDialogからの印刷でバルー

    C# 2010 PrintPreviewDialogからの印刷でバルーンを表示する方法? ContextMenuStripを作り、上に『印刷』下には『印刷プレビュー』としました 印刷を選択するとnotifyIconにバルーンを表示するようにしました ところでPrintPreviewDialogには印刷釦があります この印刷釦を押下した時にも同様にバルーンを表示するには、如何なる方法があるのでしょうか? 全く見当も着きません、教えてください、お願いします!!! private void 印刷ToolStripMenuItem_Click(object sender, EventArgs e) { BalloonShow(); //notifyIconにバルーンを表示; this.printDocument1.Print(); } private void 印刷プレビューToolStripMenuItem_Click(object sender, EventArgs e) { PrintPreviewDialog ObjectPrintPreviewDialog = new PrintPreviewDialog(); ObjectPrintPreviewDialog.Document = this.printDocument1; ObjectPrintPreviewDialog.ShowDialog(); } private void BalloonShow() //バルーンを表示 { notifyIcon1.BalloonTipText = "どうしたらバルーンが出ますか?"; }

  • C#での書き方

    vb.netでは別のイベントを呼び出すとき下記のような書き方ができたのですが、C#ではどう書くんでしょうか? (ボタン2を押したらボタン1の処理が走る) Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click MessageBox.Show("AAA") End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Button1_Click(sender, e) End Sub

  • C++でメッセージボックスを表示したい

    C++でメッセージボックスを表示したい フォーム上にbutton1を設置しました。 クリックして、メッセージボックスを表示したいのですがどうすればいいのかわかりません。 vb.netで言う Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MessageBox.Show("test") End Sub をC++で書くとどうなるんですか? button1をダブルクリックして private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { } }; を表示させたのですが、どこにMessageBoxを入れればいいのか教えてください。 よろしくお願いします。

  • 他のFormのクリックイベント

    教えてください! 他のFormのクリックイベントを実行できますか? Form2のButton2をクリックした時に、Form1の「Button1_Click」を実行させることができますか? 出来るとしたら、Form2の「Button2_Click」にはどのように記載したらいいのでしょうか? [Form1]より Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ [Form2]より Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ End Sub 宜しくお願いします。

  • Visual C++ 2008 EEでメッセージ表示

    Visual C++ 2008 EEを使用し、以下のコードを組みました。これは1つのフォーム(仮に質問フォームとする)に3つのボタンを作成し、ボタンを押すとそれぞれの3種類の質問項目フォームにいって、質問回答が終わったら再び質問フォームに戻ります。このとき、一度回答した質問項目のボタンは選べないようにしていて、全部の質問に答えた場合(全てのボタンが選べなくなった場合)に「これで質問は終わりです」というようなメッセージを表示したいのですが、方法が分からないのでご教授願います。 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { this->Hide(); Sai500^ cSai500 = gcnew Sai500(); cSai500->gvflnm(this->flnm); cSai500->ShowDialog(); this->button1->Visible = false; this->Show(); } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { this->Hide(); Sai030^ cSai030 = gcnew Sai030(); cSai030->gvflnm(this->flnm); cSai030->ShowDialog(); this->button2->Visible = false; this->Show(); } private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { this->Hide(); Sai040^ cSai040 = gcnew Sai040(); cSai040->gvflnm(this->flnm); cSai040->ShowDialog(); this->button3->Visible = false; this->Show(); }

  • Visual studioのボタン処理について

    こんにちは。 C++(初心者)で大変迷っています。 Visual studio 2010のWindows フォームアプリケーションでボタンを作成し、Cppのmainで計算した計算結果を表示させる。という物を作りたいと思っています。 例:一秒ごとに数値が1上がっていくプログラムを作成したいと思っております。 現在、Form1にボタン(Button)と文字を表示させるラベル(Label)のみを作成。 そうしたら、Form1.hに…… Private:System::void button1_Click(System::Object^ sender,System::EventArgs^ e){ } Private:System::void lavel1_Click(System::Object^ sender,System::EventArgs^ e){ } の二つが生成されました。 Form1.hに直接MassegeShowなどを使い書けば文字程度は出力されるのですが、cppに書いてその結果を持ってくる方法が解りません。 どうやらポインタを使って行うらしいのですが、勉強中なのでどなたかご教授お願いします。 ※例でプログラムを示してくれると大変うれしいです。

  • Visual C#にてフォーム非表示時のタイマー

    Visual C# 2010でGUIプログラムを作っています。 フォームを最小化した時にタスクトレイにのみアイコンを表示する機能がついています。 タイマーで1分ごとに処理する必要があるのですが、最小化時(Form.visible = false)にだけ処理を実行してくれません。 最小化していない通常のフォーム表示の時はタイマーが正常に動作し、1分ごとに一定の処理をしてくれます。 目的は最小化時にタスクトレイにのみアイコンを表示し、1分ごとに処理をし、 特定の条件に当てはまった場合はアイコンの上にバルーン表示する事です。 タスクトレイにのみ表示している時でもタイマーで一定時間ごとに処理することはできた気がするのですが、 何が原因かわかりませんがいつの間にか出来なくなっていました。 どういった対策をすればよいでしょうか? private void Form1_Resize(object sender, EventArgs e) { if (OptionData.TaskTray == true) { if (this.WindowState == FormWindowState.Minimized) { //フォームを非表示にする this.Visible = false; //タスクトレイにアイコンを表示する notifyIcon1.Visible = true; } } } private void timer1_Tick(object sender, EventArgs e) { DataUpdateButton.PerformClick(); } private void notifyIcon1_DoubleClick(object sender, EventArgs e) { //フォームを表示する this.Visible = true; if (this.WindowState == FormWindowState.Minimized) { //ノーマルウィンドウに戻す this.WindowState = FormWindowState.Normal; //アクティブにする this.Activate(); if (OptionData.NoTaskTrayIcon == true) { //タスクトレイからアイコンを削除する notifyIcon1.Visible = false; } } }

  • vc++6.0とVisual C++ 2010

    遊び程度ですが、VC++をいじったことがあります。 もう何年も触っていませんが。 lVisual C++ 2010 Expressについて調べていたら、    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {            label1->Text=L"はじめてのC++";         } というコードがありました。 vc++6.0に ”label1->Text=~”こんな1行で文字が表示できる方法ってありましたっけ。 次のサイトのような書き方だったと思いますが、コードの書き方が変わったのでしょうか? http://t-recipe.com/vc/string.html お分かりの方、教えてください。お願いします。

  • Visual c# スレッド

    プログラム初心者です。 Visual c#にてスレッド関数を使ったプログラムを見よう見まねで 作りました。 スタートボタンを押すとピクチャーボックスの位置が 左から右へ移動し、ストップボタンを押すと止まる。 ピクチャーボックスの位置をテキストボックスに表示する。 というプログラムのつもりです。 デバックの状態でスタートボタンを押すとエラーメッセージが出て テキストボックスに位置を書き込むの関数のところが緑色にハイライトされます。エラーの内容は「有効でないスレッド間の操作」とありますが、どうしたら良いのか分かりません。 エラーの直し方を教えてください。 プログラムコードは以下です。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace bit_map_08._1._ { public partial class Form1 : Form { private Thread thread; static private int Position = 0; static private int i; static bool BtnOnFig; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { thread = new System.Threading.Thread(newSystem.Threading.ThreadStart(MainThread)); thread.Start(); } private void PointMove() { if (i < 300) { i = i + 1; Position = Position + i; textBox1.Text = Convert.ToString(Position); pictureBox1.Left = (Position); } if (i == 300) { i = 0; } } private void MainThread() { while( true ) { Thread.Sleep(100); if (BtnOnFig == true) { PointMove(); } } } private void button1_Click(object sender, EventArgs e) { BtnOnFig = true; } private void button2_Click(object sender, EventArgs e) { BtnOnFig = false; } } }

  • Visual C#を用いたボタン押し処理について

    Visual C#を用いたボタン押し処理について Visual C#のWindowsアプリケーションについての質問です。 「ボタンA、ボタンB、ボタンC」ボタンを3つ作ります。 private void button1_Click(object sender, EventArgs e){} このようなソースになるのですが、ボタンAを押したときにボタンB、ボタンCを押した処理を行いたいです。ボタンB、Cを button2_Click(X,Y); button3_Click(X,Y); でロードするのはわかるのですが、XとYには何を入れればいいのでしょうか? 検索した結果、おそらくnullを入れてはいけないのはわかったのですが、何を入れればいいのかがわかりません。 >非静的イベントを発生させるときは、sender パラメーターとして null (Visual Basic の場合は Nothing) を渡さないでください。 よろしくお願いします。

専門家に質問してみよう