2017-12-31 199 views
1

enter image description hereは、今、私の質問は、私はCheckBoxchecked 3のように言うにすることができますどのように多くの制限を設定するのですかですか?私はすでにCheckBoxの数をチェックするコードを持っています。私はプログラミングには新しく、悪い英語には申し訳ありません。リミットチェック

private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
     bool isChecked = Convert.ToBoolean(DataGridView1.Rows[DataGridView1.CurrentCell.RowIndex].Cells[0].Value.ToString()); 

     if (isChecked) 
     { 
      num += 1; 
     } 
     else 
     { 
      num -= 1; 
     } 
     MessageBox.Show(num.ToString()); 
} 
+0

NUM + = 1。あなたにブレークポイントを置き、本質的に(NUM> = 3の場合」で、num + = 1を交換したいです)theCheckbox.value = false; else num + = 1; "私は現時点ではMSの箱に載っていないので、正確な構文を教えることはできませんが、あなた自身でこれを発見する方法を学ぶ必要があります。実行がブレークポイントで停止したら、ctrl gを押して直接ウィンドウを開きます。 DataGridView1と入力してEnterキーを押すと、オブジェクトが表示されます。 DataGridView1.Rows [DataGridView1.CurrentCell.RowIndex] .Cells [0]をフォローアップし、利用可能なものを見てください。有望に見えるものがなければ、.Valueを追加してください。 .Valueをfalseに設定してみてください。 – NeedsAnswers

+0

直接ウィンドウで再生することで、必要なプロパティを見つけることができます。このプロパティは、他のオブジェクトの見かけ上任意の数のレイヤに埋め込まれることがあります。 – NeedsAnswers

答えて

1

この例では、チェックボックスを3回しか変更できません。編集モードに入る前に、チェックボックスが3回変更されたかどうかをチェックします。そうであれば、編集モードはキャンセルされます。コミットされたすべての編集で、カウンタはセルのTagプロパティで更新されます。

dataGridView1.CellBeginEdit += (sender , e) => 
{ 
    var dataGridViewCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
    if (dataGridViewCell.ValueType == typeof(bool)) 
    { 
     var checkedCount = dataGridViewCell.Tag is int ? (int)dataGridViewCell.Tag : 0; 
     e.Cancel = checkedCount == 3; 
    }     
}; 
dataGridView1.CellEndEdit += (sender , e) => 
{ 
    var dataGridViewCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
    if (dataGridViewCell.ValueType == typeof(bool)) 
    { 
     var checkedCount = dataGridViewCell.Tag is int ? (int)dataGridViewCell.Tag : 0; 
     dataGridViewCell.Tag = checkedCount + 1; 
    } 
}; 

この例では唯一の3グリッド内のチェックボックスをチェックしallowes:

public partial class Form1 : Form 
{ 
    private int _checkedCount; 

    public Form1() 
    { 
     InitializeComponent(); 

     dataGridView1.CellBeginEdit += (sender , e) => 
     { 
      var dataGridViewCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
      if (dataGridViewCell.ValueType == typeof(bool)) 
       e.Cancel = _checkedCount == 3; 
     }; 

     dataGridView1.CellValueChanged += (sender , e) => 
     { 
      var dataGridViewCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
      if (dataGridViewCell.ValueType == typeof(bool)) 
       _checkedCount += 1; 
     }; 
    } 
} 
+0

これらをリスナーに付ける必要がありますか? – Dhenz

+0

これらのイベントは、一度だけ初期化する必要があります。これをInitializeComponent()の直後にフォームのコンストラクタに配置できます。 – Sievajet

+0

私はint iでエラーが発生していますか? i:0;それは – Dhenz

関連する問題