gpt4 book ai didi

c# - 更改 DataGridViewComboBoxColumn 单元格的背景颜色

转载 作者:行者123 更新时间:2023-12-04 00:04:07 54 4
gpt4 key购买 nike

我创建了一个 DataGridView 对象,其中包含 DataGridViewComboBoxColumn 类型的列,以允许用户从下拉列表中选择值。例如,如果用户选择“高”,我想为组合框的背面着色。但是,它不会为组合框着色,而只会为组合框值着色。

代码是:

dgvOverallRisk.Rows[0].Cells[1].Style.ForeColor = Color.Aqua;
dgvOverallRisk.Rows[0].Cells[1].Style.BackColor = Color.Red;

它看起来像这样:

enter image description here

enter image description here

最佳答案

很巧,我刚刚在ForeColor上回答了一个类似的问题。找到 here .本质上相同,您有两个选择:

  • 设置 FlatStyle .不过,它可能看起来不像你想要的那样。
    theComboBoxColumn.FlatStyle = FlatStyle.Flat;
  • 这对您来说不是一个确切的解决方案,因为我在 Windows 8.1 和
    从你的截图来看,你使用的是 Windows 7。他们有
    不同的显示风格 ComboBox控制,但这
    应该给你一个可能的方向的总体思路
    拿。处理DataGridView.CellPaintingDataGridView.EditingControlShowing手动绘制 ComboBox 的事件细胞。
    this.dataGridView1.CellPainting += this.dataGridView1_CellPainting;
    this.dataGridView1.EditingControlShowing += this.dataGridView1_EditingControlShowing;

    this.dataGridView1.Rows[0].Cells[1].Style.ForeColor = Color.DarkRed;
    this.dataGridView1.Rows[0].Cells[1].Style.BackColor = Color.Bisque;
    this.dataGridView1.Rows[1].Cells[1].Style.ForeColor = Color.SpringGreen;
    this.dataGridView1.Rows[1].Cells[1].Style.BackColor = Color.Purple;

  •     // Paint the cell when not in edit mode.
    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
    if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
    {
    if (this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] is DataGridViewComboBoxCell)
    {
    var cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell;
    var foreColor = cell.Style.ForeColor.Name == "0" ? Color.Black : cell.Style.ForeColor;

    e.Paint(e.ClipBounds, DataGridViewPaintParts.Border);
    e.Paint(e.ClipBounds, DataGridViewPaintParts.ContentBackground);

    using (Brush forebrush = new SolidBrush(foreColor))
    using (Brush backbrush = new SolidBrush(cell.Style.BackColor))
    using (StringFormat format = new StringFormat())
    {
    Rectangle rect = new Rectangle(e.CellBounds.X + 1, e.CellBounds.Y + 1, e.CellBounds.Width - 19, e.CellBounds.Height - 3);
    format.LineAlignment = StringAlignment.Center;

    e.Graphics.FillRectangle(backbrush, rect);
    e.Graphics.DrawString(cell.FormattedValue.ToString(), e.CellStyle.Font, forebrush, rect, format);
    }

    e.Paint(e.ClipBounds, DataGridViewPaintParts.ErrorIcon);
    e.Paint(e.ClipBounds, DataGridViewPaintParts.Focus);
    e.Handled = true;
    }
    }
    }

    // Paint the cell in edit mode.
    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
    if (this.dataGridView1.CurrentCellAddress.X == combo.DisplayIndex)
    {
    ComboBox cb = e.Control as ComboBox;
    if (cb != null)
    {
    cb.DropDownStyle = ComboBoxStyle.DropDownList;

    cb.DrawMode = DrawMode.OwnerDrawFixed;
    cb.DrawItem -= this.cb_DrawItem;
    cb.DrawItem += this.cb_DrawItem;
    }
    }
    }

    // Manually paint the combobox.
    private void cb_DrawItem(object sender, DrawItemEventArgs e)
    {
    ComboBox cb = sender as ComboBox;

    // Non-sourced vs sourced examples.
    string value = cb.Items[e.Index].ToString();
    // string value = (cb.DataSource as DataTable).Rows[e.Index].ItemArray[SourceColumnIndex];

    if (e.Index >= 0)
    {
    using (Brush forebrush = new SolidBrush(cb.ForeColor))
    using (Brush backbrush = new SolidBrush(cb.BackColor))
    {
    e.Graphics.FillRectangle(backbrush, e.Bounds);
    e.DrawBackground();
    e.DrawFocusRectangle();
    e.Graphics.DrawString(value, e.Font, forebrush, e.Bounds);
    }
    }
    }

    Back/Fore-ground colored DataGridViewComboBoxCell examples

    关于c# - 更改 DataGridViewComboBoxColumn 单元格的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31920794/

    54 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com