none
Criar Templates customizados RRS feed

  • Pergunta

  • Aê pessoal estou interessado em aprender a criar controles customizados e Templates como um Winform específico
    para o meu uso de acordo com a necessidade, já fiz até alguns ensaios aki criando coisas simples como TextBox e Buttons,
    mas ainda não consegui entender muito bem como funciona. Quem puder dar essa força mandando dicas de algum material
    mais didático para um novato serei muito grato.

    segunda-feira, 3 de outubro de 2011 18:50

Respostas

  • Fala pessoal... bom depois de algum tempo pesquisando e testando por conta, já que não achei muito material específico a respeito dessa questão, retorno com uma pequena demonstração do que queria, e já que isso pode ser motivo de 'Threads' futuras, vou deixar aqui o resultado obtido, ainda é simples, mas já é a base para o tratamento de outros controles também para os iniciantes curiosos como eu...
    Vamo lá:
     
    ... é desse jeito que fica
     
     
     1º)- Abri um projeto vazio;
     
    2º)- criei um projeto ClassLibrary;
     
    3º)- criei uma classe com o nome 'Auxiliar' e dentro segue o código; 
     
    namespace ControlesCxtm
    {
        public class Auxiliar
        {
            private Auxiliar() { }
    
            public static GraphicsPath BordaRedonda(RectangleF retan, float radiano)
            {
                return BordaRedonda(retan.X, retan.Y, retan.Width, retan.Height, radiano);
            }
    
            public static GraphicsPath BordaRedonda(float X, float Y, float Largura, float Altura, float radiano)
            {
                GraphicsPath grapth = new GraphicsPath();
    
                grapth.AddLine(X + radiano, Y, X + Largura - (radiano * 2), Y);
    
                grapth.AddArc(X + Largura - (radiano * 2), Y, radiano * 2, radiano * 2, 270, 90);
    
                grapth.AddLine(X + Largura, Y + radiano, X + Largura, Y + Altura - (radiano * 2));
    
                grapth.AddArc(X + Largura - (radiano * 2), Y + Altura - (radiano * 2), radiano * 2, radiano * 2, 0, 90);
    
                grapth.AddLine(X + Largura - (radiano * 2), Y + Altura, X + radiano, Y + Altura);
    
                grapth.AddArc(X, Y + Altura - (radiano * 2), radiano * 2, radiano * 2, 90, 90);
    
                grapth.AddLine(X, Y + Altura - (radiano * 2), X, Y + radiano);
    
                grapth.AddArc(X, Y, radiano * 2, radiano * 2, 180, 90);
    
                grapth.CloseFigure();
    
                return grapth;
            }
        }
    }
    

    4º)- depois criei uma outra classe que herda de 'Form'
    5º)- e dentro dela segue o seguinte código:
    namespace ControlesCxtm
    {
        public partial class BordaRedondaForm : Form
        {
            private bool SeMove = false;
            private Size distanciaMouse;
    
            public BordaRedondaForm()
            {
                InitializeComponent();
            }
    
            private void BordaRedondaForm_Resize(object sender, EventArgs e)
            {
                Rectangle retangulo = new Rectangle(0, 0, Width, Height);
                GraphicsPath caminho = Auxiliar.BordaRedonda(retangulo, 75);
                Region = new Region(caminho);
            }
    
            private void BordaRedondaForm_MouseMove(object sender, MouseEventArgs e)
            {
                if (SeMove)
                {
                    Location = new Point(MousePosition.X - distanciaMouse.Width, MousePosition.Y - distanciaMouse.Height);
                }
            }
    
            private void BordaRedondaForm_MouseUp(object sender, MouseEventArgs e)
            {
                SeMove = !(e.Button == MouseButtons.Left);
            }
    
            private void BordaRedondaForm_MouseDown(object sender, MouseEventArgs e)
            {
                distanciaMouse = new Size(MousePosition.X - Location.X, MousePosition.Y - Location.Y);
                SeMove = e.Button == MouseButtons.Left;
            }
        }
    }
    

    6º)- feito isso já é possível visualizar como fica o resultado, basta criar um novo projeto do tipo 'Form',
    e trocar o tipo de herança do novo projeto...
    namespace Meu_Form_Custom_Teste
    {
        public partial class FrmPrincipal : <em><span style="text-decoration:underline"><strong>ControlesCxtm.BordaRedondaForm</strong></span></em>
        {
            public FrmPrincipal()
            {
                InitializeComponent();
            }
        }
    }
    
     
    • Marcado como Resposta Neoshao terça-feira, 8 de novembro de 2011 18:32
    terça-feira, 8 de novembro de 2011 18:26

