ちゃんと勉強してないから基本的なことで挫折しそうになる。でも、学習しない放浪記。
こんな感じなものをどうしたらいいかと試行錯誤中
dynamicMenuを使ってフォームを列挙したい。getContentで要求されるXMLをLINQでごによごにょしてずばっとできるかなと。
<dynamicMenu id="FormEnum"
label="フォーム"
getContent="getContent"
invalidateContentOnDrop="true" />
Function getContent(ctr As Office.IRibbonControl) As String
Dim root As XElement =
New XElement("menu", New XAttribute("itemSize", "normal"),
New XElement("menuSeparator",
New XAttribute("id", "sep1"),
New XAttribute("title", "クライアントフォーム")),
(From frm
In Globals.ThisAddIn.Application.CurrentProject.AllForms.Cast(Of Access.AccessObject)()
Order By frm.Name Where frm.IsWeb = False
Select New XElement("button",
New XAttribute("id", "f" & Guid.NewGuid.ToString("N")),
New XAttribute("label", frm.Name),
New XAttribute("imageMso", "CreateForm"),
New XAttribute("onAction", "onAction")
)
),
New XElement("menuSeparator",
New XAttribute("id", "sep2"),
New XAttribute("title", "Webフォーム")),
(From frm
In Globals.ThisAddIn.Application.CurrentProject.AllForms.Cast(Of Access.AccessObject)()
Order By frm.Name Where frm.IsWeb = True
Select New XElement("button",
New XAttribute("id", "f" & Guid.NewGuid.ToString("N")),
New XAttribute("label", frm.Name),
New XAttribute("imageMso", "CreateFormWeb"),
New XAttribute("onAction", "onAction")
)
)
)
Return Replace(root.ToString,
"menu",
"menu xmlns=""http://schemas.microsoft.com/office/2009/07/customui""",
1, 1)
End Function
最後の最後、xmlnsの扱いが解らず置換してしまった。
id属性にフォーム名を使うのはやめた。フォーム名にはスペースが含まれることがありえるから。あー、tagつけるの忘れた。
0 件のコメント:
コメントを投稿