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

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

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

Re[1]: C# チェックボックスの選択状態を判定する


(過去ログ 136 を表示中)

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

■80303 / inTopicNo.1)  C# チェックボックスの選択状態を判定する
  
□投稿者/ ごう (6回)-(2016/07/02(Sat) 10:31:00)

分類:[.NET 全般] 

OS:Windows7
開発環境:Visual Studio 2010 Professional

C#で、フォーム上のグリッドボックスにチェックボックスを配置し、
その選択状態を判定に使用する、ということをやっています。

フォーム上のチェックボックス判定処理が全てtrueになるということが分かりました。
当初、TrueValue、FalseValueに何も設定せず、コンボボックスのValueを"true(bool)"にしていましたが
チェックボックスの選択状態が全てtrueとなってしまいました。

以下のサイトの回答を読んで、
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1343246853
TrueValue、FalseValueに文字列を設定し、コンボボックスのValueを判定するように作りました。

判定をbool型で行うのが理想と思い、以下の通りに初期値をセットしましたが、

   cbc.TrueValue = true;
   cbc.FalseValue = false;
   cbc.Value = true;


以下の判定処理でエラー(オブジェクト参照がオブジェクト インスタンスに設定されていません。)となります。
   if ((bool)cbc.Value)


原因についてご教示頂きたいです。よろしくお願いします。


例:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            for (int i = 0; i < 10; i++)
            {
                dataGridView1.Columns.Add(new DataGridViewCheckBoxColumn());
                dataGridView2.Columns.Add(i.ToString(), i.ToString());

                dataGridView1.Columns[i].Width = 50;
                dataGridView2.Columns[i].Width = 50;
            }

            DataGridViewCheckBoxCell cbc;

            for (int i = 0; i < 5; i++)
            {
                cbc = (DataGridViewCheckBoxCell)dataGridView1.Rows[0].Cells[i];
                cbc.TrueValue = "True";
                cbc.FalseValue = "False";
                cbc.Value = "True";
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataGridViewCheckBoxCell cbc;

            for (int i = 0; i < 10; i++)
            {
                cbc = (DataGridViewCheckBoxCell)dataGridView1.Rows[0].Cells[i];
                
                if ((string)cbc.Value == "True")
                {
                    dataGridView2.Rows[0].Cells[i].Value = "○";
                }
                else
                {
                    dataGridView2.Rows[0].Cells[i].Value = "";                
                }
            }
        }
    }

引用返信 編集キー/
■80304 / inTopicNo.2)  Re[1]: C# チェックボックスの選択状態を判定する
□投稿者/ shu (892回)-(2016/07/02(Sat) 12:17:14)
No80303 (ごう さん) に返信

Valueに値を設定しないとnullになるからだと思います。
すべてのセルに値を設定するようにしましょう。

値設定サンプル:
for (int i = 0; i < 10; i++)
{
    var cbc = (DataGridViewCheckBoxCell)dataGridView1.Rows[0].Cells[i];
    cbc.Value = (i < 5);
}

引用返信 編集キー/
■80305 / inTopicNo.3)  Re[1]: C# チェックボックスの選択状態を判定する
□投稿者/ Azulean (659回)-(2016/07/02(Sat) 13:21:32)
No80303 (ごう さん) に返信
> 以下の判定処理でエラー(オブジェクト参照がオブジェクト インスタンスに設定されていません。)となります。
> if ((bool)cbc.Value)

全部セットしておいて bool にキャストできるようにするか、先に if (cbc.Value != null && (bool)cbc.Value) として null の場合は false とみなすようなガードを入れておくか。
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -