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

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

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

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


(過去ログ 51 を表示中)

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

■27976 / inTopicNo.21)  Re[2]: チェックボックスに関して
  
□投稿者/ ミッキー (8回)-(2008/11/18(Tue) 13:55:06)
すみません!
割り込んで大変失礼なのですが、私も同じような事をしていて、
このスレを参照させて頂いていたのですが、
↓のあたりから付いて行くことが出来ませんでした。

No27922 (まんごーぷりん さん) に返信
> allCheckBox.CheckedChanged += (sender, e) => {
>   jpgCheckBox.Checked = bmpCheckBox.Checked = wmaCheckCox.Checked = allCheckBox.Checked;
> }

本当に申し訳ないのですが、上記の構文の意味を解説頂けないでしょうか。
特に「=>{...}」という構文が理解出来ないのですが、記号なので上手く検索も出来ず・・。

引用返信 編集キー/
■27980 / inTopicNo.22)  Re[3]: チェックボックスに関して
□投稿者/ まんごーぷりん (22回)-(2008/11/18(Tue) 14:11:25)
まんごーぷりん さんの Web サイト
No27976 (ミッキー さん) に返信
> すみません!
> 割り込んで大変失礼なのですが、私も同じような事をしていて、
> このスレを参照させて頂いていたのですが、
> ↓のあたりから付いて行くことが出来ませんでした。
>
> ■No27922 (まんごーぷりん さん) に返信
>>allCheckBox.CheckedChanged += (sender, e) => {
>>  jpgCheckBox.Checked = bmpCheckBox.Checked = wmaCheckCox.Checked = allCheckBox.Checked;
>>}
>
> 本当に申し訳ないのですが、上記の構文の意味を解説頂けないでしょうか。
> 特に「=>{...}」という構文が理解出来ないのですが、記号なので上手く検索も出来ず・・。
>

上の構文に関する情報は、ラムダ式・匿名メソッド・デリゲートなどのキーワードで得られるかと。

平たく書くと以下になります。

  allCheckBox.CheckedChanged += new EventHandler(allCheckBox_CheckedChanged);



private void allCheckBox_CheckedChanged(object sender, EventArgs e) {
  jpgCheckBox.Checked = allCheckBox.Checked;
  bmpCheckBox.Checked = allCheckBox.Checked;
  wmaCheckCox.Checked = allCheckBox.Checked;
}


引用返信 編集キー/
■27991 / inTopicNo.23)  Re[4]: チェックボックスに関して
□投稿者/ ミッキー (9回)-(2008/11/18(Tue) 15:31:56)
ありがとうございました。
C#2.0までしか経験がなかったので、ラムダ式という構文は初めて知りました。

お邪魔して申し訳ありませんでした。

引用返信 編集キー/
■27998 / inTopicNo.24)  Re[1]: チェックボックスに関して
□投稿者/ カイジ (2回)-(2008/11/18(Tue) 16:00:33)
皆様、ご投稿ありがとうございます。
先ほどHPを確認したところ、たくさんのご投稿があり、
びっくりしました。

どうもうまくつたえられていなかったようで本当に申し訳ございません。

カドルドエグ様の投稿にあった内容で間違いありません。
#もしかしてどのチェックボックスのイベントに書けばよいのか混乱してしまってるとか…?

1.初期値
■すべて ■.jpg ■.bmp ■.wma

1-1すべてをはずす。
□すべて □.jpg □.bmp □.wma

1-2.jpgをはずす。
□すべて □.jpg  ■.bmp ■.wma

1-3.bmpをはずす。
□すべて ■.jpg  □.bmp ■.wma

1-4.wmaをはずす。
□すべて ■.jpg  ■.bmp □.wma

1-2で.jpgをチェックすると、初期値に戻る。
1-3で.bmpをチェックすると、初期値に戻る。
1-4で.wmaをチェックすると、初期値に戻る。

上記以外は特に他のチェックボックスには影響がありません。
.jpg、.bmp、.wmaの3つがそろった時点ですべてがチェックされ、
一つでも欠けていればすべてを未チェックにしたいのですが、
ガドルドエグ様のおっしゃる通り、どのイベントに書けばよいか混乱しています。

宜しくお願い致しますm(_ _;)m

