Lorsque j'écris un code dans le file de class partielle pour une feuille de calcul (Sheet8, par exemple), comment puis-je passer la class "this" en tant qu'espèce en attendant des objects avec l'interface Microsoft.Office.Interop.Excel.Worksheet?
Voici un exemple du file Sheet8.cs:
public partial class Sheet8 { private void Sheet8_startup(object sender, System.EventArgs e) { var object = new MyCustomClass(this); } }
Et le code consommateur que j'aimerais écrire:
class MyCustomClass { public MyCustomClass(Microsoft.Office.Interop.Excel.Worksheet sheet) { // Do something with the sheet } }
Le problème semble être que «ceci» fait toujours reference à l'object Sheet n et ne peut pas être transmis au type d'interface nécessaire à la création d'interfaces couplées avec un code personnalisé. Aucune suggestion?
Après des semaines de search, je l'ai compris. C'est vraiment embarrassant.
Chaque object Globals.SheetN
a une méthode InnerObject () qui renvoie un object avec la bonne interface. Un exemple de comment l'utiliser:
public partial class Sheet8 { Sheet8_startup(object sender, System.EventArgs e) { var sheet = new MyCustomClass(InnerObject()); } }
De là, vous pouvez créer des objects personnalisés et lâches dans le contenu de votre coeur!
Vous pouvez également utiliser this
mot this
key à la place de InnerObject()
.
public partial class Sheet8 { Sheet8_startup(object sender, System.EventArgs e) { var sheet = new MyCustomClass(this); } }
Ensuite, pour le constructor de votre class consommasortingce, utilisez le type Microsoft.Office.Tools.Excel.WorksheetBase
(au lieu du type de Worksheet
).
class MyCustomClass { public MyCustomClass(Microsoft.Office.Interop.Excel.WorksheetBase sheet) { // Do something with the sheet } }