# MaxLength

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

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

## 测试代码:

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

## 测试效果:

![Untitled](Untitled.png)

## 原理:

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

如果是FName属性,则会把MaxLength 继续限制在NAME_SIZE (1024)以内。

```cpp
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;
		}
	}
```