Ejemplo n.º 1
0
 /// <summary>
 /// Insertion d'une page <see cref="TabDockerPage"/> pour héberger un contrôle client.
 /// </summary>
 /// <remarks>
 /// La gestion de l'image n'est prise en charge que si le contrôle <see cref="TabDocker"/>
 /// est associé à une liste d'images via la propriété <see cref="ImageList"/>.
 /// <br/>
 /// Si l'image est déterminée par un index ou par une clé, l'image doit déjà figurer dans la liste d'images <see cref="ImageList"/>.
 /// Si l'image est directement fournie (type <see cref="Image"/>), elle sera automatiquement ajoutée à la liste d'images <see cref="ImageList"/>.
 /// <br/>
 /// L'argument <paramref name="page"/> permet de fournir une page personnalisée pour héberger le client. 
 /// Cette page doit être une sous-classe de la classe <see cref="TabDockerPage"/>.
 /// </remarks>
 /// <param name="page">page destinée à héberger le client</param>
 /// <param name="client">contrôle client à héberger</param>
 /// <param name="text">libellé de l'onglet</param>
 /// <param name="imageOrIndexOrKey">image ou index d'image ou clé d'image à associer à l'onglet</param>
 /// <param name="select">si true, sélectionne la page créée</param>
 /// <returns>la page créée pour héberger le contrôle client</returns>
 public TabDockerPage ClientAdd( TabDockerPage page, Control client, string text, object imageOrIndexOrKey, bool select ) {
   if ( page == null ) throw new ArgumentNullException( "ClientAdd  : la référence sur la page d'hébergement est null", "page" );
   return DoAddClient( page, -1, client, text, imageOrIndexOrKey, select );
 }
Ejemplo n.º 2
0
 /// <summary>
 /// Ajoute une page après la dernière page.
 /// </summary>
 /// <param name="page">page à ajouter</param>
 /// <param name="select">si true, sélectionne la page ajoutée</param>
 /// <returns>la page insérée (valeur de l'argument page)</returns>
 public TabDockerPage PageAdd( TabDockerPage page, bool select ) {
   return DoPageInsert( -1, page, select );
 }
