silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了silverlight2.0Beta版 TextBox中文输入解决办法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

问题描述 silverlight Beta 2.0 中TetBox输入汉字,除MS自己的输入法,其它所有输入法都会出现输入的东西会在TextBox中重复一次的现像,google ,Baidu了一下,大家说好像是silverlight自己的一个BUG,可能会在Repleass的时候修改。   解决办法:        新写一个TextBoxEx控件,继承于TextBox,并对TextBox的选择事件

问题描述

silverlight Beta 2.0 中TetBox输入汉字,除MS自己的输入法,其它所有输入法都会出现输入的东西会在TextBox中重复一次的现像,google,Baidu了一下,大家说好像是silverlight自己的一个BUG,可能会在Repleass的时候修改

 

解决办法:

       新写一个TextBoxEx控件,继承于TextBox,并对TextBox的选择事件及字符改变事件做处理,以下是原代码

  1. /************************************************************************/
  2. /*
  3. 作者:覃小春
  4. 时间:20080826
  5. 说明:解决silverlightBeta2中TextBox中文输入问题
  6.  * blog:blog.csdn.net/colijian
  7. */
  8. /************************************************************************/
  9. using System.Windows;
  10. using System.Windows.Controls;
  11. namespace textBoxEx
  12. {
  13.     public class textBoxEx:TextBox
  14.     {
  15. #region  属性
  16.         private String _OldText = "";
  17.         private int _RecSELEctStart = 0;
  18.         private int _RecSELEctLength = 0;
  19. #endregion
  20.         public textBoxEx()
  21.         {
  22.             textChanged += new textChangedEventHandler(TextBoxEx_TextChanged);
  23.             SELEctionChanged += new routedEventHandler(TextBoxEx_SELEctionChanged);
  24.         }
  25.         void textBoxEx_SELEctionChanged(object sender, routedEventArgs E)
  26.         {
  27.             textBox _sender = sender as textBox;
  28.             if (_sender == null)
  29.                 return;
  30.            if (_sender.SELEctionLength > 0)
  31.             {
  32.                //recode user SELEct position
  33.                 _RecSELEctLength = _sender.SELEctionLength;
  34.                 _RecSELEctStart = _sender.SELEctionStart;
  35.             }
  36.            else 
  37.            {
  38.                _RecSELEctLength = 0;
  39.            }
  40.         }
  41.         void textBoxEx_TextChanged(object sender, textChangedEventArgs E)
  42.         {
  43.             textBox _sender = sender as textBox;
  44.             if (_sender == null)
  45.                 return;
  46.             String textIfnor = _sender.Text;
  47.             #region 除去先中部份
  48.             if (_RecSELEctLength != 0)
  49.             {
  50.                 _OldText = _OldText.SubString(0, _RecSELEctStart) + _OldText.SubString(_RecSELEctStart + _RecSELEctLength, _OldText.Length - _RecSELEctStart - _RecSELEctLength);
  51.                 _RecSELEctLength = 0;
  52.             }
  53.             #endregion
  54.             int LengthAdd = textIfnor.Length - _OldText.Length;
  55.             if (LengthAdd <= 0)
  56.             {
  57.                 _OldText = _sender.Text;
  58.                 //这种情况是删除数据
  59.                 return;
  60.             }
  61.             else if (LengthAdd % 2 == 0)
  62.             {
  63.                 //如果当前是成双的情况下
  64.                 //得到当前字符串
  65.                 String AddInfor = textIfnor.SubString(_sender.SELEctionStart - LengthAdd, LengthAdd);
  66.                 if (!AddInfor.SubString(0, AddInfor.Length / 2).Equals(AddInfor.SubString(AddInfor.Length / 2)))
  67.                 {
  68.                     _OldText = _sender.Text;
  69.                     return;
  70.                 }
  71.                     //得到实际新增值
  72.                 AddInfor = AddInfor.SubString(0, AddInfor.Length / 2);
  73.                 //得到实际理论值
  74.                 String DealText = textIfnor.SubString(0, _sender.SELEctionStart - LengthAdd) + AddInfor + textIfnor.SubString(_sender.SELEctionStart, textIfnor.Length - _sender.SELEctionStart);
  75.                 int recodeSELEctSTart = _sender.SELEctionStart - LengthAdd / 2;
  76.                 _sender.SELEctionStart = 0;
  77.                 _sender.Text = DealText;
  78.                 _sender.SELEctionStart = recodeSELEctSTart;
  79.                 _OldText = DealText;
  80.             }
  81.             else 
  82.             {
  83.                 _OldText = _sender.Text;
  84.             }
  85.         }
  86.     }
  87. }

使用:

 

 

  1. <UserControl x:Class="MutilTextBox.Page"
  2.     xmlns="http://scheR_102_11845@as.microsoft.com/winfx/2006/xaml/presentation" 
  3.     xmlns:x="http://scheR_102_11845@as.microsoft.com/winfx/2006/xaml" 
  4.              xmlns:CT="clr-namespace:TextBoxEx;assembly=TextBoxEx"
  5.     Width="400" Height="300">
  6.     <Grid x:Name="LayoutRoot" BACkground="White">
  7.         <Grid.RowDeFinitions>
  8.             <RowDeFinition Height="50"></RowDeFinition>
  9.             <RowDeFinition Height="50"></RowDeFinition>
  10.             <RowDeFinition Height="50"></RowDeFinition>
  11.             <RowDeFinition Height="50"></RowDeFinition>
  12.         </Grid.RowDeFinitions>
  13.         <TextBox x:Name="FirstTextBox" text="first" Grid.Row="0" textChanged="FirstTextBox_TextChanged"></TextBox>
  14.         <CT:TextBoxEx x:Name="SecondTextBox" Grid.Row="1"></CT:TextBoxEx>
  15.         <CT:TextBoxEx x:Name="ThreeTextBox" Grid.Row="2"></CT:TextBoxEx>
  16.         <TextBox x:Name="Four" Grid.Row="3" ></TextBox>
  17.     </Grid>
  18. </UserControl>

    

注意:要先加入名称空间,具体的值是:

clr-namespace:名称空间全名;assembly=程序集名称

 

不清楚怎样上传程序集!否则将程序集上传

 

若发此控件有问题,或是不足,请给我留言

大佬总结

以上是大佬教程为你收集整理的silverlight2.0Beta版 TextBox中文输入解决办法全部内容,希望文章能够帮你解决silverlight2.0Beta版 TextBox中文输入解决办法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。