【问题标题】:Override OnCellMouseDown for DataGridView - type does not exist error覆盖 DataGridView 的 OnCellMouseDown - 类型不存在错误
【发布时间】: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


【解决方案1】:

找出问题所在。

用于我的命名空间的名称与我的主表单类的名称匹配。

通过更改主表单类的名称和所有关联的引用,我能够摆脱这个错误并使其正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多