2016-10-01 4 views
0

En utilisant VS 2015 et C# ...Comment éviter que MaskedTextBox PromptChar soit supprimé, lorsque son formulaire modal de conteneur est affiché?

J'ai ce simple modal Form avec juste un contrôle MaskedTextBox sur elle.
Chaque fois après le premier que ModalForm est affiché avec .ShowDialog(), le PromptChar dans le contrôle a disparu.

Pour reproduire ce problème:

public ModalForm() 
    { 
     InitializeComponent(); 

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

Code pour principal Form:

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

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

l'invite du contrôle apparaît à nouveau lorsque son contenu change, mais en première vue n'est pas présente.

La définition de la propriété TextMaskFormat à IncludePromptAndLiterals peut être une solution, mais il faut ensuite nettoyer .Text.
Existe-t-il une autre façon de gérer cela? Est devenu nécessaire pour moi, que tous les contrôles MaskedTextBox doivent toujours montrer son invite par défaut.

+0

invite par défaut perdu après dialogue étroit? Est-ce qu'il montre la valeur précédente que vous entrez? Voulez-vous voir l'invite par défaut à chaque fois après showdialog, même si vous la fermez avec une valeur i.e = '11/11/1111'? Si non, s'il vous plaît mettre quelques captures d'écran du contrôle. – Berkay

+0

L'invite est perdue lors de l'appel '.ShowDialog()' pour la deuxième fois et ainsi de suite, les valeurs sont conservées. Vous pouvez reproduire ce problème avec le code ci-dessus. Par exemple. si vous entrez '" 2_/1 _/_ 85_ "', fermez le formulaire et ouvrez-le à nouveau, le contrôle affiche '" 2/1/85 "'. Ce que j'aimerais, c'est garder le caractère rapide. – Shin

+0

La définition de 'AllowPromptAsInput = false' fonctionne? – Berkay

Répondre

0

Essayez ceci sur l'événement 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. 
      } 
     } 

espoir aide,