1.3 KiB
Raw Blame History

MaxLength

  • 功能描述: 在文本编辑框里限制文本的最大长度
  • 使用位置: UPROPERTY
  • 引擎模块: String/Text Property
  • 元数据类型: int32
  • 限制类型: FName/FString/Fext
  • 常用程度: ★★★★★

在文本编辑框里限制文本的最大长度。但在C++或蓝图层面还是可以自己任意写入值的。

测试代码:

	UPROPERTY(EditAnywhere, Category = MaxLengthTest, meta = (MaxLength = 10))
	FString MyString_MaxLength10 = TEXT("Hello");

测试效果:

Untitled

原理:

在文本框里字符串改变的时候,检查当前的长度,超过则报错。

如果是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;
		}
	}