如何使用" + =(o,e)=>"停止无限呼叫在c#中

时间:2014-07-22 13:31:55

标签: c# .net silverlight silverlight-5.0

我正在使用TabItem的GetFocus函数。我有不同的TabItems,当我在其他人之间切换时,它必须弹出一个MessageBox。我使用下面的代码:

       TabItem tbi = new TabItem();
       tbi.GotFocus += (o, e) => 
         {
          MessageBox.Show("it pop ups infinitely");
       };

如何解决它。是否有可能弹出一次然后控制来自这个功能?我的意思是。 " - =(O,E)"在Messagebox POP UP下面。 (我猜它会无限弹出,因为当我打开TabItem时它会持续打开并继续弹出)。 (请不要建议使用LostFocus)

2 个答案:

答案 0 :(得分:3)

这是有道理的,因为MessageBox会获得焦点,当你关闭它时,TabItem会再次获得焦点。也许一个简单的布尔标志可以修复它?

   bool focusing = false;
   TabItem tbi = new TabItem();
   tbi.GotFocus += (o, e) =>
   {
      if (focusing) {
          focusing = false;
          return;
      }
      focusing = true;
      MessageBox.Show("it pop ups infinitely");
   };

答案 1 :(得分:1)

所以你想在第一次调用它时立即删除它?

RoutedEventHandler handler = null;
handler = (o, e) => 
       {
          MessageBox.Show("it pop ups infinitely");
          tbi.GotFocus -= handler;
       };

tbi.GotFocus += handler;