Χειρισμός πολλών ίδιου τύπου Components μέσω πίνακα αντικειμένων και γεγονότων μέσω μόνο μίας συνάρτησης σε Visual CSharp (C#) και Visual Basic 2003,2005
Θυμάστε πόσο απλά μπορούσατε να δημιουργήσετε πολλά ίδιου τύπου χειριστήρια και να τα χειριστείτε με ένα κοινό όνομα και κοινά γεγονότα, χρησιμοποιώντας απλά έναν δείκτη; π.χ. picturebox[0], picturebox[1], picturebox[2] κτλ. και με μία συνάρτηση τύπου Pirture_click(index as integer) να γράψετε κοινό κώδικα για όλα τα χειριστήρια που επιθυμείτε; Όλα αυτά τα κάνατε στο Visual studio 6. Πώς γίνεται όμως αυτό στο Visual studio 2003 ή 2005;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
{
public partial class Form1 : Form
{
//Δημιουργία πίνακα αντικειμένων τύπου PictureBox
PictureBox[] m_pic = new PictureBox[5];
public Form1()
{
InitializeComponent();
//Κάθε αντικείμενο του πίνακα “δείχνει” σε μία εικόνα
m_pic[0] = pictureBox1;
m_pic[1] = pictureBox2;
m_pic[2] = pictureBox3;
m_pic[3] = pictureBox4;
m_pic[4] = pictureBox5;
}
{
//Ο παρακάτω κώδικας καθορίζει την εικόνα του κάθε PictureBox
//και δημιουργεί ένα γεγονός Click για όλες της εικόνες
//Έτσι κάθε φορά που κάνετε Click σε μία εικόνα καλείται ο ίδιος κώδικας
int c = 0;
foreach (PictureBox pc in m_pic) //διατρεξε όλες τις εικόνες που έχουν //οριστεί στον πίνακα m_pic
{
c++;
//όρισε την είκονα του απο τον ένα αρχείο image1.jpg,image2.jpg,image3.jpg κ.τ.λ.
pc.BackgroundImage = Image.FromFile(“image” + c.ToString() + “.jpg”);
//Δημιούργησε ένα συμβάν για κάθε αντικείμενο
pc.Click += new System.EventHandler(this.my_click);
}
}
//κάλείται απο τα χειριστήρια που έχουν οριστεί να καλούν αυτή την συνάρτηση
private void my_click(object sender, System.EventArgs e)
//μετατροπή του αντικειμένου sender σε PictureBox
PictureBox pc = (PictureBox)sender;
//Διέτρεξε όλα τα αντικείμενα του πίνακα m_pic
for (int a = 0; a < m_pic.Length; a++)
{
//όταν βρεθεί πιο απο αυτά πατήθηκε εμφάνισε ένα σχετικό μήνυμα
if (pc == m_pic[a]) MessageBox.Show(“Πατήθηκε το “ + (a+1).ToString() + ” εικονίδιο“);
}
}
}
}



