リストボックスの項目をイメージに表示するには?

解決


おめが  2008-02-26 20:50:47  No: 139068

オプション1とオプション2があります。
オプション1の項目とオプション2の項目をリスト1に表示させるまでは
出来たのですがリスト1内の項目をクリックするとイメージ1に
表示させたいのですがなかなかうまくいきません。

例えば、オプション2をクリックしリスト1に表示をしてリスト1に表示した
項目をクリックしイメージ1に表示をするとやりたいのです

先輩方アドバイスをいただけないでしょうか?
どうか、よろしくお願いいたします。


おめが  2008-02-26 20:55:08  No: 139069

こんにちは
早速質問なのですが
フォーム1にフレーム1とリスト1とイメージ1がありフレーム1内に
オプション1とオプション2があります。
オプション1の項目とオプション2の項目をリスト1に表示させるまでは
出来たのですがリスト1内の項目をクリックするとイメージ1に
表示させたいのですがなかなかうまくいきません。

例えば、オプション2をクリックしリスト1に表示をしてリスト1に表示した
項目をクリックしイメージ1に表示をするとやりたいのです

先輩方アドバイスをいただけないでしょうか?
どうか、よろしくお願いいたします。

※上の投稿はミスです。こちらが正規の質問です。


魔界の仮面弁士  2008-02-26 22:10:30  No: 139070

内容からして VB6 か…それとも VBA 系でしょうか?
開発環境も明記するようにしてください。回答が大きく変わってしまいます。

> フォーム1にフレーム1とリスト1とイメージ1がありフレーム1内に
> オプション1とオプション2があります。

親子関係でいうと、こうなるのかな。

[Form1]
├[Frame1]
│├[Option1]
│└[Option2]
├[List1]
└[Image1]

> オプション1の項目とオプション2の項目をリスト1に表示させるまでは
ListBox や ComboBox であれば「項目」がありますが、
OptionButton の「項目」と言うのが、何のことか読み取れませんでした。

何か一連のデータ(たとえば学級名簿)があって、
それを List1 に表示させるのだが、その内容を
Option1/Option2 で絞り込む(たとえば男子/女子)感じでしょうか…?

> 出来たのですがリスト1内の項目をクリックするとイメージ1に
> 表示させたいのですがなかなかうまくいきません。
逆に言うと、Option1/Option2 の制御は何の問題も無いのですね?
わからないのは、List1 と Image1 の間の連携方法だけである…と。

何にしても、現時点でどのようなコードを書いているのかを
示してもらわないと、「修正案」を出すことができません。

(1) どのイベントに、処理を記述していますか?
(2) 選択された項目を取得する事はできていますか?
(3) その項目に相当するイメージを得ることはできていますか?
(4) そのイメージを Image1 に割り当てるために、どのようなコードを書いていますか?


おめが  2008-02-26 22:50:04  No: 139071

魔界の仮面弁士様アドバイスありがとう御座います。
すいません、今後明記いたします。

windows xp pro VB6

>親子関係でいうと、こうなるのかな。
>[Form1]
>├[Frame1]
>│├[Option1]
>│└[Option2]
>├[List1]
>└[Image1]
その通りです。

>ListBox や ComboBox であれば「項目」がありますが、
>OptionButton の「項目」と言うのが、何のことか読み取れませんでした。
すいません、説明不足で・・・
下のイベントを見てもらうとわかるんですが、名前ですね^^;

>何か一連のデータ(たとえば学級名簿)があって、
>それを List1 に表示させるのだが、その内容を
>Option1/Option2 で絞り込む(たとえば男子/女子)感じでしょうか…?
その通りです。

>逆に言うと、Option1/Option2 の制御は何の問題も無いのですね?
>わからないのは、List1 と Image1 の間の連携方法だけである…と。
その通りです。

>(1) どのイベントに、処理を記述していますか?
-------------------------------------
Private Sub List1_Click()

End Sub
-------------------------------------
Private Sub Option1_Click()
List1.Clear
With List1
  .AddItem "佐藤"
  .AddItem "加藤"
  .AddItem "山田"
  .AddItem "斉藤"
  .AddItem "吉田"
  以下名前が続く・・・
End With
End Sub
-------------------------------------
Private Sub Option2_Click()
List1.Clear
With List1
  .AddItem "森"
  .AddItem "草間"
  .AddItem "沼尻"
  .AddItem "新井"
  .AddItem "新垣"
  以下名前が続く・・・
End With
End Sub
-------------------------------------
>(2) 選択された項目を取得する事はできていますか?
オプション1及びオプション2はちゃんと制御されてます。
オプション1を選択すると男の名前がリスト1へ反映されます。
オプション2を選択すると女の名前がリスト1へ反映されます。

