VB.NET лимит на порядок табуляции? - PullRequest
3 голосов
/ 30 ноября 2010

Я унаследовал VK6 Франкенштейна, «преобразованный» в приложение Winform VB.NET.Это приложение имеет метрическую тонну полей в нем, пользователи справедливо жаловались, что порядок вкладок отключен (после определенного момента он начинает прыгать по всей форме).

Вычисление чего-либо в порядке вкладок было отключено, явошел и включил View> Tab Order, и это выглядело хорошо.

Чтобы быть уверенным, что я снова прошел через форму заново, и когда я нахожусь в представлении порядка вкладок, все хорошо, но когда приложение запускается, оно все равно начинает прыгать вокруг той же области, что и раньше ?!Кто-нибудь еще сталкивался с этим, и как вы решили, если вы это сделали?

[Редактировать]: Все эти формы ввода находятся на отдельных вкладках в элементе управления вкладками, что, вероятно, еще больше запутывает ситуацию.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2010

Есть ли какие-либо странные вызовы Focus в коде, которые переопределяют порядок вкладок и устанавливают фокус приложения вручную?

В прошлом у меня были проблемы с тем, что порядок вкладок запутался, и я обычно прибегал к тому, чтобы просматривать приложение с нуля и самостоятельно устанавливать порядок вручную. Я понимаю, что это может быть не то, что вы ищете, но я не знаю ничего другого

2 голосов
/ 30 ноября 2010

Если у вас много элементов управления в форме, есть вероятность, что они организованы с контейнерами, такими как панели и групповые блоки. При настройке порядка вкладок вы также должны учитывать порядок контейнеров. Несоответствие между порядками табуляции в контейнерах может объяснить странные скачки. Это может произойти, особенно если два или более элемента управления / контейнера имеют одинаковое значение порядка табуляции, что делает процесс табуляции произвольным.

Идея решения: Конечно, обновление и исправление порядка вкладок - медленная, подверженная ошибкам работа. Возможно, вам следует написать подпрограмму, которая выполняет итерацию по контейнерам формы и рекурсивно контролирует и правильно присваивает значения порядка табуляции. Вы бы установили порядок табуляции, сравнивая точку расположения каждого элемента управления контейнера, где верхняя и левая крайние точки являются «нижним» рангом, а нижний, самый правый компонент - «самым высоким». Это, конечно, потребует специальной сортировки alg. И если вы посмотрите вокруг, что-то вроде этого уже может быть там.

Решение Идея 2: Рефакторинг! Разделяй и властвуй. Это займет некоторое время, но если вы переместите компоненты пользовательского интерфейса в отдельные, логически организованные пользовательские элементы управления, вы получите более жесткую базу кода. Вы также обнаружите много ошибок!

1 голос
/ 30 ноября 2010

Скорее всего, некоторые из ваших элементов управления встроены в элементы управления контейнером, и порядок вкладок элементов управления контейнера вызывает появление фокуса, как будто он скачет случайно.Убедитесь, что, когда вы находитесь в представлении порядка вкладок, вы внимательно следите за порядком вкладок элементов управления своего контейнера: убедитесь, что ни у одного из них нет одинакового порядка вкладок, и что они упорядочены логически с порядком вкладок:ваши индивидуальные элементы управления.

В противном случае вам необходимо проверить код пользовательского интерфейса для некоторых вызовов Control.Focus, которые могут мешать порядку вкладок по умолчанию во время выполнения.Некоторый код проверки может изменить фокус на «следующий» элемент управления после его успешного завершения (или «вернуться» к предыдущему элементу управления, если проверка не пройдена).

...