【问题标题】:C# User control with timer starts even in design mode带有计时器的 C# 用户控件即使在设计模式下也会启动
【发布时间】:2013-11-19 09:26:06
【问题描述】:

我有以下问题:

我制作了一个用户控件库 (DLL),它只有一个启用的计时器。当我尝试在应用程序中使用此控件时,只要我将它拖到设计模式下的窗体中,它就会开始计数!即使应用程序没有运行......我怎样才能避免这种情况?

我的目标是,一旦应用程序启动,计时器就会开始计数,但不是在设计模式下...因为计时器使用了一些导致设计模式下崩溃的外部函数。

谢谢你!

达里奥

【问题讨论】:

  • 尝试删除您创建的用户控件并重新创建一个新的

标签: c# timer


【解决方案1】:

可以查看ControlDesignMode属性:

if (!this.DesignMode) {
    // its not in design mode.. so do stuff.
}

或者更整洁:

yourTimer.Enabled = !this.DesignMode;

【讨论】:

    【解决方案2】:
    Timer_Tick(object sender, EventArgs e)
    {
        if(this.DesignMode)
           return;
        //Rest of your code here
    }
    

    【讨论】:

      【解决方案3】:

      检查Timer 是否没有在控件的构造函数中启动——这是最可能的原因。

      【讨论】:

        【解决方案4】:

        除了从form 中添加新的user control,您还可以通过Form1.Designer.cs 编码来创建您的user control

        using System.Windows.Forms;
        
        public class MyTimer : Timer
        {
            public MyTimer()
            {
                // Set your custom timer properties here.
                this.Enabled = false;
            }
        }
        

        【讨论】:

          【解决方案5】:

          您可能在 GUI 线程之外启动了计时器,现在它正在滴答作响。 我建议这发生在你的 Control 的构造函数中。 将此更改为单独的方法或发布一些代码以清楚地了解您的问题。

          【讨论】:

          • 抱歉从解决方案复制... :S
          • 这仍会在设计模式下启动 Timer
          【解决方案6】:

          就像很多人说的,你可以检查控件是否处于设计模式。

          您可能面临的问题是Control.DesignMode 属性doesn't work properly for nested controls;它总是返回false

          这是一个您可以使用的固定版本:

          public static bool IsDesignMode(Control control)
          {
              if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)  // Initial quick check.
              {
                  return true;
              }
          
              while (control != null)
              {
                  System.ComponentModel.ISite site = control.Site;
          
                  if ((site != null) && (site.DesignMode))
                      return true;
          
                  control = control.Parent;
              }
          
              return false;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-07
            • 2011-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-30
            相关资源
            最近更新 更多