c# - 在任务栏中最小化表单时将其置于最前面

标签 c# winforms

有没有办法将已经最小化到 taksbar 的表单置于最前面?我尝试了以下代码但没有成功:

        filterForm.Show();
        filterForm.Activate();
        filterForm.BringToFront();

P.S:这个表单是从另一个表单调用的,用户在其中做一些事情然后可以最小化它。我只想一次打开此表单的一个实例,因此第二次用户单击按钮以显示我正在检查表单是否已显示的表单,如果显示,我希望它在前面:

public FilterForm filterForm;
public bool IsFilterFormActive;

private void tsOpenFilerForm_Click(object sender, EventArgs e)
{
    if (!IsFilterFormActive)
    {
        filterForm = new FilterForm();
        filterForm.FormClosing += delegate {
                                               IsFilterFormActive = false;
                                            };
        IsFilterFormActive = true;
        filterForm.Show();
    }
    else
    {
        filterForm.Show();
        filterForm.Activate();
        filterForm.BringToFront();
    }
}

最佳答案

您正在泄漏表单实例,最好的办法是在关闭时将其设置回 null。然后你也不需要 bool 。像这样:

    FilterForm filterForm;

    private void tsFilterForm_Click(object sender, EventArgs e) {
        if (filterForm == null) {
            filterForm = new FilterForm();
            filterForm.FormClosed += delegate { filterForm = null; };
            filterForm.Show();
        }
        else {
            filterForm.WindowState = FormWindowState.Normal;
            filterForm.Focus();
        }
    }

关于c# - 在任务栏中最小化表单时将其置于最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8914726/

相关文章:

c# - MVC ActionFilterAttribute 但仅在主视图上

c# - 用单引号转换多行逗号分隔的文本框值

c# - IEnumerable Linq 方法是线程安全的吗?

c# - 将窗口窗体的宽度设置为 100%,就像在 HTML 中一样

c# - 评估 Winforms 应用程序系统的本地化

c# - 跨线程传递数据的首选方式

c# - Process.Start 是否在父程序终止时终止子程序?

c# - Tulpep PopupNotifier 无法与计时器一起使用

c# - 在 Richtextbox 中插入分页符

c# - 如何设置行的高度以自动调整大小以适合内容