スポンサーリンク

C++CLI のフォームでオーバーライドするイベントハンドラを見つける方法

OnFormClosingをオーバーライドしたい。

問題1:コードから作っているのでデザイナやプロパティは使えない

問題2:検索してもC#の情報しか出ない(そして大抵は名前空間がわからない)

探し方

ベースは以下

C++CLI でコードで作成したフォームにコードでコントロールを配置

まずこの状態のフォームがある。

ref class MyForm :public System::Windows::Forms::Form {

  /* 省略 */
public:
  MyForm() {
    /* 省略 */
  }
  virtual ~MyForm() {
  }
  /* 省略 */
}

ソースコードの自動補完で戻り値と引数を確認する。

void OnFormClosing(System::Windows::Forms::FormClosingEventArgs^ e)override {
  if( m_f_c == false)
    if (e->CloseReason == CloseReason::UserClosing)
      e->Cancel = true;
}

コード(一部)

ref class MyForm :public System::Windows::Forms::Form {


  System::Windows::Forms::Button^ m_button;

  bool m_f_c = false;
public:
  MyForm() {

    m_button = gcnew System::Windows::Forms::Button;

    m_button->Text = "close";
    m_button->Click += gcnew EventHandler(this, &MyForm::ClickEvent);//イベントハンドラ追加

    this->Controls->Add(m_button);//フォームに配置
  }
  virtual ~MyForm() {
    
  }

  void ClickEvent(Object^ source, EventArgs^ e) {
    System::Windows::Forms::MessageBox::Show("Close");

    m_f_c = true;

    this->Close();

  }

void OnFormClosing(System::Windows::Forms::FormClosingEventArgs^ e)override { if( m_f_c == false) if (e->CloseReason == CloseReason::UserClosing) e->Cancel = true; }
 
};

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: