Como criar um controlo personalizado usando o WPF?

O ponto de partida foi o exemplo encontrado no site WPF-Tutorial.com com o título “Creating & using a UserControl“.

A ideia é usar um controlo(s) já existente e criar um novo, que lhe acrescenta novas funcionalidades.

Neste caso queremos uma texbox que limita o número máximo de carateres, como mostra a imagem.

Exemplo simples de Herança em C#

Trata-se de um exemplo muito simples sobre herança em C#.

Termos duas classes de acordo com o diagrama seguinte.

A classe Gato herda a classe Animal e, desta forma, acrescenta-lhe duas novas funcionalidades:

  • o campo “raca“;
  • o método “infoGato” que permite exibir as informações sobre cada animal, neste caso o Gato.

O programa produz o seguinte output.

Código

Classe Animal

class Animal
{
public Animal()
{
    Nome = "?";
    Idade = 0;
    Cor = "?";
}
public string Nome
{
    get { return nome; }
    set { nome = value; }
}
public int Idade
{
    get { return idade; }
    set { idade = value; }
}
public string Cor
{
    get { return cor; }
    set { cor = value; }
}
//Membros privados
private string nome;
private int idade;
private string cor;
}

Classe Gato

class Gato:Animal
{
    public Gato(string nome, int idade, string cor, string raca)
    {
        Nome = nome;    //Propriedade herdada da classe base
        Idade = idade;  //Propriedade herdada da classe base
        Cor = cor;      //Propriedade herdada da classe base
        Raca = raca;    //Propriedade da subclasse (Gato)
    }
    public string Raca
    {
        get { return raca; }
        set { raca = value; }
    }
    public void infoGato()
    {
        Console.WriteLine(@"          /\_/\   Nome:  {0}", Nome);
        Console.WriteLine(@"   _____ / o o \  Idade: {0}", Idade);
        Console.WriteLine(@" /~______  =ø= /  Cor:   {0}", Cor);
        Console.WriteLine(@"(________)__m_m)  Raça:  {0}", Raca);
    }
    //Membros privados
    private string raca;
}

Programa principal

Console.WriteLine();
Gato g = new("Bolinhas", 3, "Amarelo", "Persa");
g.infoGato();

Um exemplo para percebermos os “WPF binding modes”

O objetivo deste pequeno exemplo é ajudar a perceber qual o funcionamento dos diferentes binding modes.

Estes são os seguintes:

  • OneTime
  • TwoWay
  • OneWay
  • OneWayToSource
  • Default

Podem facilmente procurar documentação sobre este assunto mas, para já, o objetivo aqui é descarregar o exemplo, executar, e tentar entender as diferenças.

Note que todos os controlos TexBox estão ligados a uma propriedade da classe Animal, que foi utilizada para instanciar o objeto que estamos a manipular.

Clique para descarregar exemplo…

Avaliação de problemas de programação (Online Judges)

Pretendo resumir aqui alguns sites que disponibilizam sistemas de avaliação de programas online, ideais para serem utilizados pelos estudantes de programação.

#1 ToPAS Virtual
URI: https://mooshak2.dcc.fc.up.pt/topas-virtual2

O meu primeiro contacto com os sistemas de avaliação foi realizado através do Mooshak.
Neste momento o Mooshak já se encontra na versão 2 (Mooshak2).
Para obter informações sobre os seus autores deixo o link.

Para praticar utilizando esta plataforma basta recorrer ao ToPAS Virtual.

#2 Timus Online Judge
URI: https://acm.timus.ru/

Contém mais de 2000 problemas e algumas provas.

#3 Online Judge
URI: https://onlinejudge.org/

Ainda não testei.


Vou continuar a acrescentar novas fontes assim que me forem chegando.

Verificar se a aplicação tem acesso à Base de Dados (C#-WPF-MySQL)

Este exemplo serve para verificar se uma aplicação, ao ser carregada, tem acesso à base de dados.

O acesso à base de dados é realizado com o utilizador root para ser tudo mais simples, mas naturalmente que este procedimento é altamente desaconselhável.

Se tudo correr bem a aplicação exibe este aspeto:

Caso ocorra um erro teremos:

Continue a ler “Verificar se a aplicação tem acesso à Base de Dados (C#-WPF-MySQL)”

Desativar o Windows Script Host no Windows

Problemas com as PEN drive infetadas, cheias de atalhos e pastas escondidas?
Desativar o WSH pode ser um opção muito útil em termos de segurança.
Para tal basta adicionar uma chave ao registo:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows Script Host\Settings]
"Enabled"=dword:00000000

Mais simples ainda será descarregar este “disable_wscript.reg” e executá-lo como administrador.

Outra opção será este pequeno utilitário que executa os scripts por nós:

  • disable_wscript.reg
  • limpapen.bat

Descarregar

Como inverter uma palavra (string) em C++?

Ler uma palavra e apresentar a sua inversa pode ser uma tarefa relativamente simples, desde que cada um decida não complicar.

Vamos ver um primeiro exemplo:

#include 
using namespace std;
int main()
{
    string s, nova="";
    cin >> s;
    for(int i=0; i<s.length(); i++)
        nova= s[i] + nova;
    cout << nova << endl;
    return 0;
}

Neste caso optamos por criar uma nova string contendo a palavra invertida. Simples e rápido!

Vamos agora considerar outro exemplo, partindo do princípio que desejamos fazer a troca das letras dentro da própria string. Por exemplo:

#include 
#include 
using namespace std;
int main()
{
    string s;
    cin >> s;
    int p = s.length() - 1;
    for(int i=0; i<s.length()/2; i++)
    {
        char t = s[i];
        s[i] = s[p];
        s[p] = t;
        p--;
    }
    cout << s << endl;
    return 0;
}

Ou até mesmo partindo do princípio que uma string não é mais do que um array de carateres, recorrendo à função reverse e tratando de tudo numa única linha:

#include 
#include 
using namespace std;
int main()
{
    string s;
    cin >> s;
    reverse(s.begin(),s.end());
    cout << s << endl;
    return 0;
}

Claro que tudo isto já foi mais do que dito All over the Internet!

Então porque razão publico?

Trata-se apenas de uma desabafo. Alguém me entregou programas muito complexos para tentar resolver esta tarefa tão simples.