有时,当用户在DataGridViewTextBox中键入文本时,您希望启用或禁用控件,具体取决于键入的值。例如,在键入正确的值后启用按钮
微软在一篇关于如何创建可以禁用的DataGridViewButtonCell的文章中展示了这种方式。
这是他们的伎俩(也可以在其他解决方案中看到)
这很好,除了CommitEdit使文本在OnCellValueChanged中被选中。因此,如果要键入64,则在键入4时会收到通知,当键入4时会收到通知。但是因为选择了6,所以不会得到64,而是将6替换为4。 不知何故,代码必须在解释值之前取消选择OnCellValueChanged中的6。
属性DataGridView.Selected不起作用,它不会取消选择文本,但会取消选择单元格。
那么:如何取消选择所选单元格中的文本?
答案 0 :(得分:1)
我认为您需要一些东西,当用户在当前单元格中键入一些文本时,您需要知道当前文本(甚至在提交之前)以检查是否需要禁用某个按钮。因此,以下方法应该适合您。你不需要提交任何东西,只需处理当前编辑控件的TextChanged
事件,编辑控件只在EditingControlShowing
事件处理程序中公开,这里是代码:
//The EditingControlShowing event handler for your dataGridView1
private void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e){
var control = e.Control as TextBox;
if(control != null &&
dataGridView1.CurrentCell.OwningColumn.Name == "Interested Column Name"){
control.TextChanged -= textChanged_Handler;
control.TextChanged += textChanged_Handler;
}
}
private void textChanged_Handler(object sender, EventArsg e){
var control = sender as Control;
if(control.Text == "interested value") {
//disable your button here
someButton.Enabled = false;
//do other stuff...
} else {
someButton.Enabled = true;
//do other stuff...
}
}
请注意,我上面使用的条件可以根据您的需要进行修改,这取决于您。