Mur*_*are 5 c# richtextbox winforms
我将 RichTextBox 控件放置在新窗体上并启动该项目。所以 RichTextBox.Text = "";
每次我按向上或向下键时,我都会听到烦人的蜂鸣声!如何摆脱这个问题?
在 KeyDown 方法中使用“e.SuppressKeyPress = true”可锁定光标位置。
首先,我们需要EM_GETOLEINTERFACE向丰富的编辑窗口发送消息 - 这是检索客户端可用于访问丰富的编辑控件的组件对象模型 (COM) 功能的 IRichEditOle 对象。
然后为了检索ITextServices指针,调用QueryInterface私有IUnknown.返回的EM_GETOLEINTERFACE指针。
这里存在有趣的一点——IID_ITextServices不为人所知但需要在运行时从Msftedit.dll获取
Msftedit.dll导出一个名为IID_ITextServices 的接口标识符 (IID) ,您可以使用它来查询 IUnknown 指针以获取 ,您可以使用它来查询ITextServices。
我们得到之后ITextServices指针之后 - 我们可以简单地调用OnTxPropertyBitsChange(TXTBIT_ALLOWBEEP, 0)
代码示例:
if (HMODULE hmodRichEdit = LoadLibrary(L"Msftedit.dll"))
{
// create richedit window
if (HWND hwndRich = CreateWindowExW(0, MSFTEDIT_CLASS, ...))
{
if (IID* pIID_ITS = (IID*) GetProcAddress(hmodRichEdit, "IID_ITextServices"))
{
IUnknown* pUnk;
if (SendMessageW(hwndRich, EM_GETOLEINTERFACE, 0, (LPARAM)&pUnk))
{
ITextServices* pTxtSrv;
HRESULT hr = pUnk->QueryInterface(*pIID_ITS, (void**)&pTxtSrv);
pUnk->Release();
if (0 <= hr)
{
pTxtSrv->OnTxPropertyBitsChange(TXTBIT_ALLOWBEEP, 0);
pTxtSrv->Release();
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么,您可以尝试仅在插入符位于第一行并且键向上、或者在最后一行并且键向下或者位于位置 0 并且键向左等等时抑制该键。
也就是说,这就是大多数文本框的行为方式,并且声音是在您的操作系统首选项中设置的。如果您尝试将插入符号移出文本框的限制,例如在写字板或 Outlook 中,您会听到相同的蜂鸣声。
| 归档时间: |
|
| 查看次数: |
2919 次 |
| 最近记录: |