У меня есть метод, который создает сообщение помощи, а затем устанавливает TLabel
текстовое свойство к этому сообщению помощи. Однако всякий раз, когда я пытаюсь установить текст метки, я получаю следующее исключение:
'String index out of range. (-1) Must be >=0 and <=42'
Метод заключается в следующем:
void __fastcall TPasswordChangeForm::BuildHelpMessage()
{
String HelpMsg = "";
if( NewPassEdit->Text.Length() < MinPasswordLength )
{
HelpMsg += "Password length too short.";
}
else
{
HelpMsg += "Password length OK.";
}
HelpMsg += "\n";
if( NewPassEdit->Text == ConfirmPassEdit->Text )
{
HelpMsg += "Passwords match.";
}
else
{
HelpMsg += "Passwords do not match.";
}
ShowMessage( HelpMsg ); //added for debugging, shows string as expected
HelpLabel->Text = HelpMsg; //exception thrown here
}
Я добавил ShowMessage
позвоните просто, чтобы проверить значение моей строки. Это просто замечательно. Я также могу установить для метки любое произвольное значение, например:
HelpLabel->Text = "This message works!";
Я делаю что-то не так, как я строю HelpMsg
Строка?
Редактировать: комментирование строки, которая добавляет \ n к строке, решает проблему. Точно так же следующий код будет вызывать исключение:
String test = "this is a test";
test += "\n";
test += "test 2";
HelpLabel->Text = test;
Что такого в \ n вызывает проблемы? Как правильно добавить новую строку?
В настоящее время выполняется обновление до нового C ++ Builder, поэтому вы не можете поиграть со своим фрагментом. У меня есть метод для обработки сообщений об ошибках, которые выводятся на вкладку журнала, в отличие от ShowMessage, вместо использования строки, хотя я использую TStringList. Например:
void __fastcall TPasswordChangeForm::BuildHelpMessage()
{
TStringList HelpMsg = new TStringList(this);
if( NewPassEdit->Text.Length() < MinPasswordLength )
{
HelpMsg->Add("Password length too short.");
}
else
{
HelpMsg->Add("Password length OK.");
}
if( NewPassEdit->Text == ConfirmPassEdit->Text )
{
HelpMsg->Add("Passwords match.");
}
else
{
HelpMsg->Add("Passwords do not match."_;
}
ShowMessage(HelpMsg->Text); //added for debugging, shows string as expected
HelpLabel->Text = HelpMsg->Text; //exception thrown here
}
Используя TStringList или TStrings (parent) при доступе к свойству Text, строки в объекте выводятся, каждая из которых отделяется переводом каретки и переводом строки.
Увидеть Документы TStringList здесь — надеюсь, что это поможет!