@HNKHENM

Как изменить цвет заливки item'а(строки в listview ) в зависимости от атрибута файла?

Как изменить цвет заливки item'а(строки в listview ) в зависимости от атрибута файла? Что нужно исправить? Пробовал делать обращение по индексам, что-то вроде - "listView1.Items[0].SubItems[0].BackColor = Color.Yellow", но выскакивает ошибка:

#####################################################################################
Необработанное исключение типа "System.ArgumentOutOfRangeException" в System.Windows.Forms.dll

Дополнительные сведения: InvalidArgument=Значение '0' недопустимо для 'index'.

#####################################################################################
Задача программы такая: по нажатию на button1 на listview1 должен произойти вывод файлов, находящихся в папке. Причем строки с именами файлов должны быть закрашены желтым цветом если у файла атрибут - "Только для чтения"

Вот код:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication4 {
 public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        textBox1.Text = "tracing";
        }
    StringBuilder result = new StringBuilder();
    String str;
    int index = 0;
    byte[] buffer = new byte[511];
    String word;
    private void button1_Click(object sender, EventArgs e) {
        FolderBrowserDialog FBD = new FolderBrowserDialog();
        listView1.Items.Clear();
        FBD.ShowNewFolderButton = false;
        FBD.Description = "Выберите папку...";
        if (FBD.ShowDialog() == DialogResult.OK) {
            string[] allFoundFiles = Directory.GetFiles(FBD.SelectedPath, "*.txt", SearchOption.TopDirectoryOnly);
            foreach (string file in allFoundFiles) {
                listView1.Items.Add(file);
                FileAttributes fA = File.GetAttributes(file);
                if ((fA & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
                    listView1.Items[0].BackColor = Color.Yellow;
                
            }
        }        
    }
       private int wordEntry(ref StringBuilder result, ref String word) {
           int n = 0, k = 0, count = 0;
           while (result.Length != n) {
               if (result[n] == word[k]) {
                   if (k == word.Length - 1) {
                       count++; k = -1;
                   }
                   n++; k++;
               }
               else {
                   n++; k = 0;
               }
           }
           return count;
       }
       private void button2_Click(object sender, EventArgs e) {
           word = textBox1.Text;
           FileInfo f = new FileInfo(str);
           using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read)) {
               using (BinaryReader br = new BinaryReader(fs)) {//, Encoding.GetEncoding("Unicode")
                   int bytesRead = 0;
                   while ((bytesRead = br.Read(buffer, 0, buffer.Length)) != 0) {
                       for (int i = 0; i <= bytesRead - 1; i++) {
                           result.AppendFormat("{0:x2}", (char)buffer[i]);
                       }
                       //Array.Clear(buffer, 0, buffer.Length);
                   }
                   MessageBox.Show(wordEntry(ref result, ref word).ToString());//

               }
           }
       }
       private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {       
           str = e.Item.Text;
       }

   }
}
  • Вопрос задан
  • 1471 просмотр
Решения вопроса 1
@dmitryKovalskiy
программист средней руки
Вы делаете
listView1.Items.Clear();
Ткните пожалуйста пальцем в строчку, которая затем заполняет эту коллекцию хоть чем-то
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
"listView1.Items[0].SubItems[0]"
1. SubItems должны быть предварительно добавлены, то что вы возможно заранее создали в дизайнере столбцы, не влияет на количество созданных вами SubItems
2. SubItems наследуют по умолчанию стиль своего родителя, поэтому надо отвязать:
ListViewItem item = new ListViewItem(name);
 item.UseItemStyleForSubItems = false;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы