Как захватить все элементы управления созданием и уничтожением в приложении на основе форм .NET - PullRequest
1 голос
/ 01 июня 2010

У меня есть случай, когда любое текстовое поле, созданное в приложении, должно обрабатываться, а некоторые события должны прослушиваться.Я проверил ControlCollection, у него нет «созданных» или «измененных» событий.Также MessageFilter не может получать события создания или уничтожения.Является ли это оптимальным способом получения сообщений, или перехват Windows будет единственной альтернативой?

Ответы [ 3 ]

1 голос
/ 01 июня 2010

Нашел еще одно решение, используя крючки. Помог код из codeproject . Начал ловушку CBT непосредственно перед созданием первой формы. Это помогло захватить все события «Создать» и «Уничтожить».

1 голос
/ 01 июня 2010

Попробуйте использовать события ControlAdded и ControlRemoved. Пример:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.ControlAdded += new System.Windows.Forms.ControlEventHandler(this.Form1_ControlAdded);

        TextBox nameTextBox = new TextBox();
        nameTextBox.Text = "John";
        this.Controls.Add(nameTextBox);
    }

    private void Form1_ControlAdded(object sender, ControlEventArgs e)
    {
        TextBox addedTextBox = e.Control as TextBox;
        if(addedTextBox != null)
        {
            MessageBox.Show(addedTextBox.Text);
        }
    }
}
0 голосов
/ 01 июня 2010

Класс Control имеет событие Disposed. Вы можете подключить это, чтобы обнаружить, что контроль был уничтожен. Он более надежен, чем события ControlAdded / Removed, поскольку добавление или удаление элемента управления не означает автоматически его удаление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...