Как я могу реализовать Grid-подобный элемент управления с помощью C # 2010 Express - PullRequest
0 голосов
/ 22 ноября 2010

Мне нужен такой элемент управления:

alt text

Это из Microsoft Word: Вставить => Символы.

  1. В этом диалоговом окне естьэлемент управления в виде сетки со списком символов Unicode;
  2. Вы можете выбрать любой символ;
  3. Отображается Unicode выбранного символа;
  4. Пользователь не может редактировать символ;

Кроме того, мне нужно расширить его возможности: 1. Пользователь может удалить ячейку с выбранным символом;2. Пользователь может добавить список символов (из файла или чего-либо еще).

Я спрашиваю, какие встроенные элементы управления мне следует использовать для реализации этого конкретного элемента управления.

Спасибо.

Петр

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Мне удалось создать простой макет с использованием стандартного DataGridView элемента управления.

DataGridView

private void InitilizeDataGridView(DataGridView view)
{
    var defaultCellStyle = new DataGridViewCellStyle();

    defaultCellStyle.ForeColor = SystemColors.ControlText;
    defaultCellStyle.WrapMode = DataGridViewTriState.False;
    defaultCellStyle.SelectionBackColor = SystemColors.Highlight;
    defaultCellStyle.BackColor = System.Drawing.SystemColors.Window;
    defaultCellStyle.SelectionForeColor = SystemColors.HighlightText;
    defaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
    defaultCellStyle.Font = new Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((0)));

    view.DefaultCellStyle = defaultCellStyle;

    view.MultiSelect = false;
    view.RowHeadersVisible = false;
    view.AllowUserToAddRows = false;
    view.ColumnHeadersVisible = false;
    view.AllowUserToResizeRows = false;
    view.AllowUserToDeleteRows = false;
    view.AllowUserToOrderColumns = true;
    view.AllowUserToResizeColumns = false;

    view.BackgroundColor = SystemColors.Control;

    for(var i = 0; i < 16; i++)
    {              
        view.Columns.Add(new DataGridViewTextBoxColumn { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, Resizable = DataGridViewTriState.False });
    }

    DataGridViewRow row = null;

    for (int index = 32, cell = 0; index < 255; index++, cell++)
    {
        if(cell % 16 == 0)
        {
            if(row != null)
            {
                view.Rows.Add(row);
            }

            row = new DataGridViewRow { Height = 40 };
            row.CreateCells(view);

            cell = 0;
        }

        if (row != null)
        {
            row.Cells[cell].Value = Char.ConvertFromUtf32(index);
        }               
    }            
}
1 голос
/ 22 ноября 2010

В WinForms вы можете добавить Label элементы управления фиксированного размера к FlowLayoutPanel во время выполнения.

Обратите внимание, что это не будет хорошо масштабироваться; не делайте тысячи элементов управления Label.
Если вам нужно большое количество символов, вы можете сделать один скриншот ярлыков, затем добавить элемент управления ScrollBar и обработать событие Scroll, чтобы изменить заголовки ярлыков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...