类型为"System.EventHandler"的对象不能转换为类型"System.Windows.Forms.DataGridViewCellEventHandler"



所以我想这实际上与我的IDE有关,但我不知道该怎么做。我用的是Visual Studio Professional 2013。

我制作了一个用作打开文件表单的表单——它左边有一个目录树,右边有一个表,显示所选目录下文件的信息。

起初,该表是来自ComponentOne的TrueDBGrid。但这给了我一些问题,所以我最终决定简单地将其替换为常规的DataGridView。

这是表单代码的开头:

Public Class dlgOpenFile
    Private extension() As String       'used for filtering by extension(s) selected in dropdown
    Private list As DataTable
    Private treeTimer As Timer
    Private backStack As New Stack(Of String)
    Private forwardStack As New Stack(Of String)
    Private btnTip As New ToolTip()
    Private Sub dlgOpenFile_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        inTextSearch = False
        btnTip.SetToolTip(btnBack, "Backward")
        btnTip.SetToolTip(btnForward, "Forward")
        btnTip.SetToolTip(btnRefresh, "Refresh")
        btnTip.SetToolTip(btnSearch, "Search")
        btnTip.SetToolTip(btnClear, "Clear Search")
        etc....

在更改了需要更改的内容以使用新类型之后,我从VS运行应用程序-我最终得到了这个运行时错误

System类型的对象。EventHandler'不能转换为类型"System.Windows.Forms.DataGridViewCellEventHandler"

在这一行:

Private btnTip As New ToolTip()

所以我只是在设计器的表单中添加了一个ToolTip组件,这样我就可以注释掉这一行。但是当我再次尝试时,我得到了相同的结果,这次是在这一行:

Private forwardStack As New Stack(Of String)
因此,我将堆栈的实例化移到了Load事件中,如下所示:
Private backStack As Stack(Of String)
Private forwardStack As Stack(Of String)
Private Sub dlgOpenFile_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    backStack = New Stack(Of String)
    forwardStack = New Stack(Of String)

现在我得到了完全相同的错误,但是在调用那个表单的时候!在另一个表单中,用户可以单击按钮打开该表单,行:

    Dim openFile As New dlgOpenFile

我真的不知道我能做些什么。为什么误差一直往上移动?为什么我在这样的地方会出现这样的错误?

我试着检查我的代码,然后关闭visual studio一会儿,然后重新打开它,但这并没有改变任何东西。

我有几个不同的事件处理程序dgvList在我的代码- CellFormatting设置单元格工具提示,CellClick和双击....我不明白为什么仅仅尝试启动表单....

就会产生问题

任何帮助都是感激的!

似乎你是手动铸造"DataGridViewCellEventHandler"到你的数据网格视图事件。

在你的代码中查找这个。如果是,请不要这样做。

让系统自己生成事件处理程序方法。

例如,处理/调用"datagridview cellValueChanged"

进入你的表单。

选择数据网格视图控件。

Rightclick ->属性。

在属性窗口中选择"events"图标。

查找"cellValueChanged"。双击它。您将创建如下所示的内容。

Private Sub DataGridView1_CellValueChanged(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValueChanged
'Handle your business or function calls.

    End Sub

这可能会解决您的问题。如果这不是你想要的东西,请添加评论,我会删除这个答案。

好的,看起来我发现了问题:在DataGridView的属性中,因为我有ComponentOne的东西,有一个点选择"C1CommandHolder上的C1Command"和一个点选择"C1CommandHolder上的C1ContextMenu"。我在C1Command的下拉菜单中选择了打印命令,在C1ContextMenu的下拉菜单中选择了打印上下文菜单。原来我应该把c1命令设置为"none"。算了吧!

相关内容

最新更新