Запустить событие, если вы вернетесь из внешнего приложения - PullRequest
1 голос
/ 04 апреля 2019

У меня есть следующая функция, она возвращает мне выбранный элемент управления приложения, если я вернусь к своему приложению.Теперь я хочу вызвать событие выбранного элемента управления.

На самом деле я хочу выбрать текст выбранного элемента управления textbox, только если выбрано приложение.Для этой задачи я написал несколько _Enter Events, но они не будут запущены, если вы вернетесь к своему приложению

Поэтому я попытался получить активный контроль над приложением и запустить подготовленное событие, но не смог запустить событие,Активный элемент управления может быть одним из 10 текстовых полей.Пожалуйста помоги.

protected override void WndProc(ref Message m)
{
    //react to switching from an external application
    const int WM_ACTIVATEAPP = 0x001C;
    switch (m.Msg)
    {
        case WM_ACTIVATEAPP:
            {
                if (m.WParam.ToInt32() == 1)
                {
                    //null blocker
                    var temp = this.ActiveControl;
                    if (temp != null)
                    {
                        //if you have a splitcontainer, it is always the active control...
                        if (temp.GetType() == typeof(SplitContainer))
                        {
                            var containerControl = (SplitContainer)ActiveControl;
                            if (containerControl.ActiveControl is TextBox)
                            {
                                //how can i call the _Enter event of the selected control?
                                ((TextBox)containerControl.ActiveControl).Enter += ???;
                            }
                        }
                    }
                }
                break;
            }
    }
    // proceed with default processing
    base.WndProc(ref m);  
}

Все события одинаковы:

private void tB_IMEI_Enter(object sender, EventArgs e)
{
    tB_IMEI.SelectionStart = 0;
    tB_IMEI.SelectionLength = tB_IMEI.TextLength;
}

РЕДАКТИРОВАТЬ: комментарий BugFinder сработал.Обнаружено старое событие для активации формы, но оно было до реализации SplitContainer.Я исправил это для работы с элементом управления SplitContainer.Спасибо Bugfinder!

Рабочий раствор:

private void focusAllTheText(object sender, EventArgs e)
{
    TextBox myBox = ((TextBox)sender);
    myBox.SelectAll();
}
private void SearchProvision_Activated(object sender, EventArgs e)
{
    if (ActiveControl != null && ActiveControl is SplitContainer)
        focusAllTheText(((SplitContainer)ActiveControl).ActiveControl, EventArgs.Empty);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...