2009-07-13 6 views
0

J'utilise VSTO, pour travailler avec Excel 2007 ...C# excel légende

considérons que j'ai une matrice comme suit

 A B C 
1 10 11 12 
2 10 12 11 
3 11 10 12 

je vais toujours lire une matrice aléatoire remplie de nombres aléatoires ... ex ci-dessus, et l'autre condition est qu'ils seront également colorés aléatoirement selon les mêmes numéros, par ex. dans le cas ci-dessus les cellules qui contiennent 10 seront colorées en rouge, celles avec 11 seront colorées en vert, et ainsi de suite ...

maintenant je dois mettre une sorte de panneau sur une feuille de calcul qui montrera des informations de ceci genre

rectangle with RED color - 10 
rectangle with GREEN color - 11 
rectangle with BLUE color - 12 

j'ai essayé de le faire avec des graphiques, mais malheureusement n'a pas réussi, ... je ne peux pas mettre ces informations sur une plage de cellules, ce n'est pas une solution que je suis à la recherche de,. .. je dois le mettre sur une sorte de panneau, de sorte que l'utilisateur sera en mesure de faire glisser le panneau où ils veulent, ..

Je n'ai aucune idée de la façon de le faire, s'il vous plaît pouvez-vous me suggérer un moyen de créer un certain type de panneau et de mettre cette information là ... Merci!

désolé de ne pas mentionner cela, iwant pour pouvoir mettre des rectangles à l'intérieur du panneau , de sorte que chaque fois que je déplace le panneau tous les composants du panneau doivent se déplacer ensemble ... aussi je ne veux pas être utilisateur en mesure de modifier le contenu du panneau, ils devraient seulement pouvoir déplacer le panneau seulement ...

Répondre

1

Pour le texte seulement, un textbox ferait probablement l'affaire. Si vous avez absolument besoin de rectangles, vous pouvez construire plusieurs objets de dessin: des rectangles remplis pour les rectangles colorés, des encadrés pour les descriptions et un rectangle avec un fond blanc pour servir de cadre à la légende. Une fois dessinés, vous pouvez les regrouper pour les transformer en un seul objet du POV des utilisateurs.

Voici un exemple de MSDN édité que j'ai converti en C# et testé:

Excel.Worksheet ex = (Excel.Worksheet)Application.ActiveSheet; 
ex.Shapes.AddShape(Microsoft.Office.Core.MsoAutoShapeType.msoShapeIsoscelesTriangle, 10, 10, 100, 100).Name = "shpOne"; 
ex.Shapes.AddShape(Microsoft.Office.Core.MsoAutoShapeType.msoShapeIsoscelesTriangle, 150, 10, 100, 100).Name = "shpTwo"; 
ex.Shapes.AddShape(Microsoft.Office.Core.MsoAutoShapeType.msoShapeIsoscelesTriangle, 300, 10, 100, 100).Name = "shpThree"; 
object[] shapeArray = {"shpOne", "shpTwo", "shpThree"}; 
Excel.ShapeRange rng = ex.Shapes.get_Range(shapeArray); 
Excel.Shape grp = rng.Group(); 

Cela crée trois triangles qui sont reliés entre eux - l'utilisateur ne les glisser autour comme si un seul objet.

+0

comment puis-je mettre rectangle à l'intérieur de la zone de texte? –

+0

Ah ... vous ne pouvez pas, je pensais que le contenu était texte seulement. Changer ma réponse pour une alternative ... –

+0

Salut merci beaucoup, est-il possible de rendre les composants de la légende immuable, seulement draggable ...? –