写了一个dateTextBox控件,继承TextBox
写法1:
protected override void OnKeyPress(KeyPressEventArgs e)
{
if ((e.KeyChar=='\b')||((e.KeyChar>='0')&&(e.KeyChar<='9')))
e.Handled=false;
else
e.Handled=true;
}
拖入该控件到窗口中,在其KeyPress事件中写入MessageBox.show("111");执行,但不会有信息提示框出现,也就是改事件中的代码不被执行写法2:
private void dateTextBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if ((e.KeyChar=='\b')||((e.KeyChar>='0')&&(e.KeyChar<='9')))
e.Handled=false;
else
e.Handled=true;
}
该段代码是写在控件代码中的,而不是在拖入控件至窗口中写的代码.同样,拖入该控件到窗口中,在其KeyPress事件中写入MessageBox.show("111");执行,但会有信息提示框出现.
窗口中该控件的KeyPress事件响应代码是:
private void dateTextBox1_TextChanged(object sender, System.EventArgs e)
{
MessageBox.Show("1111");
}
问题:为什么会有这样的情况出现,如果按照第一个方法写,怎么才能响应窗口中该控件的KeyPress事件?
高分求解.
写法1:
protected override void OnKeyPress(KeyPressEventArgs e)
{
if ((e.KeyChar=='\b')||((e.KeyChar>='0')&&(e.KeyChar<='9')))
e.Handled=false;
else
e.Handled=true;
}
拖入该控件到窗口中,在其KeyPress事件中写入MessageBox.show("111");执行,但不会有信息提示框出现,也就是改事件中的代码不被执行写法2:
private void dateTextBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if ((e.KeyChar=='\b')||((e.KeyChar>='0')&&(e.KeyChar<='9')))
e.Handled=false;
else
e.Handled=true;
}
该段代码是写在控件代码中的,而不是在拖入控件至窗口中写的代码.同样,拖入该控件到窗口中,在其KeyPress事件中写入MessageBox.show("111");执行,但会有信息提示框出现.
窗口中该控件的KeyPress事件响应代码是:
private void dateTextBox1_TextChanged(object sender, System.EventArgs e)
{
MessageBox.Show("1111");
}
问题:为什么会有这样的情况出现,如果按照第一个方法写,怎么才能响应窗口中该控件的KeyPress事件?
高分求解.
this.dateTextBox1.TextChanged += new System.EventHandler(this.dateTextBox1_TextChanged);
??
{
if ((e.KeyChar=='\b')||((e.KeyChar>='0')&&(e.KeyChar<='9')))
e.Handled=false;
else
e.Handled=true;
base.OnKeyPress(e);//加了这一句才会触发基类的事件
}
试试
基类代码可能只是简单事件触发的代码,并不复杂.
事件模式引用一个虚的OnKeyPress方法来触发事件,可以使后期扩展能够灵活地控制.
protected virtul void OnKeyPress(KeyPressEventArgs e)
{
if(this.KeyPress!=null)
this.KeyPress(this,e);
}