您好,问下C#自定义Edit控件输入汉字会出现两遍,是什么问题?
输入数字跟字母就只触发一次KeyPress,输入汉字就会变成触发两次KeyPress,比如输入“中国”就会变成“中国中国”
测试输入法中搜狗输入法跟紫光输入法都会出现这种情况,
使用智能ABC,王码五笔不会。
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (this.ReadOnly) return;
if (!this.Enabled) return;
// base.OnKeyPress (e);
if(e.KeyChar!=Convert.ToChar(Keys.Back))
if (this.EditMode==EditMode.Picker && this.fastkey!=null)
{
if (e.KeyChar==Convert.ToChar(Keys.Enter))
{
//结束编辑
if (this.picker!=null)
{
this.Value=this.picker.Value;
this.picker.cancel=false;
this.picker.Close();
this.picker=null;
this.popuped=false;
}
//更新
}
else
{
this.hold=true;
Onkeypress( e);
if (!this.popuped)
{
this.ShowPopup();
this.picker.OnFastKey(this.fastkey,this.ValueText);
}
else
{
this.picker.OnFastKey(this.fastkey,this.ValueText);
}
this.Focus();
this.hold=false;
}
}
else
{
Onkeypress( e);
//base.OnKeyPress(e);
}
if (e.KeyChar==Convert.ToChar(Keys.Enter))
{
this.NextControlFocus();
return;
}
}
------解决方案--------------------帮等清洁工
------解决方案--------------------
加这段代码试试:
C# code
private const int WM_IME_CHAR = 0x0286;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_IME_CHAR:
OnKeyPress(new KeyPressEventArgs((char)m.WParam));
break;
default:
base.WndProc(ref m);
break;
}
}