【发布时间】:2018-04-30 14:20:35
【问题描述】:
当项目被选中时,我尝试从组合框中的图像列表中绘制图像。
我可以绘制图像,但是当onSelctedIndexChanged 事件结束时,我的图像丢失了。
我的组合框已经有DrawMode.OwnerDrawFixed
我有一个名为 ImageList 的 ListImage 控件,其中包含 10 张图片。
对于我的简短示例,我只需要在我的组合框中绘制 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);
}
}
可能我没有加入正确的事件。有什么建议吗?
参见下图,在 Draw 后 IndexChanged 中有一个断点。这是工作,但我在活动结束后失去了我的形象。
【问题讨论】:
-
我真的很感激人们在没有解释的情况下给出一些负分!!!
-
如果你要画东西,你通常需要一个 OwnerDraw 模式控件,这意味着你使用 DrawItem 方法,
CreateGraphics虽然几乎从来都不是正确的方法,而且很可能是图像出现的原因“迷路”……除此之外,这有点模糊 -
我的 DrawMode 已经设置为 OwnerDrawFixed
-
var g = this.CreateGraphics();永远不要使用CreateGraphics!使用DrawXX或PaintXX事件参数的Graphics 对象!您可能希望通过Invalidate()'ing SelChanged 事件中的控件来触发Paint/DrawItem事件。所以将代码移到那里并调用this.Invalidate();请注意,它通常也有帮助绘图的有用信息。如果ImageList.Draw是您的函数,您可以传入 Graphics 对象,前提是 a) 是有效的 ( ie 来自 e.paramter) 和 b) 它没有被缓存。 -
创建持久绘图的唯一方法是在正确的时间使用正确的 Graphics 对象。 Ownerdrawing 通常还涉及绘制背景。
标签: c# winforms graphics combobox drawimage