2009-05-31 13 views
0

私はテキストファイルからそのラベルの1つの名前を取得するフォームを持っています。これは、アプリケーションを起動するときに正常に動作します。しかし、テキストファイルが変更される別のフォームからは、そのラベルを適宜変更したいと思います。この更新は、テキストファイルの変更を行ったフォームが終了したときに行われます。私はMainForm_Loadを使用したときに起こることと同じことをリフレッシュすると思いました。しかし、私はそうは思わない。私は間違ったことをしているか、リフレッシュが何をしていると誤解していますか?代わりにMainForm.Refreshの おかげMainForm.Refresh();私はそれがすると思ったことをしません

+0

テキストファイルからラベルを埋めているイベントはありますか? –

+0

元々、MainForm_Loadの間にテキストを取得しました – JimDel

答えて

2

Refresh方法は唯一Invalidateメソッドを呼び出して、それだけで再描画が発生しますコントロールの現在のデータと比較します。

Loadイベントハンドラとリロードの原因となるコードの両方から呼び出すことができるように、テキストファイルのデータを別の方法で取得するコードを記述します。

+0

それは私がGuffaが必要だったものでした!ありがとう。 – JimDel

1

あなたの投稿は少し混乱しているが、(真)MainForm.Invalidateを試してみてください()...

+0

ありがとうございますが、それは私にとってはうまくいきませんでした。私は私の質問を編集しました。うまくいけば私はそれをより明確にした。 – JimDel

+0

それはまったく違いはありません。それはまさにRefreshメソッドが行うことなのです。 – Guffa

1

Formのインスタンスが作成されるとForm.Loadが1回発生します。ラベルを更新しているロジックが再実行されるためには、ラベルが更新されるたびに呼び出さなければならない。

ラベル更新コードをメソッドにリファクタリングし、FileSystemWatcherを使用してその後、ファイルの変更の内容とは、応答

2

でupdateメソッドを実行するイベント、フォーム上のすべてのRefreshメソッドませんが、フォームが、その後

ワン(UpdateWindowコールに沸く)の更新を呼び出して無効ですあなたの問題を解決する方法は、FileSystemWatcherオブジェクトを使用してテキストファイルの変更を監視することです。変更が検出されると、コードを呼び出してファイルを開き、ラベルにデータを出力します。

FileSystemWatcher fsw = new FileSystemWatcher(); 
fsw.Path = @"c:\temp"; // path to file 
fsw.Filter = "yourfile.txt"; 
fsw.Changed += fsw_Changed; 
fsw.EnableRaisingEvents = true; 

は、その後、あなたの変更イベントであなただけのFileSystemWatcherイベントが別のスレッドで焼成されていることを

void fsw_Changed(object sender, FileSystemEventArgs e) 
{ 
    updateLabelFromTextFile(); 
} 

private void updateLabelFromTextFile() 
{ 
    var fs = File.OpenText(@"c:\temp\yourfile.txt"); 
    string sContent = fs.ReadToEnd(); 
    fs.Close(); 
    fs.Dispose(); 

    if (label1.InvokeRequired) 
    { 
    MethodInvoker mi = delegate { label1.Text = sContent; }; 
    this.BeginInvoke(mi); 
    } 
    else 
    label1.Text = sContent; 
} 

注意、BeginInvokeメソッドのためのための必要性を定義しました。

ここにはexampleへのリンクがあります(FileSystemWatcherで検索するだけで、さらに多くの例が見つかります)。

+0

うわー!私はこのサイトが大好き! FSWについて聞いたこともありません。新しいことを教えてくれてありがとう。コードサンプルと別のものへのリンク。驚くばかり。ハプアにもう一度感謝します。 – JimDel

+0

FSWは素晴らしいことです。いくつかの落とし穴があります。あなたはそれを気にして回避する必要がありますが、あなたのツールボックスに入れるのはすばらしいことです。 – Harpua