L'Informatique
HTML |  Javascript |  DOM |  PHP |  PHP-MySql |  Sessions en PHP |  JSP |  TomCat |  ASP
Java |  C |  C# | 
SQL |  Oracle |  PL/SQL |  les index |  Données multimédia : les LOBs |  Intermedia Text |  projet ORDVideo & Java
BMP |  PBM |  PGM |  PPM | 
UML |  Diagramme Use Case |  Diagramme de classes | 
Liens informatique |  Autres Liens | 

Recherche personnalisée

C#




Le C# (prononcez CSharp) ressemble comme deux gouttes d'eau au java.

Dans cette page, le C# est utilisé pour créer une application avec fenêtre, et j'utilise SharpDevelop comme outil de développement.

Le C# est un langage de programmation orienté objet, il utilise des packages présents dans le framework .NET, qui doit être installé pour pouvoir faire fonctionner des programmes pseudo-compilés par le compilateur C#.






Résumé C# :

//fenêtre vide créée automatiquement avec SharpDevelop :
using System;//appels des packages nécessaires
using System.Drawing;
using System.Windows.Forms;

namespace mon_namespace
{
public class MainForm : System.Windows.Forms.Form //classe principale
{
 public MainForm()//constructeur
 {
 InitializeComponent();
 }

 [STAThread]
 public static void Main(string[] args)
 {
 Application.Run(new MainForm()); //lancement du constructeur
 }

 private void InitializeComponent() //initialisation du formulaire
 {
 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
 this.ClientSize = new System.Drawing.Size(292, 266);
 this.Text = "MainForm";
 this.Name = "MainForm";
 }
}
}






Comment afficher un message (avec ou sans confirmation) ?
C'est très facile :

- message simple :

MessageBox.Show("Hello World", "Titre Message");



- message où l'on teste la réponse de l'utilisateur (Oui/Non) :

if (MessageBox.Show("Êtes-vous sûr ?", "Titre Message", MessageBoxButtons.YesNo) != DialogResult.Yes)

    ...



Dans quel répertoire se trouve l'exécutable ?
using System.Windows.Forms;

Application.StartupPath retourne le chemin dans lequel se trouve l'exécutable de l'application.


Comment afficher une boîte de dialogue d'ouverture de fichier ?

Pour afficher une fenêtre dans laquelle on peut choisir un fichier :

System.Windows.Forms.OpenFileDialog dlg;

if(dlg.ShowDialog() == DialogResult.OK)
{
if(File.Exists(dlg.FileName))
{
 //on est sûr qu'on a un fichier valide
}
}



Comment afficher une boîte de dialogue d'enregistrement de fichier ?

Pour afficher une fenêtre dans laquelle on peut choisir un fichier :

System.Windows.Forms.SaveFileDialog dlg;

if(dlg.ShowDialog() == DialogResult.OK)
{
//dlgSaveSalle.FileName contient le nom du futur fichier
}



Comment savoir quelle touche a été appuyée ?

Après avoir créé un écouteur sur une zone de texte par exemple, une fonction comme celle qui suit est définie :

void ...KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode == Keys.Escape)
{
 //la touche Echap a été utilisée
}
}



Comment savoir quel bouton de la souris a été utilisé ?

Après avoir créé un écouteur sur un bouton par exemple, une fonction comme celle qui suit est définie :

void ...MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
 //le bouton droit de la souris a été utilisé (Left, Right, Middle entre autres)
}
}



Quelles sont les coordonnées de la souris ?

Pour avoir les positions en x et y de la souris, on utilise :

Cursor.Position.X
et
Cursor.Position.Y


Quelles sont les coordonnées de la souris à l'intérieur d'un objet graphique ?

Il faut soustraire aux coordonnées sur l'écran la position de l'objet graphique. Ce peut être un bouton, une zone de dessin ou autre.

x = Cursor.Position.X - this.PointToScreen(monObjet.Location).X;//dans la classe du formulaire contenant monObjet
y = Cursor.Position.Y - this.PointToScreen(monObjet.Location).Y;



