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":
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?
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