MSHFlexGrid.cols

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

MSHFlexGrid.cols

Сообщение vvs_adm » 06.04.2005 (Ср) 17:27

Вопрос по сабжу : что это за непонятное свойство? Сначала мне показалось, что это количество столбцов грида, но довольно быстро я обломался :( Этот cols увеличивается при каждом ресайзе на единицу, приходится при первой загрузке закидывать в переменную, и потом использовать при ресайзе, что не есть хорошо :( И с како.. т.е. почему сие свойство увеличивается постоянно ? :shock:

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 06.04.2005 (Ср) 21:00

Ну да, все правильно ты сначала решил - вот тут посмотри, если не веришь. И что это у тебя за хитрый ресайз такой, что количество столбцов/строк аффектит? :shock:

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 06.04.2005 (Ср) 21:07

EnnorНу так я и сделал при ресайзе вычисление ширины столбцов по их количеству, используя .cols . Вычисление кинул в form_resize() При раскрытии формы все ОК, а вот при свертывании-развертывании столбцы все больше и больше сжимаются :shock: :shock: Я вывел печать .cols и почему-то при каждом ресайзе происходит .cols=.cols+1 :shock: :shock: Ща исходник поищу, выложу ... Фигня какая-то :(

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 06.04.2005 (Ср) 23:07

Вот братцы, выручайте:
Вот ресайз:
Код: Выделить всё
Private Sub Form_Resize()
    Dim nCount As Long
    Dim nColsWidth As Long
   
    On Error Resume Next
    mshMSHFlexGrid.Width = Me.ScaleWidth - 15
    mshMSHFlexGrid.Height = Me.ScaleHeight - 45
   
    mshMSHFlexGrid.ColWidth(0) = 250
    mshMSHFlexGrid.ColWidth(1) = 1000
    nColsWidth = (Me.Width - 1750) / (nColsQuantity - 2)
    For nCount = 2 To nColsQuantity
        mshMSHFlexGrid.ColWidth(nCount) = nColsWidth
    Next nCount
End Sub

А здесь загружаю флекс:
Код: Выделить всё
        Set frmTemp.mshMSHFlexGrid.DataSource = rsTemp 'ADODB.recordset
        frmTemp.nColsQuantity = frmTemp.mshMSHFlexGrid.Cols
        frmTemp.ResizeForm

frmTemp - форма, открываемая в MDIform (set frmTemp=new...)
nColsQuantity - переменная паблик...
Если строку
frmTemp.nColsQuantity = frmTemp.mshMSHFlexGrid.Cols
перенести в саму форму в ресайз,(nColsQuantity = mshMSHFlexGrid.Cols ) то хана :( При каждом ресайзе плюс единица.Где я торможу?

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 07.04.2005 (Чт) 0:03

Вот это я бы переписал вот так:
Код: Выделить всё
nColsWidth = (Me.ScaleWidth - 1750) / (mshMSHFlexGrid.cols - 2)
    For nCount = 2 To mshMSHFlexGrid.cols - 1
        mshMSHFlexGrid.ColWidth(nCount) = nColsWidth
    Next nCount
У тебя коллекция zero-based, верно? Ну так что же ты забываешь, что для такого способа индексации количество столбцов всегда на единицу больше, чем индекс последнего (вторая строка в коде выше)? Вот отсюда у тебя и добавление...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 07.04.2005 (Чт) 0:56

Кошмар :( Это ж надо так натормозить :( Тока получается, что при попытке установить ширину столбца, которого нет, он добавляется, но только невидимый? Фигня какая-то...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 07.04.2005 (Чт) 4:52

И еще что-то никак не найду : заполнил Flex через ADODB.recordset, потом Flex изменил (включая кол-во строк). Как обновить БД? set rs.DataSource=MSHFlexGrid.Recordset + rs.Update что-то не пашет, все остается как было :( Что должно быть вместо DataSource?

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 07.04.2005 (Чт) 11:53

Версия флекса, идущая со Студией, урезана по полной, в том числе в плане обновляемости. Эти манипуляции надо с самим рекордсетом делать.

Хочешь полной функциональности - юзай полную версию оригинального компонента, VideoSoft FlexGrid. Но он денег стоит, ясен пень.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 07.04.2005 (Чт) 12:38

Ennor писал(а):Версия флекса, идущая со Студией, урезана по полной, в том числе в плане обновляемости. Эти манипуляции надо с самим рекордсетом делать.
Не, ну то, что урезана, эт я знаю... Но что настолько... Материться в форуме не хочется :twisted: Неужели, если у меня на форме лежит заполненный MSHFlexGrid, то с него нельзя весь рекордсет содрать (не по клеткам), это же заподло какое-то. В данном случае мне до лампочки, буду рекордсет заполнять, но вообще обидно. А деньги мы не платили, не платим и платить не будем, пока капиталисты совсем не задавят... А там посмотрим, что сделать, что б и дальше не платить :)


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

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 183

    TopList