トップ回答者
LIstBoxの最終行の右端を表示方法

質問
回答
-
こんな?
Imports System.Runtime.InteropServices Public Class Form1 <DllImport("user32.dll")> _ Private Shared Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As UInt32, ByVal lParam As IntPtr) As Boolean End Function Enum WM As UInteger WM_HSCROLL = &H114 End Enum Enum SB As UInt32 SB_LINEUP = 0 SB_LINELEFT = 0 SB_LINEDOWN = 1 SB_LINERIGHT = 1 SB_PAGEUP = 2 SB_PAGELEFT = 2 SB_PAGEDOWN = 3 SB_PAGERIGHT = 3 SB_THUMBPOSITION = 4 SB_THUMBTRACK = 5 SB_TOP = 6 SB_LEFT = 6 SB_BOTTOM = 7 SB_RIGHT = 7 SB_ENDSCROLL = 8 End Enum Private listBox1 As ListBox Sub New() InitializeComponent() listBox1 = New ListBox() listBox1.HorizontalScrollbar = True listBox1.Dock = DockStyle.Fill Me.Controls.Add(listBox1) For i As Integer = 1 To 100 listBox1.Items.Add(i.ToString().PadLeft(100, "*"c)) Next End Sub Private Sub Me_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load, Me.Resize ScrollEnd(listBox1) End Sub Protected Sub ScrollEnd(ByVal lst As ListBox) If (lst Is Nothing) Then Return End If '垂直方向の最終行を一番下にする Dim displayCount As Double = lst.ClientSize.Height / lst.ItemHeight Dim index = lst.Items.Count - CInt(Math.Floor(displayCount)) If (index <= 0) Then index = 0 End If lst.TopIndex = index If (lst.IsHandleCreated) Then '水平方向のスクロールバーを右端に移動させる PostMessage(lst.Handle, WM.WM_HSCROLL, SB.SB_RIGHT, IntPtr.Zero) End If End Sub End Class
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク mori mori 2013年10月27日 11:11
すべての返信
-
こんな?
Imports System.Runtime.InteropServices Public Class Form1 <DllImport("user32.dll")> _ Private Shared Function PostMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As UInt32, ByVal lParam As IntPtr) As Boolean End Function Enum WM As UInteger WM_HSCROLL = &H114 End Enum Enum SB As UInt32 SB_LINEUP = 0 SB_LINELEFT = 0 SB_LINEDOWN = 1 SB_LINERIGHT = 1 SB_PAGEUP = 2 SB_PAGELEFT = 2 SB_PAGEDOWN = 3 SB_PAGERIGHT = 3 SB_THUMBPOSITION = 4 SB_THUMBTRACK = 5 SB_TOP = 6 SB_LEFT = 6 SB_BOTTOM = 7 SB_RIGHT = 7 SB_ENDSCROLL = 8 End Enum Private listBox1 As ListBox Sub New() InitializeComponent() listBox1 = New ListBox() listBox1.HorizontalScrollbar = True listBox1.Dock = DockStyle.Fill Me.Controls.Add(listBox1) For i As Integer = 1 To 100 listBox1.Items.Add(i.ToString().PadLeft(100, "*"c)) Next End Sub Private Sub Me_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load, Me.Resize ScrollEnd(listBox1) End Sub Protected Sub ScrollEnd(ByVal lst As ListBox) If (lst Is Nothing) Then Return End If '垂直方向の最終行を一番下にする Dim displayCount As Double = lst.ClientSize.Height / lst.ItemHeight Dim index = lst.Items.Count - CInt(Math.Floor(displayCount)) If (index <= 0) Then index = 0 End If lst.TopIndex = index If (lst.IsHandleCreated) Then '水平方向のスクロールバーを右端に移動させる PostMessage(lst.Handle, WM.WM_HSCROLL, SB.SB_RIGHT, IntPtr.Zero) End If End Sub End Class
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答としてマーク mori mori 2013年10月27日 11:11
-
手打ちでコードを入力されたんでしょうか?
DllImport の行をよく見直していただくとわかると思いますが、user3.dll ではなく、user32.dll です。- 編集済み AzuleanMVP, Moderator 2013年10月27日 10:59