引用返信 編集キー/
■27999 / inTopicNo.25)  Re[2]: チェックボックスに関して
□投稿者/ まんごーぷりん (27回)-(2008/11/18(Tue) 16:38:12)
まんごーぷりん さんの Web サイト
僕からも質問させて下さい。
僕が大量に投稿した回答や、回答そのものを書いたサンプルソースまでもが華麗にスルーされている理由を教えていただけないでしょうか?

#ぱねぇwww
引用返信 編集キー/
■28000 / inTopicNo.26)  Re[3]: チェックボックスに関して
□投稿者/ みきぬ (223回)-(2008/11/18(Tue) 16:43:41)
No27999 (まんごーぷりん さん) に返信
> 僕からも質問させて下さい。
> 僕が大量に投稿した回答や、回答そのものを書いたサンプルソースまでもが華麗にスルーされている理由を教えていただけないでしょうか?
>
> #ぱねぇwww

C# 3.0 固有の記述方法って、どこまで認知されているのかなあ。

# ちなみに私はわかりませんよ。わかったフリしてレスつけましたけど(えっへん
引用返信 編集キー/
■28002 / inTopicNo.27)  Re[4]: チェックボックスに関して
□投稿者/ カイジ (3回)-(2008/11/18(Tue) 17:13:15)
まんごーぷりん様

まず初めに、本当に申し訳ありませんでした。

綺麗にスルーされている理由に関してですが、
理由は特にありません。

理由になりませんが、掲示板初心者でして、別に記事を見なかったわけではございません。
実際、まんごーぷりん様から頂いたソースコードを現在試している最中です。

無事にできましたらお礼を改めてさせて頂こうかと思っていました。
申し訳ありません。

また、ご投稿頂いたカドルドエグ様、.SHO様、まんごーぷりん様、みきぬ様、Jitta on the way様、
aetos様、ミッキー様ありがとうございました。

皆様のご投稿を参考に試行錯誤してみます。

引用返信 編集キー/
■28008 / inTopicNo.28)  Re[5]: チェックボックスに関して
□投稿者/ カドルドエグ (50回)-(2008/11/18(Tue) 18:18:46)
2008/11/18(Tue) 18:21:26 編集(投稿者)
No28002 (カイジ さん) に返信
まんごーぷりんさんが 27953 にてC#3.0の特性を生かしたかっこいいコードを示しておられますが…。
敢えて別解として泥臭い(しかもIDEの機能に依存)方法を示してみます^^;

※テスト環境:VS2005(C#2.0)
※フォームにはチェックボックスが4つあるだけ
※初期値が全てチェック済ということで、デザイナで最初に4つのCheckedプロパティをTrueにしておく
※jpg用、bmp用、wma用の各チェックボックスのCheckedChangedイベントにChangeAllを設定しておく

        private void chkAll_CheckedChanged(object sender, EventArgs e)
        {
            chkBMP.CheckedChanged -= new EventHandler(ChangeAll);
            chkJPG.CheckedChanged -= new EventHandler(ChangeAll);
            chkWMA.CheckedChanged -= new EventHandler(ChangeAll);

            chkBMP.Checked = chkJPG.Checked = chkWMA.Checked = chkAll.Checked;

            chkBMP.CheckedChanged += new EventHandler(ChangeAll);
            chkJPG.CheckedChanged += new EventHandler(ChangeAll);
            chkWMA.CheckedChanged += new EventHandler(ChangeAll);
        }
        
        private void ChangeAll(object sender, EventArgs e)
        {
            if (chkBMP.Checked && chkWMA.Checked && chkJPG.Checked)
            {
                chkAll.Checked = true;
            }
            else
            {
                chkAll.CheckedChanged -= new EventHandler(chkAll_CheckedChanged);
                chkAll.Checked = false;
                chkAll.CheckedChanged += new EventHandler(chkAll_CheckedChanged);
            }
        }
#多分こういうことなんだろうなぁ、と思いながらこちらなりに
#動かしてみましたが…。違ってたらごめんなさい。。

引用返信 編集キー/
■28009 / inTopicNo.29)  Re[6]: チェックボックスに関して
□投稿者/ みきぬ (224回)-(2008/11/18(Tue) 18:32:26)
2008/11/18(Tue) 18:50:07 編集(投稿者)
それじゃあ私はさらに泥臭い、フラグ変数を使った方法でも示してみましょうか。

