Как изменить цвет заливки 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;
}
}
}