Как заставить фокус остаться на том же узле treeList? - PullRequest
0 голосов
/ 04 декабря 2018

Структура документа
Форма_1:
- Panel1: - gridView;
- Panel2: - treeList;
- Panel3: - UserControl (в зависимости от выбранного узла дерева);

Сценарий_1:
- Пользователь.выбирает строку в сетке.
- Код.Отправляет в переменную значение «ID» строки, на которой находится фокус в gridView.(обрабатывается событием gridView).
- Код.По умолчанию фокус помещается на узел «Node_1» treeList (обрабатывается событием gridView).

- Пользователь.выбирает узел в treeList.
- в Panel3 отображается UserControl, который соответствует строке «ID» из gridView и «ID» узла из treeList (обрабатывается событием treeList);

Сценарий_2:
Пользователь.Перемещает фокус только по строкам в gridView,
и в treeList, фокус всегда находится на одном узле.
Проблема: Panel3 отображает пользовательский элемент управления «UserControl_1», который соответствует только для grid_1 «row_1».
Как это сделать:
- Panel1 --- Panel2 ----- Panel3
- "lines_1" - "Node_1" - "UserControl_1";
- "lines_2" - "Node_1" -"UserControl_2";
- "lines_3" - "Node_1" - "UserControl_3";

Вопрос.
Как решить проблему "Сценарий_2"?

 private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
{
    try
    {                
        idParser = Convert.ToInt32(gridView1.GetRowCellValue(gridView1.FocusedRowHandle, "ID"));                

        TreeListNode nodeFocus = treeList2.FindNodeByKeyID(20);
        treeList2.SetFocusedNode(nodeFocus);
    }
    catch (Exception)
    {
        return;        
    }
}


        private void treeList2_AfterFocusNode(object sender, NodeEventArgs e)
        {
            int idNode = Convert.ToInt32(e.Node.GetValue("ID")); // "ID" вбыранного узла

            switch (idNode)
            {
                case 20: 

                    pathToSettingsMain = maskPath + idParser.ToString() + ".xml";                                                                                               

                    f01startURLs = new F01StartURLs(pathToSettingsMain);
                    splitContainer2.Panel2.Controls.Clear();
                    splitContainer2.Panel2.Controls.Add(f01startURLs);

                    userControlCurent = f01startURLs;

                    break;

            }

1 Ответ

0 голосов
/ 04 декабря 2018

Вам также необходимо настроить текущий пользовательский элемент управления в обработчике событий gridView1_FocusedRowChanged.Если конечный пользователь выберет узел в TreeList, событие treeList2_AfterFocusNode также будет вызвано, и текущий UserControl будет изменен соответственно.

...