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

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

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

No.36044 の関連記事表示

<< 0 >>
■36044  DataGridViewのチェックボックスチェック
□投稿者/ がんすけ -(2009/05/19(Tue) 02:10:54)

    分類:[VB.NET/VB2005 以降] 

    はじめまして、Microsoft Visual Basic 2005で開発をしています。

    今、下記の様なDataGridViewのチェックボックスがある列をクリックされた時に
    クリックされたチェックボックスがTrueかFalseかチェックするプログラムを書いています。

    Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

    If DataGridView1.Rows(e.RowIndex).Cells(0).Value = True Then
    MsgBox("falseになりました。")
    Else
    MsgBox("Trueになりました。")
    End If

    end sub

    このロジックでチェックボックスが全部Falseの状態で
    一行名のチェックボックスを押下すると
    「Trueになりました。」
    その後三行目のチェックボックスを押下すると
    「Trueになりました。」
    その後一行名のチェックボックスを押下すると
    「Falseになりました。」

    となりますが、何故か

    一行名のチェックボックスを押下すると
    「Trueになりました。」
    その後また一行名のチェックボックスを押下すると
    「Trueになりました。」
    と表示されてしまいます。
    二回連続で同じ場所をクリックすると一番最初のValueの結果から変わりません
    同じ場所が二度クリックされてもその時の状況がちゃんとValueで取得出来る様にするには
    どの様にすれば宜しいのでしょうか?

    よろしくご教授の程お願い致します。
親記事 /過去ログ62より / 関連記事表示
削除チェック/

■36046  Re[1]: DataGridViewのチェックボックスチェック
□投稿者/ カドルドエグ -(2009/05/19(Tue) 09:12:55)
    No36044 (がんすけ さん) に返信
    > 一行名のチェックボックスを押下すると
    > 「Trueになりました。」
    > その後また一行名のチェックボックスを押下すると
    > 「Trueになりました。」
    > と表示されてしまいます。
    > 二回連続で同じ場所をクリックすると一番最初のValueの結果から変わりません
    DataGridView.CellContentClick イベント
    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.datagridview.cellcontentclick(VS.80).aspx
    ↑ここに
    「DataGridViewCheckBoxCell をクリックすると、このイベントは、チェック ボックスが値を変更する前に発生します。
    したがって、現在の値に基づいて予期される値を計算する必要がない場合、
    通常はこのイベントの代わりに DataGridView.CellValueChanged イベントを処理します。
    このイベントは、ユーザー指定の値がコミットされたとき (通常はフォーカスがセルを離れたとき) にだけ発生するため、
    DataGridView.CurrentCellDirtyStateChanged イベントも処理する必要があります。」
    とあるので、そのことも原因のひとつとして考えられるかなと思います。
記事No.36044 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36047  Re[2]: DataGridViewのチェックボックスチェック
□投稿者/ .SHO -(2009/05/19(Tue) 09:22:11)
    No36046 (カドルドエグ さん) に返信

    > 「DataGridViewCheckBoxCell をクリックすると、このイベントは、チェック ボックスが値を変更する前に発生します。

    だから

    >If DataGridView1.Rows(e.RowIndex).Cells(0).Value = True Then
    > MsgBox("falseになりました。")

    True だと false なんじゃないでしょうか。
記事No.36044 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36049  Re[3]: DataGridViewのチェックボックスチェック
□投稿者/ カドルドエグ -(2009/05/19(Tue) 10:40:54)
    #書いてる間に既に解決策が…^^;

    No36047 (.SHO さん) に返信
    > ■No36046 (カドルドエグ さん) に返信
    >
    >>「DataGridViewCheckBoxCell をクリックすると、このイベントは、チェック ボックスが値を変更する前に発生します。
    >
    > だから
    >
    > >If DataGridView1.Rows(e.RowIndex).Cells(0).Value = True Then
    >> MsgBox("falseになりました。")
    >
    > True だと false なんじゃないでしょうか。
    そうですね。


    >二回連続で同じ場所をクリックすると一番最初のValueの結果から変わりません
    >同じ場所が二度クリックされてもその時の状況がちゃんとValueで取得出来る様にするには
    とあり、調べた根拠としてMSDNの記事をひっぱってきたのですが、書き方が悪かったようで申し訳ありません。

    ContentClickイベントは確かに「値変更前に発生」しますが、
    飽くまで「コミットされた状態・値」で判断します。

    MSDNのやり方だと別途イベントを設定する必要があるので、
    一番手っ取り早いのは魔界の仮面弁士さんの方法ですね。
記事No.36044 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36045  Re[1]: DataGridViewのチェックボックスチェック
□投稿者/ .SHO -(2009/05/19(Tue) 09:11:35)
    No36044 (がんすけ さん) に返信

    直接の回答ではないですが、e.RowIndex の値を確認してみてはどうでしょう?
記事No.36044 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36048  Re[1]: DataGridViewのチェックボックスチェック
□投稿者/ 魔界の仮面弁士 -(2009/05/19(Tue) 10:31:16)
    No36044 (がんすけ さん) に返信
    > 同じ場所が二度クリックされてもその時の状況がちゃんとValueで取得出来る様にするには
    > どの様にすれば宜しいのでしょうか?

    .RowHeadersVisible を True にしておくと分かりやすいかと思いますが(鉛筆アイコンと≫アイコン)、
    そのセルの編集が確定するまで、セル Value 値は変化しません。

    CellContentClick は、「セルの内容がクリックされた」事を通知しますが、
    だからといって、CheckBox の状態が変化したかどうかという話とは別問題です。

    クリック直後に確定させたいのであれば、CellContentClick イベントで EndEdit すれば、
    CellValueChanged イベントで CheckBox の状態を捉えられるようになります。
記事No.36044 のレス /過去ログ62より / 関連記事表示
削除チェック/

■36050  Re[2]: DataGridViewのチェックボックスチェック
□投稿者/ がんすけ -(2009/05/19(Tue) 11:06:46)
    皆様ご教授ありがとう御座います。
    EndEditを使用する事により今回の問題は解決いたしました。
    今後ともよろしくお願い致します。
記事No.36044 のレス /過去ログ62より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -