将对象发送到UserControl方法的对象引用错误

时间:2014-02-05 14:49:16

标签: c# .net winforms user-controls

我已经接近为我一直在努力的练习项目准备好核心功能,但不足为奇的是我已经陷入困境并可以使用一些帮助或指针。

基本上,我正在向User控件发送一个对象,用户控件通过使用对象的内容将其发送到另一个用户控件,然后从第一个用户控件将第二个用户控件添加到第一个用户控制。或者至少我会,如果我没有得到有关对象引用的错误。这是Form1中的 HandGUI.CreateCard(newCard); 行,它给出了对象引用错误。如果我使CreateCard静态,它可以工作,但我不能使用this关键字将控件放在User Control1中。

在Form1中:

public void button2_Click(object sender, EventArgs e)
    {
        Card newCard = TheDeck.Draw();

        HandGUI.CreateCard(newCard);
    }

在用户控件1中:

public void CreateCard(Card card)
    {
        CardGUI cardGui = new CardGUI(card);

        cardGui.Size = new Size(71, 96);
        cardGui.Location = new Point(50, 50);
        cardGui.Show();

        this.Controls.Add(cardGui);
    }

在User Control2中:

    public CardGUI(CardGameLibrary.Card newCard)
    {
        InitializeComponent();

        InitializeGUI();

        AssignImage(newCard);
    }

    private void AssignImage(Card card)
    {
        string faceVal = card.FaceVal.ToString();
        string suit = card.Suit.ToString();
        string fullName;

        if (faceVal == "Ace")
            faceVal = "1";
        if (faceVal == "Two")
            faceVal = "2";
        if (faceVal == "Three")
            faceVal = "3";
        if (faceVal == "Four")
            faceVal = "4";
        if (faceVal == "Five")
            faceVal = "5";
        if (faceVal == "Six")
            faceVal = "6";
        if (faceVal == "Seven")
            faceVal = "7";
        if (faceVal == "Eight")
            faceVal = "8";
        if (faceVal == "Nine")
            faceVal = "9";
        if (faceVal == "Ten")
            faceVal = "10";
        if (faceVal == "Jack")
            faceVal = "j";
        if (faceVal == "Queen")
            faceVal = "q";
        if (faceVal == "King")
            faceVal = "k";

        fullName = suit + faceVal;

            if(cardList.Images[fullName] != null)
            {
                PictureBox picBox = new PictureBox();
                picBox.Image = cardList.Images[fullName];
                picBox.Size = new Size(71, 96);
                this.Controls.Add(picBox);
            }
    }

最后在User Control2中创建一个表单,并将图片框添加到该表单中,这表明它至少可以找到合适的图片。希望有人知道我能做些什么,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

看起来你正在使用HandGUI类,而不是实例。如果您没有初始化HandGUI对象,则会看到函数调用的空引用异常。如果将函数设置为static,则不会再出现错误,因为静态意味着可以在不初始化包含的类的情况下调用函数。

HandGUI newHandGUI = new HandGUI();
newHandGUI.CreateCard(newCard);