【问题标题】:Index Out Of Bound exception in C# [duplicate]C#中的索引超出范围异常[重复]
【发布时间】:2014-07-21 19:36:54
【问题描述】:

我正在尝试将我的图片加载到动态创建的图片框中。图片将从位于我本地网络上的 mysql 服务器中检索。通过将查询更改为仅选择 1 个 ID,我已经能够在图片框中获取一张图片。所以我知道它当时可以和一个一起工作。

代码:

private void ass_wijzig_Load(object sender, EventArgs e)
    {

        string query = "Select Image From Product";
        MySqlCommand cmd = new MySqlCommand(query,connection);
       // MySqlDataReader reader = cmd.ExecuteReader();
        var da = new MySqlDataAdapter(cmd);
        var ds = new DataSet();
        da.Fill(ds, "Image");
        int count = ds.Tables["Image"].Rows.Count;
        DataRow myrow;
        byte[] mydata = new byte[0];
        int x = 10;
        int y = 10;
        for (int i = 0; i < 2; i++)
        {
             myrow= ds.Tables["Image"].Rows[i];
            // var data = (Byte[])(ds.Tables["Image"].Rows[i]["Image"]);
             mydata = (Byte[])(ds.Tables["Image"].Rows[i]["Image"]);
             Stream[] str = new MemoryStream[i];
             str[i] = new MemoryStream(mydata);
             PictureBox[] pbx = new PictureBox[i];
             pbx[i] = new PictureBox();
             pbx[i].Size = new Size(150, 150);
             pbx[i].SizeMode = PictureBoxSizeMode.StretchImage;
             pbx[i].Image = Image.FromStream(str[i]);
             pbx[i].Visible = true;
             pbx[i].Location = new Point(x, y);
             x += pbx[i].Location.X + pbx[i].Width;
             this.Controls.Add(pbx[i]);
        }

Stream[] str = new MemoryStream[i]; 处抛出异常 如果有人知道这个问题,我会很荣幸,

提前致谢

【问题讨论】:

  • 你不应该假设i的上限。
  • 这段代码充满了奇怪的语句,你可能应该把它分成不同的块:从数据库中读取 byte[]s,将 byte[] 转换为流,从流中创建图像,创建图片中的图片框。事实上,它是一堆多余的代码。删除数据适配器/数据表并使用简单的数据读取器。删除所有数组。你不需要它们。循环您的数据阅读器并在每个循环中创建一个图片框。

标签: c# mysql arrays exception


【解决方案1】:

问题是数组是 0 索引的。

Stream[] str = new MemoryStream[i];

创建一个长度为 i 的数组,因此有效索引为 0 ... i - 1。

然后你做:

str[i] = new MemoryStream(mydata);

试图访问索引i,这是无效的。

查看您的代码,我不确定您为什么在这里使用数组而不是普通变量。做吧:

Stream str = new MemoryStream(myData); 

改为。

【讨论】:

  • 我从流中删除了数组,但是如何让图片框工作?现在他们已经出界了
  • @user3697100:那里看起来是同样的问题。将图片框数组更改为简单的 PictureBox 变量。
猜你喜欢
  • 2012-02-09
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 2014-07-23
  • 2016-05-03
  • 2015-02-11
  • 1970-01-01
相关资源
最近更新 更多