Windows Forms模态对话框IDE正常,MSI安装后bindingSource事件失效
问题:IDE调试正常但MSI安装版中BindingSource.CurrentChanged事件未触发
简而言之
IDE调试期间,bindingSource.CurrentChanged事件触发正常,但通过MSI安装的Release编译版本中,该事件未触发——其他事件处理器表现符合预期。
功能目标
从自定义UserControl中启动一个自定义Windows对话框。对话框包含DataGridView,当前行变更时会更新同级多个TextBox控件。用户可修改文本后通过按钮关闭对话框,也可双击DataGridView目标行关闭。无论以何种方式关闭,对话框类的几个静态属性都会被设置;若.ShowDialog方法返回DialogResult.OK,宿主用户控件将使用这些属性值。
异常表现
- 异常1:对话框在IDE的Debug和Release模式下均可正常启动关闭,但MSI安装后,对话框虽能正常启停,宿主用户控件却无任何更新,仿佛对话框的静态属性未被设置。
- 异常2:安装版的对话框能正常显示
DataGridView(说明数据绑定成功),但当前行变更时,关联的TextBox控件无变化,像是事件注册/冒泡机制未运行。
解决方案结构
Windows应用分为两部分:包含Start窗体的主程序,以及包含众多控件和对话框的依赖库。该依赖库本质是类库功能,但为了事件日志注册,被编译为.exe程序而非.dll。
困惑点
单人维护的Git仓库历史记录较少,上次重大修改是一年前将传统*.csproj改为SDK风格,本次仅为常规功能添加。Azure DevOps流水线有测试保证多数用户控件行为稳定,但未覆盖此特定对话框。目前无法在代码库中定位明确的问题根源。
启动UnnaDotHelperDialog的UserControl点击处理器
private void btnUnnaLookup_Click(object sender, EventArgs e) { this.TextEntryInProgress = false; if (UnnaDotHelperDialog.ShowDialog(this.txtUnna.Text) == DialogResult.OK) { this.txtDescription.Text = UnnaDotHelperDialog.FormulatedDotShippingName; this.txtUnna.Text = UnnaDotHelperDialog.SelectedUnnaNumber; WasteFlattened wasteFlattened = (WasteFlattened)this.wasteFlattenedBindingSource.Current; wasteFlattened.Description = UnnaDotHelperDialog.FormulatedDotShippingName; wasteFlattened.UnnaNumber = UnnaDotHelperDialog.SelectedUnnaNumber; if (UnnaDotHelperDialog.SelectedErgNumber != null) { this.OnResourceGuideNumberSuggested(UnnaDotHelperDialog.SelectedErgNumber.Value); } } }
自定义UnnaDotHelperDialog.ShowDialog工厂方法
/// <summary> /// 传入宿主用户控件的搜索关键词 /// </summary> public static DialogResult ShowDialog(string unnaSearchText) { UnnaDotHelperDialog dlg = new UnnaDotHelperDialog(); dlg.txtSearchUnna.Text = unnaSearchText;//在对话框顶部回显搜索关键词 dlg.txtSearch_KeyDown(dlg.txtSearchUnna, new KeyEventArgs(Keys.Return));//执行搜索,填充DataGridView return dlg.ShowDialog(); }
内容的提问来源于stack exchange,提问作者bkwdesign
相关产品推荐
相关产品推荐

