Отображение всплывающей формы во время разработки для свойства MaskedTextBox.Mask во время выполнения - PullRequest
1 голос
/ 16 ноября 2009

Кто-нибудь знает, возможно ли открыть всплывающую форму «Маска ввода», которая отображается, когда вы хотите изменить свойство Mask редактора MaskedTextBox и нажимаете кнопку «Подробности» справа от этого свойства в время?

Я хотел бы использовать ту же форму во время выполнения в приложении и использовать ее результат для строки маски.

1 Ответ

1 голос
/ 17 ноября 2009

Диалог определен в System.Design.dll с именем «MaskDesignerDialog». Это внутреннее, поэтому вы не можете использовать его напрямую. Отражение может обойти это. Попробуйте это с помощью образца формы, поместите Button и MaskedTextBox на форму. Сделайте так, чтобы код формы выглядел так:

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;
            }
        }
    }
}
...