C#即使在设计模式下也会启动带定时器的用户控制

时间:2013-11-19 09:26:07

标签: c# timer

我有以下问题:

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

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

先谢谢你了!

的Dario

6 个答案:

答案 0 :(得分:2)

您可以查看DesignMode的{​​{1}}属性:

Control

或者更整洁:

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

答案 1 :(得分:2)

Timer_Tick(object sender, EventArgs e)
{
    if(this.DesignMode)
       return;
    //Rest of your code here
}

答案 2 :(得分:1)

检查控件的构造函数中是否未启动Timer - 这是导致此类行为的最可能原因。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

除了从user control添加新的form之外,您还可以通过user control

的编码创建Form1.Designer.cs
using System.Windows.Forms;

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

答案 5 :(得分:0)

正如很多人所说,你可以检查控件是否处于设计模式。

您可能遇到的问题是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;
}