○VB6でのコントロールの動的貼り付け

Dim WithEvents a As CommandButton

Private Sub Form_Load()
    Set a = Controls.Add("VB.CommandButton", "a1")
    a.Left = 200
    a.Top = 100
    a.Width = 1000
    a.Height = 400
    a.Visible = True
End Sub
赤文字部分の "a1" はオブジェクト名ですので自由に変更してください。

ボタンではなくて、テキストボックスを動的張り付けする場合には、変数の型を TextBox に変更します。
Private WithEvents textbox1 As TextBox
そして、 Controls.Add の部分のボタン"VB.CommandButton"から、テキストボックス"VB.TextBox"に修正します。
以上でボタンからテキストボックスに変更できます。


上記プログラムを動かすとボタンが動的に張り付いてこのようになります。

イベントで動作する関数は WithEvents での変数名に従って開発環境からの通常の選択項目で生成できます

今回の場合、変数名を a としたため、 a を選択すると各種イベントが選択できます。


▼ MSCommの動的張り付け

ActiveXであるMSCommを動的に動くようにしてみます。
ただし、ライセンスの関係だと思うのですが、実行ファイルに変換しても開発環境の無いパソコンでは動作しません。

コンポーネントではなくて参照設定にて参照を選び、ファイルの種類をocxにしてMSCOMM32.OCXを開いて参照しておく必要があります。
見えないコントロールですので張り付けてはいないですが動的に読み込んで動作させる事ができます。
ただし、参照設定したMSCOMM32.OCXを開発環境上で解除する事ができないようで、プロジェクトファイル( .vbp ) をエディタで開いて MSCOMM32.OCX の記述のある行を削除すると無かった事にできます。

▽ 参照設定の方法

まずは参照設定を開きます、すでにコンポーネント(MSCommコントロールを貼り付けられる状態)の場合には解除しておく必要があります。


一覧にはないはずですので、参照ボタンを押します。


ファイルの種類を ocx に変更して MSCOMM32.OCX を開きます。


OKボタンを押して参照を設定します。

参照設定が完了したら以下のコードを走らせてみましょう。
フォームにMSCommコントロールを張り付けてなくてもRS232Cの通信が出来ます。
ただし、実行ファイルに変換しても開発環境のあるパソコンでしか動かないですけどね。
Dim WithEvents a As MSComm

Private Sub a_OnComm()
    Select Case a.CommEvent
        Case comEvReceive
            a.InputLen = 0            '読み取るバイト数を指定 0は全て読み込む
            Label1.Caption = a.Input
    End Select
End Sub

Private Sub Command1_Click()
    a.OutBufferCount = 0      'バッファクリア
    Do
        a.Output = "送信文字列" & vbCr & vbLf
    Loop While a.OutBufferCount >= 1
End Sub

Private Sub Form_Load()
    Set a = CreateObject("MSCommLib.MSComm")
    a.CommPort = 11
    a.Settings = "9600,N,8,1"
    a.PortOpen = True
    a.RThreshold = 1
End Sub


▲トップページ > Visual BASIC と C#