(ListView?)-像 Windows 资源管理器中那样进行控制

2023-11-30

我想知道是否有任何方法可以在插入设备时制作一个类似于 Windows 资源管理器自动启动的控件。

enter image description here

我原以为这可能是一个或多或少经过修改的列表视图控件,但我无法通过谷歌找到任何东西。我还检查了许多 CodeProject 页面。

有谁知道我在哪里可以获得控制权或者我如何自己制作一个? (我不太擅长 OwnerDraw :P)

Thanks.


实际上调整一个ListView并不比主人画它容易。这是一个例子,表明它实际上是多么简单。

您只需编写一个事件的脚本(DrawItem)然后你就完成了。

这段代码假设:

  • LV 的视图设置为列表
  • 您已将合适的 ImageList 添加到表单中
  • 您已将 LV 的 OwnerDraw 设置为 true
  • 您已添加两列来保存两个标签中显示的文本
  • 您已使第一列足够宽以容纳绘制的全部内容
  • 您已将 LV 的 FontSize 设置为与图像的高度一样大(例如 32)
  • 将适当的 ImageIndex 值分配给 LV 的 Items

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
  Point point0 = new Point(e.Bounds.Left, e.Bounds.Top);
  Point point1 = new Point(imageList1.ImageSize.Width + 10, e.Bounds.Top + 5);
  Point point2 = new Point(imageList1.ImageSize.Width + 10, e.Bounds.Top + 25);
  Size size = new Size(listView1.ClientRectangle.Width, e.Bounds.Height);
  Rectangle R = new Rectangle(point0, size);
  Font F1 = new Font(listView1.Font.FontFamily, 11f, FontStyle.Bold);
  Font F2 = new Font(listView1.Font.FontFamily, 10f);

  if (e.Item.Focused) e.Graphics.FillRectangle(Brushes.LightBlue, R);
    else if (e.ItemIndex % 2 == 1) e.Graphics.FillRectangle(Brushes.GhostWhite, R);
  e.Graphics.DrawImage(imageList1.Images[e.Item.ImageIndex], point0 );
  e.Graphics.DrawString(e.Item.Text, F1, Brushes.Black, point1);
  e.Graphics.DrawString(e.Item.SubItems[1].Text, F2, Brushes.Black, point2);
  F1.Dispose(); F2.Dispose();
}

请注意,我已经硬编码了一些颜色来绘制每隔一行以及焦点项目。这些颜色确实应该使用各自的系统颜色。我想到了这些:

 SolidBrush brush0 = new SolidBrush(SystemColors.ControlLight);
 SolidBrush brush1 = new SolidBrush(SystemColors.Highlight);

我使用的是分配给 LV 的字体,但大小适中。显然,或多或少的任何东西,尤其是各种偏移量,都可以根据您的喜好进行配置。但使用的颜色System.Colors集合是与用户的 Windows 主题保持一致的好方法。

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

(ListView?)-像 Windows 资源管理器中那样进行控制 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l

