WPF: Mudar o foco de controle apertando Enter

23. fevereiro 2010

É muito comum no desenvolvimento de aplicações além da tecla Tab, definir o Enter para pular entre os controles do formulário, principalmente sistemas migrados do DOS em que o pessoal tinha esse costume de utilizar o Enter.

Com um projeto WPF criado, coloque 4 TextBox no formulário.

Formulario

Feito isso, vá até o evento PreviewKeyDown do mesmo. O código para fazer o Enter pular de controle está abaixo.

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
var elemento = e.OriginalSource as UIElement;


if (elemento == null)
return;

if(e.Key == Key.Enter)
elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}

O código é simples, primeiro criamos uma variável a partir do e.OriginalSource que é o controle que estamos, e será a partir dele que vamos mudar o foco. Depois só temos uma verificação que se elemento for nulo retorna e não faz mais nada;

O if é simples, verifico se a tecla pressionada foi o Enter, e ai chamamos o método MoveFocus() que move o foco de um controle para outro, esse método recebe uma nova instância da classe TraversalRequest que representa uma requisição para mover o foco para outro controle.

No construtor da TraversalRequest passamos o enum FocusNavigationDirection que contém as opções abaixo:

  • Next
  • Previous
  • First
  • Last
  • Left
  • Right
  • Up
  • Down

Cada uma das opções move o foco de acordo com o TabOrder do formulário ou pela posição dos controles.

Com esse enum fica fácil criarmos mais opções para o usuário, por exemplo se o usuário clicar a seta para cima mudamos o foco para o controle acima, o código ficaria assim.

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
var elemento = e.OriginalSource as UIElement;

if (elemento == null)
return;

if(e.Key == Key.Enter)
elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
if (e.Key == Key.Up)
elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Up));
}

Fica aqui a dica principalmente para quem está migrando de WindowsForms para WPF, e vai ver que alguns (muitos) detalhes funcionarão de forma diferente.

Abraços.

C#, WPF ,

Visita a Microsoft, EUA

18. fevereiro 2010

Finalizando as fotos da visita a Microsoft nos EUA, meu amigo Spoky que queria ver fotos de como é lá dentro da Microsoft, segue algumas fotos =D, espero voltar lá em breve, é muito legal, o Visitor Center é aberto ao público, tem Surfaces, Notebooks, Zunes, Xbox para todo lado, internet livre, é uma festa, sem contar a lojinha ;) No final das fotos tem algumas de um dos prédios onde o Windows é feito, e onde tivemos uma reunião com engenheiros do Windows, e não adianta perguntar o que convesamos, NDA. :D

 

Seattle 035 Seattle 038

Seattle 045

Seattle 047 Seattle 048

Seattle 049 Seattle 052 

Seattle 053Seattle 059

 Seattle 103 Seattle 071

 Seattle 060 Seattle 114

Seattle 123 Seattle 116

Diversão com LINQ e Strings

18. fevereiro 2010

Para quem não sabe o que é o LINQ ou tem dúvidas, clique aqui para visitar a página do produto no MSDN.

Diferente do que a maioria conhece como LINQ To SQL, LINQ To Entities, podemos utilizar LINQ para várias outras operações como, percorrer controles de um formulário, leitura de diretórios, DataSet, Xml, fora outros providers criados como LINQ To Twitter, LINQ To Active Directory e muito mais que podem ser encontrados no CodePlex.

Vou mostrar aqui hoje como fazer uma operação simples com uma string, no caso a string é o meu nome completo “Márcio Fábio Althmann”, o primeiro teste vamos separar as palavras, utilizando um espaço como caracter de separação. Em seguida vamos percorrer o resultado escrevendo na tela de um Console Application para testar se está tudo funcionando.

   1: var nome = "Márcio Fábio Althmann";
   2:  
   3: var palavras = from palavra in nome.Split(' ')
   4:                select palavra;
   5:  
   6:  
   7: foreach (var palavra in palavras)
   8: {
   9:     Console.WriteLine(palavra);
  10: }

Resultado.

   1: Márcio
   2: Fábio
   3: Althmann

Agora eu quero que a lista de palavras seja ordenada pelo número de caracteres, da menor palavra para a maior, veja o código abaixo.

   1: var palavras = from palavra in nome.Split(' ')
   2:                orderby palavra.Length
   3:                select palavra;

 

Resultado.

   1: Fábio
   2: Márcio
   3: Althmann

O inverso também é simples, agora vamos mostrar as palavras ordenadas da maior palavra pela menor, adicionando a palavra chave descending na cláusula orderby.

   1: var palavras = from palavra in nome.Split(' ')
   2:                orderby palavra.Length descending 
   3:                select palavra;

Resultado.

   1: Althmann
   2: Márcio
   3: Fábio

