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

Folks,

Кто-нибудь знает, как показать форму из невидимого приложения,а также он получил фокус (то есть появляется поверх других окон)? Я работаю в C # .NET 3.5.

Я подозреваю, что я выбрал "совершенно неправильный подход" ... я делаюне Application.Run (новый TheForm ()) вместо этого я(новый TheForm ()). ShowModal ()... Форма - это в основном модальный диалог с несколькими флажками; текстовое поле, а также кнопки ОК и Отмена. Пользователь устанавливает флажок и вводит описание (или что-то еще), затем нажимает кнопку ОК, форма исчезает, и процесс считывает введенные пользователем данные из формы, удаляет их и продолжает обработку.

Это работает, за исключением случаев, когда форма показывает, что она не получает фокуса, вместо этого она появляется позади «основного» приложения, пока вы не нажмете ее на панели задач (или что-то еще). Это очень раздражающее поведение, которое, как я прогнозирую, вызовет много «обращений в службу поддержки», и в существующей версии VB6 такой проблемы нет, поэтому я возвращаюсь к юзабилити ... и пользователи не примут это (и и не должны они).

Итак ... я начинаю думать, что мне нужно переосмыслить весь шебанг ... Я должен показать форму заранее, как "обычное приложение", и прикрепить оставшуюся часть обработки к событию нажатия кнопки ОК. Это должно сработать, но на это уйдет время, которого у меня нет (у меня уже есть время / бюджет) ... поэтому сначала мне действительно нужно попытаться заставить текущий подход работать ... даже быстрыми темпами. грязные методы.

Так, пожалуйста, кто-нибудь знает, как "заставить" форму .NET 3.5 (честным путем или птицу), чтобы получить фокус? Я думаю, "волшебные" вызовы API Windows (я знаю,

Зона сумерек: Это только кажется проблемой на работе, мы используем Visual Studio 2008 на Windows XP с пакетом обновления 3 (SP3) ... Я просто не смог воспроизвести проблему с SSCCE (см. Ниже) дома на Visual C # 2008 на Vista Ulimate ... Это отлично работает. А? WTF?

Кроме того, я клянусь, что вчера на работе показывал форму, когда я запускал EXE, а не когда F5 (или Ctrl-F5) прямо из IDE (с которой я только что мирился) ... Дома форма показывает хорошо в любом случае. Тотально запутанный!

Это может или не может иметь значение, но Visual Studio рухнул и сгорел сегодня утром, когда проект работал в режиме отладки и редактировал код «на лету» ... он застрял, как я предполагал, в бесконечном цикле ошибок Сообщения. Сообщение об ошибке было что-то вроде «не удается отладить этот проект, потому что это не текущий проект, или что-то ... Так что я просто убил его с помощью Process Explorer. Он снова запустился нормально, и даже предложил восстановить« потерянный » файл, предложение, которое я принял.

using System;
using System.Windows.Forms;

namespace ShowFormOnTop {
    static class Program {
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
            Form1 frm = new Form1();
            frm.ShowDialog();
        }
    }
}

Фон: Я портирую существующую реализацию VB6 на .NET ... Это "плагин" для "клиентского" ГИС-приложения, называемыйMapInfo, Существующий клиент "работал незаметно", и мои инструкции заключаются в том, чтобы "сохранить новую версию как можно ближе к старой версии", что работает достаточно хорошо (после нескольких лет исправлений); он просто написан на неподдерживаемом языке, поэтому нам нужно его портировать.

Обо мне: Я в значительной степени новичок в C # и .NET в целом, хотя у меня есть сертификат на чистку дна, я являюсь профессиональным программистом в течение 10 лет; Так что я вроде "знаю кое-что".

Любые идеи будут приветствоваться ... и спасибо всем, что нашли время, чтобы прочитать это далеко. Последовательность не является (очевидно) моей сильной стороной.

Приветствия. Кит.

Ответы на вопрос(11)

Ваш ответ на вопрос