首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于绘制图形和滚动的面板

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

Stack Overflow用户
提问于 2010-11-29 23:10:04
回答 2查看 19K关注 0票数 24

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

有没有可能使用Panel来实现这一点,或者是否有类似的控件允许这样做?

EN

Stack Overflow用户

回答已采纳

发布于 2010-11-30 01:29:47

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

您将希望从面板继承您自己的类,以便可以在构造函数中将DoubleBuffered属性设置为true。否则,闪烁将是显而易见的。一些示例代码:

代码语言:javascript
运行
复制
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);
    }
}
票数 24
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4305011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档