New CodePlex project TwoStatesButton for WPF 4

by Fabien Lavocat 23. December 2010 11:23

imageI just released, an hour ago, a new project on CodePlex. This project, TwoStatesButton, is a WPF control which looks like to the “switch button” of the iPhone. You can have the same behavior as the iPhone version, with ON / OFF values, and you can specify left and right values. I plan to add more features soon…

This very simple project is realized in C# 4 / WPF 4. I hope it will be useful for you.
To download example and the source code, go to http://twostatesbutton.codeplex.com/

Demo2

Tags: ,

WPF | Exemples de code

Créer des tâches pour son site web sur Internet Explorer 9

by Fabien Lavocat 16. September 2010 08:03

f7711b4f-5dfe-4682-b7c2-510aafb5456aVous n’êtes pas sans savoir que Microsoft a annoncé hier, Mercredi 15 Septembre 2010, la mise à disposition au public de la version bêta de Internet Explorer 9. Pour ceux qui habitent, comme moi, en région parisienne, vous avez eu peut être la chance d’aller à la rediffusion de l’évènement qui se déroulait à San Francisco. Je vous invite à jeter un coup d’œil aux nouvelles fonctionnalités sur le site dédié à Internet Explorer 9. L’une des nouveautés assez sympathique pour les webmasters est la possibilité de pouvoir créer des “tâches” sur un site que l’utilisateur aura au préalable épinglé sur la barre des tâches de Windows 7. Pour le lancement de cette version bêta, de nombreux sites, parmi les plus visités du net, ont joué le jeu et créés des tâches. Prenons l’exemple de Twitter, j’ai épinglé le raccourci vers ce site sur ma barre des tâches, et lorsque je fais un clic droit dessus, j’ai une liste de liens qui sont disponibles pour ce site (correspondants aux actions majeures disponibles sur le site) :

Twitter

Donc si vous aussi souhaitez créer ces raccourcis, vous devez rajouter dans l’entête de la page d’accueil de votre site une liste de balise telle que :

<meta name="msapplication-task" content="name=Blog-Microsoft; action-uri=http://www.blog-microsoft.fr; icon-uri=image.ico" />

Il y a trois champs à renseigner, name qui correspond au nom qui sera affiché pour la tâche, action-uri qui contient l’URL de destination lorsque l’utilisateur clic dessus et enfin icon-uri qui correspond à l’URL de l’icone que vous souhaitez afficher en face de l’action.

Télécharger la bêta de Internet Explorer 9.

Tags:

Exemples de code

Validation d’un fichier XML avec XSD

by Fabien Lavocat 14. September 2009 00:00

Aujourd’hui un petit morceau de code qui vous permettra de valider la structure de vos fichiers XML grâce aux fichiers XSD (Xml Schema Description). J’ai créé deux fichiers XML, l’un valide et l’autre non. Je ne vous montre pas ici, ni le fichier XSD ni les deux fichiers XML, vous les trouverez dans la source de la démo à la fin de l’article.

/// <summary>
/// Obtient si oui ou non le fichier passé en paramètre est valide.
/// </summary>
/// <param name="fileName">Fichier XML à vérifier</param>
/// <returns>Retourne true si le fichier XML est valide</returns>
public static Boolean IsValid(String fileName)
{
    // Valeur qui sera retournée
    Boolean isValid = true;

    // Création d'une instance du schéma
    XmlSchemaSet sc = new XmlSchemaSet();
    // On ajoute le schéma à la collection
    // "null" est utilisé car je n'ai pas imposé de namespace
    sc.Add(null, "SchemaValidation.xsd");

    // Application des paramètres de valisation
    XmlReaderSettings settings = new XmlReaderSettings();
    // Ici nous utilisons un schéma XSD
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas = sc;

    // Si une erreur est trouvée, on utilise un délégué pour l'afficher
    settings.ValidationEventHandler += delegate(object o, ValidationEventArgs vea)
    {
        isValid = false;
        Console.WriteLine("Erreur : " + vea.Message);
    };

    // Crétion du parseur du fichier XML
    XmlReader reader = XmlReader.Create(fileName, settings);
    // On parse le fichier
    while (reader.Read());
    // Ne pas oublier de fermer le reader
    reader.Close();

    return isValid;
}
Cette méthode nous retourne un Boolean qui nous dit si oui ou non le fichier est valide. Remarquez l’utilisation de la méthode anonyme.
Et voilà le résultat, le premier fichier, truffé d’erreurs n’est pas validé alors que le second oui.

