你如何让箭头键在WinForms TableLayoutPanel中移动你的焦点?

时间:2012-01-06 18:20:03

标签: c# winforms

似乎默认是向上和向左键转到上一个tabstop,向下/向右键转到下一个tabstop。我有一个TableLayoutPanel,每个都有一个按钮。是否有一种简单的方法可以使箭头键将单元格中的按钮聚焦到TableLayoutPanel中的相应方向,而不是仅仅跟随tabstops?

1 个答案:

答案 0 :(得分:7)

是的,没问题。只需创建自己的TableLayoutPanel覆盖并让它处理光标键即可获得所需内容。在项目中添加一个新类并粘贴下面显示的代码。编译。将新面板从工具箱顶部拖放到表单上,替换旧表单。

using System;
using System.Windows.Forms;

class MyLayoutPanel : TableLayoutPanel {
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        var ctl = this.FindForm().ActiveControl;
        if (ctl.Parent == this) {
            int col = this.GetColumn(ctl);
            int row = this.GetRow(ctl);
            if (keyData == Keys.Left && col > 0) {
                var newctl = this.GetControlFromPosition(col - 1, row);
                if (newctl != null) newctl.Focus();
                return true;
            }
            // etc..
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}