用于绘制图形和滚动的面板

Posted

技术标签:

【中文标题】用于绘制图形和滚动的面板【英文标题】:Panel for drawing graphics and scrolling 【发布时间】:2011-05-17 08:12:44 【问题描述】:

我希望能够使用Panel 或类似工具在 Winform 上绘制图形。如果图形变得比控件大,我似乎看不到有关添加滚动条的任何内容?

是否可以使用Panel 来执行此操作,或者是否有类似的控件允许这样做?

【问题讨论】:

为什么有人会反对这个?这是一个完全合理的问题? 【参考方案1】:

将 AutoScroll 属性设置为 true,将 AutoScrollMinSize 属性设置为图像的大小。当图像太大时,滚动条现在会自动出现。

您需要从 Panel 继承您自己的类,以便可以在构造函数中将 DoubleBuffered 属性设置为 true。否则闪烁会很明显。一些示例代码:

using System;
using System.Drawing;
using System.Windows.Forms;

class ImageBox : Panel 
    public ImageBox() 
        this.AutoScroll = true;
        this.DoubleBuffered = true;
    
    private Image mImage;
    public Image Image 
        get  return mImage; 
        set 
            mImage = value;
            if (value == null) this.AutoScrollMinSize = new Size(0, 0);
            else 
                var size = value.Size;
                using (var gr = this.CreateGraphics()) 
                    size.Width = (int)(size.Width * gr.DpiX / value.HorizontalResolution);
                    size.Height = (int)(size.Height * gr.DpiY / value.VerticalResolution);
                
                this.AutoScrollMinSize = size;
            
            this.Invalidate();
        
    
    protected override void OnPaint(PaintEventArgs e) 
        e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
        if (mImage != null) e.Graphics.DrawImage(mImage, 0, 0);
        base.OnPaint(e);
    

【讨论】:

谢谢汉斯。我现在就试试看。 Sorry Hans....适合面板的图像是在运行时动态创建的。图形是根据某些参数创建的。这还能用吗? 嗯,分配 Image 属性。在设计时和运行时都可以正常工作。 我创建图像的方式是使用图形在面板上绘制圆圈。我会将此面板另存为图像吗?对不起,也许是愚蠢的问题——我对图形/图像编程完全陌生。再次感谢。 只需在 OnPaint() 方法中进行绘图。那里的 TranslateTransform 调用确保您的绘图正确滚动。但是,您必须自己设置 AutoScaleMinSize 属性。【参考方案2】:

我不能 100% 确定您想要完成什么,但这里有一个类似的 SO question 可能会对您有所帮助。

您也可以尝试使用PictureBox,随着图形变大,您可以手动更改其大小。然后将表单 AutoScroll 设置为 true。

【讨论】:

我不会将图片框用作绘图的画布。图片框仅用于显示图片。请参阅 Bob Powell 关于这个确切问题的文章。

以上是关于用于绘制图形和滚动的面板的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 中绘制图形

比较用于绘制网络拓扑的开源 Java 图形绘制框架(JUNG 和 Prefuse)

绘制几何图形

canvas 绘制图形

用 par(mfrow) 编译的图形面板的常用主标题

canvas操作图片,进行面板画图,旋转等