2017-01-05 2 views
-1

Я создал собственный элемент управления для поддержки прокрутки. Этот элемент управления состоит из двух полос прокрутки, а именно HScollBar и VScrollBar. Когда я перетаскиваю и оставляю большой палец в определенном месте, он перемещается в исходное местоположение (0).Почему большой палец прокрутки перемещается в исходное положение, оставляя большой палец после перетаскивания?

enter image description here

Как я предотвратить палец двигается в положение по умолчанию, и есть ли простой способ для достижения контроля пользовательской прокрутки с помощью полосы прокрутки?

+0

Вам не нужно использовать прокрутки для прокрутки. Вы можете установить 'AutoScroll' в' true'. Кроме того, если ваш элемент управления является настраиваемым элементом управления цветом, установите значение «AutoScrollMinSize» в соответствующее значение. Для нормального управления контейнером вам не нужно самостоятельно манипулировать 'AutoScrollMinSize', он будет рассчитываться на основе местоположений дочерних элементов управления. –

ответ

1

Вам не нужно использовать прокрутки для прокрутки. Вы можете установить AutoScroll на номер true. Также, если ваш элемент управления является обычным элементом управления краской, установите AutoScrollMinSize на подходящее значение. Для нормального управления контейнером вам не нужно самостоятельно манипулировать AutoScrollMinSize, он будет рассчитываться на основе местоположений дочерних элементов управления. Например:

using System.Drawing; 
using System.Windows.Forms; 
public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     InitializeComponent(); 
     this.AutoScroll = true; 
    } 
    protected override void OnPaint(PaintEventArgs e) 
    { 
     //for a custom paint control, calculate the minimum size which needs scrollbars 
     //for a normal container control you don't need to calculate minimum size 
     this.AutoScrollMinSize = new Size(300, 500); 
     base.OnPaint(e); 
     var r = this.DisplayRectangle; 
     r.Width--; r.Height--; 
     e.Graphics.DrawRectangle(Pens.Red, r); 
     TextRenderer.DrawText(e.Graphics, "Top-Left", Font, r, ForeColor, 
      TextFormatFlags.Top | TextFormatFlags.Left); 
     TextRenderer.DrawText(e.Graphics, "Bottom-Right", Font, r, ForeColor, 
      TextFormatFlags.Bottom | TextFormatFlags.Right); 
    } 
} 
+0

Спасибо за ваше предложение. Мое намерение - создать настраиваемый элемент управления, который позволяет настраивать полосы прокрутки как по вертикали, так и по горизонтали. – Adhi

+0

Добро пожаловать, Скопируйте и вставьте код в класс в своем приложении и после создания решения, затем с панели инструментов отпустите 'UserControll1' в вашу форму. Запустите приложение и посмотрите результат. –

+0

Решение позволяет установить минимальное значение для прокрутки как по ширине, так и по высоте. Таким образом, вы можете сделать элемент управления, чтобы показать одну из полос прокрутки, обе из них или ни один из них. –

Смежные вопросы