Get one event handler to fire for three different text boxes

  • Thread starter Christian Blackburn
  • Start date
C

Christian Blackburn

Hi Gang,

I have written a product registration screen that has three text
boxes. They take 4 numbers each (I know that's too few, but I'm not
the originator of this code). In any event I want them to only allow
numbers as inputs. I would like to have the same event fire when
pressing keys in each of the text boxes:

this.txtCode1.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(txtCode_KeyPress);
this.txtCode2.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(txtCode_KeyPress);
this.txtCode3.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(txtCode_KeyPress);


private void txtCode_KeyPress(object sender, KeyEventArgs e)
{
//if the user typed in a number then...
if (e.KeyValue > 47 && e.KeyValue < 58)
{
e.Handled = true;
}

}

I get the same error message 3 times (one for each textbox):
No overload for 'txtCode_KeyPress' matches delegate
'System.Windows.Forms.KeyPressEventHandler'
No overload for 'txtCode_KeyPress' matches delegate
'System.Windows.Forms.KeyPressEventHandler'
No overload for 'txtCode_KeyPress' matches delegate
'System.Windows.Forms.KeyPressEventHandler'

I suspect I'm just missing a keyword somewhere?

Thanks,
Christian
 
J

Jeroen Mostert

Christian said:
I have written a product registration screen that has three text
boxes. They take 4 numbers each (I know that's too few, but I'm not
the originator of this code). In any event I want them to only allow
numbers as inputs. I would like to have the same event fire when
pressing keys in each of the text boxes:

this.txtCode1.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(txtCode_KeyPress);
this.txtCode2.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(txtCode_KeyPress);
this.txtCode3.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(txtCode_KeyPress);


private void txtCode_KeyPress(object sender, KeyEventArgs e)
{
//if the user typed in a number then...
if (e.KeyValue > 47 && e.KeyValue < 58)
{
e.Handled = true;
}

}

I get the same error message 3 times (one for each textbox):
No overload for 'txtCode_KeyPress' matches delegate
'System.Windows.Forms.KeyPressEventHandler'
No overload for 'txtCode_KeyPress' matches delegate
'System.Windows.Forms.KeyPressEventHandler'
No overload for 'txtCode_KeyPress' matches delegate
'System.Windows.Forms.KeyPressEventHandler'

I suspect I'm just missing a keyword somewhere?
No, it's even simpler than that. The second argument of KeyPressEventHandler
is a KeyPressEventArgs, not a KeyEventArgs.

And since C# 2.0, it's no longer necessary to explicitly specify the
delegate type:

this.txtCode1.KeyPress += txtCode_KeyPress;

works just as well (after correcting the declaration).
 
P

Pavel Minaev

No, it's even simpler than that. The second argument of KeyPressEventHandler
is a KeyPressEventArgs, not a KeyEventArgs.

And since C# 2.0, it's no longer necessary to explicitly specify the
delegate type:

   this.txtCode1.KeyPress += txtCode_KeyPress;

works just as well (after correcting the declaration).

I don't think you even have to correct the declaration if you use the
short form, due to delegate parameter type contravariance.
 
J

Jeroen Mostert

Pavel said:
I don't think you even have to correct the declaration if you use the
short form, due to delegate parameter type contravariance.

KeyPressEventArgs and KeyEventArgs are not in an inheritance relationship
with each other, so you can't use contravariance. You could declare a
delegate that takes EventArgs, but that wouldn't be very useful.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top