image

Téléchargez la source : DemoValidationXML.zip (26,42 kb)

Tags:

Exemples de code

Exemple de personnalisation d’un ToolTip en WPF

by Fabien Lavocat 11. September 2009 00:00

WPF

Hier je vous ai montré comment afficher une image dans le ToolTip d’un contrôle WPF. Aujourd’hui voyons comment afficher une image et un texte ensemble. J’utilise la propriété du StackPanel qui consiste à empiler les contrôles les uns par dessus les autres (verticalement ou horizontalement).

Je vais donc définir le contenu de ma propriété Button.ToolTip en y insérant un StackPanel dont je force la taille. Vous remarquerez que l’image s’adapte à la largeur du conteneur :

<Button Name="bt">
    <Button.Content>Mon bouton...</Button.Content>
    <Button.ToolTip>
        <StackPanel Width="175">
            <Image Source="C:\Users\   \Desktop\WPF.jpg" />

            <TextBlock TextWrapping="Wrap" TextAlignment="Center">
                WPF Rocks! C'est fou ce qu'il est possible de faire avec du XAML !
            </TextBlock>
        </StackPanel>
    </Button.ToolTip>
</Button>

Ce qui nous donne :image

Tags:

Exemples de code | WPF

Small Basic : premier exemple de code

by Fabien Lavocat 21. April 2009 13:30

SmallBasic

Je vous l’annonçais vendredi dernier, Microsoft vient de publier Small Basic v0.4 en Français. Cet environnement de développement pour les jeunes débutants, ne contient qu’une quinzaine d’objets permettant de faire quand même pas mal de choses. Dans le prochain article je vous expliquerai comment créer des add-ins afin d’avoir de nouveaux objets disponibles.

Donc dans l’exemple du jour, je souhaite afficher une tortue à l’écran et la faire déplacer en cliquant sur le bouton de la souris. Celle-ci, en se déplaçant devrait afficher un trait noir.

Exemple

Pour télécharger Small Basic, rendez-vous sur le site officiel de Small Basic.

Tags:

Exemples de code | Small Basic

