我有一些类有一个字符串属性来容纳IBAN。使用具有绑定源的自定义格式?
出于显示的目的,我想每4个字符后显示一个空值,例如:
'GB29 NWBK 6016 1331 9268 19'
是否有可能编写实现ICustomFormatter
一类,然后指定此新的自定义格式为文本框数据绑定?
或者会处理BindingComplete
事件的BindingSource
是更好的方法吗?
我有一些类有一个字符串属性来容纳IBAN。使用具有绑定源的自定义格式?
出于显示的目的,我想每4个字符后显示一个空值,例如:
'GB29 NWBK 6016 1331 9268 19'
是否有可能编写实现ICustomFormatter
一类,然后指定此新的自定义格式为文本框数据绑定?
或者会处理BindingComplete
事件的BindingSource
是更好的方法吗?
一般方法是将自定义TypeConverter
与该类型的类属性相关联。
例如:
格式化:
public static class IBAN
{
public static string Format(string value)
{
if (string.IsNullOrEmpty(value)) return value;
var sb = new StringBuilder();
for (int i = 0; i < value.Length; i++)
(i != 0 && (i % 4) == 0 ? sb.Append(' ') : sb).Append(value[i]);
return sb.ToString();
}
}
转换器:财产
public class IBANTypeConverter : TypeConverter
{
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string))
return IBAN.Format(value as string);
return base.ConvertTo(context, culture, value, destinationType);
}
}
样本数据类:
public class MyObject
{
[TypeConverter(typeof(IBANTypeConverter))]
public string IBAN { get; set; }
}
采样数据绑定:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var data = new MyObject { IBAN = "GB29NWBK60161331926819" };
var form = new Form();
var tbIBAN = new TextBox { Parent = form, Left = 8, Top = 8, Width = form.ClientSize.Width - 16, Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right };
tbIBAN.DataBindings.Add("Text", data, "IBAN", true);
Application.Run(form);
}
}
当文本框获得焦点时,是否可以“解除格式化”字符串? –
恐怕没有,除非你使用一个特殊的控制支持。数据绑定仅支持格式和解析。 –
我正在使用自定义控件,因此很容易完成。 –
如何写上字符串的扩展方法可能是回报格式化字符串?所以该方法将像字符串上的ToIBAN() – Dheeraj
@Dheeraj一个扩展很容易编写,但我需要处理Parse和Format事件,而不是像'{0:I}'那样设置'I'是格式字符串 –
如何使用“MaskedTextBox”进行显示? – DonBoitnott