Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Panels C#:制作二维面板阵列_Panels - Fatal编程技术网

Panels C#:制作二维面板阵列

Panels C#:制作二维面板阵列,panels,Panels,我正在尝试编写一些代码,将面板网格(grid[])显示在更大的面板(gridHolder)上。以下是我目前的代码: public void setupPanels(int x, int y) { grid = new Panel[y, x]; this.Controls.Add(gridHolder); gridHolder.Show(); gridHolder.Location = new Point(0 , 0);

我正在尝试编写一些代码,将面板网格(grid[])显示在更大的面板(gridHolder)上。以下是我目前的代码:

public void setupPanels(int x, int y)
    {

        grid = new Panel[y, x];
        this.Controls.Add(gridHolder);
        gridHolder.Show();
        gridHolder.Location = new Point(0 , 0);
        gridHolder.Size = new Size(x * PANEL_SIZE, y * PANEL_SIZE);

        for (int i = 0; i < grid.GetLength(0); i++)
        {

            for (int j = 0; j < grid.GetLength(1); j++)
            {

                gridHolder.Controls.Add(grid[i, j]);
                grid[i, j].Location = new Point(i * PANEL_SIZE, j * PANEL_SIZE);
                gridHolder.Size = new Size(PANEL_SIZE, PANEL_SIZE);

            }

        }



    }
public void设置面板(int x,int y)
{
网格=新面板[y,x];
this.Controls.Add(gridHolder);
gridHolder.Show();
gridHolder.Location=新点(0,0);
gridHolder.Size=新尺寸(x*面板尺寸,y*面板尺寸);
for(int i=0;i

当我试图运行程序时,我得到一个调试错误,说“NullReferenceException未处理”。如何修复我的代码?

非常远的猜测。。但是试试这个: 在您的
Page\u Load
方法中,更改内部代码,以便调用
setupPanels
方法的行不会在每个条目上调用它,而只在非回发调用中调用它,应该如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
        setupPanels(...)
}
以下是一个完整的示例:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication3.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:panel ID="gridHolder" runat="server"/>
    </form>
</body>
</html>



public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            SetupPanels(gridHolder, 40, 40, 6, 6);
    }

    private void SetupPanels(Panel panelsHolder, int widthPerPanel, int heightPerPanel, int panelsCountX, int panelsCountY)
    {
        panelsHolder.Style.Add("position","absolute");
        panelsHolder.Width = widthPerPanel*panelsCountX;
        panelsHolder.Height = heightPerPanel*panelsCountY;
        for (int y = 0; y < panelsCountY; y++)
        {
            for (int x = 0; x < panelsCountX; x++)
            {
                var gridPanel = new Panel
                {
                    Width = widthPerPanel,
                    Height = heightPerPanel,
                    BackColor = Color.SandyBrown,
                    BorderColor = Color.Black,
                    BorderWidth = 5,
                };
                gridPanel.Style.Add("position", "absolute");
                gridPanel.Style.Add("top", (x*widthPerPanel) + "px");
                gridPanel.Style.Add("left", (y*heightPerPanel) + "px");
                panelsHolder.Controls.Add(gridPanel);
            }
        }
    }

}

公共部分类WebForm1:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
设置面板(网格支架,40,40,6,6);
}
专用空心设置面板(面板支架、面板内宽、面板内高、面板内宽、面板内宽)
{
panelsHolder.Style.Add(“位置”、“绝对”);
panelsHolder.Width=每个面板的宽度*PanelScontx;
面板支架高度=每个面板的高度*面板厚度;
对于(int y=0;y
似乎不是这样。我四处看看,它可能与panel类本身有关。编辑:显然这是不可能的,因为panel是一个类而不是一个结构。除了在一个圆形房间的角落里小便之外,没有什么事情是不可能的。知道你在哪一行得到“NullReferenceException”会很有帮助的。