表格1中的控制计时器来自表格2,C#

时间:2012-07-06 14:20:51

标签: c# timer multiple-forms

表单中的标签显示计时器的计数。现在我想停止,启动并使用表单2重置它。我该怎么做.plz help

3 个答案:

答案 0 :(得分:3)

表单只是类,表单2上的计时器是该类中的对象。

您可以将计时器的Modifiers属性更改为public,然后在表单1中实例化表单2,调用表单2的Show()方法,然后访问现在公开的计时器对象

所以你有一个包含两个表格的项目:

Solution Explorer

在表单1中创建一个按钮,如下所示:

Form One

在表单2上放置一个计时器对象并更改访问修饰符,如下所示:

Properties

然后将以下代码放在您的按钮下面,形式为:

private void button1_Click(object sender, EventArgs e)
{
    Form2 f2 = new Form2();
    f2.Show();
    f2.timer1.Enabled = true;
}

现在,您可以启动表单2并访问表单1中表单2上的计时器上的所有属性。

这有帮助吗?

答案 1 :(得分:2)

如果计时器对象驻留在Form1中,则为其创建一个公共属性:

public Timer Form1Timer { get { return timer1; } }

然后,您可以通过在表单2中引用表单1来访问此计时器。您可以通过将其传递给构造函数或在Form2上具有set属性来执行此操作。一旦你有对Form1的引用,你可以简单地调用计时器上的方法:

Form1.Form1Timer.Start();

如果您无法将Form1的引用传递给Form2,则始终可以从Form1中创建单例。

声明你的单身人士:

private static Form1 _singleton

初始化你的单例(如果它还没有),并将其返回:

 public static Form1 Singleton
 { 
    get { _singleton ?? (_singleton = new Form1()); } 
 }

要获得最佳实践,请将Form1构造函数设为私有。如果Form1没有默认构造函数(无参数),这当然不起作用。

然后在Form2中:

Form1.Singleton.Form1Timer.Start();

答案 2 :(得分:0)

这样做

static Form1 _frmObj;
public static Form1 frmObj
{
     get { return _frmObj; }
     set { _frmObj = value; }
}

在表单加载

private void Form1_Load(object sender, EventArgs e)
{
      frmObj= this;
}

访问表单及其他表单中的控件

Form1.frmObj.timer1.Stop();