继承形式的初始化存在一个意想不到的问题。 我期望这可以工作:

public class MyChildForm : BaseForm
{

    public MyChildForm() {
        InitializeComponent();
    }
    public overrides void EndInit() {
        base.EndInit();

        //Do special tweaks to buttons on MyChildForm!
        DoYoAwesomeThang(myButton);
    }
}

但是它崩溃,因为MyChildForm上的按钮尚未初始化。 经调查,事实证明,这是由于我们实例化MyChildForm时的以下事件序列引起的:

  1. BaseForm构造函数称为

  2. 调用BaseForm.InitializeConstructor()

  3. BaseForm.InitializeConstructor触发EndInit()

  4. MyChildForm.EndInit()被调用....

    ...但是MyChildForm.InitializeComponent()尚未调用,所以我没有按钮!!

因此,我理解了问题所在,但是对于为什么做错了我感到困惑。 最后,我在InitializeComponent()之后将按钮调整放在MyChildForm构造函数中,此方法有效,但是我认为这是EndInit()的工作。

我的问题:

  1. 将按钮调整置于EndInit()内是否错误?

  2. 无法实现在继承的表单上实现的EndInit()吗?

===============>>#1 票数:0

当控件以某种形式初始化时,将多次调用EndInit 有时,调用EndInitEndInit尚未初始化的控件。 您可能正在寻找Loaded事件。

  ask by Brendan Hill translate from so

未解决问题?本站智能推荐:

1回复

在Bond中初始化继承的结构

我有一个Bond模式(理想情况下)将具有一些继承的字段: 当我创建派生对象( SampleEvent )时,可以这样做: 但是在哪里可以设置Context字段的初始化?
5回复

初始化继承类中的字段

在继承的类中初始化常量或其他字段的最佳方法是什么? 我意识到此示例中有很多语法错误,但这是最好的示例,可以清楚地说明我要执行的操作。 我要完成的几件事: 基类必须分配这3个字段。 理想情况下,我希望这些初始化的字段在类的顶部在一起,以便我可以看到分配给每个类的常量,并
3回复

WinForms继承的窗体无法看到父级的变量

我正在尝试使用父表单中的变量来存储变量。 父表单的代码如下: 因此,如果用户按下button1,它会将变量设置为“button1”。 按下button2将启动一个子窗体,定义如下: 因此,button3在父窗体中显示内部变量的值。 但是,它是空白的(无论是否设置)。 为什
1回复

WinForms设计器呈现控件之前如何运行初始化代码?

问题: WinForms设计器启动时,在开始呈现表单/控件之前,有什么方法可以运行一些初始化代码吗? 我通常会在Program.cs的入口点执行的操作。 我的具体情况: 我有一个控制容器的倒置(我正在使用SimpleInjector),我在程序运行时进行引导。 我在Program
2回复

WinForms控件-完全初始化后的操作

对于WinForms控件,我想在容器初始化控件之后(或者更好的是,在父级初始化所有包含的控件之后)添加处理程序。 原因:自定义控件具有自动触发动作的选项。 当首次启用此选项时,它也应该触发。 但是,此时,其他属性(如事件处理程序)尚未正确连接,因此效果不如预期。 这可能吗?
1回复

WinForms生成的代码自动隐藏继承的成员

我有两个链接到父类的子类,它们都是winform类。 问题出在所有类中的自动生成的代码上,这些代码具有以下公共签名: 根据编译器警告,我要消除: Warning: 'Project.Windows.Forms.FirstChildClass.InitializeComponent(
1回复

单元测试继承了WinForms控件

我最近一直在使用Model-View-Presenter,当我感觉自己懂得如何做时,最终遇到了我不太了解的新事物。 在我当前的情况下,我使用的是PictureEdit ( PictureEdit上是DevExpress WinForms控件的一部分,它是一个美化了的PictureBox )
3回复

Windows窗体继承

我想创建一堆具有相同属性的表单,并通过指定构造函数的参数来初始化表单构造函数中的属性。 我尝试创建一个继承自form的类,然后让我的所有表单继承自该类,但我认为因为我无法调用InitializeComponent(),所以我遇到了一些问题。 什么是C#代码如何做到这一点?
1回复

C#Winforms继承对象的用户控件并进行修改

我已经创建了一个名为ucn的用户控件,并带有一个填充该用户控件的datagridview。 创建完另一个从ucn继承的usercontrol之后: 在设计模式下,我看到了datagridview: 可以,但是我不能添加列。 在主用户控件中,我将Modifiers属性更
4回复

使现有Windows窗体可继承

在创建此特定应用程序时,我没有意识到我需要重用某些组件-一些Windows窗体和一两个类。 现在,我已经在一个项目中创建了相当复杂的表单,将这些表单转换为可在其他项目中重用的可继承表单的最简单方法是什么? 完成后,我想修改现有项目以使用新创建的可继承表单。 如何以尽可能少的痛苦完成