WedX - журнал о программировании и компьютерных науках

С# TreeView.EnsureVisible() - как еще я могу прокручивать?

В моем Treeview здесь: слева - TreeView перед гарантиейVisible(), а справа - после

Икона заброшена. Я не могу понять, как отобразить значок после использования SureVisible(), и я бы использовал альтернативу для SureVisible(), но я не могу найти способ прокрутки вручную. Есть? Может быть, какие-то NativeMethods с user32.dll или что-то в этом роде?

введите здесь описание изображения

«Слева: TreeView до «EnsureVisible» и справа: «после»

17.08.2014

Ответы:


1

Вам придется использовать небольшое внешнее волшебство:

using System.Runtime.InteropServices;
//..

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int GetScrollPos(IntPtr hWnd, int nBar);

[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);

private const int SB_HORZ = 0x0;
private const int SB_VERT = 0x1;

 // bring your node into the display
someNode.EnsureVisible();

// now you can scroll back all the way to the left:
SetScrollPos(treeView1.Handle, SB_HORZ, 0, true);
// ..or just a few pixels:
int spos = GetScrollPos( treeView1.Handle, SB_HORZ);
SetScrollPos(treeView1.Handle, SB_HORZ, spos - 20, true);

Или вы можете сделать всю прокрутку с помощью этой функции, используя константу SB_VERT. Однако вам придется вычислить позицию в пикселях для выбранного узла, что может быть болью.

Если вы видите мерцание, вы должны заключить прокрутку в блок SuspendLayout() и ResumeLayout().

17.08.2014
  • Это не сработало для меня. Он перемещает полосу прокрутки pos, как я и ожидал, но содержимое (узлы) TreeView не перемещается назад вправо, где они были бы относительно новой позиции прокрутки. Когда я щелкаю мышью по полосе прокрутки, полоса прокрутки перемещается туда, где она была до вызова SetScrollPos. 03.11.2016
  • Я нашел эту статью CodeProject, в которой используется метод SendMessage, который работал. 03.11.2016
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]