Accueil > > > COMPOSANT QUI COLLE UNE FENÊTRE AUX BORDS DE L'ÉCRAN
COMPOSANT QUI COLLE UNE FENÊTRE AUX BORDS DE L'ÉCRAN
Information sur la source
Description
Ce petit composant tout bête permet de faire en sorte que la fenêtre se colle aux bords de l'écran si on la déplace trop près de ceux-ci.
Source
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel.Design;
using System.Drawing;
namespace EdgeGlue {
/// <summary>
/// Composant permettant le collage automatique d'une fenêtre sur les bords de l'écran.
/// </summary>
public partial class Patafix : Component {
private int _minLeft = 10;
private int _minRight = 10;
private int _minTop = 10;
private int _minBottom = 10;
private Form _ParentForm; // Page sur laquelle a été déposée le contrôle
/// <summary>
/// Permet de spécifier la marge minimum pour la gauche
/// </summary>
public int MinLeft {
set { _minLeft = value; }
get { return _minLeft; }
}
/// <summary>
/// Permet de spécifier la marge minimum pour la droite
/// </summary>
public int MinRight {
set { _minRight = value; }
get { return _minRight; }
}
/// <summary>
/// Permet de spécifier la marge minimum pour le haut
/// </summary>
public int MinTop {
set { _minTop = value; }
get { return _minTop; }
}
/// <summary>
/// Permet de spécifier la marge minimum pour le bas
/// </summary>
public int MinBottom {
set { _minBottom = value; }
get { return _minBottom; }
}
/// <summary>
/// Permet de définir/récupérer le contrôle parent
/// </summary>
[Browsable(false)]
public Form ParentForm {
// Accesseur en lecture
get {
// Si l'on est en mode design, alors on demande au designer de définir la propriété ParentForm avec
// le this de la form contenant l'instance du composant.
if(this.Site.DesignMode) {
IDesignerHost dh = (IDesignerHost)(this.GetService(typeof(IDesignerHost)));
if(dh != null) {
object obj = dh.RootComponent;
if(obj != null) {
_ParentForm = (Form)obj;
}
}
}
return _ParentForm;
}
// Accesseur en écriture
set {
if(value != null) {
_ParentForm = value;
this._ParentForm.Move += new EventHandler(_ParentForm_Move);
}
}
}
/// <summary>
/// Constructeur
/// </summary>
public Patafix() {}
/// <summary>
/// Survient lorsque l'utilisateur déplace la fenêtre
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void _ParentForm_Move(object sender, EventArgs e) {
if(_ParentForm.Location.X < _minLeft)
_ParentForm.Location = new Point(0, _ParentForm.Location.Y);
if(_ParentForm.Location.Y < _minTop)
_ParentForm.Location = new Point(_ParentForm.Location.X, 0);
if(Screen.GetWorkingArea(_ParentForm).Width - _ParentForm.Location.X - _ParentForm.Width < _minRight)
_ParentForm.Location = new Point(Screen.GetWorkingArea(_ParentForm).Width - _ParentForm.Width, _ParentForm.Location.Y);
if(Screen.GetWorkingArea(_ParentForm).Height - _ParentForm.Location.Y - _ParentForm.Height < _minBottom)
_ParentForm.Location = new Point(_ParentForm.Location.X, Screen.GetWorkingArea(_ParentForm).Height - _ParentForm.Height);
}
}
}
Conclusion
Ce code présente une utilisation de la fonction Screen.GetWorkingArea qui permet de savoir sur quel écran (s'il y en a plusieurs) se trouve une form.
Vous y trouvez également une utilisation du code de la source qui se trouve ici : http://www.csharpfr.com/code.aspx?ID=34875 La source en question décrit comment un composant non graphique peut détecter la form sur laquelle il est posé.
En soi, c'est pas compliqué, mais j'ai mis la chose en initié à cause de l'utilisation du IDesignerHost.
Sinon, vous noterez qu'il peut y avoir parfois un léger clignotement de la fenêtre si on la déplace près du bord... ben je sais pô comment résoudre ça.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
fenêtre Form [ par JCpp ]
Je voudrais déplacer la fenêtre Form automatiquement, ci je clique sur un bouton à la position (x-100,y+10) par exemplePour connaître la résolution de
[C#] Splash Screen [ par MickParadiseLost ]
Hello ! J'aimerais creer un splash screen qui ne sert pas uniquement au design mais qui charge le programme avec une barre de progression. De plus, j'
Dimension de l'écran [ par adomarle ]
Bonjour, Je souhaiterais récupérer les dimensions (largeur, hauteur) de l'écran pour adapter mes images à la taille de l'écra
Print screen Panel1 [ par cpadmin ]
Bonjours!Voilà j'ai dans ma form1 un panel qui contient plusieurs picturebox.J'ai avec cette forme un main menu avec un bouton enregistrer.Le travail
Print a panel avec plusieurs controls [ par D0X ]
Salut a tout le monde! J'ai un Panel au j'ai placé plusieurs Controls personnalisés. Voilà, je veux imprimer ce Panel. J'imagine que je dois construir
centrer une form à l'écran [ par ericdu93 ]
Bonjour,j'ai un premier form qui s'affiche par défaut en haut à gauche (sans être collé au bord), lorsque dans cette fenetre j'ouvre une deuxème fenet
pb full screen DirectX9 [ par 10demon10 ]
bonjour à tousVoila j'ai un petit soucis avec ma mise en pleine écran de mon apply voici les partis de codes concernées: public static void Init(Contr
Splash screen qui s'affiche que 1fois [ par MatHack_74 ]
Bonjour,Voilà, j'ai un petit problème et j'aimerais savoir comment faire :J'aimerais que quand une personne lance le programme une fenêtre avec un tex
splash screen [ par cudenetf ]
Bonjour, mon application met quelques temps a se lancer apres qu'on ai cliqué sur l'icone... meme si je met un splashscreen tout au debut du main :
|
Derniers Blogs
WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui l'ont sagement suivi. Je profite de ce poste pour fai...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVéTECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVé par ROMELARD Fabrice
Speaker : Guillaume Rochette Cette session est dédiée à fournir le retour sur la mise en place d'un cloud privé (IaaS) par Osiatis pour son compte ou celui de ses clients. Ce projet s'est déroulé sur 4 mois et a permis de faire évoluer...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|