• ベストアンサー

ビジュアルC++でボタンの有効/無効

ビジュアルC++でプログラミングをしているのですが、ツールから貼り付けたボタンの有効/無効を操作したのですが、何度やっても成功しません><、 ネットで検索した結果 CWnd* myWnd = GetDlgItem(IDC_MYEDIT); myWnd->EnableWindow(TRUE); でできると書いてあるのですが、どのサイトの物を使用してもビルドできませんでした(;ロ;) どなたか原因がわかるかた、ご教授くださいm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

みているサンプルは 「Windows フォームアプリケーション」 で作成したプロジェクト用のものではありません。 どのタイミングで有効・無効を切り替えるかわかりませんが、 Enabledプロパティで変更できませんか? this->button1->Enabled = false; // 無効 Control::Enabled プロパティ http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.enabled.aspx

saver00
質問者

お礼

回答ありがとうございます! ビルドに成功し、ボタンの無効に成功しました 重ねてありがとうございます^^ 下記3名の方々も、。すばやい対応ありがとうございました^^

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

.NET Formアプリケーション開発あるいはExpress EditionでMFCが使えない、なんてオチじゃないことを確認したいので、VC++のバージョンを提示してください。

saver00
質問者

補足

原因究明にご協力くださりありがとうございますm(__)m バージョンは「バージョン 5.1.2600 Service Pack 3 ビルド 2600」です

  • neko3839
  • ベストアンサー率37% (100/269)
回答No.2

1.ビルド時に、どのようなエラーになりますか? 2.IDC_MYEDIT はツールから貼り付けたボタンのオブジェクトIDなのでしょうか? ※試しに VisualC++ 6.0 で試してみましたが、ボタンのオブジェクトIDがIDC_MYEDIT とすれば (ボタンのオブジェクトIDがIDC_MYEDIT というのは紛らわしいですが) CWnd* myWnd = GetDlgItem(IDC_MYEDIT); myWnd->EnableWindow(TRUE); により、無効化されたボタンを有効化できましたよ。

saver00
質問者

補足

回答いただきありがとうございますm(__)m neko3839さんの張ってくださったプログラムを実行した結果 ------ ビルド開始: プロジェクト: test2, 構成: Debug Win32 ------ test2.cpp d:\visualstudio - d00\test2\test2\Form1.h(81): error C2065: 'CWnd' : 定義されていない識別子です。 d:\visualstudio - d00\test2\test2\Form1.h(81): error C2065: 'myWnd' : 定義されていない識別子です。 d:\visualstudio - d00\test2\test2\Form1.h(81): error C2065: 'IDC_MYEDIT' : 定義されていない識別子です。 d:\visualstudio - d00\test2\test2\Form1.h(81): error C3861: 'GetDlgItem': 識別子が見つかりませんでした d:\visualstudio - d00\test2\test2\Form1.h(82): error C2065: 'myWnd' : 定義されていない識別子です。 d:\visualstudio - d00\test2\test2\Form1.h(82): error C2227: '->EnableWindow' : 左側がクラス、構造体、共用体、ジェネリック型へのポインターではありません。 型は ''unknown-type'' です。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== とエラーがでました ボタンは // // button1 // this->button1->Location = System::Drawing::Point(116, 119); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(75, 23); this->button1->TabIndex = 0; this->button1->Text = L"button1"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); // という風に記述されています 初心者ですので、詳しい事がよくわかっていません。申し訳ないです お時間割いて回答していただきありがとうございますm(__)m

回答No.1

CButton *button=(CButton*)GetDlgItem(IDC_MYEDIT); button->EnableWindow(FALSE); では駄目ですか?   有効、無効、可視、不可視、キャプションの変更などの為にメンバ関数を呼ぶ場合、オブジェクト変数は「コントロールの種類に合ったクラス」でなければなりません。   例えば、ボタンならCButtonクラスじゃないといけません。   共通親クラスであるCWndクラスでは「オブジェクトの実体がボタンなのか何なのか判らなくなっている」ので、EnableWindowメンバ関数を呼び出す事ができません。

saver00
質問者

補足

早速の回答ありがとうございます^^ノ chie65535さんの張ってくださったプログラムを実行した結果 ------ ビルド開始: プロジェクト: test2, 構成: Debug Win32 ------ test2.cpp d:\visualstudio - d00\test2\test2\Form1.h(81): error C2065: 'CButton' : 定義されていない識別子です。 d:\visualstudio - d00\test2\test2\Form1.h(81): error C2065: 'CButton' : 定義されていない識別子です。 d:\visualstudio - d00\test2\test2\Form1.h(81): error C2059: 構文エラー : ')' d:\visualstudio - d00\test2\test2\Form1.h(82): error C2039: 'EnableWindow' : 'System::Windows::Forms::Button' のメンバーではありません。 c:\program files\reference assemblies\microsoft\framework\.netframework\v4.0\system.windows.forms.dll : 'System::Windows::Forms::Button' の宣言を確認してください。 d:\visualstudio - d00\test2\test2\Form1.h(82): error C2065: 'FALSE' : 定義されていない識別子です。 というエラーがでました><、 一番最後は理解できるのですが、他が検討もつきません><、 ふがいない結果で申し訳ありませんでした >有効、無効、可視、不可視、キャプションの変更などの為にメンバ関数を呼ぶ場合、オブジェクト変数>は「コントロールの種類に合ったクラス」でなければなりません。 >  >例えば、ボタンならCButtonクラスじゃないといけません。 >  >共通親クラスであるCWndクラスでは「オブジェクトの実体がボタンなのか何なのか判らなくなってい>>る」ので、EnableWindowメンバ関数を呼び出す事ができません この部分の意味がよくわかりませんでした もしかしてエラー内容に出ているのでしょうか? 無知で申し訳ありませんでした お時間をとっていただき、ありがとうございます^^

関連するQ&A