2017-01-03 2 views
0

можно удалить последний символ из TextBox поКак работает^(дескриптор оператора объекта)?

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

И я хочу сделать это создать ссылку или указатель на текст. Но я не могу это сделать, как этот

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

P.S. Любой из этого не компилируется:

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++ cli), что такое вероятный тип 'textBox1' здесь? –

+0

@CodyGray, но не 't-> Удалить' создать новую строку? – Pavel

ответ

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

только изменяет локальную ссылку (указатель-штуковину, ручки, & hellip;) t, ссылаться на строки, возвращаемой Remove.

Строка текстового поля не изменяется.

Когда вы

textBox1->Text = t; 

& hellip; вы вызываете функцию setter для свойства Text, и эта функция setter не просто изменяет строковые данные текстового поля, но обновляет или по крайней мере делает недействительным отображение текстового поля.

+0

Но почему функция setter не вызывается, когда я пишу 't = [новый объект String]'? – Pavel

+0

@Pavel, потому что 't' - это только локальная переменная, в то время как' TextBox :: Text' является свойством (парой getter/setter под капотом). –

Смежные вопросы