C++builder 怎么实现一个ComboBox控制另一个ComboBox

我定义了两个ComboBox,想让一个ComboBox来控制另一个ComboBox就是ComboBox1里Items里是a,b,c.ComboBox2里对应为a----1... 我定义了两个ComboBox,想让一个ComboBox来控制另一个ComboBox 就是ComboBox1 里Items里是a,b,c. ComboBox2里对应为a---- 1,2,3 b------甲、乙、丙
c--------A、B、C;
请问怎么实现~
展开
 我来答
挂载
2011-07-23
知道答主
回答量:21
采纳率:0%
帮助的人:12.5万
展开全部
明白了,你想在第一个组合框ComboBox选择a时,第二个组合框中只填充1,2,3,即实现级联。
1、在组合框中填充内容有两种方法:
1)Comobo Box属性\数据:填入组合框内容,按Ctrl+Enter
2)在MFC ClassWizard中选中组合框ID,再选Messages ->CBN_SELCHANGE添加成员函数
并从数据库中读取要加入组合框中的列值。
如果你选的是第二种方法:
那么初始化第一个组合框内容时,不初始化第二个组合框里内容,并且在第一个组合框的OnSelchange...()函数中直接连接数据库,写sql语句读取第二个组合框内容要以第一个组合框变量为条件,实现两个组合框中内容的级联
举个例子:
目的是实现年级与班级的级联,选2007时,班级组合框中只有2007级班级编号
m_yearsel为第一个组合框变量(意为年级),m_clssel为第二个组合框变量(意为班级)m_yearsel.AddString("[无限定]");
cet.Format("select distinct(Class_Grade) from Classes");
m_AdoConn.GetRecordSet((_bstr_t)cet);
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
m_yearsel.AddString(_T((char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("Class_Grade")));
m_AdoConn.m_pRecordset->MoveNext();
}
void LevTestView::OnSelchangeYearsel()
{
// TODO: Add your control notification handler code here

yearselcur = m_yearsel.GetCurSel();
m_yearsel.GetLBText(yearselcur, yearsel);

if ( yearsel == "[无限定]")
yearsel = "%";

if (!m_AdoConn.OnInitADOConn())
{
AfxMessageBox("connection failed!");
return ;
}

m_clssel.AddString("[无限制]");
CString cet;
cet.Format("select Classes.Class_No from Classes where Classes.Class_Grade='%s'",yearsel);

m_AdoConn.GetRecordSet((_bstr_t)cet);
while(m_AdoConn.m_pRecordset->adoEOF==0)
{
m_clssel.AddString(_T((char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("Class_No")));
m_AdoConn.m_pRecordset->MoveNext();

}
m_AdoConn.ExitConnect();

}
Laplas
2011-07-23 · TA获得超过1万个赞
知道大有可为答主
回答量:2680
采纳率:50%
帮助的人:2432万
展开全部
如果ComboBox2只是显示变了,对应操作都相同,就用:
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
const String spNames[3][3] = {
{"1", "2", "3"},
{"甲","乙","丙"},
{"A","B","C"}};

long nIndex = ComboBox1->ItemIndex;
if (nIndex>=3) return;

TStringList * sl = new TStringList;
for (long k=0; k<3; k++)
sl->Add(spNames[nIndex][k]);

ComboBox2->Items = sl;
ComboBox2->ItemIndex = 0;
delete sl;
}

如果响应函数有很大不同,比如 ComboBox2里选1 甲 A 有不同操作,
可以考虑建3个ComboBox,有各自的响应函数。
放在同样位置叠加,用Visible控制,使用者看不出来是3个。
long nIndex = ComboBox1->ItemIndex;
this->ComboBox2->Visible = nIndex==0;
this->ComboBox3->Visible = nIndex==1;
this->ComboBox4->Visible = nIndex==2;
追问
大侠,谢谢你~我是初学者~能否加Q,好好请教下~我的Q 287385274
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
du瓶邪
推荐于2016-11-14 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2910万
展开全部
具体方法:
Event Form1.ComboBox1.SelectChange
Call Plugin.Office.OpenXls("c:\1.xls")
form1.combobox2.list=“”
i = 3
For 506
id = Plugin.Office.ReadXls(1, i, 3)
fuid = Plugin.Office.ReadXls(1, i, 2)
name = Plugin.office.readxls(1, i, 1)
If fuid =form1.ComboBox1.ListIndex+1 Then
form1.ComboBox2.list=form1.combobox2.list&"|"&name
End If
i=i+1
Next
Call Plugin.office.closexls("c:\1.xls")
End Event
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式