如何在 Progress 微调器上执行点击事件?

How can I perform the click event on a Progress spinner?

我希望进度微调器像按钮一样工作。我在进度微调器上添加了一个 click 事件处理程序,但是当我点击微调器的 gif 图像时,它没有执行点击事件。 我使用以下代码:

![见屏幕截图][1]

public ExamMarks()
    {
        InitializeComponent();
        // make the clicks on the picturebox invoke the click event
        // on our control
        Loading_pb.Click += (o, e) => { this.OnClick(e); };
    }
    public bool IsStart = false;
    [Description("Load Image .gif in the object"), Category("Data")]
    public Image LoadGIFImage
    {
        get { return Loading_pb.Image; }
        set { Loading_pb.Image = value; }
    }

    public void Start()
    {
        IsStart = true;
        this.Visible = true;
        var worker = new BackgroundWorker();
        worker.DoWork += new DoWorkEventHandler(Loading);
        worker.RunWorkerAsync();
    }
    public void Stop()
    {
        IsStart = false;
        this.Visible = false;
    }
    void Loading(object sender, DoWorkEventArgs e)
    {
        while (IsStart)
        {
            this.Refresh();
        }
    }

根据评论中的附加信息,我假设您使用的是 this codeproject article 中的 CNSpinner.dll

问题是控件是一个 UserControl 和一个完全覆盖它的 PictureBox。因此,即使您将 Click 事件处理程序分配给控件,接收点击的实际控件是控件中包含的 PictureBox

您可以修改 CNSpinner 代码,只在 PictureBox 上创建一个 Click 事件,在实际控件上调用 Click 事件,但不修改CNSpinner 控制,你的事件永远不会被调用。这是在您使用控件时对其实施的限制。

如果你想修改原来的 CNSpinner,一个简单的方法(不是唯一的,也不是最好的)就像(在 ProgressSpinner.cs 上):

public ProgressSpinner()
{
   InitializeComponent();
   // make the clicks on the picturebox invoke the click event
   // on our control
   Loading_pb.Click += (o,e) => { this.OnClick(e); }
}