Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Нужно реализовать "непрерывный" сплиттер, есть идеи? / 9 сообщений из 9, страница 1 из 1
23.02.2015, 06:17
    #38886221
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
Клетчатая палка не всегда хороша.
Хороша когда обе панели белые (стандартная реализация Splitter).

Один из вариантов - непрерывное изменение размеров панелей или чего там есть.

Например, основная панель - левая.
Сделал так:
PanelMain -контейнер
PanelLeft (.Dock=Left)
SplitterLeft (.Dock=Left)
PanelRight (.Dock=Fill)

Грубо так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
  Private Sub SplitterLeft_MouseDown(sender As Object, e As MouseEventArgs) Handles SplitterLeft.MouseDown
    SplitterLeft.Hide()
    SplitterLeft.Show()
  End Sub

  Private Sub SplitterLeft_SplitterMoving(sender As Object, e As SplitterEventArgs) Handles SplitterLeft.SplitterMoving
    SplitterLeft.SplitPosition = e.X
  End Sub


===
Меня больше интересует вариант когда привязка идет к правой панели.
PanelMain1 -контейнер
PanelRight (.Dock=Right)
SplitterRight (.Dock=Right)
PanelLeft (.Dock=Fill)
Грубо так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
  Private Sub SplitterRight_MouseDown(sender As Object, e As MouseEventArgs) Handles SplitterRight.MouseDown
    SplitterRight.Hide()
    SplitterRight.Show()
  End Sub

  Private Sub SplitterRight_SplitterMoving(sender As Object, e As SplitterEventArgs) Handles SplitterRight.SplitterMoving
    SplitterRight.SplitPosition = PanelMain1.Width - e.X
  End Sub



Hide/Show -использую для того чтоб не прорисовывать клетчатую палку в момент захвата сплиттера, вроде работает.

Оно вроде работает, но не очень аккуратно.
Т.е. подергивание разделителя в момент захвата и в конце, когда отпускаешь мышь.
Степень подергивания зависит думаю от того, к какому краю сплитера(лево-право) ближе тыкнулись мышью при захвате.

Нельзя как-то аккуратно сделать? Есть идеи?
...
Рейтинг: 0 / 0
23.02.2015, 09:36
    #38886244
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
Дмитрий77

Делать что-то новое, да еще чтобы не "подергривалось" на винформах - это недальновидно.
WPF - наше всё.

Никто не заставляет вас использовать прям везде и сразу MVVM - и прочие "призмы", но для отображения - все проблемы уже решены там...
...
Рейтинг: 0 / 0
23.02.2015, 11:01
    #38886289
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
D129WPF - наше всё.
ваше может быть, но топикстатера по массе причин оно никак не устраивает.
...
Рейтинг: 0 / 0
23.02.2015, 11:05
    #38886298
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
ИзопропилD129WPF - наше всё.
ваше может быть, но топикстатера по массе причин оно никак не устраивает.
Ну если это требование совместимости с Виндовс 95.... тогда да...
...
Рейтинг: 0 / 0
23.02.2015, 12:06
    #38886337
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
D129,

каждый пишет на том, что хочет. Не надо навязывать.
При правильном подходе в WF можно сделать не хуже, чем в WPF. многие вещи в WPF пишутся быстрее и проще, спору нет, но выбор часто определен далеко не желанием или знаниями разработчика
...
Рейтинг: 0 / 0
23.02.2015, 12:45
    #38886367
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
Roman MejtesD129,

каждый пишет на том, что хочет. Не надо навязывать.
При правильном подходе в WF можно сделать не хуже, чем в WPF. многие вещи в WPF пишутся быстрее и проще, спору нет, но выбор часто определен далеко не желанием или знаниями разработчика

не исключено, что в данном случае не навязывание, а подсказка, и ТС может прислушаться.
...
Рейтинг: 0 / 0
23.02.2015, 13:26
    #38886384
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
Winnipuhне исключено, что в данном случае не навязывание, а подсказка, и ТС может прислушаться.
исключено.
...
Рейтинг: 0 / 0
23.02.2015, 13:34
    #38886389
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
ИзопропилWinnipuhне исключено, что в данном случае не навязывание, а подсказка, и ТС может прислушаться.
исключено.

отредактировал предыдущий пост.
...
Рейтинг: 0 / 0
23.02.2015, 16:16
    #38886460
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужно реализовать "непрерывный" сплиттер, есть идеи?
Спасибо конечно за советы.

Дмитрий77Степень подергивания зависит думаю от того, к какому краю сплитера(лево-право) ближе тыкнулись мышью при захвате.
Это смещение - фиксированная величина для данного перемещения и ее можно легко вычислить в _MouseDown и учитывать в _SplitterMoving, при непрерывном назначении новой .SplitPosition

Методом полутыка все удалось разрешить.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Public Class Form1

  Dim sp_mouse As Integer 'смещение мыши относительно левого края сплиттера

  '==============================================
  'левая панель основная (SplitterLeft.Dock=Left)

  Private Sub SplitterLeft_MouseDown(sender As Object, e As MouseEventArgs) Handles SplitterLeft.MouseDown
    sp_mouse = e.X 'запоминаем смещение мыши относительно левого края сплиттера
    'убираем Splitter Bar на момент нажатия
    SplitterLeft.Hide()
    SplitterLeft.Show()
  End Sub

  Private Sub SplitterLeft_SplitterMoving(sender As Object, e As SplitterEventArgs) Handles SplitterLeft.SplitterMoving
    SplitterLeft.SplitPosition = e.X - sp_mouse 'учитываем смещение мыши
  End Sub
  '==============================================

  '==============================================
  'правая панель основная (SplitterRight.Dock=Right)

  Private Sub SplitterRight_MouseDown(sender As Object, e As MouseEventArgs) Handles SplitterRight.MouseDown
    sp_mouse = e.X 'запоминаем смещение мыши относительно левого края сплиттера
    'убираем Splitter Bar на момент нажатия
    SplitterRight.Hide()
    SplitterRight.Show()
  End Sub

  Private Sub SplitterRight_SplitterMoving(sender As Object, e As SplitterEventArgs) Handles SplitterRight.SplitterMoving
    SplitterRight.SplitPosition = PanelMain1.Width - e.X - SplitterRight.Width + sp_mouse 'учитываем смещение мыши
  End Sub
  '==============================================
End Class

И все получилось, ничего не дергается, работает как часики.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Нужно реализовать "непрерывный" сплиттер, есть идеи? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]