C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: ボタンイベントでDelキーを無効にする


(過去ログ 19 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■8116 / inTopicNo.1)  ボタンイベントでDelキーを無効にする
  
□投稿者/ ロート (1回)-(2007/09/24(Mon) 17:33:10)

分類:[.NET 全般] 

失礼します。
visualstudio2005,c#を使っております。

フォームにテキストボックスと、
0〜9と名づけられたボタン10個、ENTERと名づけられたボタンを1つ用意しております。

そこで、各数字が書かれたボタンの押下、又はテキストボックスにキーボードで入力し、最後に
ENTERボタン又はENTERキーを押すと、入力した数字列が表示される、というプログラムを作成しております。


  private void btn_1_Click(object sender, EventArgs e)
        {           
                str_Id = str_Id + "1"; //ボタンによる数字の入力を文字列に代入
                txt_Id.Text = str_Id;
                  }
・・・(以下、0〜9まで同じ)

 private void F_IDInp_KEYDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            //キーボードのENTERキー押下    
            if (e.KeyCode == Keys.Enter)
            {      
                Enter_Action();
            }
           
        }

 private void TextBox1_KeyPress(object sender,System.Windows.Forms.KeyPressEventArgs e)
        {
            //キーボードの数字キー押下
            if (e.KeyChar < '0' || e.KeyChar > '9')
            {
                e.Handled = true;
            }
            else {

                str_Id = str_Id + e.KeyChar;
                
            }

        }

public void Enter_Action() {

MessageBox.Show(str_Id);

}

上記にようにコードを書いてみたのですが、数字入力の修正にDelキーやBackSpaceキーを使わせたくないのにも
かかわらず、Delキーのみ有効となってしまいます。DelキーとBackSpaceキー両方禁止させるにはどうすればよいのでしょうか?




引用返信 編集キー/
■8119 / inTopicNo.2)  Re[1]: ボタンイベントでDelキーを無効にする
□投稿者/ Tom Yama (9回)-(2007/09/24(Mon) 19:10:05)
No8116 (ロート さん) に返信
> 上記にようにコードを書いてみたのですが、数字入力の修正にDelキーやBackSpaceキーを使わせたくないのにも
その「使わせていない」コードは、どれ?
引用返信 編集キー/
■8120 / inTopicNo.3)  Re[2]: ボタンイベントでDelキーを無効にする
□投稿者/ ダッチ (161回)-(2007/09/24(Mon) 19:16:53)
> その「使わせていない」コードは、どれ?
たぶん TextBox1_KeyPress の処理だと思います。

Delete キーは KeyPress イベントを発生させないため、
KeyDown イベントで Delete キーを無効化してやればいいと思いますよ。

引用返信 編集キー/
■8122 / inTopicNo.4)  Re[3]: ボタンイベントでDelキーを無効にする
□投稿者/ ロート (2回)-(2007/09/24(Mon) 21:10:19)
ダッチさんの仰るとおりKeyDown イベントで無効に出来ました。
ありがとうございました。

No8120 (ダッチ さん) に返信
>>その「使わせていない」コードは、どれ?
> たぶん TextBox1_KeyPress の処理だと思います。
>
> Delete キーは KeyPress イベントを発生させないため、
> KeyDown イベントで Delete キーを無効化してやればいいと思いますよ。
>
引用返信 編集キー/
■8134 / inTopicNo.5)  Re[4]: ボタンイベントでDelキーを無効にする
□投稿者/ ロート (3回)-(2007/09/25(Tue) 09:15:33)
解決済みです。失礼しました。

No8122 (ロート さん) に返信
> ダッチさんの仰るとおりKeyDown イベントで無効に出来ました。
> ありがとうございました。
>
> ■No8120 (ダッチ さん) に返信
> >>その「使わせていない」コードは、どれ?
>>たぶん TextBox1_KeyPress の処理だと思います。
>>
>>Delete キーは KeyPress イベントを発生させないため、
>>KeyDown イベントで Delete キーを無効化してやればいいと思いますよ。
>>
解決済み
引用返信 編集キー/
■8230 / inTopicNo.6)  Re[5]: ボタンイベントでDelキーを無効にする
□投稿者/ ロート (4回)-(2007/09/26(Wed) 16:15:19)
1度解決済みにしたのにすいません。

表題については解決したのですが、後学のためにdelキーとbackspaceキーを
両方効くようにするやり方を教えてください。

keypressではbackspaceをkewcharで選択出来ないので、

private void F_IDInp_KEYDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
//キーボードのENTERキー押下
if (e.KeyCode == Keys.Enter)
{
Enter_Action();
}

}

に、else if(e.keycode == keys.Back){
//ここにbackspaceと同一の処理を書く?

}

を追加してやるくらいしか思いつきませんでした。ですが、backspaceと同一の
処理を書くのはあまり良くないと思うので、他に何か良い方法はあるでしょうか?

そもそもの話となってしまいますが、表題の件の状態でbackspaceキーは無効なのに
delキーは有効であるのは一体なぜなのでしょうか?

>>■No8120 (ダッチ さん) に返信
>>>>その「使わせていない」コードは、どれ?
> >>たぶん TextBox1_KeyPress の処理だと思います。
> >>
> >>Delete キーは KeyPress イベントを発生させないため、
> >>KeyDown イベントで Delete キーを無効化してやればいいと思いますよ。
> >>
引用返信 編集キー/
■8233 / inTopicNo.7)  Re[6]: ボタンイベントでDelキーを無効にする
□投稿者/ PATIO (20回)-(2007/09/26(Wed) 16:30:22)
2007/09/26(Wed) 16:31:45 編集(投稿者)
2007/09/26(Wed) 16:31:13 編集(投稿者)

問題は一つずつ解決した方が良いような気もしますが、

No8230 (ロート さん) に返信
> 表題については解決したのですが、後学のためにdelキーとbackspaceキーを
> 両方効くようにするやり方を教えてください。

keypressでbackspaceをkeycharで捕捉できていないのではなくて
貴方の書いたコードがbackspaceをはじいているからだと思います。

ここ> if (e.KeyChar < '0' || e.KeyChar > '9')

で処理した事にしてしまっているから。
backspaceの時は未処理で流せば既存の処理が動くのでは?



> そもそもの話となってしまいますが、表題の件の状態でbackspaceキーは無効なのに
> delキーは有効であるのは一体なぜなのでしょうか?
>
>>>>Delete キーは KeyPress イベントを発生させないため、
>>>>KeyDown イベントで Delete キーを無効化してやればいいと思いますよ。

ここにそのまんま書いてありますよ。
DeleteキーはKeyPressイベントを発生させないのでKeyPressのハンドラには入ってきません。
だから、先ほど指摘した無効化しているコードを通らないので普通に処理されます。
但し、Deleteキーの場合でもKeyDownイベントは起こるのでKeyDownのハンドラで
無効にする処理をすれば、無効化できるわけです。
この辺のからくりはきちんと理解してから進んだほうが良いと思いますよ。


引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -