none
DialogResult::OK RRS feed

  • 質問

  • どうも、こんにちわ。

    VC++の初心者です。

     

    Windowsフォームアプリケーションで、ファイルダイアログを開く

    コードを書いたのですが、

    OKボタン/キャンセルボタンを押した時のチェックでエラーが出まして、

    打開できない状態です。

     

    ■コード

     String ^ss;

       if(openFileDialog1->ShowDialog() == DialogResult:SurpriseK)
         {
          ss = openFileDialog1->FileName;
          label1->Text = ss;
         }else {
          label1->Text = "openキャンセルされました。";
         }

     

    ■エラー出力では、

    Form1.h(158) : error C2039: 'OK' : 'System::Windows::Forms::Form:Big SmileialogResult' のメンバではありません。
    Form1.h(23) : 'System::Windows::Forms::Form:Big SmileialogResult' の宣言を確認してください。
    Form1.h(158) : error C2065: 'OK' : 定義されていない識別子です。
    Form1.h(172) : error C2039: 'OK' : 'System::Windows::Forms::Form:Big SmileialogResult' のメンバではありません。
    Form1.h(23) : 'System::Windows::Forms::Form:Big SmileialogResult' の宣言を確認してください。

     

    と出ます。

    参考書の通りコードを書いたのですが、ver.2003対応のためか、

    エラーが出ます。

     

    環境は、

    WinXP

    VC++2005

    です。

     

    単純すぎる質問で、すみませんです。

    ご教授のほど、よろしくお願いします。

     

    2007年5月11日 6:21

回答

すべての返信

  • DialogResultというのは、

          System::Windows::Forms
          System::Windows::Forms::Form

    という2つの名前空間(後者は名前空間ではなく、プロパティ名ですけど、、、)にあります。
    Formクラスの派生クラスであるForm1クラスないで、何も名前空間を指定しないで
    記述すると、自分自身のDialogResult(this->DialogResult)つまり、後者を見ることになります。

    [MSDN]
    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.form.dialogresult(vs.80).aspx
    より、FormクラスのDialogResultは単なるプロパティであるため、DialogResult:SurpriseKというものを
    識別できないわけです。

    今回使いたいのは前者のDialogResult列挙型ですので、それを認識できるように名前空間を
    指定します。
    [MSDN]
    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.dialogresult(VS.80).aspx

    よって、
    >DialogResult:SurpriseK

    System::Windows::Forms:Big SmileialogResult:SurpriseK
    と記述すればいいでしょう。
    2007年5月11日 7:10
  • >よって、
     >>DialogResult:K
     >を
     >System::Windows::Forms:ialogResult:K
     >と記述すればいいでしょう。

    または、using ディレクティブを使用して

    using namespace System::Windows::Forms;

     でもできます。
    2007年5月11日 7:27
  •  keichan さんからの引用
    または、using ディレクティブを使用して using namespace System::Windows::Forms; でもできます。

    そうでしょうか?

    インスタンス メンバである Form.DialogResult プロパティが優先される '問題の本質' は解決しないと思われます。
    そのあたりは、すでに Blue さんによって解説がなされて "よって" という結びになっていると思っていましたけど。
    2007年5月11日 9:31
  • 早速のご回答、ありがとうございました。

     

    返信が遅れてしまい、申し訳ございませんでした。

     

    いつも明確にして、的確なる根拠付きのご教授、蒼の洞窟さんには、感謝しております。

    今回も、お教えいただいた内容を履行しまして、無事に成功しました。

     

    たいへん、助かりました。

    ありがとうございました。

     

    他にご回答くださった方々も、ありがとうございました。

     

     

    2007年5月12日 1:14