Usuário com melhor resposta
Criar Templates customizados

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.
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 fica1º)- 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
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." -
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.
-
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 fica1º)- 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