所以在我的程序中我有一堆非常相似的按钮,它们都有相同的变量并执行相同的功能......所以我想我会创建一个“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 /无论如何。
我认为我正在覆盖一些我不喜欢做的事情......但我想不出另一种方法去做我想做的事情?
答案 0 :(得分:1)
您必须调用基类方法以保持原始框架代码正常工作。修正:
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);
}
}
您可以在第一个或最后一个调用基类方法之间做出选择。虽然最后通常是正确的方法,但您正在更改按钮的状态,以保证首先调用基类方法。这取决于。