在我的用户控件中,我有一个文本框,它只进行数字验证。我将此用户控件放在我的表单上但是Keypress事件不是以表格形式触发。以下是我的用户控件中的代码
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (this.KeyPress != null)
this.KeyPress(this, e);
}
private void txtLocl_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar!=(char)Keys.Back)
{
if (!char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
}
但在Form中我也希望触发按键事件,但它不会触发
public Form1()
{
InitializeComponent();
txtNum.KeyPress += new KeyPressEventHandler(txtPrprCase1_KeyPress);
}
void txtPrprCase1_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show("KeyPress is fired");
}
但它没有开火。我不明白我想做什么?这对我来说很紧迫。
答案 0 :(得分:1)
不需要以下覆盖:
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (this.KeyPress != null)
this.KeyPress(this, e);
}
因为base.OnKeyPress(e);
会触发附加事件。您无需手动执行此操作。
而是在文本框的事件处理程序中调用用户控件的OnKeyPress
:
private void txtLocl_KeyPress(object sender, KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (e.KeyChar!=(char)Keys.Back)
{
if (!char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
}
答案 1 :(得分:0)
尝试将事件处理程序代码放在Form_Load事件中,或使用表单设计器创建事件处理程序(它位于属性页面上的闪电图标中)。