Как автоматически прокрутить текст в столбце списка, если он больше ширины столбца? - PullRequest
0 голосов
/ 16 июня 2019

У меня есть список, установленный для детализации.Выбранные данные (текст) иногда шире, чем ширина столбца.Как сделать так, чтобы текст автоматически прокручивался по горизонтали при выделении?

Таким образом, ширина столбца может оставаться неизменной, и если слишком много текста для отображения в целом, то при автоматической прокрутке в конечном итоге будет показан весь текст внутриколонны.Также не нужно (пожалуйста, нет!) Показывать полосы прокрутки.

При отсутствии лучшего примера это должно отображаться примерно: 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);
        }
...