Как показать форму впереди в C#

Я очистил свой проект и решил свою проблему таким образом.

Меню> Проект> Очистить ...

23
задан corlettk 12 June 2009 в 14:49
поделиться

5 ответов

Просто

yourForm.TopMost = true;
50
ответ дан 29 November 2019 в 01:05
поделиться

Имеется перегрузка Form.ShowDialog (), которая принимает объект IWin32Window. Это IWin32Window рассматривается как родительское окно для формы.

Если у вас есть родительское окно как System.Windows.Forms.Form, просто передайте его. Если нет, получите HWND (возможно, P / Invoking to FindWindow ()) и создайте фиктивную реализацию IWin32Window, которая просто возвращает HWND ( Подробнее ).

4
ответ дан 29 November 2019 в 01:05
поделиться
  1. Вы сказали, что он отлично работает при использовании Application.Run . Тогда почему вы не хотите использовать Application.Run ?
  2. Вы пробовали вызвать BringToFront () из OnLoad или OnShown ?
3
ответ дан 29 November 2019 в 01:05
поделиться

Похоже, что это поведение специфично для XP ... Следовательно, я не могу воспроизвести его в Vista.

http://www.gamedev.net/community/forums/ topic.asp? topic_id = 218484

РЕДАКТИРОВАТЬ: PS: Мне уже пора спать (2 часа ночи; -).

Спасибо всем за ваши ответы ... есть "несколько вещей", которые я могу попробовать .. Я могу даже пойти завтра в офис попробовать их ... Да, да ... Однажды у меня была жизнь, но я променял ее на стрижку и работу; -)

Всем привет. Кейт.

0
ответ дан 29 November 2019 в 01:05
поделиться

Я взломал это из приложения, над которым я работал. У нас есть большое приложение, которое загружает ряд модулей, написанных разными командами. Мы написали один из этих модулей, и нам нужно было, чтобы во время инициализации открывался диалог входа. Было установлено значение '.TopMost=true', но это не сработало.

Он использует WindowsFormsSynchronizationContext для открытия диалогового окна, а затем получает результат диалога обратно.

Я редко занимаюсь кодированием GUI, и подозреваю, что это может быть излишеством, но это может помочь кому-то, если он застрянет. У меня были проблемы с пониманием того, как состояние передается в SendOrPostCallback, поскольку все примеры, которые я смог найти, не использовали его.

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

public bool Dummy()
{

// create the login dialog
DummyDialogForm myDialog = new DummyDialogForm();

// How we show it depends on where we are. We might be in the main thread, or in a background thread
// (There may be better ways of doing this??)
if (SynchronizationContext.Current == null)
{
    // We are in the main thread. Just display the dialog
    DialogResult result = myDialog.ShowDialog();
    return result == DialogResult.OK;
}
else
{
    // Get the window handle of the main window of the calling process
    IntPtr windowHandle = Process.GetCurrentProcess().MainWindowHandle;

    if (windowHandle == IntPtr.Zero)
    {
        // No window displayed yet
        DialogResult result = myDialog.ShowDialog();
        return result == DialogResult.OK;
    }
    else
    {
        // Parent window exists on separate thread
        // We want the dialog box to appear in front of the main window in the calling program
        // We would like to be able to do 'myDialog.ShowDialog(windowHandleWrapper)', but that means doing something on the UI thread
        object resultState = null;
        WindowsFormsSynchronizationContext.Current.Send(
            new SendOrPostCallback(delegate(object state) { resultState = myDialog.ShowDialog(); }), resultState);

        if (resultState is DialogResult)
        {
            DialogResult result = (DialogResult) resultState;
            return result == DialogResult.OK;
        }
        else
            return false;

    }
}

}

1
ответ дан 29 November 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: