パネルのスクロールバーを片方のみ有効にしたいです への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
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/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内の画像を制御する方法を、
ご教示いただけないでしょうか。
宜しくお願い致します。
パネルより大きなPictureBoxの画像は自動的にスクロールバーが表示され、
スクロール可能にする事は出来たのですが、
縦スクロールのみ可能とすることはできるのでしょうか?
PanelのVerticalScroll.Visible = Trueにして確認したのですが、
何も配置しなければ、縦スクロールバーのみ表示されましたが、
PictureBoxを配置すると、スクロールバーは表示されませんでした。
あと、Panelのスクロールバーを使うのではなく
VScrollBarをパネルの左に配置し、VScrollBarのスクロール量と
PictureBoxの移動を同期させてみようとしましたが、
vScrollBarのスクロールボックスのサイズが、PictureBoxのサイズに合わせて変えられない
といった、PictureBoxのサイズに合わせた、スクロール量の制御が難しく
上手くいきませんでした。
可能であれば、Panelの縦スクロールのみ可能とする方法を、
もしそれが難しければ、vScrollBarでPanel内の画像を制御する方法を、
ご教示いただけないでしょうか。
宜しくお願い致します。
返事が遅くなりすいませんでした。
この件については、ご回答の内容で解決しました。
ありがとうございました。
ただパネルについては、また難題がありまして、
また質問させていただきます。
申し訳ありませんが、今後ともよろしくお願いいたします。