问题描述
昨天写的程序,为了完成单击某张照片显示该照片里的Tag内容。但是发现取不到tag。代码如下intloca=2;stringstrConnect="datasource=.;initialcatalog=test;integratedsecurity=true";SqlConnectionconConnection=newSqlConnection(strConnect);conConnection.Open();stringsqlStr="selectpicturefrompicture";SqlDataAdaptermyAdapter=newSqlDataAdapter(sqlStr,conConnection);DataSetmydataSet=newDataSet();myAdapter.Fill(mydataSet,"test_user");conConnection.Close();imageList1.ImageSize=newSize(139,102);for(inti=0;i<mydataSet.Tables["test_user"].Rows.Count;i++){imageList1.Images.Add(Image.FromFile(""+mydataSet.Tables["test_user"].Rows[i]["picture"].ToString()+""));}for(inti=0;i<imageList1.Images.Count;i++){imageList1.Images[i].Tag=""+mydataSet.Tables["test_user"].Rows[i]["picture"].ToString()+"";PictureBoxpic=newPictureBox();this.Controls.Add(pic);pic.Size=newSystem.Drawing.Size(139,102);pic.Location=newSystem.Drawing.Point(1,loca);pic.Image=imageList1.Images[i];pic.Click+=pic_Click;loca+=108;}imageList1.Images[0].Tag="1";label2.Text=imageList1.Images[0].Tag.ToString();
主要最后两句(做的实验,看能不能取到imageList1.Images[0].Tag的内容,发现不能),运行显示还是label2的test还是label2
解决方案
解决方案二:
下面这样是可以的Imageimage=imageList1.Images[0];image.Tag=123;
解决方案三:
用pic.Tag代替imageList1.Images[i].Tagfor(inti=0;i<imageList1.Images.Count;i++){//imageList1.Images[i].Tag=""+mydataSet.Tables["test_user"].Rows[i]["picture"].ToString()+"";PictureBoxpic=newPictureBox();this.Controls.Add(pic);pic.Tag=""+mydataSet.Tables["test_user"].Rows[i]["picture"].ToString()+"";pic.Size=newSystem.Drawing.Size(139,102);pic.Location=newSystem.Drawing.Point(1,loca);pic.Image=imageList1.Images[i];pic.Click+=pic_Click;loca+=108;}
解决方案四:
引用楼主a598186335的回复:
昨天写的程序,为了完成单击某张照片显示该照片里的Tag内容。但是发现取不到tag。代码如下intloca=2;stringstrConnect="datasource=.;initialcatalog=test;integratedsecurity=true";SqlConnectionconConnection=newSqlConnection(strConnect);conConnection.Open();stringsqlStr="selectpicturefrompicture";SqlDataAdaptermyAdapter=newSqlDataAdapter(sqlStr,conConnection);DataSetmydataSet=newDataSet();myAdapter.Fill(mydataSet,"test_user");conConnection.Close();imageList1.ImageSize=newSize(139,102);for(inti=0;i<mydataSet.Tables["test_user"].Rows.Count;i++){imageList1.Images.Add(Image.FromFile(""+mydataSet.Tables["test_user"].Rows[i]["picture"].ToString()+""));}for(inti=0;i<imageList1.Images.Count;i++){imageList1.Images[i].Tag=""+mydataSet.Tables["test_user"].Rows[i]["picture"].ToString()+"";PictureBoxpic=newPictureBox();this.Controls.Add(pic);pic.Size=newSystem.Drawing.Size(139,102);pic.Location=newSystem.Drawing.Point(1,loca);pic.Image=imageList1.Images[i];pic.Click+=pic_Click;loca+=108;}imageList1.Images[0].Tag="1";label2.Text=imageList1.Images[0].Tag.ToString();主要最后两句(做的实验,看能不能取到imageList1.Images[0].Tag的内容,发现不能),运行显示还是label2的test还是label2
断点找找原因为什么取不到
解决方案五:
给到picturebox的tag不就行了?干嘛要绕个道呢。ImageList.Images[int]获取的是原始图像的副本,自然是取不到Tag了。ImageList实际是一长很大的内存位图,也就是把add进去的图片绘制在自己上面,记录位置。所以并不会存储所有Image对象,而只是记录了Image对象的数据部分。
解决方案六:
引用4楼yuwenge的回复:
给到picturebox的tag不就行了?干嘛要绕个道呢。ImageList.Images[int]获取的是原始图像的副本,自然是取不到Tag了。ImageList实际是一长很大的内存位图,也就是把add进去的图片绘制在自己上面,记录位置。所以并不会存储所有Image对象,而只是记录了Image对象的数据部分。
学习了