Мое приложение теряет фокус при закрытии окна - PullRequest
4 голосов
/ 30 июля 2010

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

_busyWindow.ShowDialog();

И определено

public partial class BusyWindow :  DevExpress.XtraEditors.XtraForm
{
    public BusyWindow()
    {
        InitializeComponent();
    }

    private void BusyWindow_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Hide();
        e.Cancel = true; // this cancels the close event.
    }
}

Когда операция завершена, я скрываю формувот так

if (ended)
    _busyWindow.Hide();

Работает нормально.Проблема в том, что когда я закрываю вторую форму (тот же закрывающий код), она также закрывается нормально, но мой основной графический интерфейс теряет фокус.Например, если у меня открыт Firefox за приложением, тогда Firefox получает фокус.

Это происходит только тогда, когда я закрываю вторую форму, когда окно busyWindow было открыто, и нет, когда оно не открывалось (то есть, если я открою форму, я закрою ее, не нажимая на кнопку, тогда основной графический интерфейс не потеряет фокус).

Знаете ли вы, что происходит или где я могу попытаться выполнить поиск?

Ответы [ 2 ]

3 голосов
/ 30 июля 2010

Могут быть два возможных решения, позволяющих вам сосредоточиться на главном окне:

// Отредактировано: Главное окно в приведенном ниже примере будет окном с сеткой и кнопкой.

  1. Поскольку вы показываете окно занятости через ShowDialog(), попробуйте установить владельца окна следующим образом: _busyWindow.ShowDialog(this);.Ранее я сталкивался с подобной проблемой, и это сработало для меня.Поскольку вы указываете владельца busyWindow, при его закрытии он снова фокусируется на его владельце, т.е. на вашем главном окне

  2. В случае, если описанная выше методика не работает (она должна, так каку меня это сработало), вы можете попробовать передать ссылку на главное окно в busyWindow, а затем закрыть его и установить фокус главного окна.Образец:

_busyWindow.MyMainWindow = this; //MyMainWindow references mainWindow of your app _busyWindow.ShowDialog();

И следующее при заполнении формы busyWindow:

private void BusyWindow_FormClosing(object sender, FormClosingEventArgs e)</p> <pre><code>{ this.Hide(); e.Cancel = true; // this cancels the close event. MainWindow.Focus(); }

Посмотрите, работает ли оно.Первое решение должно работать.

Надеюсь, это поможет.

Спасибо и счастливого оконного дела!

1 голос
/ 03 ноября 2014

Просто установите дочернее окно Owner = null, прежде чем закрывать его

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