我遇到问题,我创建了一个继承自TextBox的自定义控件,我需要覆盖Text
属性以及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);
}
答案 0 :(得分:2)
最终需要的是
protected override void OnKeyPress(KeyPressEventArgs e)
{....
base.OnKeyPress(e);
Text = base.Text;
}
我意识到这种情况的原因是base.OnKeyPress(e)必须处理base.Text,这意味着它无法知道我的覆盖
答案 1 :(得分:1)
尝试更改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;
}
}
编辑:改为使用KeyPress
:
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar))
{
e.Handled = false;
base.OnKeyPress(e);
}
else
{
e.Handled = true;
}
}
答案 2 :(得分:0)
尝试覆盖AppendText属性。
public void AppendText(string text)
Member of System.Windows.Forms.TextBoxBase
答案 3 :(得分:0)
试一试
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar)
&& !char.IsDigit(e.KeyChar))
e.Handled = true;
base.OnKeyPress(e);
}