在C#中将控件和变量的状态从一种形式复制到另一种形式

马克·佩雷拉

我有一个Windows窗体。如果用户未选择复选框,则稍后按下一步时会打开一个新表单,但如果确实选中它,则使用相同的表单。
我希望当前表单的副本出现(具有相同的变量和控制值)(如果他们选中了该复选框),以便他们以后可以更改值而无需取消选中该复选框,然后再次按下一步,然后手动键入其他值。

Form duplicate = this;只是引用相同的形式而没有这样的东西new(this)
我无法尝试,Form duplicate = new Form() = this因为我的表单从早期的表单中获取了构造函数

提前致谢

吉恩·麦基(Zein Makki)

您可以在表单中添加以下方法:

public void RestoreState(Dictionary<string, object> controlStates, 
                         Dictionary<string, object> membersStates)
{
    InternalRestoreControls(controlStates);
    InternalRestoreMembers(membersStates);
}

private void InternalRestoreControls(Dictionary<string, object> states)
{
    foreach (var state in states)
    {
        Control c = this.Controls.Find(state.Key, true).FirstOrDefault();

        if (c is TextBox)
        {
            (c as TextBox).Text = state.Value == null ? null : state.Value.ToString();
        }
        else if (c is CheckBox)
        {
            (c as CheckBox).Checked = Convert.ToBoolean(state.Value);
        }
    }
}

private void InternalRestoreMembers(Dictionary<string, object> membersStates)
{
    // you might need to tweek this a little bit based on public/instance/static/private
    // but this is not the point of your question

    BindingFlags flags = BindingFlags.Instance | BindingFlags.Static
                       | BindingFlags.Public | BindingFlags.NonPublic;

    var props = this.GetType().GetProperties(flags);
    var fields = this.GetType().GetFields(flags);

    foreach(var variable in membersStates)
    {
        var prop = props.FirstOrDefault(x => x.Name == variable.Key);

        if(prop != null)
        {
            prop.SetValue(this, variable.Value);
            continue;
        }

        var field = fields.FirstOrDefault(x => x.Name == variable.Key);

        if(field != null)
        {
            field.SetValue(this, variable.Value);
            continue;
        }
    }
}

private Dictionary<string, object> GetControlsState()
{
    return new Dictionary<string, object>()
    {
        { txtBox1.Name, txtBox1.Text },
        // continue to the rest
    };
}

private Dictionary<string, object> GetMembersState()
{
    return new Dictionary<string, object>()
    {
        { nameof(variable1), variable1 },
        // continue to the rest
    };
}

用法:

Form duplicate = new Form();
duplicate.RestoreState(this.GetControlsState(), this.GetMembersState());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中将面板从一种形式复制到另一种形式

来自分类Dev

在Windows Form C#中将数据从一种形式传递到另一种形式

来自分类Dev

Foreach在将所有控件从一种形式复制到另一种形式时没有遍历所有控件

来自分类Dev

将输入值从一种形式复制到另一种形式

来自分类Dev

将输入值从一种形式复制到另一种形式

来自分类Dev

在Visual Basic 6中将控件从一种形式显示到另一种形式

来自分类Dev

将datagridview从一种形式传递到另一种c#

来自分类Dev

jQuery-将输入值从一种形式复制到另一种形式(形式和输入名称相同)

来自分类Dev

在vb.net中将变量从一种形式传递到另一种形式

来自分类Dev

在PHP中将变量的值从一种形式传递到另一种形式

来自分类Dev

在vb6中将变量从一种形式传递到另一种形式

来自分类Dev

如何在c#中将数据从一种形式传输到另一种形式?

来自分类Dev

在C#中使用变量从一种形式转换为另一种形式

来自分类Dev

如何将变量从一种 qt 形式传递到另一种形式的 qt 形式?

来自分类Dev

如何将值从一种形式传递到另一种形式的动态创建的控件

来自分类Dev

如何在 MS Access 中反映/复制从一种形式到另一种形式的更改

来自分类Dev

在PHP中将下拉选择列表的内容从一种形式传递到另一种形式

来自分类Dev

在 Yii2 中将数据从一种形式传递到另一种形式

来自分类Dev

将信息从一种形式传递到另一种形式?

来自分类Dev

从一种形式的类继承到另一种形式的类

来自分类Dev

PHP从一种形式获取价值到另一种形式

来自分类Dev

如何执行从一种形式到另一种形式的更新查询

来自分类Dev

使用从一种形式到另一种形式的公共空隙

来自分类Dev

如何减少从一种形式到另一种形式的加载时间

来自分类Dev

我如何将公共变量从一种形式传递到另一种形式

来自分类Dev

在MySql中将表和数据从一种模式复制到另一种的脚本

来自分类Dev

在MySql中将表和数据从一种模式复制到另一种的脚本

来自分类Dev

将数据从一种纹理复制到另一种-OpenGL

来自分类Dev

将数据从一种纹理复制到另一种-OpenGL

Related 相关文章

  1. 1

    在C#中将面板从一种形式复制到另一种形式

  2. 2

    在Windows Form C#中将数据从一种形式传递到另一种形式

  3. 3

    Foreach在将所有控件从一种形式复制到另一种形式时没有遍历所有控件

  4. 4

    将输入值从一种形式复制到另一种形式

  5. 5

    将输入值从一种形式复制到另一种形式

  6. 6

    在Visual Basic 6中将控件从一种形式显示到另一种形式

  7. 7

    将datagridview从一种形式传递到另一种c#

  8. 8

    jQuery-将输入值从一种形式复制到另一种形式(形式和输入名称相同)

  9. 9

    在vb.net中将变量从一种形式传递到另一种形式

  10. 10

    在PHP中将变量的值从一种形式传递到另一种形式

  11. 11

    在vb6中将变量从一种形式传递到另一种形式

  12. 12

    如何在c#中将数据从一种形式传输到另一种形式?

  13. 13

    在C#中使用变量从一种形式转换为另一种形式

  14. 14

    如何将变量从一种 qt 形式传递到另一种形式的 qt 形式?

  15. 15

    如何将值从一种形式传递到另一种形式的动态创建的控件

  16. 16

    如何在 MS Access 中反映/复制从一种形式到另一种形式的更改

  17. 17

    在PHP中将下拉选择列表的内容从一种形式传递到另一种形式

  18. 18

    在 Yii2 中将数据从一种形式传递到另一种形式

  19. 19

    将信息从一种形式传递到另一种形式?

  20. 20

    从一种形式的类继承到另一种形式的类

  21. 21

    PHP从一种形式获取价值到另一种形式

  22. 22

    如何执行从一种形式到另一种形式的更新查询

  23. 23

    使用从一种形式到另一种形式的公共空隙

  24. 24

    如何减少从一种形式到另一种形式的加载时间

  25. 25

    我如何将公共变量从一种形式传递到另一种形式

  26. 26

    在MySql中将表和数据从一种模式复制到另一种的脚本

  27. 27

    在MySql中将表和数据从一种模式复制到另一种的脚本

  28. 28

    将数据从一种纹理复制到另一种-OpenGL

  29. 29

    将数据从一种纹理复制到另一种-OpenGL

热门标签

归档