投稿日 | : 2006/09/23(Sat) 22:55 |
投稿者 | : ダンボ |
Eメール | : |
URL | : |
タイトル | : サンプルありがとうございます |
neptune さん、サンプルどうもありがとうございます。参考にして下記を試してみました。
'///////////////////Module1///////////////////////
Public IMEstatus As Integer
'///////////////////UserForm///////////////////////
Option Explicit
Private clsTxt As Class3
Private Sub CommandButton1_Click()
With clsTxt
MsgBox "TextBox1のIME : " & .Items(1).IMEMode & vbCrLf & _
"TextBox2のIME : " & .Items(2).IMEMode & vbCrLf & _
"TextBox3のIME : " & .Items(3).IMEMode & vbCrLf
End With
End Sub
Private Sub UserForm_Initialize()
Set clsTxt = New Class3
clsTxt.AddItem = Me.TextBox1
clsTxt.AddItem = Me.TextBox2
clsTxt.AddItem = Me.TextBox3
End Sub
Private Sub UserForm_Terminate()
Set clsTxt = Nothing
End Sub
'///////////////////////////Class3/////////////////
Option Explicit
Private clsItem As Class4
Private mCollection As Collection
Public Property Let AddItem(ptxt As MSForms.TextBox)
Set clsItem = New Class4
Set clsItem.SetTextBox = ptxt
mCollection.Add clsItem
End Property
Public Property Get Items(pNum As Long) As MSForms.TextBox
Set Items = mCollection(pNum).GetTextBox
End Property
Private Sub Class_Initialize()
Set mCollection = New Collection
End Sub
Private Sub Class_Terminate()
Set mCollection = Nothing
End Sub
'////////////////////////Class4/////////////////////
Option Explicit
Private WithEvents mTxt As MSForms.TextBox
Property Set SetTextBox(ptxt As MSForms.TextBox)
Set mTxt = ptxt
End Property
Property Get GetTextBox() As MSForms.TextBox
Set GetTextBox = mTxt
End Property
Private Sub Class_Terminate()
Set mTxt = Nothing
End Sub
Private Sub mTxt_Enter()
mTxt.IMEMode = IMEstatus
End Sub
Private Sub mTxt_Exit(ByVal Cancel As MSForms.ReturnBoolean)
IMEstatus = mTxt.IMEMode
End Sub
問題点:mTxt_EnterとmTxt_Exitイベントが発生しません。ネットで調べてみると
「テキストボックス(MSForms.TextBox)をクラス化しても「Enter」や「Exit」のイベントはトラップできません。」(orz)
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100_040.html
このページにその対策が書いてあるようなのですが、現時点で理解できていません!!
土日にじっくり考えて見ますね。(いや1週間はかかるかも)