在我的表单中,我有一个带有图片框的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未处理:对象引用未设置为 对象的实例。
请告诉我出了什么问题或如何正确地做到这一点。
答案 0 :(得分:3)
您的Form
不是PictureBox
控件的直接父级。所以我打赌你的Boxes
数组是{ null, null, null,... }
。如果panel1
是所有PictureBox
控件的直接父级,则应该能够按如下方式填充Boxes
数组:
Boxes = panel1.Controls.OfType<PictureBox>().ToArray();
答案 1 :(得分:1)
Boxes[i]
中的一个可能为空。使用调试器进行检查,然后查看this thread。
我的猜测是你有少于12个图片框,并不是所有数组元素都引用其中一个,而是保持未初始化(null)。
您的foreach
- 循环只会像您拥有的图片框一样经常运行。如果您只有11(或更少),Boxes[11]
将为空。
当更改可见性并且我达到11时,使用Boxes[i].Visible
您解除引用null
,这可能会导致您的例外。
答案 2 :(得分:0)
private void panel1_MouseHover(object sender, EventArgs e)
{
panel2.Visible = true;
}
private void panel1_MouseLeave(object sender, EventArgs e)
{
panel2.Visible = false;
}
我试过这是有效的。