C# 在单击其中一个单元格时使其他按钮列单元格不可单击
C# Make other button column cell unclickable when one of the cell is clicked
我有一个 GUI,它有一个带有按钮列的数据网格视图。
单击按钮单元格后,我将按钮 enabled 属性 设置为 false。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
DataGridView senderGrid = (DataGridView)sender;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
{
//....
DataGridViewDisableButtonCell btnClick = (DataGridViewDisableButtonCell)dataGridView4.Rows[e.RowIndex].Cells[e.ColumnIndex];
btnClick.Enabled = false;
//execude code
btnClick.Enabled = true;
}
}
我的问题是如何使另一个单元格也不可点击,以防止在单击其中一个按钮单元格时出现代码 运行?
您需要获取 DataGridViewDisableButtonCell
类型的单元格才能获取或设置它们的属性。为避免重复相同的代码,创建一个方法来切换 Enabled
属性.
private void SetEnabled(bool enabled)
{
foreach (var cell in senderGrid.Rows.OfType<DataGridViewRow>()
.SelectMany(x => x.Cells
.OfType<DataGridViewDisableButtonCell>()))
cell.Enabled = enabled;
}
如果您有多个该类型的列并且您想要将更改应用于特定的列,那么您需要指定目标列:
private void SetEnabled(bool enabled, int columnIndex)
{
foreach (var cell in senderGrid.Rows.OfType<DataGridViewRow>()
.SelectMany(c => c.Cells
.OfType<DataGridViewDisableButtonCell>()
.Where(col => col.OwningColumn.Index == columnIndex)))
cell.Enabled = enabled;
}
使用代码中的方法:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
var senderGrid = sender as DataGridView;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
{
SetEnabled(false);
// Or
// SetEnabled(false, e.ColumnIndex);
//execude code
SetEnabled(true);
// Or
// SetEnabled(true, e.ColumnIndex);
}
}
我有一个 GUI,它有一个带有按钮列的数据网格视图。
单击按钮单元格后,我将按钮 enabled 属性 设置为 false。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
DataGridView senderGrid = (DataGridView)sender;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
{
//....
DataGridViewDisableButtonCell btnClick = (DataGridViewDisableButtonCell)dataGridView4.Rows[e.RowIndex].Cells[e.ColumnIndex];
btnClick.Enabled = false;
//execude code
btnClick.Enabled = true;
}
}
我的问题是如何使另一个单元格也不可点击,以防止在单击其中一个按钮单元格时出现代码 运行?
您需要获取 DataGridViewDisableButtonCell
类型的单元格才能获取或设置它们的属性。为避免重复相同的代码,创建一个方法来切换 Enabled
属性.
private void SetEnabled(bool enabled)
{
foreach (var cell in senderGrid.Rows.OfType<DataGridViewRow>()
.SelectMany(x => x.Cells
.OfType<DataGridViewDisableButtonCell>()))
cell.Enabled = enabled;
}
如果您有多个该类型的列并且您想要将更改应用于特定的列,那么您需要指定目标列:
private void SetEnabled(bool enabled, int columnIndex)
{
foreach (var cell in senderGrid.Rows.OfType<DataGridViewRow>()
.SelectMany(c => c.Cells
.OfType<DataGridViewDisableButtonCell>()
.Where(col => col.OwningColumn.Index == columnIndex)))
cell.Enabled = enabled;
}
使用代码中的方法:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
var senderGrid = sender as DataGridView;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
{
SetEnabled(false);
// Or
// SetEnabled(false, e.ColumnIndex);
//execude code
SetEnabled(true);
// Or
// SetEnabled(true, e.ColumnIndex);
}
}