Смещение ListView на вкладках MultiPage в Exsel 2003

Автор Mishel, 31.07.2012, 14:16

« назад - далее »

Mishel

Всем доброго времени суток!

При переходе с одной вкладки MultiPage на другую ListView смещается в верхний левый угол формы. Решение есть для Access, например:


Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _

                                    ( _

                                     ByVal hWnd As Long, _

                                     ByVal wMsg As Long, _

                                     ByVal wParam As Long, _

                                     lParam As Any _

                                     ) _

                                    As Long
Private Sub НаборВкладок_Change()

   Const WM_SIZE As Long = &H5

   SendMessage Me.hWnd, WM_SIZE, 0, 0    

End Sub,

но не подходит для Excel.
Вопрос, - какой код устранит смещение ListView при переходе с одной вкладки на другую в MultiPage для Exsel 2003?

Шпец Докапыч

Озвученную проблему в чистом проекте не наблюдаю.
Что если указать координаты через свойства?:
Private Sub НаборВкладок_Change()
    ListView1.Top = 10
    ListView1.Left = 20
   'Repaint
End Sub
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Mishel

#2
Добрый день!

Код:
Private Sub MultiPage1_Change()
 ListView1.Top = 48
 ListView1.Left = 6
 'Repaint
End Sub

не помогает.


На форме MultiPage с двумя вкладками, Style=2, цвет вкладок закрасил с помощью Paint, на вкладках по одному ListView (ListView1 и ListView2) . При UserForm_Initialize загружается опциями ListView1 на Page1. При загрузке формы ListView1 отображается без смещения.

Далее Click по опции первого ListView1 - программный переход на Page2, - Click по опции второго ListView2.

Далее программный переход (с помощью выносной кнопки на UserForm) на Page1, и - ListView1 на Page1 сместился, причём с гарантией.

Бывает, что смещается и ListView2 на Page2.



Установил момент, когда ListView1 смещается (особо видно).

Если в процедуре Private Sub ListView2_MouseUp закомментировать строку

Worksheets("Лист1").Cells(intJ, 15).Value = Me.MultiPage1.Pages(0).ListView1.ListItems(intM) & " " & Me.MultiPage1.Pages(0).ListView1.ListItems(intM).SubItems(1)
то смещения нет, после перехода на Page1. Если эту строку разкомментировать и дать сработать коду в строке, то смещение есть. Наверное это не единственная причина от чего смещается ListView.

Для запуска примера необходимо ListView1 и  ListView2 установить свои.

Для разрешения экрана 1280*1024:
Appearance = 0
BackColor = &H80000014&
Font = Verdana № 9
ForeColor = &H00C00000&
Height = 360
Left = 6
Top = 48
Width = 324

Работа с примером:

1. После запуска приложенного файла "Смещения ListView", с помощью кнопки загрузить форму;
2. Выбрать опцию на ListView1, перейти на Page2;
3. Выбрать опцию на ListView2;
4. С помощью кнопки "Товарные группы" пейти на Page1 – смещение ListView1, если указанная строка разкомментирована .

Найдено частичное решение – информацию из ListView1 в ListView2 передавать через переменную, общую для двух процедур.
Worksheets("Лист1").Cells(intJ, 15).Value = Переменная
Такая переменная устраняет (уменьшает) 90%  смещений. Оставшиеся 10% смещения принадлежат ListView2.

Шпец Докапыч

#3
Глюк в примере отловил и устранил так:
Private Sub MultiPage1_Change()
 If MultiPage1.Value = 0 Then
   ListView1.Visible = 0
   ListView1.Visible = 1
 End If
End Sub
Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли

Mishel

#4
Ого. Спасибо!

Пришлось ещё и так:
Private Sub MultiPage1_Change()
If MultiPage1.Value = 0 Then
  ListView1.Visible = False
  ListView1.Visible = True
End If
If MultiPage1.Value = 1 Then
  ListView2.Visible = False
  ListView2.Visible = True
End If
End Sub

100% без смещений ListView
Для уменьшения кода так:
ListView1.Visible = False
ListView1.Visible = True

 ListView2.Visible = False
ListView2.Visible = True

в соответствующих процедурах.   

Малозаметное мигание осталось, т. е. если сравнить такие же переходы в MultiPage1 с ListBox, то предпочтительнее ListBox (ListBox не смещается).

Есть ещё Xtreme ListView.