1) Vous devez écrire un code de hit-testing à utiliser dans l'événement de clic de souris. Vous devez vérifier l'emplacement à l'écran de chacun de vos objets afin de déterminer lequel (le cas échéant) des objets se trouvait "sous" le pointeur lorsque la souris a été cliquée. À partir de là, vous pouvez afficher le menu contextuel approprié pour la fonctionnalité que vous souhaitez mettre en œuvre.
2) Si vous souhaitez simplement sauvegarder les informations pour les rouvrir plus tard dans l'application, une simple sérialisation en XML ou en binaire fonctionnera parfaitement. Si l'intention est de rendre le contenu lisible par l'utilisateur, vous devrez écrire une simple exportation csv ou, si la sortie doit être plus complexe, un sérialiseur personnalisé.
Plus d'informations :
Le hit-testing est le terme général pour évaluer l'objet sur lequel on a cliqué. Par exemple, lorsque vous cliquez dans une DataGridView, la logique du hit-testing peut vous dire sur quelle cellule/ligne/colonne vous avez cliqué. De nombreuses classes de widgets, y compris DataGridView, possèdent une méthode HitTest qui renvoie un objet fournissant cette information. Si l'outil d'organigramme utilise un dessin personnalisé pour les objets connectés, vous devrez alors utiliser les coordonnées du clic pour déterminer sur quel élément de l'organigramme vous avez cliqué.
http://msdn.microsoft.com/en-us/library/system.Windows.forms.datagridview.hittest.aspx documente la méthode HitTest pour le DataGridView.
http://www.codeproject.com/KB/list/CSharpHitTest.aspx est un exemple de programme sur CodeProject qui fait de la logique de test dans une ListView.