自定义控件事件处理程序问题

时间:2012-11-09 11:04:37

标签: c# winforms exception custom-controls designer

全部,我有一个使用单例模式调用的自定义用户控件。可以显示或隐藏此控件并更新UI(以提供显示/隐藏控件选项)我在控件构造函数中设置了一个事件处理程序。

this.VisibleChanged += new EventHandler(ResultsControl_VisibleChanged);

并且事件处理程序是

void ResultsControl_VisibleChanged(object sender, EventArgs e)
{
    // Get reference to Show/Hide button.
    var showHideResults = ((SqlEditorForm)this.ParentForm).ShowHideResultsButton;
    if (instance != null)
        showHideResults.Enabled = true;

    // Change the status.
    showHideResults.Text = this.Visible ? 
        "&Hide Query Results" : 
        "&Show Query Results";
    showHideResults.Image = this.Visible ?
        Properties.Resources.HideResultsVS201224 :
        Properties.Resources.ShowResultsVS201224;
}

问题在于我获得ShowHideResultsButton的引用方式。我从设计师那里得到了以下错误...

DesignerError

我在这里做错了什么?

感谢您的时间。


编辑。我似乎通过移动

解决了这个问题
this.VisibleChanged += new EventHandler(ResultsControl_VisibleChanged);

从构造函数到控件的Load事件。所以问题现在变成:这是一个有效的修复方法吗?

1 个答案:

答案 0 :(得分:1)

在您设计UserControl时,您没有SqlEditorForm的引用。只有当您使用设计师或代码将ParentForm放在SqlEditorForm上时,ResultsControl属性才会变为SqlEditorForm。在此之前IDE只知道它是Form类型。为什么不在ResultsControl_VisibleChanged中实施您的SqlEditorForm事件处理程序?