如何使用 RichTextBox 消除烦人的蜂鸣声

Mur*_*are 5 c# richtextbox winforms

我将 RichTextBox 控件放置在新窗体上并启动该项目。所以 RichTextBox.Text = "";

每次我按向上或向下键时,我都会听到烦人的蜂鸣声!如何摆脱这个问题?

在 KeyDown 方法中使用“e.SuppressKeyPress = true”可锁定光标位置。

RbM*_*bMm 5

首先,我们需要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)


Jay*_*Jay 1

那么,您可以尝试仅在插入符位于第一行并且键向上、或者在最后一行并且键向下或者位于位置 0 并且键向左等等时抑制该键。

也就是说,这就是大多数文本框的行为方式,并且声音是在您的操作系统首选项中设置的。如果您尝试将插入符号移出文本框的限制,例如在写字板或 Outlook 中,您会听到相同的蜂鸣声。