c# - 重定向自定义用户控件中的按钮单击时的设计器错误
问题描述
我创建了一个自定义用户控件,它本质上是我的 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 事件和之前一样触发函数。
提前致谢。
解决方案
部分设计器代码在设计时运行。索引超出范围错误可能是因为在设计时该 Find 调用尚未找到控件,因此数组为空。您没有检查 0 长度,因此当您取消引用它时,您会收到错误消息。它在运行时工作,因为此时控件已被实例化。
第二个问题是您不应该将内容放入 Designer.cs 文件中,因为该代码是由设计器自动生成的,并且可能会在某些时候重新生成并且您添加的代码会丢失。在 InitializeComponent 调用之后将该代码放入 Window_Name.cs 中。
推荐阅读
- python - pip 和 tox 忽略完整路径依赖,而是在 pypi 中寻找“最佳匹配”
- keras - 批量预测仅返回一个输出
- excel - VBA过滤选定的单元格
- c# - 处理 GetExportedTypes 中的类型加载错误
- ubuntu-20.04 - Apache2 H10292 自动更新后代理 UDS 文件名无效错误(Ubuntu 20.04)
- .net - 如何将数字/文本添加到 winform,以便应用程序的每个副本都是唯一可识别的?
- go - 在 Go 中从 Kafka REST 代理中提取数据
- python - 在特定分钟删除行
- javascript - Javascript - 这可以在循环中重写吗?
- java - 如何将此 Json 映射到 Gson?