Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Робота с AutoScroll в TableLayoutPanel, Нужно сделать скроллинг по столбцам 
:(
    Опции темы
Secret
  Дата 18.8.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.8.2007

Репутация: нет
Всего: нет



Есть TableLayoutPanel в котором столбцы имеют одинаковою фиксированную (в пикселах)  ширину. Свойство AutoScroll установлено в true.
Предположим что у меня есть 100 столбцов, соответственно появляется горизонтальный скрол.

ВОПРОС.  
Как можно научить этот склолбар в зависимости от желания пользователя (большой скроллинг или малый беру с параметра обработчика события ScrollEventArgs) прокручиваться на фиксированное число столбцов.
PM MAIL   Вверх
Secret
Дата 22.8.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 14.8.2007

Репутация: нет
Всего: нет



Проблему решил сам.
Возможно не совсем изящно, но самое главное что работает причём явных багов тоже не нашёл (на этапе тестирования роботы скрола smile)

Вот собственно и код:

Код


// В зависимости от толщины сетки контрола TableLayoutPanel - свойство CellBorderStyle (у меня Single то есть толщина равна 1пиксель)
// статическая переменная position_indicate указывает на суммарную толщину краёв ячейки, 
// соответственно операция инкремента/декремента должна учитывать эту толщину;


/* Литералы:
 * 80 - ширина столбца;
 * 320 = 4 * 80  - где 4 это коэффициент (сколько столбцов должно прокручиваться при 
 *                         ScrollEventType.LargeIncrement/ScrollEventType.LargeDecrement)) 
 */

private static int position_indicate = 0;

private void tableLayoutPanel2_Scroll(object sender, ScrollEventArgs e)
        {
            TableLayoutPanel tlpSender = (TableLayoutPanel)sender;
            
            int old_position = e.OldValue - position_indicate;

            if(e.Type == ScrollEventType.SmallIncrement)
            {
                position_indicate++;
                tlpSender.AutoScrollPosition = new Point(old_position + 80 + position_indicate);
            }
            
            if (e.Type == ScrollEventType.LargeIncrement)
            {
                position_indicate += 4;
                tlpSender.AutoScrollPosition = new Point(old_position + 320 + position_indicate);
            }

            if (e.Type == ScrollEventType.SmallDecrement)
            {
                position_indicate--;
                tlpSender.AutoScrollPosition = new Point(old_position - 80 + position_indicate);
            }

            if (e.Type == ScrollEventType.LargeDecrement)
            {
                position_indicate -= 4;
                tlpSender.AutoScrollPosition = new Point(old_position - 320 + position_indicate);
            }
        }


Этот код позволяет пользователю пользоваться как прокруткой по столбцах так и произвольной.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.