【问题标题】:how to retrieve images from the database to 4 picture boxes in the loop如何从数据库中将图像检索到循环中的4个图片框
【发布时间】:2013-03-13 17:58:47
【问题描述】:

我有一个 winform 应用程序(VS 2008),它有 4 个图片框,一个按钮(上传)。当我单击按钮时,我想从数据库(sql server 2005)中按从头到尾的顺序记录图像框。例如:按下按钮,第一个图片框显示第一张图片,按下按钮,第二张图片显示另一个图片框等等。然后第一个图片框显示第五张图片。

pb1 = img1, pb2 = img2, pb3 = img3, pb4 = img4, pb1 = img5,..pb4 = img8,pb1 = img9,..etc..

所以,有一个循环。 我有这段代码,但他在图片框中只记录了一张图片。

private void btnSHow_Click(object sender, EventArgs e)
{
    SqlConnection connect = new SqlConnection("Data Source=JOHNO-PC\\SQLEXPRESS;Initial Catalog=DB_TraficSigns;Integrated Security=True");
    SqlCommand command = new SqlCommand("SELECT picture FROM Tab_Sign ORDER BY id", connect);

    SqlDataAdapter dp = new SqlDataAdapter(command);
    DataSet ds = new DataSet("Tab_Sign");

    byte[] MyData = new byte[0];

    dp.Fill(ds, "Tab_Sign");
    DataRow myRow;
    myRow = ds.Tables["Tab_Sign"].Rows[0];

    MyData = (byte[])myRow["picture"];

    MemoryStream stream = new MemoryStream(MyData);
    pb1.Image = Image.FromStream(stream);

}

【问题讨论】:

  • 抱歉,您有什么问题?
  • 不是您问题的解决方案,但仅供参考:您的 SqlConnectionSqlCommandSqlDataAdapterMemoryStream 都需要在 using 块中。
  • 约翰的观点很好。它们都是非托管资源,因此如果您没有正确处理它们,您可能会遇到内存问题。

标签: c# database winforms picturebox


【解决方案1】:

不要使用 pb1、pb2、pb3 等,而是将图片框放在一个名为 pictureBoxes 的数组中。将数组的大小放在全局中,并在声明数组时使用该大小(因此,如果您添加或删除图片框,它很容易更改。)

int pictureBoxCount = 4;
int currentPictureBox = 0;
PictureBox[] pictureBoxes = new PictureBox[pictureBoxCount];

然后,每次下载图片时,更新数组索引器。

currentPictureBox = (currentPictureBox + 1) % pictureBoxCount;

然后你可以这样做:

pictureBoxes[currentPictureBox].Image = Image.FromStream(stream);

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多