- PR -

フレームとフレーム内のオプションボタンを動的に追加できない

投稿者投稿内容
アルカポネ
常連さん
会議室デビュー日: 2004/09/16
投稿数: 29
投稿日時: 2006-10-24 11:15
OS:WindowsXP,
アプリ:Visual Basic 6.0(SP6)

いつもお世話になっております。
フレーム内にオプションボタンが二つ有り、動的に追加していく処理を作ってます。
フォーム上に、三つのコントロールを配置してます。コントロール名は下記の通りです。
フレーム:fraName(0)
オプションボタン:optAll(0),optObject(0)
以下にコードを書きます。

Private Sub Command1_Click()

Load fraName(1)
fraName(1).Top = 4000
fraName(1).Left = 4000
fraName(1).Visible = True

Load optAll(1)
optAll(1).Top = 120
optAll(1).Left = 120
optAll(1).Visible = True

End Sub

実行するとfraName(0)の中にoptAll(1)が追加されます。fraName(1)の中に追加したいのですが、うまくいきません。
色々調べて、ユーザーコントロールにしたり、三つのコントロールをグループに纏めようとしたりしましたが、結局全て途中で行き詰まりました。
ヒントになりそうなことをご存知でしたら、ご教示下さい。
検索しましたが、過去ログなどですでに話題になっていましたら、申し訳ありません。
宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-24 11:55
引用:

アルカポネさんの書き込み (2006-10-24 11:15) より:

実行するとfraName(0)の中にoptAll(1)が追加されます。
fraName(1)の中に追加したいのですが、うまくいきません。


一言で言えば、Parent が fraName(0) のままになっているからです。
実行時に Parent を変更するには、Windows API の SetParent 関数を使うことになります。

今の実装のまま、進めるという前提での回答です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
アルカポネ
常連さん
会議室デビュー日: 2004/09/16
投稿数: 29
投稿日時: 2006-10-24 11:59
じゃんぬねっと様、早速の返事ありがとうございます。
SetParent 関数を調べて修正します。
修正後の結果を報告致します。
アルカポネ
常連さん
会議室デビュー日: 2004/09/16
投稿数: 29
投稿日時: 2006-10-24 13:36
じゃんぬねっと様の御指摘の通り、SetParent関数を使いました。
下記の2行を追加すると思い通りの処理ができました。
SetParent optAll(1).hWnd, fraName(1).hWnd
SetParent optObject(1).hWnd, fraName(1).hWnd
ありがとうございました。
これでコントロール配列にしてFor文の中で、コントロールを配置しようと思いましたが、
フレーム、オプションボタン、ラベル等をグループ化して、配置するほうが処理的に良いのかなと考えました。
グループ化の方法や、違った良い方法をご存知でしたら、ご教示下さい。
宜しくお願い致します。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-24 13:43
引用:

アルカポネさんの書き込み (2006-10-24 13:36) より:

フレーム、オプションボタン、ラベル等をグループ化して、配置するほうが処理的に良いのかなと考えました。
グループ化の方法や、違った良い方法をご存知でしたら、ご教示下さい。


最初に出ていた 「ユーザーコントロール」 でしょう。

私は 「コントロール配列」 が嫌いなので、厳密な名前をつけて普通に配置します。
表組みのイメージであれば、使うことも考えますが、たいてい Grid 系のコンポーネントを使いますね。

# 使用用途がわからないので、何とも言えませんが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
アルカポネ
常連さん
会議室デビュー日: 2004/09/16
投稿数: 29
投稿日時: 2006-10-24 14:01
じゃんぬねっと様ありがとうございます。

昨日はユーザーコントロールを使用しようとしてました。

UserControl:UserControl1
下記の四つのコントロールをユーザーコントロール内で纏めてました。
Frame:fraName
OptionButton:optAll
OptionButton:optObject
Label:lblKyoku

フォーム上にUserControl1を、オブジェクト名:udtSelectとして配置し、
udtSelect.optAll.Value = Trueのような処理をしようとしても、うまくいかず、あきらめました。
UserControl1.optAll.Value = Trueとしてもダメでした。
ユーザーコントロールの知識が無さ過ぎてお恥ずかしいですが、御指摘できる範囲で構いませんので、宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-24 14:09
引用:

アルカポネさんの書き込み (2006-10-24 14:01) より:

フォーム上にUserControl1を、オブジェクト名:udtSelectとして配置し、udtSelect.optAll.Value = Trueのような処理をしようとしても、うまくいかず、あきらめました。
UserControl1.optAll.Value = Trueとしてもダメでした。


UserControl に、そのコントロールのインスタンスを返す Public プロパティを追加しましょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
アルカポネ
常連さん
会議室デビュー日: 2004/09/16
投稿数: 29
投稿日時: 2006-10-24 14:14
じゃんぬねっと様、お忙しいところ本当にありがとうございます。
早い返事の為手が止まらず助かります。
UserControl に、コントロールのインスタンスを返す Public プロパティを追加するのですね。私しのレベルでは、難しいようですが、挑戦してみます。また結果を報告致します。

スキルアップ/キャリアアップ(JOB@IT)