none
关于WPF中PreviewTextInput事件的问题 RRS feed

  • 问题

  • 在使用TextBox的PreviewTextInput事件过滤用户输入的时候:
    1.如果输入的是英文字符,那么执行e.Handled = true之后,TextBox中确实没有字符出现。
    2.如果使用中文或者日文输入法,那么即使执行了e.Handled = true,在按空格键后,输入的中文字符还是会出现在TextBox中,如果按下回车,那么输入法窗口中的英文字符也会出现在TextBox中。

    请问如何解决中文和日文输入状态下的过滤问题?
    谢谢!

    开发环境如下:
    Windows XP 日文专业版
    Visual Studio 2008 专业版 SP1
    .NET Framework 3.5
    WPF
    2010年11月26日 14:08

答案

  • Hi Yanxuemei,

    我重现了个问题, 这个可能和输入法状态有关系,在WPF的TextBox的路由事件确实无法去停止他的消息。 不过我们可以通过监控输入法状态在WPF程序中,然后来改变对于TextBox的输入行为,比如这个类:InputMethod

    对于这个缺陷,你可以到微软专门收集问题和反馈的网站上去提交一个反馈信息,我们的专业工程师会及时的对这个问题进行衡量和解答的,你可以访问一下的站点来提交关于WPf产品的反馈:https://connect.microsoft.com/WPF

    谢谢!

    Bob Bao


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Are you looking for a typical code sample? Please download All in One Code Framework !

    如果有回复帮助并解决了您的问题,请点击 “标记为答复”,如果没有没有帮助,请随时点击“取消答复标记”
    你在为寻找代码示例而苦恼吗?赶快来下载 All in One Code Framework 微软一站式代码框架 吧!
    2010年12月3日 12:45
    版主
  • Hi Yanxuemei,

    如果你觉得用TextChanged事件实现很复杂,你可以尝试一下使用PreviewKeyDown事件去解决你的问题, 就是如果用户输入的按键是为了切换输入法,那么就阻止这个事件发生。

    如果你的项目允许这么做,你可以考虑一下这个方法。

     

    Best regards,

    Sheldon _Xiao


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年12月6日 2:43
    版主

全部回复

  • Hi Yanxuemei,

    对于你的问题,我认为在用输入法输入的时候是不会进行TextBox的Check的,如果你想实现输入法的check, 你可以尝试在用户输入的内容到达TextBox的同时进行check,如果输入的内容非法, 那么就手动删除TextBox中的内容 或者清空你的TextBox。

     

    Best regards,

    Sheldon _Xiao


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年11月30日 11:45
    版主
  • Hi Sheldon,

    Bazinga! ;)

    谢谢你的回答!

    我并不是要在用输入法输入的途中进行check,而且事实上这个时候PreviewTextInput事件并不会被触发。我是希望在文字进入TextBox之前check,不管输入法是否打开。

    在使用输入法输入并按下空格或者回车确定输入内容的时候,PreviewTextInput会被触发,而且可以从e.Text中取得输入的内容。可是这是即使设置e.Handled为true,输入的文字还是会出现在TextBox中。

    我觉得这可能是.Net 3.5的Bug,好像4.0并不存在这个问题。不过我的项目只能使用3.5。

    你提到的内容到达TextBox之后再进行处理,应该就是使用TextChanged事件吧?因为这个事件在输入法输入途中也会一直被触发,所以还必须判断输入法的状态,实现起来确实比较麻烦。在我的项目之中更是如此。

    不知道关于PreviewTextInput事件的问题,微软官方是否能解决?

    Best regards,
    Yan

    2010年12月2日 5:58
  • Hi Yanxuemei,

    我重现了个问题, 这个可能和输入法状态有关系,在WPF的TextBox的路由事件确实无法去停止他的消息。 不过我们可以通过监控输入法状态在WPF程序中,然后来改变对于TextBox的输入行为,比如这个类:InputMethod

    对于这个缺陷,你可以到微软专门收集问题和反馈的网站上去提交一个反馈信息,我们的专业工程师会及时的对这个问题进行衡量和解答的,你可以访问一下的站点来提交关于WPf产品的反馈:https://connect.microsoft.com/WPF

    谢谢!

    Bob Bao


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Are you looking for a typical code sample? Please download All in One Code Framework !

    如果有回复帮助并解决了您的问题,请点击 “标记为答复”,如果没有没有帮助,请随时点击“取消答复标记”
    你在为寻找代码示例而苦恼吗?赶快来下载 All in One Code Framework 微软一站式代码框架 吧!
    2010年12月3日 12:45
    版主
  • Hi Yanxuemei,

    如果你觉得用TextChanged事件实现很复杂,你可以尝试一下使用PreviewKeyDown事件去解决你的问题, 就是如果用户输入的按键是为了切换输入法,那么就阻止这个事件发生。

    如果你的项目允许这么做,你可以考虑一下这个方法。

     

    Best regards,

    Sheldon _Xiao


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework!
    2010年12月6日 2:43
    版主