電子書籍の厳選無料作品が豊富!

どうもお世話になってます。
visual C++/CLIでプログラミングしています。
ボタン1を押したら別のフォームをモードレスで
表示させたいのですが

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2^ otherform = gcnew Form2();
otherform->Show();
}

このようにした場合ボタンを押すたびに次々とフォームが
多重起動していきます。これを1つだけ表示させるように
したいのですが…

こちらのサイト
http://dobon.net/vb/dotnet/form/singleform.html
の方を参考にしてC++用に書き直してみたいのですが
どのように書いたらよいか教えてもらえないでしょうか?
よろしくお願いします。

自分は以下のように書き直してみたんですが
大量のエラーを吐き出してしまいました。

private: static Form2^ _instance;
public:
 static Form2 Instance{
   get
    {
    if (_instance == null || _instance.IsDisposed)
    _instance = gcnew Form2();
    return _instance;
    }
}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2->Instance->show();
}

A 回答 (1件)

プロパティの宣言方法が C#と C++では違います



public:
 __property Form2^ get_Instance()
 {
  if( _instance == null || _instance->get_IsDisposed() )
   _instance = gcnew Form2();
  return _instance;
 }

といった具合になると思いますよ ...
# nullが未定義 といったエラーが表示されるなら
#define null 0L
をヘッダーの先頭付近で宣言しましょう ...

この回答への補足

#define null OL

private:
static Form2^ _instance;
public:
_property Form2^ get_Instance()
{
if(_instance == null || _instance->get_IsDisposed())
_instance = gcnew Form2();
return _instance
}



private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Form2->get_Icstance->show();
}


上のように
教えてもらったのを書いてみたんですが…


構文エラー : ';' が、識別子 'Form2' の前に必要です。
型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
'OL' : 定義されていない識別子です。
'get_IsDisposed' : 'form多重起動防止::Form2' のメンバではありません。
構文エラー : ';' が '->' の前にありません。
構文エラー : ';' が '->' の前にありません。

このようにエラーが出てしまいました。
どこかまだおかしいところがあるのでしょうか?

補足日時:2007/01/13 15:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!