SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Infragistics NetAdvantageチュートリアル(AD)

フォルダの変更をアラート表示する.NETアプリケーションの作成

NetAdvantage for Windows FormsのWinDesktopAlertコントロールを使った、アラート表示アプリケーションの作成

  • このエントリーをはてなブックマークに追加

コードの作成

 今回作成したプログラムは、Cドライブのルートにあるフォルダ「data」の変更の有無を、Timerコントロールと組み合わせて一定時間間隔でチェックし、変更があればデスクトップアラートで表示するものです。

 フォルダには、作成日時以外に最終更新日時が設定されています。この日時は、フォルダ内のファイルが削除されたり追加されたりすると更新されます。そこで、この最終更新日時をチェックし、更新されていればデスクトップアラートを表示するようにします。

 最終更新日時を取得するには、System.IO名前空間にあるFileInfoクラスのLastWriteTimeプロパティを参照します。

 デスクトップアラートでは、フォルダ内のファイルに変更があったというメッセージを表示し、この文字列をクリックすると「data」フォルダが開くようにします。

 フォルダを開く処理は、System.Diagnostics名前空間にあるProcessクラスのStartメソッドを使用します。

プログラムのスタートアップ処理

 フォルダが更新されているかどうかのチェックは、まずプログラム起動時にフォルダの最終更新日時を取得しておき、一定時間後にもう一度フォルダの最終更新日時を取得して、この値を比較します。最終更新日時が変わっていなければフォルダは更新されていませんので何もしません。最終更新日時が変わっていれば、フォルダは更新されていますので、デスクトップアラートを表示します。

 そこで、まずフォームのLoadイベントハンドラで、FileInfoクラスのLastWriteTimeプロパティからフォルダの最終更新日時を取得し変数basetimeに格納しておきます。

VB.NETの場合
Imports System.IO
Public Class Form1

    Dim fname As String = "c:\data"
    Dim basetime As DateTime, nowtime As DateTime

    Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        Dim fi As FileInfo = New FileInfo(fname)
        basetime = fi.LastWriteTime
    End Sub
C#の場合
using System.IO;
namespace WinDesktopAlert_cs
{
    public partial class Form1 : Form
    {
        String fname = "c:/data";
        DateTime basetime , nowtime;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            FileInfo fi  = new FileInfo(fname);
            basetime = fi.LastWriteTime;
        }

フォルダ内のファイルが変更された時の処理

 次に、再度フォルダの最終更新日時を取得し、変数basetimeの値と比較します。プログラム完成品は、この処理をTimerコントロールのTickイベントハンドラに記述しますが、動作確認のためにボタンのクリックイベントハンドラにも記述しておきます。

 もし、この2つの最終更新日時に差があれば、フォルダの最終更新日時が変更されたことになるので、デスクトップアラートを表示するために、UltraDesktopAlertコントロールのShowメソッドを実行します。Showメソッドはオーバーロードで3つのメソッドがありますが、今回は2つの引数を持つメソッドを使用しました。最初の引数がタイトル文字列で、2番目の引数はメッセージ文字列を指定します。

 アラートを表示したら、変数basetimenowtimeを同じ値にして、アラートの表示が出ないようにし、次の変更に備えます。また、ラベルには動作確認のため、2つの最終更新日時を表示しておきます。

VB.NETの場合
Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    Dim fi As FileInfo = New FileInfo(fname)

    nowtime = fi.LastWriteTime

    If nowtime > basetime Then
        Me.UltraDesktopAlert1.Show( _
            "アラートの表示", "フォルダ " & fname & _
            "内のファイル数に変更が生じました : " & _
            nowtime.ToString)
    End If
    basetime = nowtime
    
    Label1.Text = basetime
    Label2.Text = nowtime
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim fi As IO.FileInfo = New IO.FileInfo(fname)

    nowtime = fi.LastWriteTime

