プロが教えるわが家の防犯対策術!

お世話になります。
ご回答宜しくお願いします。

現在VBでDLLプログラムを開発しております。

以下簡単な仕様です。
DLLで自作のプロパティ( SelectedFlg )と、
SelectedFlgが変更された時に発生するイベントを追加しました。
親システムからVBのDLLを呼び出し、親システムがSelectedFlgの値を変更すると
DLL内でイベントを感知し、処理をするというような感じです。

例えば、親システムへDLLをパネルとして2つ( A , B )貼り付け
Aをクリックすると、AのSelectedFlgをTrueに、BのSelectedFlgをFalseにして
Trueの方はBackColorを赤、Falseの方はBackColorを白
のような形にしたいと考えてます。

しかし、実行してみると
BackColorが反映されるのは、初期値を設定した時の1度のみでした。
その後クリックしても、BackColorが変化することはありません。

どこか間違いや思い違いがあるんでしょうか。

以下コードになります。

 ・・・OriginalControlクラス・・・

Public Class OriginalControl
  Public Event SelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs)

  Protected Sub OnSelectedValueChanged(ByVal e As EventArgs)
    RaiseEvent SelectedValueChanged(Me, e)
  End Sub

  Public Property SelectedFlg() As Boolean
    Get
      Return m_SelectedFlg
    End Get

    Set(ByVal value As Boolean)
      m_SelectedFlg = value
      Me.OnSelectedValueChanged(New EventArgs)
    End Set

  End Property
  Private m_SelectedFlg As Boolean

End Class


・・・Panel・・・ OriginalControlクラスを継承したControl
( 省略 )

    Private Sub Panel_SelectedValueChanged(ByVal sender As System.Object,
                              ByVal e As System.EventArgs)
                              Handles MyBase.SelectedValueChanged

      If Me.SelectedFlg = True Then
        setBackColor( Color.Red )
      Else
        setBackColor( Color.White )
      End If
    End Sub

A 回答 (1件)

質問文に記載されたコード自体は、


とくに問題等見当たらないように思われます。
# イベント名がChangedなのに値の変化が無くてもイベント発生するとか、細かい点はさておき。

掲載されていない部分のコードで、
・親側がちゃんとSelectedFlgを意図する値に設定しているか
・setBackColor()の中で、パラメータに渡された色を正しくBackColorに設定しているか
などを確認してみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

自己解決致しました。

原因は、イベントを返す処理のようなものが不足していたためでした。

親システムでDLLをクリックしたときに、MouseClickイベントをDLLに渡します。
その後、DLLからMouseClickイベントの返却を行わないと、
親システム上でMouseClickイベントが認識されずMouseClickの処理が無視されておりました。


Private Sub Me_Click(ByVal sender As System.Object,
               ByVal e As System.EventArgs) Handles Me.Click
  OnClick(e) 'イベントを返却する処理

End Sub


大変基礎的なところでした。
お騒がせ致しました。

お礼日時:2013/06/17 16:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!