DataGridView 行:半透明选择或选择上的行边框

2024-05-26

我有一个 DataGridView,其中每行的背景根据数据绑定项而不同。但是,当我选择一行时,我无法再看到它原来的背景颜色。

为了解决这个问题,我想到了两个解决方案:

我可以使选择半透明,从而可以查看两个选定的行是否具有不同的背景颜色。

或者;我可以完全删除选择颜色,并在所选行周围绘制边框。

哪种选择更容易?我该如何做到这一点?

这是一个 WinForm 应用程序。

编辑:我最终使用了你的一些代码,漂流

    private void dgv_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
    {
        if (dgv.Rows[e.RowIndex].Selected)
        {
            var row = dgv.Rows[e.RowIndex];
            var bgColor = row.DefaultCellStyle.BackColor;
            row.DefaultCellStyle.SelectionBackColor = Color.FromArgb(bgColor.R * 5 / 6, bgColor.G * 5 / 6, bgColor.B * 5 / 6);
        }
    }

这给人一种半透明选择颜色的印象。感谢您的帮助!


如果要在选定的行周围绘制边框,可以使用DataGridView.RowPostPaintEvent http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowpostpaint.aspx,并“清除”选择颜色,您可以使用DataGridViewCellStyle.SelectionBackColor http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcellstyle.selectionbackcolor.aspx and DataGridViewCellStyle.SelectionForeColor http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcellstyle.selectionforecolor.aspx特性。

例如,如果我像这样设置行单元格样式

row.DefaultCellStyle.BackColor = Color.LightBlue;
row.DefaultCellStyle.SelectionBackColor = Color.LightBlue;
row.DefaultCellStyle.SelectionForeColor = dataGridView1.ForeColor;

我可以将此代码添加到RowPostPaintEvent

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    if (dataGridView1.Rows[e.RowIndex].Selected)
    {
        using (Pen pen = new Pen(Color.Red))
        {
            int penWidth = 2;

            pen.Width = penWidth;

            int x = e.RowBounds.Left + (penWidth / 2);
            int y = e.RowBounds.Top + (penWidth / 2);
            int width = e.RowBounds.Width - penWidth;
            int height = e.RowBounds.Height - penWidth;

            e.Graphics.DrawRectangle(pen, x, y, width, height);
        }
    }
}

选定的行将显示如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DataGridView 行:半透明选择或选择上的行边框 的相关文章

