2017-08-01 9 views
1

私はカスタムスクロール可能なパネルを作成しようとしていますが、TableLayoutPanelsのスクロール機能はあまりカスタマイズできません。C#イベントが発生しない

Microsoft.Visualbasics.Powerpacks.RectangleShapeから継承するカスタムクラスがあります。このクラスは、スクロールバーオブジェクトの作成に使用されます。これは、マウスがスクロールバーで押されたときにトリガされるはずのMouseDragイベントを含み、マウスが戻ったときに終了します。

このScrollBarオブジェクトは、Forms.Panelを継承する別のカスタムクラスでインスタンス化されます。

メインフォームメソッドでは、カスタムパネルがインスタンス化され、MouseDragイベントがScrollBarに追加されます。 ScrollBarをクリックしても何も起こりません。私も組み込みのClickイベントでテストして、何も起こりません。どんな助けでも大歓迎です。

スクロールバークラス:

class ScrollBar : RectangleShape 
{ 
    public event MouseEventHandler MouseDrag; 
    private bool mouseHeld = false; 
    public bool MouseHeld { get => mouseHeld; set => mouseHeld = value; } 
    public ScrollBar() 
    { 
     InitializeObject(); 
    } 
    public ScrollBar(int x, int y, int width, int height) : base(x, y, width, height) 
    { 
     InitializeObject(); 
    } 
    private void InitializeObject() 
    { 
     this.MouseDown += new MouseEventHandler(mouseClickEvent); 
    } 
    public void mouseClickEvent(object sender, MouseEventArgs e) 
    { 

     MouseHeld = true; 
     MouseDrag(this, null); 

    } 
} 

カスタムパネルクラス:

class CustomPanel : Panel 
{ 
    private ScrollBar verticalScrollBar; 
    public ScrollBar VerticalScrollBar { get => verticalScrollBar; set => verticalScrollBar = value; } 
    public CustomPanel() 
    { 
     PanelSetup(); 
    } 
    public CustomPanel(Size _size) 
    { 
     this.Size = _size; 
     PanelSetup(); 
    } 
    private void PanelSetup() 
    { 
     //Panel setup 
     this.BackColor = Color.White; 
     this.Location = new Point(125, 125); 
     this.BorderStyle = BorderStyle.FixedSingle; 

     //Behind scrollbar graphic 
     RectangleShape behindScrollGraphic = new RectangleShape(); 
     behindScrollGraphic.Width = 21; 
     behindScrollGraphic.Height = this.Height; 
     behindScrollGraphic.Location = new Point(this.Width - behindScrollGraphic.Width, 0); 
     behindScrollGraphic.FillStyle = FillStyle.Solid; 
     behindScrollGraphic.FillColor = SystemColors.Control; 
     behindScrollGraphic.BorderColor = Color.Transparent; 

     //adding behind scroll bar to panel 
     ShapeContainer shapeContainer = new ShapeContainer(); 
     shapeContainer.Shapes.Add(behindScrollGraphic); 
     this.Controls.Add(shapeContainer); 

    } 
    public virtual void AddVerticalScrollBar() 
    { 
     ShapeContainer rectangleShapeContainer = new ShapeContainer(); 
     rectangleShapeContainer.Shapes.Add(VerticalScrollBar); 
     this.Controls.Add(rectangleShapeContainer); 
    } 
    public virtual void CreateScrollBar(int _barWidth, int _barHeight) 
    { 
     int barWidth = _barWidth; 
     int barHeight = _barHeight; 
     VerticalScrollBar = new ScrollBar(this.Width - barWidth - 7, 5, 12, 30); 
     VerticalScrollBar.FillStyle = FillStyle.Solid; 
     VerticalScrollBar.FillColor = SystemColors.ControlDark; 
     VerticalScrollBar.BorderColor = Color.Transparent; 
    } 

} 

メインフォームクラス:誰もが自分の時間を無駄にする前に

public partial class Form1 : Form 
{ 
    private CustomPanel panel; 
    public Form1() 
    { 
     InitializeComponent(); 
     CheckForIllegalCrossThreadCalls = false; 

     //Form setup 
     this.Size = new Size(500, 500); 
     this.BackColor = Color.White; 

     //Panel setup 
     panel = new CustomPanel(new Size(250, 250)); 
     panel.CreateScrollBar(10, panel.Height - 2); 
     panel.AddVerticalScrollBar(); 

     //Scroll Bar 
     panel.VerticalScrollBar.MouseDrag += new MouseEventHandler(mouseHeldMethod); 

     //Add panel to form 
     this.Controls.Add(panel); 
    } 
    private void mouseHeldMethod(object sender, MouseEventArgs e) 
    { 
     Console.WriteLine("test"); 
     while (panel.VerticalScrollBar.MouseHeld) 
     { 
      Console.WriteLine("Held"); 
     } 
    } 

} 

答えて

0

コントロールがし、問題を考え出しました目に見えて他のコントロールが後ろにあったとしても、別のコントロールによって妨げられている電話してください。

関連する問題