Жуткие тормоза в TableLayoutPanel

badboychik
Дата: 31.01.2010 12:52:22
делаю простую прогу для проведения "Своей Игры". Надо чтобы игровое поле принимало размер формы и ширина/высота колонок/рядов сохранялись - процент от общей ширины/высоты. Сделал на TLP, программно создаю колонки и Label-ы в ячейки сую. Все бы хорошо, но при ресайзе формы такиииие тормоза, как будто у меня там 100+ компонент. ДаблБуфер у формы не помогает.

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

Еще вариант - WPF. Там хотя бы аппаратный директХ.

Я лублу C#
D129
Дата: 31.01.2010 14:43:15
badboychik,

в винформах это так. Гладко будут работать только 5-6 контролов. Я делал нечто подобное - так к тормозам перерисовки во время ресайза пришлось привыкнуть.
badboychik
Дата: 31.01.2010 14:56:37
я выкинул этот tlp, сделал через DataGridView и ручное изменение ширины/высоты ячеек в OnResize. Практически не тормозит. Щас сделаю динамический размер шрифта и все.

Я лублу C#
D129
Дата: 31.01.2010 15:44:35
badboychik
я выкинул этот tlp, сделал через DataGridView и ручное изменение ширины/высоты ячеек в OnResize. Практически не тормозит. Щас сделаю динамический размер шрифта и все.

Я лублу C#

У меня по-другому немного - контролы это секции ящика, их относительные координаты хранятся в базе, я просто пересчитываю новые координаты и размеры в зависимости от нового размера формы.
badboychik
Дата: 31.01.2010 19:02:31
тоже вариант. Самый хардкорный правда.

З.Ы. Что есть ящик и где у него секции? :)

Я лублу C#
D129
Дата: 31.01.2010 20:28:10
badboychik
тоже вариант. Самый хардкорный правда.

З.Ы. Что есть ящик и где у него секции? :)

Я лублу C#

Ну это уже к предметной области имеет отношение.
Полка на складе, ящик на полке, секция в ящике, болтик в секции.
Управление автоматическим складом - в частности, секции надо показывать кладовщику с указанием откуда и сколько штук брать - чтобы укомплектовать конкретный заказ.
соответственно - принцип разбивки ящика - это часть логистики склада.
igen
Дата: 21.04.2015 12:44:20
Никакого WPF не надо и даже DoubleBuffered - просто вешаете обработчики на события начала/окончания изменения размеров формы:
private void MainForm_ResizeBegin(object sender, EventArgs e) {
	this.SuspendLayout();
}
private void MainForm_ResizeEnd(object sender, EventArgs e) {
	this.ResumeLayout();
}
D129
Дата: 21.04.2015 12:49:53
igen
Никакого WPF не надо и даже DoubleBuffered - просто вешаете обработчики на события начала/окончания изменения размеров формы:
private void MainForm_ResizeBegin(object sender, EventArgs e) {
	this.SuspendLayout();
}
private void MainForm_ResizeEnd(object sender, EventArgs e) {
	this.ResumeLayout();
}


Ну мне пробовать уже негде, я в той фирме уже не работаю, но еще помню, что интересен был как раз процесс перерисовки во время изменения размера формы - тянешь мышкой за уголок, и все перерисовывается на новый размер.
(А не "все замерло, тащим мышкой угол - отпустили, все отрисовалось")
:-)
Дмитрий77
Дата: 21.04.2015 13:16:20
Да, есть такая проблема.
Т.е. у меня например сделан Background градиентом, поверх понакидан рисунок, ваш этот TableLayoutPanel в нем этак с десяток Lable. При ресайзе градиент перерисовывается, TableLayoutPanel ездит согласно макету. Мерцание сильное, границы Label - стробоскопическим эффектом, особенно заметно на XP, в .Net 4.5 вроде этот эффект меньше чем в .Net 2, не уверен. Пока забил, но потом видимо буду переделывать аккуратно без стрипов.

igen,
Ваш метод конечно интересен, заинтересовало - попробовал,
но да, интересна качественная непрерывная перерисовка, а не замораживание.
И потом он работает только для Form целиком, т.е. нельзя его применить к отдельно взятой Panel, а это уже ни в какие ворота.

Мне больше нравится как в 2003-м сервере: не непрерывная перерисовка, а ездит палка-"сплиттер", а потом все взяло и туда разом переехало (качественно и экономично). В 2003-м это по дефолту,в XP это точно настраивается, настраивается ли в новых не знаю. Но по любому это настройки OS, а не проги, не будешь же юзеру его кастомизацию системы ломать ради своей проги.
D129
Дата: 21.04.2015 13:29:20
Дмитрий77
Да, есть такая проблема..


А я вот тему про альтернативную технологию почитываю - там вот только вопросы как привязать, как правильно скомпоновать (сугубо бизнес требования) - а не "как изнасиловать Winform, чтобы было как в WPF"
:-)))))))))

+
Есть такая тема (на других форумах) - ружья для подводной охоты, так там два направления - арбалеты и пневматы.
В обсуждении арбалетов - главная тема - какой точнее бьет, какая цена - в теме же про пневматы - сломался, как починить, где купить поршень-клапан ....