I'm trying to allow scrolling in a Multiline-TextBox even if the TextBox is set to
textbox.Enabled = False
This is not possible, as the Scrollbar is disabled with the Enabled-Command, too.
The default solution here is to set
textbox.ReadOnly = True
textbox.Enabled = True
but this doesn't really do the trick for me. With ReadOnly I can still select the text of a TextBox as well as place the cursor inside of it. But as I have normal (non Multiline-TextBoxes) and other controls on the same form I don't want that to happen. I want to have exactly the same behavior as all the other disabled TextBoxes.
For everything else, like mimic the color of a disabled textbox and so on, there is a legitimate workaround with the ReadOnly-Property, but I coudn't find any for selecting text and placing the cursor.
UPDATE:
With some hints from here I tried to use WIN32 API but it didn't work as expected:
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Public Class TestTextBox
Inherits TextBox
Private Class Native
<DllImport("user32.dll")> _
Friend Shared Function EnableScrollBar(ByVal hWnd As IntPtr, ByVal wSBflags As UInteger, ByVal wArrows As UInteger) As Boolean
End Function
<DllImport("User32.dll")> _
Friend Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As UInteger, ByVal wparam As Integer, ByVal lparam As Integer) As Integer
End Function
Public Const WM_SETREDRAW As Long = &HB
Public Const ESB_ENABLE_BOTH As UInteger = 0
Public Const SB_VERT As UInteger = 1
End Class
Public Sub Change() 'Gets called by a Button in my example.
'Native.SendMessage(Me.Handle, Native.WM_SETREDRAW, New IntPtr(0), IntPtr.Zero)
Native.EnableScrollBar(Me.Handle, Native.SB_VERT, Native.ESB_ENABLE_BOTH)
'Native.SendMessage(Me.Handle, Native.WM_SETREDRAW, New IntPtr(1), IntPtr.Zero)
Me.PerformLayout()
End Sub
End Class