为什么反射找不到wdDialogEditFind的具体成员?

时间:2012-09-13 04:07:52

标签: .net com ms-word vsto ms-office

我正在开发一个VSTO项目,并希望在隐藏模式中使用 Word对话框,就像下面的代码一样:

Code from MSDN

dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFilePageSetup];
dialog.PageWidth = "3.3\"";
dialog.PageHeight = "6\"";
dialog.TopMargin = "0.71\"";
dialog.BottomMargin = "0.81\"";
dialog.LeftMargin = "0.66\"";
dialog.RightMargin = "0.66\"";
dialog.HeaderDistance = "0.28\"";
dialog.Orientation = "0";
dialog.DifferentFirstPage = "0";
dialog.FirstPage = "0";
dialog.OtherPages = "0";

// Apply these settings only to the current selection with this line of code:
dialog.ApplyPropsTo = "3";

// Apply the settings.
dialog.Execute(); 

我想实现另一个diaglog wdDialogEditFind,但方法和属性未知。然后使用反射来检索它们(后期绑定)。但没有找到有用的方法。

Word.Dialog dlg = this.Application.Dialogs[Word.WdWordDialog.wdDialogEditFind];

System.Type t = dlg.Type.GetType();
System.Reflection.MemberInfo[] memInfo = t.GetMembers();

string str = "";
foreach (System.Reflection.MemberInfo m in memInfo)
    str += m.Name + "\n";

1 个答案:

答案 0 :(得分:1)

MS Word互操作会隐藏这些成员,因为它依赖于 COM RCW 。反射不能用于迭代属性,因为它们没有为Dialog基类型定义。如果您想知道哪些属性可用 - 请参阅this MSDN reference了解wdDialogEditFind的内置对话框参数。

wdDialogEditFindfrom MSDN

的内置对话框参数
  

查找,替换,方向,MatchCase,WholeWord,PatternMatch,SoundsLike,FindNext,ReplaceOne,ReplaceAll,Format,Wrap,FindAllWordForms,MatchByte,FuzzyFind,Destination,CorrectEnd,MatchKashida,MatchDiacritics,MatchAlefHamza,MatchControl

如果您坚持了解COM方法和属性 - 您可以深入研究IDispatchweed your way through the COM types