- PR -

イベントが2度繰り返し起きる

1
投稿者投稿内容
へぽ
会議室デビュー日: 2006/09/19
投稿数: 2
投稿日時: 2006-09-19 11:59
Visual Studio 2005 で開発を行っているものです。

フォームにはパネル(pnlColor1)があり、その中にラベルが20個あります。
パネル(pnlColor1)内のコントロール(ラベル)を取得しイベントハンドラを追加しました。
ラベルをクリックをしたらカラーパレットを起動させるようにします。

下記のコードで、実現させとうと思ったのですが、ラベルをクリックすると
Private Sub setColor が二回連続で必ず呼び出され、カラーパレットが二回連続で出現します。
どうしても原因がわかりません。
どうか助言をよろしくお願いします。


Private Sub frmGraphSet_Load(ByVal sender As System.Object, ByVal e As_ System.EventArgs) Handles MyBase.Load
Dim i As Integer
Dim setColorNo As Integer
setColorNo = Me.pnlColor1.Controls.Count  'パネル内のコントロール取得
For i = 0 To setColorNo - 1
'イベントハンドラに追加
AddHandler Me.pnlColor1.Controls(i).MouseClick, AddressOf setColor
Next
End Sub

Private Sub setColor(ByVal sender As Object, ByVal e As_ System.Windows.Forms.MouseEventArgs)
If Windows.Forms.MouseButtons.Left Then
Dim ColorDialog1 As New ColorDialog
'カラーパレットを表示し、ダイアログのOKボタンが押されたら、ラベルのバックカラーを変更
If (ColorDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
sender.BackColor = ColorDialog1.Color
End If
End If
End Sub
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-19 12:36
引用:

へぽさんの書き込み (2006-09-19 11:59) より:
AddHandler Me.pnlColor1.Controls(i).MouseClick, AddressOf setColor


MouseClickなんてハンドラあったっけ?
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-09-19 13:09
引用:

MouseClickなんてハンドラあったっけ?


Control.MouseClickですぅ。

>へぼさん
正常に動作しました。
コード:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For i As Integer = 0 To Me.Panel1.Controls.Count - 1
            AddHandler Me.Panel1.Controls(i).MouseClick, AddressOf Label1_MouseClick
        Next
    End Sub
    Private Sub Label1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Console.WriteLine("MouseClick")
        Dim x As New ColorDialog
        x.ShowDialog()
        x.Dispose()
    End Sub

R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-09-19 13:22
引用:

へぽさんの書き込み (2006-09-19 11:59) より:

Private Sub setColor が二回連続で必ず呼び出され、カラーパレットが二回連続で出現します。
どうしても原因がわかりません。


デザイナ側でもイベント登録しているということはないですか?

_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-19 13:30
ミニマム コードを組んで問題の切り分けをすべきだと思います。
私の方でも、まどかさんと同じく問題なく動作することを確認しました。

引用:

R・田中一郎さんの書き込み (2006-09-19 13:22) より:

デザイナ側でもイベント登録しているということはないですか?


それであれば、Handles 句が追加されます。
すでにプロシージャが存在する場合は、Label1_MouseClick_1 のようなプロシージャが生成されます。

(あまり考えられませんが) このあたりが原因であれば、ブレーク ポイントを設定して、
デバッグすればすぐ判明するところでしょうね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
へぽ
会議室デビュー日: 2006/09/19
投稿数: 2
投稿日時: 2006-09-19 13:51
皆様、ご教授ありがとうございます。

まどか様のコードを元に
Private Sub Label1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
Console.WriteLine("MouseClick")
Dim x As New ColorDialog
If (x.ShowDialog() = Windows.Forms.DialogResult.OK) Then
sender.BackColor = x.Color
End If
x.Dispose()
End Sub

としたところ、問題なく動きました。

ただ、実際のプログラムに組み込んだところ、やはり症状は改善されませんでした。
問題はこのコードではなく、他の場所にあるようです。
じゃんぬねっと様の助言のとおり、ミニマムコードを組んでこれから原因を探そうと思います。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-09-19 14:21
引用:

>へぼさん


「へぽさん」が「へぼさん」になってしまいました。
大変失礼いたしました。m(_ _)m

#ありゃっと思い、メモ帳に貼り付けて72ポイントにしたら。。。
1

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