Comment afficher un menu contextuel ?

Il peut être intéressant d'afficher un menu lors d'un bouton droit sur un élément de la fenêtre.
Code affichant un menu supprimer :

MenuItem MenuSupprimer =new MenuItem(); //définition d'un menu

MenuSupprimer.Text = "&Supprimer";//texte de l'élément du menu
ContextMenu menu = new ContextMenu(); //un menu contextuel
menu.MenuItems.Add(MenuSupprimer);//ajout du menu supprimer au menu contextuel
monObjet.ContextMenu = menu;//ajout du menu contextuel à monObjet

//on associe un clic sur le menu supprimer à la fonction menuSupprimerClick (ci-après)
MenuSupprimer.Click += new System.EventHandler(this.menuSupprimerClick);

La fonction appelée lors du clic sur le menu Supprimer est :

void menuSupprimerArmoireClick(object sender, System.EventArgs e) {   ... }


monObjet peut être un bouton, une zone de dessin ou autre élément.

Pour supprimer le menu contextuel désormais présent sur monObjet, il suffit de le définir comme null :

monObjet.ContextMenu = null;


Csharp résumé cours



Comment sauvegarder facilement des "classes" (ou même un tableau) dans un fichier XML ?

Avec XmlSerializer, on peut sauvegarder tout un objet tel qu'il est actuellement. Toutes les variables déclarées publiques seront placées dans un fichier XML, ainsi les sauvegardes et ouvertures seront vraiment simples.
Vous devez inclure les packages suivant :

using System.Xml;
using System.Xml.Serialization;
using System.IO;

XmlSerializer serializer = new XmlSerializer(typeof(maClasse));
TextWriter writer = new StreamWriter(nom du fichier);
serializer.Serialize(writer, instance de la classe maClasse);
writer.Close();

C'est tout !
Notez que cela est aussi réalisable avec un ArrayList ou d'autres types.

En cas d'erreur lors de la sérialisation, voir

J'ai un message d'erreur lors de la sauvegarde de ma classe.




Comment recharger facilement des "classes" à partir d'un fichier XML ?

Avec XmlSerializer, on peut charger des données d'un fichier XML dans une classe de la même façon qu'on enregistre ces données.

XmlSerializer serializer = new XmlSerializer(typeof(maClasse));
FileStream fs = new FileStream(nom du fichier, FileMode.Open);
try
{
 instance de maClasse = (maClasse) serializer.Deserialize(fs);
}
catch
{
 MessageBox.Show("Erreur : le fichier de sauvegarde est invalide","erreur");
}
fs.Close();

Les try et catch ne sont pas obligatoires mais permettent de gérer des fichiers XML mal formatés.


J'ai un message d'erreur lors de la sauvegarde de ma classe.

  Si la compilation de votre programme a réussie, mais que lors de l'exécution une erreur se produit au moment d'enregistrer (de sérialiser) la classe.
L'erreur est : "System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type monNamespace.uneClasse was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically."

  Cela signifie que dans la classe à sérialiser il existe un élément de taille dynamique, comme un ArrayList. Pour cela, insérez la ligne suivante juste avant la classe à enregistrer, après avoir noté dans le message d'erreur ce qui cause problème (uneClasse en bleu ci-dessus) la classe à l'origine du problème:

[XmlInclude(typeof(uneClasse))]        //ligne à ajouter
public class maClasseAEnregistrer { ... }



Comment inclure une ressource dans l'exécutable ?

  Pour ajouter une ressource dans un exécutable en C# sous SharpDevelop, il faut ouvrir le fichier <nom_exécutable>.<nom_classe_principale>.resources (présent dans les fichiers de ressources); la liste des ressources présentes s'affichera dans un tableau, et vous pourrez en rajouter.

Voici un exemple de lecture d'une ressource appelée monIcone :

//création d'un ResourceManager
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(<nom_classe_principale> ));

(System.Drawing.Icon)(resources.GetObject("monIcone")) est l'îcone récupérée.



Romain C