الحصول على شريط التمرير العمودي موقف صحيح في vb.net

StackOverflow https://stackoverflow.com/questions/1619783

  •  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)

عدد قليل من الأشياء لمشاهدة:

  1. إذا كان عنصر التحكم الخاص بك حاليا عرض شريط التمرير العمودي ، دعوة إلى HScrollPos سوف تحطم البرنامج.هناك عدد قليل من الواضح طرق للتغلب على هذه (تحقق من أن التمرير يتم عرضها من قبل التحقق من الملكية ، أو جعل شريط التمرير العمودي دائما مرئية ، إلخ.).

  2. اعتمادا على كيفية التحكم (، ربما شكل) هو الحجم (لا يذكر التغييرات في محتويات النص من السيطرة) ، وضع VScrollPos يمكن أن تعطل البرنامج أو ليس لاستعادة الموقف كان عند VScrollPos القيمة حفظها.

  3. انا لم استخدم هذا الرمز.أنا اعتقد السؤال كان مثيرة للاهتمام قليلا من البحث تأتي مع جوابي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top