2014-01-08 3 views
0

У меня TimeSpan с пользовательским форматом, как @"hh\:mm\:ss\.fff", и хотят использовать MaskedTextBox из Xceed (https://wpftoolkit.codeplex.com/wikipage?title=MaskedTextBox&referringTitle=Home), чтобы помочь пользователю ввести правильный отрезок времени.Преобразование TimeSpan FormatString к InputMask

Теперь я преобразовать FormatString -свойство к маске ввода, как этот

public string InputMask 
{ 
    get 
    { 
    string mask = FormatString.Replace('h', '0'); 
    mask = mask.Replace('m', '0'); 
    mask = mask.Replace('s', '0'); 
    mask = mask.Replace('f', '0'); 
    mask = mask.Replace('d', '0'); 
    return mask; 
    } 
} 

это решение выглядит некрасиво и не ремонтопригодно если FormatString получает еще один формат, который я еще не знаю. Есть ли более элегантное решение (например, с заменой регулярного выражения), которое заменяет любую букву 0?

+0

[Это] (http://stackoverflow.com/questions/9975640/check-if-char-isletter)? Но я бы пошел с 'for (int i = 0; i Sinatr

+0

это не работает, потому что 'mask [i]' не имеет сеттера, а строки неизменяемы. – Herm

+0

Тогда я пришел в stackoverflow и разместил здесь свой вопрос = D – Sinatr

ответ

2

Это должно сделать трюк:

//using System.Text.RegularExpressions; 

string input = @"hh\:mm\:ss\.fff"; //i suppose it's FormatString in your case, don't know the MaskedTextBox 
string output = Regex.Replace(input, "[a-zA-Z]","0"); 
Смежные вопросы