edisonlok 发表于 2012-4-19 16:49:00

关于Text改变时的消息

需要捕获Text即将改变的消息,并作出处理(允许改变,不允许改变)。
1,没开启输入法,键盘输入。(可以正常捕获)
2,开启输入法,键盘输入。无确切结论。如输入法使用空格选字,或者使用鼠标单击选字,此时收到的消息不一致。
3,使用Selection.Text更改内容,此时完全没有捕获到消息。

以上测试环境为vs2010, 采用方式是:Application.AddMessageFilter(new TestMsgFilter(this))。

另外,经测试,TX控件对中文输入是经过特殊处理的,测试方法如下:
1)在Tx中输入AB,选中AB,用搜狗输入法录入“renmin”(此时尚未按下空格选字),这时候的Tx的Text已经变成“renmin”。如果把输入焦点移开,则TX内容变成空的了。
2)在普通的Edit中,按上述操作,开启输入法录入,如果不按下空格选字,Edit的内容是不会变化的。

请教版主,如何在Text即将改变之前捕捉到事件,并访问到将要改变的内容?

iceman 发表于 2012-4-20 10:49:00

回复 1# edisonlok 的帖子

edisonlok 你好:

请问楼主的 Case 是想监听所有 内容还是 某个 TextFiled 的更改呢?

需要捕获Text即将改变的消息,并作出处理(允许改变,不允许改变)。
收键盘消息接请楼主尝试使用:textControl1_KeyPress 方法,并且通过 e.Handled = true 去操作是否执行当前输入。看是否满足需求。
其他问题正在处理中,稍后回复~

iceman 发表于 2012-4-20 11:53:00

回复 1# edisonlok 的帖子

edisonlok你好,
目前无法实现:“如何在Text即将改变之前捕捉到事件,并访问到将要改变的内容?”
但是我们可以结合 TextFiled_Changed 事件 和 textControl1_KeyPress 事件去模拟该方法,从而获取当前内容。下面是我的实现方法:
      String textFiledChange;
      void textControl1_TextFieldChanged(object sender, TXTextControl.TextFieldEventArgs e)
      {
            string test = e.TextField.Text.Replace(textFiledChange, "");
            e.TextField.Text = test;
      }

      void textControl1_KeyPress(object sender, KeyPressEventArgs e)
      {
            char[] keychar = new char[] { e.KeyChar };
            textFiledChange = new String(keychar);
      }

edisonlok 发表于 2012-4-23 09:03:00

我们需要监听的是所有文字内容,包括普通文字和TextField。

iceman 发表于 2012-4-23 10:44:00

回复 4# edisonlok 的帖子

edisonlok 你好,
不好意思,TX 目前无法监听普通文字。
页: [1]
查看完整版本: 关于Text改变时的消息