0
private void checkDesktopItems()
    {
        SqlCeConnection sqlCnn = new SqlCeConnection("Data Source=" + Application.StartupPath + "\\mainDB.sdf");
        SqlCeCommand sqlCmd = new SqlCeCommand("SELECT * FROM desktopItems", sqlCnn);
        sqlCnn.Open();
        SqlCeDataReader reader = sqlCmd.ExecuteReader();
        while (reader.Read())
        {
            if (top + 52 < DesktopBounds.Size.Height)
            {
                PictureBox Shapes = new PictureBox();
                Shapes = new PictureBox();
                Shapes.Size = new Size(32, 32);
                Shapes.BackColor = Color.Transparent;
                Shapes.Location = new Point(left, top);
                Shapes.Image = ReturnIcon(reader[1].ToString()).ToBitmap();
                Shapes.Visible = true;
                this.Controls.Add(Shapes);
                Shapes.DoubleClick += new EventHandler((o, a) => Process.Start(reader[1].ToString()));
                Shapes.DoubleClick += new EventHandler((o, a) => this.WindowState = FormWindowState.Minimized);

                top += 52;
                y++;
            }
            else
            {
                x++;
                top = 13;
                left += 52;
            }
        }
        sqlCnn.Close();
    }

我有这段代码,一切正常……除了这一行Shapes.DoubleClick += new EventHandler((o, a) => Process.Start(reader[1].ToString()));

错误说

行/列不存在数据。

我想要一个修复,以便每个创建的图片框都有自己的事件处理程序来启动一个进程。

4

1 回答 1

2

您需要创建局部变量,试试这个:

var file = reader[1].ToString();

Shapes.DoubleClick += new EventHandler((o, a) => Process.Start(file));

否则reader[1].ToString()将在 you 时进行评估DoubelClick,这已经太晚了。

于 2013-11-10T11:39:40.177 回答