Как перемещать виртуальные элементы ListView вверх и вниз? - PullRequest
0 голосов
/ 02 июля 2019

Я не могу переместить элементы в моем списке. Его содержимое является виртуальным.

Я попробовал 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);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...