4

如何完全禁用 DataGridView 上的选项卡,这样它根本不会通过单元格?

我在我的应用程序中使用 DataGridView 作为音乐播放列表,并且我不需要围绕单元格的烦人的 Windows 默认选择框。我希望能够正常选择行。我设法使用 SetStyle(ControlStyles.Selectable, false) 隐藏按钮上的选择边框,但这不会禁用 DataGridView 上的选项卡。

4

4 回答 4

4

处理 DataGridView 的 KeyDown 事件并调用父(或祖父)控件的SelectNextControl方法。

private void dataGridView1_KeyDown( object sender, KeyEventArgs e )
{
    if ( e.KeyCode == Keys.Tab )
    {
        SelectNextControl( dataGridView1, true, true, true, true );
        // or Parent.SelectNextControl() if the grid is an only child, etc.
        e.Handled = true;
    }
}

这将导致整个网格的行为类似于文本框和按钮之间的选项卡 - 您在网格中使用选项卡,然后再次按下选项卡键将跳出并进入下一个控件。这通过光标键在网格内保留导航。请参阅链接的 MSDN 文档以获取有关选项卡方向等的选项,这是所有那些可怕的布尔参数配置的内容。第一个参数集控制“下一个”选项卡搜索的开始,因此您可以将其设置为父级或兄弟级或祖父级。

于 2016-08-26T22:56:27.200 回答
0

如果你想让DataGrid不聚焦,你可以将它的Enable属性设置为false,表单上的这个控件不会获得焦点,但是这样你必须在DataGridView中添加或删除带有特定按钮的行(这意味着一个按钮添加和另一个用于删除)

但是如果您希望他们的单元格不集中,您应该遵循以下操作:KeyDown如果您的form,请输入此代码

if (e.KeyCode == Keys.Tab)
    {
         dgvMain.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
         [other component of your form like a textbox or a button].Focus();
    }

有了这个,你的 DataGridView 只突出显示整个选定的行

于 2014-08-09T23:05:59.553 回答
0

好的。我已经做到了。这篇文章对我帮助很大。我使用表单的 OnActivated 和 OnDeactivated 事件来禁用和启用 TAB 键。这里有示例代码:

protected override void OnActivated(EventArgs e) {

    ProcessModule objCurrentModule = Process.GetCurrentProcess().MainModule;
    objKeyboardProcess = new LowLevelKeyboardProc(captureKey);
    ptrHook = SetWindowsHookEx(13, objKeyboardProcess, GetModuleHandle(objCurrentModule.ModuleName), 0);

    base.OnActivated(e);
}

protected override void OnDeactivate(EventArgs e) {

    UnhookWindowsHookEx(ptrHook);
    objKeyboardProcess = null;
    ptrHook = IntPtr.Zero;

    base.OnDeactivate(e);
}

当我试图让它工作时出现了一些问题,但那是另一回事。快乐编码!:)

于 2014-08-10T16:05:24.370 回答
0

您还可以设置:

dataGridView.TabStop=false;

当点击选项卡按钮时,这将跳过网格。

于 2015-07-25T23:47:14.193 回答