はじめまして。かずといいます。
今、UserControlで、オプションボタン風の改良型自作コマンドボタン
を作成してます。
コントロール配列にした場合にオプションボタンのような
連携動作を実装させたいのですが方法がわかりません。
制限というわけではないのですが、ユーザコントロール内は、
一切、既存コントロールを含めるつもりはありません。
(変なこだわりになってます。。)
文献等調べてみたのですが、それらしき情報が得られませんでした。
どなたか、ご教授願えたらと思います。
よろしくお願いします。
申し訳ございません。追記ですが、OLE_OPTEXCLUSIVE型を使った方法でいくと、プロパティを既定値にしなくてはいけないことと、制御コンテナ側で処理されてしまい、なにかと融通が効かないので使用しませんでした。
VB6でしょうか? であればこんな感じです。
まず、新規にUserControlを追加し、そこに以下のコードを貼り付けてください。
'(PropertyBag関連の記述は省略してあります)
Option Explicit
Private mValue As OLE_OPTEXCLUSIVE
Private Sub UserControl_InitProperties()
Me.Value = False
UserControl.BackColor = vbBlue
End Sub
Private Sub UserControl_Click()
Me.Value = True
End Sub
Public Property Get Value() As OLE_OPTEXCLUSIVE
Value = mValue
End Property
Public Property Let Value(ByVal NewValue As OLE_OPTEXCLUSIVE)
mValue = NewValue
UserControl.BackColor = IIf(NewValue, vbRed, vbBlue)
UserControl.PropertyChanged "Value"
End Property
UserControlに上記を記述した後、ユーザーコントロールの
コードウィンドウを選択しておいた状態で、VB開発環境の
[ツール]メニューから[プロシージャの属性]ダイアログを開いて下さい。
そして、[名前]欄から「Value」プロパティを選択し、[詳細]を押下し、
[プロシージャID]から「(既定値)」を選択し、[OK]を押下してください。
これで、オプションボタンと同様の動きになります。
# ありゃ、すれ違い。(;_;)
> なにかと融通が効かないので使用しませんでした。
求めている「融通が効く動作」が、どのような内容にもよりますが、
例えば、UserControl.Extender.Container にあるControlsを列挙して、
TypeOf演算子で自コントロール型のものを列挙して、お互いを
操作しあうようにしてみては如何でしょう?
魔界の仮面弁士さん、御返答していただき、ありがとうございます。
OLE_OPTEXCLUSIVE型変数での実装は、一度は実装していたのですが
プロシージャの既定値がValueでは、コントロールの仕様上都合が悪いため
(別に既定値とするプロパティが存在しています。)、他の方法を考えて
いたところなんです。
やはり、この方法しか実装は無理なんでしょうか。
魔界の仮面弁士さん、ありがとうございます。(私もすれ違い・・)
> 例えば、UserControl.Extender.Container にあるControlsを列挙して、
> TypeOf演算子で自コントロール型のものを列挙して、お互いを
> 操作しあうようにしてみては如何でしょう?
UserControlのExtenderプロパティ(オブジェクト)ですね。
試す価値、確かにありそうです。
早速、試行錯誤してみます。
どうもありがとうございました。
すみません。チェック忘れていました。
ツイート | ![]() |