Ejemplo n.º 3
0
 /// <summary>
 /// Insère une page après la page actuellement sélectionnée.
 /// </summary>
 /// <remarks>
 /// Permet de contourner le fonctionnement incorrect de <see cref="TabControl.TabPageCollection.Insert(int,TabPage)"/>.
 /// </remarks>
 /// <param name="page">page à insérer</param>
 /// <param name="select">si true, sélectionne la page insérée</param>
 /// <returns>la page insérée (valeur de l'argument page)</returns>
 public TabDockerPage PageInsert( TabDockerPage page, bool select ) {
   return DoPageInsert( SelectedIndex + 1, page, select );
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Insère une page à la position index.
 /// </summary>
 /// <remarks>
 /// Permet de contourner le fonctionnement incorrect de <see cref="TabControl.TabPageCollection.Insert(int,TabPage)"/>.
 /// </remarks>
 /// <param name="index">index d'insertion de la page</param>
 /// <param name="page">page à insérer</param>
 /// <param name="select">si true, sélectionne la page insérée</param>
 /// <returns>la page insérée (valeur de l'argument page)</returns>
 public TabDockerPage PageInsert( int index, TabDockerPage page, bool select ) {
   return DoPageInsert( index, page, select );
 }
Ejemplo n.º 5
0
    /// <summary>
    /// Adjonction d'un contrôle à docker
    /// </summary>
    /// <param name="page">page à ajouter</param>
    /// <param name="tabIndex">position d'insertion de l'onglet</param>
    /// <param name="client">contrôle à docker</param>
    /// <param name="text">libellé de l'onglet</param>
    /// <param name="imageOrIndexOrKey">image ou index d'image ou clé d'image associée à l'onglet</param>
    /// <param name="select">si true, sélectionne la page créée</param>
    /// <returns>la référence sur la page créée</returns>
    private TabDockerPage DoAddClient( TabDockerPage page, int tabIndex, Control client, string text, object imageOrIndexOrKey, bool select ) {
     
      // préparer la nouvelle page
      page.Text = text;
      page.Client = client;
      client.Dock = DockStyle.Fill;

      // insérer la nouvelle page
      DoPageInsert( tabIndex, page, select );

      // gestion de l'image
      if ( imageOrIndexOrKey != null ) {
        if ( imageOrIndexOrKey is Image ) {
          if ( ImageList != null ) {
            ImageList.Images.Add( imageOrIndexOrKey as Image );
            page.ImageIndex = ImageList.Images.Count - 1;
          }
        }
        else if ( imageOrIndexOrKey is Icon ) {
          if ( ImageList != null ) {
            ImageList.Images.Add( imageOrIndexOrKey as Icon );
            page.ImageIndex = ImageList.Images.Count - 1;
          }
        }
        else if ( imageOrIndexOrKey is string ) {
          string imageKey = imageOrIndexOrKey as string;
          if ( !string.IsNullOrEmpty( imageKey ) ) page.ImageKey = imageKey;
        }
        else {
          int imageIndex = -1;
          try {
            imageIndex = (int) imageOrIndexOrKey;
          }
          catch ( Exception x ) {
            throw new ArgumentException( "L'argument doit être de type Image, Icon, string ou int", "imageOrIndexOrKey", x );
          }
          if ( imageIndex != -1 ) page.ImageIndex = imageIndex;
        }
      }

      // donner le focus au client si nécessaire
      if ( select && AutoFocusClient ) page.ActivatePage();

      // retourner la page créée
      return page;
    }
Ejemplo n.º 6
0
    /// <summary>
    /// Insère la page à la position spécifiée par index
    /// </summary>
    /// <remarks>
    /// Cette méthode est requise parce que le composant <see cref="TabControl"/> n'assume pas correctement
    /// cette fonctionnalité : les différentes méthodes Insert de TabPageCollection ne fonctionnent pas
    /// correctement lorsque le contrôleur de pages n'est pas visible. 
    /// <br/>
    /// Cette méthode aura en outre pour effet de déclencher les deux événements <see cref="TabControl.Selected"/> 
    /// et <see cref="TabControl.SelectedIndexChanged"/> lors de l'adjonction d'un onglet quand la collection des onglets
    /// est vide : aucun de ces deux événements n'est déclenché par le composant <see cref="TabControl"/>.
    /// </remarks>
    /// <param name="index">position d'insertion</param>
    /// <param name="page">page à insérer</param>
    /// <param name="select">si true, sélectionne la page insérée</param>
    /// <returns>la référence sur la page insérée</returns>
    protected TabDockerPage DoPageInsert( int index, TabDockerPage page, bool select ) {

      // validation de la page
      if ( page == null ) throw new ArgumentNullException( "page", "La référence sur la page à ajouter ou à insérer ne peut être null" );

      // Insertion en fin : simplement ajouter la page
      if ( TabCount == 0 || index < 0 || index >= TabCount ) {
        TabPages.Add( page );
        if ( select ) SelectedDockerTab = page;
        //if ( TabCount == 1 ) DoFireSelectEvents(); // déclencher Selected et SelectedIndexChanged // cf. OnControlAdded (30 11 2010)
        return page;
      }

      // mémoriser l'onglet sélectionné
      TabPage selected = SelectedTab;

      // nouvelles pages
      TabPage[] pages = new TabPage[ TabPages.Count + 1 ];

      // récupérer les pages figurant avant la position d'insertion
      for ( int ix = 0 ; ix < index ; ix++ )
        pages[ ix ] = TabPages[ ix ];

      // placer la nouvelle page
      pages[ index ] = page;

      // récupérer les pages figurant après la position d'insertion
      for ( int ix = index ; ix < TabPages.Count ; ix++ )
        pages[ ix + 1 ] = TabPages[ ix ];

      // remplacer les pages
      TabPages.Clear();
      TabPages.AddRange( pages );

      // restaurer ou modifier la sélection
      SelectedTab = select ? page : selected;

      // retourner la page elle-même
      return page;
    }