【问题标题】:How to make use of AutoScrollbar when drawing contents with GDI+使用 GDI+ 绘制内容时如何使用 AutoScrollbar
【发布时间】:2021-10-23 19:07:36
【问题描述】:

我用e.graphics.DrawLine() 等在OnPaint 事件内的表单上绘制我的内容......到目前为止,我是根据size 形式绘制的(调整我的元素的大小),但现在我想绘制尽可能大的尺寸,如果我在可见区域之外绘制(绘制对象的位置是在运行时动态决定的) ),我希望用户使用滚动条来查看我绘制的全部内容的一部分。

我已启用AutoScrolling,但我不知道当我在该表单上没有任何控件时它对我有何帮助。

我该怎么做?

【问题讨论】:

    标签: c# .net winforms scroll


    【解决方案1】:

    只需将 AutoScrollMinSize 属性设置为您想要的大小。当表单的 ClientSize 小于此值时,滚动条会自动出现。您还需要根据滚动位置偏移绘制的内容,如下所示:

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            this.AutoScroll = true;
            this.AutoScrollMinSize = new Size(3000, 1000);
            this.ResizeRedraw = true;
        }
        protected override void OnPaint(PaintEventArgs e) {
            e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y);
            e.Graphics.DrawLine(Pens.Black, 0, 0, 3000, 1000);
            base.OnPaint(e);
        }
    }
    

    【讨论】:

    • 我该怎么做:表单大小默认为 3000 x 1000 但是当我从这个区域画出一些东西时,滚动条是可见的,我可以滚动到我在那里画出的形状(假设是 3500x1200)?
    • 我无法说清楚,这是我的错误。我的意思是“......用户可以滚动到那里绘制的形状”。无论如何,正如您所说,这是另一个问题,我发现已经提出了类似(不完全相同)的问题,并且答案解决了我的问题:stackoverflow.com/questions/2657753/… 感谢您的帮助。
    • 感谢 HansPassant 先生,您解决了我在滚动 e.Graphics.TranslateTransform(this.AutoScrollPosition.X, this.AutoScrollPosition.Y); 时的老闪烁问题,非常感谢。
    【解决方案2】:

    首先你应该设置你正在绘制的那个表单的AutoScroll = true;,而不是最好的方法是将东西绘制到一个Panel并重新调整Panel的大小以适应里面绘制的内容,而不是表单将自动显示它的滚动条。

    【讨论】:

      猜你喜欢
      • 2010-09-16
      • 1970-01-01
      • 2021-11-09
      • 2010-10-17
      • 1970-01-01
      • 2014-03-14
      相关资源
      最近更新 更多