[Série String C#] - String Clone // C#


Método Clone String:

Criado para manter permanentemente uma referência ao estado inicial de uma string, por exemplo.

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Linq;
using  System.Text;
using  System.Windows.Forms;

namespace  WindowsFormsApplication5
{
public  partial  class  Form1  : Form 
{
public  Form1()
{
InitializeComponent();
}

private  void  kryptonButton1_Click(object  sender, EventArgs  e)
{

    string  str = "Clone() Test" ;
    string  clonedString = null ;
    clonedString = (String )str.Clone();
    MessageBox .Show(clonedString);

}
}
}


Abraços !


Operadores de Incremento e Decremento

Existem algumas técnicas que não são muito utilizadas no dia-a-dia dos programadores, e as vezes, são os pequenos detalhes que influenciam na performance e na escrita de um bom código.

Nós vamos passar algumas dessas técnicas no decorrer das postagens, pois, temos plena certeza de que muitos se interessarão pelo assunto.

Utilize os operadores de incremento (++) e decremento (--) em vez de um operador de atribuição composta ao incrementar ou decrementar uma variável por 1.
Por exemplo, substitua:

Contador = Contador + 1;


ou

Contador += 1;


por

Contador++;



====================================================================================
Bibliográfia:
Microsoft Visual C# 2008 / John Sharp
====================================================================================


Utilizando operadores de atribuição composta


Atualizando o valor de uma variável utilizando os operadores de atribuição composta.

Você já deve saber como utilizar os operadores matemáticos para criar novos valores. Por exemplo a instrução a seguir utiliza o operador (+) para exibir no console um valor que é 10 unidades maior que a variável var.


Console.WriteLine(var + 10);



Você também já deve saber como utilizar as instruções de atribuição para alterar o valor de uma variável. A intrução a seguir utiliza o operador para alterar o valor da variável var para 10.


Var = 10;



Se você quiser adicionar 10 ao valor de uma variável, pode combinar o operador de atribuição com o operador de adição. Por exemplo, a instrução a seguir adiciona 10 à variável var. Depois da execução dessa instrução, valor de var será 10 unidades maior que o valor anterior.


var = var + 10;



Embora essa instrução funcione, você provavelmente nunca verá um programador experiente escrever um código assim. Adicionar um valor a uma variável é tão comum que o C# permite executar essa tarefa de maneira mais rápida utilizando o operador +=. Para adicionar 10 à var, escreva esta instrução:


var += 10;



Utilize esse atalho para combinar qualquer operador aritmético com o operador de atribuição, como mostra a tabela a seguir. Esses operadores são coletivamente conhecidos como operadores de atribuição composta.


Não escreva isto
Escreva isto
variavel = variavel * variavel
variavel *= variavel
variavel = variavel / variavel
variavel /= variavel
variavel = variavel % variavel
variavel %= variavel
variavel = variavel + variavel
variavel += variavel
variavel = variavel - variavel
variavel -= variavel

O operador += também funciona em strings; ele anexa uma string ao final de outra. Por exemplo, o código a seguir exibe "Olá Rodrigo" no console:


string Nome = "Rodrigo";
string Cumprimento = "Olá ";
Cumprimento += Nome
Console.WriteLine(Cumprimento);





Obs: Você não pode utilizar nenhum outro operador de atribuição composta em strings.

====================================================================================
Bibliográfica:
Microsoft Visual C# 2008 / John Sharp
====================================================================================





[Série String C#] - Validar String // C#

Neste artigo vamos dar um exemplo simples de como validar uma string...

[DESCRIÇÃO]
TryParse é usado para determinar se uma string é uma representação válida de um tipo numérico especificado ou não. TryParse é um método implementado para todos os tipos primitivos numéricos e também por tipos como DateTime e IPAddress.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;  


C# - Pegar o UpTime do SO

Ok vamos pegar o tempo total que o sistema esta ligado !


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
 
namespace wmi_get_uptime
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private DateTime ParseCIM(string date)
        {
            //datetime object to store the return value
            DateTime parsed = DateTime.MinValue;
 
            //check date integrity
            if (date != null && date.IndexOf('.') != -1)
            {
                //obtain the date with miliseconds
                string newDate = date.Substring(0, date.IndexOf('.') + 4);
 
                //check the lenght
                if (newDate.Length == 18)
                {
                    //extract each date component
                    int y = Convert.ToInt32(newDate.Substring(0, 4));
                    int m = Convert.ToInt32(newDate.Substring(4, 2));
                    int d = Convert.ToInt32(newDate.Substring(6, 2));
                    int h = Convert.ToInt32(newDate.Substring(8, 2));
                    int mm = Convert.ToInt32(newDate.Substring(10, 2));
                    int s = Convert.ToInt32(newDate.Substring(12, 2));
                    int ms = Convert.ToInt32(newDate.Substring(15, 3));
 
                    //compose the new datetime object
                    parsed = new DateTime(y, m, d, h, mm, s, ms);
                }
            }
 
            //return datetime
            return parsed;
        }
 
        public TimeSpan GetSystemUptime()
        {
            //timespan object to store the result value
            TimeSpan up = new TimeSpan();
 
            //management objects to interact with WMI
            ManagementClass m = new ManagementClass("Win32_OperatingSystem");
 
            //loop throught the WMI instances
            foreach (ManagementObject instance in m.GetInstances())
            {
                //get the LastBootUpTime date parsed (comes in CIM_DATETIME format)
                DateTime last = ParseCIM(instance["LastBootUpTime"].ToString());
 
                //check it value is not DateTime.MinValue
                if (last != DateTime.MinValue)
                    //get the diff between dates
                    up = DateTime.Now - last;
            }
 
            //return the uptime TimeSpan
            return up;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            //Como chamar !
            textBox1.Text = GetSystemUptime().ToString();
 
        }
 
    }
}

