【发布时间】:2023-03-28 20:28:01
【问题描述】:
我正在尝试禁用单击 datagridview 中左上角标题单元格时出现的“选择所有单元格”功能。在另一个 SO 问题 (here) 中,我试图通过继承 DataGridView 并覆盖 OnCellMouseDown 事件以在单击左上角的单元格时不执行任何操作。
在 MainForm.cs 中
namespace MainProjectName
{
public partial class MainProjectName : Form
{
**misc form code here**
}
}
然后创建了一个新的覆盖 DGV 类,OverrideTest.cs
namespace MainProjectName
{
public partial class OverrideTest : DataGridView
{
protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex == -1) return;
base.OnCellMouseDown(e);
}
}
}
通过此设置,新的“OverrideTest”会显示在工具箱中,我可以成功地将自定义 DataGridView 拖到我的表单上。但是编译失败,报错:
CS0426 类型名称“OverrideTest”在类型“MainProjectName”中不存在
我做错了什么,你将如何解决这种类型不存在的错误?
【问题讨论】:
-
只是好奇:e.RowIndex == -1 && e.ColumnIndex == -1
&&或||??至于错误:清理并重新创建解决方案! -
&&- 左上角单元格位置返回为 [-1, -1]。在具有多选全选的普通 DGV 中,单击此左上角单元格会选择 DGV 中的每个单元格。默认情况下,单击行/列标题也会选择整个行/列,但可以通过将SelectionMode设置为CellSelect轻松关闭此功能。select all行为只能通过代码解决方法/覆盖来删除。我确实尝试过清理/重建,以及删除 obj 和 bin 文件夹,但没有运气。只有在我使命名空间和类/表单名称不同并且 THEN clean/rebuild 之后它才起作用。
标签: c# inheritance datagridview