2017-01-03 18 views
0

私は^(オブジェクト演算子へのハンドル)はどのように機能しますか?

textBox1->Text = textBox1->Text->Remove(textBox1->Text->Length - 1); 

でてtextBoxからの最後の文字を削除することができ、私はそれがテキストへの参照やポインタを作成したいと思います。しかし、私はこの

String^ t = textBox1->Text; 
t = t->Remove(t->Length - 1); // Text doesn't change 

P.S.のようにそれを行うことはできませんこのいずれかがコンパイルされません。Removeによって返される文字列を参照するために、t

String* t = textBox1->Text; // error: an ordinary pointer to a 
          // C++/CLI ref class or interface class 
          // is not allowed 

String& t = textBox1->Text; // error: an ordinary reference to a 
          // C++/CLI ref class or interface class 
          // is not allowed 

String% t = textBox1->Text // error: a tracking reference to a 
          // System::String is not allowed 
+2

.NETの文字列は不変です。代わりにTextBoxコントロールへの参照を格納します。 –

+0

@CodyGray:ちょっと好奇心から(私はC++に慣れていない)、 'textBox1'のタイプは? –

+0

@CodyGrayでも、 't-> Remove'では新しい文字列を作成しませんか? – Pavel

答えて

2
t = t->Remove(t->Length - 1); 

を単にローカル基準変更(ポインタブツ、ハンドルを、&hellip)。

テキストボックスの文字列は、そのことによって変更されていません。

あなたは

textBox1->Text = t; 

&hellipを行います。 セッター機能プロパティTextと呼びます。このセッター機能は、テキストボックスの文字列データを変更するだけでなく、テキストボックスの表示を更新するか、少なくとも無効にします。

+0

しかし 't = [new String object]'と書くときにsetter関数が呼び出されないのはなぜですか? – Pavel

+0

@Pavel 't'は単なるローカル変数であり、' TextBox :: Text'はプロパティ(フードの下のゲッター/セッターのペア)です。 –

関連する問題