sábado, 6 de agosto de 2011

Controle de instância de Form Child

Saudações, pessoal! 

Grande parte dos desenvolvedores de projetos do tipo Windows Forms Application, utilizam a propriedade IsMdiContainer para criar um formulário principal. A partir deste form, é que todos os forms filhos (Child) são acionados e abertos dentro do contêiner. Um problema comum neste contexto, é que a cada clique na objeto que abre o form filho, uma nova janela é aberta na janela principal. Veja um exemplo no trecho de código abaixo em linguagem VB.NET.

Private Sub JanelaFilhaToolStripMenuItem_Click(ByVal sender As System.Object, _
                                               ByVal e As System.EventArgs) _
                                               Handles JanelaFilhaToolStripMenuItem.Click
    Dim filho As New Form2()
    filho.MdiParent = Me
    filho.Show()
End Sub




Perceba na imagem acima que a cada vez que o usuário clica no menu “Janela Filha”, um novo Form é aberto no contexto da janela principal. Para evitar que este incidente ocorra, é necessário uma pequena alteração no trecho anterior.

Dim filha As Form2
Private Sub JanelaFilhaToolStripMenuItem_Click(ByVal sender As System.Object, _
                                               ByVal e As System.EventArgs) _
                                               Handles JanelaFilhaToolStripMenuItem.Click
    If filha Is Nothing Then
        filha = New Form2()
        filha.MdiParent = Me
        filha.Show()
    Else
        filha.WindowState = FormWindowState.Normal
    End If
End Sub

Testando a aplicação, perceba que somente uma instância do formulário filho será aberta, ainda que o mesmo esteja minimizado na barra de tarefas do contêiner.
Esta é mais uma dica rápida e espero que seja útil.

quarta-feira, 13 de julho de 2011

Usando um formulário como caixa de diálogo

E aí, pessoal!

Esse texto é mais uma dica simples e objetiva, que tem por finalidade transformar um formulário (Windows Forms) em uma caixa de diálogo, semelhante a um MessageBox. Para escrever o projeto utilizou-se o Visual Studio 2010 em linguagem VB.NET.

Abra o Visual Studio e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem VB.NET.



Com o projeto devidamente criado, acrescente um novo formulário ao projeto (Project > Add Windows Forms) e mantenha o nome sugerido pelo Visual Studio.



No Form2, acrescente dois botões e configure-os de acordo com as imagens abaixo (Perceba que alteramos a propriedade Text dos botões para “Sim” e “Não”).




Volte para o Form1, acesse o editor de código fonte do formulário (F7 ou dê um duplo-clique sobre o centro do Form1) e escreva as linhas de código abaixo.

Private Sub Form1_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) _
        Handles MyBase.Load
        Dim f As New Form2
        f.Text = "Mensagem personalizada"
        If f.ShowDialog = Windows.Forms.DialogResult.Yes Then
            MessageBox.Show("O usuário clicou em ""Sim"".")
        Else
            MessageBox.Show("O usuário clicou em ""Não"" ou fechou o Form.")
        End If
    End Sub

Pronto. Compile a aplicação pressionando a tecla de atalho F5 e confira o resultado.




Fico por aqui e até a próxima!

sexta-feira, 10 de junho de 2011

Usar a paleta de cores no .NET

E aí, programadores!

Este texto é mais uma dica rápida, simples e objetiva, que demonstra como utilizar uma paleta de cores do Windows no contexto de uma aplicação .NET. No exemplo, a cor de fundo do formulário (propriedade BackColor) será alterada pela cor selecionada na paleta. Para exemplificar, iremos usar o Visual Studio 2010 Ultimate e linguagem VB.NET.

Abra o Visual Studio e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem VB.NET.


Acesse a Toolbox (caso não esteja aparecendo na IDE, clique no menu View > Toolbox), na guia Common Controls e arraste o controle Button para o formulário Form1.


Para escrevermos a rotina que irá abrir a paleta de cores, dê um duplo-clique sobre o botão Button1 e escreva o trecho de código abaixo.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' Instanciar um objeto da classe ColorDialog
    Dim paleta As New ColorDialog()
    ' Abrir a paleta de cores e verificar se o usuário clicou no botão OK
    If paleta.ShowDialog() = Windows.Forms.DialogResult.OK Then
        ' Alterar a cor de fundo do formulário atual
        Me.BackColor = paleta.Color
    End If
End Sub

O código é simples e está comentado para facilitar no entendimento. Para testar, salve e execute a aplicação pressionando a tecla de atalho F5. O resto é exibido na imagem abaixo.


Por hora é só. 
Até a próxima!

terça-feira, 7 de junho de 2011

Usando o assistente de criação de CSS

Olá, pessoal!

Dentre as inúmeras funcionalidades e recursos que compõem o Visual Studio, tem uma ferramenta que é muito utilizada pelos designers (e programadores que também atuam com layout de páginas) que é o assistente de criação de style CSS (Cascading Style Sheet)

Para obter mais informações sobre CSS, acesse o endereço http://maujor.com/

Para demonstrar, vamos utilizar o Visual Studio 2010 Ultimate e um projeto do tipo Web Site. Abra o Visual Studio e crie um novo projeto (File > New > Web Site) do tipo ASP.NET Empty Web Site.


Adicione uma página Default.aspx, clicando com o botão direito do mouse sobre o projeto, e em seguida Add New Item. Selecione o item Web Form, mantenha o nome original do arquivo e clique em Add.


Com a página criada, digite um texto qualquer para utilizarmos como exemplo.


Para acessar o assistente, clique no menu Format > New style. A janela do assistente é iniciada conforme a imagem abaixo.


Configure um novo style conforme a figura a seguir, em seguida clique no botão Apply (clique em Yes na caixa de diálogo) e depois em OK.


Para aplicarmos o novo estilo no texto “Programação On-Line”, clique no menu View > Apply Styles. A janela é automaticamente aberta e ocupa uma parte da IDE do Visual Studio.


Selecione o texto em que se deseja aplicar o style, e clique na classe .TituloPagina do arquivo CSS conforme a figura e veja o resultado, após o clique.


O exemplo é bem simples, mas serve para ilustrar o uso do utilitário de criação e formatação de estilos. Com ele, além de alterar uma fonte de um texto, também é possível ajustar o BackGround da página, alinhar a posição dos elementos HTML e ASP.NET e formatar o layout de uma Table.

Fico por aqui e espero ter ajudado.

segunda-feira, 6 de junho de 2011

Carregar um TreeView via código

E aí, pessoal!

O TreeView é um controle de extrema utilidade, e que serve para exibir informações no formato de árvore hierárquica. Neste artigo, veremos como criar os nós (pai e filho) de forma programática usando a linguagem C#.

Abra o Visual Studio (utilizou-se a versão 2010 Ultimate na edição do artigo) e crie um novo projeto (File > New > Project) do tipo Windows Forms Application em linguagem C#.


Com o projeto criado e um formulário adicionado automaticamente (Form1), acesse a Toolbox e arraste o controle TreeView para o centro da janela.


Ajuste o controle para que se adeque às bordas do formulário. Em seguida, dê um duplo-clique sobre o Form1 para que o Visual Studio escreva a assinatura do evento Load do form. Copie o código abaixo e cole no evento deste evento.

private void Form1_Load(object sender, EventArgs e)
{
    treeView1.Nodes.Add("Informática");
    treeView1.Nodes[0].Nodes.Add("Netbook");
    treeView1.Nodes[0].Nodes.Add("Computador");
    treeView1.Nodes[0].Nodes[0].Nodes.Add("Netbook LG X140l-1140 Rosa Intel® Atom™");
    treeView1.Nodes[0].Nodes[1].Nodes.Add("Computador Compaq All-in-one Cq1-1210br");
    treeView1.ExpandAll();
}

O código acima cria um nó principal chamado “Informática”, e em seguida cria dois nós-filhos do nó principal ("Netbook" e "Computador"). Por fim, acrescentamos mais dois nós-filhos dos nós anteriores, para caracterizar uma árvore genealógica. Compile a aplicação e veja o resultado que deve ser semelhante ao da imagem abaixo.


Espero que seja útil e até a próxima!

sexta-feira, 3 de junho de 2011

Select em objeto DataTable

Saudações, jovens!

Neste texto, veremos como efetuar uma seleção de registros em um objeto DataTable previamente alimentado de forma programática. Para demonstrar, iremos criar o DataTable dinamicamente e sem a presença de uma base de dados. O projeto será criado no Visual Studio 2010 em linguagem VB.NET.
Abra o Visual Studio e crie um novo projeto do tipo Web Site (File > New > Web Site) em linguagem VB.NET.


Vamos aproveitar a página Default.aspx para demonstrar o exemplo. Acesse a Toolbox, na guia Data e arraste o controle GridView para dentro da página. Segue abaixo o fonte HTML da página com a grade devidamente formatada.

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
            Width="432px">
            <Columns>
                <asp:BoundField DataField="Nome" HeaderText="Nome" />
                <asp:BoundField DataField="Email" HeaderText="E-mail" />
            </Columns>
        </asp:GridView>
    </div>
    </form>
