Get one event handler to fire for three different text boxes

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Christian Blackburn

    Get one event handler to fire for three different text boxes

    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.K eyPress += new
    System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);
    this.txtCode2.K eyPress += new
    System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);
    this.txtCode3.K eyPress += new
    System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);


    private void txtCode_KeyPres s(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_KeyPre ss' matches delegate
    'System.Windows .Forms.KeyPress EventHandler'
    No overload for 'txtCode_KeyPre ss' matches delegate
    'System.Windows .Forms.KeyPress EventHandler'
    No overload for 'txtCode_KeyPre ss' matches delegate
    'System.Windows .Forms.KeyPress EventHandler'

    I suspect I'm just missing a keyword somewhere?

    Thanks,
    Christian
  • Jeroen Mostert

    #2
    Re: Get one event handler to fire for three different text boxes

    Christian Blackburn wrote:
    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.K eyPress += new
    System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);
    this.txtCode2.K eyPress += new
    System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);
    this.txtCode3.K eyPress += new
    System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);
    >
    >
    private void txtCode_KeyPres s(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_KeyPre ss' matches delegate
    'System.Windows .Forms.KeyPress EventHandler'
    No overload for 'txtCode_KeyPre ss' matches delegate
    'System.Windows .Forms.KeyPress EventHandler'
    No overload for 'txtCode_KeyPre ss' matches delegate
    'System.Windows .Forms.KeyPress EventHandler'
    >
    I suspect I'm just missing a keyword somewhere?
    >
    No, it's even simpler than that. The second argument of KeyPressEventHa ndler
    is a KeyPressEventAr gs, not a KeyEventArgs.

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

    this.txtCode1.K eyPress += txtCode_KeyPres s;

    works just as well (after correcting the declaration).

    --
    J.

    Comment

    • Pavel Minaev

      #3
      Re: Get one event handler to fire for three different text boxes

      On Jul 15, 1:15 am, Jeroen Mostert <jmost...@xs4al l.nlwrote:
      Christian Blackburn wrote:
      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.K eyPress += new
      System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);
      this.txtCode2.K eyPress += new
      System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);
      this.txtCode3.K eyPress += new
      System.Windows. Forms.KeyPressE ventHandler(txt Code_KeyPress);
      >
              private void txtCode_KeyPres s(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_KeyPre ss' matches delegate
      'System.Windows .Forms.KeyPress EventHandler'
      No overload for 'txtCode_KeyPre ss' matches delegate
      'System.Windows .Forms.KeyPress EventHandler'
      No overload for 'txtCode_KeyPre ss' matches delegate
      'System.Windows .Forms.KeyPress EventHandler'
      >
      I suspect I'm just missing a keyword somewhere?
      >
      No, it's even simpler than that. The second argument of KeyPressEventHa ndler
      is a KeyPressEventAr gs, not a KeyEventArgs.
      >
      And since C# 2.0, it's no longer necessary to explicitly specify the
      delegate type:
      >
         this.txtCode1.K eyPress += txtCode_KeyPres s;
      >
      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.

      Comment

      • Jeroen Mostert

        #4
        Re: Get one event handler to fire for three different text boxes

        Pavel Minaev wrote:
        On Jul 15, 1:15 am, Jeroen Mostert <jmost...@xs4al l.nlwrote:
        >Christian Blackburn wrote:
        >>this.txtCode1 .KeyPress += new
        >>System.Window s.Forms.KeyPres sEventHandler(t xtCode_KeyPress );
        <snip>
        >> private void txtCode_KeyPres s(object sender, KeyEventArgs e)
        <snip>
        >The second argument of KeyPressEventHa ndler is a KeyPressEventAr gs, not
        >a KeyEventArgs.
        >>
        >And since C# 2.0, it's no longer necessary to explicitly specify the
        >delegate type:
        >>
        > this.txtCode1.K eyPress += txtCode_KeyPres s;
        >>
        >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.
        KeyPressEventAr gs 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.

        --
        J.

        Comment

        Working...