• ベストアンサー

VisualStudioのインテリセンス

MessageBox関数を使うのにC#では初めてであったため、 MessageBox.show("テスト"); でコンパイルできずいろいろ考えてしまいました。 お察しの通りMessageBox.Show("テスト"); が正解なのですがShowのSが大文字でなく小文字のままで大文字に自動変換されなかったのはどのような原因が考えられるでしょうか。VisualStudioは2010です。 足りない説明があったらご指摘いただけると幸いです。

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

  • ベストアンサー
  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.2

インテリセンスがアクティブの状態で messagebox.show( と入力すると、確かにVC#2010の標準設定では自動的に MessageBox.Show( と修正してくれるのが正常です。 ですが、この挙動はVBとは異なり、あくまでインテリセンスから入力候補を選択する、という作業を利用者が意図して行う必要があります。 たとえば、 messagebox. → escを押す → show( のように入力を行うと、MessageBoxは入力候補を指示したことになりますが、escを押した段階でインテリセンスがオフになるので、showについては入力した文字列がそのまま残ります。 インテリセンスを使用する場合は、入力候補がアクティブが確認する必要があります。 また、入力候補が機能していない場合はCtrl+Spaceで有効化できます。 たとえば、 messagebox. → escを押す → show → Ctrl+Spaceを押す とすると、showをShowに自動で修正してくれることを確認できると思います。 これはスペルが修正されたのではなく、MessageBoxのメンバから、大文字、小文字無視で先頭が"show"一致するメンバがひとつしかないため、それが選択される、という挙動です。 したがって、 messagebox. → s → Ctrl+Space だけでも MessageBox.Show と入力できます。

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

VB.NET ではどうだか知りませんが、 C# は名前の大文字・小文字を区別します。したがって、名前の大文字・小文字を勝手に変換されては困ります。

関連するQ&A

  • VC++.NET2003でユーザー関数内でMessageBox::Show()が使えません??

    VC++.NET 2003 のヘルプの、「チュートリアル : 簡単な Windows フォームの作成」に MessageBox::Show()関数を使ってHello,worldを表示させる例が書いていますが、 この関数を、自分で作った関数(フォームのクラスのメンバ関数で、 関数のコードはインライン関数でなく、cppファイル側に書いています)に持っていくと、 error C2653: 'MessageBoxA' : 識別子がクラス名でも名前空間名でもありません。 error C2660: 'System::Windows::Forms::Control::Show' : 関数に 1 個の引数を指定できません。 と、コンパイルエラーが出てしまいます。 MessageBox::Show()を自前の関数で使う方法を、 どなたか教えていただけないでしょうか?

  • VisualStudio.netでmemcmp関数が使えない?

    以前VC++6.0で作ったプログラムをVisualStudio.net_pro_ver2003でコンパイルしようと思っています。 VC++の空プロジェクトを作り、既存項目の追加で以前作成したソースファイルを挿入し、 それをコンパイルしました。 すると、初めにmemcmp関数が「'/clr'オプションを持つCコンパイラで完全なプロトタイプ関数が必要です」と表示され、 memcmpのある全ての行に対し、「関数へのポインタを通して実行される呼び出しに対する引数が多過ぎます」いうエラーが出てしまいます。 strings.hもインクルードしておりますし、VC++では問題なくコンパイルが通っていたので原因が良く分かりません。 そもそもVC時代から良く分からずに使っていたので基本が出来ていないようですが、 宜しく御願い致します。

  • Cで作成したDLL関数をVBから呼ぶ(.NET)

    以前の質問に「Cで作成したDLL関数をVBから呼ぶ」(QNo.1703839)がありますが、下記のコードを見るとVB6での内容だと思います。 Dim keydata As String * 128 keydata = String$(128, Chr(0) & Chr(0)) VB.NETでVC++のDLLで変更した文字列を受けたいのですが、 どのようにすればよいのでしょうか? VB.NET2003 <DllImport("DllTest.dll")> Private Shared Function _ Test(ByVal s1 As String) As String End Function Private Sub btnTest_Click(...) ... Dim s1 As String = "abc" Dim s2 As String Dim s3 As String s2 = Test(s1) MessageBox.Show(s2) ' "1"が表示される s3 = StrConv(s2, VbStrConv.None) MessageBox.Show(s3) ' 同じく"1"が表示 end sub VC++のDLL extern "C" __declspec (dllexport) BSTR __stdcall Test(char* s1) { AfxMessageBox(s1); // "abc"が表示される OK strcpy(s1, "123"); CString s2; s2 = "123"; return s2.AllocSysString(); } また、文字列に全角を含めても大丈夫でしょうか? Unicodeの変換処理を行う必要があるのでしょうか? よろしくお願いします。

  • VisualStudio6.0(C++)にてコンパイルが通らない(He

    VisualStudio6.0(C++)にてコンパイルが通らない(HelpMe)。 既存のPGに関数を追加して処理を増やそうとしたら、コンパイルで"定義されていない識別子です"とエラーになってしまいます。PGはこんな感じになります。 //-- UINT DoAllThread( LPVOID dammy); //-- void CHopeView::OnDoall(){   AfxBeginThread(DoAllThread,&tm); } //-- UINT DoAllThread( LPVOID dammy) { OnSeilf(); OnGailf(); OnKeilf();//今回この一行を追加したらコンパイルが通らなくなりました。 return 0; }; //-- void OnKeilf() { //--まだ何も処理を書いていない } エラー内容は error C2065: 'OnKrtlf' : 定義されていない識別子です。 error C2373: 'OnKrtlf' : 再定義されています。異なる型修飾子です。 になります。 宜しくお願いします。

  • VisualStudioの文字コードについて

    現在、WindowsとLinux(Unix)でソケット通信を行い、文字のやり取りをするプログラムを作成しています。 ソースコードやコンパイルの環境は、 Windows側(Windows7):C言語(Windowsプログラミング)、VisualStudio2013でビルド&実行 Linux側:C++、g++(Cygwinを使用) です。 Windows側のソースコードがShift-JIS、Linux側がUTF-8であり、このままだと文字化けしてしまうため、Windows側のソースコードをUTF-8に変更(VisualStudioでソースコードを保存するときに「エンコード付きで保存」を使用)して再度ビルド、実行を行ったのですが、やはり文字化けしてしまいます。 ソースコードの文字コードを変更しただけでは不十分なのでしょうか? 原因があまりよく分からず困っています。 もし何か分かることがあれば教えていただきたいです、よろしくお願いします。 (もしかしたらカテゴリ違いかもしれません、申し訳ありません)

  • WinXP上でVisualStudio6.0で作られたワークスペースを

    WinXP上でVisualStudio6.0で作られたワークスペースを VisualStudio2010Ultimateで開いてビルドしようとするとエラーになります。 VisualStudio6.0→2010の移行で手動で必要な作業はあるのでしょうか? ビルドしようとしているワークスペースは、30個程のプロジェクトで構成されています。 ワークスペースを開く際にプロジェクトファイルを変換したのですが、 プロジェクトの依存関係を自動判定あるいはVS6の設定が無効になっている為にビルドをするとコンパイルエラーがでました。 手動でプロジェクトの依存関係とビルドの順序を設定しなおすと全プロジェクトのコンパイルは通るようになったのですが、プロジェクト間でのシンボル未解決のLNK2019,2001がでました。 プロジェクト単体でビルドすると.libファイルが生成されて、シンボルと実モジュールができているようです。 しかし、ワークスペース全体のビルドをすると、各プロジェクトをビルドして.libを生成して、生成した.libを削除しています。 結果として、コンパイルは成功してリンクでエラーになっています。 プロジェクトの設定をVS6と比較しながら原因を探しているのですが、関連しそうなものがなくて困っています。 よろしくお願い致します。 以上

  • VisualStudio2012 外部依存関係

    現在、VisualStudioExpress2012を使ってC言語のコードを書いています。 1つのソリューション内に、機能コードを書いてあるプロジェクトAと、 上記機能コードをテストするためのテストコードを記述したプロジェクトBとが ある状態にしたいと考えております。 しかし、プロジェクトBをスタートアッププロジェクトにし、プロジェクトAを外部参照に 割り当てても、コンパイル時にプロジェクトBから呼び出すプロジェクトAの関数check()が、 エラー 1 error LNK2019: 未解決の外部シンボル _check が関数 _main で参照されました。 というエラーになってしまう状況です。 プロジェクトBから呼び出している、関数check()の定義をvisual studio上の機能を用いてジャンプさせると、確かにプロジェクトAにて定義しているコードまでたどり着いており、なぜ「未解決」となってしまうのかが判断できないです。 見落としている点、設定など分かる方がいらっしゃいましたら、ご教授願います。 また、不足情報などございましたら、ご指摘いただければ幸いです。 以上

  • 初心者です。VisualStudioについて教えてください。(C++)

    初心者です。VisualStudioについて教えてください。(C++) VisualStudioのWindowsフォームプロジェクトを作成すると 「Form1」という簡易画面が自動で作成されます。 その画面にボタン等を追加していくと、そのボタン押下時の処理が 「Form1.h」にどんどん追加されていきます。 なぜヘッダファイルに処理の実装を記述していくのでしょうか? 基本的に、ヘッダとは関数やクラスを定義するだけのもので 実装はcppファイルに記述していくものだと研修等で教わったのですが。 なぜなのでしょう? ご教授下さい。 また、「Form1.h」ではなく「*.cpp」ファイルに実装を記述したい場合 どうのようにすればよいのでしょうか?

  • ダイアログへ文字列を表示させる方法(API)

    TCHAR s[80] = "Test"; MessageBox(NULL, s, "題名", MB_YESNO); としてダイアログを表示させるのと同じように、 ダイアログボックスをリソースエディタで作成し 作成したダイアログ内に、文字列を表示させるには どのようにしたら良いでしょうか? 作成したダイアログは、MessageBox関数で作成されるものと同じ。 表示させたい文字列は、MessageBox関数の第2パラメータのTCHAR型変数sと同じ。 ダイアログ内の表示させたい所の識別子は、IDC_STATIC。 MS VC++ & Win98 の環境で作成してます。

  • C++ visualstudio グローバル変数

    C++のプログラミングに関する質問です。 visual studio2008を使用しています。 手元に非常に複雑なC++ファイルなどから構成されている1つのprojectがあります。(ヘッダファイルなどもあります) そのため、このprojectをデバッグすると、A.cppファイルをデバッグ→B.cppファイルをデバッグ→A.cppファイルをデバッグ→C.cppファイルをデバッグのように、色々なcppファイルを跨ってデバッグします。 1つのcppファイルには大量の関数があり、cppファイルの先頭や,関数外の部分に例えばA.cppで int test などと宣言すれば、A.cppファイル内ではtestと名付けた変数をすべての関数で使えます。 しかし、あくまでA.cppファイル内だけで使用できるだけで、別のBやC.cpp内で使うことはできません。 このtest変数をB.cppやC.cppファイルでも使えるようにするにはどうすればいいでしょうか? 上で挙げた例でいうなら、A.cppからB.cppファイルに移動する際の関数の引数として渡す方法は考えられますが、実際には、 test変数を使いたいのはかなり後に登場するcppファイルで関数の引数として扱うのは非常に大変です。 (Z.cppでtest変数を使いたい。しかしZ.cppに到達するまでにはA~Y.cppを通り、その間に登場するすべての関数でtestを引数にしなければならない) 関数の引数でtest変数を使えるようにする以外の方法がありましたたら教えていただけると幸いです。 実際にやりたいことは A.cpp内にある関数が実行されたらその数をカウントし(A.cppのこの関数は何度も呼び出される関数) //count ++ このcount++の値によってZファイルのある関数での動作を変えたいと思っています。 if(count<100){ printf("aaa"); } しかし、現状ではZ.cppファイル内ではcountが定義されていないので上のようなif文を書くとエラーになってしまいます。

専門家に質問してみよう