在Windows窗体中将焦点设置为深度嵌套控件的最可靠方法是什么?

时间:2011-07-19 14:10:57

标签: c# .net vb.net winforms user-controls

以下是我的应用程序的一些背景知识:

  1. 我有一个包含垂直SplitContainer的主窗体。
  2. 在SplitContainer的左侧面板中,我有一个TreeView控件。
  3. 在SplitContainer的右侧面板中,我有另一个SplitContainer(这个水平)。这个容器是固定的,分区上方有标题,下面是Panel控件。
  4. 每当树视图发生变化时,我都会自动将自己的用户控件加载到Panel控件中。
  5. 到目前为止一切顺利。不过这是我的问题。

    动态加载的大多数用户控件都有一个DataGridView,它应该在初始化控件时获得焦点。有时这个网格直接在UserControl表面上;有时它在GroupBox中;等

    以编程方式设置焦点在DataGridView控件上的最佳方法是什么,因为它可能放在可变数量的控件容器中?我已经尝试了明显的 - 。选择,.Focus,.ActiveControl,等等这些都不似乎工作 - 这是我选择的TreeView项仍然突出,即使一条记录在DataGridView选择,它不有重点。

    任何想法都会受到赞赏。

    编辑:以下代码

    以下是我在主窗体中添加用户控件的代码:

      Private Sub LoadRightPanel(ByVal section As String, ByVal moduleName As String)
        Heading.Text = String.Empty
        SuspendLayout()
        RightPanel.Controls.Clear()
        Select Case section.Trim.ToLower
          Case "effective date types"
            Heading.Text = "Effective Date Types"
            RightPanel.Controls.Add(New EffectiveDateTypeAddEditControl(moduleName))
    .
    .
    .
        End Select
        With RightPanel.Controls(0)
          .Dock = DockStyle.Fill
        End With
        ResumeLayout()
      End Sub
    

    这就是我尝试在用户控件构造函数中设置焦点的地方:

      Public Sub New(ByVal programModule As String)
        InitializeComponent()
        currentModule = programModule
    
        UpdateGrid()
        UpdateButtonSettings()
        ValueGrid.Select()
      End Sub
    

1 个答案:

答案 0 :(得分:0)

如果您尝试将焦点设置为DataGridView,请确保将焦点专门设置为View,而不是整个DataGrid。只要控件可见,将焦点设置到它们就不会有问题。