Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Включить полосы прокрутки ListView Добавлено: 10.12.08 11:47  

Автор вопроса:  kavonline
Подскажите плиз как включить полосы прокрутки контрола ListView, что бы они отображались всегда (даже в пустом контроле) а не зависили от количество items и размеров контрола. Или хотя бы как понять отображены ли в данный момент полосы прокрутки. Это нужно что бы изменять ширину столбцов.

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Фeнягz



Вопросов: 2
Ответов: 62
 Web-сайт: atauenis.narod.ru
 Профиль | | #1
Добавлено: 11.12.08 02:15
Прийдется ориентироваться на ширину-высоту полос прокрутки + толщина рамки елемента. Толщина рамки как правило всегда 2 пиксела.

А узнать толщину (ширина или высота полосы) можно так например

  1. Friend Declare Function GetSystemMetrics Lib "user32" Alias "GetSystemMetrics" (ByVal nIndex As Integer) As Integer
  2.  
  3. Private scrollweight As Integer = GetSystemMetrics(2)


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

  1. Private Functon __getwidth() As Integer
  2.    Return width - 4 - scrollweight
  3. End Function


  1. Private Functon __getheight() As Integer
  2.    Return height - 4 - scrollweight
  3. End Function

Ответить

Номер ответа: 2
Автор ответа:
 Фeнягz



Вопросов: 2
Ответов: 62
 Web-сайт: atauenis.narod.ru
 Профиль | | #2
Добавлено: 11.12.08 02:31
Function, извиняюсь. А пользоваться ими лучше потому, что элементы с порокруткой часто в качестве ClientSize и ClientBounds выдают не отображаемые (видимые) размеры, а суммарные размеры (прямоугольник) всех элементов, для которых осуществляется прокрутка.

Ответить

Номер ответа: 3
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #3 Добавлено: 11.12.08 03:49
Ну уж если речь пошла о win32api, то зачем выяснять размеры скроллов, если задача определить клиентскую область окна. см. GetClientRect.

Ответить

Номер ответа: 4
Автор ответа:
 Фeнягz



Вопросов: 2
Ответов: 62
 Web-сайт: atauenis.narod.ru
 Профиль | | #4
Добавлено: 11.12.08 03:58
Либо так.

И, подозреваю я, программа всё равно для Windows разрабатывается.

Ответить

Номер ответа: 5
Автор ответа:
 Father



Вопросов: 0
Ответов: 159
 Профиль | | #5 Добавлено: 11.12.08 07:53
по теме:
  1.  
  2.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  3.         ListView1.View = View.Details
  4.         ListView1.Columns.Clear()
  5.         ListView1.Columns.Add("col 1", 10, HorizontalAlignment.Left)
  6.         ListView1.Columns.Add("col 2", 10, HorizontalAlignment.Left)
  7.         ListView1_SizeChanged(sender, e)
  8.     End Sub
  9.  
  10.     Private Sub ListView1_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.SizeChanged
  11.         On Error Resume Next
  12.         Dim r As Rectangle = ListView1.ClientRectangle
  13.         ListView1.Columns(0).Width = r.Width / 2
  14.         ListView1.Columns(1).Width = r.Width / 2
  15.     End Sub



что бы они отображались всегда (даже в пустом контроле)
или
как понять отображены ли в данный момент

то можно так:
  1.  
  2.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  3.         Dim dword As Integer
  4.         'вообще выключить чтоб не мешало
  5.         ListView1.Scrollable = False
  6.         '1 метод Включить скролл
  7.         SetWindowLong(ListView1.Handle.ToInt32, GWL_STYLE, GetWindowLong(ListView1.Handle.ToInt32, GWL_STYLE) Or WS_VSCROLL Or WS_HSCROLL)
  8.         SetWindowPos(ListView1.Handle.ToInt32, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER)
  9.         '2 метод включить скролл
  10.         'ShowScrollBar(ListView1.Handle.ToInt32, 3, 1)
  11.         '3
  12.         'SetScrollInfo
  13.  
  14.         'Проверка наличия скролов
  15.         dword = GetWindowLong(ListView1.Handle.ToInt32, GWL_STYLE)
  16.         If (dword And WS_VSCROLL) Then
  17.             ' Debug.WriteLine("вертикальный скрол")
  18.         End If
  19.         If (dword And WS_HSCROLL) Then
  20.             ' Debug.WriteLine("горизональный скрол")
  21.         End If
  22.     End Sub


Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам