0

在我的表格中,我有一个panel带有图片的框。当鼠标悬停在panel应该显示的图片框上时。当鼠标离开时,图片框应该隐藏起来。

一开始我试过

panel1.visible = true;   

panel1.visible = false;

我以为这会做,但它不起作用。然后我尝试了以下方法

namespace Drawing_Program
{
    public partial class Form1 : Form
    {

        PictureBox[] Boxes = new PictureBox[12];

        public Form1()
        {           
            InitializeComponent();
            int i = 0;
            foreach (var pb in Controls.OfType<PictureBox>())
            {
                Boxes[i] = pb;                
                i++;
            }           

        }

        private void panel1_MouseHover(object sender, EventArgs e)
        {
            for (int i = 0; i < Boxes.Length; i++) {
                this.Boxes[i].Visible = true;  // error gives here
            }



        }

        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            for (int i = 0; i < Boxes.Length; i++)
            {
                this.Boxes[i].Visible = false;
            }


        }

但我收到以下错误:

nullreferenceException 未处理:对象引用未设置为对象的实例。

请告诉我出了什么问题或如何正确执行此操作。

4

3 回答 3

3

Form不是PictureBox控件的直接父级。所以我打赌你的Boxes数组是{ null, null, null,... }. 如果panel1是所有PictureBox控件的直接父级,您应该能够Boxes按如下方式填充您的数组:

Boxes = panel1.Controls.OfType<PictureBox>().ToArray();
于 2013-04-04T18:10:28.103 回答
1

可能其中之一Boxes[i]是空的。使用调试器检查这一点,并查看此线程

我的猜测是您的图片框少于 12 个,并且并非所有数组元素都是对其中之一的引用,而是保持未初始化(空)。

您的foreach-loop 只会像您拥有图片框一样频繁地运行。如果您只有 11 个(或更少),Boxes[11]则为空。

当更改可见性并且 i 达到 11 时,Boxes[i].Visible您正在取消引用null,这可能会导致您的异常。

于 2013-04-04T17:50:24.067 回答
0

试试这个
把你的控件放在一个面板 say(panel2) 中并将它的可见性设置为 false 。将此面板放在另一个面板中说(panel1)并在面板1的鼠标事件上尝试此代码

   private void panel1_MouseHover(object sender, EventArgs e)
        {
            panel2.Visible = true;
        }

   private void panel1_MouseLeave(object sender, EventArgs e)
       {
            panel2.Visible = false;
       }

我试过这个它正在工作。

于 2013-04-04T18:02:52.137 回答