[Exemple de code] Méthodes partielles (C#3)

by Fabien Lavocat 24. July 2008 06:26

Le principe des méthodes partielle est identique aux classes partielles, à savoir séparer les méthodes en 2 parties. La différence avec les classes partielle est que pour les méthodes, nous allons séparer la déclaration de la méthode de son corps. Cela sert surtout pour le travail collaboratif, où bien lorsque vous avez des classes très grandes (si vous trouvez une autre utilité, n’hésitez pas à laisser des commentaires), en effet, vous allez pouvoir mettre dans un fichier toutes les déclarations des méthodes et dans un autre, les corps de ces même méthodes.

Comme pour les classes partielles, nous allons utiliser le mot clé : partial.

Attention ! Il est interdit de mettre un modificateur d’accès aux méthodes partielles, celles-ci sont private par défaut. Il est également obligatoire de déclarer vos méthodes partielles dans une classe ou une structure partielle.

// Fichier Voiture_Declarations.cs
public partial class Voiture
{
    // Déclaration de la méthode Avancer()
    partial void Avancer(Int32 vitesse);
}

 

// Fichier Voiture_Methodes.cs
public partial class Voiture
{
    // Corps de la méthode Avancer()
    partial void Avancer(Int32 vitesse)
    {
        Console.WriteLine("La voiture avance à {0} km/h", vitesse);
    }
}

Tags: ,

Exemples de code

Exemple de code : Calculer la taille totale d'un répertoire (C#)

by Fabien Lavocat 20. June 2008 00:07
Nous allons voir comment avec deux petites fonctions, calculer la taille totale d’un répertoire et afficher sa taille en Mo.

Commencez déjà par importer le namespace System.IO :

using System.IO;

Ensuite nous allons créer une fonction récurcive afin de pouvoir pouvoir entrer dans les sous-répertoires.

   1: private Int64 DirectoryLength(DirectoryInfo folder)
   2: {
   3:     Int64 bytes = 0;
   4:     foreach (FileInfo fi in folder.GetFiles())
   5:         bytes += fi.Length;
   6:  
   7:     foreach (DirectoryInfo i in folder.GetDirectories())
   8:         bytes += DirectoryLength(i);
   9:  
  10:     return bytes;
  11: }

Cette fonction prend en paramètre un objet de type "DirectoryInfo” qui représente le dossier à analyser. Elle parcourt la liste des fichiers présents dans ce dossier et récupére leur taille. Ensuite on cherche s’il y a des sous-répertoires présents, si c’est le cas, on appelle la même fonction avec  le répertoire courant.

L’appel de la fonction :

   1: private void Form1_Load(object sender, EventArgs e)
   2: {
   3:     // Le @ permet d'échapper tous les caractères spéciaux
   4:     String folder = @"C:\DossierATester\";
   5:  
   6:     // Si le dossier n'existe pas on arrête de traitement
   7:     if (!Directory.Exists(folder))
   8:         return;
   9:  
  10:     // Le dossier existe, on peut calculer sa taille
  11:     Int64 size = DirectoryLength(new DirectoryInfo(folder));
  12:  
  13:     // Ensuite on l'affiche
  14:     Console.WriteLine("Taille du dossier '{0}' : {1} Mo", folder, size.ToMo());
  15: }

Mais qu’est ce que "size.ToMo()” ?

Une méthode d’extention :

   1: public static class Functions
   2: {
   3:     public static String ToMo(this Int64 input)
   4:     {
   5:         // N02 permet d'afficher au format : 1 234.56
   6:         return (input / (1024 * 1024)).ToString("N02");
   7:     }
   8: }

Petite information, si je n’ai utilisé que des Int64 c’est que la méthode Lenght() retourne un objet de type long et vous le savez, long est un alias de Int64 (comme string qui est un alias de String), et que je n’aime pas trop, pour la visibilité du code, travailler avec des alias.

Maintenant un petit quiz !!!

Int32 est une classe. Vrai ou Faux ?

Tags:

Exemples de code

Exemple de code : Comment créer un contrôle dynamiquement (C#)

by Fabien Lavocat 16. April 2008 22:56

Cet exemple de code vous montrera par un exemple, comment créer un contrôle dynamiquement, l’insérer sur un formulaire et s’abonner à ses événements.

Placez le code suivant dans un corps de méthode où vous souhaitez que le contrôle soit créé, par exemple le Form_Load.

Prenons le cas d’un bouton, la première étape consiste à créer l’objet et affecter des valeurs à ses propriétés :

// Création du bouton
System.Windows.Forms.Button button = new Button();
button.Text = "Click me!";
button.Location = new Point(25, 25); // Définition de la position du bouton

La seconde étape, s’abonner à un événement. Pour cela, il faut créer la méthode qui sera appelée lors du déclenchement de cet événement :

private void button_Click(object sender, EventArgs e)
{
   MessageBox.Show(“button_Click”);
}

Ensuite le code pour s’abonner à l’événement :

// Abonnement à l’événement "Click"
button.Click += new EventHandler(button_Click);

Enfin, ajouter le contrôle sur le formulaire, rien de plus simple :

// Ajout du contrôle sur le formulaire
this.Controls.Add(button);

Petite astuce :

Lorsque vous commencez à écrire : « button.Click += », l’Intelisense vous proposera automatiquement de créer la méthode (ici button_Click) et l’abonnement à cette méthode.

Mots clés Technorati :

Tags:

Exemples de code

Exemple de code : Requêtes paramétrées (C#, SQL)

by Fabien Lavocat 31. March 2008 08:25

net.jpgDans cet exemple, nous allons voir comment écrire des requêtes paramètrées. Déjà, pourquoi écrire des requêtes paramètrées ? Et bien d’une part pour ne pas se tromper dans l’écriture de la requête, qui n’a jamais oublié des ‘ dans ses applications ? Ensuite il se pose un problème de sécurité, en effet il peut se produire des failles de SQL Injection.

Prennons une table classique d’utilisateurs :

db.JPG

Une simple table avec trois colonnes : Un identifiant, un nom et un prénom.

   1: // Variables quelconques
   2: String lastname = "Lavocat";
   3: String firstname = "Fabien"; 
   4:  
   5: // Chaîne de connexion à la base de données
   6: String cnxStr = System.Configuration.ConfigurationManager.ConnectionStrings[”cnx”].ConnectionString;
   7: // Requête SQL
   8: String sql = "INSERT INTO Users (user_lastname, user_firstname) VALUES ('" + lastname + "', '" + firstname + "')"; 
   9:  
  10: using (System.Data.SqlClient.SqlConnection cnx = new System.Data.SqlClient.SqlConnection(cnxStr))
  11: using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, cnx))
  12: {
  13:     try
  14:     {
  15:         // Ouverture de la connexion
  16:         cnx.Open(); 
  17:         
  18:         // Exécution de la requête sur la base de données
  19:         cmd.ExecuteNonQuery();
  20:     }
  21:     catch (Exception e)
  22:     {
  23:         Console.WriteLine("Erreur : " + e.Message);
  24:     }
  25:     finally
  26:     {
  27:         // Fermeture de la connexion
  28:         if (cnx.State == System.Data.ConnectionState.Open)
  29:             cnx.Close();
  30:     }
  31: } 

Et maintenant en ajoutant des paramètres :

   1: // Variables quelconques
   2: String lastname = "Lavocat";
   3: String firstname = "Fabien"; 
   4:  
   5: // Chaîne de connexion à la base de données
   6: String cnxStr = System.Configuration.ConfigurationManager.ConnectionStrings[”cnx”].ConnectionString;
   7: // Requête SQL avec paramètres
   8: String sql = "INSERT INTO Users (user_lastname, user_firstname) VALUES (@lastname, @firstname)"; 
   9:  
  10: using (System.Data.SqlClient.SqlConnection cnx = new System.Data.SqlClient.SqlConnection(cnxStr))
  11: using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, cnx))
  12: {
  13:     try
  14:     {
  15:         // Ajout des paramètres
  16:         cmd.Parameters.AddWithValue("lastname", lastname);
  17:         cmd.Parameters.AddWithValue("firstname", firstname);   // Ouverture de la connexion
  18:         cnx.Open();  // Exécution de la requête sur la base de données
  19:         cmd.ExecuteNonQuery();
  20:         }
  21:     catch (Exception e)
  22:     {
  23:         Console.WriteLine("Erreur : " + e.Message);
  24:     }
  25:     finally
  26:     {
  27:         // Fermeture de la connexion
  28:         if (cnx.State == System.Data.ConnectionState.Open)
  29:             cnx.Close();
  30:     }
  31: }

