0

好的,这就是问题所在:最近我遇到了一个问题,我无法在 GroupBox 内的按钮上使用加速键(又名HotKey s)。就在一分钟前我发现了原因,但现在唯一的问题是这个原因让我比以前更困惑,那就是在 Form 上找不到带加速键的此类按钮。效果是,当我在设计时双击受影响的按钮时,我收到错误“属性和方法不兼容”。

MethodName is VKPInputBtnClick,这实际上被声明为函数,而不是单元中的方法。

让我感到困惑的是,我根本没有将OnClickVKPInputBtn 的事件处理程序分配给任何方法!

我怎么可能编译程序并且没有运行时问题......但是在设计时双击按钮有这样烦人的问题......

有什么解决办法吗?重新安装IDE?

非常感谢任何帮助...

4

6 回答 6

4

双击没有设置默认事件属性的控件会导致 IDE 分配该属性。(它不仅仅是进入代码编辑器的快捷方式;它是F12.)IDE 在源代码中搜索具有所需名称的函数。如果它没有找到,那么它会在包含表单中创建一个方法并将其分配给组件的 event 属性。但是,如果它确实找到了具有正确名称的东西,它会尝试分配它而不创建任何新东西。

显然,问题在于 IDE 在您的案例中找到的东西与它似乎伴随的事件不兼容。可能是一个错误——它不应该选择非方法——但考虑到人类为独立函数选择与 IDE 为事件处理程序选择相同名称的频率很低,它很少遇到。

你有几个选择:

  • 重命名VKPInputBtnClick,使其看起来不像OnClick是控件的事件处理程序VKPInputBtn
  • makeVKPInputBtnClick是表单类的一个方法。
  • 在表单类中手动声明一个 VKPInputBtnClick方法,可能IDE会选择它而不是独立函数。
  • OnClick在 Object Inspector的属性中键入其他名称,然后双击它(或按Enter)。IDE 将创建一个具有该名称的方法。
于 2010-11-09T14:49:47.163 回答
1

尝试从声明和实现部分的 .pas 文件中删除处理程序(如果它们包含代码,则复制到某处)。然后尝试重新创建按钮的处理程序。有时 IDE 可能会失去同步,所有可以做的就是重置回已知状态。

如果这不起作用,请查看您是否可以关闭表单并重新打开,或从 .dfm 文件中删除处理程序。

于 2010-11-09T11:50:51.933 回答
0

这些组件在设计和运行时的工作方式不同。在 desgintime 中双击一个按钮会创建并添加一个 OnClick 处理程序。这就解释了为什么行为不同。

希望我能正确理解你的问题。您的表单上有一个组件,并且您无法分配正确的事件处理程序,因为自动创建的事件处理程序与预期的事件处理程序类型不同?

在这种情况下,创建您自己的事件处理程序并分配它。您甚至可以在表单的 OnCreate 中分配它。如果通过 dfm 分配不成功。

于 2010-11-09T11:33:35.213 回答
0

如果这是一个真正的错误,请不要忘记将其提交给 Embarcadero。您可以通过 IDE 中的工具菜单访问 QA 应用程序或访问网站。

于 2010-11-09T14:40:33.110 回答
0

无论如何,问题得到了回答,很明显这个错误消息应该是一个 RAD Studio XE 错误,因为 IDE 以错误的方式比较了 Object 的实际属性和所需属性。

非常感谢大家的意见。

EDN QC 案例:#89543


笔记:

这是我用来为 VKPInputBtnCLick 函数使用加速器功能的方法。
- 使用此代码片段的消息:Alt 键处理算法
- 将 VK_TAB 更改为 VK_LMENU(左 ALT)
- 捕获 ALT 消息后,将全局唯一值设置为变量
- 在 FormKeyPress 事件处理程序中,检查唯一的全局变量值是否与我匹配的值之前设置 - 执行功能。

希望它有助于其他愿意这样做的人。此外,也欢迎使用更时尚、更简洁的方式来实现此功能。

尚未将问题设置为已回答。

于 2010-11-09T20:02:35.177 回答
0

实际上被声明为函数,而不是单元中的方法。

方法处理程序必须是过程,而不是函数。因此它不起作用。

正如托比很久以前所说的(但你显然没有听):

尝试从 .pas 文件中删除处理程序...然后尝试为按钮重新创建处理程序。

于 2010-11-11T16:06:40.827 回答