الحصول على شريط التمرير العمودي موقف صحيح في vb.net
-
06-07-2019 - |
سؤال
لدي RichTextBox و أنا بحاجة إلى العثور على موقف شريط التمرير العمودي.
هل هناك أي طريقة للقيام بذلك دون Pinvoke?إذا لم يكن كذلك ، ما هي طريقة للقيام بذلك مع Pinvoke?
أريد العودة إلى قيمة عددية.
شكرا للمساعدة!
المحلول
أنا لا أعرف أي طريقة للقيام بذلك دون PInvoke.يمكنك استخدام PInvoke الاتصال GetScrollPos.
هنا كيف يمكنك أن تجرب ذلك.
الخطوة 1: إنشاء مخصص التحكم RichTextBox من خلال توسيع معيار RichTextBox.
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Namespace WindowsFormsApplication1
Public Class MyRichTextBox
Inherits RichTextBox
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function GetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer) As Integer
End Function
<DllImport("user32.dll")> _
Private Shared Function SetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer, ByVal nPos As Integer, ByVal bRedraw As Boolean) As Integer
End Function
Private Const SB_HORZ As Integer = &H0
Private Const SB_VERT As Integer = &H1
''' <summary>
''' Gets and Sets the Horizontal Scroll position of the control.
''' </summary>
Public Property HScrollPos() As Integer
Get
Return GetScrollPos(DirectCast(Me.Handle, IntPtr), SB_HORZ)
End Get
Set(ByVal value As Integer)
SetScrollPos(DirectCast(Me.Handle, IntPtr), SB_HORZ, value, True)
End Set
End Property
''' <summary>
''' Gets and Sets the Vertical Scroll position of the control.
''' </summary>
Public Property VScrollPos() As Integer
Get
Return GetScrollPos(DirectCast(Me.Handle, IntPtr), SB_VERT)
End Get
Set(ByVal value As Integer)
SetScrollPos(DirectCast(Me.Handle, IntPtr), SB_VERT, value, True)
End Set
End Property
End Class
End Namespace
هذا إضافة اثنين من الخصائص القياسية RichTextBox:HScrollPos و VScrollPos.هذه الخصائص تسمح لك اذهب و تعيين الأفقي والرأسي التمرير الموقف في التحكم الخاصة بك.
الخطوة 2: إنشاء اختبار النموذج ومحاولة الخروج من التحكم الخاصة بك.
إنشاء Winform في نفس المشروع الخاص بك التحكم المخصصة.إسقاط التحكم المخصصة في اختبار شكل إضافة زر على النموذج.في الحدث انقر فوق إضافة التعليمة البرمجية التالية إلى عرض مخصص التحكم التمرير العمودي الموقف.
Console.WriteLine(myRichTextBox1.VScrollPos)
عدد قليل من الأشياء لمشاهدة:
إذا كان عنصر التحكم الخاص بك حاليا عرض شريط التمرير العمودي ، دعوة إلى HScrollPos سوف تحطم البرنامج.هناك عدد قليل من الواضح طرق للتغلب على هذه (تحقق من أن التمرير يتم عرضها من قبل التحقق من الملكية ، أو جعل شريط التمرير العمودي دائما مرئية ، إلخ.).
اعتمادا على كيفية التحكم (، ربما شكل) هو الحجم (لا يذكر التغييرات في محتويات النص من السيطرة) ، وضع VScrollPos يمكن أن تعطل البرنامج أو ليس لاستعادة الموقف كان عند VScrollPos القيمة حفظها.
انا لم استخدم هذا الرمز.أنا اعتقد السؤال كان مثيرة للاهتمام قليلا من البحث تأتي مع جوابي.