※準備※
・Form に、allCheckBox、bmpCheckBox、wmaCheckCox、jpgCheckBox を配置する
・allCheckBox の CheckedChanged イベントに allCheckBox_CheckedChanged を紐づける
・ほか3つの CheckBox の CheckedChanged イベントに otherCheckBox_CheckedChanged を紐づける

private bool isChanging = false;

private void allCheckBox_CheckedChanged(object sender, EventArgs e)
{
    if (isChanging)
    {
        // 別のイベント処理でチェック状態の変更中だから何もしない!
    }
    else
    {
        isChanging = true;
        bmpCheckBox.Checked = allCheckBox.Checked;
        wmaCheckCox.Checked = allCheckBox.Checked;
        jpgCheckBox.Checked = allCheckBox.Checked;
        isChanging = false;
    }
}

private void otherCheckBox_CheckedChanged(object sender, EventArgs e)
{
    if (isChanging)
    {
        // 別のイベント処理でチェック状態の変更中だから何もしない!
    }
    else
    {
        isChanging = true;
        allCheckBox.Checked = (bmpCheckBox.Checked && wmaCheckCox.Checked && jpgCheckBox.Checked);
        isChanging = false;
    }
}

# ついうっかり、巷で話題になった空のif文を使ってしまった(ぉ

-----
準備の項を追加しました。

引用返信 編集キー/
■28010 / inTopicNo.30)  Re[7]: チェックボックスに関して
□投稿者/ .SHO (83回)-(2008/11/18(Tue) 18:44:06)
No28009 (みきぬ さん) に返信

> それじゃあ私はさらに泥臭い、フラグ変数を使った方法でも示してみましょうか。

うん?
これってうまくいくのかな?
試してみよっと。。。^^;
引用返信 編集キー/
■28012 / inTopicNo.31)  Re[8]: チェックボックスに関して
□投稿者/ みきぬ (225回)-(2008/11/18(Tue) 18:52:13)
No28010 (.SHO さん) に返信
> ■No28009 (みきぬ さん) に返信
>
>>それじゃあ私はさらに泥臭い、フラグ変数を使った方法でも示してみましょうか。
>
> うん?
> これってうまくいくのかな?
> 試してみよっと。。。^^;

確認しやすいように説明を追加しておきました。
それぞれのイベント処理にブレークポイントを置いておくと、動きがわかりやすいかも。
引用返信 編集キー/
■28013 / inTopicNo.32)  Re[9]: チェックボックスに関して
□投稿者/ .SHO (84回)-(2008/11/18(Tue) 19:03:44)
No28012 (みきぬ さん) に返信

> 確認しやすいように説明を追加しておきました。
> それぞれのイベント処理にブレークポイントを置いておくと、動きがわかりやすいかも。

wmaCheckCox になってる!という突っ込みはスルーして(笑)
うまく動きました。

イベントってとりあえずポストして、今のイベント処理が終了してから動くのかと思ったら
ちゃんと入れ子で動くのか。。

APIだけで

while ( GetMessage( &msg, NULL, 0, 0 ) ) {
    TranslateMessage( &msg );
    DispatchMessage ( &msg );
}

なんてやってた頃は、全部自分でコーディングしてたのでわかりやすかった。。。

引用返信 編集キー/
■28014 / inTopicNo.33)  Re[10]: チェックボックスに関して
□投稿者/ まんごーぷりん (28回)-(2008/11/18(Tue) 19:17:47)
まんごーぷりん さんの Web サイト
僕も負けずに修正したものをアップしますw
チェックボックスを4つ配置して、フォームクラスのコンストラクタの中に以下のコードをにコピペしてくださいね。

var flag = true;
InitializeComponent();
var a = new List<CheckBox> { checkBox2, checkBox3, checkBox4 };
foreach(var x in a) {
  x.CheckedChanged += (sender, e) => {
    if (!flag) return;
    flag = false;
    checkBox1.Checked = a.All(x => x.Checked);
    flag = true;

  };
}
checkBox1.CheckedChanged += (sender, e) => {
  if (!flag) return;
  flag = false;
  a.ForEach(x => x.Checked = checkBox1.Checked);
  flag = true;
};

引用返信 編集キー/
■28015 / inTopicNo.34)  Re[11]: チェックボックスに関して
□投稿者/ .SHO (85回)-(2008/11/18(Tue) 19:22:15)
No28014 (まんごーぷりん さん) に返信

> 僕も負けずに修正したものをアップしますw

