none
Panelコントロール内に別のコントロールがない状態でスクロールを実現する方法 RRS feed

  • 質問

  • 現在、Panelコントロールに描画する処理を実装しています。
    幅、高さを越えた部分にも描画を行っているのですが、AutoScrollをTrueにしても、
    スクロールバーが表示されません。

    他のサイトでは、Panelコントロール内に、
    サイズを変更したPictureBoxを配置すると紹介されており、
    自分も今後はそのように実装する予定なのですが、
    現在の自分の状態の場合、もし実現する方法などありましたら、
    ご教授いただけると幸いです。

    よろしくお願い致します。
    2017年5月17日 2:43

回答

  • 言語の指定がありませんので C# でサンプルを作ってみましたが、Visual Basic でも同じような書き方でできると思います。

    Panel の AutoScroll を True と設定し、AutoScrollMinSize の値を設定することで、スクロールバーを表示することができると思います。あとは、Panel の Scroll イベントでスクロールバーの位置を取得し、Panel の Paint で必要な描画処理を記述します。以下 Panel 内で画像を描画するサンプルです。

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            int x;
            int y;
            Bitmap bmp;
            public Form1()
            {
                InitializeComponent();
                bmp = new Bitmap(@"C:\sample.jpg");
                panel1.AutoScroll = true;
                panel1.AutoScrollMinSize = new Size(bmp.Width, bmp.Height);
            }
     
            private void panel1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawImage(bmp, panel1.ClientRectangle, x, y, panel1.ClientRectangle.Width, panel1.ClientRectangle.Height, GraphicsUnit.Pixel);
            }
    
            private void panel1_Scroll(object sender, ScrollEventArgs e)
            {
                x = panel1.HorizontalScroll.Value;
                y = panel1.VerticalScroll.Value;            
            }
        }
    }
    • 編集済み kenjinoteMVP 2017年5月17日 9:57
    • 回答としてマーク no title 2017年5月20日 2:50
    2017年5月17日 5:54

すべての返信

  • 何を作っているのでしょうか? Windows Forms? WPF? ASP.NET Web Forms? その他?

    あと、開発環境も不明なんですが・・・

    2017年5月17日 2:52
  • 失礼しました…

    Visual StudioでWindowsFormを使用して作成しております。

    単純な描画処理の作成練習がてら作っております。

    2017年5月17日 3:20
  • 言語の指定がありませんので C# でサンプルを作ってみましたが、Visual Basic でも同じような書き方でできると思います。

    Panel の AutoScroll を True と設定し、AutoScrollMinSize の値を設定することで、スクロールバーを表示することができると思います。あとは、Panel の Scroll イベントでスクロールバーの位置を取得し、Panel の Paint で必要な描画処理を記述します。以下 Panel 内で画像を描画するサンプルです。

    using System.Drawing;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            int x;
            int y;
            Bitmap bmp;
            public Form1()
            {
                InitializeComponent();
                bmp = new Bitmap(@"C:\sample.jpg");
                panel1.AutoScroll = true;
                panel1.AutoScrollMinSize = new Size(bmp.Width, bmp.Height);
            }
     
            private void panel1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawImage(bmp, panel1.ClientRectangle, x, y, panel1.ClientRectangle.Width, panel1.ClientRectangle.Height, GraphicsUnit.Pixel);
            }
    
            private void panel1_Scroll(object sender, ScrollEventArgs e)
            {
                x = panel1.HorizontalScroll.Value;
                y = panel1.VerticalScroll.Value;            
            }
        }
    }
    • 編集済み kenjinoteMVP 2017年5月17日 9:57
    • 回答としてマーク no title 2017年5月20日 2:50
    2017年5月17日 5:54
  • AutoScrollMinSizeというパラメータがあるのを初めて知りました…
    ありがとうございます、ご教授いただいた内容でスクロールを実現することができました!
    2017年5月20日 2:50