如何使DataGridViewComboBoxColumn选择对齐中心?

时间:2018-08-10 02:02:02

标签: c# winforms datagridviewcomboboxcolumn

在编辑模式下(单击下拉菜单时),我想对齐DataGridViewComboBoxColumn选择文本中心。我在这里找到了一种方法:Align Text in Combobox,以对齐组合框,并尝试向DGV添加EditingControlShowing事件,并像上面的方法一样添加DrawItem事件以对齐组合框,但是没有用。这是代码:

private void MyDGV_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
    {
        ComboBox cb = e.Control as ComboBox;
        if (cb != null)
        {
            cb.DrawItem += new DrawItemEventHandler(cbxDesign_DrawItem);
        }
    }
}
private void cbxDesign_DrawItem(object sender, DrawItemEventArgs e)
{
    // By using Sender, one method could handle multiple ComboBoxes
    ComboBox cbx = sender as ComboBox;
    if (cbx != null)
    {
        // Always draw the background
        e.DrawBackground();

        // Drawing one of the items?
        if (e.Index >= 0)
        {
            // Set the string alignment.  Choices are Center, Near and Far
            StringFormat sf = new StringFormat();
            sf.LineAlignment = StringAlignment.Center;
            sf.Alignment = StringAlignment.Center;

            // Set the Brush to ComboBox ForeColor to maintain any ComboBox color settings
            // Assumes Brush is solid
            Brush brush = new SolidBrush(cbx.ForeColor);

            // If drawing highlighted selection, change brush
            if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
                brush = SystemBrushes.HighlightText;

            // Draw the string
            e.Graphics.DrawString(cbx.Items[e.Index].ToString(), cbx.Font, brush, e.Bounds, sf);
        }
    }
}

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:1)

在您的代码中,您需要添加以下属性以使代码起作用:

private void MyDGV_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))
    {
        ComboBox cb = e.Control as ComboBox;
        if (cb != null)
        {
            //add these 2
            cb.DrawMode = DrawMode.OwnerDrawFixed;
            cb.DropDownStyle = ComboBoxStyle.DropDownList;
            cb.DrawItem += new DrawItemEventHandler(cbxDesign_DrawItem);
        }
    }
}