2009-11-16 6 views
1

Est-ce que quelqu'un sait s'il est possible d'ouvrir un formulaire contextuel "Input Mask" qui s'affiche lorsque vous souhaitez modifier la propriété MaskedTextBox éditeur et vous cliquez sur le bouton de détails sur le côté droit de cette propriété en phase de conception?Affichage d'un formulaire contextuel au moment de la conception pour la propriété MaskedTextBox.Mask dans un environnement d'exécution

Je voudrais utiliser le même formulaire en cours d'exécution dans une application et utiliser son résultat pour la chaîne de masque.

Répondre

1

La boîte de dialogue est définie dans System.Design.dll, nommé "MaskDesignerDialog". C'est interne donc vous ne pouvez pas l'utiliser directement. La réflexion peut contourner cela. Essayez-le avec un exemple de formulaire, déposez un bouton et un MaskedTextBox sur le formulaire. Faire le code du formulaire ressemble à ceci:

using System; 
using System.ComponentModel; 
using System.Drawing; 
using System.Windows.Forms; 
using System.Reflection; 

namespace WindowsFormsApplication1 { 
    public partial class Form1 : Form { 
     public Form1() { 
      InitializeComponent(); 
     } 
     private void button1_Click(object sender, EventArgs e) { 
      Assembly asm = Assembly.Load("System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); 
      Type editor = asm.GetType("System.Windows.Forms.Design.MaskDesignerDialog"); 
      ConstructorInfo ci = editor.GetConstructor(new Type[] { typeof(MaskedTextBox), typeof(System.ComponentModel.Design.IHelpService) }); 
      Form dlg = ci.Invoke(new object[] { maskedTextBox1, null }) as Form; 
      if (DialogResult.OK == dlg.ShowDialog(this)) { 
       PropertyInfo pi = editor.GetProperty("Mask"); 
       maskedTextBox1.Mask = pi.GetValue(dlg, null) as string; 
      } 
     } 
    } 
} 
+0

Super! Cela fonctionne parfaitement, merci. – Leo