0

私のフォームには、panel画像ボックスがあります。マウスをpanel画像ボックスの上に置くと、表示されるはずです。マウスが離れると、画像ボックスが非表示になります。

最初に私が試した

panel1.visible = true;   

panel1.visible = false;

これでいけると思ったのですが、うまくいきません。次に、次の方法を試しました

namespace Drawing_Program
{
    public partial class Form1 : Form
    {

        PictureBox[] Boxes = new PictureBox[12];

        public Form1()
        {           
            InitializeComponent();
            int i = 0;
            foreach (var pb in Controls.OfType<PictureBox>())
            {
                Boxes[i] = pb;                
                i++;
            }           

        }

        private void panel1_MouseHover(object sender, EventArgs e)
        {
            for (int i = 0; i < Boxes.Length; i++) {
                this.Boxes[i].Visible = true;  // error gives here
            }



        }

        private void panel1_MouseLeave(object sender, EventArgs e)
        {
            for (int i = 0; i < Boxes.Length; i++)
            {
                this.Boxes[i].Visible = false;
            }


        }

しかし、私は次のエラーが発生しています:

nullreferenceException が処理されませんでした: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

何が間違っているか、これを正しく行う方法を教えてください。

4

3 に答える 3

1

おそらくいずれかBoxes[i]が null です。デバッガーを使用してこれを確認し、このスレッドを参照してください。

私の推測では、12 未満の画像ボックスがあり、すべての配列要素がそれらの 1 つへの参照ではなく、初期化されていない (null) ままになっていると思います。

-loopforeachは、picturebox の数だけ実行されます。11 (またはそれ以下) しかない場合はBoxes[11]null になります。

可視性を変更して i が 11 に達すると、おそらく例外が発生するBoxes[i].Visible逆参照が発生します。null

于 2013-04-04T17:50:24.067 に答える