Как расположить изображение из ListView слева от столбца?

Проблема.
У меня есть ListView с изображением в первом столбце. Но проблема в том, что изображение расположено не слева, а странно в центре, так что вы не можете увидеть полное имя пользователя.
Вопрос:
Так и есть. Есть ли способ расположить изображение слева, чтобы вы могли правильно видеть имя пользователя?
Код:
Код, добавляющий элемент ListViewItem

public void AddMessage(string from, string message)
        {
            ListViewItem item = new ListViewItem(new string[] {from, DateTime.Now.GetDateTimeFormats()[7], message});
            item.ImageIndex = 0;
            listView1.Items.Add(item);
        }

Снимок экрана


person CraftingDragon007    schedule 13.06.2021    source источник
comment
ListViewItem с изображением и текстом обычно выравнивается по левому краю (или по правому, если активны макеты RTL и RTL). Вы уверены, что ваши изображения не имеют прозрачного/белого фона с левой стороны?   -  person Jimi    schedule 13.06.2021
comment
Я уверен на 100%, как вы можете видеть на этом снимке экрана.   -  person CraftingDragon007    schedule 13.06.2021
comment
Как я могу что-то увидеть, если изображение имеет прозрачный/белый фон (который простирается слева от черной области)? Пробовали ли вы использовать другое изображение, добавить его в другой ImageList (установить ImageSize = 16x16 и ColorDepth = Depth32Bit), установить новый ImageList в SmallImageList элемента управления? Что происходит, когда вы делаете это в Дизайнере?   -  person Jimi    schedule 13.06.2021
comment
Как видно на этом снимке экрана, у меня та же проблема.   -  person CraftingDragon007    schedule 13.06.2021
comment
К сожалению, я не могу воспроизвести его каким-либо образом. Используйте этот веб-ресурс, чтобы преобразовать изображение в значок. Загрузите свое изображение, затем перейдите к Step 4, выберите все размеры, загрузите новый значок и добавьте его в список изображений. Заранее установите для ColorDepth значение Depth32Bit и любой размер, который вы предпочитаете (его можно изменить во время разработки на любой другой размер).   -  person Jimi    schedule 13.06.2021
comment
Это все еще не работает   -  person CraftingDragon007    schedule 13.06.2021
comment
Есть ли что-то, чего вы не говорите об этом ListView? Это стандартный ListView WinForms? -- Сделайте тест, добавьте новый (свойства по умолчанию) в чистую форму нового проекта (шаблон по умолчанию), установите ImageList, как описано, добавьте 3 столбца в конструкторе, установите View = Details и установите свойство ImageList на SmallImageList . Во время выполнения добавьте свой ListViewItem. Как это выглядит? -- Как уже упоминалось, я не могу воспроизвести описанное поведение. -- Кстати, не называйте параметр (или любую переменную/поле) from, это зарезервированное ключевое слово.   -  person Jimi    schedule 13.06.2021


Ответы (1)


Здесь вы можете попробовать два способа, Один

listView1.Columns["columnName"].TextAlign = HorizontalAlignment.Left;

или вы можете использовать событие DrawSubItem таким образом

private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
    TextFormatFlags flags = TextFormatFlags.Left;
    if (e.ColumnIndex == 0)
    {
        flags = TextFormatFlags.Right;
    }

    e.DrawText(flags);
}
person Pashyant Srivastava    schedule 13.06.2021
comment
@ CraftingDragon007, вы можете попробовать, как указано в приведенном выше коде. - person Pashyant Srivastava; 13.06.2021
comment
Событие не выполняется, хотя я добавил его в дизайнере, а другое тоже не работает. - person CraftingDragon007; 13.06.2021
comment
Это потому, что вы должны установить e.DrawDefault = true;. обратитесь к этому - person Pashyant Srivastava; 14.06.2021