C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C# コントロールが変更されたかどうかの取得


(過去ログ 71 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■41310 / inTopicNo.1)  C# コントロールが変更されたかどうかの取得
  
□投稿者/ まめ犬 (1回)-(2009/09/17(Thu) 15:33:05)

分類:[C#] 

お世話になっております。

C#で、

・Form1にはテキストボックスやラジオボタンなどが複数ある
・各コントロールには初期値がセットされている
・「保存」ボタンと「ウインドウを閉じる」ボタンがある
・「保存」ボタン押下でコントロールの値がファイルに吐き出される

というものを作成しております。
そこで、

各コントロールの中身を変更する
 ↓
「ウインドウを閉じる」ボタンを押す
 ↓
「設定が保存されていません」というダイアログを出す

という動作を行いたいのですが、
コントロールの値が変更されたかどうかを一括で取得する
という手段はありますでしょうか?

Control ctrl in this.Controls

が使えそうな気がするのですが、どうすれば良いのか悩んでいます。


ご存知の方がいらっしゃいましたら、ぜひご教授ください。
よろしくお願いいたします。


引用返信 編集キー/
■41313 / inTopicNo.2)  Re[1]: C# コントロールが変更されたかどうかの取得
□投稿者/ επιστημη (2168回)-(2009/09/17(Thu) 16:19:19)
επιστημη さんの Web サイト
> コントロールの値が変更されたかどうかを一括で取得する
> という手段はありますでしょうか?

で、設定変更されたことを知りたい項目数はいったいいくつ/何種類あるのでしょうか。

数個〜十数個てとこなら目の子で拾い上げるのが手っ取り早いし、
たとえ数百個あってもそれらが全部同じもの(たとえばTextBox)なら
くるくるloopして拾えるでしょうし。

引用返信 編集キー/
■41314 / inTopicNo.3)  Re[2]: C# コントロールが変更されたかどうかの取得
□投稿者/ まめ犬 (2回)-(2009/09/17(Thu) 16:40:08)
お返事ありがとうございます。

> で、設定変更されたことを知りたい項目数はいったいいくつ/何種類あるのでしょうか。

情報が足りず失礼いたしました。

テキストボックス:4個
ラジオボタンのグループ:4個
DataGridView:2個

の計10個です。


> 数個〜十数個てとこなら目の子で拾い上げるのが手っ取り早いし、

やはり虱潰し作戦しかないのでしょうか?

汎用的に作成できたらな・・・と考えておりますので、
上記のやり方ですと、項目が増えたり減ったりした時に
ソースの変更箇所が増えるので、
いい方法はないかな・・・と考えておりました。


引き続き良い案がありましたらご教授願います。
よろしくお願いいたします。
引用返信 編集キー/
■41315 / inTopicNo.4)  Re[1]: C# コントロールが変更されたかどうかの取得
□投稿者/ 魔界の仮面弁士 (1296回)-(2009/09/17(Thu) 16:42:32)
2009/09/17(Thu) 16:45:50 編集(投稿者)

No41310 (まめ犬 さん) に返信
> コントロールの値が変更されたかどうかを
たとえば、TextBox に「abc」という初期値があったとします。

これをユーザーが、「xyz」に変更してから再度「abc」と入力しなおした場合に、
それは変更として扱いますか? 変更無しとして扱いますか?

変更無しとして扱うのであれば、初期値との比較にすれば良いでしょうし、
変更として扱うのであれば、(TextBoxの)Modified プロパティが使えるかと思います。


> 一括で取得するという手段はありますでしょうか?
たとえば、
 http://www.microsoft.com/Japan/Office/previous/xp/suminaka/powerpoint/sousa2002/images/4_1_5_2.gif
のような画面があったとします。

この場合、ラジオボタンの状態によっては、それぞれのコンボボックスは
使われない事になりますよね。

画面構成によっては、一部の項目の変化は無視したいという場合もあるかも知れません。
その場合には、「すべて一括」というよりも、ある程度の機能単位で纏めて管理した方が
扱いやすいのではないでしょうか。

そうだとすれば、this.Controls 等から列挙するのではなく、
関連する項目を自分でコレクション等に蓄えておき、
それを使うようにした方が、柔軟性があるかと思います。


> Control ctrl in this.Controls
foreach (Control ctrl in this.Controls) で処理できる場合もありますが、
Panel や GroupBox 等がある場合には、groupBox1.Controls 等に対しても
再帰的に走査しないといけないかと。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -