Pedindo confirmação antes de fechar sua aplicação .NET

14 F Y

Seu usuário pode fechar sem querer sua aplicação. Foi maximizar a janela, errou e clicou no botão de fechar… já era. O mesmo para menus ou outras opções de encerrar o programa. Em alguns casos isso não é tão ruim, basta abrir novamente. Mas em outros, as consequências podem ser bem sérias. Exibir uma confirmação de que o usuário realmente deseja fechar a aplicação é interessante nesses casos.

Confirmação para fechar o programa

Exibir esta dialog para confirmação no .NET Framework é bem simples. O primeiro passo é tratar o evento FormClosing da tela principal de sua aplicação. Ao disparo deste evento, seu método irá receber como parâmetro uma instância da classe FormClosingEventArgs.

Esta classe possui duas propriedades:

  • CloseReason. Esta propriedade informa qual o motivo de sua aplicação estar sendo encerrada. Por exemplo, seu valor pode informar que o programa está sendo fechado pois o sistema operacional está sendo desligado ou pois o usuário pediu, entre várias outras razões. Esta propriedade é read-only.
  • Cancel. Esta propriedade informa se o fechamento da aplicação deve ser cancelado. Se ao final do método o valor desta propriedade for true, seu programa não será encerrado. Seu valor padrão é false.

No método tratando o evento FormClosing, você deve primeiro observar a propriedade CloseReason. Escreva uma verificação para evitar que a confirmação seja mostrada quando o sistema está sendo desligado, por exemplo.

Depois, exiba uma dialog através de MessageBox.Show, informando qual deve ser o texto, o título, o ícone e quais botões devem estar na dialog. O normal é como na imagem acima: Um texto explicando o que pode acontecer caso a aplicação seja fechada, ícone de aviso (Warning) e botões Sim/Não.

Usando o retorno do MessageBox.Show (uma instância de DialogResult, que informa qual botão foi pressionado na tela de confirmação), verifique se o usuário escolheu não fechar a aplicação. Caso isto tenha acontecido, mude o valor da propriedade Cancel de sua instância de FormClosingEventArgs para true.

Para ficar mais claro, segue um exemplo do código deste método, para criar a confirmação da imagem do começo do post:

private void FormClosingEvt(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason != CloseReason.WindowsShutDown)
    {
        DialogResult result = MessageBox.Show(
            "Closing the application will stop changing your background image.\n\nAre you sure you want to leave?",
            "Are you sure?", MessageBoxButtons.YesNo,
            MessageBoxIcon.Warning);

        if (result == DialogResult.No)
        {
            e.Cancel = true;
        }
    }
}

Atribuindo este método para o evento de FormClosing do formulário principal de sua aplicação e alterando as mensagens para algo que se encaixe melhor no contexto do seu programa, você terá uma janela de confirmação evitando o fechamento acidental de sua aplicação.

Qualquer dúvida, deixe um comentário e responderei assim que puder.


Introdução ao C# e ao Visual Studio 2005

12 F Y

Opa pessoal, Acabei de escrever um post para o blog da célula acadêmica CIN.NET, da qual sou membro comprometido, sobre a aula de Introdução ao C# e ao Visual Studio 2005 que dei na última quinta feira. Quem quiser, dá uma olhada: http://cindotnet.wordpress.com/2008/04/12/introducao-ao-c-e-ao-visual-studio-2005/

Célula Acadêmica CIn.NET


Visual SVN Server – Um servidor subversion “plug and play” e free

4 F Y

Todos sabem, ou deveriam saber, a importância de manter um projeto sob alguma forma de controle de versão, principalmente quando este projeto vai ser realizado por vários integrantes, que podem estar programando sem estar em contato uns com os outros, em arquivos diferentes ou às vezes um mudando os arquivos dos outros. As vantagens de integrar os códigos dos diferentes membros do projeto durante todo o andamento das atividades, de possuir um log com todas as alterações que foram feitas, possuir os códigos de cada versão, podendo reverter um dado arquivo para uma versão mais antiga que funcionava e até mesmo a possibilidade de verificar a atividade de cada participante do projeto são apenas alguns dos motivos para alguém usar uma ferramenta de controle de versão.