Esse foi um pequeno exemplo do que podemos fazer com strings utilizando o LINQ, bons estudos e aproveitem todo o poder que o LINQ oferece.

Abraços.

C#, LINQ ,

Diario de Viagem

11. fevereiro 2010

Bom, depois de um bom tempo sem postar, a correria aqui está grande, vamos lá novamente.

A viagem de SP a Dallas foi tranquila, foram 09 horas de voo, o aeroporto de Dallas é enorme, tem até um trem o Skyline que leva entre uma parte a outra do aeroporto, outro detalhe que impressiona aqui é a limpeza e organização das coisas, o aeroporto estava brilhando, tudo limpo, certinho, aqui em Redmond é tudo no lugar, nada de lixo pelo chão e tudo mais.

Depois de algum tempo esperando em Dallas pegamos o voo para Seattle, esse foi complicado, já batendo o cansaço da viagem, foram mais 4 horas em um avião menor, apertado, mas está valendo.

O hotel aqui é Redmond é muito legal, tem até banheira a Judy quase morreu quando viu, a tv é de 42´, e o frio é ótimo hehe, 10 graus em média, mas é diferente do frio ai do Brasil não da para explicar.

Eu tenho um Zune HD agora heueheu, jogos, mais 1 controle para o xbox, e muito mais, e o principal muita vontade de sair do  Brasil kkk.

Bom fiquem com algumas fotos

  Seattle 005 [1024x768] Seattle 038 [1024x768]Seattle 030 [1024x768]

Seattle 044 [1024x768] Seattle 057 [1024x768] Seattle 104 [1024x768]

Seattle 136 [1024x768] Seattle 154 [1024x768]

Seattle 157 [1024x768]

Diario de Viagem - Parte 01

8. fevereiro 2010

Chegamos agora pouco em Guarulhos e a viagem não poderia ter começado de forma melhor, o Iced Earth estava no avião de Curitiba – São Paulo, poutz tiramos foto com os caras kkk, no mais está tudo ótimo, agora vamos comer algo, eu vou comprar caixa pra lente que consegui esquecer em casa, e logo mais embarcamos para Seattle, fiquem com as fotos até agora.

Viagem 01 025

Viagem 01 026

Viagem 01 029

Viagem 01 030

Abraços e até amanhã em Seattle

Causas da Insatisfação dos Funcionários: 15 erros fatais

7. fevereiro 2010

Eu tinha esse post no meu blog antigo e resolvi postar aqui também, não podemos fugir disso no nosso trabalho, já trabalhei em empresas de todos os tipos e acreditem, as dicas abaixo são importantes, é um ótimo texto para empresários e funcionários, vale muito ler o texto, o link original é http://dinheiro.br.msn.com/financaspessoais/noticia.aspx?cp-documentid=15721314

Segue abaixo o texto:

SÃO PAULO - A gestão de talentos se tornou assunto prioritário nas empresas. Ninguém quer perder um funcionário talentoso. Muito menos para a concorrência. Entretanto, os líderes continuam errando. E a movimentação de profissionais no mercado continua intensa.

O portal InfoMoney perguntou a dois especialistas quais são os 15 erros principais das empresas quando o assunto é gestão de talentos. São erros corriqueiros, que acontecem no dia-a-dia, mas que minam a satisfação no emprego e a motivação da equipe. Os prejuízos para a empresa aparecem na forma de alta rotatividade de funcionários e queda da produtividade e da qualidade do trabalho.

Os 15 erros fatais

Confira a lista de erros comuns cometidos pelas empresas, elaborada pela consultora do IDORT/SP e especialista em Recursos Humanos, Aparecida Bucater, e pelo diretor de Operações da Human Brasil, Fernando Montero:Cultivar a burocracia, prejudicando a produtividade. Excesso de regras, normas, controles e procedimentos levam as pessoas a se preocupar com o que não podem fazer. Elas ficam tão preocupadas com o processo que perdem o foco no resultado;

Acreditar que as pessoas são "descartáveis". Os empresários pensam: "Ninguém é insubstituível". E não é mesmo. Mas há uma grande diferença entre saber que ninguém é insubstituível e acreditar que as pessoas são mais um recurso a ser descartado a qualquer momento, por qualquer razão. Peter Drucker afirmava: "As empresas são compostas de homens e idéias, o restante são recursos". Demissões intempestivas comprometem o resultado das empresas, ferem os demitidos, tornam a reputação da empresa no mercado negativa e deixam um clima péssimo para quem fica;

Ter uma postura autoritária, difundindo a crença de que "manda quem pode e obedece quem tem juízo". Nenhum profissional que é bom no que faz agüenta isso por muito tempo;

Ter uma postura paternalista. O autoritarismo é "irmão gêmeo" do paternalismo, já que os dois partem do mesmo princípio: as pessoas não têm condições de serem autônomas, precisam ser "mandadas" e "protegidas". A postura paternalista aparece, por exemplo, na tolerância ao mau desempenho;

