У меня есть список, установленный для детализации.Выбранные данные (текст) иногда шире, чем ширина столбца.Как сделать так, чтобы текст автоматически прокручивался по горизонтали при выделении?
Таким образом, ширина столбца может оставаться неизменной, и если слишком много текста для отображения в целом, то при автоматической прокрутке в конечном итоге будет показан весь текст внутриколонны.Также не нужно (пожалуйста, нет!) Показывать полосы прокрутки.
При отсутствии лучшего примера это должно отображаться примерно: https://www.youtube.com/watch?v=HMUmw-cq5w4
Я видел такое поведениев действии в нескольких настольных приложениях, хотя я не могу найти одно на своем компьютере прямо сейчас.
Я искал несколько часов и до сих пор не могу определить правильный термин, вызывают все результатыпоказать что-то другое, чем то, что я хочу достичь.
int counter = 0;
bool addItems = false;
foreach (var listbox in info)
{
// Create items
if (string.IsNullOrEmpty(listbox.nbAlbumArtist) == false)
{
ListViewItem item = new ListViewItem(listbox.name, counter);
//item.SubItems.Add(listbox.name);
item.SubItems.Add(listbox.nbAlbumArtist + " albums");
items[counter] = item;
counter++;
addItems = true;
}
else
{
lb_result.Items.Add(listbox.name);
}```
protected void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
}
private TextFormatFlags GetTextAlignment(ListView lstView, int colIndex)
{
TextFormatFlags flags = (lstView.View == View.Tile)
? (colIndex == 0) ? TextFormatFlags.Default : TextFormatFlags.Bottom
: TextFormatFlags.VerticalCenter;
flags |= TextFormatFlags.LeftAndRightPadding | TextFormatFlags.NoPrefix;
switch (lstView.Columns[colIndex].TextAlign)
{
case HorizontalAlignment.Left:
flags |= TextFormatFlags.Left;
break;
case HorizontalAlignment.Right:
flags |= TextFormatFlags.Right;
break;
case HorizontalAlignment.Center:
flags |= TextFormatFlags.HorizontalCenter;
break;
}
return flags;
}
protected void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
ListView lView = sender as ListView;
if (lView.View == View.Details) return;
TextFormatFlags flags = GetTextAlignment(lView, 0);
Color itemColor = e.Item.ForeColor;
if (e.Item.Selected)
{
using (SolidBrush bkgrBrush = new SolidBrush(listViewSelectionColor))
{
e.Graphics.FillRectangle(bkgrBrush, e.Bounds);
}
itemColor = e.Item.ForeColor;
}
else
{
e.DrawBackground();
}
TextRenderer.DrawText(e.Graphics, e.Item.Text, e.Item.Font, e.Bounds, itemColor, flags);
if (lView.View == View.Tile && e.Item.SubItems.Count > 1)
{
var subItem = e.Item.SubItems[1];
flags = GetTextAlignment(lView, 1);
TextRenderer.DrawText(e.Graphics, subItem.Text, subItem.Font, e.Bounds, SystemColors.GrayText, flags);
}
}
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
ListView lView = sender as ListView;
TextFormatFlags flags = GetTextAlignment(lView, e.ColumnIndex);
Color itemColor = e.Item.ForeColor;
if (e.Item.Selected)
{
if (e.ColumnIndex == 0 || lView.FullRowSelect)
{
using (SolidBrush bkgrBrush = new SolidBrush(listViewSelectionColor))
{
e.Graphics.FillRectangle(bkgrBrush, e.Bounds);
}
itemColor = e.Item.ForeColor;
}
}
else
{
e.DrawBackground();
}
TextRenderer.DrawText(e.Graphics, e.SubItem.Text, e.SubItem.Font, e.Bounds, itemColor, flags);
}