quarta-feira, 30 de maio de 2018

Como arraste e solte uma imagem de uma pasta para picturebox com C#


Vamos aprendemos como arraste e solte uma imagem de uma pasta para picturebox no WinForms.
Passo 1: crie um novo aplicativo do Windows em C#. 
Passo 2: Tome o controle picturebox e coloque-o no formulário abaixo.


Passo 3:  defina a propriedade AllowDrop do formulário como True.
Passo 4: Colocar mais quatro namespace.
using System.Drawing;
using System.IO;
using
 System.Threading;
using
 System.Diagnostics;

Passo 5:Escreva o código a seguir.


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;
using
 System.IO;
using
 System.Threading;
using
 System.Diagnostics;

namespace WindowsFormsApplication1
{
    
public partial class Form1 : Form
    {

        protected bool validData;
        string path;
        
protected Image image;
        
protected Thread getImageThread        public Form1()
        {

            InitializeComponent();

        }

        private void Form1_DragEnter(object sender, DragEventArgs e)
        {
            
string filename;
            validData = GetFilename(
out filename, e);
            
if (validData)
            {

                path = filename;

                getImageThread = 
new Thread(new ThreadStart(LoadImage));
                getImageThread.Start();

                e.Effect = DragDropEffects.Copy;

            }

            
else
                e.Effect = DragDropEffects.None;

        }

        
private bool GetFilename(out string filename, DragEventArgs e) 

