在我的界面上,有ComboBox,Edit和ListControl
ComboBox 仓库号,ComboBox类型为DropList
Edit 仓库名称
在ListControl中也有仓库号,ListControl已设置为详细列表现在,我已实现下列功能:
对话框载入时自动从生成仓库号
通过对ListControl的点击事件,仓库号立刻反应到ComboBox中现在,我欲通过ComboBox的改变事件自动在仓库名称[Edit]中显示从仓库表中查到的记录
**************************************************************************
ComboBox的改变方式有两种:一种是通过ListControl改变,另一种是自身下拉的改变
这两种改变分别是在什么事件里?
**************************************************************************
我试了几个事件,都没有成功仓库表DepotInfo:
DepotId 仓库号 字符
DepotName 仓库名称 字符改变事件如下:
CComboBox m_DepotId;//仓库号----我定义的是Control,给我看下SQL语句是否还可以这样写
CString m_DepotName;//仓库名称void CThingInfo::OnXxxxxxx()//这里我选择过好几个事件,都没成功
{
try
{
CString Text;
Text.Format("select * from DepotInfo where DepotId='%s'",m_DepotId);//SQL语句是否还可以这样写
_RecordsetPtr pSet;
pSet.CreateInstance("ADODB.Recordset");
pSet->Open((_variant_t)Text,_variant_t((IDispatch*)theApp.pConn,true),adOpenStatic,adLockOptimistic,adCmdText); m_DepotName=(char*)(_bstr_t)pSet->GetCollect("DepotName");//仓库名称显示在这个Edit中 pSet->Close();
}
catch(_com_error e)
{
CString Temp;
Temp.Format("仓库名称显示错误信息:%s",e.ErrorMessage());
::MessageBox(NULL,Temp,"提示信息",NULL);
return;
}
}大侠们若有时间,能否给讲解一下几个主要ComboBox事件的区别,有几个事件从字面上看我都看不出什么差别.

解决方案 »

  1.   

    又是仓库.. 记得好像回答过你的一次问题...
    用的最多的是CBN_SELCHANGE,即下拉后选择了combobox中一项后触发的事件
    你是不是要选中combo一项后到数据中查询出来对应的名称
    你上面这样写:
    OnSelChangeCString Text;
    CString id;
    m_DepotId.GetLBText(m_DepoId.GetCurSel(),id);
    Text.Format("select * from DepotInfo where DepotId='%s'",id);
      

  2.   

    ComboBox的改变方式有两种:一种是通过ListControl改变,另一种是自身下拉的改变自身下拉的改变:CBN_SELCHANGE通过ListControl改变:你是怎么做的?SetWindowText?WM_SETTEXT,这个消息是由控件自己处理的,想捕捉这个消息的话比较麻烦,SetWindowLong自写消息处理。你可以在listctrl点击时同时改变combo的值和edit的值,这样比较方便
      

  3.   

    这个事件我已经试了N次了,现在我又试了一次,还是一点反应都没有,好奇怪
    void CThingInfo::OnSelchangeCOMBODepotId() 
    {
    try
    {
    CString Text;
    CString id;
    m_DepotId.GetLBText(m_DepotId.GetCurSel(),id);
    Text.Format("select * from DepotInfo where DepotId='%s'",id); _RecordsetPtr pSet;
    pSet.CreateInstance("ADODB.Recordset");
    pSet->Open((_variant_t)Text,_variant_t((IDispatch*)theApp.pConn,true),adOpenStatic,adLockOptimistic,adCmdText); m_DepotName=(char*)(_bstr_t)pSet->GetCollect("DepotName");
    UpdateData();
    pSet->Close();
    }
    catch(_com_error e)
    {
    CString Temp;
    Temp.Format("仓库名称显示错误信息:%s",e.ErrorMessage());
    ::MessageBox(NULL,Temp,"提示信息",NULL);
    return;
    }
    }
      

  4.   

    //ListControl改变事件如下:
    void CThingInfo::OnClickLISTThingInfo(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    int i = m_list.GetSelectionMark(); m_DepotId.SelectString(0,m_list.GetItemText(i,0));
    m_ThingId = m_list.GetItemText(i,1);
    m_ThingName = m_list.GetItemText(i,2);
    m_ThingUnit = m_list.GetItemText(i,3);
    m_ThingNowNum = m_list.GetItemText(i,4);
    m_ThingMinNum = m_list.GetItemText(i,5);
    m_ThingMaxNum = m_list.GetItemText(i,6);
    m_ThingRe = m_list.GetItemText(i,7); UpdateData(FALSE); *pResult = 0;
    }
      

  5.   

    什么叫一点反应都没有?
    你调试看看生成的SQL语句是否能够手动的查询成功
      

  6.   

    下拉选择现在我已经弄好了,原来是忘了刷新,UpdateData(FALSE);
    可是,Listcontrol的改变还没搞定!
      

  7.   

    哎...没人回贴了,我先用下笨办法:在Listcontrol事件中重新查一遍表
    我还是初学,以学习为主
    大侠们有空帮忙研究下如何让Edit适应ComboBox的ListControl
    明天晚上结贴
      

  8.   

    listcontrol的选择事件可以NM_CLICK事件或者LVN_ITEMCHANGE来做 :区别是第一个只能响应鼠标的,
    而第二个不仅鼠标可以,通过键盘上下移动也可以实现void CThingInfo::OnClickLISTThingInfo(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    POSITION pos = m_list.GetFirstSelectedItemPosition();
    if ( pos != 0 )
    {
    int i = m_list.GetNextSelectedItem(pos);
    m_DepotId.SelectString(0,m_list.GetItemText(i,0));
    //如果这里你还要combobox联动变化,就调用OnSelchangeComboDepot();
    m_ThingId = m_list.GetItemText(i,1);
    m_ThingName = m_list.GetItemText(i,2);
    m_ThingUnit = m_list.GetItemText(i,3);
    m_ThingNowNum = m_list.GetItemText(i,4);
    m_ThingMinNum = m_list.GetItemText(i,5);
    m_ThingMaxNum = m_list.GetItemText(i,6);
    m_ThingRe = m_list.GetItemText(i,7);
    UpdateData(FALSE);
    }
    else
    {
    //没有选择,比如点击到空白处可以清空界面上数据
    }
    *pResult = 0;
    }用LVN_ITEMCHANGE事件
    void CThingInfo::OnItemchangedLISTThingInfo(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

    UINT uOldState = pNMListView->uOldState;
    UINT uNewState = pNMListView->uNewState; if( pNMListView->iItem != -1)
    {
    // selection activate
    if( !(uOldState & LVIS_SELECTED) && (uNewState & LVIS_SELECTED) )
    {
    int i = pNMListView->iItem;
    m_DepotId.SelectString(0,m_list.GetItemText(i,0));
    //如果这里你还要combobox联动变化,就调用OnSelchangeComboDepot();
    m_ThingId = m_list.GetItemText(i,1);
    m_ThingName = m_list.GetItemText(i,2);
    m_ThingUnit = m_list.GetItemText(i,3);
    m_ThingNowNum = m_list.GetItemText(i,4);
    m_ThingMinNum = m_list.GetItemText(i,5);
    m_ThingMaxNum = m_list.GetItemText(i,6);
    m_ThingRe = m_list.GetItemText(i,7);
    UpdateData(FALSE);
    }

    //selection deactivated
    if( (uOldState & LVIS_SELECTED) && !(uNewState & LVIS_SELECTED) )
    {
    //清空界面
    }
    } *pResult = 0;
    }