【发布时间】:2012-01-07 03:56:16
【问题描述】:
好像默认是向上和向左键进入上一个制表位,向下/右键进入下一个制表位。我有一个 TableLayoutPanel,每个都有一个按钮。有没有一种简单的方法可以使箭头键将单元格中的按钮聚焦到 TableLayoutPanel 中的相应方向,而不是仅仅跟随制表位?
【问题讨论】:
好像默认是向上和向左键进入上一个制表位,向下/右键进入下一个制表位。我有一个 TableLayoutPanel,每个都有一个按钮。有没有一种简单的方法可以使箭头键将单元格中的按钮聚焦到 TableLayoutPanel 中的相应方向,而不是仅仅跟随制表位?
【问题讨论】:
是的,没问题。只需创建您自己的 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);
}
}
【讨论】: