日期:2014-05-18  浏览次数:21090 次

您好,问下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;
    }
}