2010-03-24 21 views
1

这可能是一个简单的问题,即使我还没有找到一个简单的解决方案,它:PropertyGrid PaintValue问题:如何去除(并在外面绘制)标准矩形?

我实现了我的自定义UITypeEditor的使用增加了PaintValue到布尔变量的唯一目的。为了讨论,我们假设PaintValue将绘制一个选中或未选中的单选按钮。

问题1:

现在,这里的问题:似乎所有的绘制代码完成后,像PaintValue自动插入一个20x13px矩形。当然,黑色矩形内的单选按钮很难看。我可以轻松地指示或覆盖这个可以涂漆的rectagle 而不是吗?

问题2:

在这方面,是有可能画上PropertyGrid中的本机外观的顶部 - 这意味着我能画的东西,以掩盖(的一部分)的黑线分隔两个网格单元垂直?这样做的目的是为了表明两个值是相关联的,如约束宽度/高度与宽高比。

任何答案是非常感谢。

回答

3

我不了解这幅画,但在第2点 - 也许通过IPropertyValueUIService添加字形 - codeproject上有一个例子。

+0

有趣的链接。尽管我希望得到更简洁的答案。这不是应用程序的核心功能,所以我宁愿保持代码基本清洁,也不要将它与许多东西混杂在一起,只画几行。 – Pedery 2010-03-24 23:49:29

1

您可以使用以下代码删除矩形,但不能在其外面绘制。那么,你可以绘制,但PropertyGrid稍后会绘制它,所以它没有多大意义。

public override void PaintValue(PaintValueEventArgs e) 
{ 
    // remove the lines (you cannot draw on these lines anymore) 
    e.Graphics.ExcludeClip(
     new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, 1)); 
    e.Graphics.ExcludeClip(
     new Rectangle(e.Bounds.X, e.Bounds.Y, 1, e.Bounds.Height)); 
    e.Graphics.ExcludeClip(
     new Rectangle(e.Bounds.Width, e.Bounds.Y, 1, e.Bounds.Height)); 
    e.Graphics.ExcludeClip(
     new Rectangle(e.Bounds.X, e.Bounds.Height, e.Bounds.Width, 1)); 
    // now draw your own image - it will be shown without the box 
    e.Graphics.DrawImage(myImage, e.Bounds); 
} 
+0

竖起大拇指:) – Pedery 2017-01-18 14:07:12