Я не могу переместить элементы в моем списке. Его содержимое является виртуальным.
Я попробовал listview.selectedItems, но он не работает, поэтому я попробовал listview.SelectedIndices и получил ошибку о том, что Index не был объявлен с помощью int.
Я не уверен, что поступаю неправильно, но, похоже, проблема в индексе. Этот метод работал, когда я пробовал его без виртуального списка, но мне нужно, чтобы он работал с моим виртуальным списком. Любые полезные советы?
private void ListView_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e)
{
Log thisLog = myLogs[e.ItemIndex];
e.Item = new ListViewItem(
new string[]
{
thisLog.displayIndex.ToString(),
thisLog.date.ToString("dd MMM yyyy HH:mm:ss"),
thisLog.GetCode(),
thisLog.GetThreadName(),
thisLog.GetMessage()
})
{
Tag = thisLog,
ForeColor = (thisLog.GetType() == 'E') ? Program.accentColor1 : Color.Black,
BackColor = (thisLog.GetType() == 'D') ? Program.accentColor2 : Color.White
};
}
private void UpRB_CheckedChanged(object sender, EventArgs e)
{
downRB.Checked = !upRB.Checked;
}
private void DownRB_CheckedChanged(object sender, EventArgs e)
{
upRB.Checked = !downRB.Checked;
}
private void MoveButton_Click(object sender, EventArgs e)
{
if (moveTB.Text != null)
{
int dir;
int amount;
try
{
dir = upRB.Checked ? -1 : 1;
amount = int.Parse(moveTB.Text) * dir;
bool valid = listView.SelectedIndices.Count > 0
&& ((amount > 0 && (listView.SelectedIndices[listView.SelectedIndices.Count - 1] < listView.Items.Count - amount))
|| (amount < 0 && (listView.SelectedIndices[0] > -amount)));
if (valid)
{
foreach (ListViewItem item in listView.SelectedIndices)
{
int index = item.Index + amount;
Program.AddBefore((Log)item.Tag, (Log)listView.Items[item.Index - 1].Tag, (Log)listView.Items[index].Tag);
listView.Items.RemoveAt(item.Index);
listView.Items.Insert(index, item);
}
}
}
catch
{
Console.WriteLine("Invalid input or selected logs.");
}
}
}
private void Delete_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("This operation cannot be undone.", "Are you sure?", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
if (result == DialogResult.OK)
{
if (listView.SelectedIndices.Count > 0)
{
foreach (ListViewItem item in listView.SelectedIndices)
{
Program.Remove((Log)item.Tag, (Log)listView.Items[item.Index - 1].Tag);
listView.Items.RemoveAt(item.Index);
}
}
}
}