2013年9月10日火曜日

TableLayoutPanelにボタンを配置して矢印キーで縦横に移動 [C#]



TableLayoutPanelにボタン配置したんだけど矢印キーでの移動はTabIndex順になっちゃうのね・・・

普通に縦横に動いてよ。


TabIndexを座標にして、

----------------
11 21 31
12 22 32
13 23 33
----------------

矢印押下時はこれを検索して次のに移動するようにしようかな~

------------------------------------------------------
private void button_PreviewKeyDown(object sender, Previe
wKeyDownEventArgs e)
{
 switch (e.KeyCode)
 {
  case Keys.Right:

   for (int moveX = 10; moveX <= 20; moveX += 10)
   {
    //10の位がx座標
    int tabindex = this.ActiveControl.TabIndex + moveX;

    //右端の時
    if (tabindex > 40)
    {
     tabindex = tabindex - 30;
    }

    bool focus = false;

    //子コントロール
    foreach (Control con in tableLayoutPanel.Controls)
    {
     //ボタン
     if (con is ButtonBase)
     {
      if (con.TabIndex == tabindex)
      {
       con.Focus();
       focus = true;
       break;
      }
     }
    }

    if (focus) break;
   }

   //元々の動きをキャンセル
   e.IsInputKey = true;

   break;

  case Keys.Left:

   for (int moveX = 10; moveX <= 20; moveX += 10)
   {
    //10の位がx座標
    int tabindex = this.ActiveControl.TabIndex - moveX;

    //右端の時
    if (tabindex < 10)
    {
     tabindex = tabindex + 30;
    }

    bool focus = false;

    //子コントロール
    foreach (Control con in tableLayoutPanel.Controls)
    {
     //ボタン
     if (con is ButtonBase)
     {
      if (con.TabIndex == tabindex)
      {
       con.Focus();
       focus = true;
       break;
      }
     }
    }

    if (focus) break;
   }

   //元々の動きをキャンセル
   e.IsInputKey = true;

   break;
 }
}

------------------------------------------------------

0 件のコメント:

コメントを投稿