C# Может я изображения на дисплее в поле списка?

Все они в точности идентичны

          "a $b {$c}"
qq        "a $b {$c}"
Q :qq     "a $b {$c}"
Q :double "a $b {$c}"

Q :b :s :a :h :c :f "a $b {$c}"
Q :backslash :scalar :array :hash :closure :function "a $b {$c}"

Чтобы синтаксический анализатор строковых литералов рассматривал {} как создающее замыкание, ему необходимо включить функцию замыкания.

Одной из вещей, которую позволяют :qq / :double, является :c / :closure.

Вы также можете отключить его с помощью :!closure.

say qq :!closure "{ 1 + 2 }";
# { 1 + 2 }

То есть он начинается с семантики :qq / :double и отключает семантику :closure.


Здесь - это то, где функция qq определена в Rakudo

role qq does b1 does c1 does s1 does a1 does h1 does f1 {
    token starter { \" }
    token stopper { \" }
    method tweak_q($v) { self.panic("Too late for :q") }
    method tweak_qq($v) { self.panic("Too late for :qq") }
}

b1 включает обратную косую черту
c1 включает закрытие [ 1134]
s1 включает скаляр
a1 включает массив
h1 включает хэш
f1 включает функцию


[ 1149] Это задокументировано, и вы предоставили ссылку на документацию.
Возможно, можно пояснить, что:

  • "" - это сокращение от qq ""
  • qq "" - это сокращение от Q :qq "" / Q :double ""
  • [ 1141] :qq / :double сокращенно от всех :backslash :closure :scalar :array :hash :function.

Также, возможно, стоит добавить примеры для всех этих функций.

19
задан Patrik Svensson 16 June 2011 в 16:21
поделиться

4 ответа

Система. Windows. Формы. ListView добьется цели очень легко. Вам, возможно, придется работать немного тяжелее, чем ListBox, если Вы хотите список в представлении 'деталей' все же.

2
ответ дан 30 November 2019 в 03:53
поделиться

Следующий код отображается, как сделать пользовательский рисунок в поле списка.

using System.Windows.Forms;
using System.Drawing;

namespace Toolset.Controls
{
    public class CustomDrawListBox : ListBox
    {
        public CustomDrawListBox()
        {
            this.DrawMode = DrawMode.OwnerDrawVariable; // We're using custom drawing.
            this.ItemHeight = 40; // Set the item height to 40.
        }

        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            // Make sure we're not trying to draw something that isn't there.
            if (e.Index >= this.Items.Count || e.Index <= -1)
                return;

            // Get the item object.
            object item = this.Items[e.Index];
            if (item == null)
                return;

            // Draw the background color depending on 
            // if the item is selected or not.
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
            {
                // The item is selected.
                // We want a blue background color.
                e.Graphics.FillRectangle(new SolidBrush(Color.Blue), e.Bounds);
            }
            else
            {
                // The item is NOT selected.
                // We want a white background color.
                e.Graphics.FillRectangle(new SolidBrush(Color.White), e.Bounds);
            }

            // Draw the item.
            string text = item.ToString();
            SizeF stringSize = e.Graphics.MeasureString(text, this.Font);
            e.Graphics.DrawString(text, this.Font, new SolidBrush(Color.White),
                new PointF(5, e.Bounds.Y + (e.Bounds.Height - stringSize.Height) / 2));
        }
    }
}
30
ответ дан 30 November 2019 в 03:53
поделиться

Steve, эта статья могла бы указать на Вас в правильном направлении:
http://www.codeproject.com/KB/combobox/glistbox.aspx

1
ответ дан 30 November 2019 в 03:53
поделиться

В WPF это довольно просто, но если Вы используете winforms, Вы не можете сделать этого с Системой. Windows. Формы. Управление ListBox. Вы можете делать это с управлением ListView или сторонними средствами управления.

0
ответ дан 30 November 2019 в 03:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: