2016-02-17 2 views
0

Я хочу, чтобы счетчик хода работал как кнопка. Я добавил обработчик события click на счетчик прогресса, но когда я нажимаю на изображение gif с помощью счетчика, он не выполняет событие click. Я использую следующий код:Как я могу выполнить событие click на счетчике Progress?

[см снимок экрана] [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(); 
     } 
    } 
+0

Вы забыли добавить обработчик событий и только добавили часть кода? – Peroxy

+0

Как вы регистрируете событие с помощью счетчика? – Tdorno

+1

Какой контроль? на скриншоте он читает «CNSpinn ...», который не похож на стандартный элемент управления winforms. – Jcl

ответ

0

С дополнительной информацией в комментариях, я assumming вы используете CNSpinner.dll от this codeproject article.

Проблема в том, что управление является UserControl с PictureBox, которое полностью покрывает его. Поэтому, даже если вы назначаете обработчик события Click, фактический элемент управления, получающий клики, является PictureBox, содержащимся в элементе управления.

Вы можете изменить CNSpinner код и просто сделать Click события на PictureBox, который вызывает 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); } 
} 
+0

Сэр, на самом деле я хотел показать анимированное изображение gif как кнопку в моей форме, поэтому я использую элемент управления прядильщика, чтобы показать анимированную фотографию в форме. Пожалуйста, вы можете поделиться другим методом, чтобы показать gif pic в форме выигрыша вместо использования счетчика прогресса. –

+0

@PrashantArora, что прогресс spinner не «все так плохо» (хотя реализация может быть лучше, но хорошо). Это просто «BackgroundWorker», заставляющий обновить элемент управления «PictureBox». Вы можете либо сделать это самостоятельно, либо просто добавить модификацию, которую я дал тому же «CNSpinner», который вы используете (вам нужно будет скачать исходный код и скомпилировать его самостоятельно, но не должно быть так сложно) – Jcl

+0

извините, сэр, событие click по-прежнему не работает. См. Выше. Я отредактировал вопрос, чтобы показать код, который я применил, данный вами. –

Смежные вопросы