我有一个构建帮助消息的方法,然后将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;
导致问题的原因是什么?如何正确添加新行?
答案 0 :(得分:1)
目前正在更新到新的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
}
通过在访问Text属性时使用TStringList或TStrings(parent),输出对象中的字符串,每个字符串由回车符和换行符分隔。
请参阅TStringList Docs here - 希望这有所帮助!