パネルのスクロールバーを片方のみ有効にしたいです

タグの編集
投稿者 ミニオン  (学生) 投稿日時 2018/11/12 00:11:51
画像を張り付けたPictureBoxをPanel上に配置し、PanelのAutoScrollをTrueにすれば、
パネルより大きなPictureBoxの画像は自動的にスクロールバーが表示され、
スクロール可能にする事は出来たのですが、
縦スクロールのみ可能とすることはできるのでしょうか?

PanelのVerticalScroll.Visible = Trueにして確認したのですが、
何も配置しなければ、縦スクロールバーのみ表示されましたが、
PictureBoxを配置すると、スクロールバーは表示されませんでした。

あと、Panelのスクロールバーを使うのではなく
VScrollBarをパネルの左に配置し、VScrollBarのスクロール量と
PictureBoxの移動を同期させてみようとしましたが、
vScrollBarのスクロールボックスのサイズが、PictureBoxのサイズに合わせて変えられない
といった、PictureBoxのサイズに合わせた、スクロール量の制御が難しく
上手くいきませんでした。

可能であれば、Panelの縦スクロールのみ可能とする方法を、
もしそれが難しければ、vScrollBarでPanel内の画像を制御する方法を、
ご教示いただけないでしょうか。
宜しくお願い致します。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2018/11/12 09:46:08
配置の仕方にもよりますが、これでどうでしょう。

Imports System
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms

Public Class Form1
    Private WithEvents PictureBox1 As PictureBox
    Private WithEvents Panel1 As Panel

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        PictureBox1 = New PictureBox() With {.Name = "PictureBox1"}
        Panel1 = New Panel() With {.Name = "Panel1"}

        PictureBox1.Margin = New Padding(0)
        PictureBox1.BorderStyle = BorderStyle.FixedSingle
        PictureBox1.BackColor = Color.Transparent
        'PictureBox1.SetBounds(0, 0, 300, 2000)  'Panel より狭い PictureBox 
        PictureBox1.SetBounds(0, 0, 2000, 2000) 'Panel より広い PictureBox 

        Panel1.BackgroundImage = Me.Icon.ToBitmap()
        Panel1.BorderStyle = BorderStyle.Fixed3D
        Panel1.BackColor = Color.WhiteSmoke
        Panel1.SetBounds(30, 30, 350, 300)

        Panel1.Controls.Add(PictureBox1)
        Me.Controls.Add(Panel1)

        Panel1.AutoScroll = False
        Panel1.HorizontalScroll.Enabled = False
        Panel1.HorizontalScroll.Visible = False
        Panel1.HorizontalScroll.Maximum = 0
        Panel1.AutoScroll = True

        '検証時にスクロール状況が分かるよう、グラデーションに塗っておく 
        Dim canvas As New Bitmap(PictureBox1.Width, PictureBox1.Height)
        Using g = Graphics.FromImage(canvas), gb As New LinearGradientBrush(
            g.VisibleClipBounds,
            Color.FromArgb(223, Color.LightGreen),
            Color.FromArgb(32, Color.PaleTurquoise),
            LinearGradientMode.Vertical)
            g.FillRectangle(gb, g.VisibleClipBounds)
        End Using
        PictureBox1.Image = canvas
    End Sub

End Class
投稿者 ミニオン  (学生) 投稿日時 2018/11/16 19:44:04
>魔界の仮面弁護士さま

返事が遅くなりすいませんでした。
この件については、ご回答の内容で解決しました。
ありがとうございました。

ただパネルについては、また難題がありまして、
また質問させていただきます。

申し訳ありませんが、今後ともよろしくお願いいたします。