Segue ScreenShot =]


Fácil não ? Qualquer coisa de um grito !


Renomear arquivos em massa

Nunca estiveram em uma situação de ter que renomear vários arquivos manualmente?
Bom, nós sim! Por isso desenvolvemos uma rotina que renomeia arquivos em massa. (Basta ter uma lógica por trás.)

Exemplo: Tenho em um determinado diretório vários arquivos com o formato .csv, porém gostaria de alterar todos eles para a extensão .xls!

Perfeito, em vez de perder algum tempo fazendo essa mesma função manualmente, crie uma rotina que faça isso para você.

Veja como:

Antes de aplicar a função:







Imports System.IO

Public Class frmRenomearArquivos

Private Sub btnbuscarPasta_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles
btnDefinirDiretório.Click
If Me.dirCaminho.ShowDialog() = Windows.Forms.DialogResult.OK Then
Me.txtCaminho.Text = Me.dirCaminho.SelectedPath
Me.BuscarArquivos(Me.txtCaminho.Text)
End If
End Sub

Private Sub btnRenomear_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles
btnRenomear.Click
If String.IsNullOrEmpty(Me.txtCaminho.Text) Then
MessageBox.Show("Defina o diretório!", "Atanção!", _
MessageBoxButtons
.OK, MessageBoxIcon.Stop)
Me.btnDefinirDiretório.Focus()
Exit Sub
End If

If String.IsNullOrEmpty(Me.txtLocalizar.Text) Or _
String
.IsNullOrEmpty(Me.txtSubstituir.Text) Then
MessageBox.Show("Preencher campos obrigatórios!", "Atenção!", _
MessageBoxButtons
.OK, MessageBoxIcon.Stop)
Me.txtLocalizar.Focus()
Exit Sub
End If

Try
Me.RenomearArquivos()
Me.BuscarArquivos(Me.txtCaminho.Text)

