Der allgemeine Ansatz besteht darin, benutzerdefinierte TypeConverter
mit den Klasseneigenschaften dieses Typs zu verknüpfen.
Zum Beispiel:
Formatter:
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();
}
}
Converter:
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);
}
}
Beispieldatenklasse mit Eigenschaft:
public class MyObject
{
[TypeConverter(typeof(IBANTypeConverter))]
public string IBAN { get; set; }
}
Beispieldatenbindung:
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);
}
}

Wie über eine Erweiterungsmethode auf Zeichenfolge zu schreiben sein kann, dass die Renditen String formatiert? Also ist die Methode wie ToIBAN() auf String – Dheeraj
@Dheeraj Eine Erweiterung ist einfach zu schreiben, aber ich würde die Parse-und Format-Ereignisse behandeln, anstatt etwas wie '{0: I}', wo 'I' ist die format string –
Wie wäre es mit einer 'MaskedTextBox' für die Anzeige? – DonBoitnott