前提・実現したいこと
VB.NETのPictureBoxのスクロールで発生した不具合(?)の解決をしたいです。
※他に代替案があればご教示願います。
発生している問題・エラーメッセージ
VB.NETのPanelにPictureBoxを配置し、BitMap画像を描画。
その画像を水平スクロールバーでスクロールする際に
スクロールバーの移動値分、PictureBoxの位置をずらして
スクロールを実現している。
ところが、PictureBoxのサイズがある範囲(-32768 ~ +32767)を越えると
スクロールが不可能になる。
※下記のコードであれば、PictureBox.Leftに-32768以下の数値を設定不可能となり、
それ以上先にスクロールができない。
該当のソースコード
フォーム作成し、そこに500×200くらいのPanelを配置。
その下に、HScrollBarを配置
VB.NET
1Imports System 2Imports System.Drawing.Printing 3 4Public Class Form1 5 6 Private pic1 As PictureBox 7 8 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 9 10 '画像設定 11 pic1 = New PictureBox 12 pic1.Size = New Size(40000, Panel1.Height) 13 pic1.Location = New Point(0, 0) 14 Panel1.Controls.Add(pic1) 15 Dim bm1 As New Bitmap(pic1.Width, pic1.Height) 16 Dim g As Graphics = Graphics.FromImage(bm1) 17 18 'スクロールが分かりやすいように目盛を描画 19 For index = 0 To 40000 Step 100 20 g.DrawString(index.ToString(), New Font("MS ゴシック", 10), Brushes.Black, index, 100) 21 Next 22 23 'リソースを解放する 24 g.Dispose() 25 26 '作成した画像を表示する 27 pic1.Image = bm1 28 29 '水平スクロールバーの設定 30 HScrollBar1.Maximum = 40000 31 HScrollBar1.SmallChange = 100 32 HScrollBar1.LargeChange = 1000 33 34 35 End Sub 36 37 Private Sub HScrollBar1_Scroll(sender As Object, e As ScrollEventArgs) Handles HScrollBar1.Scroll 38 39 '左にスクロール 40 If e.Type = ScrollEventType.LargeDecrement OrElse e.Type = ScrollEventType.SmallDecrement Then 41 pic1.Left = pic1.Left + (e.OldValue - e.NewValue) 42 Return 43 End If 44 '右にスクロール 45 If e.Type = ScrollEventType.LargeIncrement OrElse e.Type = ScrollEventType.SmallIncrement Then 46 pic1.Left = pic1.Left - (e.NewValue - e.OldValue) 47 Return 48 End If 49 50 51 End Sub 52End Class

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/20 22:51
2018/12/22 13:18