自作コントロール(UserControl)で、オプションボタン風にするには?

解決


かず  2003-09-02 02:47:30  No: 79232

はじめまして。かずといいます。
今、UserControlで、オプションボタン風の改良型自作コマンドボタン
を作成してます。

コントロール配列にした場合にオプションボタンのような
連携動作を実装させたいのですが方法がわかりません。

制限というわけではないのですが、ユーザコントロール内は、
一切、既存コントロールを含めるつもりはありません。
(変なこだわりになってます。。)

文献等調べてみたのですが、それらしき情報が得られませんでした。
どなたか、ご教授願えたらと思います。
よろしくお願いします。


かず  2003-09-02 03:17:01  No: 79233

申し訳ございません。追記ですが、OLE_OPTEXCLUSIVE型を使った方法でいくと、プロパティを既定値にしなくてはいけないことと、制御コンテナ側で処理されてしまい、なにかと融通が効かないので使用しませんでした。


魔界の仮面弁士  2003-09-02 03:36:40  No: 79234

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]を押下してください。
これで、オプションボタンと同様の動きになります。


魔界の仮面弁士  2003-09-02 03:43:43  No: 79235

# ありゃ、すれ違い。(;_;)

> なにかと融通が効かないので使用しませんでした。
求めている「融通が効く動作」が、どのような内容にもよりますが、
例えば、UserControl.Extender.Container にあるControlsを列挙して、
TypeOf演算子で自コントロール型のものを列挙して、お互いを
操作しあうようにしてみては如何でしょう?


かず  2003-09-02 03:51:41  No: 79236

魔界の仮面弁士さん、御返答していただき、ありがとうございます。

OLE_OPTEXCLUSIVE型変数での実装は、一度は実装していたのですが
プロシージャの既定値がValueでは、コントロールの仕様上都合が悪いため
(別に既定値とするプロパティが存在しています。)、他の方法を考えて
いたところなんです。

やはり、この方法しか実装は無理なんでしょうか。


かず  2003-09-02 04:00:39  No: 79237

魔界の仮面弁士さん、ありがとうございます。(私もすれ違い・・)

> 例えば、UserControl.Extender.Container にあるControlsを列挙して、
> TypeOf演算子で自コントロール型のものを列挙して、お互いを
> 操作しあうようにしてみては如何でしょう?

UserControlのExtenderプロパティ(オブジェクト)ですね。
試す価値、確かにありそうです。
早速、試行錯誤してみます。

どうもありがとうございました。


かず  2003-09-02 04:04:55  No: 79238

すみません。チェック忘れていました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加