• ベストアンサー

VC++2005 テキストボックス

現在、VC++2005でプログラムをしているのがどうしてもエラーが出てしまうのでわかる方がいればよろしくお願いします。 プログラムとしては、テキストボックスの中のデータが空だった場合にはある処理を行うというものを作っています。 プログラム本体は、 if(textBox1==NULL) { label1->Text="データがありません\n"; } です。 エラーメッセージは、 エラー 1 error C2446: '==' : 'int' 型から'System::Windows::Forms::TextBox ^' 型への変換ができません。 というメッセージが出てしまいます。 このエラーは、型変換が違っているということのエラーなのでしょうか?どのように修正するとよいのでしょうか? 説明などがとても下手かもしれませんが、よろしくお願いします。

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

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

 こんばんは。  これでは駄目でしょうか? if(textBox1->Text == System::String::Empty) { //do something label1->Text = "データがありません\n"; }

xxmajimaji
質問者

お礼

ありがとうございました。 きちんと動きました。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

お使いのコードを分解してどこが意図通りに動作しないのかを検証しましょう // テキストボックスのデータを取得 String^ ss = textBox1->Text; int nData = 0; // 取得した文字列が空の場合 または Int32への変換が出来ない場合 // メッセージボックスを表示する if ( String::IsNullOrEmpty(ss) || Int32::TryParse( ss, nData ) == false ) {   MessageBox::Show( L"数値を入力してください" );   textBox1->Focus();   return; } といった具合なら String^ ss = textBox1->Text; MessagBox::Show( ss, L"テキストボックスの値を取得" ); int nData = 0; if ( String::IsNullOrEmpty(ss) ) {   MessageBox::Show( L"空白は許されません" );   textBox1->Focus();   return; } if ( Int32::TryParse( ss, nData ) == false ) {   MessageBox::Show( L"数値を入力してください" );   textBox1->Focus();   return; } といった具合にして見ましょう 入力された文字が全角数字の場合はTryParseは失敗します

xxmajimaji
質問者

お礼

ありがとうございます。 正常に動きました。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

if(textBox1==NULL) ↓ if(textBox1->Text=="") ではダメか? 「データが空」つまり「文字列の長さが0」つまり「文字列が""」ってのは「NULL」とは違う。 NULLとは違うのだよNULLとはッ

xxmajimaji
質問者

お礼

ありがとうございます。 それは一応試してみたのですがダメでした。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

C++/CLIで組んでいるのですね # プログラミングスタイルも記述しておきましょう TextBoxオブジェクトから直接 int型との比較は出来ないので TextBoxのTextプロパティから設定値を引き出してこれを int型へ変換し比較しましょう TextBoオブジェクトの変数がtextBox1であるなら // テキストボックスのデータを取得 String^ ss = textBox1->Text; int nData = 0; // 取得した文字列が空の場合 または Int32への変換が出来ない場合 // メッセージボックスを表示する if ( String::IsNullOrEmpty(ss) || Int32::TryParse( ss, nData ) == false ) {   MessageBox::Show( L"数値を入力してください" );   textBox1->Focus();   return; } などといった具合にしましょう # 字下げには 全角スペースを使っていますので行頭のスペースを置換してください

xxmajimaji
質問者

補足

教えていただきありがとうございます。 そのプログラムなどを使いながらビルドを行ったのですが、データが入っているときも入力してくださいというようなメッセージが表示されてしまうのですがどうしたらよいのでしょうか?

関連するQ&A

  • VC++2005 型変換

    テキストファイルを開いて、そのファイルの中身をfgetsで読みながらそれを何回か繰り返すというようなことをするというプログラムを書いてます。プログラムは下になります。 int m; FILE* pFile; char buffer[128]; pFile=fopen("p1.txt","r"); pFile=textBox1->Text; if (pFile==NULL) { label1->Text="ファイルがありません。\n"; } for(m=1; m<=8; m++) { fgets(buffer,128,pFile); String^ buffer; buffer=textBox2->Text; } } デバックを行うと次のエラーが出てしまいます。 error C2440: '=' : 'System::String ^' から 'FILE *' に変換できません。 どのように直せばよいのでしょうか?

  • VC++2010について

    Windowsフォームアプリケーションを勉強し始めています。 Formに表示するだけの簡単なプログラムを打ち込んでみたのですが、ソリューションのビルドをしてみると、次のような2つのエラーが出ました。(実際にはもう一つあるのですが、それはintからfloatに変換されているというだけ) C1003.cpp(6): error C2143: 構文エラー : ';' が 'using' の前にありません。 C1003.cpp(19): fatal error C1075: 左側 中かっこ '{' に対応するものが 'g:\admin\visual studio 2010\projects\vc石立\c1003\c1003\Form1.h(3)' で見つかる前に EOF が検出されました。 こちらが入力したのは、Formに関するプログラムだけで、メインプログラム(.cpp)は一切変更してません。また、簡単なプログラムを何個か打ち込んでみたのですが、同じ二つのエラーが出ます。Formに関するプログラムの記述が間違ってるとも思えません。 その上、usingの前の行に” ; ”を入れてやると、一つ目のエラーは消えました(その前はinclude文)。おまけに、メインプログラムの最後の行(19行目)に” } ”を入れると、二つ目のエラーも消え、正常にビルドされ、デバックもできました。 解決はしたのですが、キツネにつままれたようです。いざ、無料でVCが手に入ると聞きつけ、喜び勇んで勉強しだしたのに…これからも同じ修正をしなくちゃと思うと、うんざりです。 コンソールアプリケーションは、問題なく動きます。 何か、心当たりのある方はいませんか? なお、打ち込んだのは、次の命令(2行目から)だけです。 #pragma endregion private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) { } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { double a=double::Parse(textBox1->Text); double b=double::Parse(textBox2->Text); int iNum=comboBox1->SelectedIndex; double c; switch(iNum){ case 0:c=a+b;break; case 1:c=a-b;break; case 2:c=a*b;break; case 3:c=a/b;break; }

  • VC++2005 型についてのエラー

    現在VC++2005でプログラムを作成しています。 そこでテキストファイルに書かれて保存されているものをテキストボックスに表示するというものを作っています。 そして今は、ssという変数にその表示されているものを代入してあります。そこでそのssというものと7:00とテキストファイルに書かれているものを比べてみたいと考えています。 そこでstrcmpで比べてif文を作りたいのですが、下に書いたエラーで変換できませんと出てしまいます。 このような場合はどのように修正すればよいのでしょうか? 基本的な質問かもしれませんがよろしくお願いします。 「'strcmp' : 1 番目の引数を 'System::String ^' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照)」 **************************************************************** String^ ss; ss=textBox2->Lines[0]; textBox4->Text=ss; if (strcmp(ss, "7:00")==0) { MessageBox::Show("7時"); } else { MessageBox::Show("それ以外"); } ****************************************************************

  • VC++でラベルに表示できない[.NET]

    VC++でラベルに表示できない[.NET] 以下のプログラムですがエラーが出ます。 #include "stdafx.h" #include "Form1.h" using namespace CursorXY1; [STAThreadAttribute] int main(array<System::String ^> ^args) { static POINT Point; // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); label1->Text="これはラベルです"; return 0; } エラー内容: 1>.\Form1.cpp(27) : error C2065: 'label1' : 定義されていない識別子です。 1>.\Form1.cpp(27) : error C2227: '->Text' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。 1> 型は ''unknown-type'' です。 ヘッダーファイルに「Form1.h,resource.h,stdafx.h」があります。 Designerでlabel1を設置しました。 Windowsフォームアプリケーションを選択しました。 初心者ゆえにずっとつまいずいていて、このたび質問させていただくことになりました。 よろしくお願いします。

  • VC++ 基礎

    VBAの低レベル(便利)な言語に慣れすぎて、VC++を始めましたが型変換が難しいです。 メッセージボックスに値を出すだけで一苦労です。 型変換を学べるサイトはないですか? または型変換の便利なクラスはないですか?

  • vc++2005エラーメッセージ

    vc++6.0では問題なかったのですが BEGIN_MESSAGE_MAP(CCryMesView, CView) ON_COMMAND(ID_MESS_SEND, OnCryMesSend) //{{AFX_MSG_MAP(CCryMesView) //}}AFX_MSG_MAP END_MESSAGE_MAP() に対して error C2440: 'static_cast' : 'int (__thiscall CCryMesView::* )(void)' から'AFX_PMSG' に変換できません。 1> スコープ内でこの名前を指定された関数でターゲット型に一致するものはありません。 とのエラーメッセージが出ます。 原因と修正方法を教えてください。

  • vc++ scanfの使い方

    vc++についてです。 最近vc++について学び始めているのですが使い方がさっぱりわかりません。 C言語は学校の方で習っておりある程度は書けるのですが・・・。 エラーは下記の通りです。 scanfを使って足し算の簡単なプログラムを作ったのですが、 デバッグ無しで実行を押すとデバッグエラーと出てしまいます。 エラー文は画像の通りです。 プログラムは、 #include<stdio.h> int main(){ int a; int b = 2; scanf("%d", a); a += b; printf("%d \n", a); return 0; } です。 テスト感覚で作ったのですが思うようにいかずどうしようかと困っています。 vc++自体が初めてなのでできれば詳しい説明お願いいたします。

  • VC++ ビルドできず?

    VC++2010をダウンロードして、プログラムを作って、ビルドしようとするのですが エラーでビルドしません。使用前になにか設定等あるのでしょうか?教えて下さい。 (1)簡単なボタンとラベルで、ボタンを押したら、文字がLabelに表示するもビルドしません。 (2)OSはWindows7 VC++2010でビルドせず。 (3)別なPCで Windows XPとVC++2010では問題なく、ビルド、動作します。 (4)Windows8とVC++2010でも問題ありません。 (5)VC++2010のソースはvc-webの同じものでダウンロードして、PCにインストールしています。 以上、よろしくお願いします。

  • VC++のエラー

    windows xp VC++ 6.0 http://www.kumei.ne.jp/c_lang/intro/no_57.htm に書いてある通りに、タイプをwin32 Application で 設定して、 #include <windows.h> int WINAPI WinMain( HANDLE hInstance , HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL, (LPCSTR)"メッセージ・ボックスのテストです。", (LPCSTR)"猫でもわかるプログラミング", MB_OK); return 0; } をプロジェクトに追加し、ビルドすると、 ******************************** --------------------構成: aaadf - Win32 Debug-------------------- コンパイル中... fdfdfdf.cpp D:\VC\aaadf\fdfdfdf.cpp(7) : error C2731: 'WinMain' : 関数はオーバーロードできません。 D:\VC\aaadf\fdfdfdf.cpp(5) : 'WinMain' の宣言を確認してください。 cl.exe の実行エラー fdfdfdf.obj - エラー 1、警告 0 ********************************* とエラーになります。 何がいけないのかさっぱりわかりません。。

  • VC++2010を覚えたい(極めたいではない)

     ExcelVBAで実験データを整理していますが、Excelのみでしか使えない等の問題からVC++2010をそこそこ使えるようになりたいのです(極めようとまでは思っていません)。先日もここで質問させていただいたのですが、メッセージボックスを出したりファイル操作をしようとすると、知識不足のためコードが正しく書けずエラーばかり出て格闘しています(VBAだと、msgbox"こう書けば表示される" の一行で済むことをやるのに、かなり格闘します)。  そこで、これら基本動作を完全に使いこなせるようにするために勉強をしたいのですが、何について勉強すればいいのかよくわかりません。どんな本を買って何を勉強すべきでしょうか?いい本があったら教えてください。特にできるようになりたいことを下に書きます。 1 #include <stdio.h>とかのインクルードファイルを宣言する位置。 2 intやdouble等の変数宣言も、たまにエラーでできないことがある。   関数内では変数宣言の方法が違うのかな?   String^ でどうして^がついたりつかなかったりするかわからない。   これでエラーとかよく出ます。^は大嫌い>< 3 メッセージボックスとかの表示。messageboxの前や後ろにshowとか::とかどうして必要か   わからない。メッセージボックスに確認する変数の数値を出すのも難しい。 4 データファイルをいろいろ操作したい。データファイルはテキストデータのみ 5 グラフもVC++で書けるとうれしい。必要があるときだけでいい。 forやif等の制御構造、配列、ポインタ等はもう知っています。 これらができるようなるには、「クラス」とかを勉強するとわかるのでしょうか? クラスが何のことだかもわかりませんが。