</body>
</html>

Percebam que acrescentamos duas colunas no GridView (Nome e E-mail), justamente para servir de base para a seleção que iremos fazer no DataTable. Abaixo do GridView, acrescente um controle TextBox e um Button que será usado na pesquisa. O código abaixo já contempla a grade e os dois controles.

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
            Width="432px">
            <Columns>
                <asp:BoundField DataField="Nome" HeaderText="Nome" />
                <asp:BoundField DataField="Email" HeaderText="E-mail" />
            </Columns>
        </asp:GridView>
        <br />
        <asp:TextBox ID="TextBox1" runat="server">
        </asp:TextBox>&nbsp;<asp:Button ID="Button1" runat="server" Text="Pesquisar" />
    </div>
    </form>
</body>
</html>

Neste momento, o layout da página Default.aspx deve ser semelhante a imagem abaixo.


Clique no menu View > Code para termos acesso ao editor de código fonte da página (code-behind). Transcreva o trecho abaixo para a página.

Imports System.Data

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            PreencherDataTable()
            GridView1.DataSource = Session("contato")
            GridView1.DataBind()
        End If
    End Sub

    Private Sub PreencherDataTable()
        Dim _dt As New DataTable
        _dt.Columns.Add("Nome", GetType(String))
        _dt.Columns.Add("Email", GetType(String))
        _dt.Rows.Add("Tecla", "contato.programacao@gmail.com")
        _dt.Rows.Add("Lula", "lula.pt@gmail.com")
        _dt.Rows.Add("Kassab", "kassab.dem@gmail.com")
        Session("contato") = _dt
    End Sub
End Class

O código descreve a criação do objeto DataTable, a carga de alguns registros hipotéticos e a atribuição de toda a estrutura do objeto a variável de sessão Session(“contato”). Por fim, criamos o vinculo do GridView com a Session. Resta escrever a parte que dá nome ao artigo, que é o filtro com o método Select do DataTable. Ainda na aba Design, dê um duplo-clique sobre o botão pesquisar e escreva o código abaixo no escopo do evento Click.

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim _dt As New DataTable
        If TextBox1.Text.Trim() = "" Then
            GridView1.DataSource = Session("contato")
            GridView1.DataBind()
        Else
            Dim _drFiltro() As DataRow = _
                DirectCast(Session("contato"), DataTable).Select("Nome LIKE '%" + TextBox1.Text + "%'")
            _dt.Columns.Add("Nome", GetType(String))
            _dt.Columns.Add("Email", GetType(String))

            For Each _dr As DataRow In _drFiltro
                _dt.Rows.Add(_dr(0).ToString(), _dr(1).ToString())
            Next
            GridView1.DataSource = _dt
            GridView1.DataBind()
        End If
    End Sub

O exemplo é simples, e serve para entender o funcionamento do método Select do objeto. A nível de estudo, fizemos um filtro através do campo Nome do DataTable e recarregamos o GridView com o resultado da pesquisa. Para testar, execute a aplicação e veja o resultado.


Fico por aqui e até a próxima!

domingo, 29 de maio de 2011

Query em SQL Server retornar um documento XML

O Microsoft SQL Server dispõe de um vários recursos interessantes que facilitam a vida do desenvolvedor, um deles é permitir que o resultado de uma query seja formatada como um documento XML. O documento pode resultar em um elemento por registro (com as colunas exibidas como atributos) ou exibir as colunas como elementos. Iremos demonstrar as duas formas acima.

Abra o Microsoft SQL Server Management Studio (2005 ou 2008) e faça a autenticação no servidor SQL usando as credencias de acesso.


Selecione uma base de dados na guia Object Explorer e crie uma nova janela de consulta.


Como exemplo, vamos selecionar os registros da tabela Employees de forma tradicional.


Aproveitando a consulta acima, acrescente as palavras-chave FOR XML AUTO para que o resultado seja apresentado na forma de um documento XML.


Perceba na primeira imagem, que a consulta anterior retornava 9 linhas, enquanto que a segunda resultou somente uma. Isso ocorre porque o documento XML foi escrito na forma horizontal, ou seja, todas as linhas em somente uma. Clique sobre a linha resultante e veja o resultado em um editor XML interno do próprio Management.


As colunas da consulta foram retornadas em forma de atributos XML. Vamos acrescentar a palavra-chave ELEMENTS para que a estrutura do documento acrescente elementos, ao invés de atributos.



Esta dica é útil quando se utiliza o SGBD Microsoft SQL Server e documentos XML no escopo da aplicação.

Espero que tenham gostado, e até a próxima!