2016-10-01 2 views
0

Используя VS 2015 и C# ...Как избежать удаления MaskedTextBox PromptChar, когда отображается его мода мода?

У меня есть этот простой модальный Form с только MaskedTextBox контроля над ним.
Каждый раз после первого, что ModalForm показан с .ShowDialog(), PromptChar в управлении ушел.

Чтобы воспроизвести этот вопрос:

public ModalForm() 
    { 
     InitializeComponent(); 

     maskedTextBox1.Mask = "00/00/0000"; // happens with any 
     maskedTextBox1.TextMaskFormat = MaskFormat.IncludeLiterals; 
    } 

Код для главного Form: появится приглашение

public partial class Form1 : Form 
    { 
     private ModalForm modalForm = new ModalForm(); 

     private void button1_Click(object sender, EventArgs e) 
     { 
      modalForm.ShowDialog(); 
     } 
    } 

элемента управления еще раз, когда его изменения содержания, но в первый взгляд нет.

Возможно, необходимо установить TextMaskFormat недвижимость на IncludePromptAndLiterals, но тогда .Text необходимо убрать.
Есть ли другой способ справиться с этим ?. Мне стало необходимо, чтобы все элементы управления MaskedTextBox всегда отображали приглашение по умолчанию.

+0

По умолчанию подскажите утрачена после закрытия диалога? Показывает ли предыдущее значение, которое вы вводите? Вы хотите видеть приглашение по умолчанию каждый раз после showdialog, даже если вы закрываете его со значением i.e = '11/11/1111'? Если нет, поставьте несколько снимков экрана. – Berkay

+0

Запрашивается при вызове '.ShowDialog()' во второй раз и т. Д., Значения сохраняются. Вы можете воспроизвести эту проблему с помощью приведенного выше кода. Например. если вы введете '' 2_/1 _/_ 85_ "', затем закройте форму и откройте ее снова, элемент управления отобразит «2/1/85» '. Я хотел бы сохранить подсказку. – Shin

+0

Настройка 'AllowPromptAsInput = false' работает? – Berkay

ответ

0

Попробуйте это на Shown событие Form, в

private void ModalForm_Shown(object sender, EventArgs e){ 
      if (!maskedTextBox1.MaskCompleted) // if there is missing parts it will return false, every false means prompts need in control 
      { 
       string tempText = maskedTextBox1.MaskedTextProvider.ToDisplayString(); // get the last value with prompts 
       maskedTextBox1.Text = ""; 
       maskedTextBox1.Text = tempText; // then set the last value. 
      } 
     } 

Надежда помогает,