Windows Forms ListBox не может правильно изменить размер горизонтальной полосы прокрутки при добавлении элемента - PullRequest
1 голос
/ 01 июня 2011

Я работаю над приложением, у которого есть ListBox, который я могу заполнить, загрузив файл или нажав кнопку «Добавить», которая показывает диалоговое окно, чтобы запросить некоторую информацию от пользователя. После нажатия «Сохранить» в этом диалоговом окне результат затем добавляется в список. Однако по какой-то причине после этого горизонтальная полоса прокрутки не изменяется должным образом.

Часто оно появляется, но самое дальнее правое направление все еще затеняет большую часть текста. Как ни странно, при двойном щелчке по элементу появляется то же диалоговое окно, я нажимаю кнопку «Отмена», и полоса прокрутки корректно изменяет размеры. Я попытался lstItems.Refesh() безрезультатно, единственный способ, который заставляет полосу прокрутки корректно изменить размер из этой подсказки «добавить», - это добавить результат дважды, а затем удалить один. Это соответствующий код:

Оригинальный код для подсказки добавления (не работает):

private void btnItemAdd_Click(object sender, EventArgs e)
{
    editForm editFrm = new editForm();
    editFrm.ShowDialog();
    if (editFrm.Result != null)
    {
        lstItems.Items.Insert(lstItems.Items.Count, editFrm.Result);
        lstItems.Refresh();
    }
}

Обход:

private void btnItemAdd_Click(object sender, EventArgs e)
{
    editForm editFrm = new editForm();
    editFrm.ShowDialog();
    if (editFrm.Result != null)
    {
        lstItems.Items.Insert(lstItems.Items.Count, editFrm.Result);
        lstItems.Items.Insert(lstItems.Items.Count, editFrm.Result);
        lstItems.Items.RemoveAt(lstItems.Items.Count - 1);
        lstItems.Refresh();
    }
}

Возможно, актуально. Код события двойного клика:

private void lstItems_DoubleClick(object sender, EventArgs e)
{
    if (lstItems.SelectedItem != null)
    {
        editForm editFrm = new editForm(lstItems.SelectedItem.ToString());
        editFrm.ShowDialog();
        lstItems.Items.Insert(lstItems.SelectedIndex, editFrm.Result);
        lstItems.Items.RemoveAt(lstItems.SelectedIndex);
        lstItems.Refresh();
    }
}

Почему это происходит и есть ли возможное решение?

Редактировать: Похоже, что кто-то опроверг мой вопрос. Я был бы признателен, если бы вы оставили комментарий о том, почему он заслуживает понижающего голоса, а не какой-то хит: / Был ли вопрос неясным? Я был бы рад попытаться объяснить больше, если это необходимо. Я подозреваю, что это связано с отсутствием "исследований". Я мог бы дать ссылку на результат Google, если хотите. Видимо, никто, в меру моих поисков, не сталкивался с этой проблемой. Я попытался использовать свойство HorizontalExtent, как показано здесь , но это тоже не сработало.

1 Ответ

0 голосов
/ 01 июня 2011

Звучит так, будто строка удаления вызывает переоценку полосы прокрутки, а добавление - нет. Один из способов, которым я могу придумать, чтобы заставить эту функциональность, состоит в том, чтобы аннулировать и перерисовать список следующим образом:

lstItems.Invalidate();
lstItems.Redraw();
...