1 RichEdit无法像Edit一样发出textchanged消息

最近在写一个小工具的时候,发现Duilib的RichEdit控件无法发出textchanged消息,就是说没有办法检测到RichEdit中的文本是否被改变,这限制了很多逻辑实现,比如说当当前RichEdit控件内的文本发生变化时,修改其他控件属性。

2 问题解决

2.1 RichEdit控件xml定义

比如在界面中定义了如下的RichEdit控件,

<RichEdit name="RichEdit_Input" tooltip="输入文本" inset="5,5,5,5" bordercolor="0xFF000000" focusbordercolor="0xFF6d9eeb"  bordersize="2" borderround="3,3" font="1" multiline="true" vscrollbar="true"  autovscroll="true" />

2.2 在代码中获取上述定义的RichEdit控件,并增加发送textchanged的功能

在InitWindow虚函数中获取上述RichEdit控件,并增加发送textchanged的功能

if (m_pRichEdit_Input == nullptr)
{
    m_pRichEdit_Input = static_cast<CRichEditUI*>(m_PaintManager.FindControl(MainWnd_RichEdit_Input_Name));
    if (m_pRichEdit_Input != nullptr)
    {
        // 设置以便RichEdit控件接收到textchanged消息
        m_pRichEdit_Input->SetEventMask(ENM_CHANGE);
        m_pRichEdit_Input->SetFocus();
    }
}

2.3 对发送的textchanged消息进行处理

在Notify虚函数中对textchanged进行处理

void MainWnd::Notify(TNotifyUI& msg)
{
    if (_tcsicmp(msg.sType, _T("textchanged")) == 0)
    {
        OnTextChanged(msg);
    }

    WindowImplBase::Notify(msg);
}

在OnTextChanged函数中增加处理逻辑

void MainWnd::OnTextChanged(TNotifyUI& msg)
{
    if (_tcsicmp(msg.pSender->GetName(), MainWnd_RichEdit_Input_Name) == 0)
    {
        // 处理逻辑
        ……
    }
}

如果您觉得对您有帮助,可以请站长喝一杯咖啡哦!

记得在赞赏备注里写上您的昵称

您可在本站资助名单中查看你的打赏记录哦!

支付宝扫一扫

微信扫一扫

金额随意,礼轻义重

当前分类随机文章推荐

全站随机文章推荐

关于本站站长 StubbornHuang
Duilib – RichEdit控件发送textchanged消息-StubbornHuang Blog纵使晴明无雨色,入云深处亦沾衣。