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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.64927 の関連記事表示

<< 0 >>
■64927  Re[1]: vb.netでのチェックボックスについて
□投稿者/ 魔界の仮面弁士 -(2013/01/22(Tue) 19:00:02)
    2013/01/22(Tue) 19:05:15 編集(投稿者)

    No64924 (don さん) に返信
    > ラジオボタンであればと思うかもしれませんが、チェックボックスである理由は、
    > ユーザーが選択(チェック)した後、無選択に戻せないからです。

    やろうと思えばできないこともありません。

    RadioButton や CheckBox では「AutoCheck プロパティを False にする」ことで、
    On/Off の切り替えをすべてプログラム制御で行わせることができるためです。

    使うイベントも変わってしまいますし、コーディング量も増えるので
    使いどころは限られますが、一応、そういう方法もあるということで。



    > CheckBox1をクリックしチェックを入れた後、CheckBox2をクリックすると、
    > CheckBox1のチェックは外れましたが、CheckBox2にチェックが入りませんでした。

    『ステップ実行』してみるとわかるかと思いますが、
    CheckedChanged イベントが発生するのは、クリック時だけではありません。
    プログラムから Checked プロパティを変更した場合にも発生します。
    On に変更した時にも発生しますし、Off になるときにも発生します。


    すなわち今回の場合、下記のような動作となっていたわけです。

    ★ 1 と 2 が Off のときに、ユーザーが 1 をクリックした。
     ・1 の AutoCheck は True のため、1 が On 状態となる。
     ・この操作により 1 の変更イベントが発生し、2 を Off にするが、
      2 はすでに Off のため、2 の変更イベントは発生しない。
     ・この結果、CheckBox1 は On、CheckBox2 は Off になる。

    ★ 1 が On、2 が Off のときに、ユーザーが 2 をクリックした。

     ・2 の AutoCheck は True のため、2 が On 状態となる。
     ・この操作により 2 の変更イベントが発生し、1 を Off にする。
      1 は On になっているため、1 の変更イベントが発生する。
     ・1 の変更イベントにより、2 が Off に戻される。これにより
      2 の状態が変わることになり、再度 2 の変更イベントが発生する。
     ・2 の変更イベントにより、1 を Off にするが、そもそも
      すでに 1 は Off であるため、1 の変更イベントは発生しない。
     ・この結果、CheckBox1 と CheckBox2 の両方が Off になる。



    > 「System.StackOverflowException' のハンドルされていない例外が発生」とあり
    > 怒られました・・・。

    イベントが連鎖的に無限に発生するためです。
    そのため、プログラムによる Checked プロパティ変更時は、
    何かフィールド変数などでフラグ判定を行うなどして、
    ユーザー操作による変更と区別するようにしてみてください。
記事No.64924 のレス /過去ログ109より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -