从c#中的其他表单禁用计时器

时间:2014-08-02 15:11:31

标签: c#

你好我正在关注这篇帖子Control timer in form 1 from form 2, C#,回复,问题是我还不能解决它,我在form1上有一个计时器,我需要从form2中停止它尝试我在此发现的所有内容发布但仍然没有。

Form1中

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();
        form2.Show();

        timer1.Enabled = true;

    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        richTextBox1.AppendText("test\n");
    }
}

窗体2

public partial class Form2 : Form
{

    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        //
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        form1.Hide();
        form1.timer1.Enabled = false;

    }
}

任何人都可以帮助我吗?

更新:

static class Program
{

    /// <summary>
    /// Punto de entrada principal para la aplicación.
    /// </summary>
    [STAThread]
    public static Form1 MainForm;
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

1 个答案:

答案 0 :(得分:3)

问题是您正在创建Form1的新实例,因此这是一个不同的计时器,而不是您正在查看的表单实例。您需要存储对显示的Form1的引用(可能在您的Program.Main中)。

所以你的Program.Main可能是这样的:

static class Program
{

    public static int Main()
    {
        Form1 form = new Form1();
        Application.Run(form);
    }
}

您想要存储该引用,因此请将其修改为:

static class Program
{
    public static Form1 MainForm;

    [STAThread]
    public static int Main()
    {
        MainForm = new Form1(); // THIS IS IMPORTANT
        Application.Run(MainForm);
    }
}

然后您可以在Form2

中使用存储的参考资料
private void button1_Click(object sender, EventArgs e)
{
    Program.MainForm.Hide();
    Program.MainForm.timer1.Enabled = false;

}

这是一个功能性解决方案 - 我个人认为这不是一个最佳解决方案。我会考虑使用类似于Event Aggregator/Broker的内容,但如果这是一个非常简单的程序,而不需要复杂性,那么这就行了。

确保您需要访问的计时器修改为public,因为默认修饰符为private

使用IDE提供的“属性”面板或使用设计器代码。

public System.Windows.Forms.Timer timer2;

change modifier to public