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

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

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

Re[4]: チェックボックスに関して


(過去ログ 51 を表示中)

[トピック内 53 記事 (1 - 20 表示)]  << 0 | 1 | 2 >>

■27918 / inTopicNo.1)  チェックボックスに関して
  
□投稿者/ カイジ (1回)-(2008/11/17(Mon) 18:04:55)

分類:[C#] 

Microsoft Visual Studio 2008 評価版 C# Windowsアプリケーション

チェックボックスに関してご質問があり投稿させて頂きました。
どうもうまく実装できないため、ご教授をお願い致します。

WindowsFormに4つのチェックボックス(すべて、.jpg、.bmp、.wma)があります。
画面起動時には全チェックボックスはチェック状態にあります。

[すべて]がチェックありの場合、[.jpg]、[.bmp]、[.wma]の3つは無条件にチェックが入ります。
[すべて]がチェックなしの場合、[.jpg]、[.bmp]、[.wma]の3つは無条件に未チェックとなります。

[.jpg]、[.bmp]、[.wma]に関しては、3つがすべてチェックされれば、[すべて]がonになり、
1つでもチェックされていなければ、[すべて]がoffとなります。

かんたんに行くようでなかなか時間を取られてしまっている未熟者です・・・。
どうかよろしくお願い致します。

引用返信 編集キー/
■27919 / inTopicNo.2)  Re[1]: チェックボックスに関して
□投稿者/ カドルドエグ (49回)-(2008/11/17(Mon) 18:10:21)
No27918 (カイジ さん) に返信
> [すべて]がチェックありの場合、[.jpg]、[.bmp]、[.wma]の3つは無条件にチェックが入ります。
> [すべて]がチェックなしの場合、[.jpg]、[.bmp]、[.wma]の3つは無条件に未チェックとなります。
> [.jpg]、[.bmp]、[.wma]に関しては、3つがすべてチェックされれば、[すべて]がonになり、
> 1つでもチェックされていなければ、[すべて]がoffとなります。

そこまで条件がはっきりしているのならば、
その条件をそのままCheckedChangedイベントに書くだけで基本的に大丈夫だと思います。

>かんたんに行くようでなかなか時間を取られてしまっている
とありますが、具体的にどのような状態で詰まってしまってるのでしょうか?

#もしかしてどのチェックボックスのイベントに書けばよいのか混乱してしまってるとか…?

引用返信 編集キー/
■27920 / inTopicNo.3)  Re[1]: チェックボックスに関して
□投稿者/ .SHO (61回)-(2008/11/17(Mon) 18:10:53)
No27918 (カイジ さん) に返信

> かんたんに行くようでなかなか時間を取られてしまっている未熟者です・・・。
> どうかよろしくお願い致します。

言葉で書くと論理が難しそうですが処理は簡単そうです。
うまくいかないソースを載せてもらった方が話は早いと思います。

引用返信 編集キー/
■27922 / inTopicNo.4)  Re[1]: チェックボックスに関して
□投稿者/ まんごーぷりん (10回)-(2008/11/17(Mon) 18:27:14)
まんごーぷりん さんの Web サイト
allCheckBox.CheckedChanged += (sender, e) => {
  jpgCheckBox.Checked = bmpCheckBox.Checked = wmaCheckCox.Checked = allCheckBox.Checked;
}

そのまま書けばよいだけですよね?
何がわからなかったのかを、よろしければ教えて下さい。

引用返信 編集キー/
■27926 / inTopicNo.5)  Re[2]: チェックボックスに関して
□投稿者/ みきぬ (216回)-(2008/11/17(Mon) 18:38:28)
[すべて]の CheckedChanged イベントによる処理中には、[.jpg]、[.bmp]、[.wma]の3つの CheckedChanged イベントによる処理を行わない(逆も然り)工夫が必要かな。
引用返信 編集キー/
■27927 / inTopicNo.6)  Re[3]: チェックボックスに関して
□投稿者/ まんごーぷりん (13回)-(2008/11/17(Mon) 18:40:13)
まんごーぷりん さんの Web サイト
No27926 (みきぬ さん) に返信
> [すべて]の CheckedChanged イベントによる処理中には、[.jpg]、[.bmp]、[.wma]の3つの CheckedChanged イベントによる処理を行わない(逆も然り)工夫が必要かな。

それは注意した方が良いかもですね。
逆に、.jpg, .bmp, .wma のチェックボックスの値が変わった時に、それぞれの処理が定義されている場合は、イベントによる処理を行わないとダメですけれど。
引用返信 編集キー/
■27928 / inTopicNo.7)  Re[3]: チェックボックスに関して
□投稿者/ .SHO (63回)-(2008/11/17(Mon) 19:27:21)
No27926 (みきぬ さん) に返信

> [すべて]の CheckedChanged イベントによる処理中には、[.jpg]、[.bmp]、[.wma]の3つの CheckedChanged イベントによる処理を行わない(逆も然り)工夫が必要かな。

