我已经创建了一个自定义用户控件,它实质上是Windows窗体应用程序中的一个自定义按钮。我使用以下代码管理了click事件的重定向:
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]页面时,遇到错误页面。我将包括屏幕截图,以更好地显示错误。基本上,这是一个超级无用的页面。它告诉我我的数组上有一个索引超出范围错误,但是堆栈调用没有任何意义。
如果我尝试构建自己的解决方案,则不会遇到编译错误,并且我的程序将完全按照预期的方式运行。单击事件会像以前一样触发该功能。
谢谢。
答案 0 :(得分:0)
设计器代码的某些部分在设计时运行。索引超出范围错误可能是因为在设计时,该Find调用尚未找到控件,因此该数组为空。您没有在检查0长度,因此在取消引用时会出现错误。 它在运行时有效,因为那时控件已实例化。
但是,第二个问题是您不应该将内容放入Designer.cs文件中,因为该代码是由设计器自动生成的,并且可以在某些时候重新生成,并且添加的代码会丢失。将该代码放在InitializeComponent调用之后的Window_Name.cs中。