广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    silverlight2.0Beta版TextBox输入中文解决方法

    2018-05-08 11:29:31 次阅读 稿源:互联网
    广告
    新写一个TextBoxEx控件,继承于TextBox,并对TextBox的选择事件及字符改变事件做处理,以下是原代码
    代码如下:

    /************************************************************************/
    /*
    作者:覃小春
    时间:20080826
    说明:解决silverlightBeta2中TextBox中文输入问题
    * blog:blog.csdn.net/colijian
    */
    /************************************************************************/
    using System.Windows;
    using System.Windows.Controls;
    namespace TextBoxEx
    {
    public class TextBoxEx:TextBox
    {
    #region 属性
    private string _OldText = "";
    private int _RecSelectStart = 0;
    private int _RecSelectLength = 0;
    #endregion
    public TextBoxEx()
    {
    TextChanged += new TextChangedEventHandler(TextBoxEx_TextChanged);
    SelectionChanged += new RoutedEventHandler(TextBoxEx_SelectionChanged);
    }
    void TextBoxEx_SelectionChanged(object sender, RoutedEventArgs e)
    {
    TextBox _sender = sender as TextBox;
    if (_sender == null)
    return;
    if (_sender.SelectionLength > 0)
    {
    //recode user select position
    _RecSelectLength = _sender.SelectionLength;
    _RecSelectStart = _sender.SelectionStart;
    }
    else
    {
    _RecSelectLength = 0;
    }
    }
    void TextBoxEx_TextChanged(object sender, TextChangedEventArgs e)
    {
    TextBox _sender = sender as TextBox;
    if (_sender == null)
    return;
    string textIfnor = _sender.Text;
    #region 除去先中部份
    if (_RecSelectLength != 0)
    {
    _OldText = _OldText.Substring(0, _RecSelectStart) + _OldText.Substring(_RecSelectStart + _RecSelectLength, _OldText.Length - _RecSelectStart - _RecSelectLength);
    _RecSelectLength = 0;
    }
    #endregion
    int LengthAdd = textIfnor.Length - _OldText.Length;
    if (LengthAdd <= 0)
    {
    _OldText = _sender.Text;
    //这种情况是删除数据
    return;
    }
    else if (LengthAdd % 2 == 0)
    {
    //如果当前是成双的情况下
    //得到当前字符串
    string AddInfor = textIfnor.Substring(_sender.SelectionStart - LengthAdd, LengthAdd);
    if (!AddInfor.Substring(0, AddInfor.Length / 2).Equals(AddInfor.Substring(AddInfor.Length / 2)))
    {
    _OldText = _sender.Text;
    return;
    }
    //得到实际新增值
    AddInfor = AddInfor.Substring(0, AddInfor.Length / 2);
    //得到实际理论值
    string DealText = textIfnor.Substring(0, _sender.SelectionStart - LengthAdd) + AddInfor + textIfnor.Substring(_sender.SelectionStart, textIfnor.Length - _sender.SelectionStart);
    int RecodeSelectSTart = _sender.SelectionStart - LengthAdd / 2;
    _sender.SelectionStart = 0;
    _sender.Text = DealText;
    _sender.SelectionStart = RecodeSelectSTart;
    _OldText = DealText;
    }
    else
    {
    _OldText = _sender.Text;
    }
    }
    }
    }

    使用:
    代码如下:

    <UserControl x:Class="MutilTextBox.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:CT="clr-namespace:TextBoxEx;assembly=TextBoxEx"
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
    <RowDefinition Height="50"></RowDefinition>
    <RowDefinition Height="50"></RowDefinition>
    <RowDefinition Height="50"></RowDefinition>
    <RowDefinition Height="50"></RowDefinition>
    </Grid.RowDefinitions>
    <TextBox x:Name="FirstTextBox" Text="first" Grid.Row="0" TextChanged="FirstTextBox_TextChanged"></TextBox>
    <CT:TextBoxEx x:Name="SecondTextBox" Grid.Row="1"></CT:TextBoxEx>
    <CT:TextBoxEx x:Name="ThreeTextBox" Grid.Row="2"></CT:TextBoxEx>
    <TextBox x:Name="Four" Grid.Row="3" ></TextBox>
    </Grid>
    </UserControl>
    注意:要先加入名称空间,具体的值是:
    clr-namespace:名称空间全名;assembly=程序集名称
    不清楚怎样上传程序集!否则将程序集上传
    若发此控件有问题,或是不足,请给我留言

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告