组合框在所选项目上绘制图像

2024-02-20

当选择该项目时,我尝试从组合框中的图像列表中绘制图像。

我能够绘制图像,但是当onSelctedIndexChanged活动结束,我失去了我的形象。

我的组合框已经有DrawMode.OwnerDrawFixed.

我有一个ListImage名为 ImageList 的控件,包含 10 张图片。

对于我的简短示例,我只需要在 ComboBox 中绘制 ImageList 位置 1 处的图像,这就是我得到的原因this.ImageList.Draw(g, 0, 0, **1**);

protected override void OnSelectedIndexChanged(EventArgs e)
{
    base.OnSelectedIndexChanged(e);
    
    if (this.SelectedIndex > -1)
    {
      var g = this.CreateGraphics();
      this.ImageList.Draw(g, 0, 0, 1);   
    }
}

可能我没有订阅正确的活动。有什么建议吗?

见下图,其中有一个断点SelectedIndexChanged图像绘制完成后。它有效,但活动结束后我失去了我的形象。


更改您的组合框DrawMode https://msdn.microsoft.com/en-us/library/system.windows.forms.drawmode(v=vs.110).aspx to OwnerDrawVariable.
使用DrawItem https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.drawitem(v=vs.110).aspx事件来从 ComboBox 项边界内的源(在本例中为 ImageList)绘制图像。

如果组合框下拉样式 https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.dropdownstyle(v=vs.110).aspx被设定为DropDownList,图像将显示在选择框中;如果设置为DropDown,仅绘制文本。

这里,仅当鼠标点悬停在 ListControl 的项目上时才绘制 Focus 矩形,而在选择项目时则不会使用它,这是由以下因素决定的:
(e.State.HasFlag(DrawItemState.Focus) && !e.State.HasFlag(DrawItemState.ComboBoxEdit)).

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index < 0) return;
    var cbo = sender as ComboBox;
    Color foreColor = e.ForeColor;

    if (e.State.HasFlag(DrawItemState.Selected) && !(e.State.HasFlag(DrawItemState.ComboBoxEdit))) {
        e.DrawBackground();
        e.DrawFocusRectangle(); // <= could be removed for a cleaner rendering
    }
    else {
        using (var brush = new SolidBrush(cbo.BackColor)) {
            var rect = e.Bounds;
            rect.Inflate(1, 1);
            e.Graphics.FillRectangle(brush, rect);
        }
        foreColor = cbo.ForeColor;
    }
    TextRenderer.DrawText(e.Graphics, cbo.GetItemText(cbo.Items[e.Index]), e.Font,
        new Point(e.Bounds.Height + 10, e.Bounds.Y), foreColor);

    e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
    e.Graphics.DrawImage(imageList1.Images[e.Index],
                         new Rectangle(e.Bounds.Location,
                         new Size(e.Bounds.Height - 2, e.Bounds.Height - 2)));
}

The 神奇数字 here (10, -2) 只是偏移量:
e.Bounds.Height + 10 =>图像右侧 10 个像素。
e.Bounds.Height -2 => 比 少 2 个像素item.Bounds.Height.

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

组合框在所选项目上绘制图像 的相关文章

