- 使用列表初始化选项卡式组合框。我们称它为“DefaultList”。
- 更改 GetStyleRowCol 或 OnLoadCellStyle 可重写函数中的选择列表。让我们称之为“自定义列表”
- “CustomList”显示在组合框中。
- 尝试从组合框中获取值时在 OnValidateCell 中。它总是返回空。实际上,该控件具有带有“DefaultList”的旧样式对象。
问题是 GetControl(nRow, nCol) 返回的控件始终具有带有“DefaultList”的初始样式对象。
环境:Stingray Studio 12.0 和 Visual Studio 2015
它在 VS 2008 和 Stingray Studio 2004 中运行良好
// Initialize the combo box
m_grid1.SetStyleRange(CGXRange().SetCols(1),
CGXStyle()
.SetControl(GX_IDS_CTRL_CBS_TABBED_DROPDOWN)
.SetChoiceList(_T("T00\t0\nT11\t1\nT22\t2\n"))
.SetUserAttribute(GX_IDS_UA_TABLIST_KEYCOL, _T("1"))
.SetUserAttribute(GX_IDS_UA_TABLIST_TEXTCOL, _T("0"))
.SetUserAttribute(GX_IDS_UA_TABLIST_SHOWALLCOLS, _T("0"))
.SetHorizontalAlignment(DT_LEFT)
);
// Change the combo box choice list
BOOL CSample2GridWnd::OnLoadCellStyle(ROWCOL nRow, ROWCOL nCol, CGXStyle & style, LPCTSTR pszExistingValue)
{
if (nCol == 1)
{
if (pszExistingValue == NULL && nRow >= GetFirstRow() && !m_bNoValueNeeded)
{
style.SetChoiceList(_T("Test 0\t0\nTest 1\t1\nTest 2\t2\n"));
style.SetValue(m_str[nRow-1]);
}
}
CGXBrowserWnd::OnLoadCellStyle(nRow, nCol, style, pszExistingValue);
return TRUE;
}
// validation routine
BOOL CSample2GridWnd::OnValidateCell(ROWCOL nRow, ROWCOL nCol)
{
if (nCol != 1)
return TRUE;
CString str;
// retrieve text from current cell
CGXControl* pControl = GetControl(nRow, nCol);
pControl->GetCurrentText(str);
str.Trim();
if (str.IsEmpty())
AfxMessageBox(_T("Please select a value from list."));
m_str[nRow-1] = str.Right(1);
return TRUE;
}