Todas as Respostas

  • Neoshao,

    Não entendi bem sua questão, vc quer algo a respeito de forms herdados ou herança visual de forms e componentes?

    []´s

     


    Ediberto Alves
    http://edibertoalves.com.br/blog
    http://twitter.com/edibertoalves
    "Se a resposta for útil, marque-a. Ajude no bom funcionamento do fórum."

    segunda-feira, 3 de outubro de 2011 20:44
  • Fala Ediberto,,

    Forms herdados não é, isso já aprendi fazer...

    O que eu estou procurando saber é como posso criar por exemplo meus controles em personalizados WinForms, WPF, Web etc... C#.

    Herdando as funcionalidades padrão de comportamento, mas com a possibilidade de que eu possa adicionar as minhas próprias;

    ex.: Um Form em WindowsForms, que já tenha a funcionalidade Aero por exemplo, com bordas diferentes da padrão (seria tipo ViBlend ou DevExpress)

    que já tenha alguns controles anexados, agilizando a criação,quando houver a necessidade de repetí-los, etc;

    ex.: Um TexBox com cantos arredondados e o campo com o texto  selecionado utilizando outra cor que não a padrão;

    É isso, com certeza não sei ainda dar os nomes corretos, mas é por isso mesmo que tô perguntando, assim aprendo logo.


    • Marcado como Resposta Neoshao terça-feira, 8 de novembro de 2011 18:32
    • Não Marcado como Resposta Neoshao terça-feira, 8 de novembro de 2011 18:32
    terça-feira, 4 de outubro de 2011 09:40
  • Fala pessoal... bom depois de algum tempo pesquisando e testando por conta, já que não achei muito material específico a respeito dessa questão, retorno com uma pequena demonstração do que queria, e já que isso pode ser motivo de 'Threads' futuras, vou deixar aqui o resultado obtido, ainda é simples, mas já é a base para o tratamento de outros controles também para os iniciantes curiosos como eu...
    Vamo lá:
     
    ... é desse jeito que fica
     
     
     1º)- Abri um projeto vazio;
     
    2º)- criei um projeto ClassLibrary;
     
    3º)- criei uma classe com o nome 'Auxiliar' e dentro segue o código; 
     
    namespace ControlesCxtm
    {
        public class Auxiliar
        {
            private Auxiliar() { }
    
            public static GraphicsPath BordaRedonda(RectangleF retan, float radiano)
            {
                return BordaRedonda(retan.X, retan.Y, retan.Width, retan.Height, radiano);
            }
    
            public static GraphicsPath BordaRedonda(float X, float Y, float Largura, float Altura, float radiano)
            {
                GraphicsPath grapth = new GraphicsPath();
    
                grapth.AddLine(X + radiano, Y, X + Largura - (radiano * 2), Y);
    
                grapth.AddArc(X + Largura - (radiano * 2), Y, radiano * 2, radiano * 2, 270, 90);
    
                grapth.AddLine(X + Largura, Y + radiano, X + Largura, Y + Altura - (radiano * 2));
    
                grapth.AddArc(X + Largura - (radiano * 2), Y + Altura - (radiano * 2), radiano * 2, radiano * 2, 0, 90);
    
                grapth.AddLine(X + Largura - (radiano * 2), Y + Altura, X + radiano, Y + Altura);
    
                grapth.AddArc(X, Y + Altura - (radiano * 2), radiano * 2, radiano * 2, 90, 90);
    
                grapth.AddLine(X, Y + Altura - (radiano * 2), X, Y + radiano);
    
                grapth.AddArc(X, Y, radiano * 2, radiano * 2, 180, 90);
    
                grapth.CloseFigure();
    
                return grapth;
            }
        }
    }
    

    4º)- depois criei uma outra classe que herda de 'Form'
    5º)- e dentro dela segue o seguinte código:
    namespace ControlesCxtm
    {
        public partial class BordaRedondaForm : Form
        {
            private bool SeMove = false;
            private Size distanciaMouse;
    
            public BordaRedondaForm()
            {
                InitializeComponent();
            }
    
            private void BordaRedondaForm_Resize(object sender, EventArgs e)
            {
                Rectangle retangulo = new Rectangle(0, 0, Width, Height);
                GraphicsPath caminho = Auxiliar.BordaRedonda(retangulo, 75);
                Region = new Region(caminho);
            }
    
            private void BordaRedondaForm_MouseMove(object sender, MouseEventArgs e)
            {
                if (SeMove)
                {
                    Location = new Point(MousePosition.X - distanciaMouse.Width, MousePosition.Y - distanciaMouse.Height);
                }
            }
    
            private void BordaRedondaForm_MouseUp(object sender, MouseEventArgs e)
            {
                SeMove = !(e.Button == MouseButtons.Left);
            }
    
            private void BordaRedondaForm_MouseDown(object sender, MouseEventArgs e)
            {
                distanciaMouse = new Size(MousePosition.X - Location.X, MousePosition.Y - Location.Y);
                SeMove = e.Button == MouseButtons.Left;
            }
        }
    }
    

    6º)- feito isso já é possível visualizar como fica o resultado, basta criar um novo projeto do tipo 'Form',
    e trocar o tipo de herança do novo projeto...
    namespace Meu_Form_Custom_Teste
    {
        public partial class FrmPrincipal : <em><span style="text-decoration:underline"><strong>ControlesCxtm.BordaRedondaForm</strong></span></em>
        {
            public FrmPrincipal()
            {
                InitializeComponent();
            }
        }
    }
    
     
    • Marcado como Resposta Neoshao terça-feira, 8 de novembro de 2011 18:32
    terça-feira, 8 de novembro de 2011 18:26