重写文本和OnKeyUp/OnKeyPress
本文关键字:OnKeyPress OnKeyUp 文本 重写 | 更新日期: 2023-09-27 17:53:07
我遇到了一个问题,我已经创建了一个自定义控件,继承自TextBox,我需要覆盖Text
属性和OnKeyPress
或OnKeyUp
事件。
- 文本属性被重写以显示与文本框的实际值不同的值(用于单位转换)
- OnKeyPress/OnKeyUp我目前正试图添加到只允许输入数值。
当KeyPress事件被触发时,更新的文本是base.Text
而不是我的覆盖…我该如何解决这个问题?
public override string Text
{
get
{
return base.Text;
}
set
{
displayValue = parse;
base.Text = this.ContainsFocus ? displayValue.ToString() : displayValue.ToString("N3");
}
}
protected override void OnKeyUp(KeyEventArgs e)
{
e.Handled = true;
if ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
(e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) ||
e.KeyCode == Keys.Decimal)
{
e.Handled = false;
}
//Code to only accept numerical buttons
base.OnKeyUp(e);
}
最后只需要
protected override void OnKeyPress(KeyPressEventArgs e)
{....
base.OnKeyPress(e);
Text = base.Text;
}
我意识到这种情况的原因是base. onkeypress (e)必须处理base。文本这意味着它无法知道我的重写
试着改变你的OnKeyUp
:
protected override void OnKeyUp(KeyEventArgs e)
{
if ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
(e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) ||
e.KeyCode == Keys.Decimal)
{
e.Handled = false;
base.OnKeyUp(e);
}
else
{
e.Handled= true;
}
}
EDIT:用KeyPress
代替:
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar))
{
e.Handled = false;
base.OnKeyPress(e);
}
else
{
e.Handled = true;
}
}
试一试
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar)
&& !char.IsDigit(e.KeyChar))
e.Handled = true;
base.OnKeyPress(e);
}
尝试覆盖AppendText属性。
public void AppendText(string text)
Member of System.Windows.Forms.TextBoxBase