简体   繁体   中英

C# Event not firing

I'm trying to create a custom scrollable panel as TableLayoutPanels scroll function is not very customisable.

I have a custom class that inherits from Microsoft.Visualbasics.Powerpacks.RectangleShape. This class is used to create the scroll bar object. It contains a MouseDrag Event that is supposed to be triggered when the mouse is pressed down on the scroll bar and will terminate when the mouse comes back up.

This ScrollBar object is instantiated in another custom class that inherits from Forms.Panel.

In the main form method the custom panel is instantiated and the MouseDrag event is added to the ScrollBar. When I click the ScrollBar nothing happens. I even tested with the built in Click event and again nothing happens. Any help would be much appreciated.

Scroll Bar Class:

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

    }
}

Custom Panel Class:

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;
    }

}

Main Form Class:

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");
        }
    }

}

在任何人浪费时间之前先解决问题,该控件被另一个控件阻塞,即使其他控件明显位于其后,该事件调用也没有错。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM