何らかの理由で一時的にスライド遷移を禁止したいので、遷移したときに瞬時に元にもどす処理。
SlideShowNextSlide 内で、GotoSlide()すると、再びSlideShowNextSlide イベントが発生する為、無限ループしてしまう。
それを回避する為に普通考えるのは、イベントの一時無効化だが、
int lastSlideNum; private void Application_SlideShowNextSlide(SlideShowWindow Wn) { if(何らかの理由){ app.SlideShowNextSlide -= form.Application_SlideShowNextSlide; Wn.View.GotoSlide(lastSlideNum, MsoTriState.msoFalse); app.SlideShowNextSlide += form.Application_SlideShowNextSlide; return; } lastSlideNum = Wn.View.CurrentShowPosition; //本来の処理 }
イベントハンドラを解除したはずなのに、再びイベントが発生し、無限ループしてしまう。原因は不明なので、別の方式にした。
int lastSlideNum; private void Application_SlideShowNextSlide(SlideShowWindow Wn) { if (lastSlideNum == Wn.View.CurrentShowPosition) return; //遷移の強制戻しの際はイベント抑止 if(何らかの理由){ Wn.View.GotoSlide(lastSlideNum, MsoTriState.msoFalse); return; } lastSlideNum = Wn.View.CurrentShowPosition; //本来の処理 }