Suite

Comment répertorier les délégués d'événements ActiveView SelectionChanged dans ArcObjects .NET ?

Comment répertorier les délégués d'événements ActiveView SelectionChanged dans ArcObjects .NET ?


J'ai actuellement un problème dans un complément ArcObjects ArcMap où mes gestionnaires d'événements sont apparemment décrochés de manière aléatoire de l'événement que j'essaie d'attraper. J'ai passé un certain temps à chercher un moyen de répertorier tous les délégués actuellement affectés à l'événement, mais je ne trouve pas de moyen d'appeler Delegate.GetInvocationList() à partir de l'interface de l'événement.

Lorsque mon complément est créé, j'exécute ce qui suit pour répondre à l'événement ActiveView SelectionChanged :

IActiveViewEvents_Event activeViewEvent = (IActiveViewEvents_Event)ArcMap.Document.FocusMap; activeViewEvent.SelectionChanged += new IActiveViewEvents_SelectionChangedEventHandler(this.onSelectionChanged);

Maintenant, je sais que ce gestionnaire d'événements sera perdu lorsque la vue active changera, j'ai donc également ceci :

IDocumentEvents_Event documentEvent = (IDocumentEvents_Event)ArcMap.Document; documentEvent.ActiveViewChanged += new IDocumentEvents_ActiveViewChangedEventHandler(this.onActiveViewChanged);

qui appelle le code précédent pour rajouter le gestionnaire d'événements SelectionChanged.

À des intervalles apparemment aléatoires, mon application cesse de répondre à l'événement SelectionChanged. Je m'arrête sur toutes les erreurs CLR, donc je suis sûr que ce n'est pas une exception silencieuse qui désactive mon complément.

Ce que j'aimerais vraiment, c'est pouvoir inspecter les délégués affectés à l'événement SelectionChanged et voir si le mien a besoin d'être rajouté, mais jusqu'à présent, aucune joie.

Toute suggestion sur ce qui pourrait ne pas aller ou sur la façon d'inspecter les gestionnaires d'événements assignés serait TRÈS appréciée !

ÉDITER:

J'ai depuis trouvé un modèle à la folie. Mon outil ne s'exécutera dans une session d'édition que si des fonctionnalités sont sélectionnées. Une façon de reproduire ce comportement consiste à 1) démarrer une session de mise à jour 2) sélectionner certaines entités 3) exécuter mon outil - copier les entités sélectionnées d'une couche à une autre 4) arrêter l'édition (peu importe que j'enregistre mes modifications ou not) 5) Maintenant, l'événement de modification de sélection n'est plus géré

Quelqu'un peut-il me dire pourquoi le démarrage puis l'arrêt de l'édition détacheraient les gestionnaires d'événements modifiés de ma sélection ?


Merci pour l'intérêt sur cette question. J'ai fini par utiliser une approche différente qui fonctionne mieux dans ma situation et est plus fiable.

À la place d'utiliserIActiveViewEvents::SelectionChangedJ'y suis allé avecIEditEvents::SelectionChangedcar j'avais seulement besoin de savoir si la sélection avait changé lors de l'édition. Comme l'objet éditeur ne change jamais, le gestionnaire d'événements n'est jamais perdu, il n'est donc pas nécessaire de réaffecter le gestionnaire.

J'ai passé un peu plus de temps à tester le problème d'origine et je suis assez convaincu qu'il s'agit d'un problème ArcObjects car je n'étais pas en mesure de le reproduire à chaque fois en utilisant exactement la même séquence d'événements.

J'aimerais quand même savoir si la liste des délégués peut être récupérée pour un événement ArcObjects mais pour l'instant mon problème d'origine est résolu.


J'ai récemment rencontré le même problème avec la fenêtre ancrable WPF. Ce problème a été résolu en utilisant un code d'extension ArcMap personnalisé à partir d'un complément d'exemple de sélection d'Esri.


Vous devez créer un gestionnaire d'événements pour le contrôle utilisateur qui est déclenché lorsqu'un événement à partir du contrôle utilisateur est déclenché. Cela vous permettra de remonter l'événement dans la chaîne afin que vous puissiez gérer l'événement à partir du formulaire.

Lorsque vous cliquez sur Button1 sur UserControl, je déclenche Button1_Click qui déclenche UserControl_ButtonClick sur le formulaire :

Les versions plus récentes de Visual Studio suggèrent qu'au lieu de if (this.ButtonClick!= null) this.ButtonClick(this, e) vous pouvez utiliser ButtonClick?.Invoke(this, e) , qui fait essentiellement la même chose, mais est plus court.

L'attribut Browsable rend l'événement visible dans le concepteur de Visual Studio (vue des événements), Category l'affiche dans la catégorie « Action » et Description en fournit une description. Vous pouvez omettre complètement ces attributs, mais les mettre à la disposition du concepteur est beaucoup plus confortable, car VS les gère pour vous.


Comment convertir un délégué de gestionnaire d'événements en un délégué avec une signature différente

