ListBox DrawItem HotLight 在 OwnerDraw 模式下状态?

2023-11-22

我在用着OwnerDrawFixed作为我的 WinForms 应用程序中自定义 ListBox 控件的 DrawMode。

当用户将鼠标悬停在列表框项上时,即在 MouseMove... 上,我想重新绘制 ListBoxItem 的背景(或执行其他操作)

DrawItemState.HotLight永远不适用于列表框,所以我想知道如何模拟它,如何解决这个问题。


我只花了两年时间就为你找到了答案,但这里是:

DrawItemState.HotLight 仅适用于所有者绘制的菜单,不适用于列表框。对于列表框,您必须自己跟踪该项目:

public partial class Form1 : Form
{
  private int _MouseIndex = -1;

  public Form1()
  { InitializeComponent(); }

  private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
  {
    Brush textBrush = SystemBrushes.WindowText;

    if (e.Index > -1)
    {
      if (e.Index == _MouseIndex)
      {
        e.Graphics.FillRectangle(SystemBrushes.HotTrack, e.Bounds);
        textBrush = SystemBrushes.HighlightText;
      }
      else
      {
        if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
        {
          e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
          textBrush = SystemBrushes.HighlightText;
        }
        else
          e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds);
      }
      e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, textBrush, e.Bounds.Left + 2, e.Bounds.Top);
    }
  }

  private void listBox1_MouseMove(object sender, MouseEventArgs e)
  {
    int index = listBox1.IndexFromPoint(e.Location);
    if (index != _MouseIndex)
    {
      _MouseIndex = index;
      listBox1.Invalidate();
    }
  }

  private void listBox1_MouseLeave(object sender, EventArgs e)
  {
    if (_MouseIndex > -1)
    {
      _MouseIndex = -1;
      listBox1.Invalidate();
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ListBox DrawItem HotLight 在 OwnerDraw 模式下状态? 的相关文章

  • 如何使用Task.WhenAny并实现重试

    我有一个创建多个基于 I O 的任务的解决方案 我正在使用Task WhenAny 来管理这些任务 但通常许多任务会由于网络问题或请求限制等原因而失败 我似乎找不到一个解决方案 使我能够在使用时成功重试失败的任务Task WhenAny 方
  • 多个源文件中包含包含“const”的头文件

    Why does not包含定义的头文件const并被多个源文件包含会产生编译错误multiple definition const in header file h const int num 5 int x Error Multiple
  • Reflection.Emit 中的短格式操作码错误

    我正在制作一种与以下非常相似的小语言hlsl但仅支持像素着色器 该语言使用reflection emit构建实现相同功能的 NET 程序集 我目前正在测试分支指令的实现if在我的一个单元测试中 一个大的if与内if elses 失败并显示以
  • ApiController 操作无法从查询字符串解析数组

    使用 Visual Studio 2012 2 MVC4 Web 应用程序 我有请求发送到我的 ApiController 如下所示 http localhost api keys ids 1 ids 2 ids 3 我的印象是以下方法应该
  • 无法使用 ASP.NET Core 从 JWT 令牌获取声明

    我正在尝试使用 ASP NET Core 实现 JWT 持有者身份验证的非常简单的实现 我从控制器返回的响应有点像这样 var identity new ClaimsIdentity identity AddClaim new Claim
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • C# - 如何将 IntPtr 缓冲区数据保存到文件(最快的方法)?

    我使用此代码将非托管代码中的 IntPtr 缓冲区中的字节保存到文件中 这是一个简单的回调函数 private void callback IntPtr buffer int length byte bytes new byte lengt
  • Code First - 实体框架 - 如何公开外键

    我有以下数据对象 public class Customer System Data Entity ModelConfiguration EntityTypeConfiguration
  • 是否可以用 C# 为 Android 编写应用程序?

    我们都知道Android运行Dalvik VM程序 通常开发人员用 Java 编写程序并将其编译为 Dalvik 字节码 我想知道是否有可能创建一个可以接受 C 代码并将其编译为 Dalvik 字节码的编译器 嗯 这是一种选择 或者您可以在
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • Xamarin 无法从异步获取实例

    我编写了一个通过蓝牙连接到 ESP32 的 Xamarin Forms 应用程序 现在我想从 MainPage xaml 页面的 CustomControl JoystickControl 获取值 我已经这样尝试过了 MainPage xa
  • 让 WIX 在项目中包含引用

    我对 WiX 和设置自定义安装程序完全陌生 所以我对问题的主题表示歉意 我有一个内部业务应用程序 日记 它构建并运行良好 因此我按照教程 官方文档添加 WiX 项目并引用日记的 csproj 然后构建并运行这个最基本版本的 WiX 安装程序
  • Parallel.For 和 Break() 误解?

    我正在研究 For 循环中的并行性中断 看完之后this http tipsandtricks runicsoft com CSharp ParallelClass html and this http reedcopsey com 201
  • 读取所有进程内存以查找字符串变量c#的地址

    我有 2 个用 C 编写的程序 第一个名为 ScanMe 的程序包含一个包含值 FINDMEEEEEEE 的字符串变量 以及一个值为 1546 22915487 的双精度变量 另一个名为 MemoryScan 的程序读取第一个程序的所有内存
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我可以在C中直接比较int和size_t吗?

    我可以比较一个int and a size t像这样的变量 int i 1 size t y 2 if i y Do something 或者我必须输入其中之一 只要满足以下条件 它就是安全的int为零或正数 如果它是负数 并且size t
  • 父窗体中的居中消息框[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以在 net 2 0中将MessageBox居中于父窗体中 我在 C 中确实需要这个并发现中心消息框 C http bytes com topic c sharp answers 26712
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • 使用 wmi 获取活动会话(Win32_LogonSession 还返回非活动/旧会话)

    有没有办法只显示 wmi 的活动会话 问题是 Win32 LogonSession 还显示不活动 断开连接的会话 ManagementScope scope new ManagementScope ManagementPath Defaul
  • 你将如何开始自动化我的工作? - 第2部分

    后续这个问题 https stackoverflow com questions 2796128 how would you start automating my job 在经历了第一波进货 9 小时的复制 粘贴 后 我现在相信我已经满足

随机推荐

  • 如何在 java 中使 JTable 可编辑

    我在 java 中使用 JTable 但它不允许我编辑单元格 private final TableModel dataModel new AbstractTableModel public int getColumnCount retur
  • proxyMode ScopedProxyMode.TARGET_CLASS 与 ScopedProxyMode.INTERFACE

    正如其他 SO 答案所建议的 根据您的需要使用代理模式类型 我仍然很困惑 Configuration ComponentScan public class Application public static void main String
  • Python:更新线程中的参数

    我想知道当该参数在程序主体中获得新值时是否可以启动一个新线程并更新其参数 所以像这样 i 0 def foo i print i time sleep 5 thread start new thread foo i while True i
  • SQL 选择 MAX(COUNT)

    我正在尝试选择具有 MAX 微帖子数的用户 SELECT name count FROM users INNER JOIN microposts ON microposts user id users id GROUP BY users i
  • IntegrityError:错误:列“user_id”中的空值违反了非空约束

    使用 postgres PostgreSQL 9 4 5 我刚刚迁移了一个sqlite3数据库到一个postgresqlD b 由于某种原因 自从这次迁移以来 当我尝试创建用户时 出现了有关user id 这是主键 正在被提升 以前这不是问
  • 当泛型类型设置为 never 时,泛型条件类型解析为 never

    我需要一个泛型类型 当 该属性的 泛型参数为时 该类型可以从指定类型中排除泛型属性never 为了实现这一点 我使用了Omit和条件类型 例如 当通用参数设置为number它的行为符合预期 但是当泛型类型设置为never 类型解析为neve
  • 更改 eclipse 创建 .eclipse、.p2 和其他文件夹的位置

    我看到 eclipse 在我的用户主文件夹中创建了一些文件夹 例如 eclipse p2 等 我想更改此默认文件夹 我想将所有内容保存在 D 位置 我读了这个在 Linux 中更改 eclipse 文件夹但我不明白我必须更改哪个文件 ini
  • 如何在 SQL 中创建 REPLACE PATTERN?

    我有一个很长的 NVARCHAR 变量 我需要在其中替换一些模式 如下所示 DECLARE data NVARCHAR 200 Hello PAT1 stackoverflow PAT2 world PAT3 我需要全部更换 PAT 带有空
  • 分配给设备内存的 CUDA 全局(如 C 语言)动态数组

    因此 我尝试编写一些利用 Nvidia CUDA 架构的代码 我注意到与设备进行复制确实损害了我的整体性能 因此现在我尝试将大量数据移动到设备上 由于这些数据被用于许多函数 我希望它是全局的 是的 我可以传递指针 但我真的很想知道在这种情况
  • 查找两个字符串共享的所有 n 个字长子串的最大长度

    我正在制作一个Python脚本 它可以找到两个字符串共享的所有n个字长的子字符串的 最长可能 长度 忽略尾随标点符号 给定两个字符串 这是一个示例字符串 这也是一个示例字符串 我希望脚本识别出这些字符串具有 2 个共同单词的序列 this
  • Spring Boot Jackson 日期和时间戳格式

    application yml配置 jackson date format yyyy MM dd timestamp format yyyy MM dd HH mm ss serialization write dates as times
  • 这是从文件中读取行并将其拆分为 Rust 中的单词的正确方法吗?

    编者注 此代码示例来自 Rust 1 0 之前的版本 在语法上不是有效的 Rust 1 0 代码 此代码的更新版本会产生不同的错误 但答案仍然包含有价值的信息 我已经实现了以下方法来以二维数据结构返回文件中的单词 fn read terms
  • 缓慢图像缩放的数学

    我有一个带有漫画书布局的 bmp 图像 目前我的代码是这样工作的 如果我右键单击并按住鼠标按钮 我可以在漫画书页面上的一个框架周围绘制一个选取框类型的框 当我释放按钮时 它将放大到该框架 但它是即时的 我希望它有动画效果 因此 不要将 Pi
  • 如何实现 ContentProvider 来向 Gmail、Facebook、Evernote 等提供图像

    我之前的问题 是否可以通过数据 URL 在 Android 上共享图像 与这个问题相关 我已经弄清楚如何在没有将文件写入外部存储的权限的情况下将图像从我的应用程序共享到另一个应用程序 但是 我仍然遇到一些问题行为 当我尝试从手机 Andro
  • 禁用特殊目录上的某些 php 功能

    我想禁用执行一些 php 函数 例如file put content exec eval在特殊目录上 我可以用disable functions在 php ini 中 但如何定义一个特殊的文件夹 例如c poject public 如果您的
  • 解析日期时间格式以获取格式字符串

    我希望能够得到格式字符串来自日期时间字符串 e g 2012 12 08 15 00 00 gt yyyy MM dd HH mm ss 2013 30 01 16 00 gt 年 日 月 时 分 这可能吗 以完全通用的方式很难做到这一点
  • 通过邮件发送 PDF 文件或提供应用程序直接查看文件

    我的 Android 4 应用程序可以创建 PDF 格式的不同报告 我想为用户提供通过邮件发送文件或在任何可以处理 PDF 文件的应用程序中打开文件的选项 目前我使用以下代码 Intent intent new Intent Intent
  • Pandas:根据目标分布从 DataFrame 中采样

    我有一个包含数据集的 Pandas DataFrameD都有一些连续值的实例x x以某种方式分布 比如统一 可以是任何东西 我想画画n样本来自D为此x有一个我可以采样或近似的目标分布 这是来自一个数据集 这里我只取正态分布 我如何从中采样实
  • mkmf 编译 C 扩展时会忽略子文件夹中的文件

    我想这样组织 C 源代码 ext native extension lib Source files are kept in here may contain sub folders native extension c native ex
  • ListBox DrawItem HotLight 在 OwnerDraw 模式下状态?

    我在用着OwnerDrawFixed作为我的 WinForms 应用程序中自定义 ListBox 控件的 DrawMode 当用户将鼠标悬停在列表框项上时 即在 MouseMove 上 我想重新绘制 ListBoxItem 的背景 或执行其