qq_21459085 2024-10-24 15:44 采纳率: 0%
浏览 4
问题最晚将于11月01日00:00点结题

winfrom的datagridview下拉框变成了黑色,渲染不成功

winfrom的datagridview下拉框变成了黑色,只要点了旁边的输入框 再点击下拉框就一定是黑色,渲染不成功,有什么办法能解决吗

img

  • 写回答

22条回答 默认 最新

  • 叫兽-郭老师 Java领域新星创作者 2024-10-24 15:44
    关注

    🕒下午好,题主!目前:🟢[在线]
    📢参考通义千问、由郭老师整理提供!
    📣今日诗号:疏影横斜水清浅,暗香浮动月黄昏。

    WinForms 的 DataGridView 控件中出现下拉框显示为黑色的问题可能是由于控件的绘制事件处理不当或系统主题设置导致的。要解决这个问题,可以尝试以下几种方法:

    方法一:重写绘制逻辑

    你可以尝试重写 DataGridView 的绘制逻辑,以确保下拉列表能够正确显示。

    public class CustomDataGridView : DataGridView
    {
        protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e)
        {
            base.OnCellPainting(e);
    
            if (e.RowIndex < 0 && e.ColumnIndex >= 0)
            {
                // 获取当前单元格的样式
                var cellStyle = this.Columns[e.ColumnIndex].DefaultCellStyle;
    
                // 如果是组合框列并且是编辑模式
                if (this.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && this.EditingControl is ComboBox comboBox)
                {
                    // 设置组合框的背景颜色
                    comboBox.BackColor = cellStyle.BackColor;
                    comboBox.ForeColor = cellStyle.ForeColor;
                }
            }
        }
    }
    

    然后在你的窗体中使用这个自定义的 DataGridView:

    public Form1()
    {
        InitializeComponent();
    
        // 创建一个自定义的 DataGridView
        var customDgv = new CustomDataGridView();
        customDgv.Dock = DockStyle.Fill;
        this.Controls.Add(customDgv);
    
        // 添加组合框列
        var comboCol = new DataGridViewComboBoxColumn
        {
            Name = "ComboColumn",
            HeaderText = "选择"
        };
        comboCol.Items.AddRange(new object[] { "选项1", "选项2", "选项3" });
        customDgv.Columns.Add(comboCol);
    }
    

    方法二:修改系统主题或应用样式

    如果你的问题与操作系统主题有关,可以尝试更改应用程序的主题或强制使用特定的样式。

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
    
        // 应用主题(如果需要)
        // this.ApplyTheme();
    
        // 强制使用系统默认的颜色
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            foreach (DataGridViewCell cell in row.Cells)
            {
                if (cell.OwningColumn is DataGridViewComboBoxColumn)
                {
                    cell.Style.BackColor = SystemColors.Window;
                    cell.Style.ForeColor = SystemColors.ControlText;
                }
            }
        }
    }
    

    方法三:检查并修正控件属性

    确保你的 DataGridView 和其组合框列的属性设置正确。例如,组合框列的 DisplayStyle 属性可能会影响其外观。

    var comboCol = new DataGridViewComboBoxColumn
    {
        Name = "ComboColumn",
        HeaderText = "选择",
        DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton // 或者其他的合适值
    };
    

    以上是几种可能的解决方案。根据你的具体环境和需求选择最适合的方法。如果问题依然存在,请提供更多细节以便进一步诊断。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月24日

悬赏问题

  • ¥15 fastreport怎么判断当前页数
  • ¥15 Kylin-Desktop-V10-GFB-Release-JICAI_02- 2207-Build14-ARM64.iso有没有这个版本的系统啊
  • ¥15 能不能通过蓝牙将传感器数据传送到手机上
  • ¥20 100元python和数据科学实验项目
  • ¥15 根据时间在调用出列表
  • ¥15 R 包chipseeker 安装失败
  • ¥15 Veeam Backup & Replication 9.5 还原问题
  • ¥15 vue-print-nb
  • ¥15 winfrom的datagridview下拉框变成了黑色,渲染不成功
  • ¥20 利用ntfy实现短信推送