プログラムからCheckedプロパティを設定して状態を変更した場合は
それに対するイベントは発生しないので問題ないのでは?
引用返信 編集キー/
■27929 / inTopicNo.8)  Re[4]: チェックボックスに関して
□投稿者/ まんごーぷりん (14回)-(2008/11/17(Mon) 19:35:56)
まんごーぷりん さんの Web サイト
No27928 (.SHO さん) に返信
> ■No27926 (みきぬ さん) に返信
>
> プログラムからCheckedプロパティを設定して状態を変更した場合は
> それに対するイベントは発生しないので問題ないのでは?

そんなあなたに、以下のコードを捧げますw

var c = new CheckBox();
c.CheckedChanged += (sender, e) => Console.WriteLine("発生するよーん");
c.Checked = !c.Checked;

引用返信 編集キー/
■27930 / inTopicNo.9)  Re[5]: チェックボックスに関して
□投稿者/ .SHO (64回)-(2008/11/17(Mon) 19:40:57)
No27929 (まんごーぷりん さん) に返信

> var c = new CheckBox();
> c.CheckedChanged += (sender, e) => Console.WriteLine("発生するよーん");
> c.Checked = !c.Checked;

言葉が足りなかったか…っていうか、最初の質問者さんに考えてもらいたかったんだけど
CheckedChanged イベント使わずに Click イベント使えば発生しないです。

たぶん、それが最初の質問者さんへの答えだと思います。

引用返信 編集キー/
■27931 / inTopicNo.10)  Re[6]: チェックボックスに関して
□投稿者/ .SHO (65回)-(2008/11/17(Mon) 19:45:35)
2008/11/17(Mon) 19:47:55 編集(投稿者)
2008/11/17(Mon) 19:45:57 編集(投稿者)

あーでも、みきぬさんは、ちゃんと『CheckedChanged イベントによる処理中には』
って書いてますね。
すいません。
私の間違いです。

引用返信 編集キー/
■27932 / inTopicNo.11)  Re[7]: チェックボックスに関して
□投稿者/ まんごーぷりん (15回)-(2008/11/17(Mon) 19:55:45)
まんごーぷりん さんの Web サイト
でも、そもそも 3 つのチェックボックス全体に影響を及ぼすコントロールもチェックボックスにしてしまうことが本当に良いことなのか、ちょっと疑問です。

全てにチェックが入っている状態から、個別のチェックボックスを外すこともできる訳で、そうなるとチェックされている状態の意味が違ってきてしまいますよね?
つまり、チェックが何を表わすものなのかの統一性がなくなりませんか?

ボタンにする方が自然な気がします。
引用返信 編集キー/
■27933 / inTopicNo.12)  Re[8]: チェックボックスに関して
□投稿者/ .SHO (66回)-(2008/11/17(Mon) 19:59:30)
No27932 (まんごーぷりん さん) に返信

> 全てにチェックが入っている状態から、個別のチェックボックスを外すこともできる訳で、そうなるとチェックされている状態の意味が違ってきてしまいますよね?

個別のチェックボックスを外すと[すべて]のチェックボックスはoffになるんだからいいのでは?
それに仕様の問題だし…

引用返信 編集キー/
■27934 / inTopicNo.13)  Re[9]: チェックボックスに関して
□投稿者/ まんごーぷりん (16回)-(2008/11/17(Mon) 20:04:29)
まんごーぷりん さんの Web サイト
No27933 (.SHO さん) に返信
> ■No27932 (まんごーぷりん さん) に返信
>
>>全てにチェックが入っている状態から、個別のチェックボックスを外すこともできる訳で、そうなるとチェックされている状態の意味が違ってきてしまいますよね?
>
> 個別のチェックボックスを外すと[すべて]のチェックボックスはoffになるんだからいいのでは?

ああ、そう言われて見せば確かにそうですね。
全て、ではないからチェックが外れるってことですね。

まあ、どうでも良い話ですね。仕様の問題だし…
引用返信 編集キー/
■27935 / inTopicNo.14)  Re[10]: チェックボックスに関して
□投稿者/ .SHO (67回)-(2008/11/17(Mon) 20:11:59)
No27934 (まんごーぷりん さん) に返信

> ああ、そう言われて見せば確かにそうですね。
> 全て、ではないからチェックが外れるってことですね。

です。

そういうウェブページ、よくありますよね。
↓こんなの。

●あなたの趣味を選択してください。
 □すべて選択

 □プログラミング
 □ゴルフ
 □テニス
 □スポーツ観戦
  :
  :

引用返信 編集キー/
■27936 / inTopicNo.15)  Re[9]: チェックボックスに関して
□投稿者/ Jitta on the way (226回)-(2008/11/17(Mon) 21:48:02)
No27933 (.SHO さん) に返信
> ■No27932 (まんごーぷりん さん) に返信
>
>>全てにチェックが入っている状態から、個別のチェックボックスを外すこともできる訳で、そうなるとチェックされている状態の意味が違ってきてしまいますよね?
>
> 個別のチェックボックスを外すと[すべて]のチェックボックスはoffになるんだからいいのでは?
> それに仕様の問題だし…
>

「すべて」が、三値(グレーになるやつ)でないといけないように思います。




