1.3 KiB
1.3 KiB
MaxLength
- 功能描述: 在文本编辑框里限制文本的最大长度
- 使用位置: UPROPERTY
- 引擎模块: String/Text Property
- 元数据类型: int32
- 限制类型: FName/FString/Fext
- 常用程度: ★★★★★
在文本编辑框里限制文本的最大长度。但在C++或蓝图层面还是可以自己任意写入值的。
测试代码:
UPROPERTY(EditAnywhere, Category = MaxLengthTest, meta = (MaxLength = 10))
FString MyString_MaxLength10 = TEXT("Hello");
测试效果:
原理:
在文本框里字符串改变的时候,检查当前的长度,超过则报错。
如果是FName属性,则会把MaxLength 继续限制在NAME_SIZE (1024)以内。
MaxLength = PropertyHandle->GetIntMetaData(NAME_MaxLength);
if (InPropertyEditor->PropertyIsA(FNameProperty::StaticClass()))
{
MaxLength = MaxLength <= 0 ? NAME_SIZE - 1 : FMath::Min(MaxLength, NAME_SIZE - 1);
}
bool SPropertyEditorText::OnVerifyTextChanged(const FText& Text, FText& OutError)
{
const FString& TextString = Text.ToString();
if (MaxLength > 0 && TextString.Len() > MaxLength)
{
OutError = FText::Format(LOCTEXT("PropertyTextTooLongError", "This value is too long ({0}/{1} characters)"), TextString.Len(), MaxLength);
return false;
}
}