0

私のユーザー コントロールには、数字のみを取得するための検証を行うテキスト ボックスがあります。このユーザー コントロールをフォームに配置しましたが、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;
            }
        }
    }

しかし、フォームでもキープレスイベントを発生させたいのですが、発生していません

public Form1()
    {
        InitializeComponent();
        txtNum.KeyPress += new KeyPressEventHandler(txtPrprCase1_KeyPress);
    }

    void txtPrprCase1_KeyPress(object sender, KeyPressEventArgs e)
    {
        MessageBox.Show("KeyPress is fired");
    }

しかし発砲していません。何がしたいのかわからない?それは私にとって緊急です。

4

2 に答える 2

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;
        }
    }
}
于 2013-05-17T04:33:06.757 に答える
0

Form_Load イベントにイベント ハンドラー コードを配置するか、フォーム デザイナーを使用してイベント ハンドラーを作成してみてください (プロパティ ページの稲妻アイコンにあります)。

于 2013-05-17T05:04:29.690 に答える