Приложение Winforms показывает по-разному на разных компьютерах при использовании компонентов Infragistics и изменения размера процедур - PullRequest
2 голосов
/ 28 сентября 2011

Я разрабатываю графический интерфейс с использованием Winforms.На большинстве тестируемых компьютеров все выглядит нормально (например, пользовательский интерфейс отображается таким же образом и в соответствии с ПК, на котором был разработан графический интерфейс).Однако на одном ноутбуке бывает, что несколько элементов отображаются некорректно (неправильные размеры или проблемы с перерисовкой).

У меня заканчиваются тесты, чтобы выяснить, в чем мы можем ошибаться;все компьютеры работают под управлением Windows 7 с различными разрешениями экрана.

Я использую компоненты Infragistics для создания пользовательского интерфейса.Есть мысли?

редактировать: несколько примеров.На «сломанном» ноутбуке некоторые вкладки (часть UltraWinTab) становятся недействительными и не перерисовываются после команды минимизации / восстановления, вы получаете только фон вкладки, но не компоненты.

Некоторые другие элементы управления необъяснимонарисованный в намного меньшем размере (вместо заполнения области, я получаю большие пустые нижнюю и правую полосы).

1 Ответ

5 голосов
/ 28 сентября 2011

У нас тоже были проблемы с этим. Приложение Windows.Forms с элементами управления Infragistics выглядело хорошо в Windows XP, но в W7 начали возникать все виды проблем с изменением размера. Мне понадобились годы, чтобы узнать, что случилось.

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

У нас есть структура пользовательского интерфейса, и для нас было достаточно сделать производную от System.Windows.Forms.SplitContainer с этим переопределением:

// HACK: under Windows7, controls do not always redraw to their whole rectangle after restoring their size.
protected override void OnSizeChanged(EventArgs e)
{
    if (Handle != null) // Can be null because the event is invoked before the handle is created.
        BeginInvoke((MethodInvoker)(() => base.OnSizeChanged(e)));
}

Поскольку у нас есть элементы управления инфраструктурой (сетка, менеджер док-станции) на SplitContainers. Возможно, элементы управления Infragistics имеют глубокий уровень вложенности, что делает это раньше, чем с другими элементами управления.

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