2017-01-05 5 views
-1

私は、スクロールをサポートするためのカスタムコントロールを作成しました。このコントロールは、HScollBarとVScrollBarという2つのスクロールバーで構成されています。 親指を特定の場所にドラッグして放置すると、開始位置(0)に移動します。ドラッグした後に親指を離れるときにスクロールバーの親指が開始位置に移動する理由を教えてください。

enter image description here

どのように私は親指がデフォルトの位置に移動し、スクロールバーを使用してカスタムスクロール制御を達成するための簡単な方法があります防ぐことができますか?

+0

スクロールにスクロールバーを使用する必要はありません。 'AutoScroll'を' true'に設定することができます。また、コントロールがカスタムペイントコントロールである場合は、 'AutoScrollMinSize'を適切な値に設定してください。通常のコンテナコントロールでは、自分で 'AutoScrollMinSize'を操作する必要はありません。子コントロールの位置に基づいて計算されます。 –

答えて

1

スクロールにスクロールバーを使用する必要はありません。 AutoScrolltrueに設定することができます。また、コントロールがカスタムペイントコントロールの場合は、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

このソリューションでは、幅と高さの両方のスクロールの最小値を設定できます。したがって、スクロールバーのいずれかを表示するか、スクロールバーのいずれかを表示するようにコントロールを設定することができます。 –

関連する問題