我有一个Rich Text Box控件。它没有滚动条,因为我使用鼠标滚轮模块捕获鼠标滚轮事件。
当选择富文本框并向上/向下旋转鼠标滚轮时,它会将键{UP}和{DOWN}发送到它们的富文本框以“模仿”滚动效果。
但是,当您处于文本框内容的开头或结尾时(例如,没有任何内容可以滚动),会发出恼人的哔声系统声音。我需要禁用它,任何想法如何做到这一点?
已经尝试在富文本框的按键事件中添加此代码:
If KeyAscii = 38 Or KeyAscii = 40 Then
KeyAscii = 0
End If
不起作用。不知道为什么它应该工作时它不起作用。
答案 0 :(得分:1)
在函数/子
之外Public Declare Function SendMessageByVal Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
在您的子/功能
中Ret = SendMessageByVal(gRtfHwnd, EM_SETEDITSTYLE, SES_ALLOWBEEPS + SES_USECRLF, SES_ALLOWBEEPS + SES_USECRLF)
要查看更多内容,请参阅http://ambracode.com/index/show/1405175,这是我在SO发布的旧帖子的副本。
答案 1 :(得分:0)
使用KeyDown
事件代替KeyPress
,仅当光标位于第一行/最后一行时才禁用KeyCode
以防止禁用箭头键(向上/向下)完全。
首先,您需要在声明中添加以下内容:
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
Private Const EM_LINEFROMCHAR = &HC9
Private Const EM_GETLINECOUNT = &HBA
Private Function GetCurrentLine(Txt As RichTextBox) As Long
GetCurrentLine = SendMessage(Txt.hWnd, EM_LINEFROMCHAR, Txt.SelStart, 0&) + 1
End Function
Private Function GetLineCount(Txt As RichTextBox) As Long
GetLineCount = SendMessage(Txt.hWnd, EM_GETLINECOUNT, 0&, 0&)
End Function
然后按照描述使用KeyDown
事件:
Private Sub RichTextBox1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyUp Then
If GetCurrentLine(RichTextBox1) = 1 Then KeyCode = 0
ElseIf KeyCode = vbKeyDown Then
If GetCurrentLine(RichTextBox1) = GetLineCount(RichTextBox1) Then KeyCode = 0
End If
End Sub
当然,您需要将RichTextBox1
替换为RichTextBox的名称。
希望有所帮助:)