Vb6 Escape变为Ctrl-Z-但为什么?

Vb6 Escape变为Ctrl-Z-但为什么?,vb6,Vb6,我目前正在维护一个VB6应用程序,但对VB6知之甚少。 我遇到了一些令我困惑的代码 Private Sub Form_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) If KeyAscii = 27 And TypeOf Me.ActiveControl Is TextBox Then KeyAscii = 0 SendKeys "^Z" End If End Sub 我所

我目前正在维护一个VB6应用程序,但对VB6知之甚少。 我遇到了一些令我困惑的代码

Private Sub Form_KeyPress(KeyAscii As Integer)
  KeyAscii = Asc(UCase(Chr(KeyAscii)))
  If KeyAscii = 27 And TypeOf Me.ActiveControl Is TextBox Then
      KeyAscii = 0
      SendKeys "^Z"
  End If
End Sub
我所知道的是:当按下escape按钮时,代码正在调用Ctrl+Z键。 我不知道的是:为什么?我在单击escape后调试了一遍,除了正在运行的if语句的内容之外,它没有做什么我能感觉到的(除了光标的短暂显示)

有人知道这件事的重要性吗?i、 e.发送Ctrl+Z组合键

Ctrl+Z是基于DOS的系统的文件结尾字符,与类UNIX系统中的Ctrl+D(通常是可配置的)不同

然而,我认为在这种情况下更可能是一个撤销命令,因为它发生在一个文本框中

这将是我的第一个猜测,您需要发送该击键来恢复您所做的任何更改

测试该理论的一种方法是在文本框中进行更改,然后按Ctrl+Z键查看是否恢复


当然,给定的应用程序可以自由地以其认为合适的任何方式解释击键。您可能应该查看代码以了解Ctrl+Z的作用。

您的问题与应用程序无关,因此无法确定答案,但是,从历史角度来看,Ctrl+Z是一个
ASCII
文件结束标记(
EOF
ASCII 26
),在数字设备公司,DOS world过去常用于escape(
ESC
ascii27
)现在常用的地方。也就是说,为了摆脱这种情况,用户习惯于键入Ctrl+Z,而不是按escape键

我怀疑这是一段遗留的兼容代码。

Ctrl+Z键将传递给具有键盘焦点的控件。某些控件对撤消最近编辑的支持有限:尤其是文本框


因此,这可能是将非标准键(Esc)与撤消最新编辑的操作关联起来的一种快速而肮脏的方式。在VB6代码中找不到更多的按键源代码,因为按键实际上是由Windows控件处理的。

+1尽管onefootswill可能无法查看所有代码以了解CTRL-Z的功能,因为按键可能会传递到本机Windows控件,例如textbox(对撤消最近的编辑有一些有限的内置支持)。因此,这将涉及到进入Microsoft的VB6运行时库,然后进入Windows源代码:)谢谢标记。撤销是有意义的。我明天试试看,谢谢。历史背景是有帮助的。这是一个表单应用程序,所以与控制台相关的东西不会真正适用。在当前文本框上执行撤消操作非常笨拙。此外,它将在按下第二个Esc时重做。最好将API与
EM\u CANUNDO
一起使用,然后如果UNDO队列中有任何内容,则使用
EM\u UNDO