イベント発生時にコントロール名を取得するには?

解決


ぷく  2005-01-12 20:23:49  No: 118787

いつもお世話になっております。

環境:Windows2000  VB6.0SP5

イメージコントロールClick等のイベント発生時に、
どのコントロールのイベントなのか、コントロール名を取得することは
可能でしょうか。
調べておりますが、どうしても解りません。
どなたかご指導いただけませんでしょうか。


じゃんぬねっと  URL  2005-01-12 21:39:25  No: 118788

こんにちは、じゃんぬねっと です。

> イメージコントロールClick等のイベント発生時に、
> どのコントロールのイベントなのか

ん? この文章が答えなんじゃないのですか?
"イメージコントロール"で、Click() イベント発生したのだから、
"イメージコントロール"が正解ですよね。

# イベントは起きるもので、起こすものではありませんから


特攻隊長まるるう  2005-01-12 21:57:28  No: 118789

>ん? この文章が答えなんじゃないのですか?
>"イメージコントロール"で、Click() イベント発生したのだから、
>"イメージコントロール"が正解ですよね。
もっと具体的な Image1 とかいう名前かコントロールを参照
する変数を得る汎用的なプロパティとか関数を求めてるのだとは
思うけど…
    Me.ActiveControl.Name
とか?

関数名が分かれば…ってのも過去ログで…イマイチ…う〜ん。
自分でベタ書きしないで…っとなるとあったような無かったような…


ぷく  2005-01-12 22:25:14  No: 118790

説明が悪くて本当に申し訳ありません。

たとえば以下のような場合、
Name以外の取得方法があるのだろうかと思いまして。

Private Sub Image1_Click()
    sName = Image1.Name
End Sub

ActiveControlは
フォーカスを持つコントロールには使用できるようなのですが...。


.net初心者  2005-01-12 23:47:12  No: 118791

VB6はVB.NETのようにデリゲートを実装することができない仕様なので
Image1_ClickのイベントはImage1からしか発生しない
だから、もとのオブジェクト名をイベントの引数に渡す必要がない
という思想のもとに作られているんじゃないでしょうか。

ということでImage1_ClickないでわざわざImage1.Nameとするのは
2度手間なだけのように思います。


ぷく  2005-01-13 00:00:53  No: 118792

じゃんぬねっと様、特攻隊長まるるう様、.net初心者様
御指導感謝いたします。

仰るとおりNameを使用するのは二度手間なのですが、
NameやTagを他の関数の引数として使用したいと考えておりまして。

やはり
フォームのMe.NameやMe.Tagのような便利なものは
無いのでしょうか。


.net初心者  2005-01-13 01:13:07  No: 118793

というより何故Image1.Nameでは不都合なのでしょうか?
そこが理解できないのでもう少しご説明願います。


ぷく  2005-01-13 01:36:57  No: 118794

.net初心者様、御返事有難う御座います。

Imageコントロールを20個程使用しておりまして、
イベント発生時の処理コードを
簡単に出来ないものだろうかと考えました。

コントロール名を変更した場合も、
フォームの「Me」のようなものがあれば、
楽だろうと思いまして、色々調べてみたのですが...。

説明不足で申し訳ありません。


ひろ  2005-01-13 02:23:17  No: 118795

コントロール配列にすることを検討してみては?


ぷく  2005-01-13 02:40:37  No: 118796

ひろ様、有難う御座います。
最初はコントロール配列にしておりましたが、
個別名の方が判りやすいと思い、やめたのです。

配列に戻したほうが賢明でしょうか。


特攻隊長まるるう  2005-01-13 03:00:00  No: 118797

[VB.NET]ではコントロール配列がサポートされてませんので
コントロールの参照を格納した配列で代用するサンプルを
載せましたが…。[VB6.0]に読み代えるのは難しくないと
思います。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200412/04120067.txt


40859  2005-01-13 05:40:20  No: 118798

> 配列に戻したほうが賢明でしょうか。
コントロール配列を使った方が多分簡単。

もし、コントロール配列を使わずに処理をまとめるなら、
WithEvents を使って処理できます。
http://www.gj.il24.net/~nakasima/vb/tech/excontrol/index.htm

> [VB6.0]に読み代えるのは難しくないと思います。

そうかなぁ…。VB6 と VB.NET 両方の知識がある程度無いと、難しくないですか?

提示先のコードだと、

> Handles ComboBox1.SelectedIndexChanged, _
>         ComboBox3.SelectedIndexChanged, _
>         ComboBox5.SelectedIndexChanged

の部分や、

> AddHandler comb(n).Click, AddressOf ComboBox_SelectedIndexChanged

などを VB6 化するのは、それなりの知識が無いと辛いような。


ぷく  2005-01-13 20:06:10  No: 118799

40859様、特攻隊長まるるう様、アドバイス感謝いたします。
大変勉強になりました。
やはり配列を考えてみようと思います。 

御時間割いて下さり、有難う御座いました。


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




  


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