Draw usercontrol

martedì 13 ottobre 2009 - 22.13

moukp Profilo | Newbie

Salve,

Avrei la necessita di disegnare alcune forme geometriche all'interno di una mia form.
Così ho creato una classe così fatta:

public partial class Forma: UserControl { private int posizione_x; private int posizione_y; public Forma(int pos_x,int pos_y) { posizione_x = pos_x; posizione_y = pos_y; InitializeComponent(); } private void Forma_Load(object sender, EventArgs e) { } private void Forma_Paint(object sender, PaintEventArgs e) { Color c = Color.Green; SolidBrush solidBrush = new SolidBrush(c); Graphics g = e.Graphics; g.FillRectangle(solidBrush, posizione_x, posizione_y, 100, 100); } }

Nella form che dovrebbe visualizzare queste forme geometriche faccio le seguenti chiamate:
Controls.Add(new Forma(1, 1)); Controls.Add(new Forma(100, 100)); Controls.Add(new Forma(200, 200));

Ma nella mia form viene visualizzato solo il primo di questi controlli.
Dove sto sbagliando?

Grazie in anticipo

AntCiar Profilo | Expert

ciao.

Ci sono due errori di fondo:

1 - quando aggiungi gli userControl alla form, non dai nessuna location. Di default questi vanno nella posizione (0,0). Così facendo hai tutti e tre gli usercontrol sovrapposti e vedi solo l'ultimo.

2 - gli userControl hanno un colore di sfondo. anche se dai delle posizioni specifiche all'usercontrol essedo "colorati" le parti sovrapposte non si "miscelano", prova a dare BackColor = Color.Transparent sul costruttore della classe Forma.


In alternativa io farei in questo modo:

- nella mia form metterei una PictureBox.
- nel costruttore della form dopo l'inizializeComponent metti questo codice: this.pictureBox1.Image = new Bitmap(this.pictureBox1.Width, this.pictureBox1.Height);

- Poi nel codice farei una funzione di questo tipo:

private void DisegnaForma(int posX, int posY, int larg, int alt, Color clr)
{
Graphics g = Graphics.FromImage(this.pictureBox1.Image);
g.FillRectangle(new SolidBrush(clr), new Rectangle(posX, posY, larg, alt));
g.Save();
this.pictureBox1.Image = this.pictureBox1.Image;
}

- sull'evento click di un bottone o sul load della form chiama la sub 'DisegnaForma' passandogli i parametri necessari per ogni rettangolo da disegnare.

Ciao

Cristian

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5