2013-11-22 5 views
4

У меня есть MaskedTextBox в приложении Winforms. Мне нужна многострочная маска на нем, f.e:Многострочная маска для MaskedTextBox

"999999\r\n 
999999\r\n 
999999\r\n 
00/00/0000" 

Я прочитал msdn documentation и был удивлен видеть, что нет «Новой линии» или что-то подобное.

Я знаю, что могу написать свой собственный пользовательский элемент управления, чтобы исправить эту проблему, но текстовое поле с маскировкой было бы более простым решением. Итак, у меня есть 2 вопроса: есть ли способ добавить новую линию к маске? Если нет, то почему Control поддерживает многострочный - разве это бесполезно?

Заранее спасибо

+1

Из документации MSDN: Получает или задает значение, указывающее, является ли многострочным текстовым полем. Это свойство не полностью поддерживается MaskedTextBox. Я предлагаю вам создать usercontrol, представляющий 4 maskedtextboxes и voila, вы настроены - http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.multiline(v=vs.110). aspx - – Schuere

+0

«не полностью поддерживается» ... ну, хорошо. Я бы сказал, что он не работает и должен быть скрыт, но все в порядке. Спасибо вам. – BudBrot

+1

Плохо это не реальное решение: s – Schuere

ответ

2

Для этого я хотел бы создать пользовательский элемент управления, который будет сочетать набор MaskedTextBox для каждой строки Теперь, в зависимости от необходимости, либо «немой» контроль с постоянным количеством MaskedTextBox один под другим и соответствующие свойства для строк формата

public string Format1 {get;set;} 
public string Format2 {get;set;} 
public string FormatX {get;set;} 

Или создать «умную» версию, со свойством «LinesCount» и т.д., при установке 5 было бы добавить 5 MaskedTextBox с множеством якорем слева и справа (для всего управления в быть растяжимым)

И тогда свойство

public List<string> Formats {get;set;} 

каждая строка будет соответствовать каждому MaskedTextBox

Также свойство значения

public List<X> Values 

каждая строка будет соответствовать каждому MaskedTextBox.Value, где Х представляет собой тип I дон Не помню, как он возвращается.

Чем сложнее и умный и полезный контроль вы хотите, тем больше кодирования вам нужно поставить :) но выполнимо

+0

Если новая строка является частью одного значения, возможно, вам нужно использовать один MaskedTextBox и перекодировать ее для использования некоторого Regex и т. Д., Или, возможно, использовать только текстовое поле и общее количество пользовательских проверок –

+0

«с использованием текстового поля и пользовательской проверки кода» - Я сделал это. Я в основном был удивлен тем, что Microsoft не удаляет или, по крайней мере, скрывает бесполезные свойства, такие как * Multiline * :) Я отмечаю это как ответ, потому что он работает. – BudBrot

+0

Я рад, что смог помочь. Благодаря! –

Смежные вопросы