[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/01/25(Tue) 15:49
投稿者名:ぼん
Eメール:
URL :
タイトル:
複数のボタンをクラスで扱いたい
VB6のクラスのことで困っています。
助けてください!

今、あるフォーム上のピクチャーボックス(Picture1)上に
ボタン(Command1())が10個乗っています。
これをひとまとめにしてクラスとしたくて、
クラスモジュール内で

Private WithEvents btn(10) As CommandButton
     (btn(?)でボタンを参照しようとしてます)

としても宣言自体ダメですよね。
クラス内でコントロール配列を処理するには
どのようにしたらいいのか教えてください!

投稿時間:2005/01/25(Tue) 17:38
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: 複数のボタンをクラスで扱いたい
> クラス内でコントロール配列を処理するには
> どのようにしたらいいのか教えてください!

コントロール配列は、WithEvents では処理できなかったかと。

コントロールのイベントをクラス側で処理したいのであれば、
コントロール配列を、通常のコントロールに変更しておいてください。

投稿時間:2005/01/25(Tue) 18:01
投稿者名:ぼん
Eメール:
URL :
タイトル:
Re^2: 複数のボタンをクラスで扱いたい
> コントロール配列は、WithEvents では処理できなかったかと。
>
> コントロールのイベントをクラス側で処理したいのであれば、
> コントロール配列を、通常のコントロールに変更しておいてください。

魔界の仮面弁士様
早速のご返信ありがとうございました。
確かに通常コントロールならうまくいくのですが、
将来的には最大400個のボタンを並べたいと
考えていたものですから・・・
これはもうクラス化をあきらめるしかないでしょうか・・・
もし考えられる方法があればヒントだけでも
頂けると嬉しいです!

投稿時間:2005/01/26(Wed) 09:29
投稿者名:じゃんぬねっと
Eメール:
URL :http://jeanne.wankuma.com/
タイトル:
Re^3: 複数のボタンをクラスで扱いたい
じゃんぬねっと です。

> これはもうクラス化をあきらめるしかないでしょうか・・・
> もし考えられる方法があればヒントだけでも
> 頂けると嬉しいです!

例えば、clsButton を作りますよね?
数が不定なのでしたら、間に clsButton のインスタンスを配列で所持している clsForm を作ればよいかと。

投稿時間:2005/01/26(Wed) 09:46
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: 複数のボタンをクラスで扱いたい
> 将来的には最大400個のボタンを並べたいと
> 考えていたものですから・・・

400個!! ボタンの数が、キーボード上のキーの数より多いのですか?
VBの制限(最大 254 個まで)を超えていますね。

確かに、コントロール配列を使えば、配置できるコントロール数は増えますが、
そもそも、その画面設計を見直された方が良いかと思いますよ。リソースを使いすぎです。


たとえば、一般的なツールバーを見てみますと、各ボタンは独立しておらず、
ツールバー全体で一つのコントロールになっていますよね。
あるいは Excel では、入力可能なセルがたくさん並んでいますが、あれは
TextBox を並べているわけではなく、セル全体が一つのウィンドウになっていますよね。

このような設計にすれば、必要なリソースを減らせますし、コントロール数の上限に
ひっかかる事も無いと思います。


今回の場合、400個のボタンを並べるのではなく、ツールバーを利用してみるとか、
ボタン型セルを配置可能なサードパーティ製の表計算/グリッド系コンポーネントを利用するとか、
そもそも画面設計を見直してみるなどして、コントロールの数を減らした方が良いかと。


> これはもうクラス化をあきらめるしかないでしょうか・・・
クラスにすることで、どんな処理をされたいのかが見えないので、明確な回答は書けませんが、
クラスの替わりに UserControl を利用されては如何でしょう。

複数のクラスのイベントを
  Private WithEvents YourClass1() As YourClass
  Private Sub YourClass1_YourEvent(ByVal Index As Integer)
  End Sub
のようにして利用する事はできませんが、UserControlならば、コントロール配列にする事で、
  Private Sub YourControl1_YourEvent(ByVal Index As Integer)
  End Sub
のようにして、複数オブジェクトのイベントを取りまとめることができますよね。