Le code que j'écris est en fait un comportement WPF pour obtenir les éléments sélectionnés à partir d'un contrôle de grille (SelectedItems, comme nous le savons, n'est pas une propriété pouvant être liée). J'utilise en fait un Telerik RadGridView mais j'aimerais que le comportement soit général pour tout ce qui a un événement SelectionChanged. Cependant, différents contrôles ont des signatures différentes pour les gestionnaires d'événements SelectionChanged (RadGridView utilise Telerik.Windows.Controls.SelectionChangeEventArgs alors qu'un GridView standard utilise System.Windows.Controls.SelectionChangedEventArgs). La seule chose dont nous pouvons être sûrs est que les arguments d'événement seront dérivés de EventArgs (en fait, nous pouvons être sûrs qu'ils seront dérivés de RoutedEventArgs).

Cependant, alors que je peux écrire un gestionnaire d'événements général qui prend un RoutedEventArgs comme son deuxième paramètre, et je peux utiliser la réflexion pour obtenir l'EventInfo pour le SelectionChangedEvent, je ne peux pas accrocher le gestionnaire à l'événement sans utiliser la signature précise pour l'événement gestionnaire - dans ce cas, le gestionnaire RadGridView.

Voici mon code. J'ai tout inclus, mais le point important est SelectItemPropertyChanged, qui est le DependencyObject PropertyChangedCallback qui tente de connecter le gestionnaire d'événements SelectionChangedHandler à SelectionChangedEvent. (Le code dans SelectionChangedHandler n'est pas pertinent pour la question mais je l'ai laissé dedans donc ce que je fais est clair).

J'ai essayé toutes sortes de façons d'utiliser la réflexion pour obtenir la signature correcte pour le gestionnaire, et ainsi créer un délégué au bon type, mais je ne peux tout simplement pas le faire fonctionner - AddEventHandler (et RemoveEventHandler) lève une InvalidArgumentException, trace de pile complète comme suit :


7 réponses 7

Le contrôleur contrôle le flux d'activité. L'utilisateur effectue cette action, le contrôleur transmet les données de la vue au domaine qui fait tout ce qu'il doit faire puis, en fonction de la ou des réponses, le contrôleur indique au framework quelle vue afficher ensuite (et lui donne suffisamment de données à faire alors).

Le contrôleur doit donc être couplé au modèle de domaine, dans une certaine mesure. c'est à dire. Vous pourriez mettre une couche de service entre les deux mais, par définition stricte, cela fait partie du domaine.

Il est également couplé aux données de la vue mais pas à la vue elle-même. c'est à dire. il dit simplement « afficher la vue client à l'aide de ce détail client ». Le cadre décide alors où il doit trouver cette vue.

Cela devrait maintenant vous permettre de découpler le modèle de domaine de la vue, en utilisant un modèle de vue des mêmes données. Certains développeurs le font, d'autres non, et je pense que c'est en grande partie une question de préférence personnelle.

Dans Rails, vous êtes fortement encouragé à pousser les objets de domaine (ActiveRecord) vers la vue et à croire que la vue ne profite pas de cet accès (par exemple, vous ne devriez pas appeler customer.save à partir de la vue, même si cela serait disponible).

Dans le monde .NET, nous avons tendance à réduire les risques en ne permettant pas des choses qui ne devraient pas se produire et, peut-être pour cette raison, il me semble que le modèle de vue détachée est plus populaire.

Remarque : Robert C. Martin (alias Oncle Bob) explique cela d'une manière bien meilleure et humoristique dans son discours d'ouverture, Architecture the Lost Years. Un peu long mais enseigne plein de bons concepts.

tldr : Ne pensez pas et ne planifiez pas votre application en termes de MVC. Le framework MVC n'est qu'un détail d'implémentation.

La chose la plus déroutante à propos de MVC est que les développeurs essaient d'utiliser tous les composants collés ensemble.

Essayez de penser en termes de programme, pas en termes de cadre.

Votre programme a un but. Il prend des données, fait des choses avec des données et renvoie des données.

De cette façon, le contrôleur est le mécanisme de livraison de votre programme.

  1. Un utilisateur envoie une demande à votre programme (disons, ajoutez un produit au panier).
  2. Le contrôleur prend cette demande (informations sur le produit et informations sur l'utilisateur), il appelle la partie nécessaire de votre programme qui gérera cette demande $user->addToCart($product)
  3. Votre programme (fonction addToCart de l'objet utilisateur dans ce cas) fait le travail qu'il est censé faire et renvoie une réponse (disons succès)
  4. Le contrôleur prépare la réponse en utilisant la vue appropriée : ex. dans l'objet contrôleur $this->render($cartView('success')

De cette façon, les contrôleurs sont découplés du programme et utilisés comme mécanisme de livraison. Ils ne savent pas comment fonctionne votre programme, ils savent juste quelle partie du programme doit être appelée pour les requêtes.

Si vous souhaitez utiliser un autre framework, votre application n'aura pas besoin d'être modifiée, il vous suffira d'écrire les contrôleurs appropriés pour appeler votre programme pour les requêtes.

Ou si vous souhaitez créer une version de bureau, votre application restera la même, il vous suffira de préparer un mécanisme de livraison.

Et le modèle. Considérez-le comme un mécanisme de persistance.

À la manière OO, il y a des objets dans votre programme qui contiennent les données.

Lorsque vous ajoutez un produit au panier, vous pouvez ajouter le produit::id à l'utilisateur::shoppingCart .

Et lorsque vous souhaitez conserver les données, vous pouvez utiliser la partie modèle du framework, qui consiste généralement à utiliser un ORM, pour mapper les classes aux tables de la base de données.

Si vous souhaitez modifier l'ORM que vous utilisez, votre programme restera le même, seules les informations de mappage changeront. Ou si vous voulez éviter toutes les bases de données, vous pouvez simplement écrire les données dans des fichiers en texte brut, et votre application restera la même.

Alors, écrivez d'abord votre programme. Si vous programmez avec la méthode 'OO', utilisez de simples objets anciens du langage. Ne pensez pas en termes de MVC au début.

Martin Fowler décrit bien le paradigme MVC. Voici un lien vers son article à ce sujet http://martinfowler.com/eaaDev/uiArchs.html

Notez sa citation sur la présentation séparée "L'idée derrière la présentation séparée est de faire une distinction claire entre les objets de domaine qui modélisent notre perception du monde réel et les objets de présentation qui sont les éléments GUI que nous voyons à l'écran."

Voici un exemple simple de la façon dont MVC peut être utilisé dans une application Java Swing typique.

Disons que vous avez un Panel contenant un Button et un TextField. Lorsque le bouton est enfoncé, un événement est déclenché, entraînant un changement d'état dans l'application. Une fois le changement d'état enregistré, le TextField est désactivé.

Ce serait donc l'approche typique adoptée par une simple application MVC .

Le Contrôleur s'enregistre en tant qu'auditeur des événements de la Vue. Lorsque le bouton est cliqué, la vue elle-même ne gère pas l'événement que fait le contrôleur. Le contrôleur est spécifique au Swing car il doit gérer les événements liés au Swing.

Le Contrôleur reçoit cette notification et doit décider qui doit la gérer (La Vue ou le Modèle). Puisque cet événement va changer l'état de l'application, il décide de transmettre les informations au Modèle qui est responsable des données et de la logique du programme. Certains font l'erreur de placer la logique du programme dans le contrôleur, mais dans la POO, les modèles représentent à la fois les données ET le comportement. Lisez Martin Fowler sur son point de vue.

Le message est reçu par le modèle dans le contexte approprié. C'est-à-dire qu'il est complètement dépourvu de toute référence à Swing ou à toute autre référence spécifique à l'interface graphique. Ce message s'adresse au modèle et UNIQUEMENT au modèle. Si vous vous retrouvez à importer des instructions javax.swing dans le modèle, vous ne codez pas correctement le modèle.

Le modèle définit ensuite son état sur « désactivé » et procède à la notification de toute partie intéressée de ce changement de modèle. The View, intéressé par cet événement, s'est déjà inscrit en tant qu'Observateur de tout changement de modèle. Une fois que l'événement de changement d'état du modèle est détecté par la vue, elle procède à la désactivation de son champ de texte. Il est également légal pour la vue d'obtenir des informations en lecture seule directement à partir de son modèle sans avoir à passer par le contrôleur (généralement via une interface spécifique exposée par le modèle pour une telle activité)

En favorisant un tel couplage lâche entre la présentation et la logique métier et les couches de données, vous constaterez que votre code est beaucoup plus facile à maintenir. Au fur et à mesure que les systèmes grandissent, votre approche du MVC évoluera également. Par exemple, Hierarchical MVC est une extension souvent utilisée pour relier des triades MVC ensemble pour former de grands systèmes à l'échelle de l'entreprise sans coupler les sous-systèmes ensemble.


EventArgs générique pour aller avec EventHandler générique ?

Il existe depuis .NET 2.0 un type de délégué EventHandler générique, qui peut être utilisé pour définir un événement en termes de type EventArgs que vous souhaitez utiliser, sans avoir à créer un type de délégué redondant à utiliser dans la déclaration d'événement.

Eh bien, qu'en est-il des EventArgs ? Je me retrouve souvent à devoir créer des éléments uniques dérivés d'EventArgs pour encapsuler des données supplémentaires que je souhaite envoyer. Pourquoi cela ne peut-il pas être déclaré de manière générique également? Si tout ce que je dois transmettre est une chaîne, un entier ou un point, pourquoi dois-je créer respectivement une classe StringEventArgs , IntEventArgs et/ou PointEventArgs ?

J'ai défini deux types génériques très basiques d'EventArgs comme preuve de concept :

La différence évidente est de savoir si vous voulez que les gestionnaires d'événements puissent modifier vos arguments. Parfois, c'est une bonne idée, la plupart du temps moins bonne. L'utilisation ressemblerait simplement à :

Maintenant, évidemment, ce sont des situations plus simples, mais j'ai trouvé que la plupart des situations de déclenchement d'événements étaient assez simples. La seule chose possible que j'ajouterais serait deux autres classes dérivées de CancelEventArgs pour ajouter cette fonctionnalité supplémentaire. Le fait que le paramètre puisse être n'importe quoi, y compris une classe, le rend suffisamment flexible pour transmettre des données complexes, et les tuples de .NET 4 prennent en charge les situations restantes où vous ne voudrez peut-être pas définir votre propre type complexe. Le seul inconvénient auquel je peux penser est de ne pas pouvoir nommer de manière descriptive votre paramètre, c'est générique.


Comment répertorier les délégués d'événements ActiveView SelectionChanged dans ArcObjects .NET ? - Systèmes d'information géographique

j'ai des problèmes avec le Zone de tabulation outil.

Les polygones de mon fichier de formes se chevauchent et à cause de cela, ArcMap ne calcule pas les valeurs appropriées.

J'essaie de résoudre ce problème en utilisant ModelBuilder où il est possible de faire le Zone de tabulation pour chaque polygone séparément, mais à la fin, je voudrais combiner les lignes en un seul tableau.

J'ai pensé que la solution pourrait être le seul outil de modèle appelé Collecter des valeurs?

Quelqu'un peut-il m'aider à ajouter des lignes à une table ou à enregistrer chacune Zone de tabulation résultat sous des noms différents ?

J'espère que la question est compréhensible. Sinon, je vais essayer de le réécrire.

Voici le résultat qui a fonctionné pour moi. J'ai quand même dû utiliser R plus tard pour combiner les fichiers dbf en un seul fichier long.

Srtm - Extraction de l'élévation du fichier .HGT ?

Je souhaite attribuer une position longue/lat spécifique sur une carte à l'altitude à partir des fichiers de données SRTM3, mais je ne sais pas comment trouver la valeur spécifique. Je veux donc un exemple de la façon dont je peux trouver dans l'élévation N50E14.hgt à 50䓘'58.888"N, 14䓷'11.377"E.

Je vais le prendre comme un petit exercice sur la façon de programmer un lecteur de données. Jetez un œil à la documentation :

Les données SRTM sont réparties en deux niveaux : SRTM1 (pour les États-Unis et leurs territoires et possessions) avec des données échantillonnées à des intervalles d'une seconde d'arc en latitude et longitude, et SRTM3 (pour le monde) échantillonnées à trois secondes d'arc.


Les données sont divisées en tuiles de latitude et longitude un par un en projection "géographique", c'est-à-dire une présentation raster avec des intervalles égaux de latitude et de longitude dans aucune projection mais facile à manipuler et mosaïque.


Les noms de fichiers font référence à la latitude et à la longitude du coin inférieur gauche de la tuile - par ex. N37W105 a son coin inférieur gauche à 37 degrés de latitude nord et 105 degrés de longitude ouest. Pour être plus précis, ces coordonnées se réfèrent au centre géométrique du pixel inférieur gauche, qui dans le cas des données SRTM3 aura une étendue d'environ 90 mètres.


Les fichiers de hauteur ont l'extension .HGT et sont des entiers signés sur deux octets. Les octets sont dans l'ordre "gros-boutiste" de Motorola avec l'octet le plus significatif en premier, directement lisibles par des systèmes tels que les ordinateurs Sun SPARC, Silicon Graphics et Macintosh utilisant des processeurs Power PC. DEC Alpha, la plupart des PC et ordinateurs Macintosh construits après 2006 utilisent l'ordre Intel ("petit-boutiste"), donc un échange d'octets peut être nécessaire. Les hauteurs sont en mètres référencées au géoïde WGS84/EGM96. Les données vides reçoivent la valeur -32768.


Pour votre position, 50䓘'58.888"N 14䓷'11.377"E, vous avez déjà trouvé la bonne tuile, N50E14.hgt. Voyons quel pixel vous intéresse. Première latitude, 50䓘'58.888"N :

secondes d'arc. Divisé par trois et arrondi à l'entier le plus proche, on obtient une ligne de grille de 500. Le même calcul pour la longitude donne la colonne de grille 1104.

La documentation de démarrage rapide manque d'informations sur la façon dont les lignes et les colonnes sont organisées dans le fichier, mais dans la documentation complète, il est indiqué que


Les données sont stockées dans l'ordre principal des lignes (toutes les données de la ligne 1, suivies de toutes les données de la ligne 2, etc.)


La première ligne du fichier est très probablement la plus au nord, c'est-à-dire si nous sommes intéressés par la ligne 500 du bord inférieur, nous devons en fait regarder la ligne

depuis le début si le fichier. Notre cellule de grille est nombre

dès le début du fichier (c'est-à-dire sauter 700 lignes, et dans la 701e prendre l'échantillon 1104). Deux octets par échantillon signifient que nous devons ignorer les 1683606 premiers octets du fichier, puis lire deux octets afin d'obtenir notre cellule de grille. Les données sont big-endian, ce qui signifie que vous devez échanger les deux octets, par ex. plates-formes Intel.

Un programme Python simpliste pour récupérer les bonnes données ressemblerait à ceci (voir la documentation pour l'utilisation du module struct) :

Notez qu'une récupération de données efficace devrait avoir l'air un peu plus sophistiquée (par exemple, ne pas ouvrir le fichier pour chaque échantillon).

Vous pouvez également utiliser un programme capable de lire les fichiers .hgt prêts à l'emploi. Mais c'est ennuyeux.

Erreur lors de l'importation du fichier Shapefile vers PostGIS à l'aide de l'interface graphique de l'importateur

J'essaie d'importer un fichier de formes dans une base de données PostGIS à l'aide de l'importateur graphique. Je viens d'installer POSTGRESQL et PostGIS. L'interface graphique ressemble à ceci :

Après avoir vérifié que ma base de données fonctionnait, j'ai choisi le fichier de formes que je voulais télécharger, puis j'ai reçu un message indiquant qu'il n'avait pas pu être importé. J'ai essayé de modifier quelques paramètres, mais je ne suis pas sûr de ce que je fais.

Existe-t-il de bons tutoriels ou des instructions sur la façon de procéder? J'utilise Windows 7 64 bits.

J'ajoute juste un peu plus de mon message d'erreur.


Échec de l'importation du fichier de formes.Connexion : host=localhost port=5432 user=postgres password='******' Destination : public.Area Fichier source : D:filesArea Type de fichier de forme : Polygon Type Postgis : MULTIPOLYGON[2] Échec SQL commence : "SET CLIENT_ENCODING TO UTF8 SET STANDARD_CONFORMING_STRINGS TO ON BEGIN CREATE TABLE "public".."Area" (gid serial PRIMARY KEY, "fid_1" int4, "area" numérique, "dtm" float8, "dsm" float8, "hgt" float8, "nat_area" numérique, "nat_peri" numérique, "nat_vol" num" Échec dans pgui_exec() : ERREUR : le type "geography" n'existe pas LIGNE 14 : "the_geom" géographie(MULTIPOLYGON,4326)) ^


Échec de l'importation du fichier de formes.


J'ai essayé d'exécuter la suggestion de @MerseyViking, puis de l'importer à nouveau. Dans la colonne Geometry Column : j'ai choisi MULTIPOLYGON, puis j'ai essayé d'importer le fichier de formes projeté. Les erreurs suivantes sont apparues :

Ensuite, j'ai essayé de cocher la case de la colonne Charger dans GEOGRAPHIE dans Options et j'ai reçu l'erreur suivante :

Les deux messages d'erreur sont identiques et je ne les comprends pas très bien.

Le message que vous obtenez est que "type géographie n'existe pas". Cela signifie soit que vous n'avez pas installé correctement postgis, soit que vous utilisez une ancienne version ? Le type de données Géographie a été introduit dans la version 1.5

Arcpy - Sélection de fonctionnalités par attribut si dans la liste Python ?

J'essaie de terminer une sélection par attribut en Python mais en me basant sur la question de savoir si un attribut est présent dans une liste.

Une telle requête dans sa forme la plus simple devrait ressembler à ceci :

mais cette approche renvoie une erreur d'expression non valide.

Dans le passé, j'ai dû utiliser une syntaxe plus compliquée pour ce type de requête, telle que :

mais une adaptation de cet extrait ne semble pas fonctionner pour moi non plus, c'est-à-dire :

Votre requête d'origine a peut-être été modifiée pour une liste d'entiers :

donc si oid_list = [7, 9, 4, 8] , alors le résultat est :

Sachez que cette "astuce" fonctionne si oid_list a toujours deux éléments ou plus, car d'autres tuples valides, tels que () ou (7,) , entraîneront une erreur de syntaxe SQL.

Une expression plus générique qui gérerait également zéro ou un élément oid_list serait :

Point - Trouver le sommet de ligne le plus proche de la chaîne de lignes à l'aide de PostGIS

Comment trouver le sommet de ligne le plus proche à partir d'une chaîne de lignes ? ST_ClosestPoint donnera un point qui ne provient pas de la chaîne de lignes.

Bureau arcgis - Affichage de deux emplacements sur la carte plus proches l'un de l'autre qu'ils n'utilisent réellement ArcMap ?

Je travaille sur ArcMap 10.2.2.

J'ai besoin d'imprimer deux cartes pour trois municipalités, une ville (Florence, Italie) et deux villes plus petites (Signa et Impruneta) dans ses environs. Une carte avec la ville et l'autre avec les deux villes (ça ne vaut pas la peine d'avoir une carte pour chacune de ces deux villes).

Je veux que les cartes aient la même échelle et s'adaptent au papier et elles doivent être complètes de polygones de frontières, de fond de carte (uniquement affiché dans les limites des municipalités, laissant le reste du papier vierge) et d'entités ponctuelles représentant mes données. La voie à suivre est de zoomer sur le calque en mode carte, puis définissez la mise en page comme je le souhaite, en adaptant la carte aux marges du papier. J'ai également découpé le bloc de données sur la forme des bordures afin d'afficher le fond de carte uniquement à l'intérieur des bordures.

Le problème est que les deux villes sont situées dans des positions différentes autour de la ville, ce qui entraîne un grand espace vide laissé par la ville sur la deuxième carte (carte des deux villes). De plus, puisque je veux que l'échelle des deux cartes soit la même, les deux villes tomberaient partiellement en dehors de l'étendue du papier. Ainsi, j'ai décidé de déplacer les points et la frontière d'une ville près de l'autre et de tracer une ligne en pointillé entre eux pour indiquer clairement que ce n'est pas leur position relative (j'ai également mis une carte plus petite pour montrer leurs positions réelles).

Je sais que cela signifie modifier les données (modifier les coordonnées des points etc) de la ville que j'ai déménagé et ce n'est peut-être pas la meilleure façon de procéder (j'aimerais des conseils à ce sujet), mais j'ai obtenu le résultat que je cherchais . À l'exception de. le fond de carte !

Le découpage du bloc de données ne crée pas une nouvelle entité découpée, il masque simplement ce qui se trouve en dehors de la zone de découpage. Ainsi, alors que j'ai pu déplacer des points et des bordures, le fond de carte affiché à l'intérieur de la bordure n'est tout simplement pas la bonne zone. Et c'est naturel, car je suppose qu'il n'y a aucun moyen de déplacer des morceaux de fond de carte, à moins qu'il n'y ait un moyen d'exporter le morceau de fond de carte souhaité sous forme graphique ou raster peut-être (?!).

J'espère que je l'ai expliqué assez clairement, mais les trois images ci-dessous pourraient aider à donner une meilleure idée: la première image montre la carte avec Florence, la deuxième image montre la carte avec les deux petites villes (la frontière de Signa contient le fond de carte d'une mauvaise zone) et la troisième carte montre les positions relatives des trois municipalités dans la réalité.


Comment répertorier les délégués d'événements ActiveView SelectionChanged dans ArcObjects .NET ? - Systèmes d'information géographique

Un objet Map est un conteneur de données cartographiques. Un objet Map contient des couches de données d'entités et graphiques.

Ce qui suit est vrai pour le modèle d'application ArcMap. Les développeurs créant leur propre application peuvent trouver certaines choses différentes.

Chaque document ArcMap contient au moins un objet Map. Une seule carte peut avoir le focus à la fois et cette carte est appelée carte de focus. Une propriété FocusMap est commodément placée sur l'interface IMxDocument. IMxDocument possède également une propriété Maps qui renvoie une référence ( IMaps ) à l'ensemble de la collection de Maps. Avec IMaps, vous pouvez créer ou supprimer des cartes ou obtenir une référence à une carte existante.

Toutes les couches d'une carte partagent la même référence spatiale. La référence spatiale de la carte est automatiquement définie sur la référence spatiale de la première couche chargée. Les nouvelles couches chargées dans une carte sont projetées sur la référence spatiale de la carte si leur référence spatiale est différente.

Les Maps sont contenues dans MapFrames - l'objet PageLayout a un MapFrame et un MapFrame a une Map. Chaque carte, à son tour, a une collection de couches et de MapSurrounds. Chaque MapSurround est également associé à un MapSurroundFrame. Il existe plusieurs types de calques, notamment FeatureLayers, FDOGraphicsLayers et GroupLayers. Les MapSurrounds incluent les légendes, les NorthArrows et les ScaleBars.

Chaque carte a une couche graphique de base où tous les graphiques, y compris les étiquettes, sont dessinés par défaut. Les utilisateurs peuvent créer des couches graphiques supplémentaires appelées groupes ou couches cibles d'annotation, qui sont toutes gérées par CompositeGraphicsLayer.

La disponibilité des produits

Plateformes prises en charge

Voir aussi : com.esri.arcgis.carto.IMxDocument , Formulaire sérialisé

Résumé du constructeur
Carte ()
Construit une carte à l'aide d'ArcGIS Engine.
Carte (objet objet)
Obsolète. À partir d'ArcGIS 9.2, remplacé par des transtypages Java normaux.
Map theMap = (Carte) obj
Résumé de la méthode
annuler activer (int hWnd)
Donne à cette vue le contrôle de la fenêtre spécifiée.
annuler addBookmark (IspatialBookmark signet)
Ajoute un signet à la collection.
annuler addElement (élément IElement, int zorder)
Ajoutez un nouvel élément graphique au calque.
annuler addElements (éléments IElementCollection, int zorder)
Ajoutez de nouveaux éléments graphiques au calque.
annuler addIActiveViewEventsListener (IActiveViewEvents theListener)
addIActiveViewEventsListener.
annuler addIDynamicMapEventsListener (IDynamicMapEvents theListener)
addIDynamicMapEventsListener.
annuler addIMapEventsListener (IMapEvents theListener)
addIMapEventsListener.
annuler addLayer (couche ILayer)
Ajoute une couche à la carte.
annuler addLayers (couches IEnumLayer, arrangement automatique booléen)
Ajoute plusieurs couches à la carte, en les organisant correctement si spécifié.
annuler addMapSurround (IMapSurround mapSurround)
Ajoute un contour de carte à la carte.
annuler addStandaloneTable (table IStandaloneTable)
Ajoute une table autonome à la collection.
annuler addTable (table ITable)
Ajoute une table à la collection.
annuler animationRefresh (phase int, données d'objet, enveloppe IEnvelope)
À utiliser pour redessiner rapidement une phase qui possède son propre cache, c'est-à-dire une couche de suivi.
annuler animationRefreshShape (phase int, données d'objet, géométrie IGeometry, double symbolSizePoints)
À utiliser pour redessiner rapidement une phase qui possède son propre cache, c'est-à-dire une couche de suivi.
annuler boundsUpdated (ITransformEventsBoundsUpdatedEvent l'événement)
Avertit les clients lorsque les limites sont mises à jour.
annuler bringForward (éléments IEnumElement)
Déplace les éléments spécifiés d'un cran vers le haut de la pile d'éléments.
annuler bringToFront (éléments IEnumElement)
Faire dessiner les éléments spécifiés devant tous les autres éléments.
annuler buildCache ()
Construisez le cache spatial.
annuler dégager ()
Vide le contenu de la vue.
annuler clearCalques ()
Supprime toutes les couches de la carte.
annuler clearMapSurrounds ()
Supprime tous les contours de la carte de la carte.
annuler clearMasking (couche ILayer)
Effacer les calques de masquage sur un calque.
annuler effacerSélection ()
Efface la sélection de carte.
booléen completeRedrawNeeded ()
Vérifiez si un remaniement complet est nécessaire.
double calculerDistance (IPoint p1, IPoint p2)
Calcule la distance entre deux points sur la carte et renvoie le résultat.
ITimeExtent calculerFullTimeExtent ()
Renvoie l'étendue temporelle complète des couches temporelles dans la carte.
annuler contenuChangé ()
Appelé par les clients lorsque les objets de vue sont modifiés.
I MapSurround createMapSurround (IUID clsid, IMapSurround optionnelStyle)
Créez et initialisez un contour de carte.
annuler désactiver ()
Une autre vue reprend la fenêtre associée.
annuler delayDrawing (délai booléen)
Suspend le dessin.
annuler delayEvents (délai booléen)
Utilisé pour regrouper les opérations afin de minimiser les notifications.
annuler deleteAllElements ()
Supprimez tous les éléments.
annuler deleteElement (élément IElement)
Supprimer l'élément donné.
annuler deleteLayer (calque ILayer)
Supprime une couche de la carte.
annuler deleteMapSurround (IMapSurround mapSurround)
Supprime un contour de carte de la carte.
annuler deviceFrameUpdated (ITransformEventsDeviceFrameUpdatedEvent theEvent)
Avertit les clients lorsque le cadre de l'appareil est mis à jour.
annuler displayFinished (IDisplayEventsDisplayFinishedEvent theEvent)
Avertit les clients lorsque le dessin est terminé.
annuler displayInvalidated (IDisplayEventsDisplayInvalidatedEvent theEvent)
Avertit les clients lorsque l'affichage est invalidé.
annuler displayScrolled (IDisplayEventsDisplayScrolledEvent l'événement)
Avertit les clients lorsque l'affichage défile.
annuler displayStarted (IDisplayEventsDisplayStartedEvent theEvent)
Avertit les clients lorsque le dessin commence.
annuler dessiner (int hdc, ITrackCancel trackCancel)
Dessine la vue dans le contexte de périphérique spécifié.
booléen elementSelected (élément IElement)
Indique si l'élément est sélectionné.
annuler VideCache ()
Videz le cache de la carte.
annuler enumConnectionPoints (IEnumConnectionPoints[] ppEnum)
enumPointsConnexion
booléen est égal à (Objet o)
Comparez cet objet avec un autre
annuler findConnectionPoint (GUID riid, IConnectionPoint[] ppCP)
findConnectionPoint
IFrameElement findFrame (Objet frameObject)
Recherchez le cadre qui contient l'objet spécifié.
IEnumRelationshipClass findRelationshipClasses (IObjectClass objectClass, rôle int)
Recherche toutes les classes de relations dans la collection qui font référence à la classe d'objet donnée dans le rôle spécifié.
annuler fireAfterDraw (int hdc)
Déclencher l'événement AfterDraw(esriViewForeground).
annuler fireChangeFeatureClass (IFeatureClass oldClass, IFeatureClass newClass)
Avertit les auditeurs que la classe d'une couche a changé.
annuler fireChangeTable (ITable oldTable, ITable newTable)
Avertit les auditeurs que la classe d'une couche a changé.
annuler fireChangeVersion (IVersion ancienneVersion, IVersion nouvelleVersion)
Avertit les auditeurs qu'une version de la carte a changé.
annuler fireLayerAdded (couche ILayer)
Avertit les auditeurs qu'une couche a été ajoutée à la carte.
annuler fireLayerDeleted (couche ILayer)
Avertit les auditeurs qu'une couche a été supprimée de la carte.
annuler fireLayerReordered (couche ILayer, int toIndex)
Avertit les auditeurs qu'une couche a été réorganisée sur la carte.
annuler forceGraphicSelectionDraw ()
Appelez avant d'utiliser Output pour que la sélection graphique soit dessinée.
ILayer getActiveGraphicsLayer ()
La couche graphique active.
IActiveView obtenirVueActive ()
L'objet Carte.
IAnnotateMap getAnnotationEngine ()
Le moteur d'annotation (étiquette) que la carte utilisera.
IEnveloppe getAutoExtentBounds ()
Les limites de la carte affichées par le cadre.
IFeatureCalque getAutoExtentLayer ()
Fonctionnalités d'extension automatique.
ICarte getAutoExtentMap ()
Carte d'étendue automatique.
double getAutoExtentMargin ()
Marge d'étendue automatique.
entier getAutoExtentMarginUnits ()
Unités de marge d'étendue automatique.
double getAutoExtentScale ()
L'échelle à laquelle la carte doit être affichée.
entier getAutoExtentType ()
Manière dont l'étendue de la carte du cadre est spécifiée.
IBarrierCollection getBarriers (IEnvelope pExtent)
La liste des barrières et leur poids pour l'étiquetage.
IBarrierCollection getBarriers2 (IEnvelope pExtent, ITrackCancel pTrackCancel)
La liste des barrières et leur poids pour l'étiquetage.
IBarrierCollection getBarriers3 (IEnvelope pExtent, double échelle, ITrackCancel pTrackCancel)
La liste des barrières et leur poids pour l'étiquetage.
IGraphicsLayer getBasicGraphicsLayer ()
La couche graphique de base.
IEnumSpatialFavori obtenirFavoris ()
Les signets.
IEnveloppe getCacheExtent ()
Étendue actuelle du cache.
annuler getClassID (GUID[] pClassID)
getClassID
IBordre getClipBorder ()
Une bordure facultative dessinée autour de ClipGeometry.
Objet getClipData ()
Définit ou renvoie des données de type de clip étendu, c'est-à-dire une autre carte lorsque le type est esriMapClipMapExtent.
IDéfinir getClipFilter ()
Définit ou renvoie l'ensemble de calques qui seront exclus de l'écrêtage.
Igéométrie getClipGeometry ()
Forme sur laquelle les couches de la carte sont découpées.
entier obtenirTypeClip ()
Méthode utilisée pour découper les couches dans la carte.
chaîne statique getClsid ()
getClsid.
annuler getContextMenu (double x, double y, IUID[] clsidMenu)
Appelé lorsqu'un menu contextuel doit être affiché à l'emplacement xy donné.
Chaîne de caractères getCopyrightText ()
Informations de copyright associées à la carte.
ITimeExtent getCurrentTimeExtent ()
L'étendue temporelle actuelle de la carte.
double getDefaultTimeInterval ()
Intervalle de temps à utiliser par le curseur temporel pour animer la carte.
entier getDefaultTimeIntervalUnits ()
Unités d'intervalle de temps à utiliser pour animer la carte.
double getDefaultTimeWindow ()
La fenêtre de temps utilisée pour afficher les données sur la carte.
Chaîne de caractères obtenirDescription ()
Description de la carte.
Chaîne de caractères getDisplayDateFormat ()
Le format de la date qui s'affiche sur la glissière temps.
entier getDisplaySpeed ​​()
La vitesse du curseur sur une échelle de 1 à 10, 10 étant la plus rapide.
Chaîne de caractères getDisplayTimeFormat ()
Le format de l'heure qui s'affiche sur la glissière temps.
entier getDistanceUnits ()
Les unités de distance pour la carte.
ILayer getDomainDefiningLayer ()
Renvoie la couche qui définit le domaine de la carte, 0 si domaine est l'union de toutes les couches.
Élément IE getDominantElement ()
Élément dominant.
entier getDynamicDrawRate ()
Le taux de tirage dynamique en millisecondes.
Objet getElementOrder (éléments IEnumElement)
Objet de commande privée.
ISélection getElementSelection ()
Objet à utiliser pour la sélection d'éléments.
entier getElementSelectionCount ()
Le nombre d'éléments sélectionnés.
baliseRECT getExportFrame ()
Le rectangle de périphérique à exporter.
IEnveloppe getExtent ()
Le rectangle d'étendue visible.
IExtentStack getExtentStack ()
La pile d'étendue.
ISélection getFeatureSelection ()
La sélection d'entités pour la carte.
ICarte getFocusMap ()
La carte sur laquelle les outils et les commandes agissent.
IEnveloppe getFullExtent ()
L'étendue complète du rectangle.
ITimeExtent getFullTimeExtent ()
Renvoie l'étendue temporelle complète des couches temporelles dans la carte.
IGeoTransformationOperationSet getGeographicTransformations ()
Transformations géographiques à la volée.
IGraphicsConteneur getGraphicsContainer ()
Le conteneur graphique actif.
ILayer getLayer (index int)
La couche à l'indice donné.
entier getLayerCount ()
Nombre de couches dans la carte.
IEnumCalque getLayers (UID UID, récursif booléen)
Les couches de la carte du type spécifié dans l'uid.
Chaîne de caractères getLevelMasking (ILayer maskedLayer, ILayer maskingLayer)
Les niveaux de symboles pour lesquels le masquage s'applique.
annuler getLockedPan (indicateur booléen[])
Vérifiez si la carte peut être panoramique.
annuler getLockedZoom (drapeau booléen[])
Vérifiez si la carte peut être agrandie.
ICarte obtenirCarte ()
L'objet Carte.
double getMapScale ()
L'échelle de la carte en tant que fraction représentative.
I MapSurround getMapSurround (index int)
La carte entoure à l'index donné.
entier getMapSurroundCount ()
Nombre de contours de carte associés à la carte.
entier getMapUnits ()
Les unités de la carte.
IDéfinir getMaskedLayers ()
L'ensemble des calques qui sont masqués.
IDéfinir getMaskingLayers (couche ILayer)
Les masques d'un calque.
double getMaxScale ()
L'échelle maximale du cache à construire.
Chaîne de caractères obtenirNom ()
Nom de la carte.
IArrière-plan getNonFrameBackground ()
Spécifiez l'arrière-plan à utiliser lors du dessin vers des destinations autres qu'un cadre.
entier getOutputBandSize ()
Taille allouée pour chaque bande lors de la sortie de bande.
IOverposterPropriétés getOverposterProperties ()
L'affiche que la carte utilisera pour l'étiquetage.
IPageLayout getPageLayout ()
L'objet PageLayout.
annuler getPageSize (double[] widthInches, double[] heightInches)
Obtient la taille de la page pour la carte.
entier getPlayOption ()
L'option de lecture (Stop, Reverse, Repeat) utilisée par le curseur après que la visualisation de l'heure a été jouée une fois.
double getReferenceScale ()
L'échelle de référence de la carte en tant que fraction représentative.
IEnumRelationshipClass getRelationshipClasses ()
Les classes de relations de mémoire.
court getScreenCacheID (phase int, données d'objet)
ID de cache d'écran utilisé pour dessiner la phase spécifiée.
IScreenAffichage getScreenDisplay ()
L'affichage à l'écran utilisé par la vue.
IEnumElement getSelectedElements ()
Les éléments sélectionnés.
ISélection obtenirSélection ()
La sélection.
IEnveloppe getSelectionBounds (affichage IDisplay)
Les limites de la sélection.
entier getSelectionCount ()
Nombre d'entités sélectionnées.
Chaîne de caractères getServiceLayerCreditsText (séparateur de chaîne)
Obtenez le texte des crédits de la couche de service.
annuler getSizeMax (_ULARGE_INTEGER[] pcbSize)
obtenirTailleMax
ISpatialReference getSpatialReference ()
La référence spatiale de la carte.
IStandaloneTable getStandaloneTable (index int)
La table autonome à l'index donné.
entier getStandaloneTableCount ()
Nombre de tables autonomes.
ITable getTable (index int)
La table à l'index donné.
entier getTableCount ()
Nombre de tableaux.
ILayer getTimeExtentDefinitionLayer ()
Couche temporelle qui définit l'étendue temporelle de la carte.
entier getTimeExtentOption ()
Indique comment l'étendue temporelle de la carte est définie.
ITimeReference getTimeReference ()
La référence horaire (informations de fuseau horaire, heure d'été, etc.) associée à la carte.
entier getTimeRelation ()
Relation temporelle utilisée avec la fenêtre temporelle de la carte.
ITimeValue obtenirValeurTemps ()
Durée pendant laquelle les données sont affichées sur la carte.
Chaîne de caractères getTipText (double x, double y)
Le texte de l'astuce à afficher à l'emplacement donné.
entier getTopFilterIndex ()
Indice de phase qui complète TopFilterPhase.
entier getTopFilterPhase ()
La phase la plus élevée dans l'ordre de dessin qui utilise un filtre d'affichage.
entier hashCode ()
le hashcode de cet objet
booléen hasTimeData ()
Indique si la carte a une couche temporelle.
ICarte hitTestMap (emplacement IPoint)
Renvoie toutes les cartes présentes dans la vue à l'emplacement donné.
annuler insertLayer (ILayer pLayer, Boolean autoArrange, int position)
Insère un calque à la position donnée.
annuler insertLayerInGroup (IGroupLayer pGroup, ILayer pLayer, Boolean autoArrange, int position)
Insère une couche à un index donné du groupe de couches de la carte.
annuler insertLayers (IEnumLayer pLayers, Boolean autoArrange, int position)
Insère des calques à la position donnée.
annuler insertLayersInGroup (IGroupLayer pGroup, IEnumLayer pLayer, arrangement automatique booléen, position int)
Insère des couches à un index donné du groupe de couches de la carte.
booléen c'est actif ()
Indique si la vue est active ou non.
booléen isAutoCacheActive ()
Indique si la mise en cache automatique est active.
booléen isCacheable ()
Indique si un cache de carte peut être créé.
booléen isClipGridAndGraticules ()
Découpez les grilles et les réticules à l'étendue des données
booléen isConserveMemory ()
Indique s'il faut être prudent lors de l'allocation des ressources.
booléen isDelayBackgroundDraw ()
Indique si l'arrière-plan doit être dessiné immédiatement.
annuler est sale ()
est sale
booléen isDisplayEachTimestamp ()
Indique si les données de chaque horodatage seront dessinées lors de la lecture de la visualisation de l'heure.
booléen isDessin ()
Indique si la vue est en cours de dessin ou non.
booléen isDynamicMapEnabled ()
Indique si la carte dynamique est activée ou désactivée.
booléen isDynamicTimeRefresh ()
Indique si les données de la carte sont actualisées lors du déplacement dynamique de la glissière temps.
booléen estDéveloppé ()
Indique si la carte est développée.
booléen isExternalDrawing (phase int)
Indique si les clients externes dessinent en réponse à la phase spécifiée.
booléen est encadré ()
Indique si la carte est dessinée dans un cadre plutôt que sur toute la fenêtre.
booléen isHasLiveData ()
Indique si la carte a une couche temporelle qui est mise à jour fréquemment avec de nouvelles données.
booléen isLayerVisible (couche ILayer)
Vérifiez si la couche est visible.
annuler isLayerVisibleEx (Couche ILayer, boolean[] isLayerVisible, boolean[] isParentLayerVisible)
Vérifiez si la couche est visible.
booléen isMapActivated ()
Indique si la carte de mise au point est activée.
booléen isProgressiveDrawing ()
Indique si la vue doit mettre à jour progressivement la fenêtre pendant le dessin.
booléen isScaleLimit ()
Indique s'il existe une limite d'échelle.
booléen isShowRulers ()
Indique si les règles sont visibles.
booléen isShowScrollBars ()
Indique si les barres de défilement sont visibles.
booléen isShowSelection ()
Indique si la sélection est visible.
booléen isShowTime ()
Indique si l'heure est activée sur la carte.
booléen isShowTimeOnDisplay ()
Indique si l'heure est affichée sur la carte.
booléen isSimulateLayerEffectsInLegends ()
Indique s'il faut simuler la transparence et d'autres effets dans les légendes.
booléen isSpatialReferenceLocked ()
Indique si la référence spatiale ne peut pas être modifiée.
booléen isUseMasking ()
Indique s'il faut utiliser le masquage.
booléen isUsesFilter ()
Indique si l'objet courant est dessiné à l'aide d'un filtre.
booléen isUsesPageCoordinates ()
Indique si la vue utilise les coordonnées de la page.
booléen isUseSubPixelRendering ()
Indique si la carte dynamique est rendue en sous-pixels ou en pixels complets (accrochage au pixel discret le plus proche).
booléen isUseSymbolLevels ()
Indique si la carte se dessine à l'aide de niveaux de symboles.
booléen isVerboseEvents ()
Indique s'il faut étendre ou limiter le nombre d'événements déclenchés.
annuler charge (IStream pstm)
charge
IEnumElement locateElements (point IPoint, double tolérance)
Renvoie les éléments à la coordonnée donnée.
IEnumElement locateElementsByEnvelope (enveloppe IEnvelope)
Renvoie les éléments à l'intérieur de l'enveloppe donnée.
annuler moveBookmarkTo (IspatialBookmark signet, index int)
Déplace un signet dans la collection.
annuler moveElementFromGroup (groupe IGroupElement, élément IElement, int zorder)
Déplacez l'élément du groupe vers le conteneur.
annuler moveElementToGroup (élément IElement, groupe IGroupElement)
Déplacez l'élément du conteneur vers le groupe.
annuler moveLayer (couche ILayer, int toIndex)
Déplace un calque vers une autre position.
annuler moveLayerEx (IGroupLayer pFromGroup, IGroupLayer pToGroup, ILayer pLayer, int newPosition)
Déplace la couche avec dans la carte.
Élément IE Suivant ()
Renvoie le graphique suivant dans le conteneur.
annuler onMessage (int msg, int wParam, int lParam)
Appelez depuis la boucle de messages de votre application pour activer le redimensionnement automatique et les accélérateurs de clavier.
annuler sortie (int hdc, int dpi, tagRECT pixelBounds, IEnvelope visibleBounds, ITrackCancel trackCancel)
Restitue la vue au contrôleur de domaine spécifié.
annuler partialRefresh (phase int, données d'objet, enveloppe IEnvelope)
Dessine la phase de vue spécifiée.
annuler partialRefreshShape (phase int, données d'objet, géométrie IGeometry, double symbolSizePoints)
Actualise la forme spécifiée sur la phase d'affichage spécifiée.
annuler printerChanged (imprimante IPrinter)
Appelé par l'application lorsque l'imprimante change.
annuler putElementOrder (Ordre des objets)
Objet de commande privée.
annuler readExternal (ObjectInput)
annuler recalcFullExtent ()
Force le recalcul complet de l'étendue.
annuler rafraîchir ()
Provoque le dessin de l'ensemble de la vue.
annuler rafraîchirAutoCache ()
Actualisez le cache automatique.
annuler rafraîchir les caches ()
Réaffectez les caches d'affichage.
annuler refreshItem (données d'objet)
Utilisez pour redessiner un élément spécifique et le contenu au-dessus.
annuler removeAllBookmarks ()
Supprime tous les signets.
annuler removeAllStandaloneTables ()
Supprime toutes les tables autonomes de la collection.
annuler removeAllTables ()
Supprime toutes les tables de la collection.
annuler removeBookmark (IspatialBookmark signet)
Supprime un signet de la collection.
annuler removeIActiveViewEventsListener (IActiveViewEvents theListener)
removeIActiveViewEventsListener.
annuler removeIDynamicMapEventsListener (IDynamicMapEvents theListener)
removeIDynamicMapEventsListener.
annuler removeIMapEventsListener (IMapEvents theListener)
removeIMapEventsListener.
annuler removeStandaloneTable (table IStandaloneTable)
Supprime la table autonome de la collection.
annuler removeTable (table ITable)
Supprime une table de la collection.
annuler réinitialiser ()
Réinitialise le curseur interne pour que Next renvoie le premier élément.
annuler resolutionUpdated (ITransformEventsResolutionUpdatedEvent theEvent)
Avertit les clients lorsque la résolution est mise à jour.
annuler rotationUpdated (ITransformEventsRotationUpdatedEvent theEvent)
Avertit les clients lorsque l'angle de rotation est mis à jour.
annuler enregistrer (IStream pstm, int fClearDirty)
enregistrer
annuler selectAllElements ()
Sélectionne tous les éléments.
annuler selectByShape (forme IGeometry, environnement ISelectionEnvironment, boolean justOne)
Sélectionne des entités dans la carte en fonction d'une forme et d'un environnement de sélection (facultatif).
Élément IE selectedElement (int index)
Renvoie le nième élément sélectionné.
annuler selectElement (élément IElement)
Sélectionne l'élément spécifié.
annuler selectElements (éléments IEnumElement)
Sélectionne les éléments spécifiés.
annuler selectFeature (couche ILayer, fonction IFeature)
Sélectionne une fonction.
annuler selectionChanged (ISelectionEventsSelectionChangedEvent theEvent)
Appelez cette fonction pour déclencher l'événement de modification de sélection.
ISelectionTracker selectionTracker (index int)
Renvoie le tracker pour le nième élément sélectionné.
annuler sendBackward (éléments IEnumElement)
Déplace les éléments spécifiés d'un pas vers le bas de la pile d'éléments.
annuler sendToBack (éléments IEnumElement)
Faire dessiner les éléments spécifiés derrière tous les autres éléments.
annuler setActiveGraphicsLayerByRef (ILayer graphicsLayer)
La couche graphique active.
annuler setAnnotationEngineByRef (IAnnotateMap annotateMap)
Le moteur d'annotation (étiquette) que la carte utilisera.
annuler setAreaOfInterest (IEnvelope rhs1)
Zone d'intérêt pour la carte.
annuler setAutoCacheActive (booléen actif)
Indique si la mise en cache automatique est active.
annuler setAutoExtentBounds (limites IEnvelope)
Les limites de la carte affichées par le cadre.
annuler setAutoExtentLayerByRef (couche IFeatureLayer)
Fonctionnalités d'extension automatique.
annuler setAutoExtentMapByRef (carte IMap)
Carte d'étendue automatique.
annuler setAutoExtentMargin (double marge)
Marge d'étendue automatique.
annuler setAutoExtentMarginUnits (unités entières)
Unités de marge d'étendue automatique.
annuler setAutoExtentScale (double échelle)
L'échelle à laquelle la carte doit être affichée.
annuler setAutoExtentType (type entier)
Manière dont l'étendue de la carte du cadre est spécifiée.
annuler setClipBorder (Iborder frontière)
Une bordure facultative dessinée autour de ClipGeometry.
annuler setClipBounds (IGeométrie rhs1)
Spécifiez une limite à laquelle découper.
annuler setClipData (Données d'objet)
Définit ou renvoie des données de type de clip étendu, c'est-à-dire une autre carte lorsque le type est esriMapClipMapExtent.
annuler setClipFilter (ISet les calques)
Définit ou renvoie l'ensemble de calques qui seront exclus de l'écrêtage.
annuler setClipGeometry (IGeometry clipGeometry)
Forme sur laquelle les couches de la carte sont découpées.
annuler setClipGridAndGraticules (booléen pClipGridAndGraticules)
Découpez les grilles et les réticules à l'étendue des données
annuler setClipType (type entier)
Méthode utilisée pour découper les couches dans la carte.
annuler setConserveMemory (drapeau booléen)
Indique s'il faut être prudent lors de l'allocation des ressources.
annuler setCopyrightText (string copyright)
Informations de copyright associées à la carte.
annuler setCurrentTimeExtentByRef (ITimeExtent timeExtent)
L'étendue temporelle actuelle de la carte.
annuler setDefaultTimeInterval (double intervalle)
Intervalle de temps à utiliser par le curseur temporel pour animer la carte.
annuler setDefaultTimeIntervalUnits (unités entières)
Unités d'intervalle de temps à utiliser pour animer la carte.
annuler setDefaultTimeWindow (double durée)
La fenêtre de temps utilisée pour afficher les données sur la carte.
annuler setDelayBackgroundDraw (indicateur booléen)
Indique si l'arrière-plan doit être dessiné immédiatement.
annuler setDescription (chaîne descr)
Description de la carte.
annuler setDisplayDateFormat (String dateFormat)
Le format de la date qui s'affiche sur la glissière temps.
annuler setDisplayEachTimestamp (valeur booléenne)
Indique si les données de chaque horodatage seront dessinées lors de la lecture de la visualisation de l'heure.
annuler setDisplaySpeed ​​(vitesse int)
La vitesse du curseur sur une échelle de 1 à 10, 10 étant la plus rapide.
annuler setDisplayTimeFormat (String timeFormat)
Le format de l'heure qui s'affiche sur la glissière temps.
annuler setDistanceUnits (int unitsCode)
Les unités de distance pour la carte.
annuler setDomainDefiningLayer (couche ILayer)
Renvoie la couche qui définit le domaine de la carte, 0 si domaine est l'union de toutes les couches.
annuler setDominantElementByRef (IElement dominantItem)
Élément dominant.
annuler setDynamicDrawRate (int dynamicDrawRateMS)
Le taux de tirage dynamique en millisecondes.
annuler setDynamicMapEnabled (booléen isEnable)
Indique si la carte dynamique est activée ou désactivée.
annuler setDynamicTimeRefresh (indicateur booléen)
Indique si les données de la carte sont actualisées lors du déplacement dynamique de la glissière temps.
annuler setElementSelectionByRef (ISelection selectionObject)
Objet à utiliser pour la sélection d'éléments.
annuler setExpanded (booléen développé)
Indique si la carte est développée.
annuler setExtent (étendue IEnvelope)
Le rectangle d'étendue visible.
annuler setExternalDrawing (phase int, booléen externalDrawing)
Indique si les clients externes dessinent en réponse à la phase spécifiée.
annuler setFeatureSelectionByRef (sélection ISelection)
La sélection d'entités pour la carte.
annuler setFocusMapByRef (IMap activeMap)
La carte sur laquelle les outils et les commandes agissent.
annuler setFullExtent (étendue IEnvelope)
L'étendue complète du rectangle.
annuler setFullTimeExtentByRef (ITimeExtent timeExtent)
Renvoie l'étendue temporelle complète des couches temporelles dans la carte.
annuler setHasLiveData (indicateur booléen)
Indique si la carte a une couche temporelle qui est mise à jour fréquemment avec de nouvelles données.
annuler setIsFramed (indicateur booléen)
Indique si la carte est dessinée dans un cadre plutôt que sur toute la fenêtre.
annuler setIsMapActivated (booléen isMapActivated)
Indique si la carte de mise au point est activée.
annuler setLevelMasking (ILayer maskedLayer, ILayer maskingLayer, String pLevels)
Les niveaux de symboles pour lesquels le masquage s'applique.
annuler setMapScale (double échelleRF)
L'échelle de la carte en tant que fraction représentative.
annuler setMapUnits (int unitsCode)
Les unités de la carte.
annuler setMaskingLayers (ILayer layer, ISet maskingLayers)
Les masques d'un calque.
annuler setMaxScale (double pMaxScale)
L'échelle maximale du cache à construire.
annuler setName (nom de chaîne)
Nom de la carte.
annuler setNonFrameBackgroundByRef (IBackground rhs1)
L'arrière-plan à utiliser lors du dessin vers des destinations autres qu'un cadre.
annuler setOutputBandSize (int kilo-octets)
Taille allouée pour chaque bande lors de la sortie de bande.
annuler setOverposterPropertiesByRef (IOverposterProperties overposterProperties)
L'affiche que la carte utilisera pour l'étiquetage.
annuler setPageSize (double largeur pouces, double hauteur pouces)
Définit la taille de la page pour la carte (facultatif).
annuler setPlayOption (option int)
L'option de lecture (Stop, Reverse, Repeat) utilisée par le curseur après que la visualisation de l'heure a été jouée une fois.
annuler setProgressiveDrawing (drapeau booléen)
Indique si la vue doit mettre à jour progressivement la fenêtre pendant le dessin.
annuler setReferenceScale (double échelleRF)
L'échelle de référence de la carte en tant que fraction représentative.
annuler setScaleLimit (booléen limité)
Indique s'il existe une limite d'échelle.
annuler setSelectionByRef (ISelection sélection)
La sélection.
annuler setShowRulers (booléen showRulers)
Indique si les règles sont visibles.
annuler setShowScrollBars (booléen showScrollBars)
Indique si les barres de défilement sont visibles.
annuler setShowSelection (booléen showRulers)
Indique si la sélection est visible.
annuler setShowTime (indicateur booléen)
Indique si l'heure est activée sur la carte.
annuler setShowTimeOnDisplay (indicateur booléen)
Indique si l'heure est affichée sur la carte.
annuler setSimulateLayerEffectsInLegends (indicateur booléen)
Indique s'il faut simuler la transparence et d'autres effets dans les légendes.
annuler setSpatialReferenceByRef (ISpatialReference spatialRef)
La référence spatiale de la carte.
annuler setSpatialReferenceLocked (booléen verrouillé)
Indique si la référence spatiale ne peut pas être modifiée.
annuler setTimeExtentDefinitionLayerByRef (couche ILayer)
Couche temporelle qui définit l'étendue temporelle de la carte.
annuler setTimeExtentOption (option int)
Indique comment l'étendue temporelle de la carte est définie.
annuler setTimeReferenceByRef (ITimeReference timeReference)
La référence horaire (informations de fuseau horaire, heure d'été, etc.) associée à la carte.
annuler setTimeRelation (relation entière)
Relation temporelle utilisée avec la fenêtre temporelle de la carte.
annuler setTimeValueByRef (heure ITimeValue)
Durée pendant laquelle les données sont affichées sur la carte.
annuler setTopFilterIndex (int phaseIndex)
Indice de phase qui complète TopFilterPhase.
annuler setTopFilterPhase (phase int)
La phase la plus élevée dans l'ordre de dessin qui utilise un filtre d'affichage.
annuler setUseMasking (drapeau booléen)
Indique s'il faut utiliser le masquage.
annuler setUseSubPixelRendering (booléen useSubPixelRendering)
Indique si la carte dynamique est rendue en sous-pixels ou en pixels complets (accrochage au pixel discret le plus proche).
annuler setUseSymbolLevels (indicateur booléen)
Indique si la carte se dessine à l'aide de niveaux de symboles.
annuler setVerboseEvents (booléen verboseEvents)
Indique s'il faut étendre ou limiter le nombre d'événements déclenchés.
annuler sortFavoris (booléen croissant)
Ajoute un signet à la collection.
annuler supprimerForegroundDraw ()
Appelez avant d'utiliser Output pour empêcher le déclenchement d'AfterDraw(esriViewForeground).
annuler unitsUpdated (ITransformEventsUnitsUpdatedEvent theEvent)
Avertit les clients lorsque les unités sont mises à jour.
annuler unselectAllElements ()
Désélectionne tous les éléments.
annuler unselectElement (élément IElement)
Désélectionne l'élément spécifié.
annuler unselectElements (éléments IEnumElement)
Désélectionne les éléments spécifiés.
annuler updateElement (élément IElement)
Les propriétés de l'élément graphique ont changé.
annuler visibleBoundsUpdated (ITransformEventsVisibleBoundsUpdatedEvent theEvent)
Avertit les clients lorsque les limites visibles sont mises à jour.
annuler writeExternal (ObjectOutput)
Méthodes héritées de la classe java.lang.Object
cloner, finaliser, getClass, notify, notifyAll, toString, wait, wait, wait
Méthodes héritées de l'interface com.esri.arcgis.interop.RemoteObjRef
getJintegraDispatch, version

Génère : IOException - s'il y a des problèmes d'interopérabilité UnknownHostException - s'il y a des problèmes d'interopérabilité

Construisez une carte à l'aide d'une référence à un tel objet renvoyé par ArcGIS Engine ou Server. C'est sémantiquement équivalent au transtypage de obj en Map .


Ce n'est plus une nouvelle que le gouvernement fédéral a exclu toute tentative de demander la révision du jugement de la Cour internationale de justice (CIJ) siégeant à La Haye sur la péninsule contestée de Bakassi au motif que l'affaire était close depuis le 10 octobre 2012.
Mais l'idée qu'il ne servait à rien de pleurer sur le lait renversé ne traite pas divers problèmes fondamentaux critiques et la question des manquements des responsables du gouvernement nigérian à prévoir les mesures prises par le Cameroun et la France en prenant des mesures préventives et d'autres mesures qui auraient pu atténuer la perte du pays en la situation embarrassante.Certes, le Nigeria a subi une rétrogradation de prestige et de statut pour s'être fait frotter le visage dans la boue par le Cameroun, une situation aggravée par le fait que les gens de l'ancien Nigeria oriental nourrissent encore le sentiment que Gowon a cédé Bakassi au Cameroun en guise de négociation afin de gagner la guerre du Biafra.
Ce qui est encore plus exaspérant pour certains, c'est l'invitation du président Jacques Chirac de France au président Obasanjo de venir à Paris pour s'entretenir avec le président Paul Biya du Cameroun en vue de solliciter l'accord des deux parties pour se conformer à toute décision rendue par la Cour. vers le bas. S'il y avait un moment pour se méfier de la connexion française, c'était à ce moment-là mais notre ancien président Obasanjo a accepté par ignorance de jouer au ballon. Le Nigeria aurait même dû flairer un rat à la lumière de la nationalité du président de la CIJ et d'autres circonstances environnantes.
Le chef Richard Akinjide, ancien procureur général nigérian et ministre de la Justice a décrit la décision de la CIJ comme « 50 % de droit international et 50 % de politique internationale », « manifestement biaisée et injuste », « un désastre total » et « un fraude".
Il a également déclaré qu'en ce qui concerne le cas entre le Nigeria et le Cameroun, le différend était en réalité entre le Nigeria et la France. Le Cameroun n'était que le mandataire de la France. Il ne fait aucun doute qu'en droit et en fait que Bakassi appartient au Nigeria parce que cela est soutenu par un grand nombre de preuves documentaires, qui ont été présentées devant le tribunal. Mais ce que le tribunal a ignoré… Vous ne demandez pas à quelqu'un de vous transférer ce qui vous appartient. Il a en outre déclaré "en ce qui me concerne, le jugement de la CIJ est une fraude complète et inacceptable… Si effectivement Bakassi appartient au Cameroun, comment les Camerounais peuvent-ils leur demander de le leur transférer".
Cependant, le jugement était « un viol et un complot international potentiel imprévu contre l'intégrité territoriale et la souveraineté du Nigéria » et « faisait partie d'un stratagème occidental pour fomenter et perpétuer les troubles en Afrique ».
Mais de mon propre point de vue, il est injuste que la CIJ rende un tel jugement sans considérer l'option du référendum ou du plébiscite pour le peuple de Bakassi. Le jugement de la CIJ sur la péninsule de Bakassi et ses habitants est contraire à la loi de justice naturelle, d'équité et de bonne conscience. Comment pouvez-vous décider du sort et de la vie d'un autre homme sans rechercher son opinion et son histoire ? Le peuple de Bakassi a le droit à l'autodétermination. Nous pensons que la pire chose que vous puissiez faire à n'importe quel homme dans ce monde civilisé d'aujourd'hui est de lui refuser ses droits humains fondamentaux. Le peuple de Bakassi s'est vu refuser le droit à « l'autodétermination ». Ils n'ont pas été pris en considération ni même donné la possibilité d'indiquer où ils souhaitent appartenir même les Nations Unies, dont la CIJ est un organe, accorderaient une importance suffisante au peuple de Bakassi auquel ils auraient ordonné un plébiscite, au moins , donner foi au droit à l'autodétermination, qui est l'un des principes sur lesquels reposent les Nations Unies.
La CIJ n'aurait pas dû céder le peuple de Bakassi et ses terres au Nigeria (qui est leur « lieu de naissance naturel » et où leurs ancêtres sont enterrés) au Cameroun. La question ici est la suivante : n'est-il pas approprié et important pour la CIJ de prendre en considération le référendum ? N'était-il pas nécessaire que la CIJ initie une approche diplomatique plus globale qui donnerait au peuple de Bakassi la possibilité de décider lui-même de son destin ? Plutôt que de s'asseoir dans leur salle d'audience à La Haye et de déformer les générations futures d'un peuple d'un simple coup de marteau.
Selon les meilleures pratiques internationales, le consentement des personnes résidant sur un territoire (par voie de plébiscite) est une condition préalable à tout transfert ou changement de titre sur le territoire qu'elles occupent. Même lorsque le sort du nord et du sud du Cameroun devait être déterminé, un plébiscite a été organisé en 1961, en vertu duquel le sud du Cameroun a choisi de rejoindre le Cameroun, tandis que le nord du Cameroun a choisi de rejoindre le Nigeria. Cela pourrait être un cas, qui a confirmé ce qu'on appelle le droit à l'autodétermination. Je suis d'avis que cela fait toujours partie des bonnes pratiques internationales que les habitants du territoire soient consultés et autorisés à faire leur propre choix.
Du point de vue purement normatif, la meilleure procédure pour établir une frontière d'État est un référendum organisé parmi la population intéressée sous supervision internationale.
Historiquement, le référendum a souvent été utilisé pour justifier des limites dans divers quartiers.
Par exemple, la décision de la Norvège de se séparer de la Suède en 1905 a été prise par le peuple norvégien lors d'un référendum au cours duquel 99,9% ont voté pour l'indépendance, une puissante expression de fierté nationale. De même, l'Islande a organisé un référendum sur son indépendance vis-à-vis du Danemark. L'adoption par l'Espagne d'une réforme démocratique à la fin des années 1970 après la mort du dictateur Franco a été approuvée par le peuple par référendum. De même, de nouvelles constitutions ont vu le jour par référendum au Danemark, en France et en Irlande. La décision de passer au multipartisme a été prise par référendum dans certains pays africains, comme le Gabon et le Malawi. Dans chaque cas, il a été important pour la légitimité de la décision que ce pas vers l'indépendance ou la démocratie ait été fait directement par le peuple et non par l'élite politique.
De même, le référendum sur la souveraineté des îles Falkland/Malvinas 2013, le plus récent a été
Le référendum sur l'indépendance de l'Écosse était un référendum sur l'indépendance de l'Écosse qui a eu lieu en Écosse le 18 septembre 2014.

La question du référendum sur l'indépendance, à laquelle les électeurs ont répondu par « Oui » ou « Non », était « L'Écosse devrait-elle être un pays indépendant ? » Le camp du « non » l'a emporté, avec 2 001 926 (55,3%) votants contre l'indépendance et 1 617 989 (44,7%) votant pour.
Même le référendum sur le statut de la Crimée, 2014 était un référendum sur le statut de la Crimée organisé le 16 mars 2014 par la législature de la République autonome de Crimée ainsi que par le gouvernement local de Sébastopol, les deux subdivisions de l'Ukraine à l'époque. Le référendum a demandé au peuple de Crimée s'il souhaitait rejoindre la Russie en tant que sujet fédéral ou s'il souhaitait restaurer la constitution de Crimée de 1992 et le statut de la Crimée en tant que partie de l'Ukraine.
Mais dans le cas du différend de Bakassi, le peuple n'a jamais eu la possibilité d'exercer son droit à l'autodétermination.
Le droit à l'autodétermination est un fondement des droits de l'homme des Nations Unies et de ses objectifs et un concept clé dans les plus importants Pactes et Chartes internationaux.
C'est aussi une norme de jus cogens (loi impérative), la catégorie la plus élevée du droit international.

Prenons par exemple diverses dispositions du droit international qui reconnaissent et légitiment le droit à l'autodétermination :
1.Article 2 de la Déclaration nationale des Nations Unies sur l'octroi de l'indépendance aux pays et aux peuples coloniaux (Résolution 1514 (XV) de l'Assemblée générale du 14 décembre 1960 : « Tous les peuples ont le droit à l'autodétermination, en vertu de critères économiques, sociaux et développement culturel.
2. Le Pacte international relatif aux droits civils et politiques (Nations Unies, 1966), Partie I, Article 1 : Tous les peuples ont le droit à l'autodétermination. En vertu de ce droit, ils déterminent librement leur statut politique et poursuivent librement leur développement économique, social et culturel. Article 2 : Tous les peuples peuvent, à leurs propres fins, disposer librement de leurs richesses et ressources naturelles sans préjudice des obligations découlant de la coopération économique internationale, fondée sur le principe de l'avantage mutuel, et du droit international. En aucun cas, un peuple ne peut être privé de ses propres moyens de subsistance. Article 3 : Les États parties au présent Pacte, y compris ceux qui ont la responsabilité de l'administration des territoires non autonomes et sous tutelle, favoriseront la réalisation du droit à l'autodétermination et respecteront ce droit, conformément à la dispositions de la Charte des Nations Unies.
3.Programme d'action pour la pleine mise en œuvre de la Déclaration sur l'octroi de l'indépendance aux pays et aux peuples coloniaux (Résolution 2621 (XXV) de l'Assemblée générale « Réaffirmant que tous les peuples ont le droit à l'autodétermination et à l'indépendance et que l'assujettissement de la peuples à la domination étrangère constitue un obstacle sérieux au maintien de la paix et de la sécurité internationales et au développement de relations pacifiques entre les nations »
4. Déclaration des Nations Unies relative aux principes du droit international concernant les relations amicales et la coopération entre les États conformément au chapitre des Nations Unies (résolution 2625 (XXV) de l'Assemblée générale du 25 octobre 1970) : « En vertu du principe d'égalité droits et à l'autodétermination des peuples consacrés dans le Chapitre, tous les peuples ont le droit de déterminer librement, sans ingérence extérieure, leur statut politique et de poursuivre leur développement économique, social et culturel, et chaque État a le devoir de respecter ce droit conformément avec les dispositions de la Charte.
5.Conférence sur la sécurité et la coopération en Europe (CSCE), Acte final d'Helsinki, 1er août 1975 : « En vertu de l'égalité des droits et de l'autodétermination des peuples, tous les peuples ont toujours le droit, la liberté de déterminer, quand et comme ils souhaitent, leur statut politique interne et externe, sans ingérences extérieures et poursuivre comme ils le souhaitent leur développement politique, économique, social et culturel.
6.Charte Africaine des Droits de l'Homme et des Peuples, 1981 : Article 19- « (2) Rien ne justifie la domination d'un peuple par un autre. Article 20 – « Tous les peuples ont droit à l'existence. Ils ont le droit indiscutable et inaliénable à l'autodétermination. Ils déterminent librement leur statut politique et poursuivent leur développement économique et social selon la politique qu'ils ont librement choisie ».
7.Déclaration et Programme d'action de Vienne, 1993 : « Tous les peuples ont le droit à l'autodétermination. En vertu de ce droit, ils déterminent librement leur statut politique et poursuivent librement leur développement économique, social et culturel.
8.Organisation pour la sécurité et la coopération en Europe (OSCE), Charte de Paris pour une nouvelle Europe, 1994 : « Nous affirmons l'égalité des droits des peuples et leur droit à l'autodétermination en conformité avec la Charte des Nations Unies et avec les normes pertinentes du droit international, y compris celles relatives à l'intégrité territoriale des États.
En outre, la portée et le contenu du droit à l'autodétermination ont été élaborés par le Comité des droits de l'homme des Nations Unies et le Comité pour l'élimination de la discrimination raciale et de nombreux juristes internationaux de premier plan.
Par conséquent, à la lumière de ces prémisses susmentionnées, on peut conclure que la CIJ a simplement statué sur une violation du droit de l'homme à l'autodétermination du peuple de Bakassi et de diverses positions du droit international.
Sur la mise en œuvre de l'accord controversé sur l'arbre vert
Il est important de noter que le transfert de Bakassi était une violation flagrante de la Constitution du Nigéria, qui n'avait pas réalisé qu'une partie de sa terre et de sa population avait été donnée en charité et que le traité n'avait pas été soumis à l'Assemblée nationale pour la ratification ou la domestication avant son entrée en vigueur, comme l'envisage la Constitution. Analysant l'effet juridique de la position du président Muhammadu Buhari S'exprimant mercredi 29 juillet, lors d'une session interactive avec des Nigérians vivant au Cameroun, le Nigéria se conformera à la décision de la Cour internationale de justice (CIJ) sur la péninsule de Bakassi et a déclaré que son l'administration veillera à la mise en œuvre fidèle de l'Accord sur l'arbre vert, qui réglemente la cession de Bakassi au Cameroun.
Buhari ne doit pas oublier le fait que le Sénat nigérian a rejeté le transfert de Bakassi au Cameroun le 22 novembre 2007, car l'Accord sur l'arbre vert cédant la zone au Cameroun était contraire à l'article 12 (1) de la Constitution de 1999. Indépendamment de cela, le territoire a été officiellement transféré au Cameroun le 14 août 2008 par l'administration Obasanjo.
Bien que l'article 12 ne donne à l'Assemblée nationale aucun rôle juridique dans la ratification des traités (ou l'élaboration des traités), mais l'implique plutôt dans la mise en œuvre (ou la domestication) des traités. La ratification est le processus par lequel un État (en l'occurrence le Nigéria) établit sur le plan international son consentement à être lié par un traité (voir l'article 1 de la Convention de Vienne sur le droit des traités de 1969).
Alors que la mise en œuvre (ou la domestication) est le processus par lequel un traité valablement conclu par un État est promulgué (ou domestiqué) en tant que législation afin qu'il puisse avoir effet sur le plan national. L'article 12 s'applique à la mise en œuvre (ou à la domestication) des traités et stipule que :
« Aucun traité entre la Fédération et un autre pays n'a force de loi, sauf dans la mesure où un tel traité a été promulgué par l'Assemblée nationale ».
La note explicative annexe de l'article 12, ainsi que le point 31 de la Liste législative exclusive, précisent que le rôle législatif de l'Assemblée nationale est important pour la mise en œuvre des traités.
Un autre scénario est que ladite Convention de Vienne sur le droit des traités, telle qu'elle est contenue à l'article 46(1), où elle stipule : – « Un État ne peut invoquer le fait que son consentement à être lié par un traité a été exprimé en violation d'une disposition de son droit interne concernant la compétence pour conclure des traités comme invalidant son consentement à moins que cette violation ne soit manifeste et concerne une règle de son droit interne d'importance fondamentale.
L'article 46 (2) a en outre apporté quelques éclaircissements aux dispositions ci-dessus : – « Une violation est manifeste si elle est objectivement évidente pour tout État se conduisant en la matière conformément à la pratique normale et de bonne foi ».

Ces dispositions de la Convention de Vienne sur le droit des traités offrent également au Nigéria la possibilité de contester une violation de ses procédures internes de légitimation des traités/accords que l'Accord sur l'arbre vert de 2006 n'a pas respecté. En vertu de la Constitution nigériane, le traité ne peut s'appliquer, sauf et à moins et seulement dans la mesure où un tel traité a été transformé en loi nigériane. Étant donné que le traité n'a pas été approuvé par l'Assemblée nationale (nigériane) pour la domestication, le Nigéria ne peut pas appliquer les dispositions de cet accord. Le traité aurait dû être transformé en loi nigériane avant que le gouvernement nigérian ne le mette en œuvre. C'est pourquoi les habitants de Bakassi s'indignent que les mesures nécessaires n'aient pas été prises avant le transfert de leur territoire vers un pays étranger.

Plusieurs rapports ont noté avec consternation le niveau de négligence, d'abandon et de maltraitance inexplicable du peuple autochtone de Bakassi après avoir cédé ses terres au Cameroun par le gouvernement nigérian dans le cadre de l'Accord sur l'arbre vert (GTA) signé par l'administration Olusegun Obasanjo le 12 juin. , 2006 à New-York.

Conclusion
Malgré le fait que le gouvernement nigérian ait accepté le fait accompli de la perte du territoire, il reste encore deux options à explorer pour le gouvernement nigérian :
La première option est de présenter aux Nations Unies pour se prévaloir de la fenêtre qui permettra au peuple de Bakassi de procéder à un référendum et de décider lui-même où il souhaite appartenir conformément au droit international et à tous les principes du droit à l'autodétermination. Le gouvernement nigérian doit répudier l'accord sur l'arbre vert et récupérer la péninsule de Bakassi. Ou mieux encore, la décision de la CIJ cédant Bakassi au Cameroun devrait être annulée. Tant que le peuple de Bakassi n'aura pas eu la possibilité nécessaire d'exercer son droit à l'autodétermination, la CIJ statuant sur Bakassi restera injuste, injuste, cruelle et un viol galant des droits et du destin du peuple de Bakassi.
La deuxième option Selon le professeur Akin Oyebode, professeur de droit international et de diplomatie à Unilag lors de la conférence du 2e anniversaire de CrossRiverWatch à l'hôtel Transcorp de Calabar le 27 août 2014. Cameroun dans le but de racheter la péninsule, une situation qui n'est pas sans précédent dans l'histoire ».
Bakassi devrait être revisité parce qu'il s'agit du peuple et pas tant du pétrole. Malheureusement, c'est le pétrole dont on parle beaucoup. Mais les gens sont très importants.
Il convient également de souligner clairement qu'il n'y a aucun moyen pour le Cameroun d'utiliser les ressources de Bakassi sans prendre en compte les intérêts du Nigéria et des Nigérians. Parce que, s'ils veulent revendiquer le plateau continental en vertu du droit de la mer, leur revendication devrait chevaucher la revendication du Nigeria car en regardant la géographie, la carte du Cameroun, leur plateau verrouillé comme c'est le cas en droit international ils n'ont pas assez de place pour utiliser ou revendiquer les 200 milles nautiques, que le droit international leur accorde. C'est parce que le Nigeria a aussi une revendication de 200 milles, donc il va y avoir un conflit. Par conséquent, le Nigéria pourrait leur proposer de s'engager dans une « unitisation ou une zone de développement conjoint » pour l'exploitation des ressources. Et amenez-les dans le cadre de l'accord que nous avons établi avec des pays comme la Guinée équatoriale et Sao Tomé-et-Principe en vertu duquel le Nigéria et, par exemple, la Guinée équatoriale et Sao Tomé-et-Principe exploiteront conjointement les ressources et les bénéfices seront partagés selon des ratios de 60:40. En d'autres termes, c'est ainsi protéger les intérêts des Nigérians et en même temps permettre au Cameroun de bénéficier des ressources dont dispose le territoire.
Avis à l'Assemblée nationale
Je profite également de cette occasion pour plaider pour que l'article 12 de la Constitution nigériane soit immédiatement amendé sans délai, pour incorporer un rôle pour l'Assemblée nationale (de préférence le Sénat) dans le processus de ratification du traité d'une manière similaire à ce qui est disponible aux États-Unis et au Ghana.
Cependant, jusqu'à ce qu'un tel amendement soit apporté à la Constitution, le fait demeure que l'exécutif, par l'intermédiaire du Président, continuera à conclure et ratifier unilatéralement les traités sans la contribution de l'Assemblée nationale. Comme cet amendement agira de manière futuriste comme un frein et contrepoids pour éviter une situation controversée erronée similaire de l'accord sur l'arbre vert.


Rapports ComponentOne pour WinForms

Marques commerciales Le nom de produit ComponentOne est une marque commerciale et ComponentOne est une marque déposée de GrapeCity, Inc. Toutes les autres marques commerciales utilisées ici sont la propriété de leurs propriétaires respectifs. Garantie ComponentOne garantit que le CD (ou les disquettes) d'origine est exempt de défauts de matériel et de fabrication, en supposant une utilisation normale, pour une période de 90 jours à compter de la date d'achat. Si un défaut survient pendant cette période, vous pouvez retourner le CD (ou disque) défectueux à ComponentOne, accompagné d'une preuve d'achat datée, et ComponentOne le remplacera sans frais.Après 90 jours, vous pouvez obtenir le remplacement d'un CD (ou disque) défectueux en l'envoyant ainsi qu'un chèque de 25 $ (pour couvrir les frais de port et de manutention) à ComponentOne. À l'exception de la garantie expresse du CD (ou des disques) d'origine énoncée ici, ComponentOne n'offre aucune autre garantie, expresse ou implicite. Tous les efforts ont été faits pour s'assurer que les informations contenues dans ce manuel sont correctes au moment de sa rédaction. Nous ne sommes pas responsables des erreurs ou omissions. La responsabilité de ComponentOne est limitée au montant que vous avez payé pour le produit. ComponentOne n'est pas responsable des dommages spéciaux, indirects ou autres pour quelque raison que ce soit. Copie et distribution Bien que vous puissiez faire des copies de sauvegarde du logiciel pour votre propre usage et protection, vous n'êtes pas autorisé à faire des copies pour l'usage de quelqu'un d'autre. Nous avons consacré beaucoup de temps et d'efforts à la création de ce produit, et nous apprécions votre soutien en veillant à ce qu'il soit utilisé uniquement par des utilisateurs sous licence.

Ce manuel a été produit à l'aide de ComponentOne Doc-To-Help™.

Table des matières Présentation des rapports ComponentOne pour WinForms . 1 Aide avec ComponentOne Studio pour WinForms . 2 Mise à niveau à partir de VSReport 8.0 . 2 Rapports et aperçu des versions .NET . 3 Migration d'un projet Reports for WinForms vers Visual Studio 2005 . 4 Conversion d'un aperçu pour un projet WinForms en rapports pour WinForms . 5 caractéristiques clés . 9 Rapports pour les composants et contrôles WinForms . 15 Premiers pas avec les rapports pour WinForms . 19 Génération de rapports (C1Report vs. C1PrintDocument) . 19 Choix de la méthode de génération de rapport . 21 Premiers pas avec la création de rapports . 21 Démarrage rapide de C1Report . 21 Création d'expressions VBScript. 32 Prise en main de l'impression et de la prévisualisation . 37 Démarrage rapide de C1PrintDocument . 37 Création de tableaux . 43 Ajout de texte. 59 Création d'en-têtes de page dans C1PrintDocument . 64 Tracer une ligne horizontale . 68 Création de pieds de page . 69 Rapports pour WinForms Astuces . 75 C1PrintDocument Conseils . 75 Conseils pour le rapport C1 . 84 Conseils pour le contrôle de la prévisualisation visuelle . 86 Conseils de C1ReportScheduler . 88 Prise en charge au moment de la conception . 89 C1Menu Tâches de rapport . 89 C1Menu contextuel du rapport. 90

Menu Tâches C1RdlReport . 91 Menu contextuel C1RdlReport . 91 Menu Tâches C1MultiDocument . 92 Menu contextuel C1MultiDocument. 93 Menu Tâches C1PrintPreviewControl . 93 Concepteurs intelligents . 94 Barre d'outils flottante du menu principal. 95 Barre d'outils flottante ToolStrip. Barre d'outils flottante de 100 vignettes. 103 Contour de la barre d'outils flottante . 104 Barre d'outils flottante des règles . 106 Aspect du volet d'aperçu Barre d'outils flottante . 106 Barre d'outils flottante des marges. 107 Barre d'outils flottante du volet d'aperçu . 108 Barre d'outils flottante du panneau de recherche de texte . 110 Localisation . 111 Barre d'outils de localisation . 112 Travailler avec C1Report. 117 Résumé du modèle d'objet . 118 Sections d'un rapport . 118 Développement de rapports pour des scénarios de bureau . 120 Rapports intégrés (chargés au moment de la conception) . 120 rapports intégrés (créés au moment de la conception). 121 Rapports chargés au moment de l'exécution . 122 Rapports personnalisables . 125 Développement de rapports pour des scénarios Web . 126 Rapports Web statiques . 126 Rapports Web dynamiques . 127 Création, chargement et rendu du rapport . 132 Création d'une définition de rapport . 133 Chargement des données de rapport. 138 Regroupement et tri des données. 144 Regroupement des données . 144 Tri des données . 149 Ajout de cumuls . 150 Ajout de sous-totaux et d'autres agrégats . 151 Création de rapports croisés . 152

Travailler avec VBScript. 153 Éléments, objets et variables VBScript . 153 Utilisation des fonctions de compatibilité : Iif et Format . 156 Utilisation des fonctions d'agrégat . 157 Utilisation des propriétés d'événement. 159 Formatage d'un champ en fonction de sa valeur. 160 Masquage d'une section s'il n'y a pas de données pour celle-ci . 161 Afficher ou masquer un champ en fonction d'une valeur . 162 Inviter les utilisateurs à entrer des paramètres . 163 Réinitialisation du compteur de pages . 164 Modification des dimensions d'un champ pour créer un graphique à barres . 165 Utilisations avancées. 167 Requêtes de paramètres . 167 Rapports non consolidés . 169 Sources de données personnalisées . 171 Sécurité des données . 173 Utilisation de C1RdlReport . 177 Langage de définition de rapport (RDL). 177 Avantages de C1RdlReport . 177 Limitations du rapport C1Rdl. 177 Chargement d'un fichier RDL . 178 Rapports SSRS et ComponentOne . 179 Utilisation de C1ReportDesigner . 181 À propos de C1ReportDesigner. 181 Bouton d'application . 182 Onglet Conception . 183 Onglet Organiser. 188 Onglet Configuration de la page . 191 Onglet Aperçu . 192 Galerie de styles . 195 Accéder à C1ReportDesigner à partir de Visual Studio . 198 Définition des options de C1ReportDesigner . 198 Création d'une définition de rapport de base . 199 Modification de la présentation du rapport . 207 Amélioration du rapport avec des champs. 209 Ajout de champs de graphique . 209

Ajout de champs de dégradé . 214 Sélection, déplacement et copie de champs. 215 Modification des propriétés de champ, de section et de rapport . 217 Modification de la source de données. 217 Création d'un rapport maître-détails à l'aide de sous-rapports . 217 Aperçu et impression d'un rapport . 231 Exportation et publication d'un rapport . 223 Gestion des fichiers de définition de rapport . 223 Importation de rapports Microsoft Access. 224 Importation de rapports Crystal. 228 Création de graphiques dans les rapports . 229 Graphiques dans les rapports plats . 229 Autres propriétés de graphique utiles . 230 Graphiques avec plusieurs séries . 232 Séries avec valeurs calculées . 232 Graphiques dans les rapports groupés . 232 Graphiques agrégés . 234 Cartes dans les rapports . 236 couches . 237 Suivi. 237 modèles. 237 Emplacements spatiaux . Couche de 238 points. 238 Couche de lignes . Couche 238 KML. 239 Légendes. 239 Cartes Procédure pas à pas. 240 Utilisation de C1ReportsScheduler . 245 À propos de C1ReportsScheduler. 245 Installation et configuration . 245 Interface utilisateur . 246 Légende et barre d'état . 247 Liste des tâches . 247 Liste d'actions . 249 Horaire . 251 Système de menus . 252

Travailler avec C1PrintDocument . 257 Objets de rendu . 258 Hiérarchie des objets de rendu . 258 Règles de confinement, de positionnement et d'empilement des objets de rendu . 259 modèles . 267 Classes exposant la propriété de style. 267 Styles en ligne et non en ligne. 268 Propriétés de style ambiant et non ambiant. 268 Héritage de style, Parent et AmbientParent . 269 ​​Propriétés de style et leurs valeurs par défaut . 270 Sous-propriétés des propriétés de style complexes. 271 Propriétés de style calculées . 271 Styles d'objets de paragraphe . 272 styles de tableaux. 272 Tableaux . 273 Accès aux cellules, colonnes et lignes . 273 Largeur de tableau et de colonne, hauteur de ligne . 274 Groupes de lignes et de colonnes, en-têtes et pieds de page . 275 Groupes de cellules utilisateur . 277 Styles dans les tableaux . 277 Ancres et hyperliens . 278 Ajout d'un lien hypertexte à une ancre dans le même document . 279 Ajout d'un lien hypertexte à une ancre dans un autre C1PrintDocument . 279 Ajout d'un lien hypertexte à un emplacement dans le document actuel . 281 Ajout d'un lien hypertexte à un fichier externe . 281 Ajout d'un lien hypertexte à une page dans le même document . 282 Ajout d'un lien hypertexte à un événement utilisateur . 282 Hiérarchie des classes cibles de liaison . 284 Expressions, scripts, balises . 284 Balises . 284 Syntaxe des balises/expressions. 285 Modification des valeurs de point au moment de l'exécution . 286 Langage de script/d'expression . 290 Assemblages et espaces de noms . 291 ID accessibles dans les expressions de texte . 291 ID accessibles dans les expressions dans Filter, Grouping and Sorting . 295 ID accessibles dans les expressions utilisées pour spécifier les champs calculés dans un DataSet . 295

Liaison de données. 296 Liaison de données dans les objets de rendu . 296 Exemples de liaison de données . 299 Agrégats de données . 303 Table des matières . 306 Index de mots . 306 Classes prenant en charge la fonction d'indexation . 306 Génération d'un index dans le code . 307 Personnalisation de l'apparence de l'index . 307 La structure de l'index généré . 309 Aperçu . 310 Polices intégrées . 311 Substitution de polices . 311 Intégration sélective de polices . 312 Dictionnaire . 312 Définitions des rapports C1 . 312 Limitations d'importation de rapport C1. 313 Utilisation des pilotes d'imprimante . 314 Fichiers de langage de définition de rapport (RDL) . 316 Limitations d'importation RDL . 317 Travailler avec C1MultiDocument . 319 Limitations de C1MultiDocument . 319 Création et aperçu d'un fichier C1MultiDocument . 320 Exportation d'un fichier C1MultiDocument . 321 Impression d'un fichier C1MultiDocument . 321 Contours C1MultiDocument . 321 Utilisation du contrôle C1ReportDesigner. 323 Étape 1 sur 9 : création et remplissage du formulaire principal . 324 Étape 2 sur 9 : ajouter des variables et des constantes de classe . 325 Étape 3 sur 9 : Ajouter du code pour mettre à jour l'interface utilisateur. 326 Étape 4 sur 9 : ajouter du code pour gérer les commandes de la barre d'outils . 327 Étape 5 sur 9 : implémenter la méthode SetDesignMode . 329 Étape 6 sur 9 : implémenter les méthodes de prise en charge des fichiers . 330 Étape 7 sur 9 : raccorder les commandes . 334 Étape 8 sur 9 : ajouter du code pour créer et supprimer des rapports . 337 Étape 9 sur 9 : ajouter du code pour créer des champs . 341

Rapports pour les exemples WinForms . 345 Aide basée sur les tâches de Rapports pour WinForms . 351 Aide basée sur les tâches de création de rapports. 351 Ajout d'images au rapport . 351 Création de champs de rapport. 353 Personnalisation des en-têtes de page. 355 Personnalisation de la mise en page . 356 Rapports de formatage . 360 Chargement des définitions de rapport. 363 Modification des sous-rapports . 365 Rapports de rendu (prévisualisation, impression et exportation) . 366 Enregistrement d'une définition de rapport . 369 Impression et aperçu de l'aide basée sur les tâches. 371 Paramétrage des informations sur le document . 371 Masquage du panneau de navigation . 373 Ajout d'entrées de plan à l'onglet Plan . 375 Ajout de colonnes à une page. 377 Personnalisation des formats de fichier dans la boîte de dialogue Enregistrer sous . 380 Dessiner du texte sous un angle . 382 Formatage des tableaux . 384 Insertion d'un saut de page . 390 Impression en paysage. 392 Réglage de la taille de la page. 396 Redimensionnement ou mise à l'échelle d'une image . 397 Ajout d'une image en filigrane . 399 Réglage du mode zoom initial . 400 Suppression d'un élément du menu contextuel . 403 Désactivation du menu contextuel . 404

Présentation de ComponentOne Reports pour WinForms ComponentOne Reports™ pour WinForms fournit tous les outils dont vous avez besoin pour répondre à vos besoins de création de rapports, d'impression, de prévisualisation et d'exportation. Ajoutez des rapports de base de données de style Microsoft-Access. Créez des documents hiérarchiques complexes avec index de mots automatique, génération de table des matières, liaison de données, etc. Exportez, imprimez ou prévisualisez vos rapports et documents. Cette édition de Reports for WinForms combine deux produits précédents : Reports for .NET et Preview for .NET. Toutes les fonctionnalités de l'ancien produit Reports for .NET sont conservées, mais le nom et l'espace de noms de l'assembly ont changé. Génération de rapports Générez des rapports de style Microsoft Access pour vos applications Visual Studio .NET rapidement et facilement avec ComponentOne Reports pour WinForms. 

Le composant C1Report, qui génère des rapports en bandes basés sur des données. Affichez des rapports directement sur une imprimante ou un contrôle de prévisualisation, ou exportez-les vers divers formats portables (y compris XLS, PDF, HTML, texte et images). Le composant expose un modèle d'objet riche pour la création, la personnalisation, le chargement et l'enregistrement des définitions de rapport. Voir Utilisation de C1Report pour plus d'informations.

Le composant C1RdlReport, un composant qui représente un rapport RDL (Report Definition Language) défini à l'aide de la version 2008 de la spécification RDL. Le composant C1RdlReport est similaire au composant C1Report avec l'ajout de la prise en charge RDL. Voir Utilisation de C1RdlReport pour plus d'informations.

Le concepteur C1ReportDesigner, une application autonome utilisée pour créer des définitions de rapport sans écrire de code. Le concepteur vous permet de créer et de modifier rapidement des définitions de rapport, ou d'importer des définitions de rapport Microsoft Access et Crystal existantes. Le concepteur imite l'interface Microsoft Access, donc, si vous utilisez actuellement Microsoft Access, vous vous adapterez rapidement à l'utilisation de C1ReportDesigner. Voir Utilisation de C1ReportDesigner pour plus d'informations.

Le contrôle C1ReportDesigner (à ne pas confondre avec le concepteur autonome) qui affiche les rapports en mode conception et permet aux utilisateurs de faire glisser, copier et redimensionner des champs et des sections de rapport. Le contrôle fournit également une pile d'annulation/rétablissement illimitée et un mécanisme de sélection conçu pour être utilisé avec le contrôle PropertyGrid fourni avec Visual Studio. Vous pouvez utiliser le contrôle C1ReportDesigner pour incorporer certaines fonctionnalités de conception de rapports dans vos applications, ou vous pouvez écrire votre propre application de conception de rapports à part entière.

L'application C1ReportsScheduler, une application autonome utilisée pour planifier la création de rapports à exécuter en arrière-plan. À l'aide de l'application C1ReportsScheduler, vous pouvez choisir les rapports à exporter ou à imprimer, les formats vers lesquels exporter le rapport, ainsi que le calendrier et la fréquence de création des rapports. Voir Utilisation de C1ReportsScheduler pour plus d'informations.

Impression et aperçu Quelle que soit la simplicité ou la complexité de vos exigences d'impression, Reports for WinForms peut vous aider à ajouter des capacités d'impression et d'aperçu à votre projet rapidement et facilement. 

Le composant C1PrintDocument fournit un modèle objet riche qui vous permet de créer des documents arbitrairement complexes dans le code. Le modèle objet cible spécifiquement les documents paginés, offrant un riche ensemble de fonctionnalités facilitant la pagination automatique et intelligente de documents structurés complexes. Les documents peuvent être entièrement créés dans le code ou liés à une base de données via un modèle de liaison de données puissant et flexible. C1PrintDocument peut également importer et générer des définitions de rapport. Voir Travailler avec C1PrintDocument pour plus d'informations.

Le composant C1MultiDocument est conçu pour permettre la création, la persistance et l'exportation de documents volumineux qui ne peuvent pas être traités par un seul objet C1PrintDocument en raison de limitations de mémoire. C1MultiDocument prend en charge les liens entre les documents contenus, la table des matières commune, la numérotation des pages communes et le nombre total de pages.

Les composants d'aperçu visuel de Reports for WinForms fournissent un ensemble d'outils puissants, flexibles et faciles à utiliser qui vous permettent d'ajouter rapidement des capacités d'affichage de documents à votre application. Les composants intégrés (le contrôle C1PrintPreviewControl et la boîte de dialogue C1PrintPreviewDialog) permettent d'ajouter un aperçu d'aspect professionnel à vos applications en un clin d'œil, tandis que l'ensemble de contrôles spécialisés (C1PreviewPane, C1PreviewThumbnailView, C1PreviewOutlineView, C1PreviewTextSearchPanel) vous permet d'affiner votre aperçu comme autant que vous avez besoin.

Aide avec ComponentOne Studio pour WinForms Mise en route Pour plus d'informations sur l'installation de ComponentOne Studio pour WinForms, les licences, le support technique, les espaces de noms et la création d'un projet avec le contrôle, veuillez visiter Mise en route avec Studio pour WinForms. Quoi de neuf Pour une liste des dernières fonctionnalités ajoutées à ComponentOne Studio pour WinForms, visitez Quoi de neuf dans Studio pour WinForms.

Mise à niveau à partir de VSReport 8.0 Les utilisateurs de VSReport 8.0 n'auront aucun problème à utiliser C1Report. Bien que C1Report ait été complètement réécrit en C# pour tirer parti des dernières technologies .NET, le modèle objet est pratiquement identique à celui de VSReport 8.0. C1Report utilise les mêmes fichiers de définition de rapport et implémente toutes les fonctionnalités auxquelles vous êtes habitué, y compris les sous-rapports, les options d'exportation, y compris l'exportation HTML/DHTML/PDF, et bien plus encore. C1Report comprend également le même puissant concepteur de rapports que celui fourni avec VSView Reporting Edition, de sorte que la création et la personnalisation de vos rapports sont plus faciles que jamais. La principale différence entre VSReport et C1Report réside dans la manière dont les rapports sont rendus dans les contrôles d'aperçu : VSReport utilise le contrôle VSPrinter pour fournir un aperçu des rapports. Par exemple, la ligne de code suivante rendrait le rapport dans vsreport1 dans le contrôle vsprinter1 : 

Visual Basic VSReport1.Render(vsprinter1)

C1Report expose à la place un objet PrintDocument. Cet objet peut être utilisé pour imprimer le rapport, ou il peut être attaché à un contrôle d'aperçu tel que le ComponentOne C1PrintPreview ou le Microsoft PrintPreviewControl. Par exemple, la ligne de code suivante rendrait le rapport dans C1Report1 dans le contrôle C1PrintPreview1 : 

Visual Basic C1PrintPreview1.Document = c1r.Document

C# c1printPreview1.Document = c1r.Document

Les noms d'événement C1Report sont également différents de VSReport. Les événements ont été renommés car VSReport a des propriétés de gestionnaire de script avec le même nom que les événements. Dans .NET, les événements et les propriétés doivent avoir des noms différents. Hormis ces différences, les contrôles ont des modèles d'objet pratiquement identiques. Les deux implémentent la méthode RenderToFile, qui rend les rapports au format HTML, PDF et autres types de fichiers, et les deux exposent des collections de groupes, de sections et de champs.

Rapports et aperçu des versions .NET Le produit ComponentOne Reports pour WinForms a évolué à travers plusieurs versions. La version actuelle (n° 6 dans le tableau ci-dessous) est une combinaison des produits .NET 2.0 Preview for .NET et Reports for .NET. Le tableau suivant décrit les versions .NET disponibles des produits de génération de rapports et de prévisualisation ComponentOne. Notez que la liste a été numérotée pour différencier les versions (ce produit, Reports for WinForms, est #6 ci-dessous) : #