flagの論理をみきぬさんと反対にしてるとこなんか
ホント負けず嫌いだわwww
引用返信 編集キー/
■28016 / inTopicNo.35)  Re[12]: チェックボックスに関して
□投稿者/ まんごーぷりん (29回)-(2008/11/18(Tue) 19:34:38)
まんごーぷりん さんの Web サイト
2008/11/18(Tue) 19:48:45 編集(投稿者)

これは回答としては不適切だけど、参考までに晒します。
フラグの処理が共通化できるので・・・
同じようにフォームのコンストラクタにコピペで動くっす。

var flag = true;
Action<Action> f = x => {
  if (!flag) return;
  flag = false;
  x();
  flag = true;
};
var a = new List<CheckBox> { checkBox2, checkBox3, checkBox4 };
a.ForEach(x => x.CheckedChanged += (s, e) => f(() => checkBox1.Checked = a.All(p => p.Checked)));
checkBox1.CheckedChanged += (sr, e) => f(() => a.ForEach(x => x.Checked = checkBox1.Checked));

引用返信 編集キー/
■28022 / inTopicNo.36)  Re[12]: チェックボックスに関して
□投稿者/ みきぬ (226回)-(2008/11/18(Tue) 21:38:45)
2008/11/18(Tue) 23:59:42 編集(投稿者)

No28015 (.SHO さん) に返信
> ■No28014 (まんごーぷりん さん) に返信
>
>>僕も負けずに修正したものをアップしますw
>
> flagの論理をみきぬさんと反対にしてるとこなんか
> ホント負けず嫌いだわwww
>
実はまんごーぷりん様のコードのほうが先だという説が。
引用返信 編集キー/
■28024 / inTopicNo.37)  Re[6]: チェックボックスに関して
□投稿者/ まんごーぷりん (30回)-(2008/11/18(Tue) 23:42:09)
No28008 (カドルドエグ さん) に返信

> まんごーぷりんさんが 27953 にてC#3.0の特性を生かしたかっこいいコードを示しておられますが…。

コードよりも実物の方がずっとかっこ・・・(ry

> 敢えて別解として泥臭い(しかもIDEの機能に依存)方法を示してみます^^;

いいえ、これは模範解答だと思います。
本来、イベントの登録と削除が書ける理由は、本件のような使い方のためにあります。
また、匿名メソッドを使うと、イベントの削除ができなくなってしまうので、このような場合には本当は使っちゃ駄目です。

ただ、あくまで模範解答に拘るならば、デザイナからイベント登録してしまうと、いきなり -= している部分で「?」となってしまう恐れがあるので、僕は、動的にイベントの削除や登録を行う場合は、やはりコンストラクタで初期化という意味でイベントの登録を明示する書き方が好きですね。
それと、3 つのチェックボックスが常に同じタイミングでイベントのオン・オフを行うので、イベントのオン・オフの部分をメソッドアウトすると更に可読性があがる気がします。

引用返信 編集キー/
■28025 / inTopicNo.38)  Re[13]: チェックボックスに関して
□投稿者/ まんごーぷりん (31回)-(2008/11/18(Tue) 23:43:58)
まんごーぷりん さんの Web サイト
No28022 (みきぬ さん) に返信

> 実はまんごーぷりんのコードのほうが先だという説が。

ちょwwwおまwww継承抜きwww
引用返信 編集キー/
■28026 / inTopicNo.39)  Re[14]: チェックボックスに関して
□投稿者/ みきぬ (227回)-(2008/11/19(Wed) 00:00:30)
No28025 (まんごーぷりん さん) に返信
> ちょwwwおまwww継承抜きwww
o... |rz

というわけで直しました。
引用返信 編集キー/
■28029 / inTopicNo.40)  Re[7]: チェックボックスに関して
 
□投稿者/ ロック (138回)-(2008/11/19(Wed) 01:08:04)
チェックボックスでこれだけ伸びるのもすごいですね

個人的には、チェックボックス付きTreeViewでの例とか
CheckedListBoxでの別解が出ると、面白いかもと思っていたり
でも、自分ではサクッと作れないのでちょっと言ってみたり

□すべて
 ├■.jpg  <こんなインストーラでよく見かけるようなの
 ├□.bmp
 └□.wma

#単なる好奇心です。

引用返信 編集キー/

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

管理者用

- Child Tree -