【问题标题】:Replace Text in Label With Inline Image In C#用C#中的内联图像替换标签中的文本
【发布时间】:2016-04-26 22:13:55
【问题描述】:

我的程序有几个 Label 控件,它们每隔一段时间就会更新为具有不同的文本。我有一些我想在文本中引用的图标。我认为应该有一种方法可以用我拥有的相应图像替换它,而不是只在标签中显示“(E)”:。我认为我需要覆盖 Label.Paint 事件,但我不太确定如何正确执行此操作。每次出现的“(E)”都需要替换为内嵌图片。

示例

寻找顶部的 (E) 图标。 → 寻找顶部的 图标。

【问题讨论】:

  • 你的目标是什么:Winforms? WPF? ASP? ...?? 总是相应地标记您的问题!
  • 我看到了两种方法来做到这一点:要么通过所有者绘制整个标签,要么用显示图标的第二个标签装饰它。请参阅此处以获取example - 在这两种情况下都需要进行一些测量,请参阅 Übercoder 的答案!
  • @TaW - 对此我很抱歉。没错,就是 Winforms!

标签: c# image label controls paint


【解决方案1】:

这不是一个简单的练习。

  1. 您必须在派生标签类上提供一个属性才能将图像附加到文本。
  2. 在文本中嵌入某种标记来表示图像。
  3. 在 OnPaint 中,您必须为标记解析文本
  4. 为标记之间的每一位文本执行graphics.MeasureString()。然后用graphics.DrawString() 渲染它,向右移动文本的宽度,使用许多graphics.DrawImage() 覆盖之一基于标记渲染图像 - 向右移动图像的宽度并重复。

【讨论】:

  • 我没有看到 Label 控件的任何 OnPaint 事件。我只看到 Paint 事件。是你说的那个吗?您列出的步骤几乎是我所期望的,但我不太确定从哪里开始 OnPaint 事件,就像我所说的那样。
  • @crait - 您可以使用 Paint 事件,也可以覆盖 OnPaint 成员函数。我通常是后者。
  • 就像我说的,我认为你必须这样做,但我不知道该怎么做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
相关资源
最近更新 更多