Divulgar uma idéia, uma filosofia da empresa, e deixar transparecer que, na prática, as coisas não funcionam dessa forma. Supondo que uma organização tenha o seguinte lema: "Nossa empresa valoriza a criatividade e a inovação". Mas, quando o funcionário apresenta uma idéia, ouve em resposta: "Faça como sempre foi feito" ou é obrigado a agüentar cara feia. Que liderança mais contraditória!

Reter informações. Desde as básicas para a execução do trabalho até aquelas estratégicas, sobre mudanças, inauguração de novas unidades, estabelecimento de novas metas para a empresa. A verdade é que líderes despreparados frequentemente retêm informações para si, pois a atitude dá a eles uma sensação de poder, que não é real! Para se ter uma idéia, há profissionais que nem mesmo sabem ao certo quais são os objetivos de sua empresa, aonde ela quer chegar. Como conseqüência, eles não se identificam com a organização, não se esforçam e tendem a pedir demissão;

Cometer injustiças, permitindo privilégios, dando tratamento preferencial a alguns funcionários ou praticando uma remuneração injusta, tanto na comparação interna quanto na comparação com outras empresas;

Contar com um líder que não se integra, não se "mistura". A integração do líder com cada membro de sua equipe é algo que vai além da comunicação. Depende de ele se envolver com as pessoas, mostrar interesse por elas, ser próximo da equipe. Se, na empresa, não existe um processo de integração, as pessoas ficam desmotivadas e vão embora;

Confundir feedback - cujo propósito é corrigir um desvio, melhorando o desempenho futuro - com "feedcrau" - que se baseia em críticas destrutivas, olhares de desprezo, comentários depreciativos e outras formas, verbais ou não verbais, de criticar e desmerecer as pessoas;

Promover pessoas despreparadas para cargos de liderança. Um chefe que não é líder pode provocar desintegração da equipe, falta de motivação, queda da produtividade e da qualidade do trabalho e perda de talentos;

Não contar com um plano de remuneração estratégico e adequado. Quanto mais talentoso for o profissional, mais ambicioso ele será, na comparação com seus colegas. Se ele atinge os objetivos estipulados e sente que não é reconhecido, irá procurar um lugar melhor para trabalhar e, provavelmente, não terá dificuldade em encontrar;

Não esclarecer ao funcionário quais resultados são esperados dele, deixando de definir objetivos e prioridades. Quando tudo é prioridade, nada é prioridade! Os resultados ficam comprometidos e as pessoas ficam frustradas, estressadas e sobrecarregadas. Resultado: o profissional se esforça para realizar determinadas atividades que a empresa não valoriza e deixa de lado outras que o chefe considera mais importantes. Como ninguém fala nada do seu trabalho, para o qual tanto se empenhou, sente que não é reconhecido e fica insatisfeito com a empresa;

Não investir em formação e treinamento de funcionários. O que muitas empresas estão fazendo hoje é contratar pessoas prontas do mercado, com dois idiomas fluentes, pós-graduação, experiência e domínio dos programas de computador. Elas esquecem do papel de formadoras. É preciso oferecer aos profissionais treinamento, cursos, coaching. Podem ser cursos de curta duração, sobre como falar bem em público ou administrar melhor o tempo. Com isso, o funcionário vê que a empresa não fica só cobrando. Ela também oferece uma contrapartida, de forma que ele fica mais engajado;

Jogar um profissional contra o outro. O líder que faz isso, certamente, ao passar por avaliação psicológica, deixará transparecer que tem problemas pessoais. Nada é pior para uma equipe do que o espírito de competição. Enquanto o espírito de competitividade é saudável, o de competição só prejudica a empresa;

Realizar avaliação somente de cima para baixo (chefe para subordinado). A avaliação de baixo para cima também é importante. Na realidade, as empresas mais modernas já adotam um sistema de avaliação chamado de 360º, no qual todos avaliam todos. Logo, colegas de trabalho do mesmo nível hierárquico podem apontar deficiências e pontos fortes entre si, bem como quem está no mais baixo escalão tem a chance de dizer o que pensa sobre quem está no mais alto. A empresa só tem a ganhar com isso. O resultado mais provável é a retenção dos talentos por mais tempo.

Bom eu adoro esse texto, e amanhã viajo para os EUA vou visitar a Microsoft em Redmond, então essa semana só farei posts sobre a visita a MS, com fotos, e tudo mais.

Abraços

Pensamentos, Motivação ,

Biblioteca de Métodos de Extensão

5. fevereiro 2010

Para quem não conheçe o que é um método de extensão, leia aqui o meu artigo onde explico o que é e como funciona.

