ListView图像有时在winform c#中放错位置并消失

Posted

技术标签:

【中文标题】ListView图像有时在winform c#中放错位置并消失【英文标题】:ListView Images misplacing and disappears sometimes in winform c# 【发布时间】:2020-12-23 07:57:41 【问题描述】:

我正在处理 winforms,我有 2 个代码,用于同一件事,它们只是查询差异相同,但一个工作完全正常,另一个有问题,因为它放错了图像。 问题是每次我运行代码时,图像都在错误的位置。 正确的功能代码:

int c2 = -1;
List<string> searchpath =new List<string>();
List<string> searchtitle = new List<string>();
listView2.Clear();
homerecipe.Clear();
searchtitle.Clear();
searchpath.Clear();
imageList3.Images.Clear();
var text = textBox1.Text;
char[] separator =  ' ' ;
string[] words = null;
words = text.Split(separator);

foreach (string word in words)

  try
    
    cmd = new SqlCommand($"select Title, Thumbnail,RecipeName from RecipeInfo where RecipeName like '%word%'", con);
    
    con.Open();
    SqlDataReader read = cmd.ExecuteReader();
    
    if (read.HasRows)
    
      while (read.Read())
      
        // if (homerecipe.Any(item => item == read[2].ToString())) continue;
        searchtitle.Add(read[0].ToString());
        searchpath.Add($@"read[1].ToString()");
        homerecipe.Add(read[2].ToString());
      

      read.Close();
      //con.Close();
      foreach (string ipath in searchpath)
      
        ListViewItem img = listView2.FindItemWithText(ipath);
        if (img == null)
        
          imageList3.Images.Add(Image.FromFile(ipath));
        
      

      listView2.LargeImageList = imageList3;
      foreach (string hometitle in searchtitle)
      
        ListViewItem list = listView2.FindItemWithText(hometitle);
        if (list == null)
        
          c2++;
          listView2.Items.Add(hometitle, c2);
        
      
    
    con.Close();
  
  catch (SqlException)
  
  MessageBox.Show("masla");
      con.Close();
      //continue;
  

有问题的代码:

int ccc = -1;
hometitles.Clear();
homepaths.Clear();
homerecipe.Clear();
imageList2.Images.Clear();
try

  cmd = new SqlCommand("select  Title, Thumbnail,RecipeName from RecipeInfo order by newid()", con); //generating random from sql

  con.Open();
  SqlDataReader reader1 = cmd.ExecuteReader();
  if (reader1.HasRows)
  
    while (reader1.Read())
    
      hometitles.Add(reader1[0].ToString());
      homepaths.Add($@"reader1[1].ToString()");
      homerecipe.Add(reader1[2].ToString());
    
  
  reader1.Close();
  //con.Close();
  
  foreach (string imagepath in homepaths)
      
    ListViewItem img = listView2.FindItemWithText(imagepath);

    if (img == null)
    
      imageList2.Images.Add(Image.FromFile(imagepath));
    
  
  listView2.LargeImageList = imageList2;
  foreach (string hometitle in hometitles)
  
    ListViewItem list = listView2.FindItemWithText(hometitle);
    if (list == null)
    
      ccc++;
      listView2.Items.Add(hometitle,ccc);
    
  
  con.Close();

catch(SqlException)

    MessageBox.Show("error");

我尝试使用 homerecipe 元素作为图像键,因为它们是主键,但我不知道如何在 foreach 中给出一个条件,即如果输入了一个名称,那么相同的名称不会出现两次。 为此,我正在尝试这个

foreach (string imagepath in homepaths)

  foreach(string name in homerecipe) //name a primary key
    
    ListViewItem img = listView2.FindItemWithText(imagepath);

    if (img == null)
    
      MessageBox.Show(name);
      imageList2.Images.Add(name,Image.FromFile(imagepath));  
    
  


listView2.LargeImageList = imageList2;
foreach (string hometitle in hometitles)

  foreach (string name in homerecipe)
  
    ListViewItem list = listView2.FindItemWithText(hometitle);
    if (list == null)
    
      ccc++;
      listView2.Items.Add(hometitle, name);
    
  

我最近 3 天都在尝试这个,请帮我纠正它。请我在我的项目的最后期限内,但这个问题没有解决。我是编程新手,请解决这个问题。

有时,仅图像随机播放,有时文本和图像同时播放,但位置不正确

【问题讨论】:

有人请帮我解决这个问题,如果这个问题仍然存在,我的整个项目将是空的 【参考方案1】:

从数据库中读取数据后,在

while (reader.Read())

直接填充ListView,可以让代码更加简洁明了。

我写了一个类似的例子,你可以参考一下。 Pictures fill ListView

【讨论】:

你能告诉我如何测试重复项 每次点击都会出现重复的成员

以上是关于ListView图像有时在winform c#中放错位置并消失的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 如何读取 listview里的每一条数据

c# winform 用listview做导航界面,控件上下移动后 顺序不对?

C# WINFORM ListView用法详解(转)

winform c# listview 如何 选中行!急!在线等!

winform c# listview 如何 选中行!急!在线等!

c# winform httpWebResponse post出错