tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルRadioButton のチェックが移動したときのイベント
記事No6261
投稿日: 2007/09/10(Mon) 13:26
投稿者とみぃ
次のような処理を実現したいのですが・・・
   Form1 上に Frame1 があり、その中に Option1, Option2 があります。
   Option1 がチェックされると何らかの処理( Option1_Click イベント)を行い、
   Option2 がチェックされると何らかの処理( Option2_Click イベント)を行う。


' VB6 コード
Option Explicit
Private Sub Option1_Click()
  Debug.Print "Option1_Click()"
End Sub
Private Sub Option2_Click()
  Debug.Print "Option2_Click()"
End Sub

同じ事を VB2005 で行いたいです。
上のコードを VB2005 のソースコードの自動アップデーテで行うと
次のようなコードが生成されます。

' VB2005 コード
Option Strict Off
Option Explicit On
Friend Class Form1
  Inherits System.Windows.Forms.Form
    'UPGRADE_WARNING: イベント Option1.CheckedChanged は、フォームが初期化されたとき...
    Private Sub Option1_CheckedChanged(ByVal eventSender As System.Object, _
                    ByVal eventArgs As System.EventArgs) Handles Option1.CheckedChanged
      If eventSender.Checked Then
        Debug.Print("Option1_Click()")
      End If
    End Sub
    'UPGRADE_WARNING: イベント Option2.CheckedChanged は、フォームが初期化されたとき...
    Private Sub Option2_CheckedChanged(ByVal eventSender As System.Object, _
                    ByVal eventArgs As System.EventArgs) Handles Option2.CheckedChanged
      If eventSender.Checked Then
        Debug.Print("Option2_Click()")
      End If
  End Sub
End Class

ここで問題となるのは、
Option Strict を On にしたいということです。
On にしてしまうと eventSender.Checked で
コンパイルエラーが発生してしまいます。

かといって、 If 文をとってしまうと、
Option1 から Option2 にチェックを移動させた時に、
両方のイベントプロシージャが発生してしまいます。

どのように解決すればよいですか?

[ツリー表示へ]
タイトルRe: RadioButton のチェックが移動したときのイベント
記事No6262
投稿日: 2007/09/10(Mon) 13:40
投稿者ダンボ
> Option Strict を On にしたいということです。
> On にしてしまうと eventSender.Checked で
> コンパイルエラーが発生してしまいます。

  eventSender.Checked
の部分を
  CType(eventSender, RadioButton).Checked
と書けばOKですよ。

(手書きですので、単純ミスはご容赦)

[ツリー表示へ]
タイトルRe: RadioButton のチェックが移動したときのイベント
記事No6263
投稿日: 2007/09/10(Mon) 13:45
投稿者魔界の仮面弁士
> On にしてしまうと eventSender.Checked で
> コンパイルエラーが発生してしまいます。

===== 案1 =====
Private Sub Options_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) _
  Handles Option1.CheckedChanged, Option2.CheckedChanged

    If Option1.Checked AndAlso Option1 Is sender Then
        Debug.Print("Option1_Click()")
    ElseIf Option2.Checked AndAlso Option2 Is sender Then
        Debug.Print("Option2_Click()")
    End If
End Sub

===== 案2 =====
Private Sub Options_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) _
  Handles Option1.CheckedChanged, Option2.CheckedChanged

    Dim radio As RadioButton = TryCast(sender, RadioButton)
    If radio IsNot Nothing AndAlso radio.Checked Then
        If radio Is Option1 Then
            Debug.Print("Option1_Click()")
        ElseIf radio Is Option2 Then
            Debug.Print("Option2_Click()")
        End If
    End If
End Sub


===== 案3 =====
Private Sub Option1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) _
  Handles Option1.CheckedChanged

    If Option1.Checked Then
        Debug.Print("Option1_Click()")
    End If
End Sub

Private Sub Option2_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) _
  Handles Option2.CheckedChanged

    If Option2.Checked Then
        Debug.Print("Option2_Click()")
    End If
End Sub

[ツリー表示へ]
タイトルRe: RadioButton のチェックが移動したときのイベント
記事No6264
投稿日: 2007/09/10(Mon) 15:34
投稿者とみぃ

Option1 から Option2 にチェックが移った時に
イベントが1つしか走らないのが理想なのですが・・・
(VB6の Click イベントがそうだった)

VB2005では、必ず
Option1 の(チェックが外れたという)イベントと
Option2 の(チェックが付いたという)イベントの
2つが走ってしまうみたいですね・・・
そこから、不要なイベントは
無視させなければいけないのですね・・・

参考にさせて頂きます。
ありがとうございました。

[ツリー表示へ]