Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [c#] PIA - Microsoft.Office.Interop.PowerPoint

    Salve a tutti, sto utilizzando i PIA per visualizzare presentazioni powerpoint nella mia applicazione.
    Sto riscontrando però alcune difficoltà:
    La prima deriva dal fatto che ho la necessità di capire quando una presentazione è finita (non quando la presentazione viene chiusa, ma quando giungo all'ultima slide).
    Per ora ho usato un escamotage che però non mi soddisfa molto:
    codice:
    private int slide = 0;
    
    //altro codice
    p.SlideShowSettings.Application.SlideShowNextSlide += new Microsoft.Office.Interop.PowerPoint.EApplication_SlideShowNextSlideEventHandler(Application_SlideShowNextSlide);
    
    void Application_SlideShowNextSlide(Microsoft.Office.Interop.PowerPoint.SlideShowWindow Wn)
            {
                slide++;
    
                if (slide > Wn.Presentation.Slides.Count)
                {
                    slide = 0;
                    try
                    {
                        lblTitolo.Text = "prova";
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
    Ora in questo modo riesco a capire quando sono arrivato all'ultima slide, però mi viene generata un eccezione alla riga
    lblTitolo.Text = "prova";
    in particolare mi dice che non posso operare su lblTitolo perchè è stato creato in un altro thread.
    Qualcuno saprebbe come risolvere?
    Devo forse usare i delegate e invoke?
    Ah se qualcuno conosce un metodo migliore per individuare la fine della presentazione me lo dica^^

    grazie in anticipo per l'aiuto

  2. #2
    EDITATO IN BASSO
    ok, alla prima domanda sono riuscito a rispondermi da solo, un metodo più elegante per vedere se sono all'ultima slide è:
    codice:
    void Application_SlideShowNextSlide(Microsoft.Office.Interop.PowerPoint.SlideShowWindow Wn)
    {
    if (Wn.View.CurrentShowPosition == Wn.Presentation.Slides.Count)
    //codice da esegurie
    }
    per l'altra cosa invece necessito un aiutino :/

    EDIT:
    Ok, credo di aver risolto anche l'altro problema:
    codice:
    delegate void myDelegate(String a, String b);
    
    private void aggiornaLabel(String a, String b)
    {
    labelA.Text = a;
    labelB.Text = b;
    }
    
    void Application_SlideShowNextSlide(Microsoft.Office.Interop.PowerPoint.SlideShowWindow Wn)
            {
                if (Wn.View.CurrentShowPosition == Wn.Presentation.Slides.Count)
                {
                    try
                    {
                        myDelegate d = new myDelegate(aggiornaLabel);
                        object[] par = { "a", "b" };
                        
                        this.Invoke(d, par);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    
                }
            }
    se qualcuno ha suggerimenti migliori ben venga ^^
    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.