    If nowtime > basetime Then
        Me.UltraDesktopAlert1.Show( _
            "アラートの表示", "フォルダ " & fname & _
            "内のファイル数に変更が生じました : " & _
            nowtime.ToString)
    End If
    basetime = nowtime
End Sub
C#の場合
private void button1_Click(object sender, EventArgs e)
{
    FileInfo fi = new FileInfo(fname);

    nowtime = fi.LastWriteTime;

    if(nowtime > basetime){
        ultraDesktopAlert1.Show(
            "アラートの表示", "フォルダ " + fname +
            "内のファイル数に変更が生じました : " +
            nowtime);
    }
    basetime = nowtime;

    label1.Text = "" + basetime;
    label2.Text = "" + nowtime;
}

private void timer1_Tick(object sender, EventArgs e)
{
    FileInfo fi = new FileInfo(fname);

    nowtime = fi.LastWriteTime;

    if (nowtime > basetime)
    {
        ultraDesktopAlert1.Show(
            "アラートの表示", "フォルダ " + fname +
            "内のファイル数に変更が生じました : " +
            nowtime);
    }
    basetime = nowtime;
}

リンク文字列とアラートボタンがクリックされた時の処理

 デスクトップアラートが表示されると、 メッセージの文字列にリンクが自動的に設定されます。デフォルトでは、クリックするとアラートを呼び出したアプリケーションにフォーカスが移動するだけですが、処理を実行させることもできます。

 リンク文字列をクリックすると、UltraDesktopAlertコントロールにはDesktopAlertLinkClickedというイベントが発生しますので、このイベントハンドラに処理を作成します。

 このイベントハンドラをコードに組み込むには、プロパティウィンドウの[イベント]ボタンをクリックしてイベントリストを表示し、[DesktopAlertLinkClicked]をダブルクリックします。

プロパティウィンドウの[DesktopAlertLinkClicked]をダブルクリック
プロパティウィンドウの[DesktopAlertLinkClicked]をダブルクリック

 また、アラートボタンがクリックされると、UltraDesktopAlertコントロールにはAlertButtonClickedというイベントが発生しますので、このイベントハンドラに処理を作成します。イベントハンドラの作成方法は、DesktopAlertLinkClickedイベントと同じです。

 ここでは、監視しているフォルダを開く処理を組み込みます。これは、System.Diagnostics名前空間にある、ProcessクラスのStartメソッドを使用します。このメソッドを使うと、他のアプリケーションを起動することができます。Windows Vistaでは、フォルダの表示もインターネットエクスプローラを使っているので、これを起動します。最初の引数にアプリケーション名を、2番目の引数に表示させたいフォルダ名をフルパスで記述します。

VB.NETの場合
Private Sub UltraDesktopAlert1_DesktopAlertLinkClicked( _
    ByVal sender As System.Object, _
    ByVal e As Infragistics.Win.Misc.DesktopAlertLinkClickedEventArgs) _
    Handles UltraDesktopAlert1.DesktopAlertLinkClicked
    System.Diagnostics.Process.Start("IExplore.exe", fname)
    basetime = nowtime
End Sub

Private Sub UltraDesktopAlert1_AlertButtonClicked( _
    ByVal sender As System.Object, _
    ByVal e As Infragistics.Win.Misc.AlertButtonClickedEventArgs) _
    Handles UltraDesktopAlert1.AlertButtonClicked
    System.Diagnostics.Process.Start("IExplore.exe", fname)
    basetime = nowtime
End Sub
C#の場合
private void ultraDesktopAlert1_DesktopAlertLinkClicked(
    object sender, Infragistics.Win.Misc.DesktopAlertLinkClickedEventArgs e)
{
    System.Diagnostics.Process.Start("IExplore.exe", fname);
    basetime = nowtime;
}

private void ultraDesktopAlert1_AlertButtonClicked(object sender,
    Infragistics.Win.Misc.AlertButtonClickedEventArgs e)
{
    System.Diagnostics.Process.Start("IExplore.exe", fname);
    basetime = nowtime;
}

まとめ

 デスクトップアラートは、 メッセージボックスと違いデスクトップ下部に表示されるので、作業中でも邪魔することなくメッセージを表示させることができます。リンクやアラートボタンを使うことで、デスクトップアラートから次の処理を実行させることもできます。

 使い方もとても簡単ですから、ユーザーに情報を通知するアイテムとしていろいろな使い方ができるのではないでしょうか。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Infragistics NetAdvantageチュートリアル連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2625 2008/09/04 13:19

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング