我在Class KartenClass
中创建了Array cardImagespublic Image[][][] cardImages = new Image[9][][];
我写了一个名为arrbef()的方法来填充它
public void arrbef()
{
this.cardImages[0][0] = new Image[3] { global::WindowsFormsApplication4.Properties.Resources.Card, global::WindowsFormsApplication4.Properties.Resources.CardBack, global::WindowsFormsApplication4.Properties.Resources.CardSet };
this.cardImages[0][1] = new Image[3] { global::WindowsFormsApplication4.Properties.Resources.Card, global::WindowsFormsApplication4.Properties.Resources.CardBack,
etc....
并在我的表单中调用方法arrbef并尝试填充它。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication4
{
public partial class Karten : Form
{
KartenClass karten = new KartenClass();
int standort = 0;
public Karten()
{
InitializeComponent();
KartenClass.karten[0].arrbef();
}
但是当我点击链接到此表单的按钮时,我收到以下错误:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei WindowsFormsApplication4.KartenClass.arrbef() in c:\Users\david.kresse\Documents\Visual Studio 2012\Projects\WindowsFormsApplication5\KartenClass.cs:Zeile 24.
bei WindowsFormsApplication4.Karten..ctor() in c:\Users\david.kresse\Documents\Visual Studio 2012\Projects\WindowsFormsApplication5\Karten.cs:Zeile 22.
bei WindowsFormsApplication4.Start.btnStartGoToKarten_Click(Object sender, EventArgs e) in c:\Users\david.kresse\Documents\Visual Studio 2012\Projects\WindowsFormsApplication5\Start.cs:Zeile 394.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
我做错了什么?我对另一个阵列做了完全相同的(这是一个尺寸)。
我希望你能提供帮助。
答案 0 :(得分:1)
此:
public Image[][][] cardImages = new Image[9][][];
...创建一个包含9个元素的顶级数组。每个元素值都为null。你需要:
for (int i = 0; i < cardImages.Length; i++) {
cardImages[i] = new Image[???][]; // What length do you want?
}
然后,您可以正常填充cardImages[0][0]
等。
我个人试图避免使用三维数组(或者在这种情况下是数组数组的数组) - 它可能会变得混乱。但在这种情况下可能是适当的;没有更多信息就很难说。
编辑:有了更多信息,可以将其建模为Category[]
(或List<Category>
),其中Category
有Card[]
或List<Card>
} Card
有一个Image[]
或List<Image>
。然后在顶层你只有一组类别。