首页 > 解决方案 > 重定向自定义用户控件中的按钮单击时的设计器错误

问题描述

我创建了一个自定义用户控件,它本质上是我的 Windows 窗体应用程序中的一个自定义按钮。我使用以下代码管理了点击事件的重定向:

Control[] customButtonControls = button.Controls.Find("buttonInUserControl", false);
Button nestedButton = (Button)customButtonControls[0];
nestedButton.Click += new System.EventHandler(this.button_click_handling_function);

我已将此附加到控件生成代码下方的 Window_Name.Designer.cs 文件中,并button_click_handling_function在我的 Window_Name.cs 文件中进行了定义。

问题是当我点击返回 Window_Name.cs[Design] 页面时,我遇到了一个错误页面。我将包括屏幕截图以更好地显示错误。基本上这是一个超级无用的页面。它告诉我我的数组上有一个索引超出范围错误,但堆栈调用没有意义。

如果我尝试构建我的解决方案,我不会遇到任何编译错误,并且我的程序完全按照预期运行。click 事件和之前一样触发函数。

提前致谢。

WinForms 错误屏幕抓取

标签: c#visual-studiowinformsuser-controlsvisual-studio-2019

解决方案


部分设计器代码在设计时运行。索引超出范围错误可能是因为在设计时该 Find 调用尚未找到控件,因此数组为空。您没有检查 0 长度,因此当您取消引用它时,您会收到错误消息。它在运行时工作,因为此时控件已被实例化。

第二个问题是您不应该将内容放入 Designer.cs 文件中,因为该代码是由设计器自动生成的,并且可能会在某些时候重新生成并且您添加的代码会丢失。在 InitializeComponent 调用之后将该代码放入 Window_Name.cs 中。


推荐阅读