Пользовательские элементы управления Пользовательские функции - PullRequest
0 голосов
/ 06 февраля 2011

Итак, в моей программе загружено множество кнопок, которые действительно похожи, имеют одинаковые переменные и выполняют одни и те же функции ... Поэтому я решил создать класс «CustomButton», дочерний элемент кнопки C ++,но с моими функциями и всем этим уже в нем.Проблема в том, что когда у меня установлен класс

public ref class CustomButton : public System::Windows::Forms::Button{
protected:
    virtual void OnMouseDown(System::Windows::Forms::MouseEventArgs ^e) override{
        if(e->Button == System::Windows::Forms::MouseButtons::Left) this->Location = System::Drawing::Point(this->Location.X+1, this->Location.Y+1);
    }
    virtual void OnMouseUp(System::Windows::Forms::MouseEventArgs ^e) override{
        if(e->Button == System::Windows::Forms::MouseButtons::Left) this->Location = System::Drawing::Point(this->Location.X-1, this->Location.Y-1);
    }
};

, как описано выше, я могу нормально изменять переменные, но когда я пытаюсь изменить их функции ... Он просто перестает выполнять другие функции.Я имею в виду, позже, когда я сделаю это ...

CustomButton ^encButton;
this->encButton->Click += gcnew System::EventHandler(this, &Form1::encButton_Click);

Он просто полностью игнорирует это, вообще не будет вызывать функцию encButton_Click.То же самое, если я попытаюсь сделать это mousedown / что угодно.

Я полагаю, я перезаписываю что-то, что мне не нравится делать ... Но я не могу придумать другой способ сделать то, что яя пытаюсь сделать?

1 Ответ

1 голос
/ 06 февраля 2011

Вы должны вызвать метод базового класса, чтобы исходный код платформы работал. Исправлено:

virtual void OnMouseDown(System::Windows::Forms::MouseEventArgs ^e) override {
    __super::OnMouseDown(e);
    if (e->Button == System::Windows::Forms::MouseButtons::Left) {
        this->Location = System::Drawing::Point(this->Location.X+1, this->Location.Y+1);
    }
}

У вас есть выбор между вызовом метода базового класса первым или последним. Хотя последнее обычно является правильным способом, вы достаточно меняете состояние кнопки, чтобы сначала вызвать метод базового класса. Это зависит.

...