最新の更新情報

 
このブログ「吟遊詩人の戯言」 の記事検索...

【C#】ユーザーコントロール内で,KeyDown()イベントが狙ったとおり動かない

関連記事

エンターキー押したら,テキストボックスを次々移動していく,アレ
今の謎案件の画面実装やってたら,うまくいかない(汗

ダメなところは,ユーザーコントロールにテキストボックスを山のように張ったブロック
こんなやつ(諸般の事情でエッチな部分は消してあるぞな:爆)


これをフォームに貼り付けたけど,エンターキーでピョンピョン飛ばない.うまく行かねぇ...
ユーザーコントロール内のキー周りのイベントは特殊なことを基底側クラスでやっている模様.なので,キーイベントの動きが狙ったとおりの動きをしない感じ

海外事例イロイロあったんで,試してみたけどイマイチ

頭きたー(怒

ダサダサな実装でごまかすことに(笑

フォーム側のKeyDown()イベントにユーザーコントロールのどれかがフォーカス持ってるかのチェックコードを追加

        //---------------------------------------------
        //キーダウン
        //
        //---------------------------------------------
        private void FormMain_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (this.ActiveControl == uclInputHogehoge1)                    //ユーザーコントロールHogehoge内のどれかのコントロールがフォーカス持ってる
                {
                    uclInputHogehoge1.NextCtrlMove();
                }
                else if (this.ActiveControl == uclInputHogepekoA1)              //ユーザーコントロールHogepekoA内のどれかのコントロールがフォーカス持ってる
                {
                    uclInputHogepekoA1.NextCtrlMove();
                }
                else if (this.ActiveControl == uclInputHogepekoB1)              //ユーザーコントロールHogepekoB内のどれかのコントロールがフォーカス持ってる
                {
                    uclInputHogepekoB1.NextCtrlMove();
                }
                else                                                            //それ以外のコントロール
                { 
                    this.SelectNextControl(this.ActiveControl, true, true, true, true);
                }
                e.Handled = true;
                e.SuppressKeyPress = true;
            }
            else
            {
            }
        }

ユーザーコントロールに実装したNextCtrlMove()メソッドには,SendKeyでTABコードを送るというダサダサ実装(GRB汗
    public partial class UCLInputBase : UserControl
    {
        public void NextCtrlMove()
        {
            SendKeys.Send("{TAB}");
        }
    }

う~む,美しくない.ダサすぎ.素人の実装じゃねぇ~か(苦笑
まぁ,望みどおりの動きしているし,これでいいかっ!(GRB爆

参考情報程度でー
バグってたらスマソ❤

 
 
 
 

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">