【问题标题】:Why are the controlpaint draw methods paint outside of its client paint area?为什么 controlpaint 绘制方法在其客户端绘制区域之外绘制?
【发布时间】:2011-11-02 16:38:31
【问题描述】:

我有一个winform,当您单击鼠标左键并拖动时,我想在其上绘制虚线框。当释放鼠标左键时,框架应该消失。我可以使用 ControlPaint.DrawReversibleFrame 方法来做到这一点。但是,它每次都在 winform 之外而不是在 winform 内绘制。似乎 controlpaint 方法使用屏幕作为绘制区域而不是 winform。我说的对吗?

如果我的假设是正确的,你如何告诉 controlpaint 使用 winform 作为它的绘画区域。

谢谢,

【问题讨论】:

    标签: .net winforms draw paint delphi-prism


    【解决方案1】:

    ControlPaint 通过在桌面上绘图来“作弊”。

    可以尝试的解决方法是自己观察尺寸。到达控件的边界后,停止调用它。

    更新:

    听起来您不一定正确转换尺寸。

    这是一个始终在 panel1 控件上绘制的简单示例:

    private void panel1_Paint(object sender, PaintEventArgs e) { 
      ControlPaint.DrawReversibleFrame(
        new Rectangle(panel1.PointToScreen(new Point(32, 32)), new Size(64, 64)), 
        panel1.BackColor, 
        FrameStyle.Dashed);
    }
    

    【讨论】:

    • @larstech,这不是我的问题。它实际上开始在 winform 之外绘制,或者在其他情况下,我的实际鼠标点 (x,y) 看起来会自动移动。
    • @digitalanalog 添加了一个示例。听起来您没有转换坐标。
    • @larstech,谢谢。您也可以使用 RectangleToScreen。棒极了。再次感谢。
    猜你喜欢
    • 2012-07-10
    • 2023-03-22
    • 2011-02-23
    • 2015-11-10
    • 1970-01-01
    相关资源
    最近更新 更多