C# 使用大量面板时出错:对象引用未设置为对象的实例

C# 使用大量面板时出错:对象引用未设置为对象的实例,c#,winforms,C#,Winforms,我想尝试使用几个面板。但这是一个错误。当我点击按钮_1时,它应该显示其中一个面板并隐藏另一个面板。我在Form_Load中初始化面板。这是我的密码: public partial class Form1 : Form { public Panel[] p = new Panel[2]; public int iter = 1; public Form1() { InitializeComponent(

我想尝试使用几个面板。但这是一个错误。当我点击按钮_1时,它应该显示其中一个面板并隐藏另一个面板。我在Form_Load中初始化面板。这是我的密码:

public partial class Form1 : Form
    {
        public Panel[] p = new Panel[2];
        public int iter = 1;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (iter%2 == 1)
            {
                p[0].Visible = true;
                p[1].Visible = false;
            }
            else if (iter%2 == 0)
            {
                p[0].Visible = false;
                p[1].Visible = true;            

            }
            iter++;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 2; i++)
            {
                p[i] = new Panel();
                p[i].Visible = false;
                p[i].Size = new Size(200, 100);
                p[i].Location = new Point(41, 103);
            }
            p[0].BackColor = System.Drawing.Color.Red;
            p[1].BackColor = System.Drawing.Color.Blue;
        }
    }
公共部分类表单1:表单
{
公共面板[]p=新面板[2];
公共国际热核试验堆=1;
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
如果(iter%2==1)
{
p[0].Visible=true;
p[1].Visible=false;
}
否则如果(iter%2==0)
{
p[0].Visible=false;
p[1].Visible=true;
}
iter++;
}
私有void Form1\u加载(对象发送方、事件参数e)
{
对于(int i=0;i<2;i++)
{
p[i]=新面板();
p[i].Visible=false;
p[i].Size=新尺寸(200100);
位置=新点(41,103);
}
p[0]。背景色=System.Drawing.Color.Red;
p[1]。BackColor=System.Drawing.Color.Blue;
}
}
私有作废表单1\u加载(对象发送方,事件参数e)
{
对于(int i=0;i<2;i++)
{
p[i]=新面板();
p[i].Visible=false;
p[i].Size=新尺寸(200100);
位置=新点(41,103);
this.Controls.Add(p[i]);//您需要此行将面板添加到窗体
}
p[0]。背景色=System.Drawing.Color.Red;
p[1]。BackColor=System.Drawing.Color.Blue;
}

您必须将面板添加到主窗口。在当前窗体中,它不应引发异常。一定还有其他原因,您是否确定已正确附加并调用了
表单加载
事件。还要确保您没有执行
p=新面板[2]代码中的任何其他位置。在
表单加载上设置断点
查看它是否被击中,然后尝试单步执行代码我没有手动攻击表单加载。我只是在表单上单击了两次,这个方法自动添加错误出现在这个块中:如果(iter%2==1){p[0].Visible=true;p[1].Visible=false;}为什么p[0]和p[1]为null?它不能将true或false赋值给p[0]。visibleLike Habib说,您确定正在调用
Form1\u Load
?再问一个问题:如何创建一个父面板,然后输入他的属性,只是不要像我一样在循环中设置相同的属性?
private void Form1_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 2; i++)
    {
        p[i] = new Panel();
        p[i].Visible = false;
        p[i].Size = new Size(200, 100);
        p[i].Location = new Point(41, 103);
        this.Controls.Add(p[i]);   // You need this line to add panel to form
    }
    p[0].BackColor = System.Drawing.Color.Red;
    p[1].BackColor = System.Drawing.Color.Blue;
}