Как автоматизировать очистку всплывающей подсказки в UserControl

Я отслеживал утечку памяти и я узкий d до всплывающей подсказки, которая выделяется в классе, производном от UserControl.

Всплывающая подсказка выделяется в выделенном месте в конструкторе элемента управления и инициализируется в событии Load следующим образом:

public class CommonProfile : System.Windows.Forms.UserControl
{
    private ToolTip toolTip1;

    ...

    public CommonProfile()
    {
        InitializeComponent();

        // Create the ToolTip and associate with the Form container.
        toolTip1 = new ToolTip(this.components);
    }

    private void CommonProfile_Load(object sender, System.EventArgs e)
    {
        // Set up the delays for the ToolTip.
        toolTip1.AutoPopDelay = 5000;
        toolTip1.InitialDelay = 1000;
        toolTip1.ReshowDelay = 500;
        // Force the ToolTip text to be displayed whether or not the form is active.
        toolTip1.ShowAlways = true;

        // Set up the ToolTip text
        toolTip1.SetToolTip(this.btnDeleteEntry, "Delete this Profile");
        toolTip1.SetToolTip(this.lblProfileType, "Edit this Profile");
        toolTip1.SetToolTip(this.lblProfileData, "Edit this Profile");
        toolTip1.SetToolTip(this.picFlagForUpdate, "Toggle Flag for Update");
    }    
}

Родитель элемента управления имеет время жизни, превышающее время жизни элемента управления. Этот элемент управления создается «на лету» и добавляется к элементу управления панели, а затем удаляется из элемента управления панели.

Я обнаружил, что элемент управления Dispose не вызывается, по-видимому, из-за того, что остались ссылки на всплывающую подсказку.

Я добавил такой метод Shutdown:

public void Shutdown()
{
    toolTip1.RemoveAll();
}

Вызов метода Shutdown устраняет утечку, и в конечном итоге вызывается Dispose.

К сожалению, это решение требует, чтобы тот, кто использует элемент управления, запомнил вызов метода Shutdown, когда он закончит с ним.

Я хотел бы знать, есть ли способ автоматизировать это, чтобы это происходило без необходимости явно вызывать метод Shutdown.

5
задан Avalanchis 22 November 2011 в 15:01
поделиться