Como mostrar o formulário na frente em C #

Pessoal

Alguém sabe como mostrar um formulário a partir de um aplicativo invisível, consegue obter o foco (ou seja, aparece em cima de outras janelas)? Estou trabalhando em C # .NET 3.5.

Eu suspeito de ter tomado "completamente a abordagem errada" ... eu faço Application.Run (novo TheForm ()) ao invés eu (novo TheForm ()). ShowModal () ... O formulário é basicamente um diálogo modal, com algumas caixas de seleção; uma caixa de texto e os botões OK e Cancelar. O usuário marca uma caixa de seleção e digita uma descrição (ou o que seja) e pressiona OK, o formulário desaparece e o processo lê a entrada do usuário no formulário, descarta e continua o processament

Isso funciona, exceto quando o formulário é exibido, ele não recebe o foco; em vez disso, ele aparece atrás do aplicativo "host", até você clicar nele na barra de tarefas (ou o que for). Esse é um comportamento muito irritante, que eu prevejo que causará muitas "chamadas de suporte", e a versão existente do VB6 não tem esse problema, por isso vou voltar na usabilidade ... e os usuários não aceitarão isso (e nem deveriam).

Então ... Estou começando a achar que preciso repensar o shebang inteiro ... Devo mostrar o formulário com antecedência, como um "aplicativo normal" e anexar o restante do processamento ao evento de clicar no botão OK . Deve funcionar, mas isso levará um tempo que não tenho (já estou com tempo / orçamento) ... então, primeiro, eu realmente preciso tentar fazer com que a abordagem atual funcione ... mesmo com rapidez e facilidade. métodos sujos.

Então alguém sabe como "forçar" um .NET .NET Form (por meios justos ou aves) para obter o foco? Estou pensando em chamadas API "mágicas" do Windows (eu sei

Twilight Zone: Isso parece ser apenas um problema no trabalho. Estamos usando o Visual Studio 2008 no Windows XP SP3 ... Acabei de reproduzir o problema com um SSCCE (veja abaixo) em casa no Visual C # 2008 no Vista Ulimate ... Isso funciona bem. Hã? WTF?

Além disso, eu juro que no trabalho ontem mostrou o formulário quando executei o EXE, mas não quando F5'ed (ou Ctrl-F5'ed) diretamente do IDE (que acabei de suportar) ... Em casa, o formulário mostra bem de qualquer maneira. Totalmente desconcertante!

Pode ou não ser relevante, mas o Visual Studio travou e queimou esta manhã quando o projeto estava sendo executado no modo de depuração e editando o código "on the fly" ... ficou preso o que eu presumi ser um loop infinito de mensagens de erro. A mensagem de erro era algo sobre "não é possível depurar este projeto porque não é o projeto atual, ou algo assim ... Então, acabei de eliminá-lo com o Process Explorer. Ele começou novamente bem e até se ofereceu para recuperar o" ", uma oferta que aceitei.

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();
        }
    }
}

Fundo Estou portando uma implementação VB6 existente para o .NET ... É um "plugin" para um aplicativo GIS "cliente" chamado MapInfo. O cliente existente "trabalhou de forma invisível" e minhas instruções são "manter a nova versão o mais próximo possível da versão antiga", que funciona bem o suficiente (após anos de aplicação de patches); está escrito apenas em um idioma não suportado, por isso precisamos portá-lo.

Sobre mim Eu sou quase noob em C # e .NET em geral, embora tenha um certificado de limpeza de fundo, sou programador profissional há 10 anos; Então eu meio que "sei algumas coisas".

uaisquer insights serão bem-vindos ... e obrigado a todos por dedicar um tempo para ler até aqui. Consistência não é (aparentemente) o meu forte.

Felicidades. Keith.

questionAnswers(22)

yourAnswerToTheQuestion