>(3) その項目に相当するイメージを得ることはできていますか?
イメージはBMPの顔写真です。

>(4) そのイメージを Image1 に割り当てるために、どのようなコードを書いていますか?
If分を使う事は分かっているのですが、記述方法がわからないのです。

最終的には、オプション1(男)オプション2(女)どちらかを選ぶと
リスト1に名前が表示され、名前をクリックするとイメージ1へ顔写真を
表示と言う形になります。


魔界の仮面弁士  2008-02-26 23:17:48  No: 139072

>> (1) どのイベントに、処理を記述していますか?
ListBox の Click イベントを使っている(使おうとしている)のですね。
そこまでは問題ないと思います。

>> (2) 選択された項目を取得する事はできていますか?
> オプション1及びオプション2はちゃんと制御されてます。
> オプション1を選択すると男の名前がリスト1へ反映されます。
> オプション2を選択すると女の名前がリスト1へ反映されます。

いえ、ここでお聞きしたのは、OptionButton の事ではなく、
ListBox 内に配置された項目のうち、どの項目が選択されているのかを
把握できていますか? という意味です。

選択された項目を知るには、ListBox の ListIndex プロパティを使います。
ただし、複数選択(MultiSelect プロパティ)を有効にしている場合には、
Selected プロパティを利用してください。

>> (3) その項目に相当するイメージを得ることはできていますか?
> イメージはBMPの顔写真です。
それを取得できていますか、という意図の質問です。

たとえば、Option2 によってリストが更新されたあと、
ユーザによって「沼尻」が選ばれた場合に、その"沼尻" にあたる
画像情報(BMP ファイルのパスなど)を得ることはできていますか?

また、画像情報はそもそもどのようにして管理されているのでしょうか?

>>(4) そのイメージを Image1 に割り当てるために、どのようなコードを書いていますか?
> If分を使う事は分かっているのですが、記述方法がわからないのです。
If 文…ですか? それを、何の判定に使いたいのでしょうか?
何を判定したいのかを書いていただければ、使い方を例示しますよ。


おめが  2008-02-26 23:37:58  No: 139073

魔界の仮面弁士様アドバイスありがとう御座います。
ほんとうに勉強不足ですいません

If分の使い道ですが、オプション1を選択後、佐藤を選んだ時に
顔写真を出力したいのです。

自分なりにIf分を使って記述したのですがエラーが出てしまいます。

Private Sub List1_Click()
If List1.Text = "佐藤" Then
   image1 = c:\kanri\佐藤.bmp
Else List1.Text = "加藤" Then
   image1 = c:\kanri\加藤.bmp
End If
End Sub

このIf分さえちゃんと記述出来れば出来そうな気がするのですが・・・
アドバイスをいただけないでしょうか?
どうか、よろしくお願いします。


魔界の仮面弁士  2008-02-26 23:51:13  No: 139074

なるほど。手順(2) を、「Text プロパティ」で行うようにしたのですね。

そこまでは良いのですが、手順(3)と手順(4)を一度にやろうとして
ハマっているようです。まずは、ひとつずつ解決していきましょう。

> 自分なりにIf分を使って記述したのですがエラーが出てしまいます。
そのような書き方をしていたら、項目が1000個あったときに、
If 文も1000個必要になってしまいますよ。

ですから、この段階での If 文の出番はありません。

If 文を使うのでは無く、「選択された名前」(佐藤とか加藤とか砂糖とか加糖とか)をもとに、
  Dim bmpPath As String
  bmpPath = "c:\kanri\" & List1.Text & ".bmp"
などとして、対応する画像情報を得ましょう。ここまでが手順(3)です。

続いて手順(4)。
画像のパスから、Image1 に画像をロードするには、
  Set Image1.Picture = LoadPicture(bmpPath)
のように書きます。これで完了です。If 文の出番はありませんでした。

ただし LoadPicture する際には、対応するファイルが無ければ
エラーになりますから、もしも If 文を使うとすれば、
画像を読み込めるかどうかのチェックのために、
このタイミングで使う事になるでしょう。


おめが  2008-02-27 00:11:58  No: 139075

魔界の仮面弁士様
アドバイスありがとう御座います。

アドバイス通りやってみました
すごいです・・・
If文でやってたら日が暮れますね^^;
bmpの画像が800枚近くもあるので・・・
今までの苦労は何だったんだ・・・

魔界の仮面弁士様、親切かつ丁寧なアドバイスありがとう御座いました。
無事に動作いたしましたのでご報告いたします。

感激です。本当に本当にありがとう御座いました。


おめが  2008-02-27 00:13:04  No: 139076

解決のチェックを忘れました。


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




  


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