我有以下问题:
我创建了一个用户控件库(DLL),它只有一个启用的Timer。当我尝试在应用程序中使用此控件时,只要我在设计模式下将其拖动到窗体,它就会开始计数!即使应用程序没有运行......我怎么能避免这种情况?
我的目标是,一旦应用程序启动,Timer就会开始计数,但不会在设计模式下开始计数......因为Timer会使用一些导致设计模式崩溃的外部函数。
先谢谢你了!
的Dario
答案 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;
}