- PR -

クリックされたボタンの判断

投稿者投稿内容
はる
会議室デビュー日: 2008/06/21
投稿数: 13
投稿日時: 2008-06-21 14:59
こんにちは。

VB.NET2005とAccess2003を使用して簡単なソフトを製作しています。

AccessのテーブルにはID、名前、画像、説明を入れています。
VBへ呼び出し、名前・画像・説明文を連結させて表示させています。


現在、Button1をクリックすると次のレコードに移るようになっています。
(順番はレコードのID(オートナンバー)順です。)

レコードを順番に表示していくのではなく、レコードと同じだけのボタンを配置し、
ボタンに対応したレコードを表示できるようにしたいと思っています。
例)”あ”というボタンをクリック→”あ”の画像、説明文を表示

課題は山積みなのですが・・・まず、
複数あるボタンのうち、どのボタンがクリックされたのかを判断する方法
についてご教授いただきたいと思っています。
どなたか、分かる方いましたらよろしくお願いします。
VBもAccessも初心者なため、説明が足らない部分もあると思いますので、ありましたらご指摘お願いします。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2008-06-21 15:06
Clickイベントのsenderが、押されたボタンのインスタンスですよ
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2008-06-21 15:44
こんにちは。

DOBON.NET さんの コントロールを実行時に作成する実行時にイベントハンドラを追加するVB.NETでキャストを行う が参考になると思います。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-21 16:20
ども。
.NET開発ですよね、であればCommandNameを使うのはどうでしょうか。
求めているのと違う場合は、ごめんなさい。

<asp:Button 〜省略〜 onCommand="Button1_click" CommandName="Buttion1" />

と組み込むと、サーバーサイドの方でコマンド名を取得できます。

protected void Button1_click(object sender, CommandEventArgs event)
{
Session["ButtonName"] = event.CommandName.ToString();
}
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-06-21 22:54
引用:

Liquid_Forceさんの書き込み (2008-06-21 16:20) より:

ども。
.NET開発ですよね、であればCommandNameを使うのはどうでしょうか。
求めているのと違う場合は、ごめんなさい。

<asp:Button 〜省略〜 onCommand="Button1_click" CommandName="Buttion1" />

と組み込むと、サーバーサイドの方でコマンド名を取得できます。

protected void Button1_click(object sender, CommandEventArgs event)
{
Session["ButtonName"] = event.CommandName.ToString();
}


質問者さんの質問は Web アプリケーション開発ではないと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
はる
会議室デビュー日: 2008/06/21
投稿数: 13
投稿日時: 2008-06-22 00:34
遅くなりました・・・。さっそくご返答いただきありがとうございます!

Kazukiさん
こんばんは。
Clickイベントのsenderが、押されたボタンのインスタンスですよ

ということは
Private Sub Button1_Click(・・省略・・) Handles Button1.Click,Button2.Click,・・・

というように、Handles以下に配置したボタンまでを書き、さらに処理を書いていくということでしょうか?


*****
ueさん

こんばんは。
DOBON.NET さんにはたくさんサンプルもあり、参考にしていきたいと思います。
ありがとうございます。
今、提示していただいたページや近そうなものを見ています!
*****
Liquid_Forceさん
こんばんは。
返答ありがとうございました。しかしながら、じゃんぬねっとさんのご指摘通り、
今回Webアプリの開発ではありません。
説明不足ですみませんでした。

****
じゃんぬねっとさん
こんばんは。
ご指摘ありがとうございました。
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-06-22 13:43
もちろんこれでもよいのですが、
ご質問を読む限りレコード数分のボタンが必要なのですよね。
ということはボタンの数も可変ということだと思います。
そうであれば AddHandler を使って動的に追加する形になると思います。

ところで気になったのですが、ボタンをレコード数分、追加するような形だと、
大量のレコードのときにリソースをたくさん使いますし、パフォーマンスにも影響が出そうです。
DataGridView のようなグリッド系のコントロールを使う方がよい気がします。
はる
会議室デビュー日: 2008/06/21
投稿数: 13
投稿日時: 2008-06-22 23:39
テッテさん、こんばんは。
ご返答ありがとうございます!

レコードは50音・アルファベット・数字と入れるものは決めているため、
基本的にレコードの追加・削除はないものとしています。
説明不足ですみませんせした。

前の段階では、データベースがイマイチ分からなかったため、
例)”あ”というボタンをクリック→”あ”の画像
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
PictureBox1.Visible = True
PictureBox1.Image = My.Resources.あ
Label1.Text = "あ"

End Sub

と書いていました(これを50音分)。やりたいことと一致してはいるのですが、画像を
リソースに入れていたため、実行だけでもとても時間がかかっていました。
そこで、テーブルを使用しようと思ったのです。


教えていただいたページや他のサイトさんを見て、ボタンの数が可変しない場合でもAddHandlerを使って表示せることができないか考えが浮びました・・・

Dim kana(50) as Button

’Form1.Loadで
Dim i as Integer
kana(0) = Button1
kana(1) = Button2
:
:

For i 0 To 50
AddHandler kana(i).click, AddressOf MyClick
Next
***
Private Sub MyClick(ByVal sender As System.Object, ByVal e As System.EventArgs)

'レコードを呼出て、表示させる処理

End Sub

この場合、インデックスを使用してButton(i)とレコードを対応させていきたいと考えているのですが・・・・・可能なのでしょうか?(レコードを変数に入れる等)

イメージだけですが、とりあえず自分でも書いてみたいと思います。
課題の期限が近いため、同時進行で質問させていただきました。
DataGridViewについても、使ったことがないので調べてみます!

長文失礼しました。

[ メッセージ編集済み 編集者: はる 編集日時 2008-06-22 23:44 ]

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