首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net:导航到不同表单时维护表单windowState

.Net:导航到不同表单时维护表单windowState
EN

Stack Overflow用户
提问于 2011-12-29 17:30:59
回答 3查看 875关注 0票数 2

在我应用程序中,用户可以导航到一个表单和另一个表单,依此类推。所以我想维护每个表单的WindowState。我的意思是,如果form1处于正常模式,那么下一个form2应该在正常模式下打开,如果form1处于最大化模式,那么form2应该在最大化模式下打开。当用户导航到上一个表单时,同样的方法也适用。我没有使用MDI Parent - child。

这样做的一种方法如下

代码语言:javascript
复制
frmLogin form = new frmLogin();
form.WindowState = this.WindowState;
form.Show();
this.Hide();

但我认为这种方法并不好。在这种情况下,我必须维护以前的表单对新表单的引用,以便当新表单关闭时,以前的表单会占据新表单的windowState

请推荐一个更好的替代方案

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-29 17:34:22

有一个中心位置(例如,FormStateManager类的对象),用于存储每个表单可用的WindowState信息。您可以使用单例模式在程序中只有一个FormStateManager对象,也可以在每个窗体的构造函数中传递正确的对象。每当表单更改其大小时,都必须通知FormStateManager对象,例如,在WindowState事件中。

票数 2
EN

Stack Overflow用户

发布于 2011-12-29 17:39:05

您可以使用当前的WindowState保留一个全局变量(某个类上的静态变量)。当窗体的窗口状态改变时,您可以设置该变量,当您创建一个新窗体时(例如,在构造函数中),您可以从该变量中读取窗口状态。

请注意,没有WindowStateChanged事件。但是,更改窗口状态会触发Resize事件,因此您可以使用该事件。

您甚至可以将所有这些放在一个基类中:

代码语言:javascript
复制
public class FormBase : System.Windows.Forms.Form
{
    private static FormWindowState _windowState = FormWindowState.Normal;

    public FormBase()
    {
        WindowState = _windowState;
    }

    protected override void OnResize(EventArgs e)
    {
        _windowState = WindowState;

        base.OnResize(e);
    }
}

如果你想做得更好,你可以同步所有表单的表单状态:

代码语言:javascript
复制
public class FormBase : System.Windows.Forms.Form
{
    private static List<FormBase> _allForms = new List<FormBase>();
    private static FormWindowState _windowState = FormWindowState.Normal;

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        _allForms.Add(this);

        WindowState = _windowState;
    }

    protected override void Dispose(bool disposing)
    {
        _allForms.Remove(this);

        base.Dispose(disposing);
    }

    protected override void OnResize(EventArgs e)
    {
        _windowState = WindowState;

        foreach (var form in _allForms)
        {
            if (form != this)
            {
                form.WindowState = WindowState;
            }
        }

        base.OnResize(e);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2011-12-29 17:38:44

在你遵循的方法中看不到任何问题。你有一个FormWindowState类型的变量,它保存了所有表单的最后一个“有效”状态(从你的应用程序的角度来看)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8666032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档