Panels C#:制作二维面板阵列
我正在尝试编写一些代码,将面板网格(grid[])显示在更大的面板(gridHolder)上。以下是我目前的代码: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);
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”会很有帮助的。