随机推荐

  • Linux下C语言清除串口数据?

    我正在测试发送和接收程序 代码如下 main 函数如下 include lib h int fd int initport int fd struct termios options Get the current options for
  • C++ 变暖 std 向量

    为什么第二次填充 std vector 更快 即使从一开始就预留了空间 int total 1000000 struct BaseClass float m 16 int id BaseClass int id id id int main
  • Laravel 5.7 电子邮件验证路由

    Laravel 5 7 添加了电子邮件验证功能 但在我的项目中 我不使用默认的路由名称 而是出于自己的目的添加了前缀 现在 当我添加以下代码来添加验证路由时 它显示错误 Auth routes verify gt true 错误消息表明ve
  • Python下载文件

    我不确定该怎么做 一种方法是 import urllib request urllib request urlretrieve www example com file tar file tar 另一种方法是 import urllib r
  • 调用原生 Javascript 类型的方法,无需使用 () 包装

    在 Javascript 中 我们可以直接调用字符串文字上的方法 而无需将其括在圆括号内 但不适用于其他类型 例如数字或函 数 这是一个语法错误 但是 Javascript 词法分析器需要将这些其他类型括在圆括号中是否有原因 例如 如果我们
  • 这个承诺看起来正确吗?

    这似乎应该将数据传递到我的范围 但事实并非如此 下面的代码是否有任何直接跳出的错误 angular module Lunch services factory LunchMates q http gt LunchMates getLunch
  • 如何在 PHP 中使用 scandir 只获取图像?

    有没有办法只获取带有扩展名的图像jpeg png gif使用时等 dir tmp files1 scandir dir 您可以使用glob images glob tmp jpeg gif png GLOB BRACE 如果您需要不区分大小
  • 将 array_multisort() 与自定义函数一起使用[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我有以下数组 我想根据另一个数组对其进行排序 而不是DESC or ASC array array note gt array test test1 test2 test3 test4
  • 在具有 Html 服务的站点中显示电子表格数据 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我显示 我想做的事情与此类似tutorial但我不想使用 UI 服务来显示表格 而是想使用 HTML 服务 有人从这个question提到您可以使用
  • 不使用 try except 填充字典

    假设我有字典 并且我想用一些键和值填充它 第一个字典是空的 假设我需要这个字典作为计数器 例如计算字符串中的一些键 我有这样的方法 myDic try myDic desiredKey 1 except KeyError myDic des
  • 如何让 Apache POI 和 JAXB 协同工作?

    java lang ClassNotFoundException org apache xmlbeans XmlObject 当我运行我的代码时出现该错误 好吧 没关系 我只是忘记获取 XMLBeans 但它已经退役 我在他们的档案中找不到
  • 在javascript中调用并应用[重复]

    这个问题在这里已经有答案了 可能的重复 链调用和apply在一起是什么意思 我发现了一些这样的代码 function fun return Function prototype call apply Array prototype slic
  • 选择具有所有缺失值的字符变量

    我有一个包含大约 3 000 个变量的 SAS 数据集 我想删除所有值都缺失的字符变量 我知道如何对数字变量执行此操作 我特别想知道字符变量 我需要使用基本 SAS 来完成这项工作 但这可能包括 proc SQL 这就是为什么我也将这个标记
  • perl 从日期中减去一个月

    我得到格式为 dd mm YYYY 的日期 并尝试使用 Perl 减去一个月 示例 12 07 2013 gt 12 06 2013 30 09 2013 gt 31 08 2013 我应该使用 Date Calc 吗 有任何想法吗 Tha
  • C#中如何获取CPU使用率?

    我想获取 C 中应用程序的总体 CPU 使用率 我找到了很多方法来深入了解进程的属性 但我只想要进程的 CPU 使用率 以及您在 TaskManager 中获得的总 CPU 量 我怎么做 您可以使用性能计数器班级来自系统诊断 像这样初始化
  • Haskell 中的大规模设计? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 设计 构造大型函数式程序 尤其是在 Haskell 中 的好方法是什
  • 获取字符串列表的哈希值,无论顺序如何

    我想写一个函数GetHashCodeOfList 它返回字符串列表的哈希码 无论顺序如何 给定 2 个具有相同字符串的列表应该返回相同的哈希码 ArrayList list1 new ArrayList list1 Add String1
  • 将多个 XML 转换为 JSON 列表

    我想使用 PowerShell 脚本将具有相同 XML 属性格式的多个 XML 文件转换为 JSON 文件 这个想法是创建一个 JSON 列表 其中每个项目都是 XML 文件的 JSON 表示形式 可行吗 输入和输出的示例 Input Fi
  • 尝试在托管 bean 构造函数中访问 @EJB bean 时出现 NullPointerException

    我有一个 EJB 服务 Stateless public class SomeService 我想将其注入到 viewscoped bean 中并用它进行初始化 ManagedBean ViewScoped public class Vie
  • (ListView?)-像 Windows 资源管理器中那样进行控制

    我想知道是否有任何方法可以在插入设备时制作一个类似于 Windows 资源管理器自动启动的控件 我原以为这可能是一个或多或少经过修改的列表视图控件 但我无法通过谷歌找到任何东西 我还检查了许多 CodeProject 页面 有谁知道我在哪里