在.designer.cs中控制创建

时间:2017-09-27 18:32:39

标签: c# forms winforms visual-studio-2017

我的应用程序中有一些用户控件可以返回他们正在坐下来获取一些初始化值的表单。根据形式,他们需要不同的行为。

因此,用户控制捕获OnLoad和ParentChanged事件,并使用FindForm来访问他们所依赖的表单......并且所有这些都已经好几年了。

然而,上周我们开始遇到一些控件没有正确初始化的问题,经过多次搜索后我发现发生的事情是,如果控件放在容器上而不是直接放在表单上,然后,当控件的ParentChanged事件触发时,可能是容器尚未添加到表单中,因此FindForm不起作用。

奇怪的是,这刚刚开始发生,似乎自从我们升级到最新的VS,在编辑后保存表单时,设计师正在大幅改变创建控件的顺序,有时候这样做导致失败。

有谁知道VS设计师的行为是否/为何发生了变化?而且,如果无论如何都要控制设计器文件中表单控件的创建顺序?

我可以手动编辑设计器文件进行修复,但是在重新保存时,VS会将其恢复原状。

1 个答案:

答案 0 :(得分:-1)

因此虽然这可能对您有用一段时间,但核心问题在于每个Designer.cs文件中包含的方便消息。

public class PostHomeCtx extends ContextWrapper {
    private final Activity activity;
    public PostHomeCtx(Activity context){
        super(context);
        activity = context;
    }

    public void doSomething(){
        if(someValueisOK)
            acivity.finish();
    }
}

实际上,此消息应该适用于Designer.cs文件中的任何内容。我会温和地建议您应该仔细查看代码以及为什么要执行您正在执行的操作,并尽快更改它以不依赖于Designer.cs文件修改。