随机推荐

  • 如何从 matplotlib 获取 AxesImages

    所有 我使用这样的代码来绘制图像 import matplotlib pyplot as plt plt imshow array cmap jet plt show 但是 现在我想得到句柄 im of im plt imshow arra
  • 应该学习没有 jQuery 的 angularjs 吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是客户端 JavaScript 的新手 在一个网络项目中 我发现了 AngularJS 并使用了一些基础知识 我应该学习 jQuery 还是只
  • laravel nova 隐藏索引页面上的编辑按钮

    如何禁用 nova 索引页面上的编辑 删除按钮并仍然允许在详细信息页面中 如果我将创建一个策略 这将禁用到处的操作 我想允许在详细信息页面中编辑和删除 但只想删除这些按钮从索引 正在做类似的事情 public function update
  • 使用 rvest 抓取时,在缺失值的地方输入 NA

    我想用rvest抓取一个页面 其中包含最近一次会议上演讲的标题和运行时间 然后将这些值组合成一个tibble library tibble library rvest url lt https channel9 msdn com Event
  • 使用动态类型从匿名对象获取值是不好的做法吗?

    注意 我的问题与 ASP Net 无关 我有一个使用 LINQ 与匿名集合绑定的 GridView 我希望在网格中的事件处理程序中从绑定对象获取一个值 该对象无法转换为任何静态类型 因为它的类型是匿名的 为了解决这个问题我使用动态类型来获取
  • Android - 使用意图从手机内存中打开文件

    我正在开发一个应用程序 它将手机中的 txt 文件作为输入并将其打印在 TextView 上 public class MainActivity extends AppCompatActivity Button button Intent
  • Android中位图压缩后如何保存Exif数据

    我需要从 SD 卡获取图像 创建 旋转并保存更改后的图像 我尝试使用这段代码 Bitmap original BitmapFactory decodeFile file getAbsolutePath ExifInterface origi
  • 如何在具有融化数据的 ggplot 中缩放密度图(对于多个变量)

    我有一个融化的数据集 其中还包括从正态分布生成的数据 我想根据正态分布绘制数据的经验密度函数 但生成的两个密度图的比例不同 我可以找到两个单独数据集的这篇文章 标准化 ggplot 中叠加密度图的 x 尺度 https stackoverf
  • 如何让活动指示器等待函数

    我想使用活动指示器来显示我的函数正在加载 它运行得如此之快 我可以看到我的活动指示器 但该功能尚未完成加载 问题 当函数真正完成运行时 如何使用使我的活动指示器为 false 这是我的代码 public MainPage Initializ
  • 如何清除Docker任务历史记录

    当以 Swarm 模式运行 docker 时 过去任务的历史记录会随着 docker 服务的更新而累积 跑步docker node ps显示任务日志 如何在不删除服务的情况下清除此日志 您可以通过运行以下命令来调整 swarm 中的历史记录
  • IE9拒绝加载自定义字体?

    我正在尝试让 IE9 显示自定义字体 应该很容易 研究了大量的谷歌网站 甚至 stackoverflow 问题 这就是我所拥有的 font face font family BrushstrokePlain src url fonts BR
  • 了解 git rev-list

    在寻找 git hook 示例时 我遇到了以下帖子 https github com Movidone git hooks blob master pre receive https github com Movidone git hook
  • Stackdriver 监控图表的算术运算

    我正在尝试为我的服务提供的自定义指标设置 Stackdriver 仪表板 特别是我从一般开始custom grpc time ms指标是一个量规并且有status上面有标签 我希望能够设置一个图表并针对指标的成功率发出警报 类似于count
  • Azure AppInsights - Http 结果代码故障

    我们已经在Azure中配置了API WebApp 然后连接了App Insights Log以获取失败时的详细信息 我们正在 APIM 上进行负载测试 有一次 我们开始收到 500 错误代码 这意味着应用程序级别存在问题 当我们查看详细信息
  • 何时使用 C++forward_list

    我对 C 有点陌生 正在阅读 C 编程语言 第 4 版 一书 在阅读 STL Containers 章节时 书中对forward list有介绍 forward list 单链表 基本上是一个优化的列表 对于空的和非常短的列表 空的forw
  • 优化整数系数列表与其长整数表示之间的转换

    我正在尝试优化我的多项式实现 特别是我正在处理系数模的多项式n 可能 gt 2 64 并对以下形式的多项式取模x r 1 r is lt 2 64 目前 我将系数表示为整数列表 并且我已经以最直接的方式实现了所有基本操作 我希望求幂和乘法尽
  • Chrome 扩展程序 MAX_WRITE 配额未补充

    我最近超出了 chrome 扩展中每小时允许的写入操作数 现在当我尝试使用 chrome storage 时收到此消息 Unchecked runtime lastError while running storage set This r
  • Spring Security JavaConfig:配置所需的通道(安全、不安全、任意)

    我试图通过任何渠道提供所有静态资源 css javascript 和图像 但无法让它与 anyRequest requiresInsecure Configuration EnableWebMvcSecurity PropertySourc
  • 通过滚动查找所有元素

    查找页面上所有具有滚动的元素的最可靠和最有效的方法是什么 目前 我正在考虑使用element all http angular github io protractor api view ElementArrayFinder with fi
  • 组合框在所选项目上绘制图像

    当选择该项目时 我尝试从组合框中的图像列表中绘制图像 我能够绘制图像 但是当onSelctedIndexChanged活动结束 我失去了我的形象 我的组合框已经有DrawMode OwnerDrawFixed 我有一个ListImage名为