簡體   English   中英

C#事件未觸發

[英]C# Event not firing

我正在嘗試創建一個自定義可滾動面板,因為TableLayoutPanels滾動功能不是非常可自定義的。

我有一個自定義類,該類繼承自Microsoft.Visualbasics.Powerpacks.RectangleShape。 此類用於創建滾動條對象。 它包含一個MouseDrag事件,該事件應該在滾動條上按下鼠標時觸發,並在鼠標再次抬起時終止。

在從Forms.Panel繼承的另一個自定義類中實例化此ScrollBar對象。

在主窗體方法中,將自定義面板實例化,並將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");
        }
    }

}

在任何人浪費時間之前先解決問題,該控件被另一個控件阻塞,即使其他控件明顯位於其后,該事件調用也沒有錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM