[リストへもどる]
一括表示

投稿時間:2003/07/03(Thu) 17:39
投稿者名:Blues
Eメール:
URL :
タイトル:
MSHFlexGridの動的作成
いつも勉強させていただいております。
Bluesと申します。昨日は大変お世話になりました。
ありがとうございました。

またMSHFlexGridについて、質問があります。
動的にMSFlexGridを作成したいのですが、うまくいきません。

Private Sub Make_Grid(kind As Integer)
    Dim MSGrid() As MSHFlexGrid
    Dim i As Integer

    Redim MSGrid(kind) As MSHFlexGrid
    For i = 0 To kind - 1
        Set MSGrid(i) = Form1.Controls.Add("MSHFlexGrid", "MGrid" + CStr(i))
                        '↑ここでクラスの文字列が不正です。とエラーが出ます。
    Next i
End Sub

たぶん、クラス名の指定が悪いと思うのですが、ここでは何というクラス名を
書けばよろしいのでしょうか?
もし、クラス名ではないとしたら、どこがいけないのでしょうか?
ご存知のかた、よろしくご教授おねがいいたします。

投稿時間:2003/07/03(Thu) 18:00
投稿者名:batchman
Eメール:
URL :
タイトル:
Re: MSHFlexGridの動的作成
>         Set MSGrid(i) = Form1.Controls.Add("MSHFlexGrid", "MGrid" + CStr(i))
>                         '↑ここでクラスの文字列が不正です。とエラーが出ます。

オブジェクトブラウザを眺めると、何を指定すればいいか分かりますよ。

Set MSGrid(i) = Form1.Controls.Add("MSHierarchicalFlexGridLib.MSHFlexGrid", "MGrid" + CStr(i))

プロジェクトプロパティの実行可能ファイルの作成タブにある、
"使用しないActiveXコントロールについての情報を削除する"
のチェックを外さないと駄目なようです。

投稿時間:2003/07/03(Thu) 18:26
投稿者名:Blues
Eメール:
URL :
タイトル:
Re^2: MSHFlexGridの動的作成
batchmanさま、どうもありがとうございました。
無事Form1上に作成できました。

> オブジェクトブラウザを眺めると、何を指定すればいいか分かりますよ。
> Set MSGrid(i) = Form1.Controls.Add("MSHierarchicalFlexGridLib.MSHFlexGrid", "MGrid" + CStr(i))
> プロジェクトプロパティの実行可能ファイルの作成タブにある、
> "使用しないActiveXコントロールについての情報を削除する"
> のチェックを外さないと駄目なようです。

本当に申し訳ありませんが、欲を言うとSSTab上にMSHFlexGridを
表示させたいのです。
次のとおり書いて実行しましたが、やはりForm1上にMSHFlexGridが
表示されてしまいます。
このSSTab上に表示させるには、どのようなコーディングをしたら
よろしいのでしょうか?

    SSTab1.Tabs = Tabcount                  'タブ数設定
    For i = 0 To Tabcount - 1               'タブ数分ループ
        SSTab1.Tab = i                      '現在タブ
        SSTab1.Caption = "Tab" + CStr(i)    'タブキャプション
        Set MSGrid(i) = Form1.Controls.Add("MSHierarchicalFlexGridLib.MSHFlexGrid", _
                                            "MGrid" + CStr(i))
                        '↑このForm1をSSTab1にしてもダメでした。
    Next i

投稿時間:2003/07/07(Mon) 19:26
投稿者名:batchman
Eメール:
URL :
タイトル:
Re^3: MSHFlexGridの動的作成
Containerプロパティを使用すればSSTabには収められるものの、
Formロード時に一気に設定しても最初に設定したグリッド以外は
SSTabの後ろにいったままになってしまいます。
(他にやり方があるのかも知れませんが、あまり調べる時間も無いもので分かりません。)

一応、下記のコードで動作するには動作しましたが、さっぱり自信はありません。
参考程度で見て下さい。

Private MSGrid(5) As Object
Private Sub Form_Load()
    
    Dim i   As Long
    
    SSTab1.Tabs = 6                         '現在タブ
    For i = 0 To SSTab1.Tabs - 1            'タブ数分ループ
        
        SSTab1.Tab = i                      '現在タブ
        SSTab1.Caption = "Tab" + CStr(i)    'タブキャプション
        Set MSGrid(i) = Controls.Add("MSHierarchicalFlexGridLib.MSHFlexGrid", "MGrid" + CStr(i))
        With MSGrid(i)
            .Cols = i * 3 + 1
            .Rows = i * 2 + 1
            .Top = SSTab1.TabHeight * SSTab1.Rows + 200
            .Left = SSTab1.Left
            .Height = SSTab1.Height - SSTab1.TabHeight * SSTab1.Rows - 300
            .Width = SSTab1.Width - SSTab1.Left - 300
            .TextMatrix(i, i) = "Tab" & Format$(i)
'           Set .Container = SSTab1
'           .Visible = True
        End With
    Next i
End Sub

Private Sub SSTab1_Click(PreviousTab As Integer)

    With MSGrid(SSTab1.Tab)

        If Not .Container Is SSTab1 Then Set .Container = SSTab1
        .Visible = True
    End With
    MSGrid(PreviousTab).Visible = False

End Sub