        {
            
bool ret = false;
            filename = 
String.Empty;
            
if ((e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy)
            {
                
Array data = ((IDataObject)e.Data).GetData("FileDrop") as Array;
                
if (data != null)
                {

                    
if ((data.Length == 1) && (data.GetValue(0) is String))
                    {

                        filename = ((
string[])data)[0];
                        
string ext = Path.GetExtension(filename).ToLower();
                        
if ((ext == ".jpg") || (ext == ".png") || (ext == ".bmp"))
                       {

                            ret = 
true;
                        }

                    }

                }

            }

            
return ret;
        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {
            
if (validData)
            {

                
while (getImageThread.IsAlive)
                {

                    Application.DoEvents();

                    
Thread.Sleep(0);
                }

                pictureBox1.Image = image;

            }

        }

        protected void LoadImage()
        {
            image = 
new Bitmap(path);
        }

    }

}


Etapa 6: Executar o aplicativo, F5.
Etapa 7: Arraste o arquivo de imagem no formulário.


quinta-feira, 17 de maio de 2018

Como obter a posição da tela de um controle dentro de um Formulário?

Point p = frmLogin.PointToScreen(Text1.Location);

quarta-feira, 16 de maio de 2018

Como definir cor RGB no C# via código [Resolvido]

Para definir cor de algum controle/componente, no formato RGB, basta usar a seguinte instrução:

this.BackColor = Color.FromArgb(255, 232, 232);

Proximo passo.
Para quem quer aprender a usar o ColorDialog para definir cores como no paint:
Clica aqui para ver mais detalhes.

Como usar o ColorDialog no C#

ColorDialog
Um controle ColorDialog é usado para selecionar uma cor das cores disponíveis e também definir cores personalizadas. Uma caixa de diálogo de cores típica se parece com a Figura 1, onde você pode ver que há uma lista de cores sólidas básicas e que há uma opção para criar cores personalizadas.
ColorDialogImg1.jpg
figura 1
Criando um ColorDialog
Podemos criar um controle ColorDialog usando um designer de formulários no tempo de design ou usando a classe ColorDialog no código em tempo de execução (também conhecido como dinamicamente). Ao contrário de outros controles do Windows Forms, um ColorDialog não tem e não precisa de propriedades visuais como os outros. O único objetivo do ColorDialog é exibir cores disponíveis, criar cores personalizadas e selecionar uma cor dessas cores. Quando uma cor é selecionada, precisamos dessa cor em nosso código para que possamos aplicá-la em outros controles.
Novamente, você pode criar um ColorDialog em tempo de design, mas é mais fácil criar um ColorDialog em tempo de execução.
Tempo de design
Para criar um controle ColorDialog em tempo de design, basta arrastar e soltar um controle ColorDialog da caixa de ferramentas para um formulário no Visual Studio. Depois de arrastar e soltar um ColorDialog em um formulário, o ColorDialog se parece com a Figura 2.
ColorDialogImg2.jpg
Figura 2
Adicionando um ColorDialog a um formulário adiciona seguindo duas linhas de código.

private System.Windows.Forms. ColorDialog colorDialog1;
this .colorDialog1 = new System.Windows.Forms. ColorDialog ();
Tempo de execução
Criar um controle ColorDialog em tempo de execução é apenas um trabalho de criar uma instância da classe ColorDialog, definir suas propriedades e adicionar a classe ColorDialog aos controles de formulário.
O primeiro passo para criar um ColorDialog dinâmico é criar uma instância da classe ColorDialog. O trecho de código a seguir cria um objeto de controle ColorDialog.
ColorDialog colorDlg = new ColorDialog ();

O método ShowDialog do ColorDialog exibe o ColorDialog. O trecho de código a seguir define as propriedades cor de plano de fundo, cor de primeiro plano, Texto, Nome e Fonte de um ColorDialog.
colorDlg.ShowDialog ();

Uma vez que o método ShowDialog é chamado, você pode escolher cores na caixa de diálogo.

Definindo as propriedades do ColorDialog
Depois de colocar um controle ColorDialog em um formulário, a próxima etapa é definir propriedades.
A maneira mais fácil de definir propriedades é a partir da janela Propriedades. Você pode abrir a janela Propriedades pressionando F4 ou clique com o botão direito em um controle e selecione o item de menu Propriedades. A janela Propriedades se parece com a Figura 3.
ColorDialogImg3.jpg
Figura 3
AllowFullOpen
Se você observar a Figura 1, verá um botão chamado Definir cores personalizadas no ColorDialog. Clicar neste botão abre a área do editor de cores personalizadas, onde você pode definir as cores definindo valores de cores RGB (entre 0 e 255) e também pode selecionar uma cor na área de cores, como você pode ver na Figura 4.
ColorDialogImg4.jpg
Figura 4
A propriedade AllowFullOpen garante que a opção Definir cor personalizada esteja ativada em um ColorDialog. Se você deseja desabilitar esta opção, você pode definir a propriedade AllowFullOpencomo false e seu ColorDialog será semelhante à Figura 5.
ColorDialogImg5.jpg
Figura 5
 
O trecho de código a seguir define a propriedade AllowFullOpen como false.
colorDlg.AllowFullOpen = false ;
Cor, AnyColor e SolidColorOnly
A propriedade Color é usada para obter e definir a cor selecionada pelo usuário em um ColorDialog.
AnyColor é usado para obter e definir se um ColorDialog exibe todas as cores disponíveis no conjunto de cores básicas.
SolidColorOnly é usado para obter e definir se um ColorDialog restringe os usuários a selecionar somente cores sólidas.
O fragmento de código a seguir define essas propriedades.
colorDlg.AnyColor = true ;
colorDlg.SolidColorOnly = false ;
colorDlg.Color = Cor . Vermelho ;
Usando ColorDialog em Aplicativos
Agora vamos criar um aplicativo que use um ColorDialog para definir cores de vários controles. O aplicativo do Windows Forms é semelhante à Figura 6.
ColorDialogImg6.jpg
Figura 6
Na Figura 6, temos alguns controles do Windows Forms e clicar nos botões Foreground Color e Background Color permitirá que o usuário selecione uma cor e defina essa cor como cores de primeiro e segundo plano dos controles. Depois de selecionar as cores de primeiro plano e de fundo, o formulário se parece com a Figura 7.
ColorDialogImg7.jpg
Figura 7
O trecho de código a seguir é o código para os botões Foreground Color e Background Color, clique em manipuladores de eventos.
Vazio privado ForegroundButton_Click ( remetente do objeto , EventArgs e)
{
    ColorDialog colorDlg = new ColorDialog ();
    colorDlg.AllowFullOpen = false ;
    colorDlg.AnyColor = true ;
    colorDlg.SolidColorOnly = false ;
    colorDlg.Color = Cor . Vermelho ;
                    
    if (colorDlg.ShowDialog () == DialogResult .OK)
    {
        textBox1.ForeColor = colorDlg.Color;
        listBox1.ForeColor = colorDlg.Color;
        button3.ForeColor = colorDlg.Color;
    }
}

private void BackgroundButton_Click ( remetente do objeto , EventArgs e)
{
    ColorDialog colorDlg = new ColorDialog ();
    if (colorDlg.ShowDialog () == DialogResult .OK)
    {
        textBox1.BackColor = colorDlg.Color;
        listBox1.BackColor = colorDlg.Color;
        button3.BackColor = colorDlg.Color;
    }
}

Resumo 
Um controle ColorDialog permite que os usuários iniciem o Diálogo de Cor do Windows e permitam que eles selecionem uma cor sólida ou criem uma cor personalizada a partir das cores disponíveis. Neste artigo, discutimos como usar um diálogo de cores do Windows e definir suas propriedades em um aplicativo do Windows Forms.

terça-feira, 8 de maio de 2018

Aprenda mais sobre Design Patterns

segunda-feira, 7 de maio de 2018

Quando é que posso utilizar Índices na Base de Dados?

Os índices são usados para optimizar a tua base de dados. Por isso, boa parte dos problemas de desempenho em uma BD se resolvem com índices bem construídos. 
Assim como os livros, que são um conjunto de capítulos com muitas páginas cada, os bancos são conjuntos de tabelas como muitos registros cada. Em ambos nós precisamos ter índices, que são estruturas de apoio para encontrar rapidamente o que estamos procurando.
Note que índices e chaves são coisas diferentes, embora a chaves primárias sejam os únicos índices clusterizados das tabelas. 
Primeiro, toda tabela deve ter um índice clusterizado, que é o índice que rege a ordenação das linhas da tabela. Ou seja, a chave primária. Fora as regras tradicionais de chaves primárias, como não poder haver repetição, dê preferência por usar um campo numérico como chave, pois os índices trabalham melhor como estes campos (i.e. as consultas serão mais rápidas). Este é o mais básico e elementar dos índices e ele é criado mesmo que você não saiba disso.
Segundo, crie índices nas suas chaves estrangeiras. Não necessariamente em todas, afinal o uso excessivo de índices prejudica a performance dos INSERTs, UPDATEs e DELETEs, mas nas FKs que você costuma fazer JOIN.
Terceiro, crie índices para garantir integridade. Quando você cria um índice para uma coluna (ou grupo delas) e diz que ele é UNIQUE, você não apenas garante que não haja elementos repetidos em sua tabela, como aumenta significativamente a performance de consultas que envolvam as colunas do índice. Isso porque quando o motor de consulta do SQL Server sabe que um campo não se repete, ele vai parar de procurar por mais ocorrências daquele campo tão logo encontre a primeira ocorrência, entende?
Quarto, dê manutenção nos seus índices periodicamente. Conforme você vai inserindo, removendo e atualizando elementos da sua tabela, seus índices vão ficando fragmentados, o que pode prejudicar a performance de uma maneira até pior do que a ausência de índices. Desta forma, lembre-se de dar um Rebuild nos seus índices quando eles estiverem fragmentados, preferencialmente em horários de pouco acesso ao seu sistema para evitar problemas com os usuários.

BÓNUS 1 - Como construir índice no SQL Server

CREATE INDEX nomeIndex ON nomeTabela(campo à Indexar)
Ex: Temos a tabela ItemVenda(idItemVenda,idProduto,quantidade,subTotal,IdVenda) e queremos indexar o campo IdVenda.
CREATE INDEX ixIdVenda ON ItemVenda(idVenda)

BÓNUS 2 - Como fazer a manutenção dos índices

ALTER INDEX {nomeIndex | all} ON nomeTabela REBUILD
ALTER INDEX {nomeIndex | all} ON nomeTabela REORGANIZE
Escolha uma dessas instruções para colocar os índices da tua base de dados sempre estáveis.



Pesquisar neste blogue

Com tecnologia do Blogger.

Páginas