Горизонтальная позиция прокрутки, когда выбран элемент дерева формы winforms - PullRequest
1 голос
/ 19 февраля 2009

У нас есть некоторый код, который использует .net Windows.Forms.TreeView. Когда элемент в представлении выбран, тогда код делает

treeView.BeginUpdate();
// ... some stuff ...
SendMessage(treeView.Handle, WM_HSCROLL, SB_LEFT, 0);
treeView.EndUpdate();

Это так, что древовидное представление не прокручивается вправо (что является поведением по умолчанию - чтобы отображать как можно большую метку выбранного элемента, как я полагаю, но за счет скрытия части древовидной структуры). К сожалению, когда древовидное представление содержит 30 000 элементов, и этот код вызывается во время щелчка правой кнопкой мыши, и в результате контекстное меню отображается в течение нескольких секунд (этого достаточно, чтобы сбить с толку).

Если вы удалите Begin / EndUpdate, то контекстное меню появится мгновенно, но вы получите раздражающий подергивание, когда вы увидите, что вид перемещается вправо, а затем назад к левому краю. Предложение избавиться от свитка «толкни его назад к левому краю» встречает некоторое сопротивление.

Я попытался отфильтровать SB_RIGHT в древовидном представлении, но, похоже, к нему не привыкли, когда элемент управления перемещается для отображения метки.

Так есть ли способ сохранить вид дерева в его текущей горизонтальной позиции прокрутки, когда выбран элемент, который не включает Begin / EndUpdate и соответствующее запаздывание или подергивание?

1 Ответ

0 голосов
/ 26 ноября 2009

Вы пробовали заполнять только узлы дерева "по требованию"

Это должно привести к уменьшению количества узлов в дереве и, следовательно, к более быстрой обработке BeginUpdate.

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