Люди,
Пожалуйста, кто-нибудь знает, как показать форму из невидимого в противном случае приложения, и имеет ли он фокус (т.е. появляется поверх других окон)? Я работаю в C # .NET 3.5.
Я подозреваю, что выбрал "совершенно неправильный подход" ... Я делаю , а не Application.Run (новый TheForm ()) вместо I (новый 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 лет; Так что я вроде "знаю кое-что".
Любые идеи будут приветствоваться ... и спасибо всем, что нашли время, чтобы прочитать это далеко. Последовательность не является (очевидно) моей сильной стороной.
Приветствия. Кит.