Проблема со свойством MSFlexGrid1.TopRow

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
maxV
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 12.07.2004 (Пн) 18:26

Проблема со свойством MSFlexGrid1.TopRow

Сообщение maxV » 10.03.2007 (Сб) 22:37

Возникла проблема: при перемещении "вниз", свойство TopRow не устанавливается больше 100. Т.е. при TopRow=100 цикл безконечный ...

Код: Выделить всё
Option Explicit


'*** ActiveX Control Event ***
Private Sub Form_Load()
Dim i&

    MSFlexGrid1.Cols = 5: MSFlexGrid1.Rows = 300
    MSFlexGrid1.ScrollBars = flexScrollBarNone: MSFlexGrid1.RowHeightMin = 250
   
    For i = 1 To MSFlexGrid1.Rows - 1
        MSFlexGrid1.TextMatrix(i, 0) = Str$(i)
    Next
   
End Sub

'*** ActiveX Control Event ***
Private Sub MSFlexGrid1_RowColChange()
   
    ' ----- корректируем значение "верхней видимой строки" при перемещении "вверх"
    If MSFlexGrid1.Row < MSFlexGrid1.TopRow Then
        MSFlexGrid1.Redraw = False
        MSFlexGrid1.ScrollBars = flexScrollBarVertical
        MSFlexGrid1.TopRow = MSFlexGrid1.Row
        MSFlexGrid1.ScrollBars = flexScrollBarNone
        MSFlexGrid1.Redraw = True
    End If
    ' ----- корректируем значение "верхней видимой строки" при перемещении "вниз"
    If MSFlexGrid1.Height - (MSFlexGrid1.CellTop + MSFlexGrid1.CellHeight) < MSFlexGrid1.RowHeightMin Then
        MSFlexGrid1.Redraw = False
        MSFlexGrid1.ScrollBars = flexScrollBarVertical
        Do While (MSFlexGrid1.Height - (MSFlexGrid1.CellTop + MSFlexGrid1.CellHeight)) < MSFlexGrid1.RowHeightMin
            MSFlexGrid1.TopRow = MSFlexGrid1.TopRow + 1
        Loop
        MSFlexGrid1.ScrollBars = flexScrollBarNone
        MSFlexGrid1.Redraw = True
    End If

End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.03.2007 (Сб) 23:31

TopRow, оно такое...
Если флекс в настоящий момент имеет вертикальный скроллбар, то можно установить TopRow хоть равным Rows, и на экране останется одна строка. Более того, если тогда установить TopRow больше, чем количество строк, возникнет ошибка, что прямо противоречит документации, где сказано, что TopRow сбрасывается на границу, если слишком велико или мало. Такой вот баг.
А если скроллбара нет, то нормально.

Ты скажи словами, что тебе надо достичь.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

maxV
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 12.07.2004 (Пн) 18:26

Сообщение maxV » 11.03.2007 (Вс) 20:39

Чего-то весь день не мог на форум попасть(страница не открывалась).
Мне нужно,что бы при вертикальной прокрутке флексгрида происходило изменение текущей ячейки точно так же, как при нажатии клавиш "Up","Down","PageUp","PageDown".
Вот и кручу с второй день с вариантами туда-сюда.
В данном примере на форме есть еще VScrollBar с максммальным значением равным MSFlexGrid1.Rows-1. И соответсвенно при изменении VScrollBar.Value меняем MSFlexGrid1.Row=VScrollBar.Value и вычисляем MSFlexGrid1.TopRow и на оборот.

maxV
Новичок
Новичок
 
Сообщения: 34
Зарегистрирован: 12.07.2004 (Пн) 18:26

Сообщение maxV » 14.03.2007 (Ср) 22:21

GSerg писал(а):TopRow, оно такое...
Если флекс в настоящий момент имеет вертикальный скроллбар, то можно установить TopRow хоть равным Rows, и на экране останется одна строка. Более того, если тогда установить TopRow больше, чем количество строк, возникнет ошибка, что прямо противоречит документации, где сказано, что TopRow сбрасывается на границу, если слишком велико или мало. Такой вот баг.
А если скроллбара нет, то нормально.

Ты скажи словами, что тебе надо достичь.


1. Вот, то, что мне нужно. Сегодня окончательно переделал.
2. К стати, в MSDN сказано, что свойство TopRow сбрасывается на максимально возможное при установке ему(TopRow) значения, больше максимально возможного. Про слишком мало - ни слова.
Хотя, конечно, в примечание можно было ы и добавить, что TopRow дожно быть >0 и < Rows-1
Вложения
Project1.rar
(2.91 Кб) Скачиваний: 61


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 107

    TopList  
cron