Я переключаюсь между кнопками, добавляя / удаляя их динамически. После 20 переключений все приложение начинает работать все медленнее.
Кажется, это связано с функцией Dispose (). Когда я использую это, проблема становится худшей. Вы можете видеть, как я использовал это в вставленном коде.
Я использую Visual Studio 2010 Express.
Есть идеи, что я делаю неправильно?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Tracker
{
public partial class Tracker : Form
{
Button New_Trace = new Button();
Button Continue_Trace = new Button();
Button Save_Trace = new Button();
Button New_Point = new Button();
Button Exit_Trace = new Button();
public Tracker()
{
InitializeComponent();
Init_Menu1();
}
public void Init_Menu1()
{
New_Trace.Left = 20;
New_Trace.Top = 40;
New_Trace.Text = "New Trace";
this.New_Trace.Click += new System.EventHandler(this.New_Trace_Click);
this.Controls.Add(New_Trace);
Continue_Trace.Left = 100;
Continue_Trace.Top = 40;
Continue_Trace.Text = "Cont. Trace";
this.Continue_Trace.Click += new System.EventHandler(this.Continue_Trace_Click);
this.Controls.Add(Continue_Trace);
Save_Trace.Left = 180;
Save_Trace.Top = 40;
Save_Trace.Text = "Save Trace";
this.Save_Trace.Click += new System.EventHandler(this.Save_Trace_Click);
this.Controls.Add(Save_Trace);
}
public void Init_Menu2()
{
New_Point.Left = 20;
New_Point.Top = 40;
New_Point.Text = "New Point";
this.New_Point.Click += new System.EventHandler(this.New_Point_Click);
this.Controls.Add(New_Point);
Exit_Trace.Left = 180;
Exit_Trace.Top = 40;
Exit_Trace.Text = "Exit";
this.Exit_Trace.Click += new System.EventHandler(this.Exit_Trace_Click);
this.Controls.Add(Exit_Trace);
}
public void remove_Menu1()
{
if (this.Controls.Contains(New_Trace))
{
// this.New_Trace.Click -= new System.EventHandler(this.New_Trace_Click);
this.Controls.Remove(New_Trace);
//New_Trace.Dispose();
}
if (this.Controls.Contains(Continue_Trace))
{
// this.Continue_Trace.Click -= new System.EventHandler(this.Continue_Trace_Click);
this.Controls.Remove(Continue_Trace);
//Continue_Trace.Dispose();
}
if (this.Controls.Contains(Save_Trace))
{
// this.Save_Trace.Click -= new System.EventHandler(this.Save_Trace_Click);
this.Controls.Remove(Save_Trace);
//Save_Trace.Dispose();
}
}
public void remove_Menu2()
{
if (this.Controls.Contains(New_Point))
{
//this.New_Point.Click -= new System.EventHandler(this.New_Point_Click);
this.Controls.Remove(New_Point);
//New_Point.Dispose();
}
if (this.Controls.Contains(Exit_Trace))
{
//this.Exit_Trace.Click -= new System.EventHandler(this.Exit_Trace_Click);
this.Controls.Remove(Exit_Trace);
//Exit_Trace.Dispose();
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void New_Trace_Click(object sender, EventArgs e)
{
remove_Menu1();
Init_Menu2();
}
private void Continue_Trace_Click(object sender, EventArgs e)
{
}
private void Save_Trace_Click(object sender, EventArgs e)
{
}
private void New_Point_Click(object sender, EventArgs e)
{
}
private void Exit_Trace_Click(object sender, EventArgs e)
{
remove_Menu2();
Init_Menu1();
}
}
}