首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滚动PictureBox

滚动PictureBox
EN

Stack Overflow用户
提问于 2015-01-07 10:28:20
回答 1查看 834关注 0票数 1

我正在尝试开发一个应用程序来绘制像这一个这样的树状图。

因此,我在winform中添加了一个PictureBox,首先,我想用以下代码编写图片中的所有标签:

代码语言:javascript
复制
foreach (var line1 in lines)
{
    i++;
    gpx.DrawString(line1, myFont, Brushes.Green, new PointF(2, 10 * i));
}

但问题是我有很多标签,所以它只在800x600PX上写了几个标签。我想增加滚动条,但根本不起作用。只有当我将图像设置为PictureBox时,它才能工作。

有没有PictureBox的其他方式吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-07 12:05:54

PictureBox是一个非常简单的控件,它只适合显示图片。它不需要的一个功能是滚动内容的能力。所以不要用它。

在Winforms中创建自己的控件非常简单。一个基本的起点是从Panel开始,Panel是一个支持滚动的控件,并为它派生出您自己的类,因此您可以定制它以适合任务。向项目中添加一个新类并粘贴下面所示的代码。编译。将新控件从工具箱顶部拖放到窗体上。注意如何使用设计器或代码设置Lines属性。使用油漆事件绘制树状图。或者在类中扩展OnPaint()方法,您可以随意使用它。

代码语言:javascript
复制
using System;
using System.Drawing;
using System.Windows.Forms;

class DendrogramViewer : Panel {
    public DendrogramViewer() {
        this.DoubleBuffered = this.ResizeRedraw = true;
        this.BackColor = Color.FromKnownColor(KnownColor.Window);
    }

    public override System.Drawing.Font Font {
        get { return base.Font; }
        set { base.Font = value; setSize(); }
    }

    private int lines;
    public int Lines {
        get { return lines; }
        set { lines = value; setSize(); }
    }

    private void setSize() {
        var minheight = this.Font.Height * lines;
        this.AutoScrollMinSize = new Size(0, minheight);
    }

    protected override void OnPaint(PaintEventArgs e) {
        e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
        base.OnPaint(e);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27817333

复制
相关文章

相似问题

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