Escolar Documentos
Profissional Documentos
Cultura Documentos
2. Semestre / 2009
INDICE
1. HISTÓRICO E PRIMEIROS EXEMPLOS....................................................................................................................... 3
1.1 Ambiente do Visual Studio .................................................................................................................................. 3
2. MÉTODOS DE PROGRAMA EM C#.............................................................................................................................. 6
2.1 Métodos da classe Math ....................................................................................................................................... 6
2.2 Utilizando Arrays (vetores).................................................................................................................................. 6
2.3 Passagem de Parâmetros (VETORES) por Valor e por Referência ..................................................................... 7
2.4 Método da Bolha (Ordenação/Classificação)....................................................................................................... 8
3. CONCEITOS DE POO...................................................................................................................................................... 9
3.1 Encapsulamento, Atributos e métodos, Ocultação da informação ....................................................................... 9
3.2 Modificadores de Acesso (public e private)....................................................................................................... 11
3.3 Construtores ....................................................................................................................................................... 11
3.4 Utilização de SET´s e GET´s / Propriedades ..................................................................................................... 13
3.5 Composição: referências a objetos como variáveis de instância de outras classes ............................................ 15
3.6 Usando a referência THIS .................................................................................................................................. 16
4. HERANÇA ...................................................................................................................................................................... 17
5. TRABALHO DE HERANÇA ......................................................................................................................................... 23
6. POLIMORFISMO ........................................................................................................................................................... 28
6.1 conversâo de objetos da classe derivada para objetos da classe base................................................................. 28
6.2 Classes Abstratas................................................................................................................................................ 29
6.3 Interface ............................................................................................................................................................. 32
7. EXCEÇÃO....................................................................................................................................................................... 34
7.1 DivideByZeroException .................................................................................................................................... 34
7.2 Criando uma classe separada para tratamento da Exceção................................................................................. 35
7.3 Testando estouros com os operadores CHECKED e UNCHECKED ................................................................ 36
8. CONTROLES/COMPONENTES VISUAIS SIMPLES.................................................................................................. 37
8.1 Label, Textbox e Button..................................................................................................................................... 37
8.2 Groupbox e Panel............................................................................................................................................... 37
8.3 Exercicio: Calculadora ...................................................................................................................................... 38
8.4. Controle Com Guias (TabControl).................................................................................................................... 40
8.5 Trabalhando Com STRINGS ............................................................................................................................. 41
8.6 Indice, tamanho e metodo CopyTo .................................................................................................................... 42
8.7 Comparando Strings........................................................................................................................................... 42
8.8 Localizando caracteres e substrings em strings................................................................................................. 43
8.9 Exercicio ........................................................................................................................................................... 44
8.10 Trabalhando Com Messagebox ....................................................................................................................... 45
9. JANELA MDI (Janela Interna) & MENU ...................................................................................................................... 48
9.1 Exercício com Menu e Janela MDI................................................................................................................... 50
10. LISTA ENCADEADA .................................................................................................................................................. 53
10.1 Implementando Lista Encadeada com Interface Gráfica.................................................................................. 53
10.2 Utilizando ArrayList (Coleção de Strings)....................................................................................................... 59
10.3 Exercício utilizando Coleção do C# (LIST)..................................................................................................... 61
11. LISTBOX, COMBOBOX, CHECKEDLISTBOX E LINKLABEL ............................................................................. 63
11.1 Exercicio ListBox & ComboBox ..................................................................................................................... 65
11.2 LinkLabel ......................................................................................................................................................... 65
12. CRIANDO DLL´s (Dynamic Link Library) .................................................................................................................. 66
12.1 Herança Visual ................................................................................................................................................. 66
12.2 Utilizando UserControl .................................................................................................................................... 67
13. BANCO DE DADOS MySQL....................................................................................................................................... 69
13.1 Instalação do BD LIVROS e do MySQL......................................................................................................... 69
13.2 Diagrama de Relacionamento de Entidades do banco de dados LIVROS ....................................................... 70
13.3 Exercícios DML: Fazendo consultas e operações no BD Livros .................................................................... 70
14. ADO .NET ..................................................................................................................................................................... 71
14.1 Primeira Aplicação ADO. NET (Controle Alunos) ......................................................................................... 73
14.2 Utilizando um ComboBox para visualizar a descrição da Chave Estrangeira ................................................. 75
14.3 Relatórios: Utilizando Crystal Report .............................................................................................................. 79
Programação Visual – C#
Profa. Liliane Jacon
3
Programação Visual – C#
Profa. Liliane Jacon
1o. exemplo) Imprimindo uma linha de texto
using System; // acrescentando biblioteca
class Primeiro
{
static void Main (string[] args)
{
Console.WriteLine(“Inicio da programação com C#”);
string pausa = Console.ReadLine();
} /* comentario
} */
4
Programação Visual – C#
Profa. Liliane Jacon
using System; // acrescentando biblioteca
class MediaClasse
{
static void Main (string[] args)
{
int media, somaTotal, contador, nota;
somaTotal = 0;
contador = 1;
contador = contador + 1;
}
media = somaTotal / 10;
Console. WriteLine( “\n\nMedia da classe = {0} “, media);
string pausa = Console.ReadLine();
} /* comentario
} */
Refaça o exercício, mas agora o número de alunos é indeterminado. (entra lido, sai lido)
Faça um algoritmo para calcular quantos alunos foram aprovados e qtos foram reprovados. O
número de alunos é indeterminado.
using System;
class AnaliseClasse
{
static void Main (string[] args)
{
int media, somaTotal, contAprovado, contReprovado, nota;
somaTotal = 0;
contAprovado = 0; contReprovado = 0;
Console.Write( “entre com a nota do aluno (-1 finaliza): “);
nota = Int32.Parse(Console.ReadLine());
5
Programação Visual – C#
Profa. Liliane Jacon
Console. WriteLine( “\n\nMedia da classe = {0} “, media);
Console. WriteLine( “\nAprovados = {0} e Reprovados = {1} “, contAprovado, contReprovado);
string pausa = Console.ReadLine();
} /* comentario
} */
using System;
public class TrabalhandoComVetores
{
static void Main (string[] args)
{
TrabalhandoComVetores r = new TrabalhandoComVetores();
r.geracao();
}
6
Programação Visual – C#
Profa. Liliane Jacon
// o metodo modifica o vetor que recebe. O original será modificado
public void ModificaVetor( int [] v )
{
for (int i = 0; i < v.Length; i++)
v[i] = v[i] * 2;
}
// o metodo modifica o valor passado para ele. Mas o original não será modificado
public void ModificaElemento ( int elem)
{
Console. WriteLine( “\nElemento antes de modificar {0}“, elem);
elem = elem * 2;
Console. WriteLine( “\nElemento após modificar {0} dentro do metodo“, elem);
}
} // fecha a classe TrabalhandoComVetores
using System;
public class PassagemParametros
{
static void Main (string[] args)
{
PassagemParametros r = new PassagemParametros ();
r.inicializa();
}
ModificaPorValor (primVetor);
Console.writeLine(“\nExibe primVetor depois do Método ModificaPorValor \n”);
for (int i = 0; i < primVetor.Length; i++)
Console. writeLine( “\nVetor [ {0}] = {1} “, i,primVetor[i]);
if (primVetor == primVetorCopia)
Console.writeLine(“\nA referência do vetor refere-se ao mesmo array\n”);
else
Console.writeLine(“\A referência aponta que refere-se a arrays diferentes\n”);
7
Programação Visual – C#
Profa. Liliane Jacon
Console. writeLine( “\nVetor [ {0}] = {1} “, i,segVetor[i]);
// o metodo modifica o valor passado para ele. Mas o original não será modificado
public void ModificaPorReferencia ( ref int[] v)
{
for (int i = 0; i < v.Length; i++)
v[i] = v[i] * 2;
// cria uma nova referência e a atribui ao array
v = new int [] { 11, 12, 13 };
} // ModificaPorReferencia
} // fecha a classe PassagemParametros
using System;
public class Ordenacao
{
static void Main (string[] args)
{
Ordenacao r = new Ordenacao ();
r.inicializa();
}
8
Programação Visual – C#
Profa. Liliane Jacon
Bolha(vetor);
3. CONCEITOS DE POO
9
Programação Visual – C#
Profa. Liliane Jacon
class VerificaTriangulo
{
int a, b, c;
public VerificaTriangulo(int va,int vb,int vc)
{
a = va; b = vb; c = vc;
}
public bool verificaFormacao()
{
if ((a < b + c)&&(b < a+c)&&(c < a + b))
return true;
else
return false;
}
public int verificaTipo()
{
if (verificaFormacao())
{
if ((a == b) && (b == c))
return 1; //equuilatero
else if ((a != b) && (b != c) && (c != a))
return 2; //escaleno
else return 3; //isosceles
}
else return -1; //não eh triangulo
}
public override string ToString()
{
string temp;
switch (verificaTipo())
{
case 1: temp = "Equilatero"; break;
case 2: temp = "Escaleno"; break;
case 3: temp = "Isosceles"; break;
case -1: temp = "Nao forma triangulo"; break;
}
return temp;
}
}
Interface (FORM) ligação com a classe VerificaTriangulo
namespace Triangulo
{
public partial class Form1 : Form
{
public Form1()
{ InitializeComponent(); }
10
Programação Visual – C#
Profa. Liliane Jacon
3.3 Construtores
Os constructores de uma classe podem ser sobrecarregados.
O C# chama o constructor apropriado fazendo corresponder o número, tipos e ordem dos
argumentos especificados na chamada do constructor com o número, tipos e ordem dos
parâmetros especificados em cada definição do constructor.
namespace Tempo
{
class ClasseTempo
{
private int hora; // de 0 a 23
private int minuto; // de 0 a 59
private int segundo; // de 0 a 59
11
Programação Visual – C#
Profa. Liliane Jacon
public ClasseTempo(ClasseTempo tempo)// constructor c/um tempo anterior
{
SetTempo(tempo.hora, tempo.minuto, tempo.segundo);
}
public void SetTempo(int valorHora, int valorMinuto,int valorSegundo)
{
hora = (valorHora >= 0 && valorHora < 24) ? valorHora : 0;
minuto = (valorMinuto >= 0 && valorMinuto < 60) ? valorMinuto : 0;
segundo = (valorSegundo >= 0 && valorSegundo < 60) ? valorSegundo : 0;
}
// converte a hora para uma string no formato de hora universal (24 horas)
public string ToUniversalString()
{
// formato D2 =formato de numero digital base 10 - de dois digitos
return String.Format("{0:D2}:{1:D2}:{2:D2}", hora, minuto, segundo);
}
public string ToAmericanoString()
{
return String.Format("{0}:{1:D2}:{2:D2} {3}",
((hora == 12 || hora == 0) ? 12 : hora % 12),
minuto, segundo, (hora < 12 ? "AM" : "PM"));
}
}
}
public Form1()
{ InitializeComponent(); }
12
Programação Visual – C#
Profa. Liliane Jacon
private void Form1_Load(object sender, EventArgs e)
{
tbHora.Clear();
tbMinuto.Clear();
tbSegundo.Clear();
}
13
Programação Visual – C#
Profa. Liliane Jacon
class VerificaTriangulo
{
int a, b, c;
public int A
{
get { return a; }
set { a = (value >=0)? value : 1; }
}
public int B
{
get { return b; }
set { b = (value >=0)? value : 1; }
}
public int C
{
get { return c; }
set { c = (value >=0)? value : 1; }
}
public VerificaTriangulo(int va,int vb,int vc)
{
A = va; B = vb; C = vc;
}
public bool verificaFormacao()
{
if ((A < B + C) && (B < A + C) && (C < A + B))
return true;
else
return false;
}
public int verificaTipo()
{
if (verificaFormacao())
{
if ((A == B) && (B == C))
return 1; //equuilatero
else if ((A != B) && (B != C) && (C != A))
return 2; //escaleno
else return 3; //isosceles
}
else return -1; //não eh triangulo
}
public override string ToString()
{
string temp = "";
switch (verificaTipo())
{
case 1: temp = "Equilatero"; break;
case 2: temp = "Escaleno"; break;
case 3: temp = "Isosceles"; break;
case -1: temp = "Nao forma triangulo"; break;
}
return temp;
}
}
14
Programação Visual – C#
Profa. Liliane Jacon
3.5 Composição: referências a objetos como variáveis de instância de outras
classes
Hierarquia de Agregação/decomposição
Agregação - Um objeto pode ser visto como um agregado de outros objetos (suas partes). Por
exemplo, numa casa típica, pode-se visualizar várias objetos que a compõem, a exemplo do
diagrama que se segue:
Este diagrama mostra que um objeto casa é composto por vários outros objetos. A relação
entre uma casa e suas partes componentes pode ser lida como:
e apresenta uma visão todo -> parte, ou seja, do objeto mais complexo para as partes que o
compõe. Uma mudança rápida de perspectiva possibilita um outro tipo de afirmações:
- o endereço <é parte da> casa
- os móveis <são parte da> casa
15
Programação Visual – C#
Profa. Liliane Jacon
}// constructor Date
Classe Empregado
using System;
using System;
16
Programação Visual – C#
Profa. Liliane Jacon
public string ConstroiString()
{
return "this.ToIniciaString(): " + this.ToIniciaString() +
"\n sem ToIniciaString(): " + ToIniciaString();
}
class TestaTHIS
{
static void Main(string[] args)
{
Tempo4 tempo = new Tempo4(12,30,19);
MessageBox.Show(tempo.ConstroiString(),
"Demosntrando o \"this\" referencia");
}
}
4. HERANÇA
A herança é uma forma de reutilização de software em que as classes são criadas pela
absorção dos dados e comportamentos de uma classe já existente e aprimorando-as com novos
recursos.
Ao criar uma classe, em vez de escrever variáveis de instancia e métodos completamente
novos, o programador pode indicar que a nova classe deve herdar as variáveis de classe,
propriedades e métodos de outra classe. A classe anteriormente definida é chamada classe base ou
super classe, e a nova classe é referida como classe derivada.
Uma classe derivada, na qual variaveis de instancia, propriedades, e métodos exclusivos são
normalmente adicionados, é frequentemente maior do que a sua classe base.
Fazemos uma distinção entre o relacionamento “é-um” e o relacionamento “tem-um”. É-UM
representa herança . Em um relacionamento É UM , um objeto de uma classe derivada também
pode ser tratado como um objeto de sua classe base. Por exemplo, um carro é um veículo. Em
contraste, “tem-um” significa composição. No relacionamento tem-um, um objeto da classe
contém uma ou mais referências de objeto como membros. Por exemplo, um carro tem um
volante.
Um problema de herança é que uma classe derivada pode herdar propriedades e métodos
que não precisa ou que não deve ter. É responsabilidade do projetista da classe garantir que os
recursos fornecidos por uma classe sejam apropriados para as futuras classes derivadas. Mesmo
quando a propriedade ou método de uma classe base é apropriada para uma classe derivada, essa
classe derivada frequentemente exige que a propriedade ou método realize sua tarefa de maneira
especifica para a classe derivada. Em tais casos, a propriedade ou o método da classe base pode
ser sobreposto (overriden, redefinida) na classe derivada, com uma implementação apropriada.
17
Programação Visual – C#
Profa. Liliane Jacon
Ponto
Circulo
Cilindro
Circulo área= Π r 2
using System;
// a definição da classe Ponto herda impliciatamente de Object
public class Ponto
{
private int x, y;
public Ponto()
{ // a chamada implicita ao constructor de Object ocorre aqui
}
public int X
{
get { return x; }
set { x = value;}
}
public int Y
{
get { return y; }
set { y = value; }
}
using System;
18
Programação Visual – C#
Profa. Liliane Jacon
{
private double raio;
public circulo()
{ // chamada implicita ao contrsuctor de Ponto ocorre aqui
}
using System;
public Cilindro()
{
}
19
Programação Visual – C#
Profa. Liliane Jacon
}
using System;
using System.Windows.Forms;
p.X = 10;
p.Y = 10;
saida += "\n\nA nova localização do ponto = " + p;
// note aqui a chamada ao ToString
MessageBox.Show(saida, "demonstração da classe ponto");
*/
//====================================================================
/*circulo c = new circulo(37,43,2.5);
string saida = "Coordenada X = " + c.X + "\n" + "Coordenada Y = " + c.Y+
"\n Raio = "+c.Raio;
c.X = 2;
c.Y = 2;
c.Raio = 4.25;
20
Programação Visual – C#
Profa. Liliane Jacon
cil.Altura = 10;
}
}
Destrutores
Não podemos determinar exatamente quando a chamada de um destrutor ocorrerá , pois não
podemos determinar com precisão quando a coleta de lixo ocorrerá. Entretanto,definindo um
destructor , podemos especificar um código para ser executado antes que o coletor de lixo remova
um objeto da memória.
using System;
// a definição da classe Ponto herda impliciatamente de Object
public class Ponto
{
private int x, y;
public Ponto()
{ // a chamada implicita ao constructor de Object ocorre aqui
}
~Ponto() // destrutor
{
Console.WriteLine("\n Ponto destruidfo {0}", this);
}
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
21
Programação Visual – C#
Profa. Liliane Jacon
}
}
public Circulo()
{ // chamada implicita ao contrsuctor de Ponto ocorre aqui
}
~Circulo()
{
Console.WriteLine("\n Destruindo objeto circulo {0}", this);
}
public virtual double Area()//essa palavra chave permite que as classes derivadas
//sobreponham um metodo da classe base
{
return Math.PI * Math.Pow(raio, 2);
}
Console.WriteLine(saida);
22
Programação Visual – C#
Profa. Liliane Jacon
c1= null;
c2 = null;
System.GC.Collect();
5. TRABALHO DE HERANÇA
Observações:
- o método CalculaSalário tem que ser refeito a
cada especialização
Empregado - o método toString tem que ser refeito a cada
especialização, mas deve-ser aproveitado a
implementação da classe Base imediata
Matrícula (acima)
Nome - novos métodos podem ser acrescentados ao
SalarioBruto projeto, conforme a necessidade
SalarioLiquido - Utilizar variáveis de instância com
modificadores PRIVATE somente.
DataAdmissão - Cada classe tem suas propriedades
Técnico de Explosivos
Adicional Periculosidade
23
Programação Visual – C#
Profa. Liliane Jacon
CLASSE DATAS
using System;
public class datas
{
private int dia, mes, ano;
public datas()
{
dia = 0; mes = 0; ano = 0;
}
24
Programação Visual – C#
Profa. Liliane Jacon
CLASSE EMPREGADO
using System;
// metodos
public empregado()
{
nome = "";
matricula = ""; salarioLiquido = 0.0; salarioBruto = 0.0;
dataAdm = new datas();
}
25
Programação Visual – C#
Profa. Liliane Jacon
public override string ToString()
{
string temp = "\n\nMatricula= " + Matricula + " Nome= " + Nome + "
Salario Bruto= " + SalarioBruto;
return (temp);
}
// metodos
public operadorBritadeira(): base()
{
Insalubridade=0;
}
// metodos
26
Programação Visual – C#
Profa. Liliane Jacon
public tecnicoExplosivo(): base ()
{
Periculosidade=0;
}
27
Programação Visual – C#
Profa. Liliane Jacon
6. POLIMORFISMO
O polimorfismo nos permite escrever programas que tratam uma ampla variedade de classes
relacionadas de uma maneira genérica e facilita a adição de novas classes e recursos em um
sistema.
Os programas podem processar objetos de todas as classes genericamente em uma hierarquia de
classes, como objetos de uma classe base comum. Alem disso, novas classes podem ser
adicionadas com pouca ou nenhuma modificação nas partes genéricas do programa.
Polimorfismo ocorre quando uma subclasse tem um método com a mesma
assinatura da superclasse (classe base), ou seja, contêm a mesma assinatura.
Assinatura significa número, tipo e ordem dos parâmetros. Polimorfismo também é
definido da seguinte forma: Trata-se da criação de uma família de funções (métodos)
que compartilham do mesmo nome, mas cada uma tem código independente.
public Ponto()
{
}
public Ponto(int xValor, int yValor)
{
X = xValor;
Y = yValor;
}
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
public override string ToString()
{
return "["+X+", "+Y+"]";
}
}
using System;
class Circulo: Ponto
{
private double raio;
public Circulo()
{
}
public Circulo(int xValor, int yValor, double r)
: base(xValor, yValor)
{
raio = r;
}
public double Raio
{
get { return raio; }
set { raio = ((value > 0) ? value : 1); }
}
28
Programação Visual – C#
Profa. Liliane Jacon
public double Diametro()
{
return raio * 2;
}
public double circunferencia()
{
return Math.PI * Diametro();
}
public virtual double Area()
{
return Math.PI * Math.Pow(raio, 2);
}
public override string ToString()
{
return "Centro= "+base.ToString()+"; Raio= "+Raio;
}
}
using System;
using System.Windows.Forms;
class testaConversao
{
static void Main(string[] args)
{
Ponto p = new Ponto(30, 50);
Circulo c = new Circulo(120, 89, 2.7);
string saida = "Ponto p " + p.ToString() +
"\nCirculo c " + c.ToString();
saida += "\nPonto p2 (que era circulo) volta a origem circulo c2 " + c2.ToString();
if (p is Circulo)
{
c2 = (Circulo)p;
saida += "\n\nCast realizado com sucesso";
}
else saida += "\n\nPonto p não é um circulo";
Existem casos em que é interessante definir classes para as quais o programador nunca pretende
instanciar quaisquer objetos. Tais classes são chamadas classes abstratas. Essas classes não podem
ser usadas para instanciar objetos, pois as classes abastratas são incompletas. As classes derivadas
devem definir as partes faltantes. As classes abstratas contem um ou mais métodos abstratos ou
29
Programação Visual – C#
Profa. Liliane Jacon
propriedades abstratas, que são métodos e propriedades que não fornecem implementação. As
classes a partir das quais objetos podem ser instanciados são chamados de classes concretas.
using System;
public Ponto()
{
}
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
30
Programação Visual – C#
Profa. Liliane Jacon
}
public class Circulo: Ponto
{
private double raio;
public Circulo()
{
}
public Cilindro()
{
}
31
Programação Visual – C#
Profa. Liliane Jacon
public double Altura
{
get { return altura; }
set { altura = ((value >= 0) ? value : 0); }
}
vetor[0] = p;
vetor[1] = cir;
vetor[2] = cil;
string saida="";
}
}
6.3 Interface
32
Programação Visual – C#
Profa. Liliane Jacon
Interfaces especificam conjuntos de serviços PUBLIC (isto é, métodos e propriedades) que as
classes DEVEM implementar. Uma interface é usada quando não existe nenhuma implementação
padrão para herdar (nenhuma variável de instancia e nenhuma implementação de método).
Uma classe abstrata é usada para fornecer DADOS e serviços (MÉTODOS e PROPRIEDADES).
Uma interface é usada para fornecer serviços SEM IMPLEMENTAÇÃO (Métodos e
Propriedades) que “reúnem” objetos díspares, que se relacionam entre si apenas por meio desta
interface.
using System;
public class Arvore: InterfaceIdade
{
private int aneis;// numero de
//aneis no tronco da arvore
public Arvore(int anoPlantado)
{
aneis = DateTime.Now.Year - anoPlantado;
}
public void AddAneis()
{
aneis++;
}
public int Idade
{
get { return aneis; }
}
public string Nome
{
get { return "Arvore"; }
}
}
public class Pessoa : InterfaceIdade
{
private string primNome;
private string ultNome;
private int anoNasc;
33
Programação Visual – C#
Profa. Liliane Jacon
public string Nome
{
get { return primNome + " " + ultNome; }
}
}
using System;
using System.Windows.Forms;
vetor[0] = tree;
vetor[1] = p;
string saida = tree + ": " + tree.Nome + "\nIdade = " + tree.Idade + "\n\n";
7. EXCEÇÃO
Uma exceção é uma indicação de um problema que ocorre durante a execução de um programa. O
nome “exceção” vem do fato de que, embora um problema possa ocorrer, ele ocorre raramente. A
idéia é que programadores escrevam programas mais robustos, claros e mais tolerantes a falhas.
7.1 DivideByZeroException
using System;
using System.Windows.Forms;
34
Programação Visual – C#
Profa. Liliane Jacon
catch (FormatException) // entrada (formato) invalido
{
MessageBox.Show("vc deve entrar com 2 numeros inteiros",
"formato invalido de entrada",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (DivideByZeroException erroDivisao)// tentou dividir por zero
{
MessageBox.Show(erroDivisao.Message,
"tentou dividir por zero",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
using System;
using System.Windows.Forms;
public class raizQuadrada
{
static void Main(string[] args)
{
try
{
Console.WriteLine("\n Entre com um numero real: ");
double numero = Double.Parse(Console.ReadLine());
35
Programação Visual – C#
Profa. Liliane Jacon
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}// fim do main
}// fim da classe
try
{
Console.WriteLine("\nSoma de inteiros ");
soma = checked(numero1 + numero2);
}
catch (OverflowException overExcecao)
{
Console.WriteLine(overExcecao.ToString());
}
Console.WriteLine("\nSoma depois de checar a operação {0}",soma);
Console.WriteLine("\nSoma de inteiros não checados ");
soma = unchecked(numero1+numero2);
Console.WriteLine("soma depois de operação não checada {0}",soma);
string pausa = Console.ReadLine();
}// main
}// Overflow
36
Programação Visual – C#
Profa. Liliane Jacon
• O tratamento de exceções permite que o programador remova o código de tratamento
de erros da “linha principal” da execução do programa. Isso melhora a clareza do
programa e também sua capacidade de modificação.
TextBox – propriedades:
Name: tB1
PasswordChar: *
Label – propriedades:
Name: l1
BorderStyle: Fixed3D
Autosize: false
Text: vazio
Button – propriedades:
Name: b1
Text: Mostrar Texto
GroupBox – propriedades:
Name gB1
Text: sexo
Panel – propriedades:
AutoScroll: padrão é false
(se true aparece as barras de rolagem)
BorderStyle: borda (padrão é none) outras opções Fixed3D e FixedSingle
RadioButton – propriedades: Label – propriedades:
Name (masculino/femino) Name: l1 e l2
Text (masculino/feminino) Text: (vazio)
Checked: true para masculino
37
Programação Visual – C#
Profa. Liliane Jacon
private void bsoma_Click(object sender, EventArgs e)
{ l2.Text = "botão soma"; }
38
Programação Visual – C#
Profa. Liliane Jacon
NumAtual = NumAtual+'6';
else if (sender==b7)
NumAtual = NumAtual+'7';
else if (sender==b8)
NumAtual = NumAtual+'8';
else if (sender==b9)
NumAtual = NumAtual+'9'; faça para os demais
else NumAtual = NumAtual+'0'; botões b1 até b9
visor.Text = NumAtual;
}
39
Programação Visual – C#
Profa. Liliane Jacon
private void bsoma_Click(object sender, EventArgs e)
{
operacao_Click(sender, e);
}
Exercicio
40
Programação Visual – C#
Profa. Liliane Jacon
Dentro de cada TabPage, coloque RadioButton´s (mude Name e Text)
Form1.cs
public partial class Form1 : Form
{
public Form1()
{ InitializeComponent(); }
41
Programação Visual – C#
Profa. Liliane Jacon
42
Programação Visual – C#
Profa. Liliane Jacon
"\nstr4 = \"" + str4 + "\"\n\n";
//testa CompareTo
saida += "\n CompareTo se (=0 são iguais) \n " +
"(=-1 str que chama < que a do argumento) \n" +
"(= 1 str que chama > que a do argumento) \n";
saida += "\nstr1.CompareTo( str2) " +
str1.CompareTo(str2) + "\n" +
"str2.CompareTo(str1) " +
str2.CompareTo(str1) + "\n" +
"str1.CompareTo(str1) " +
str1.CompareTo(str1) + "\n" +
"str3.CompareTo(str4) " +
str3.CompareTo(str4) + "\n" +
"str4.CompareTo(str3) " +
str4.CompareTo(str3) + "\n\n";
43
Programação Visual – C#
Profa. Liliane Jacon
//5= numero de caracteres a serem procurados
8.9 Exercicio
44
Programação Visual – C#
Profa. Liliane Jacon
8.10 Trabalhando Com Messagebox
Form1.cs {Design]
Form1.Designer.cs
………#endregion
Form1.cs (código)
using System;
using System.Collections.Generic; using System.ComponentModel;
using System.Data; using System.Drawing; using System.Text;
using System.Windows.Forms;
namespace teste_MessageBox_com_RadioButto
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
45
Programação Visual – C#
Profa. Liliane Jacon
private void rbOK_CheckedChanged(object sender, EventArgs e) // esses vc vai clicar e ele entra automatica/e
{
tipoBotao_CheckedChanged(sender, e);
}
private void tipoIcone_CheckedChanged(object sender, EventArgs e) // esse vc vai ter que digitar
{
if (sender == rbErro)
icone = MessageBoxIcon.Error;
else if (sender == rbInfo)
icone = MessageBoxIcon.Information;
else if (sender == rbExclama)
icone = MessageBoxIcon.Exclamation;
else
icone = MessageBoxIcon.Question;
}
46
Programação Visual – C#
Profa. Liliane Jacon
tipoIcone_CheckedChanged(sender, e);
}
47
Programação Visual – C#
Profa. Liliane Jacon
9. JANELA MDI (Janela Interna) & MENU
opção ARQUIVO:
Nova e Exit
Janela 1,
Janela 2
Janela 3
Opção FORMATO:
Cascata,
TileHorizontal
TileVertical
Mudar no Form1 propriedade
IsMDIContainer = true
Copiar 3 arquivos GIF dentro da pasta PROJECTS – (nomeDoProjeto) – Bin\Debug
48
Programação Visual – C#
Profa. Liliane Jacon
{
this.LayoutMdi(MdiLayout.TileVertical);
}
}
No FILHO.cs
using System.IO; //não esqueça de acrescentar esta linha no form Filho
public partial class Filho : Form
{
public Filho(string titulo, string filename)
{
InitializeComponent();
Text = titulo;
pBox.Image = Image.FromFile(Directory.GetCurrentDirectory() + filename);
}
}
49
Programação Visual – C#
Profa. Liliane Jacon
9.1 Exercício com Menu e Janela MDI
50
Programação Visual – C#
Profa. Liliane Jacon
Observação:
No form PAI , ao clicar numa opção do Menu, acrescentei mais um parâmetro:
51
Programação Visual – C#
Profa. Liliane Jacon
Fiz um método separado para a busca binária (que é chamado ao clicar nos botões)
private int BuscaBin(int num)
{
int inicio, meio, fim, posicao;
inicio = 0;
fim = vetor.Length - 1;
meio = (inicio + fim) / 2;
while ((inicio < fim) && (vetor[meio] != num))
{
if (num > vetor[meio])
inicio = meio + 1;
else
fim = meio;
meio = (inicio + fim) / 2;
}
if (num > vetor[meio])
posicao = (meio + 1);
else posicao = (meio);
return posicao;
}
Já a rotina para Ordenar (Bolha) é chamada dentro dos eventos dos botões:
private void bOrdena_Click(object sender, EventArgs e)
{
int i,aux, tam;
tam = vetor.Length - 1;
while (tam > 0)
{
for (i=0 ; i < tam; i++)
if (vetor[i] > vetor[i+1])
{
aux = vetor[i];
vetor[i] = vetor[i+1];
vetor[i+1] = aux;
switch (i)
{
case 0: bO0.Text = vetor[i].ToString();
bO1.Text = vetor[i+1].ToString();
bB0.Text = vetor[i].ToString();
bB1.Text = vetor[i + 1].ToString();
break;
case 1: bO1.Text = vetor[i].ToString();
bO2.Text = vetor[i+1].ToString();
bB1.Text = vetor[i].ToString();
bB2.Text = vetor[i + 1].ToString();
break;
case 2: bO2.Text = vetor[i].ToString();
bO3.Text = vetor[i+1].ToString();
bB2.Text = vetor[i].ToString(); bB3.Text = vetor[i + 1].ToString();
break;
case 3: bO3.Text = vetor[i].ToString();
bO4.Text = vetor[i+1].ToString();
bB3.Text = vetor[i].ToString(); bB4.Text = vetor[i + 1].ToString();
break;
}//switch
}//if
tam--;
}//while
}
52
Programação Visual – C#
Profa. Liliane Jacon
10. LISTA ENCADEADA
using System;
using System.Collections.Generic;
using System.Text;
//ListaEncBiblioteca.cs
namespace ListaEncBiblioteca
{
class No
{
private object dado;
private No prox;
53
Programação Visual – C#
Profa. Liliane Jacon
public No Prox
{
get { return prox; }
set { prox = value; }
}
public Lista()
: this("Lista Teste")
{
}
54
Programação Visual – C#
Profa. Liliane Jacon
lock (this)
{
if (Vazia())
{
//throw new ExcecaoListaVazia(nomeDaLista);
return null;
}
object item = primeiro.Dado;
if (primeiro == ultimo)
primeiro = ultimo = null;
else
primeiro = primeiro.Prox;
return item;
}
}
55
Programação Visual – C#
Profa. Liliane Jacon
while (atual != null)
{
temp += atual.Dado + ", ";
atual = atual.Prox;
}
temp += "\n";
return temp;
}//lock
}//ToString
using System;
using System.Windows.Forms;
using ListaEncBiblioteca;
namespace Lista_Enc_com_GUI
{
public partial class Form1 : Form
{
bool booleano;
char[] caracter=new char[1];
int inteiro;
double real;
string texto, frase;
Lista l;
public Form1()
{
InitializeComponent();
}
56
Programação Visual – C#
Profa. Liliane Jacon
if ((texto.IndexOf('T')==0)||(texto.IndexOf('t')==0))
booleano = true;
else
booleano =false;
lRemove.Text = booleano.ToString();
}
else if (rbChar.Checked)
{
if (texto.Length > 0)
{
string temp = texto.Substring(0,1);
lRemove.Text = temp.ToString();
caracter[0] = temp[0];
}
else caracter[0] = 'x';
}
else if (rbInt.Checked)
{
inteiro = Int32.Parse(texto);
lRemove.Text =inteiro.ToString();
}
else if (rbReal.Checked)
{
real = Double.Parse(texto);
lRemove.Text = String.Format("{0:F3}",real);
}
else if (rbString.Checked)
frase = texto;
}//try
catch (FormatException erro)
{
string temp = "Presta atenção: " + erro;
MessageBox.Show(temp, "formato invalido",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
57
Programação Visual – C#
Profa. Liliane Jacon
lUltimo.Text = l.exibeUlt();
lRemove.Text = "";
}
58
Programação Visual – C#
Profa. Liliane Jacon
private void bDelFundo_Click(object sender, EventArgs e)
{
object temp = l.RemoveDoFundo();
if (temp != null)
lRemove.Text = "Removeu o " + temp.ToString();
lLista.Text = l.ToString();
lPrimeiro.Text = l.exibePrim().ToString();
lUltimo.Text = l.exibeUlt().ToString();
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Collections;
using System.Windows.Forms;
namespace TestaArrayList
{
public partial class Form1 : Form
{
private ArrayList arraylist = new ArrayList(1);
public Form1()
{ InitializeComponent(); }
59
Programação Visual – C#
Profa. Liliane Jacon
private void bAdd_Click(object sender, EventArgs e)
{
arraylist.Add(tbEntrada.Text);
status.Text = "Adicionado no final: " + tbEntrada.Text;
tbEntrada.Clear();
}
60
Programação Visual – C#
Profa. Liliane Jacon
while (enumera.MoveNext())
tempor.Append(enumera.Current+" ");
status.Text=tempor.ToString();
}
}
}
using System.Collections;
namespace ArrayList_de_Contas
{
public partial class Form1 : Form
{
List <Registro> arraylist = new List <Registro>();
IEnumerator enumeracao;
public Form1()
{
InitializeComponent();
enumeracao = arraylist.GetEnumerator();
}
61
Programação Visual – C#
Profa. Liliane Jacon
public void ClearTextBoxes()
{
tbConta.Text = "";
tbPrim.Text = "";
tbSobre.Text = "";
tbSaldo.Text = "";
}
..............// fazer as demais afuncionalidades para cada botão da Interface
class Registro
{
public int conta;
public string primNome;
public string ultNome;
public double saldo;
public Registro()
: this(0, "", "", 0.0)
{
}
62
Programação Visual – C#
Profa. Liliane Jacon
LISTBOX
PROPRIEDADES Descrição
Items Relaciona a coleção de itens dentro da ListBox
SelectedIndex Retorna o índice do item atualmente selecionado. Se o usuário selecionar
múltiplos itens, esse método retornara arbitrariamente um dos índices
selecionados. Se nenhum tem tiver sido selecionado, o método retornará -
1
SelectedIndices Retorna uma coleção dos índices de todos os itens atualmente
selecionados
SelectedItem Retorna uma referência para o item atualmente selecionado (se múltiplos
itens forem selecionados, ela retornará o item com o menor numero de
índice).
SelectedItems Retorna uma coleção dos itens atualmente selecionados
Sorted Índice se os itens aparecem em ordem alfabética. True causa disposição
em ordem alfabética. O padrão é false
METODO
GetSelected Pega um índice e retorna True, caso o item corespondente esteja
selecionado
Evento Comum
SelectedIndexChanged Gerado quando o índice selecionado muda. É o padrão quando o controle
recebe um clique duplo do projetista
COMBOBOX
PROPRIEDADES Descrição
Items Relaciona a coleção de itens dentro do ComboBox
MaxDropDownItems Especifica o numero maximo de itens (entre 1 e 100)que podem aparecer
na lista suspensa. Se ultrapassar, aparece uma barra de rolagem.
SelectedIndex Retorna o índice do item atualmente selecionado. Se não houver nenhum
item atualmente, -1 será retornado
Sorted Especifica se itens em uma lista estão em ordem alfabética (true/false)
Evento Comum
SelectedIndexChanged Gerado quando o índice selecionado muda (como qdo uma caixa de
seleção tiver sido marcada ou desmarcada). É o padrão quando recebe um
clique duplo.
63
Programação Visual – C#
Profa. Liliane Jacon
public partial class Form1 : Form
{
string[] vetor = { "solteiro", "casado", "viúvo", "desquitado", "separado",
"divorciado", "outros" };
public Form1()
{
InitializeComponent();
}
if (lBox.Items.Contains(cLB.SelectedItem))
lBox.Items.Remove(item);
else
lBox.Items.Add(item);
}
}
CHECKEDLISTBOXES
PROPRIEDADES Descrição
CheckedItems Relaciona a coleção de itens que serão marcados. Isso é diferente dos itens
selecionados que serão destacados (mas não necessariamente marcados).
Nota: pode haver no máximo um item selecionado em dado momento.
CheckedIndices Retorna índices para os itens que estão marcados. Não é o mesmo que os
índices selecionados
SelectionMode Determina quantos itens podem ser marcados. Os únicos valores possíveis
são ONE (permite que marcações múltiplas sejam feitas) ou NONE (não
permite que nenhuma marcação seja feita)
SelectedItem Retorna o item selecionado
Evento
ItemCheck Gerado quando um item é marcado ou desmarcado.
Método Comum
GetItemChecked Recebe um índice e retorna TRUE se o item correspondente estiver
marcado
64
Programação Visual – C#
Profa. Liliane Jacon
11.1 Exercicio ListBox & ComboBox
11.2 LinkLabel
65
Programação Visual – C#
Profa. Liliane Jacon
12. CRIANDO DLL´s (Dynamic Link Library)
1 button – propriedades
Name bUnir
Text Informações
Salve o Projeto.
66
Programação Visual – C#
Profa. Liliane Jacon
Repare que ele não consegue mais executar sozinho pois é uma DLL
Atenção:
Verifique que foi criada uma DLL, dentro do \bin\Debug com o nome de BaseUnir.DLL
Acrescente 3 novos botões na janela, e coloque MESSAGEBOX em cada um dos botões (evento
CLICK do botão).
67
Programação Visual – C#
Profa. Liliane Jacon
2. Adicione controles e funcionalidades no UserControl1.cs
Isto exibe nosso controle vazio UserControl1.cs como um retângulo cinza.
68
Programação Visual – C#
Profa. Liliane Jacon
9. No próprio ToolBox, clique com o mouse do lado direito sobre o UserControl1, e renomeie
para Relógio.
Observação: as classes de
controles (UserControl) não tem
um método Main – elas não
podem ser executadas sozinhas.
Para testar sua funcionalidade,
adicione-as em um aplicativo
Windows de exemplo e
execute-as lá.
69
Programação Visual – C#
Profa. Liliane Jacon
13.2 Diagrama de Relacionamento de Entidades do banco de dados LIVROS
TITULOS
AUTORES AUTORISBN * isbn
* AutorID * AutorID Titulo
primNome * isbn NumeroEdicao
ultNome Ano
editoraID
Imagem
EDITORAS Preco
* editoraID
NomeEditora
i. Exibir lista de autores acompanhados pelos ISBN´s de livros escritos por cada autor:
SELECT autores.ultNome, autores.primNome, titulos.ISBN, titulos.titulo
FROM autores, titulos, autorISBN
WHERE autorISBN.autorID=autores.autorID AND autorISBN.isbn=titulos.ISBN
j. Insira uma linha na tabela autores:
INSERT INTO autores ( primNome, ultNome )
VALUES (‘Vilma’, ‘Pereira’);
70
Programação Visual – C#
Profa. Liliane Jacon
// note que não é preciso especificar a coluna autorID porque ela é uma coluna auto-
incrementada
k. Atualiza uma linha na tabela autores, a instrução indica que ultNome receberá o valor
Carvalho para a linha em que ultNome é igual a Pereira e primNome é igual a Vilma.
UPDATE autores SET ultNome = ‘Carvalho’
WHERE ultNome = ‘Pereira’ and primNome = ‘Vilma’;
l. Excluir a linha para Vilma Carvalho na tabela autores:
DELETE FROM autores
WHERE ultNome = ‘Carvalho’ and primNome = ‘Vilma’;
71
Programação Visual – C#
Profa. Liliane Jacon
MYSQLCONNECTION = representa a conexão com uma fonte/base de dados. Principais métodos são
Open e Close. Ex:
MySqlConnection conDB = new MySqlConnection (
“database=Filmes; Data Source = localhost; User Id=root; Password=123”);
MYSQLDATAADAPTER = se conecta a uma fonte de dados (banco de dados) por meio de uma
instância da classe MySqlConnection e pode preencher um objeto DataTable com dados dessa fonte de
dados. Ou seja, o DataAdapter é um elo de ligação (intermediário) entre as informações que estão no banco
de dados com a aplicação em C#. Exemplo:
MySqlConnection conDB = new MySqlConnection (
“database=Filmes; Data Source = localhost; User Id=root; Password=123”);
MySqlDataAdapter da = new MySqlDataAdapter (“SELECT * FROM fitas”,conDB);
DataAdapter
DataBase
SelectCommand
InsertCommand
UpdateCommand
DeleteCommand
DataSet
TableMappings
MYSQLCOMMAND = representa um comando SQL arbitrário, a ser executado em uma fonte de dados.
Ou seja, é usada para executar consultas. Um programa pode usar instâncias da classe MySqlCommand
para manipular uma fonte de dados por meio de um objeto MySqlConnection. Atenção:
• Usar MySqlCommandBuilder quando utilizar o comando SQL SELECT.
• Usar MySqlCommand qdo utilizar os comandos SQL: INSERT, UPDATE e DELETE
Principais métodos:
• ExecuteReader: executa e retorna um DataReader, ou seja, retorna um cursor apontando para o
início dos dados (usado com o comando SQL SELECT) Representa um conjunto de resultado SQL
• ExecuteNonQuery: executa e não retorna nada (usado com os comandos SQL INSERT, UPDATE
e DELETE)
• ExecuteScalar: executa e retorna um “escalar” (um valor simples como string ou numero)
Exemplo:
72
Programação Visual – C#
Profa. Liliane Jacon
14.1 Primeira Aplicação ADO. NET (Controle Alunos)
(não se esqueça de fazer ADD References, no Solution Explorer, do MySql.Data)
DataBase CURSO
CADALUNO
Int *ID (automático)
varchar(45) matricula
varchar(255) nome
varchar(45) curso
int ano
date dataNasc
73
Programação Visual – C#
Profa. Liliane Jacon
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace cadastroAlunos
{
public partial class Form1 : Form
{
private DataTable data; // armazena resultado da consulta do comando SQL ioresult do Java
private MySqlDataAdapter da; // onde tem a string com o comando SQL (por ex.Select)
private MySqlCommandBuilder cb; // para conseguir executar no BD
public Form1()
{
InitializeComponent();
}
String strInserir =
"INSERT INTO cadAluno VALUES (NULL,"+"'"+strMat+"'"+
","+"'"+strNome+"'"+
","+"'"+strCurso+"'"+
","+"'"+strIngresso+"'"+
","+"'"+strNasc+"'"+");";
74
Programação Visual – C#
Profa. Liliane Jacon
}
private void btnMat_Click(object sender, EventArgs e)
{
String txtMat = this.txtConsulta.Text;
75
Programação Visual – C#
Profa. Liliane Jacon
DataBase = FILMES
FITAS
varchar(5) * codFita
varchar(50) titulo PRODUTORA
GENERO int codGenero
int codProdutora int codProdutora
int codGenero varchar(20) nomeProdutora
varchar(20) descrição varchar(10) dataCompra
real preco int anoProducao
int tempoDuracao
using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace CadastroFilmes
{
public partial class cadFilmes : Form
{
private DataTable datatableG, datatableP;
private MySqlDataAdapter daG, daP;
private MySqlCommandBuilder cbG, cbP;
private MySqlConnection conDB;
private DataSet filmesDataSet1;
76
Programação Visual – C#
Profa. Liliane Jacon
string strInserir =
"INSERT INTO fitas VALUES (" + "'" + strCodFita + "'" +
"," + "'" + strTitulo + "'" +
"," + cdGenero +
"," + cdProdutora +
"," + "'" + strDataCompra + "'" +
"," + iProducao +
"," + iDuracao + ");";
MySqlCommand cmdDB = new MySqlCommand(strInserir, conDB);
conDB.Open();
cmdDB.ExecuteNonQuery();
this.txtCodFita.Text = "";
this.txtTitulo.Text = "";
this.txtDia.Text = "";
this.txtMes.Text = "";
this.txtAno.Text = "";
this.txtProducao.Text = "";
this.txtDuracao.Text = "";
cbProdutora.SelectedIndex = -1;
cbGenero.SelectedIndex = -1;
this.txtCodFita.Focus();
}
77
Programação Visual – C#
Profa. Liliane Jacon
//carrega comboBox do Produtora
string strCBProdutora;
strCBProdutora= "SELECT codprodutora,nomeprodutora FROM produtora ";
strCBProdutora += "ORDER BY nomeprodutora ";
datatableP = new DataTable();
daP = new MySqlDataAdapter(strCBProdutora, conDB);
daP.Fill(filmesDataSet1,"produtora");
cbP = new MySqlCommandBuilder(daP);
daP.Fill(datatableP);
cbProdutora.DataSource = datatableP;
cbProdutora.DisplayMember = datatableP.Columns["nomeprodutora"].ColumnName;
cbProdutora.ValueMember = datatableP.Columns["codprodutora"].ColumnName;
cbProdutora.SelectedIndex = -1;
// fim do carregamento do comboBox do Produtora
}
78
Programação Visual – C#
Profa. Liliane Jacon
79
Programação Visual – C#
Profa. Liliane Jacon
Usar o assistente do Crystal Report
Using report wizard
Standard OK
(Standard Report Crystal Wizard) Create New Connection
ADO.NET
No items found….avançar…..
DataSet Names (file Path): filmesDataSet1
DATA
FIELDS
(escolher os campos das tabelas e selecionar >>)
Avançar
Grouping (não tem)
Record selection (não tem)
Report Style (table)
concluir
using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
namespace CadastroFilmes
{
public partial class relatFilmes : Form
{
public relatFilmes(string titulo)
{
InitializeComponent();
this.Text = titulo;
}
80
Programação Visual – C#
Profa. Liliane Jacon
_report.SetDataSource(filmesDataSet1);
crystalReportViewer1.ReportSource=_report;
crystalReportViewer1.RefreshReport();
}
}
}
81