Как добавить кнопку на ранее существовавшую вкладку на ленте (С#)?
Я успешно создал новую вкладку и разместил ее рядом с уже существующими. Затем я понял, что на нем будет только одна кнопка, поэтому теперь имеет смысл (на данный момент) разместить ее на вкладке "Главная". На самом деле это не помогло.
Я пытался следить за гидами и прогулочными корытами. Я получил XML и изменил его XML на следующие.
<tabs>
<!--<tab idMso="TabAddIns">-->
<tab idMso="TabHome">
<group id="group1" label="Hazaa!">
<box id="box1" />
</group>
</tab>
</tabs>
Когда я запускаю проект, я не получаю никаких изменений в пользовательском интерфейсе, поэтому я думаю, что либо:
- XML не читается вообще,
- неверно имя
TabHome
(по крайней мере, для Outlook 2010),
- атрибут
idMso
неверен (по крайней мере, для Outlook 2010) или
- другое/сочетание любого из указанных.
Что я могу сделать, чтобы изменить ленту? (Outlook 2010/VSTO/VS 2010/.NET 4).
Ответы
Ответ 1
Атрибут idMso
верен, но идентификатор нужной вкладки TabMail
. Вы можете найти упакованный набор файлов Excel, содержащих списки идентификаторов управления Office 2010 в MSDN. Затем, как упоминалось в комментарии к вопросу, в вашем образце XML могут отсутствовать теги customUI и ленты. (Отказ от ответственности: я не настроил ленту в Outlook, только Word, Excel и PowerPoint, но я бы предположил, что они работают одинаково?)
Попробуйте что-то вроде этого:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab idMso="TabMail">
<group id="group1" label="Hazaa!">
<box id="box1" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Ответ 2
Если вы просто хотите, чтобы кнопка появилась на существующей ленте, в Visual Studio здесь https://msdn.microsoft.com/en-us/library/bb608628.aspx#Anchor_2
в вашем случае измените OfficeId на TabMail
Ответ 3
Под ред. Извините, дал ссылку dnn. Вы хотите офис и хотите С#.
Здесь ответ StackOverflow в VBA...
Как получить индивидуальные идентификаторы вкладок ленты?
AccessibleChildren _
Lib "oleacc.dll" _
(ByVal paccContainer As Object, _
ByVal iChildStart As Long, _
ByVal cChildren As Long, _
rgvarChildren As Variant, _
pcObtained As Long) _
As Long
Что в С# переводит на
[Lib "oleacc.dll"]
Long AccessibleChildren(object paccContainer,
long iChildStart,
long cChildren,
object rgvarChildren,
long pcObtained)...
Я никогда не пробовал, поэтому не уверен, что это работает.
Из всей другой документации, кажется, вы просто получаете ленточный объект, и в нем итерации (с помощью foreach) через все дочерние элементы
Ответ 4
Если люди разочарованы тем, что ни один из других ответов не работает, перейдите к свойствам самой ленты и установите для RibbonType
значение Microsoft.Outlook.Explorer
(или любой RibbonType
контекст, в котором вы хотите видеть элемент управления). Это важный шаг, который легко пропустить.
Затем следуйте другим инструкциям, чтобы установить OfficeId
на TabMail
.
Кроме того, Office 2016 Fluent Control Identifiers можно найти здесь: https://www.microsoft.com/en-us/download/confirmation.aspx?id=50745.