尝试添加我的控件时,Visual Studio提供NullReferenceException!

时间:2010-11-27 01:02:44

标签: c# user-controls

这是错误: alt text

它说异常的来源是我班上的第20行。这是我的班级:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.ObjectModel;

namespace WebServiceScanner
{
    public partial class imageList : UserControl
    {
        private int XPosition = 0;

        public imageList()
        {
            InitializeComponent();
            Images.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Images_CollectionChanged);
        }       

        public ObservableCollection<selectablePicture> Images { get; set; }

        public void AddImage(selectablePicture image)
        {
            Images.Add(image);
        }

        public void RemoveImage(selectablePicture image)
        {
            Images.Remove(image);
        }

        public void MoveImageLeft(int index)
        {
            selectablePicture tmpImage = Images[index];
            Images[index] = Images[index - 1];
            Images[index - 1] = tmpImage;
        }

        public void MoveImageRight(int index)
        {
            selectablePicture tmpImage = Images[index];
            Images[index] = Images[index + 1];
            Images[index + 1] = tmpImage;
        }

        void Images_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            RedrawImages();
        }

        private void RedrawImages()
        {
            foreach (var picture in Images)
            {
                picture.Location = new Point(XPosition + panel1.AutoScrollPosition.X, 0);
                XPosition += 130;
                panel1.Controls.Add(picture);
            }
        }
    }
}

也许我正在做一些像在构造函数中设置事件处理程序一样愚蠢的事情。有任何想法吗?这个用户控件实际上并不复杂,所以很少有地方可能出错。

如果您需要更多信息,请告诉我们。

3 个答案:

答案 0 :(得分:1)

添加语句以实例化Images

public imageList()
{
    InitializeComponent();

    Images = new ObservableCollection<selectablePicture>();
    Images.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Images_CollectionChanged);
}

答案 1 :(得分:0)

我猜这与图像未设置为任何值这一事实有关,因此控件正在尝试为DesignView渲染它,但Images为null因此为NullReferenceException。它可能是构造函数中的代码,当它试图对可能在任何注入代码设置图像之前运行的图像进行注册时。

答案 2 :(得分:0)

< selectablePicture >是否有无参数的公共构造函数?你正在实施Images吗?