gpt4 book ai didi

c++ - Firemonkey:设置 TLabel 文本导致字符串索引超出范围异常

转载 作者:行者123 更新时间:2023-11-28 06:06:23 26 4
gpt4 key购买 nike

我有一个构建帮助消息然后设置 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
}

通过在访问 Text 属性时使用 TStringList 或 TStrings(父级),输出对象中的字符串,每个字符串由回车符和换行符分隔。

参见 TStringList Docs here - 希望这对您有所帮助!

关于c++ - Firemonkey:设置 TLabel 文本导致字符串索引超出范围异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319253/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com