Me.txtLocalizar.Clear()
Me.txtSubstituir.Clear()
Me.txtLocalizar.Focus()
Catch ex As Exception
MessageBox.Show(ex.Message, "Erro!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

Private Sub txtLocalizar_GotFocus(ByVal sender As Object, _
ByVal
e As System.EventArgs) _
Handles txtLocalizar.GotFocus
Me.txtLocalizar.SelectAll()
End Sub

Private Sub txtSubstituir_GotFocus(ByVal sender As Object, _
ByVal
e As System.EventArgs) _
Handles txtSubstituir.GotFocus
Me.txtSubstituir.SelectAll()
End Sub

''' <summary>
''' Renomeia os arquivos
''' </summary>
Private Sub RenomearArquivos()
For Each Arquivo As String In Directory.GetFiles(Me.txtCaminho.Text)
Dim NovoNome As String = String.Empty
Dim NomeArquivo As String = String.Empty

' Extrai o diretório do nome do arquivo
If Arquivo.IndexOf("\") >= 0 Then
NomeArquivo = Arquivo.Substring(0, Arquivo.LastIndexOf("\"))
Else
NomeArquivo = System.Environment.CurrentDirectory
End If

' Define o novo nome para o arquivo
NovoNome = Replace(Arquivo.Substring(Arquivo.LastIndexOf("\") + 1), _
Me
.txtLocalizar.Text, Me.txtSubstituir.Text)

' Renomeia o arquivo
System.IO.File.Move(Arquivo, NomeArquivo & "\" & NovoNome)

MessageBox.Show("Os arquivos foram renomeados corretamente!", "Confirmação", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
Next
End Sub

''' <summary>
''' Preenche o ListBox com o nome dos arquivos
''' que estiverem no diretório selecionado

''' </summary>
''' <param name="pDiretorio">Diretório dos arquivos a serem renomeados</param>
Private Sub BuscarArquivos(ByVal pDiretorio As String)
Me.lsbArquivos.Items.Clear()
If Directory.Exists(pDiretorio) Then
For Each Arquivo As String In Directory.GetFiles(pDiretorio)
Me.lsbArquivos.Items.Add(Arquivo.Substring(Arquivo.LastIndexOf("\") + 1))
Next
Else
MessageBox.Show("Diretório inexistente!" & vbCrLf & pDiretorio, "Erro!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End Sub

End Class

Após aplicar a função (Resultado):
Resultado
Download do arquivo completo: RenomearArquivos.zip


Criptografia VB.NET

Ola meu povo, hoje vou mostrar como podemos criptografar dados no VB.NET...
Crie a seguinte classe

Imports System.Text
Imports System.Security.Cryptography
 
Public Class cls_crypto
 
    Private Shared TripleDES As New TripleDESCryptoServiceProvider
    Private Shared MD5 As New MD5CryptoServiceProvider
 
    ' Definição da chave de encriptação/desencriptação 
    Private Const key As String = "SENHA_DE_SUA_PREFERENCIA"
 
    ''' <summary> 
    ''' Calcula o MD5 Hash  
    ''' </summary> 
    ''' <param name="value">Chave</param> 
    Public Shared Function MD5Hash(ByVal value As StringAs Byte()
 
        ' Converte a chave para um array de bytes  
        Dim byteArray() As Byte = ASCIIEncoding.UTF8.GetBytes(value)
        Return MD5.ComputeHash(byteArray)
 
    End Function
 
    ''' <summary> 
    ''' Encripta uma string com base em uma chave 
    ''' </summary> 
    ''' <param name="stringToEncrypt">String a encriptar</param> 
    Public Function Encrypt(ByVal stringToEncrypt As StringAs String
 
        Try
 
            ' Definição da chave e da cifra (que neste caso é Electronic 
            ' Codebook, ou seja, encriptação individual para cada bloco) 
            TripleDES.Key = cls_crypto.MD5Hash(key)
            TripleDES.Mode = CipherMode.ECB
 
            ' Converte a string para bytes e encripta 
            Dim Buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(stringToEncrypt)
            Return Convert.ToBase64String _
                (TripleDES.CreateEncryptor(). _
TransformFinalBlock(Buffer, 0, Buffer.Length))
 
        Catch ex As Exception
 
            MessageBox.Show(ex.Message, My.Application.Info.Title, _
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return String.Empty
 
        End Try
 
    End Function
 
    ''' <summary> 
    ''' Desencripta uma string com base em uma chave 
    ''' </summary> 
    ''' <param name="encryptedString">String a decriptar</param> 
    Public Function Decrypt(ByVal encryptedString As StringAs String
 
        Try
 
            ' Definição da chave e da cifra 
 
            If encryptedString = String.Empty Then Return String.Empty
            TripleDES.Key = cls_crypto.MD5Hash(key)
            TripleDES.Mode = CipherMode.ECB
 
            ' Converte a string encriptada para bytes e decripta 
            Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
            Return ASCIIEncoding.ASCII.GetString _
                (TripleDES.CreateDecryptor(). _
TransformFinalBlock(Buffer, 0, Buffer.Length))
 
        Catch ex As Exception
 
            MessageBox.Show(ex.Message, My.Application.Info.Title, _
                            MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return String.Empty
 
        End Try
 
    End Function
 
End Class
 

Nesse cenário criamos a classe, agora em um form  vamos chamar a classe.

Dim cripto As New cls_crypto
Textbox.text = cripto.Encrypt("TEXTO_A_SER_CRIPTOGRAFADO")
 
E para descriptografar Messagebox.show(cripto.Decrypt(Textbox1.text))
 
Abraços 



AndAlso // VB.NET

AndAlso 

O operador lógico AndAlso, assim como o OrElse, implementa o chamado curto circuito. Como assim? Pois bem. Pra quem está acostumado com C# pode não saber, mas no VB.NET os operadores AND e OR fazem com que toda a expressão composta com operadores lógicos seja avaliada. Ou seja, em uma expressão composta com AND, se a primeira expressão for igual a FALSE, o VB irá avaliar a segunda expressão. O que quero dizer é que, no caso de um AND, se a primeira expressão for igual a false, mesmo que a segunda seja verdadeira, aquele bloco de código condicional não será executado (lembre-se: False AND True é igual a false).


C# Verificar privilégios administrativos

Há algum tempo atrás precisei de verificar dentro do meu programa se ele estava sendo iniciado com privilégios administrativos, a solução é bem simples para esse caso !

Mãos na massa !

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Security.Principal;
 
namespace Admin
{
    static class Program
    {
        /// 
        /// The main entry point for the application.
        /// 
        [STAThread]
        static void Main()
        {
            try
            {
                
                //Ligando os Recursos
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
 
                //Istanciando e catando identidades
                WindowsIdentity Identidade = WindowsIdentity.GetCurrent();
                WindowsPrincipal Principal = new WindowsPrincipal(Identidade);
 
                //Verificando
                if (!Principal.IsInRole(WindowsBuiltInRole.Administrator))
                {
                    MessageBox.Show("Usuário sem Privilégios administrativos");
                    Application.Exit();
                }
                else
                {
 
                    MessageBox.Show("Usuário com Privilégios administrativos");
                    Application.Run(new Form1());
 
                }
                                
            }
            catch (Exception ex)
            {
                if (ex != null) 
                {
 
                    MessageBox.Show("Erro ao verificar seus dados !");
 
                }
            }
                        
        }
    }
}

Esta ai... simples como a vida deve ser !
e vamu que vamuuu !!!


Exercicios C#

 
    A vida não é fácil para quem está aprendendo com a ajuda dos tutoriais, abaixo seguem alguns exercícios fáceis, e é uma forma de pôr em prática o que se aprendeu, NÃO são de nossa autoria, mas não teremos nenhum problema em ajudar na resolução de alguns.
  • Crie um programa que ao clicar num botao abra uma nova janela. A janela deve chamar-se Nova janela e deverá conter apenas a frase Portugal a programar.


  • Crie um programa que leia um texto escrito numa caixa de texto e ao clicar num botão altere o nome do programa para o texto inserido na caia de texto.


  • Crie um programa que leia texto de duas caixas de texto e apresente esse texto junto num rótulo.

  • Conversor numeros para Extenso !

    Testando vários desses tutoriais e códigos de como transformar numeros a partir de valores monetários em strings, percebemos que cada um apresentava uma deficiência, entao resolvemos adaptar a nosso modo e incluir algumas funcionalidades descritas abaixo.

    Funcionalidades
    • Valores numéricos Monetários em Valores por extenso
    • Valores Numericos em Valores Porcentagem.
    • Valores Numericos em strings.

    Idiomas
    • Portugues PT-BR
    • Portugues PT-PT

    Moedas
    • Reais (Brasil)
    • Euro (Europa)

    A dll Funcionará em .NET Framwork 3.0 e esta sendo desenvolvida no Visual Studio 2010.



    Entao Siga, baixe, entre, ajude, reclame... mas coopere ! pois o Mundo não para

    O link vai logo abaixo....

    [[[ --- String Toolkit.NET --- ]]] 

    E vamu que vamuuuu...


    Capturando o evento Click do botão Fechar

    Uma das práticas utilizando esse evento é solicitar uma confirmação de encerramento do sistema somente ao clicar no botão fechar.
    Caso exista algum método de encerramento incluso no sistema não precisará passar pela mensagem de confirmação.
    Ou também se for preciso desligar o computador sem essa mensagem.


    Exemplo de mensagem de confirmação:












    Código Fonte:

    ''' <summary>
    ''' Define ou retorna se o sistema deverá ser encerrado
    ''' </summary>
    Private PodeFechar As Boolean = True

    ' Constante do botão fechar
    Private Const WM_CLOSE As Integer = CInt(&H10)

    Protected Overrides Sub WndProc(ByRef pM As System.Windows.Forms.Message)
    If pM.Msg = WM_CLOSE Then
    If MessageBox.Show("Deseja encerrar o sistema?", _
    "Encerrar sistema!", _
    MessageBoxButtons.YesNo, _
    MessageBoxIcon.Question) = _
    Windows.Forms.DialogResult.Yes Then
    Me.PodeFechar = True
    Else
    Me.PodeFechar = False
    End If
    End If
    MyBase.WndProc(pM)
    End Sub

    Private Sub frmEventoFechar_FormClosing(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.FormClosingEventArgs) _
    Handles Me.FormClosing
    If Me.PodeFechar = False Then
    e.Cancel = True
    Me.PodeFechar = True
    End If
    End Sub

    Apostilas básica sobre o .NET Micro Framework em português.


    Este livro é para iniciantes que querem aprender .NET Micro Framework. Nenhum
    conhecimento prévio é necessário. O livro cobre .NET Micro Framework, Visual C# e C#!
    Se você é um programador, um hobbista ou um engenheiro, você encontrará uma boa
    quantidade de informações neste livro. Este livro não faz nenhuma suposição sobre o que
    você, leitor sabe, é explicado detalhadamente.

    Link Apostila


    Como trabalhar com Timer em Debug Mode

    O problema de se trabalhar com timers na aplicação, é que quando se esta em debug mode o timer é executado continuamente ocorrendo assim de o ponteiro sempre parar lá. Existem programadores o que definem como comentário e no final retiram o comentário. Uma das formas de resolver este pequeno "problema" é indica-lo com não fazendo parte do debug DebuggerStepThrough da namespace Diagnostics. Exemplo:

    VB.NET
    <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub Timer1_Tick(sender As System.Object, _
                                e As System.EventArgs) Handles Timer1.Tick
            NumericUpDown1.Value += 1
        End Sub

    C#.NET
    [System.Diagnostics.DebuggerStepThrough]
        private void timer1_Tick(object sender, EventArgs e)
        {
            numericUpDown1.Value += 1;
        }

    Espero que ajude !

    C#, Obter hora de maquinas da rede

    Segue abaixo uma elegante classe em C# para buscar a hora em micros da rede...


    namespace GetHora
    {
        public class NewHour
            
        {
            public DateTime GetNovaHora (string strMaquina)
            {
                IntPtr handle = IntPtr.Zero;
                DateTime dt;
                if (NetRemoteTOD("\\\\" + strMaquina, ref handle) == NERR_Success) 
    
                { 
                    TIME_OF_DAY_INFO time = (TIME_OF_DAY_INFO) _
    Marshal.PtrToStructure ( handle, typeof( TIME_OF_DAY_INFO ) );
                        
                    dt = new DateTime ((int)time.tod_year, 
                                    (int)time.tod_month, 
                                    (int)time.tod_day, 
                                    (int)(time.tod_hours - 
                                    (time.tod_timezone / 60)), 
                                    (int)time.tod_mins, 
                                    (int)time.tod_secs);
                        
    
                    uint result = NetApiBufferFree (handle);
                    if (result != NERR_Success)
                    Console.WriteLine ( "Memory cleanup failed: {0}",result );
                    return dt;
                }
    
                return GetNovaHora("localhost");
     


    Começando os Trabalhos


    Começando os trabalho hoje, irei postar artigos, video-aulas sobre a plataforma .net, espero que gostem !

    Messagebox.show("Hello Blogosfera");