在单个 DataGridView 单元格中设置两种颜色的文本

2023-12-03

我的 C# Windows 应用程序中有一个数据网格视图。 我需要更改单元格中最后 5 个字符的颜色,但我不知道该怎么做。

我在 CellPainting 事件中有此代码,但不起作用:

private void dgvSorteados_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            int sector = 0;
            int.TryParse(dgvSorteados.Rows[e.RowIndex].Cells[0].Value.ToString(), out sector);
            if (sector == 3 && rdbSenete3.Checked)
            {
                if (dgvSorteados.Columns[1].Index == e.ColumnIndex && e.RowIndex >= 0)
                {
                    string bolillas = (String)e.Value;
                    string[] bolillasArray = bolillas.Split('-');
                    string bolillasMin = string.Join("-", bolillasArray.Take(12));
                    string bolillasResto = string.Join("-", bolillasArray.Skip(12));

                    using (Brush gridBrush = new SolidBrush(dgvSorteados.GridColor), backColorBrush = new SolidBrush(e.CellStyle.BackColor))
                    {
                        // Erase the cell.
                        e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
                        // Draw the text content of the cell, ignoring alignment. 
                        e.Graphics.DrawString((String)bolillasMin, e.CellStyle.Font, Brushes.Black, e.CellBounds.X + 2, e.CellBounds.Y + 2, StringFormat.GenericDefault);
                        if (!string.IsNullOrEmpty(bolillasResto))
                        {
                            e.Graphics.DrawString("-" + (String)bolillasResto, e.CellStyle.Font, Brushes.Crimson, e.CellBounds.X + 2 + bolillasMin.Length, e.CellBounds.Y + 2, StringFormat.GenericDefault);
                        }
                        e.Handled = true;
                    }
                }
            }
        }

此代码显示没有行的 DataGridView。


您可以使用以下方法来避免背景绘制代码e.PaintBackground称呼。另外,只有当ContentForeGround正在涂漆。使用e.PaintParts来识别绘画操作。请参阅我的示例代码以了解其用法。它需要调整,但你会得到一个想法。

示例代码:

