【问题标题】:WinForms Control - Action after it is fully initializedWinForms 控件 - 完全初始化后的操作
【发布时间】:2009-04-30 16:15:31
【问题描述】:

对于 WinForms 控件,我想在容器初始化控件之后添加一个处理程序(或者更好的是,在父控件初始化所有包含的控件之后)。

原因:自定义控件具有自动触发操作的选项。它也应该在首次启用此选项时触发。

但是,此时,其他属性(如事件处理程序)尚未正确连接,因此效果不如预期。

这可能吗?

[编辑]

我知道这听起来“有点不寻常”,所以我想澄清一下:

它适用于this component:大致上,添加了一个“自动创建新文档”的选项。

我可以在初始化期间或在初始化期间分配属性时创建 DocumentInfo 本身。但是,此时我还应该触发事件来告诉(通常是父窗体)它需要更新 UI。事件可能尚未连接,或者其他控件仍未初始化,这就是为什么我想延迟事件直到父窗体完全初始化。

【问题讨论】:

    标签: c# winforms initialization


    【解决方案1】:

    您是否尝试过连接到表单的 Load 事件并在那里完成工作? (请注意,每次显示表单时都会触发...)

    【讨论】:

    • “显示”如 .Visible = false / .Visible = true?
    • 是的。如果您希望它在创建 Form 对象时只运行一次,请将其放在 Form 的构造函数中,在 InitializeComponent 调用之后。
    • @Dan C.:不幸的是,这种方法不允许他将其放入组件本身,这(我相信)是他想要的。
    【解决方案2】:

    我所知道的唯一一件事就是直接从控件中执行此操作,将覆盖 OnVisibleChanged,并在第一次显示控件时处理您的操作。

    但是,我会重新考虑这样做的必要性。这将导致您的控件的行为与标准 Windows 窗体控件不同。试图将你的行为与非标准事件挂钩对我来说似乎是维护和可用性的噩梦......

    【讨论】:

    • 它是针对这个的:codeproject.com/KB/menus/fileselect.aspx 粗略的,添加一个选项“自动创建新文档”
    • 表单加载后您要添加什么?它可以默认创建,而是在初始化时创建,然后在设计时自定义?这似乎是一种更容易理解的方法。
    • 我看到了你的担忧,我已经更新了问题,也许这样更清楚了。
    • @peterchen:那么 OnVisibleChanged 应该适合你。它发生在所有初始化之后和 form_load 之后。到那时一切都应该设置好了。
    • 我有一个后续问题 (stackoverflow.com/questions/811036/…) - 如何找到组件的父级?
    猜你喜欢
    • 2014-10-20
    • 2011-07-30
    • 1970-01-01
    • 2012-11-13
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多