当前位置:编程学习 > C#/ASP.NET >>

关于button可见性的问题

我有两个panel,大panel1,小panel2,panel2在panel1里面,然后panel2里面还有一个picturebox和一个button,像这样

情况是:我想在鼠标进入panel1、panel2、pieturebox、button的时候,都让panel1背景变为红色,同时button可见,默认的button不可见
在panel1、panel2、pieturebox、button的MouseEnter事件里都让panel1变为红色,在MouseLeave事件里判断鼠标是否在其他的控件里面,如果都不在则让panel1变为其他颜色,否则还是红色
然后在panel1的backgroundcolorchanged事件里面判断颜色是否为红色,如果是红色,就让button可见

当鼠标进入button的时候,系统会认为鼠标离开了panel1、panel2、picturebox,然后panel1的颜色变为了其他颜色,button被置为不可见了(事实上颜色还是红色,但是button已经不可见了,感觉应该是颜色延迟的问题),不可见的button又响应不了MouseEnter函数。。。我想让鼠标进入button的时候button仍然可见 这个问题怎么解决??? button panel 可见性 鼠标 --------------------编程问答-------------------- 哈哈,楼主你这个方法好纠结啊,其实可以简化的 --------------------编程问答--------------------

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        button1.Visible = false;

        panel1.MouseEnter += TargetMouseEnter;
        panel2.MouseEnter += TargetMouseEnter;
        pictureBox1.MouseEnter += TargetMouseEnter;
        button1.MouseEnter += new EventHandler(button1_MouseEnter);

        panel1.MouseLeave += TargetMouseLeave;
    }

    private void TargetMouseLeave(object sender, EventArgs e)
    {
        SetControlState(this.BackColor, false);
    }

    private void TargetMouseEnter(object sender, EventArgs e)
    {
        SetControlState(Color.Red, true);
    }

    private void button1_MouseEnter(object sender, EventArgs e)
    {
        SetControlState(this.BackColor, true);
    }

    private void SetControlState(Color bgColor, bool visible)
    {
        panel1.BackColor = bgColor;
        button1.Visible = visible;
    }
}
--------------------编程问答--------------------
引用 2 楼 hwenycocodq520 的回复:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        button1.Visible = false;

        panel1.MouseEnter += TargetMouseEnter;
        panel2.MouseEnter += TargetMouseEnter;
        pictureBox1.MouseEnter += TargetMouseEnter;
        button1.MouseEnter += new EventHandler(button1_MouseEnter);

        panel1.MouseLeave += TargetMouseLeave;
    }

    private void TargetMouseLeave(object sender, EventArgs e)
    {
        SetControlState(this.BackColor, false);
    }

    private void TargetMouseEnter(object sender, EventArgs e)
    {
        SetControlState(Color.Red, true);
    }

    private void button1_MouseEnter(object sender, EventArgs e)
    {
        SetControlState(this.BackColor, true);
    }

    private void SetControlState(Color bgColor, bool visible)
    {
        panel1.BackColor = bgColor;
        button1.Visible = visible;
    }
}
学习了 --------------------编程问答-------------------- 就个逻辑判断问题吧,enable默认为false,鼠标进入panel区就true,背景什么的都可以自己写的 --------------------编程问答-------------------- 如果事件响应不了那个button是否可见  我建议你单独写一个方法  把你刚刚的情况考虑进去  事件里面直接调用方法 试试看   --------------------编程问答-------------------- 我在panel1、panel2、picturebox、button的MouseEnter事件里面都将panel1的背景设置为红色,MouseLeave事件里面判断鼠标是否都不在这四个控件里面,如果在其中任何一个里面,就将panel1的背景还设置为红色,如果不在任何一个控件里面,就像panel1的背景设置为其他颜色。panel1的backcolorchanged事件里面判断背景是否为红色,是红色的时候就让button都可见,不是红色的时候就让button不可见。可是现在的问题是 当鼠标进入button的时候,系统会认为鼠标已经离开了panel1、panel2、picturebox,这时panel1的背景变为其他颜色的同时button被设置为不可见了,然后虽然鼠标进入了button,但是不可见的button响应不了MouseEnter事件。。。这个是有点儿矛盾  楼上的方法我都试了 还是不行。。。  --------------------编程问答--------------------
引用 6 楼 liyuye 的回复:
我在panel1、panel2、picturebox、button的MouseEnter事件里面都将panel1的背景设置为红色,MouseLeave事件里面判断鼠标是否都不在这四个控件里面,如果在其中任何一个里面,就将panel1的背景还设置为红色,如果不在任何一个控件里面,就像panel1的背景设置为其他颜色。panel1的backcolorchanged事件里面判断背景是否为红色,是红色的时候就让button都可见,不是红色的时候就让button不可见。可是现在的问题是 当鼠标进入button的时候,系统会认为鼠标已经离开了panel1、panel2、picturebox,这时panel1的背景变为其他颜色的同时button被设置为不可见了,然后虽然鼠标进入了button,但是不可见的button响应不了MouseEnter事件。。。这个是有点儿矛盾  楼上的方法我都试了 还是不行。。。 




我怎么试的时候可以实现你的需求了呢 --------------------编程问答-------------------- 就是Visible 得属性值呗
--------------------编程问答-------------------- 控制按钮的属性值是否可见问题,按要求默认给控件visble=false
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,