【问题标题】:How do you let the arrow keys move your focus around in WinForms TableLayoutPanel?如何让箭头键在 WinForms TableLayoutPanel 中移动焦点?
【发布时间】:2012-01-07 03:56:16
【问题描述】:

好像默认是向上和向左键进入上一个制表位,向下/右键进入下一个制表位。我有一个 TableLayoutPanel,每个都有一个按钮。有没有一种简单的方法可以使箭头键将单元格中的按钮聚焦到 TableLayoutPanel 中的相应方向,而不是仅仅跟随制表位?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    是的,没问题。只需创建您自己的 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);
        }
    }
    

    【讨论】:

    • 不错。很抱歉,我没有在我的(现已删除)答案中意识到问题的性质。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多