遇到了一个难题,请大家帮帮忙!
自定以了一个TextBox控件,不是继承和控件组合的,完全是画出来的,现在遇到的问题是怎么获取用户的输入呢?我目前是采用获取用户按键实现的,但是当用户输入中文的时候,根据用户的输入法不同根据键盘按键就没办法获取到用户的输入了,请问有没有什么解决的办法?
谢谢大家
自定以了一个TextBox控件,不是继承和控件组合的,完全是画出来的,现在遇到的问题是怎么获取用户的输入呢?我目前是采用获取用户按键实现的,但是当用户输入中文的时候,根据用户的输入法不同根据键盘按键就没办法获取到用户的输入了,请问有没有什么解决的办法?
谢谢大家
protected override void WndProc(ref Message m)
{
const int WM_PASTE = 0x0302; switch (m.Msg)
{
case WM_PASTE:
IDataObject iData = Clipboard.GetDataObject();//取剪贴板对象 if (iData.GetDataPresent(DataFormats.Text)) //判断是否是Text
{
string str = (string)iData.GetData(DataFormats.Text);//取数据
}
else
m.Result = IntPtr.Zero; //不可以粘贴
break;
default:
base.WndProc(ref m);
break;
} }
用不到剪贴板
大致也就是重写WndProc得到 信息进行处理,因为.net是unicode的所有的为双字节,所以我第一次不处理第二次处理 Hashtable ip = new Hashtable(); protected override void WndProc(ref Message m)
{
const int WM_CHAR = 0x0102;
const int WM_IME_CHAR = 0x286; switch (m.Msg)
{
case WM_CHAR :
if (m.LParam.ToInt32() == 1) // 是输入法的输入
{
if (ip[m.WParam.ToInt32()] == null)
{
ip.Add(m.WParam.ToInt32(), m.WParam.ToInt32());
return;
}
else
{
ip.Remove(m.WParam.ToInt32());
base.WndProc(ref m);
}
}
else // 普通输入
base.WndProc(ref m);
return;
case WM_IME_CHAR:
base.WndProc(ref m);
return; default:
base.WndProc(ref m);
break;
}
}
还有一个问题,因为我的控件是画出来的,当获取焦点后录入的时候没有TextBox一样出现输入法的输入提示框(也就是输入的时候输入法的选字的提示框)没有显示出来,这有没有什么处理方法?