2011-02-06 15 views
0

私のプログラムでは、本当に似ているボタンの負荷があります。すべて同じ変数を持ち、同じ機能を実行します...だから、私は "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

元のフレームワークコードを機能させるために、基本クラスメソッドを呼び出す必要があります。修正:

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); 
    } 
} 

基本クラスメソッドを最初または最後に呼び出すかどうかを選択できます。最後は通常は正しい方法ですが、ボタンの状態を変更して、基本クラスメソッドを最初に呼び出すようにしてください。場合によります。

+0

ありがとうございました。好奇心から〜あなたが知っていれば...オリジナルのフレームワークコードには、それ以上の機能が実行されないという意味が含まれていますか? –

+0

私はそれを解読することができません。フレームワーク内のOnMouseUp/Down基本メソッドは、Clickイベントを発生させます。 –

+0

申し訳ありませんが、私はひどく言いました...なぜ、this> encButton-> MouseUp + = gcnew System :: Windows :: Forms :: MouseEventHandler(これは、&Form1 :: encButton_Click);動作しませんか? –

関連する問題