屏蔽文本框强制使用大写字符



我正在使用Telerik的RadMaskedTextBox,我正在尝试创建一个Mask,使其遵循加拿大邮政编码模板。

模板如下 字母编号 字母编号 字母编号

邮政编码示例T4R1U8

目前我的面具Mask="L#L #L#",但这允许大写和小写字母。我正在尝试使用它,以便可以输入大写字母并且可以输入小写字母,但小写将立即变为大写。

我尝试了两种解决方案,它们非常接近,但不是最终解决方案。

第一个是在视图模型方面解决这个问题

public string PostalCode
{
get {return postalCode;}
set
{
postalCode = value;
postalCode = postalCode.ToUpper();
OnPropertyChanged("PostalCode");
}
}

此方法,值将更改为上,但键入索引将移动到 MaskTextBox 的前面,而不是始终保留在键入的字符之后。

我采用的第二种方法效果很好,但不允许我键入小写字符。我最终使用了CustomToken。"*"是我的自定义令牌字符,所以我的新掩码是Mask="*#* #*#"

public class CustomToken : ITokenValidationRule
{
#region ITokenValidationRule Members
public bool IsRequired
{
get { return false; }
}
public bool IsValid(char ch)
{
return ValidChars.Contains(ch);
}
public char Token
{
get { return '*'; }
}
public TokenTypes Type
{
get { return TokenTypes.AlphaNumeric; }
}
private string myValidChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public string ValidChars
{
get { return myValidChars; }
}
#endregion
}

任何提示将不胜感激。

这里有一个类似的问题。

解决方案是使用 SelectionStart 在末尾设置插入符号,例如:

Dispatcher.BeginInvoke(() =>
{
if (txtPOCode.MaskedText != null)
{
txtPOCode.MaskedText = txtPOCode.MaskedText.ToUpper();
txtPOCode.SelectionStart = txtPOCode.MaskedText.Length;
txtPOCode.Focus();
}
});

若要在 MaskedTextBox 控件中强制使用大写字符,请在掩码字符串的开头添加">"字符。

示例:对于 CD 密钥条目掩码,其中 CD 密钥将有 5 组,每组 4 个字母/数字,用破折号分隔,并且您希望全部大写,然后将掩码设置为: ">啊

前导">"不会在运行时出现在掩蔽文本框的占位符文本中。

文本框将仅显示下划线和短划线,如下所示: [____ - ____ - ____ - ____ - ____]

所有输入的字符都将转换为大写,并且只允许在条目中使用字母/数字。

https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.maskedtextbox.mask?view=net-5.0

我不确定你想在这里完成什么。

如果您想在字母上键入大写的内容,那么您是否尝试过将字体设置为字符大小写

文本框1.字符大小写 = 字符大小写.上部;

或者将其设置在窗体上的属性上,因为可能需要将其放在按键事件后面。

或者在 xaml 中将其在元素中设置为"上部">

<TextBox CharacterCasing="Upper"/>

您可以使用ValueConverter或MarkupConverter。

[MarkupExtensionReturnType(typeof(IValueConverter))]
public class ToUpperConverter : MarkupConverter
{
private static ToUpperConverter _instance;
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static ToUpperConverter()
{
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return _instance ?? (_instance = new ToUpperConverter());
}
protected override object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var val = value as string;
return val != null ? val.ToUpper() : value;
}
protected override object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}

使用 Telerik RadMaskedTextInput 控件时,格式标记存在限制,因此需要使用数字语法而不是文字语法声明掩码。例如,使用格式标记时,掩码"LLL"应像"L3"一样使用。在您的情况下,您将使用 L1 和 d1 令牌,无论您使用的是 WinForms 还是 WPF(您未指定哪个),邮政编码的掩码都应为:

<telerik:RadMaskedTextInput Mask="&gt;L1d1&gt;L1 d1&gt;L1d1"/>

">"大小写字符执行转换为大写。

相关内容

  • 没有找到相关文章

最新更新