代码之家  ›  专栏  ›  技术社区  ›  Peter Lee

如何使用C#2010 Express实现类似网格的控件

  •  0
  • Peter Lee  · 技术社区  · 13 年前

    我需要这样的控制:

    alt text

    这是来自Microsoft Word:Insert=>符号。

    1. 此对话框有一个具有Unicode字符列表的网格控件;
    2. 您可以选择任何字符;
    3. 显示选定字符的Unicode;
    4. 用户不能编辑字符;

    另外,我需要扩展它的功能: 一。用户可以删除选中字符的单元格; 2。用户可以添加字符列表(从文件或其他内容)。

    我在问我应该使用什么内置控件来实现这个特定的控件。

    谢谢。

    彼得

    2 回复  |  直到 13 年前
        1
  •  1
  •   Rohan West    13 年前

    我可以用标准 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);
            }               
        }            
    }
    
        2
  •  1
  •   SLaks    13 年前

    在WinForms中,可以添加固定大小 Label 控件到 FlowLayoutPanel 在运行时。

    请注意,这不会很好地扩展;不要生成数以千计的标签控件。
    如果您需要大量字符,可以在一个屏幕上显示全部标签,然后添加滚动条控件并处理Scroll事件以更改标签标题。