Winforms UserControl 显示具有反转颜色的矩形

Posted

技术标签:

【中文标题】Winforms UserControl 显示具有反转颜色的矩形【英文标题】:Winforms UserControl shows rectangles with Inverted Colors 【发布时间】:2009-04-27 08:32:34 【问题描述】:

在 Winforms 应用程序(C#2、FX2.0、VC2008)中,我使用面板派生控件来显示自定义控件。控件是垂直排列的,并且通常在面板的可见区域中非常适合。

我已经画了一个小草图:

Panel http://www.ericschaefer.org/Panel.png

有时(通常在面板内滚动后)矩形区域的颜色似乎是反转的(草图中的绿色部分)。这些区域的大小是随机的,但似乎总是在面板的右边缘。正如您在草图中看到的,面板滚动条的箭头按钮也被反转了,但拇指滑块和滚动区域没有。

我所说的倒色是指黑色变成白色,白色变成黑色,蓝色变成棕色,等等......

我没有想法。

这可能是由我的应用程序引起的吗? 甚至可以在滚动条箭头按钮中进行绘制吗? 有什么想法吗?

编辑:“Screenshot”

编辑:我对小组的看法有误。它过去是一个面板,但现在是一个用户控件。像这样:

public class MyPanel : UserControl

    public MyPanel()
    
        DoubleBuffered = true;
        BorderStyle = BorderStyle.Fixed3D;
        BackColor = Color.DarkBlue;
        VScroll = true;
        HScroll = false;
        AutoScroll = true;
        AutoScrollMargin = new Size( 0, 4 );
    
        

【问题讨论】:

您能否发布此状态下的应用程序屏幕截图?这可能会让你更容易看到发生了什么。 你能打印屏幕而不是照片吗?仍然很难看到发生了什么。 这个问题随机出现,非常罕见。它也不会发生在我的机器上。我只有照片。 【参考方案1】:

您在使用 System.Windows.Forms.Panel 吗?你说 Panel 派生控件是什么意思?

如果您使用的是 System.Windows.Forms.Panel,那么这看起来像是自定义控件而不是面板的问题。

如果可能的话,您能否提供有关自定义控件的更多信息?

【讨论】:

它是一个从 S.W.F.Panel 派生的自定义控件。它所做的只是将子控件(也是自定义控件)放置在自身内部。除了设置BackColor之外,Panel中没有绘制。 看起来双缓冲有一些问题,但无法准确指出它可能出现的问题。【参考方案2】:

从您的照片看来,某些内容已突出显示,但边框与任何可见控件都不匹配。

你有没有以某种方式隐藏在其他控件后面的控件?

【讨论】:

不,没有隐藏控件。实际面积不同。据报道,它比照片中的大得多,也小得多。如草图所示,同时也有两个这样的区域。【参考方案3】:

已解决: 显然这是触摸屏驱动程序的故障。我现在可以重现该行为。如果您通过触摸屏单击任何滚动条上的“向下滚动”按钮并按住它一段时间,当您释放它时它会继续滚动(按钮保持按下状态)。之后你可以随意点击,滚动条左侧总会出现“反色”。任何应用程序都会发生这种情况(explorer.exe!)。现在它变得更好了:通常在 Windows 中,如果您拖动滚动条拇指按钮,如果您按住鼠标按钮,您可能会偏离滚动条。但是,如果您漂移得太远,按钮将弹回其原始位置(您开始拖动的位置)。尝试一下!倒色矩形与您可以在没有按钮弹回的情况下漂移的区域一样宽。我什至不试图理解这一点。 我们为触摸屏安装了更新的驱动程序,即使在您释放“向下滚动”按钮并且问题消失后,它也不会继续滚动。我的血压恢复正常,但我想所有的白发可能都没有变黑...... 还是谢谢...

【讨论】:

以上是关于Winforms UserControl 显示具有反转颜色的矩形的主要内容,如果未能解决你的问题,请参考以下文章

Winforms禁用数据预览

WinForms中的Control vs UserControl?

通过 ElementHost 将 WPF 应用程序转换为 UserControl 以在 WinForms 应用程序中使用

将Form转换为UserControl

使用自定义 WinForms 控件,我可以更改嵌套控件停靠在里面的矩形吗?

将 UserControl 属性设置为不显示在 VS 属性窗口中