2016-12-12 1 views
0

Objectifs: Remplir la forme et changer/enlever sa bordure. Problèmes: La couleur dont il est rempli devient l'opposé demandé (demander rouge, il est rempli de bleu).VB.Net: Formes de formatage

myColor = System.Drawing.Color.Blue 

Dim theShape As Microsoft.Office.Interop.Excel.Shape = xlWorkSheet.Shapes.AddShape(MsoAutoShapeType.msoShapeRectangle, (xlWorkSheet.Cells(theRow, theColumn)).Left, (xlWorkSheet.Cells(theRow, theColumn)).Top, 25, 14) 

theShape.Fill.ForeColor.RGB = myColor.ToArgb() 

En outre, pour changer la frontière, je trouve ça ... https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.powerpacks.shape.bordercolor.aspx.

Je suis allé à travers le processus d'installation des PowerPacks et l'ajout de Imports Microsoft.VisualBasic.Powerpacks mais cela ne me donne toujours pas la possibilité de changer la couleur de la bordure de ma forme. Y a-t-il autre chose que je dois faire ici?

theShape.borderColor = myColor.ToArgb 

Toute aide est grandement appréciée!

+0

'myColor = System.Drawing.Color.Red'? – Hackerman

+0

@Hackerman qui renvoie un rectangle bleu. Aucune idée pourquoi lol – Bob

+0

@Hackerman jaune renvoie un bleu clair – Bob

Répondre

1

Le problème ici est que Color.ToArgb() renvoie un entier ARGB dans le format AARRGGBB mais Excel attend un entier BGR, qui est dans le format BBGGRR.

Vous obtenez une forme bleue parce que quand vous appelez Color.Red.ToArgb() il emballera un ARVB entier comme ceci:

255 (Alpha) | 255 (Red) | 0 (Green) | 0 (Blue) 

Mais Excel interprète comme:

255 (Blue) | 0 (Green) | 0 (Red) 

Pour résoudre ce problème vous voulez avoir à convertir la couleur en un entier BGR au lieu d'un entier ARGB.

Cette fonction devrait faire l'affaire:

Public Function ToBgr(ByVal c As Color) As Long 
    Return (CUInt(c.R) << 0 Or CUInt(c.G) << 8 Or CUInt(c.B) << 16) And &HFFFFFFFF 
End Function 

Utilisation:

theShape.Fill.ForeColor.RGB = ToBgr(myColor) 
+0

Je suis désolé, mais il semble que la fonction ne fonctionne pas. Il a travaillé avec le rouge, mais quand je l'ai passé bleu et jaune, il est devenu bleu à rouge et jaune à bleu clair – Bob

+0

J'apprécie vraiment vos efforts si, je n'aurais jamais eu aucune idée de ce qui se passait – Bob

+0

@Bob: Que faire si vous enlever 'And & HFFFFFFFF'? –