无法将DevExpress CheckEdit.EditValue设为True,赋值后仍为Nothing
解决XtraTabControl未激活标签页中CheckEdit默认勾选的问题
方案1:强制初始化所有标签页的UserControl
XtraTabControl默认仅加载当前选中标签页的内容,未选中标签页对应的UserControl不会触发Loaded事件,也无法完成完整初始化。可以在窗体初始化完成后,遍历所有TabPage,强制初始化内部的UserControl,再定位到CheckEdit设置值。
代码示例
private void MainForm_Load(object sender, EventArgs e) { // 遍历XtraTabControl的所有标签页 foreach (XtraTabPage tabPage in xtraTabControl1.TabPages) { // 获取标签页中的UserControl(假设每个TabPage仅包含一个UserControl) if (tabPage.Controls.Count > 0 && tabPage.Controls[0] is UserControl uc) { // 强制创建控件句柄,触发完整初始化逻辑 uc.CreateControl(); // 查找BindingNavigator中的CheckEdit控件(替换为你的CheckEdit实际名称) var checkEdit = FindTargetCheckEdit(uc, "checkEdit_IsEnabled"); if (checkEdit != null) { checkEdit.EditValue = true; } } } } // 递归查找目标CheckEdit的辅助方法 private CheckEdit FindTargetCheckEdit(Control parent, string targetName) { foreach (Control ctrl in parent.Controls) { if (ctrl is CheckEdit checkEdit && ctrl.Name == targetName) { return checkEdit; } var found = FindTargetCheckEdit(ctrl, targetName); if (found != null) { return found; } } return null; }
方案2:切换标签时补全设置(性能友好)
如果担心一次性初始化所有控件影响启动性能,可以在用户切换到未激活标签页时,检查并设置CheckEdit的值:
代码示例
private void xtraTabControl1_SelectedPageChanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e) { if (e.Page.Controls.Count > 0 && e.Page.Controls[0] is UserControl uc) { var checkEdit = FindTargetCheckEdit(uc, "checkEdit_IsEnabled"); // 仅当CheckEdit处于未初始化状态时赋值 if (checkEdit != null && checkEdit.EditValue == null) { checkEdit.EditValue = true; } } } // 复用方案1中的FindTargetCheckEdit辅助方法 private CheckEdit FindTargetCheckEdit(Control parent, string targetName) { foreach (Control ctrl in parent.Controls) { if (ctrl is CheckEdit checkEdit && ctrl.Name == targetName) { return checkEdit; } var found = FindTargetCheckEdit(ctrl, targetName); if (found != null) { return found; } } return null; }
关键说明
CreateControl()方法会强制控件完成初始化流程(即使不可见),这样就能访问到BindingNavigator内部的CheckEdit并修改值。- 辅助方法需要根据你项目中CheckEdit的实际名称调整参数,也可以直接遍历BindingNavigator的
Controls集合定位控件。 - 由于第三方BindingNavigator代码无法修改,只能通过外部控件查找的方式完成设置。
内容的提问来源于stack exchange,提问作者Ted Burgess
相关产品推荐
相关产品推荐

