我正在尝试使用两个devExpress checkedComboBoxes(框)来维护一个列表及其antilist(即两个组合框中的相同项目,并且必须仅在其中一个列表中检查它们。)
我正在使用C ++ / CLI,因此对于我处理的每个框
EditValueChanged += gcnew System::EventHandler(this, &SelectionControl::exclBox_EditValueChanged);
调用
void
box_ToggleAntibox(
DevExpress::XtraEditors::CheckedComboBoxEdit^ box,
DevExpress::XtraEditors::CheckedComboBoxEdit^ antibox )
{
using namespace DevExpress::XtraEditors::Controls ;
cli::array<String ^> ^ sAnti = gcnew cli::array<String ^>(2*box->Properties->Items->Count) ;
int ii = 0;
String ^ delim = ", ";
for each (CheckedListBoxItem^ i in box->Properties->GetItems()) {
if (i->CheckState==Windows::Forms::CheckState::Unchecked)
{
sAnti[ii] = i->Value->ToString();
++ii;
sAnti[ii] = delim;
++ii;
}
}
String ^ result = String::Concat(sAnti);
antibox->EditValue = result;
}
正如devExpress文档似乎要设置编辑值,而不是简单地遍历框列表并将反列表设置为!Checked。
但是,它似乎不起作用(正确的项目被添加到文本窗口,但没有检查任何内容)。此外,如果我在事件结束后查看我的框,我发现文本窗口中的字符串值是正确的(反映了我选择的内容),但是如果我打开它,那么所有项目都会被选中。
有人有任何建议吗?
更好的是设置每个项目的CheckState :: Checked?
谢谢!
答案 0 :(得分:0)
我花了一些时间与DevExpress支持人员交谈。简短的回答是,这应该有效 - 但不适合我们。您的里程可能会有所不同,但我们的解决方案是将两个组合框放在表格上的单独控件上。