- 題名: チェックボックスで表示切り換えられるパネルを作りたい
- 日時: 2009/09/04 21:36:10
- ID: 25356
- この記事の返信元: - (なし)
 
- この記事への返信: - [25357] Re[1]: チェックボックスで表示切り換えられるパネルを作りたい2009/09/04 22:07:39
 
- ツリーを表示
お疲れ様です
以下のコードで試してみてください
 
' CheckBox1とPanel1をFormに配置し、Panel1の中にTextBoxを配置してください
Public Class Form7
 
    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
        Me.Panel1.DataBindings.Add("Visible", Me.CheckBox1, "Checked")
        MyBase.OnLoad(e)
    End Sub
 
    Private Sub Panel1_MouseLeave(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Panel1.MouseLeave
        Dim p As Point = Me.Panel1.PointToClient(Cursor.Position)
        If Me.Panel1.ClientRectangle.Contains(p) = False Then
            Me.CheckBox1.Checked = False
        End If
    End Sub
 
    Private Sub Panel1_Leave(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Panel1.Leave
        Me.CheckBox1.Checked = False
    End Sub
 
End Class
分類:[.NET]
こんにちは。 チェックボックスを利用してポップアップするパネルのような ユーザーインターフェースを作りたいと思っています。 そこで、チェックボックスとパネルの表示/非表示の制御が どうも、うまくいきません。 教えてください。 使い勝手としては [1] チェックボックス(というかボタン型のチェックボックス) を切り替えチェックON/OFFする事でパネルが表示/非表示する。 [2] パネルがフォーカスを失うと非表示になり チェックボックスもチェックOFFになる。 これだけを実現したいのですが、なぜかうまくいきません。 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load CheckBox1.AutoCheck = False CheckBox1.Checked = False Panel1.Visible = False End Sub Private Sub Panel1_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Panel1.Leave CheckBox1.Checked = False End Sub Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged If CheckBox1.Checked Then Panel1.Visible = True Panel1.Focus() Else Panel1.Visible = False End If End Sub Private Sub CheckBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.Click CheckBox1.Checked = Not CheckBox1.Checked End Sub このようにすると、うまくいくかと思ったのですが [2]はOKですが [1]を行うと、チェックを押そうとしているときに パネルがフォーカスを失って非表示になってしまって チェックを解除することができません。 CheckBox1.AutoCheck=Falseにしているのは 制御しやすそうだから試していただけで =Trueでも、動けばいいのですが うまく書けませんでした。 ご存じの方、よろしくお願いします。 なんでこんな簡単な制御ができないのかな.... 定型的なやり方があるのでしょうか? leaveイベントなんて、使わないのだろうか。