Какой самый надежный способ установить фокус на глубоко вложенном элементе управления в Windows Forms? - PullRequest
0 голосов
/ 19 июля 2011

Вот небольшой фон моего приложения:

  1. У меня есть основная форма, которая содержит вертикальный SplitContainer.
  2. Внутри левой панели SplitContainer у меня есть элемент управления TreeView.
  3. Внутри правой панели SplitContainer у меня есть еще один SplitContainer (этот горизонтальный).Этот контейнер является фиксированным, заголовки над разделением и элемент управления Panel ниже него.
  4. Я динамически загружаю свои собственные пользовательские элементы управления в элемент управления Panel при каждом изменении вида дерева.

Итакпока все хорошо.Однако вот моя проблема.

Большинство пользовательских элементов управления, которые динамически загружаются, имеют DataGridView, который должен получать фокус при инициализации элемента управления.Иногда эта сетка находится непосредственно на поверхности UserControl;иногда это в GroupBox;и т. д.

Как лучше всего программно установить фокус на элемент управления DataGridView, учитывая, что он может быть помещен в переменное число контейнеров элемента управления?Я попробовал очевидное - .Select, .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 голосов
/ 19 июля 2011

Если вы пытаетесь установить фокус на DataGridView, убедитесь, что вы специально устанавливаете фокус на View, а не на весь DataGrid.Пока элементы управления видны, не должно быть проблем с настройкой фокуса на них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...