Desde projetos pequenos, como alguns da universidade, que vão durar um mês e ter no máximo 4 ou 5 participantes, até grandes projetos como os hospedados no sourceforge (eMule por exemplo), é interessante possuir uma ferramenta de versionamento. Existem vários sites que oferecem o serviço gratuitamente, alguns exigindo que o projeto seja open-source, como o Google Code (http://code.google.com/hosting/), no qual você deve escolher entre algumas licenças como GPLv2 ou 3, Apache ou Mozilla e possui um espaço limitado (se não me engano são 100MB) para manter seu código. Outros sites como o Assembla (http://www.assembla.com, oferece 500MB) permitem projetos fechados (EDIT: Desde outubro de 2008 o Assembla deixou de oferecer o serviço gratuito para projetos de código fechado. Projetos opensource continuam podendo ser hospedados por lá sem problemas). Já tive a oportunidade de trabalhar com ambas as ferramentas citadas acima, e posso dizer que elas foram muito úteis para projetos da universidade e outros projetos pessoais. Quando os projetos passam a ser fechados, envolver dinheiro realmente, em que o código deve ser protegido e/ou não se pode depender totalmente da conexão com a internet, usar uma ferramenta na web pode não ser a melhor opção (mesmo que alguns dos serviços, como o Assembla, ofereçam versões pagas que resolvem alguns dos problemas de ter seu repositório todo na web). Daí surge a necessidade de instalar seu próprio servidor SVN ou CVS, e com isso, pode surgir uma grande dor de cabeça.

Resumindo bem, a maioria dos servidores “oficiais” de controle de versão são realmente complicados pra instalar. Já vi gente que já tinha instalado umas dez vezes um servidor de CVS se passar pra conseguir instalar a décima primeira vez… O processo as vezes parece até místico :p. É instalação deszipando arquivo, escrevendo comando em prompt, alterando variável de ambiente do SO… enfim, seu projeto pode correr o sério risco de parar antes de ter uma linha de código escrita. Os leitores mais masoquistas podem dar uma olhada neste site, que possui um passo-a-passo de como instalar o servidor subversion normal e criar um repositório. Pra simplificar tudo isto, vou falar sobre o VisualSVN Server.

Como citei no título deste post, o VisualSVN Server é grátis, pra qualquer tipo de projeto, ao contrário do cliente VisualSVN para o Visual Studio, do qual falei neste outro post. Também falei que o VisualSVN Server é “plug an play”… estou tomando esta expressão emprestada do pessoal de hardware, pois é a melhor expressão que eu encontro para falar sobre este programa. A única ação que você precisa tomar para criar o servidor é instalar o programa. Pronto, não precisa mais enfiar valores bizarros nas variáveis de sistema nem se embrenhar em prompts cinza-sobre-preto (particularmente, prefiro verde-sobre-preto). Toda a manutenção é feita através do console de gerenciamento do sistema, aquele mesmo que é usado para gerenciar o IIS ou os discos no seu Windows, através de uma interface extremamente limpa e fácil de usar. A criação de um repositório, de usuários e a atribuição de quais usuários vão ter acesso (e em que nível) a cada repositório é extremamente simples. Para exemplificar bem como este processo é simples, vou mostrar um passo-a-passo, ilustrando com screenshots das telas, sobre como criar seu repositório usando o VisualSVN Server.

1. Baixe o VisualSVN Server. Vá em http://www.visualsvn.com/server/ e baixe a versão mais nova do programa. Este é o único arquivo que você precisará baixar para fazer seu servidor funcionar.

2. Rode o Instaladador. A Tela de Instalação mais importante é a seguinte:

VisualSVN Server - Instalação

Nela você escolhe onde o programa será instalado, em que pasta ele irá manter os repositórios (note que para escolher, você deve clicar no respectivo botão Browse), o nome do servidor, uma porta para o servidor (a porta padrão é 8443) e se você quer ou não usar https. Eu gosto de usar https e mudar a porta pra qualquer outra, mas isso fica a seu critério.

3. Depois de concluir a instalação, seu servidor de repositórios já está rodando! Se quiser conferir, vá em http(ou https)://NomeDoSeuServidor:SuaPorta . Você ainda não criou nenhum repositório nem nenhum usuário, então não vai conseguir ver nada. Vamos criar agora.

4. Abra o console de configuração do VisualSVN Server. Você deve ver uma tela como a seguinte:

VisualSVN Server - Manager1

Vamos primeiro criar um usuário. É só ir com o botão direito em Users, e clicar em “Create User”. Informe um login, digite e confirme a senha (a senha é case-sensitive) e crie o usuário. Se você tentar agora entrar na página do seu servidor e passar este usuário/senha, você vai ter uma tela como a seguinte:

VisualSVN Server - Repositories1

Para alterar a senha ou remover um usuário, basta clicar sobre o login desejado na tela de usuários e escolher a ação.

5. Agora vamos criar um repositório. Também é uma operação extremamente simples, basta clicar com o botão direito em “Repositories”, “Create Repository…” e escolher um nome para ele. Na tela onde você bota o nome para seu repositório, você tem a opção de escolher se devem ser criadas as pastas padrão de um projeto no svn: “trunk”, usada para manter os arquivos em desenvolvimento, “branches” para as versões suficientemente estáveis, onde não haverá mais desenvolvimento, apenas correções, e posteriormente o código sofrerá testes exaustivos, e “tags”, que são realmente as versões de release do projeto. Recomendo fortemente deixar o servidor criar estas pastas, dado que são um padrão quando se usa o SVN.

6. Finalmente, você deve configurar quem terá acesso ao seu repositório. Clique com o botão direito sobre o nome de seu repositório e escolha “security”. Por default todos tem acesso de leitura e escrita, para mudar isto basta você remover o grupo “Everyone” da lista e adicionar os usuários que você deseja que tenham acesso e qual nível de acesso você deseja dar para cada usuário ou grupo.

7. Tudo pronto, agora basta você dar um checkout usando o cliente svn de sua preferência para o endereco [[http ou https)]]://[[NomeDoServidor]]:[[PortaDoServidor]]/svn/[[NomeDoRepositorio]]/

Pronto, seu repositório está criado e você pode fazer o que quiser com ele :)… Bem simples, e em 5 minutos você tem um servidor de controle de versão para seu projeto rodando! Qualquer dúvida, pode postar um comentário que eu tento responder o mais rápido que der.