Sempre mantive uma biblioteca com as principais extensões que utilizo no dia-a-dia, até um backup incompleto :), agora estou reescrevendo essa biblioteca e resolvi compartilha com todos, até o momento não tem muitas extensões mas já ajuda no desenvolvimento.

Segue abaixo a lista das extensões criadas até agora.

  • Extensões para Strings
    • ToInt16()
    • ToInt32()
    • ToInt64()
    • ToDecimal()
    • ToDouble()
    • ToFloat()
    • ToTitleCase() converte “marcio fabio” para “Marcio Fabio” com cultura padrão pt-BR
    • ToTitleCase(cultura) o mesmo que a anterior mas informo qual a cultura desejada, por exemplo en-US
    • RemoverAcentos() tira todos os acentos de uma String
  • Extensões para Enumeradores
    • ObterDescricao() retorna o que estiver no DescriptionAttribute do Enum, caso não possua o atributo retorna “Sem Descrição”.
    • ObterDescricao(retornoSemDescricao) o mesmo que a anterior, só que informo o retorno desejado para Enum sem descrição.

Por enquanto é só isso, mas já está para download o arquivo logo abaixo, dicas, sugestões é só enviar para o e-mail marcio@marcioalthmann.net quem quiser compartilhar alguma extensão é só enviar que adiciono ao projeto.

Download

Abraços.

C#

O problema da produtividade

31. janeiro 2010

Sempre queremos mais produtividade no nosso trabalho, fazer uma tarefa mais rápido, entregar aquele sistema monstro em 1 mês, e é ai que vejo o problema, por mais que trabalhamos com ferramentas que ajudam na produtividade como Visual Studio, R# e outras, as vezes erramos na forma que utilizamos a tecnologia.

Devemos saber diferenciar o que é bom e o que é ruim na medida certa, as vezes pensamos que aquele arrasta e solta em um formulário já ligado ao banco de dados é perfeito, afinal, apertamos F5 e não apareceu nenhum erro no Visual Studio. E ai esse sistema vai crescendo, a complexidade aumentando, e a nossa ilusão do que era produtivo acaba de um jeito que não vamos gostar.

Uma vez perguntei para um desenvolvedor o que era produtividade para ele, a resposta foi: Fazer a tarefa no menor tempo possível, concordo com ele, mas eu modificaria um pouco a frase, Fazer com qualidade a tarefa no menor tempo possível.

Uma das melhores formas de garantirmos a qualidade do que fazemos, assim entregando algo rápido e com qualidade é não reinventar a roda, ter um bom conhecimento de POO, afinal, não é porque utilizamos um linguagem orientada a objetos que programamos orientado a objetos, conhecer os padrões de projeto do GOF, o Giovanni Bassi fez um ótimo webcast sobre o assunto semana passada mostrando alguns padrões, um outro ótimo exemplo de como podemos ser produtivos não reinventando a roda é dar uma olhada na Enterprise Library, lá achamos ótimas bibliotecas para Log, Exception, Validações e muito mais, é ai que vamos ganhar produtividade com qualidade, e não no arrasta e solta que compila e está pronto.

Costumo sempre ter papel e caneta na minha mesa, rabisco o dia inteiro, uma vez ouvi do Ramon Durães sobre a síndrome do I.V.S.F (Incrível Vondade de Sair Fazendo) e ele tem razão, temos que pensar antes de fazer algo, e não sair fazendo de qualquer forma só para entregar mais rápido.

Nesse mundo maluco que vivemos, onde entregar software cada vez mais complexo e com mais qualidade, não prestar atenção em alguns assuntos e pensar só em entregar e entregar tarefas pode custar muito caro no final.

Abraços e até a próxima.

Pensamentos

Blog 100% novamente

28. janeiro 2010

Depois de uma migração um pouco problematica (servidor demorou demais para restaurar um backup do SQL Server) do blog para um novo servidor vou voltar a postar sempre no blog, tentando postar diariamente, claro que nem todos os posts serão artigos tecnicos, não teria tempo para fazer um por dia com qualidade. Mas vou colocar dicas, links para outros blogs, etc…

Abraços a todos e até o próximo post.

Novidades

Kit de treinamento VS2010

14. janeiro 2010

Saiu a versão de Janeiro do kit de treinamento do Visual Studio 2010, para fazer download é só clicar aqui.

É uma ótima forma de estudar e conhecer tudo que teremos para brincar com a nova versão do Visual Studio e .Net Framework, segue abaixo uma lista do material que tem para estudo.

  • C# 4.0
  • Visual Basic 10
  • F#
  • Parallel Extensions
  • WCF
  • Windows Workflow
  • WPF
  • ASP.NET 4
  • Windows 7
  • Entity Framework
  • ADO.NET Data Services
  • Managed Extensibility Framework
  • Visual Studio Team System

Bons estudos a todos ;)

Abraços.

Visual Studio 2010, Novidades ,