随机推荐

  • 如何使用redis发布/订阅

    目前我正在使用node js和redis来构建应用程序 我使用redis的原因是因为发布 订阅功能 该应用程序只是在用户进入用户或离开房间时通知经理 function publishMsg channel mssage redisClien
  • 使用 Azure 数据工厂将数据加载到 Snowflake 时遇到问题

    我正在尝试使用 Azure 数据工厂将一个小数据表从 Azure SQL 导入到 Snowflake 中 通常我使用这种方法不会有任何问题 https learn microsoft com en us azure data factory
  • 列太多的表的缺点

    我有一些数据需要放入 PostgreSQL 数据库中 这些数据与学校有关 所以有很多与学校相关的属性 大部分是小整数 浮点数或小文本 所有数据每年都会发生变化 所以我正在创建一个名为的实体YearlyData并将属性放在那里 但问题是 属性
  • 在“dotnet”中添加带有本地包文件的包

    使用dotnet命令行工具 如何添加对现有本地包的引用not用 NuGet 下载的 我尝试过将本地包添加到项目中bar with dotnet dotnet add package Users sakra foo bin Debug foo
  • 如何获取具有重复属性名称的对象中的最大属性值?

    假设我有一个包含以下值的数组 数组名称是 订阅者 1 month 2019 07 24 subs 2 2 month 2019 07 31 subs 3 3 month 2019 08 01 subs 2 4 month 2019 08 0
  • 词典类

    在 Java 字典类中 单个键是否可以有多个值 首先 关于字典类 该类被认为已过时 文档建议使用 Map 代替 您正在寻找的这种集合称为多重映射 您可以使用列表自己实现一个 但这很乏味 您可能想要使用 Apache Collections
  • SQL Server 2008:将存储过程(动态列)的结果与 SELECT 语句的结果连接起来

    我的结果是由这个存储过程 https stackoverflow com questions 15076215 sql server 2008 multiple joined columns to rows 我想将这些结果与另一个表中的数据
  • 将外部“data.json”文件导入到 javascript 变量中

    这可能是重复的 但我无法找到以前提出的问题来回答我的问题 我想将 json 文件导入到我的 javascript 中 如下所示 var array data json or var array getJson data json 我知道这两
  • 无法将类型 System.Linq.IQueryable 隐式转换为字符串

    我有两个名为 Rank 和 CrewMembers 的表 我想根据 CrewMember 的 id 获取 Rank 表中存在的排名名称 我已将船员 ID 作为参数传递 并在此基础上该方法将返回该特定船员的等级 这就是我的代码 public
  • 未找到 Gem 命令

    我已经在 Ubuntu 10 10 32 位上安装了 gem apt get install gem y 但当我尝试跑步时 gem install something gem 我收到未找到命令的错误 bash gem command not
  • python中漂亮的多项式打印

    我将使用什么格式的字符串来打印表达式 例如 2x 3 3x 2 6x 1 注意标志两侧的空格 30 1x 2 60 2x 90 3 和 如果简单的话 x 2 2x 1 如果系数为 1 则 x 中的项没有系数 我尝试在强制符号之间插入填充 如
  • 图片是在外部库中加载的,如何用webpack加载它们?

    首先 我需要说的是 我对 Webpack 的基础知识知之甚少 这可能就是我找不到解决方案的原因 所以我知道为了加载图像我需要一个路径而不是仅仅将其作为字符串输入require path to image 然后我得到了一个外部库 我需要在其中
  • 如何停止“已将数据库上下文更改为...”消息

    有什么办法可以阻止Changed database context to 当 SQL 片段有一个时的消息USE database in it 您需要设置错误级别 http msdn microsoft com en us library m
  • C++ 用纯虚方法重写纯虚方法

    用另一个纯虚拟方法覆盖一个纯虚拟方法是否有意义 是否存在任何功能差异或代码风格原因使您更喜欢以下选项之一而不是另一个 class Interface public virtual int method 0 class Abstract pu
  • 将 PDFMaker 与 MS Outlook 结合使用

    我想将 Adob e PDFMaker 插件与 MS Outlook 2013 一起使用 使用 PDFMAKER 将多封电子邮件保存为 pdf https stackoverflow com questions 44723984 savin
  • Android Studio 中的 Gradle 错误:找不到“com.android.tools.build:gradle:7.1.1”。

    我正在尝试将项目从 Eclipse 导入到 Android Studio 中 在 Eclipse 中 我将其导出到 gradle 然后将其导入到 Android Studio 中 注意 我是 gradle 新手 对问题没有洞察力 现在我得到
  • 在 Magento 中编辑产品时 MySQL 错误

    这是 v 1 4 1 1 Magento 从 v 1 3 2 4 升级当我尝试编辑产品时 出现错误消息 exception Zend Db Statement Exception with message SQLSTATE 23000 In
  • 如何设置 NSButton OSX 的背景颜色

    我想设置 NSButton 的背景颜色 属性检查器中没有任何内容 所以我想知道是否有任何方法可以以编程方式完成此操作 系统控件需要遵循 Apple 的外观和感觉 因此您无法轻松更改背景颜色 如果你想完成这个 你需要子类化 NSButton
  • 如何在空格上分割字符串并保留单词的偏移量和长度

    我需要将字符串拆分为单词 但还需要获取单词的起始和结束偏移量 因此 例如 如果输入字符串是 input string ONE ONE ONE t TWO TWO ONE TWO TWO THREE 我想得到 ONE 0 2 ONE 5 7
  • DataGridView 行:半透明选择或选择上的行边框

    我有一个 DataGridView 其中每行的背景根据数据绑定项而不同 但是 当我选择一行时 我无法再看到它原来的背景颜色 为了解决这个问题 我想到了两个解决方案 我可以使选择半透明 从而可以查看两个选定的行是否具有不同的背景颜色 或者 我