Private ToComment(10) As CommandButton
Dim i As Integer
----------------------------------------------------------
Private Sub Command1_Click()
Set ToEnd(i) = Form2.Controls.Add("VB.CommandButton", "ToEnd" & CStr(i))
With ToEnd(i)
.Visible = True
.Width = 1095
End With
End Sub
でForm2につくったコマンドをクリックすると終了するようにするにはどうすればいいのでしょうか。
よろしくおねがいします。
「control.add 変数のついて」の回答を
きちんと読まれませんでしたか?
>あるいは、イベントを使わないのなら
>Private lblObj(10) As Label
と書いたと思いますが?
イベントを使いたいならWithEventsは必須です。
そして、WithEventsを指定して配列は作れません。
コントロール配列を動的に作成したかったら
Loadステートメントを使ってください。
>Form2につくったコマンドをクリックすると終了するようにするにはどうすればいいのでしょうか。
無理やりしたかったら、サブクラス化かローカルフックで
WM_LBUTTONDOWNを拾って処理するのが正道ですが、
手抜きするならこんなかんじ。(邪道編)
Option Explicit
Private Declare Function PeekMessage Lib "user32" Alias _
"PeekMessageA" (lpMsg As MSG, ByVal hwnd As Long, _
ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, _
ByVal wRemoveMsg As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type MSG
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Private msgMsg As MSG
Private Const WM_LBUTTONDOWN = &H201
Private Const PM_NOREMOVE = &H0
Private Const PM_REMOVE = &H1
Private ToEnd(10) As CommandButton
Private Sub Command1_Click()
Form2.Show
Set ToEnd(0) = Form2.Controls.Add("VB.CommandButton", "ToEnd" & CStr(0))
With ToEnd(0)
.Visible = True
.Width = 1095
End With
Do While PeekMessage(msgMsg, ToEnd(0).hwnd, _
WM_LBUTTONDOWN, WM_LBUTTONDOWN, PM_REMOVE) = 0
DoEvents
Loop
Unload Form2
End Sub
素直にLoadステートメントでボタンの動的追加したほうが楽だと思いますが・・・。
CPU使用率の問題もあるし。
ぬあ!「イベントを使う」ってそういうことだったんですか!
ごめんなさい!m(_ _)m
load勉強してみますね。ありがとうございました