找回密码
 立即注册

QQ登录

只需一步,快速开始

edisonlok

注册会员

3

主题

4

帖子

54

积分

注册会员

积分
54
  • 50

    金币

  • 主题

  • 帖子

最新发帖
edisonlok
注册会员   /  发表于:2012-4-19 16:49  /   查看:5406  /  回复:4
需要捕获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即将改变之前捕捉到事件,并访问到将要改变的内容?

4 个回复

倒序浏览
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 事件去模拟该方法,从而获取当前内容。下面是我的实现方法:

  1.         String textFiledChange;
  2.         void textControl1_TextFieldChanged(object sender, TXTextControl.TextFieldEventArgs e)
  3.         {
  4.             string test = e.TextField.Text.Replace(textFiledChange, "");
  5.             e.TextField.Text = test;
  6.         }

  7.         void textControl1_KeyPress(object sender, KeyPressEventArgs e)
  8.         {
  9.             char[] keychar = new char[] { e.KeyChar };
  10.             textFiledChange = new String(keychar);
  11.         }
复制代码
回复 使用道具 举报
edisonlok
注册会员   /  发表于:2012-4-23 09:03:00
地板
我们需要监听的是所有文字内容,包括普通文字和TextField。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-23 10:44:00
5#

回复 4# edisonlok 的帖子

edisonlok 你好,
不好意思,TX 目前无法监听普通文字。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部