> [.jpg]、[.bmp]、[.wma]に関しては、3つがすべてチェックされれば、[すべて]がonになり、
> 1つでもチェックされていなければ、[すべて]がoffとなります。
じゃ、「すべて」にチェックした後、「wma」をオフにしたら、全体的にどうなっていて欲しいの?それに対して、今はどうなってしまうの?

こういうことを教えて頂かないと、観客は何時までも好き勝手言いますよ〜(笑)
引用返信 編集キー/
■27952 / inTopicNo.16)  Re[10]: チェックボックスに関して
□投稿者/ まんごーぷりん (17回)-(2008/11/18(Tue) 09:00:18)
まんごーぷりん さんの Web サイト
あー、なるほどイベントが連鎖して発生するので、目的の通りに動かないってことですね。
イベントが連鎖的に発生することをコントロールするには、いくつかの方法があります。

・フラグを使って自分が処理すべき場合のみ処理させる
・イベントの登録と削除を動的に行う
・他の連鎖しないイベントを利用する

で、今回の場合ですが、僕は小規模なものならフラグを使ってしまうかと思います。
大規模なものなら、ユーザーコントロールに 3 つのチェックボックスを配置して、一つのコントロールとして設計します。

フラグは、誰が最初に発生させたイベントなのかを調べて、自分が発生させたイベントだけを処理する形にすればよいです。



引用返信 編集キー/
■27953 / inTopicNo.17)  Re[11]: チェックボックスに関して
□投稿者/ まんごーぷりん (18回)-(2008/11/18(Tue) 09:04:27)
まんごーぷりん さんの Web サイト
ざっと書いてみました^^;

var flag = 0;
InitializeComponent();
var a = new List<CheckBox> { checkBox2, checkBox3, checkBox4 };
foreach(var x in a) {
x.CheckedChanged += (sender, e) => {
if (flag == 0) flag = 1;
if (flag != 1) return;
checkBox1.Checked = (a.Where(p => p.Checked).Count() == 3);
flag = 0;
};
}
checkBox1.CheckedChanged += (sender, e) => {
if (flag == 0) flag = 2;
if (flag != 2) return;
a.ForEach(x => x.Checked = checkBox1.Checked);
flag = 0;
};

引用返信 編集キー/
■27958 / inTopicNo.18)  Re[10]: チェックボックスに関して
□投稿者/ aetos (9回)-(2008/11/18(Tue) 09:46:59)
No27936 (Jitta on the way さん) に返信
> 「すべて」が、三値(グレーになるやつ)でないといけないように思います。

個人的にはそう思いません。

> じゃ、「すべて」にチェックした後、「wma」をオフにしたら、全体的にどうなっていて欲しいの?それに対して、今はどうなってしまうの?

「jpg」と「bmp」が on、「wma」と「すべて」が off で違和感無いです。
引用返信 編集キー/
■27959 / inTopicNo.19)  Re[10]: チェックボックスに関して
□投稿者/ みきぬ (217回)-(2008/11/18(Tue) 09:53:12)
2008/11/18(Tue) 09:53:47 編集(投稿者)

No27936 (Jitta on the way さん) に返信
> >>全てにチェックが入っている状態から、個別のチェックボックスを外すこともできる訳で、そうなるとチェックされている状態の意味が違ってきてしまいますよね?
>>個別のチェックボックスを外すと[すべて]のチェックボックスはoffになるんだからいいのでは?
>>それに仕様の問題だし…
> 「すべて」が、三値(グレーになるやつ)でないといけないように思います。
>
別にいけないことはないですよね?
せっかく Windows Form なんだから、そのほうがいいかなーとは思いますが。
# グレー表示だと、コントロールが使えないと勘違いしちゃうお客さんもいるかもしれないし! ていうかいたし!


>>[.jpg]、[.bmp]、[.wma]に関しては、3つがすべてチェックされれば、[すべて]がonになり、
>>1つでもチェックされていなければ、[すべて]がoffとなります。
> じゃ、「すべて」にチェックした後、「wma」をオフにしたら、全体的にどうなっていて欲しいの?それに対して、今はどうなってしまうの?
>
現状はどうなっているかわかりませんが、全体的にどうなっていて欲しいのかは

・[すべて] にチェックした時
■すべて ■.jpg ■.bmp ■.wma

・そこから [wma] のチェックを外したとき
□すべて ■.jpg ■.bmp □.wma

ってなっててほしいわけですよね。
少なくとも回答者の方はそういう認識でいると思っていましたが、はてさて。

-----
凝ってたら先を越されたw
引用返信 編集キー/
■27962 / inTopicNo.20)  Re[11]: チェックボックスに関して
 
□投稿者/ .SHO (70回)-(2008/11/18(Tue) 10:21:28)
No27952 (まんごーぷりん さん) に返信

> あー、なるほどイベントが連鎖して発生するので、目的の通りに動かないってことですね。

私はそうじゃないかな?と思いますが
元の質問からそこまで読み取ることはできません。

引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 | 2 >>

管理者用

- Child Tree -