powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Нужно реализовать "непрерывный" сплиттер, есть идеи?
9 сообщений из 9, страница 1 из 1
Нужно реализовать "непрерывный" сплиттер, есть идеи?
    #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
Нужно реализовать "непрерывный" сплиттер, есть идеи?
    #38886244
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77

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

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

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

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

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

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


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