初めて質問いたします。
C++ .NET 2005 Express Beta版を入手し、Windows Formsのプログラミングを勉強してます。
TextBoxのTextに値を変数で指定したいのですがどうすれば良いのかわかりません。
textBox1->Text = "Test";
とダイレクトに値を指定すればできるのですが、
#include <string>
using namespace std;
(省略)
string str = "Test";
textBox1->Text = str;
は、エラーになってしまいます。
C++標準のstringクラスではなく、.NETはStringクラスがあるようですが、これの使い方がMSDN等で調べているのですが分かりません。
分かりやすいURLなどありましたら教えていただけませんか。
No.1ベストアンサー
- 回答日時:
textBox1->Text = new String(str.c_str());
でいけるんじゃないかなあ。
試してないのでなんですが、
C++のstringクラスからは、c_str()で、いわゆるNULL終端文字列へのポインタが得られて
.NETのStringクラスは、NULL終端文字列でのコンストラクタがありますから。
この回答への補足
早速の回答ありがとうございます。
試してみましたがダメでした。
英語で分かりにくい、エラーメッセージを見てみたらgcnewという単語があったので、
textBox1->Text = gcnew String(str.c_str());
としてみたら出来ました。(^^)
gcnewついては後で調べて見ますが、そもそもStringが分かりません。
String str;
を追加するだけではエラーになってしまいます。
MSNDのサンプルをまねて
String* str = S"Test";
としてもエラーとなります。
Stringを使うために、
(1)#using <mscorlib.dll> が必要でしょうか?
(2)using namespace System::Text; が必要でしょうか?
(3)Command Line オプションの追加が必要でしょうか?
また、String* str = S"Test"; の S は何ですか?
初歩的な審問ばかりですみません。
ネットで調べてはいるのですが、なかなか分かりません。
No.3
- 回答日時:
>C++ .NET 2005 のベータ版だからなのでしょうか。
私は、.NET2003を使っているので
2005についてはわかりません、すみません。
でも、
2003でできることが、
2005でなぜできないのか興味がありますので
よろしかったら、エラーメッセージの部分を補足であげてくれませんか?
この回答への補足
new を使ったときの Build Log の Output Window のところです。
Compiling...
Form1.cpp
e:\Documents and Settings\hi_tag\My Documents\Visual Studio\Projects\Test004\Test004\Form1.h(101) : error C2750: 'System::String' : cannot use 'new' on the reference type; use 'gcnew' instead
e:\Documents and Settings\hi_tag\My Documents\Visual Studio\Projects\Test004\Test004\Form1.h(101) : error C2664: 'System::Windows::Forms::TextBox::set_Text' : cannot convert parameter 1 from 'System::String *' to 'System::String ^'
No user-defined-conversion operator available, or
Cannot convert an unmanaged type to a managed type
No.2
- 回答日時:
#1>試してみましたがダメでした。
#include <string>
using namespace std;
string str = "Test";
textBox1->Text = new String(str.c_str());
ウチで試してみた所、問題なく実行できました。
そちらで、なぜ、エラーになるのかはわかりません。
何か勘違いされているのではないかと思います。
>Stringを使うために、
フォームアプリケーションを作成するプロジェクトの時点で、自動的に
using namespace System;
されているので、他には、何もする必要はありません。
S"文字列"
は、C++.NETでの拡張的な文字列リテラルの書き方で
new String("文字列");
と同等です。つまり、自動的にStringオブジェクトを作っているのと同じです。
リテラルにすると、newする場合と違うのは、同じ領域が使われるということが違います。(効率が良い)
gcnewについては、私の環境では、エラーになりました。よくわかりません。
回答ありがとうございます。
newでエラーになるのは、恐らく C++ .NET 2005 のベータ版だからなのでしょうか。
C++ .NET 2005 のベータ版が無料でダウンロードできるので、これを使っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) このコードに追記事項の仕方を教えて下さい。 以下のコード内容に出てくる。セルH3が空白の場合、エラー 4 2023/08/03 00:22
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 16:59
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 2 2022/11/18 15:34
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダイアログ表示時にチェックボ...
-
FriendとPublicの違い。。。
-
(UWSC) 「#32770」の意味わかり...
-
privateなメンバ関数をテストす...
-
ダイアログクラスのコントロー...
-
既定のコンストラクタがない?
-
このコンパイルエラーの意味に...
-
自動生成コードを変更したい(VB...
-
VC++ リストボックスにデータを...
-
MFCでSDIからダイアログの呼び出し
-
【C++】相互参照
-
OnPaintとOnDraw関数の違いにつ...
-
CViewクラスの切り替え
-
クラスのアドレスを引数として...
-
Delphi6 DLL内でのメモリ共有(?)
-
VB.Netの大域変数
-
MessageBoxを継承したい
-
DateAdd関数について質問があり...
-
エディットコントロールのイベ...
-
任意の解像度のメモリデバイス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
DebugクラスとTraceクラスの違い
-
ボタンのオーナードローについて
-
OnInitDialog()の関数の組み込み方
-
IncludeではなくClassで宣言す...
-
関数の呼び出し元の検索
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
DataGridViewのセルに斜線を引...
-
C#で通常のbuttonコントロール...
-
エディットコントロールのイベ...
-
CMainFrameクラスの使い方
おすすめ情報