Vous remarquez la modification de la requête SQL. En effet j’ai rajouté deux paramètres qui sont des “variables” précédées d’un @.

   1: cmd.Parameters.AddWithValue("lastname", lastname);
   2: cmd.Parameters.AddWithValue("firstname", firstname); 

Ces deux lignes permettent d’affecter à ces paramètres des valeurs.
Note : Le caractère "@" n’est pas obligatoire ici.

Mots clés Technorati : ,,

Tags: ,

Exemples de code

Exemple de code : Propriétés automatiques (C# 3.5)

by Fabien Lavocat 23. March 2008 02:01

 

clip_image001En C#2.0, comment faisions-nous pour créer des attributs avec leurs propriétés associées ?

private String _myProperty;
 
public String MyProperty 
{ 
    get { return this._myProperty; } 
    set { this._myProperty = value; } 
}

Et voilà ce que le logiciel Reflector traduit à partir du code IL généré à la compilation :

private string _myProperty;
 
public string MyProperty 
{ 
    get 
      { 
        return this._myProperty; 
      } 
    set 
      { 
        this._myProperty = value; 
      } 
}

Vous remarquez que ce sont exactement les même lignes.
Nous allons maintenant utiliser la simplification d’écriture de C#3.5 :

public String MyProperty 
{ 
    get; 
    set; 
}

Il n’est désormais plus nécessaire de créer l’attribut privé ainsi que le contenu des méthodes get et set de la propriété.
Voilà ce que Reflector nous génére à partir du code IL :

public string MyProperty 
{ 
    [CompilerGenerated] 
    get 
      {
        return this.<myproperty>k__backingfield;
      }
    [CompilerGenerated]
    set 
      {
        this.<myproperty>k__BackingField = value;
      }
}

L’attribut [CompilerGenerated] qui est rajouté par le compilateur indique que c’est lui-même (le compilateur) qui as créé le contenu de la méthode. <myproperty>k__backingfield permet à la CLR de récupérer ou modifier la valeur auquel fait référence la propriété étant donné que tout à été généré par le compilateur.

Si vous ne connaissez pas Reflector, je vous conseille de jeter un coup d’oeil sur ce logiciel : http://www.aisto.com/roeder/dotnet/

 

Tags: ,

Exemples de code

About

Fabien Lavocat

Lavocat Fabien
Ingénieur Multimédia - TMM Communication



"Blog-Microsoft.fr is an independent blog and is not affiliated with, nor has it been authorized, sponsored, or otherwise approved by Microsoft Corporation."

Contactez-moi Send mail

MVP
Microsoft Most Valuable Professional
Client Application Development