Hallo,
Ich versuche hauptsächlich die Druckfunktion eines Worddokumentes zu verbieten, zusätzlich will ich das Menü/Ribbons alle bis auf eins ausblenden.
über die Forumssuche habe ich dieses Thema gefunden:
Menüs in bzw. von Word ausblenden
Ich habe mir für die Foreach schleife einen speraten Thread gebaut aber der Fehler besteht weiterhin:
//Es ist ein Word 2010 Document über Visualstudio
//die ersten zwei Zeilen befinden sich in ThisDocument_Startup
Thread t = new Thread(Write);
t.start();
public void Write()
{
Thread.Sleep(10000);
foreach (Office.CommandBar cbar in Application.ActiveWindow.Application.CommandBars)
{
cbar.Visible = false; //Hier tritt Fehler auf
cbar.Enabled = false;
}
MessageBox.Show("Fertig");
}
Fehler: Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben
Hat jemand noch eine Idee, funktioniert das überhaupt?
Dann zum zweiten Punkt mit den Ribbons, hab mich bisschen umgesehen und gefunden wie man alle Ausblenden und eins behalten kann. Jedoch ist das Ribbon "Datei" davon nicht betroffen. Wie kann ich "Datei" ausblenden?
Oder weiß jemand vll eine ganz andere Lösung um das Drucken zu verbieten und/oder das Menü einzuschränken?
danke schonmal,
NeueWelt
mfg
Ist das auslagern in einen anderen Thread zwingend notwendig?
Multithreading in Verbindung mit COM/Office sollte man nach Möglichkeit vermeiden ausser man hat die notwendigen Kentnisse. (Die Materie ist tatsächlich recht kompliziert)
Welche Möglichkeit die Menüs auzublenden ist das genau? Ich vermute mal der reduzierte Modus(startFromScratch) wo Office Anwendungen alle Standard Menüs ausblenden bist auf die benutzerdefinierten?
Das Datei Menü auszublenden ist meines bisherigen Kentnisstands nicht möglich allerdings ist das BeforePrint Ereigniss für dich vielleicht interessant. Mit dem ref bool Cancel Parameter kannst du das drucken nach gut Düngen einfach abbrechen.
Danke Sebastian,
In dem Fall ist der Thread glaube ich nötig, oder man nimmt nen Timer.
Hab aber grade gelesen dass diese Methode mit den commandbars nur bis Office 2003 funktioniert(angeblich).
Du vermutest richtig mit startFromScratch, eben RibbonXML.
kannst du mir vll bei dem BeforePrint ereignis unter die Arme greifen, das Beispiel ist für Excel und ich schaffe es nicht auf Word umzuschreiben.
private void WorkbookBeforePrint()
{
this.BeforePrint += Word.ApplicationEvents_BeforePrint (ThisApplication_BeforePrint); //Hier was falsch
}
void ThisApplication_BeforePrint(bool Cancel)
{
if (DialogResult.No == MessageBox.Show("Are you sure " +
"you want to print the workbook?",
"Example", MessageBoxButtons.YesNo))
{
Cancel = true;
MessageBox.Show("Print is canceled.");
}
}
bei dem += in der Zeile, fehlt ein Assemblyverweis sagt die Fehlerliste, was müsste da hin?
mir fehlt das deklarieren des Events aber wohin?
public event ApplicationEvents_BeforePrint BeforePrint;
mfg
Nach Intensiven suchen doch gefunden:
Application.DocumentBeforePrint += new Word.ApplicationEvents4_DocumentBeforePrintEventHandler(Application_DocumentBeforePrint); //in Startup
void Application_DocumentBeforePrint(Word.Document Doc, ref bool Cancel)
{
if (MessageBox.Show("Do you want to print?", "DocumentBeforPrint", MessageBoxButtons.YesNo) == DialogResult.No)
{
Cancel = true;
}
}
mfg