手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >silverlight2.0Beta版TextBox输入中文解决方法
silverlight2.0Beta版TextBox输入中文解决方法
摘要:新写一个TextBoxEx控件,继承于TextBox,并对TextBox的选择事件及字符改变事件做处理,以下是原代码复制代码代码如下:/**...

新写一个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=程序集名称

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

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

【silverlight2.0Beta版TextBox输入中文解决方法】相关文章:

Http异常eurl.axd出错信息解决方法

asp.net2.0中css失效的解决方法

ASP.NET 中文显示之两种解决方法

asp.net 字符串加密解密技术

第一次用.net2.0 LOGIN登陆控件的困惑和解决方法

gridview调整单元格宽度的方法

Ajax.net Sys未定义错误解决办法

asp.net下url传递中文的解决方案

log4net配置和使用方法分享

asp.net中包含文件的代码及使用方法

精品推荐
分类导航