Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
06/11/10 12:09
nihal
Salve a tutti,
avrei bisogno di una mano con questo codice "casalingo":
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO;

namespace Periodic
{
	public partial class PeriodicGUI : Form
	{
		private List<Elemento> elementi;
		private TableLayoutPanel layout;
		private StreamReader file;
		public PeriodicGUI(){
			layout = new TableLayoutPanel();
			elementi = new List<Elemento>(103);
			file = new StreamReader("C:\Documents and Settings\Nihal\Documenti\SharpDevelop Projects\Periodic\Periodic\Elementi.dat");
			string linea;
			while((linea = file.ReadLine()) != null){
				string[] campi = linea.Split(',');
				elementi.Add(new Elemento(campi[0], campi[1], campi[2], campi[3], campi[4], campi[5], campi[6]));
				System.Console.WriteLine("Aggiunto elemento");
			}
			for(int riga = 0, colonna = 0, i = 0; i < elementi.Count ; i++, colonna++){
				if(riga == 0 && colonna == 1)
				{
	    			colonna = 17;
				} else if (riga == 1 && colonna == 2)
				{
	    			colonna = 12;
				} else if (riga == 2 && colonna == 2)
				{
	    			colonna = 12;
				} else if (riga == 6 && colonna == 3)
				{
	    			riga = 7;
	    			colonna = 4;
				} else if (riga == 7 && colonna == 18)
				{
					riga = 8;
	    			colonna = 4;
				}
				if (colonna == 18)
				{
	    			riga++;
	    			colonna = 0;
				}
				layout.Controls.Add(elementi[i], colonna, riga);
			}
			//WebBrowser label1 = new WebBrowser();
			//label1.DocumentText = "<html style=\"background-color: " + "red" + ";\"><body><div style=\"text-align : left; font-size : small\">" + "10" + "</div><div style=\"font-size : medium; text-align : left\">" + "Ne" + "</div></body></html>";
			//label1.Size = new Size(100, 100);
			//layout.Controls.Add(label1, 1, 2);
			this.Controls.Add(layout);
//			foreach(Control controllo in this.Controls){
//				if (controllo is TableLayoutPanel){
//					continue;
//				} else {
//					controllo.Dispose();
//				}
//			}
			foreach (Elemento elemento in this.layout.Controls){
				elemento.MouseEnter += new EventHandler(this.Elemento_MouseHover);
				elemento.MouseClick += new MouseEventHandler(this.Elemento_Click);
			}
			this.WindowState = FormWindowState.Maximized;
			this.Dock = DockStyle.Fill;
			this.layout.Size = new Size(2000, 1500);
			layout.Show();
			InitializeComponent();
			this.Show();
		}
		void Elemento_Click(object sender, EventArgs e)
		{
			new InfoElemento((Elemento)sender).Show();
		}

		void Elemento_MouseHover(object sender, EventArgs e)
		{
			Elemento sendeR = (Elemento)sender;
			sendeR.BackColor = Elemento.coloreHover;
		}
	}
}

Il programma viene compilato e avviato senza nessun problema (è una tavola periodica in cui ogni casella è rappresentata da una classe che eredita da Control) e tutto è come dovrebbe essere. L'unica questione è sugli eventi: ho iterato su tutti gli elementi e ad ognuno di questi ho aggiunto un gestore per l'evento Click e MouseHover (rispettivamente Elemento_Click e Elemento_MouseHover), ma semplicemente quando ci passo sopra col mouse o ci clicco non succede niente, come se gli eventi non fossero gestiti. Idee? Forse devo ridefinire qualcosa ereditando da Control?
aaa
06/11/10 16:27
Il Totem
Dipende da che tipo è Elemento. Se usi un controllo utente, gli eventi mousehover e click potrebbero (e dico potrebbero) non avere molta influenza, a favore invece degli stessi eventi lanciati, però, dai controlli interni al controllo utente. Ti suggerisco, quindi di provare a gestire MouseHover e Click all'interno dell'user control e in base a questi di scatenare degli ulteriori eventi propri, gestiti invece dal form1 (ad esempio Elemento.InfoRequired).
aaa
06/11/10 17:13
nihal
La classe Elemento eredita da Control e non è altro che una coppia di label di dimensioni prefissate con uno sfondo definito da me. Quindi tu dici che dovrei far lanciare gli eventi da ognuna delle label e farli gestire direttamente dalla classe Elemento?

EDIT:
Ho aggiunto i gestori direttamente ai controlli interni e ne ho adattato le dimensioni per riempire tutto il Control. Adesso funziona tutto bene, grazie Totem :):):)
Ultima modifica effettuata da nihal 06/11/10 18:01
aaa