void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
    if (e.RowIndex != -1 && e.Value != null && e.Value.ToString().Length > 5 && e.ColumnIndex == InterestedColumnIndex)
    {
        if (!e.Handled)
        {
            e.Handled = true;
            e.PaintBackground(e.CellBounds, dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected);
        }
        if ((e.PaintParts & DataGridViewPaintParts.ContentForeground) != DataGridViewPaintParts.None)
        {
            string text = e.Value.ToString();
            string textPart1 = text.Substring(0, text.Length - 5);
            string textPart2 = text.Substring(text.Length - 5, 5);
            Size fullsize = TextRenderer.MeasureText(text,e.CellStyle.Font);
            Size size1 = TextRenderer.MeasureText(textPart1, e.CellStyle.Font);
            Size size2 = TextRenderer.MeasureText(textPart2, e.CellStyle.Font);
            Rectangle rect1 = new Rectangle(e.CellBounds.Location, e.CellBounds.Size);
            using (Brush cellForeBrush = new SolidBrush(e.CellStyle.ForeColor))
            {
                e.Graphics.DrawString(textPart1, e.CellStyle.Font, cellForeBrush, rect1);
            }
            rect1.X += (fullsize.Width - size2.Width);
            rect1.Width = e.CellBounds.Width;                    
            e.Graphics.DrawString(textPart2, e.CellStyle.Font, Brushes.Crimson, rect1);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在单个 DataGridView 单元格中设置两种颜色的文本 的相关文章

随机推荐

  • 如何在 Windows 上将 UTF-8 字符串打印到 std::cout?

    我正在用 C 编写一个跨平台应用程序 所有字符串均在内部进行 UTF 8 编码 考虑以下简化代码 include
  • Angular 2 不使用 CORS 保存我的身份验证 Cookie

    我有一个 Angular 2 应用程序 它应该向 Node Express 后端进行身份验证 向后端发送登录请求并接收 cookie 它应该在每个连续请求中发送此 cookie 但事实并非如此 我的角度应用程序中有 class 登录服务 p
  • SCCM 不会更新手动安装的软件

    客户端计算机均为 Windows 10 专业版 64 位 如果我们有MyCompanyApp msi通过SCCM安装后 我们发现使用SCCM可以成功更新它 那里一切正常 然而 如果我要跑MyCompanyApp msi通过双击 MSI 或运
  • 在 wxPython 应用程序中实现我自己的事件循环

    我正在编写一个 wxPython 应用程序 它将进行大量的数据分析和显示 到目前为止 当两个线程尝试同时更改 GUI 中的某些内容时 我编写的方式会导致出现问题 我想做的是建立自己的在主线程上运行的简单队列这样我就可以确保 UI 更新一次发
  • 如何在Python中转换指数并去掉“e+”?

    我从 Python 开始 最近遇到了一个具有大值的数据集 我的一个字段有一个值列表 如下所示 1 3212724310201994e 18 注意e 18在数字的末尾 如何将其转换为浮点数并删除指数而不影响该值 首先 数量is已经是浮点数 您
  • 为什么我的 sizeWithFont:constrainedToSize:lineBreakMode: 总是返回零?

    我正在尝试制作一个 UITableViewCell 根据它显示的字符串的长度来调整其高度 但我对这种方法很着迷 这是我所得到的 NSString text A really long string in here CGSize theSiz
  • 当前曲目的音频信息 iOS Swift

    假设正在播放一首曲目 通过任何应用程序 我想获取歌曲信息 例如名称 当您锁定手机时 它会与专辑封面一起显示在屏幕上 我如何使用 swift 获取该信息 这是获取音频信息的示例函数 import MediaPlayer var url NSU
  • GridView 编辑按钮需要单击 2 次

    当按下 gridview 中的编辑按钮时 只有点击 2 次后才会显示编辑模板 另一个问题 要编辑的字段的值最初显示在 gridview 中 但不显示在编辑模板中 ASP代码
  • 更改几天前的 Php 日期

    我正在 Joumla 上使用一个组件 该组件返回以下格式的日期 2 个月零 6 天前 但我需要像这样显示日期 xx 秒前 或 xx 分钟前 或 xx 小时前 或 xx 天前 开发人员告诉我必须修改这段代码 但我对 Php 完全陌生 今天我一
  • 如何使用jtextfield搜索jtable中的数据?

    我在 netbeans 中创建 jtable 并在 jtable 中填充数据库中的数据 但我无法使用 jtextfield 在 jtable 中实现搜索选项 任何人都可以指导我吗 谢谢 为了搜索表格上的内容 您必须将原始内容存储在某个变量中
  • MongoDB 聚合 - 合并对象数组

    我想使用聚合框架获得 MongoDB 3 4 中对象中所有数组的并集 这是输入 id 001 name something important part foo 1 2 3 bar 4 5 x 6 7 这应该是输出 id 001 name
  • 更改 AlertDialog 按钮对齐方式

    为更改 AlertDialog support v7 之一 内按钮的对齐方式而奋斗了几个小时 因为它们不会根据区域设置视图方向自行对齐 尽管整个应用程序确实左对齐 AlertDialog 中的文本也左对齐 你说为什么会发生这种情况 我正在以
  • subprocess.Popen shell=True 到 shell=False

    我知道对子进程使用 shell True 是不好的做法 但是对于这行代码 我不确定如何使用 shell False 执行它 subprocess Popen candump tA can0 can1 gt gt s file name sh
  • 在 Pandas 中重采样和进行线性插值

    我有一个数据 其中包含Id DateTime and Value柱子 数据应该每 10 分钟收集一次 然而 有些数据的间隔超过 10 分钟 例如间隔超过 20 分钟 1 小时 2 小时 收集一整月的数据 我想使用重新采样并在我的Value
  • 在 Mac 10.8 上从另一个本地设备访问 Meteor 本地 Web 服务器

    我正在开发一个 Meteor 网站 方便地 它将使用简单的命令在本地主机上运行 meteor 但是 我希望能够从本地网络上的其他计算机访问该网站 我想这样做的主要原因是为了在移动设备上查看和测试应用程序 我运行的是 Mac Mountain
  • 如何防止 Firebase 匿名用户令牌过期

    我使用的是 Firebase 应用程序的匿名身份验证 我刚刚注意到我现在有超过 100 个匿名用户注册 尽管我所做的只是测试该应用程序 看起来用户令牌的过期时间很短 一旦过期 下次登录就会创建一个新用户 避免这种情况的最佳方法是什么 我大概
  • 如何禁止不在服务器中的人

    我想知道是否可以通过以下方式禁止某人User ID 通常 要禁止某人 您可以使用GuildMember和 ban method GuildMember ban However 如果用户不在您想要禁止他们加入的公会中 则不可能获得他们的Gui
  • OpenGL:将 VBO 与 std::vector 结合使用

    我正在尝试加载一个对象并使用 VBO 和 glDrawArrays 来渲染它 问题是像这样的简单浮点指针float f 在我的情况下不起作用 因为我超过了该指针可以存储的值的限制 所以我的解决方案是使用向量 而且它不起作用 这是我的代码 u
  • 在 .NET Winforms 应用程序中保存设置[重复]

    这个问题在这里已经有答案了 可能的重复 存储 NET 应用程序的用户设置的最佳方式是什么 我发现了很多关于如何从 Winforms 应用程序保存应用程序设置 每个用户 的非常不同的示例 我想在 C 中执行此操作的正确方法非常简单 希望有人能
  • 在单个 DataGridView 单元格中设置两种颜色的文本

    我的 C Windows 应用程序中有一个数据网格视图 我需要更改单元格中最后 5 个字符的颜色 但我不知道该怎么做 我在 CellPainting 事件中有此代码 但不起作用 private void dgvSorteados CellP