senderによる条件分岐

タグの編集
投稿者 ラジオペンチ  (社会人) 投稿日時 2008/10/29 20:32:43
最初のフォームからボタンを押して、次のフォームを呼ぶ際に、最初のフォームで押されたボタンによって
次のフォームの処理を変えたいのですがsenderをどのように処理すればよいのかわかりません。
例えば1ボタンからきたら、フォームタイトルを"更新"、2ボタンからきたら"削除"などをおこないたいのです。
お恥ずかしい内容で申し訳ありませんが、ご返答よろしくお願いします。
投稿者 うたひこ  (社会人) 投稿日時 2008/10/29 21:17:34
こんにちは。

■挨拶
■どのバージョンか

を書きましょう。


vb2005ならば

If ReferenceEquals(sender,Button1) Then
 ' 更新 
ElseIf ReferenceEquals(sender,Button2) Then
 ’削除
End If


ReferenceEqualsは、参照先が同一のものか判定します。

そのほかにはコントロールのNameプロパティやTagプロパティを利用するのも
初心者の方にはわかりやすいと思いますが、
この場合は型のキャストが必要になりますので、
めんどろっこしくてしょーがないです。
投稿者 (削除されました)  () 投稿日時 2008/10/29 22:10:45
(削除されました)
投稿者 ラジオペンチ  (社会人) 投稿日時 2008/10/29 22:18:44
うたひこ様返信ありがとうございます。挨拶とバージョンを書き忘れていました。
バージョンは2008です。6.0の時に比べて聞き方がだいぶ違いませんか?もっとシンプルだった気がしますが・・。
投稿者 うたひこ  (社会人) 投稿日時 2008/10/29 23:13:36
>6.0の時に比べて聞き方がだいぶ違いませんか?もっとシンプルだった気がしますが・・。
vb6.0のことはほとんど何もわかりませんので、
後のことは他の方にお任せします。

また、vb6.0の、どういったコードと比較してそのようにおっしゃっているのかわからないので
調べようもありません。
投稿者   (社会人) 投稿日時 2008/10/30 01:58:38
>例えば1ボタンからきたら、フォームタイトルを"更新"、2ボタンからきたら"削除"などをおこないたいのです。

ここから判断するに、senderはあまり関係ない気がする。
コンストラクタやShowDialogメソッドをオーバーライドしてパラメタ持たすようにしたほうがいいかな。

キーワードはいくつか入れてるから検索してみて。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2008/10/30 01:59:42
sender による判定であれば、このように書きます。
If sender Is Button1 Then


下記の『■リスト12』をご覧ください。
http://homepage1.nifty.com/rucio/main/dotnet/Samples151/Sample177If.htm

VB2008 という事なので、上記に加え、イベント引数を
「sender As Object」ではなく
「sender As Button」にしておくと便利かも。
投稿者   (社会人) 投稿日時 2008/10/30 02:55:01
あれ、読み違えてる?

1.親フォームにボタンが複数ある
2.それぞれのボタンを押すと、同じ子フォームを表示する
3.ボタンによって、子フォームのタイトルを変える

3のことを聞いてると思ったんだけど。
親フォームのボタンをVB6のコントロール配列として扱いたかったのかな?
投稿者 緋竜  (小学生) 投稿日時 2008/10/30 03:44:19
国語は苦手なんで、「例えば」と書いてある。
フォームを沢山使う方法です。

Option Strict On
'VisualBasic2008(無料版)10/29 
Public Class Form1
    Public Sub New()

        ' この呼び出しは、Windows フォーム デザイナで必要です。 
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。 
        Try
            With Me
                .Text = "Test"
                .BackColor = Color.Black
                .StartPosition = FormStartPosition.CenterScreen
                .FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
                .MaximizeBox = False
                .MinimizeBox = False
                .Width = 500
                .Height = 500
            End With
            With Me.Button1
                .Width = 75
                .Height = 50
                .Left = 50
                .Top = 250
                .Text = "更新"
            End With
            With Me.Button2
                .Width = 75
                .Height = 50
                .Left = 380
                .Top = 250
                .Text = "削除"
            End With
        Catch
            MsgBox("コード入力Miss")
        End Try

    End Sub

    Private Sub Button1_Click_1(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click
        Form2.Show()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button2.Click
        Form3.Show()
    End Sub
End Class

'Buttonコントロールを2個,Form1に入れます 
'プロジェクト(p)をクリックします 
'Windowsフォームを追加します(2個)Form2とForm3 
'Form2とForm3の設定は各Formでやります。(Form1と同様にできます) 

初心者用の粗末品ですが。
投稿者 ラジオペンチ  (社会人) 投稿日時 2008/10/30 18:42:34
緋竜様、n様、魔界の仮面弁士様、うたひこ様返信ありがとうございました。ご協力によりこの件は解決しました。ご協力ありがとうございました。
投稿者   (社会人) 投稿日時 2008/10/30 18:57:31
>ラジオペンチさん

ゴメン。まだ見てたら、誰の回答が役に立ったのかだけ教えて。

たとえば、魔界の仮面弁士さん回答と、俺の最初の回答だと全然違うものになるんだけど。
投稿者 ラジオペンチ  (社会人) 投稿日時 2008/10/30 22:14:58
>n様  こんにちわ。最終的には魔界の仮面弁士のアイデアで解決できました。
また疑問ができたときにはご教授よろしくお願いします。