MFC控件:listbox控件用法详解

发布时间:2016-12-6 13:53:02 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"MFC控件:listbox控件用法详解",主要涉及到MFC控件:listbox控件用法详解方面的内容,对于MFC控件:listbox控件用法详解感兴趣的同学可以参考一下。

获取选中项的字符串: CString strText; int nIndex = m_listbox.GetCurSel(); m_listbox.GetText(nIndex, strText); ListBox的操作比较简单 1添加数据 声明控件变量的类别为Control,变量类型为CListBox,变量名为m_ListBox_Content. m_ListBox_Content.AddString(_T("123")); m_ListBox_Content.AddString(_T("汉字")); m_ListBox_Content.AddString(_T("English")); m_ListBox_Content.AddString(_T("!@#$%^&*()")); 2获取数据 CString s; m_ListBox_Content.GetText(1,s); MessageBox(s,_T("取得第2行数据"),MB_OK); s.ReleaseBuffer(); 将会得到"汉字"这个字符串,如果没有得到"汉字"这个字符串,是因为ListBox的Sort属性设为True了.设为False之后就按照你编写的顺序写入(原来是这样 之前都没注意过) 3获取选择的数据 首先要将ListBox的Selection属性设置为Multiple; int nSel; nSel=m_ListBox_Content.GetCurSel(); CString s; m_ListBox_Content.GetText(nSel,s); MessageBox(s,_T("您选择的是"),MB_OK); s.ReleaseBuffer(); 4获取选择ListBox项的多个数据 首先要将ListBox的Selection的属性设置为Multiple int nSel = m_ListBox_Content.GetSelCount(); CArray< int,int& > arrayListSel; arrayListSel.SetSize(nSel);    m_ListBox_Content.GetSelItems(nSel,arrayListSel.GetData());    CString s = _T(""); for( int i=0; i< nSel; i++ ) { m_ListBox_Content.GetText( arrayListSel[i], s); MessageBox(s,_T("您选择的是"),MB_OK); } 5双击删除所选项 添加一个ListBox的双击事件 m_ListBox_Content.DeleteString(m_ListBox_Content.GetCurSel());     //例子:  CListBox *List;  List=(CListBox*)GetDlgItem(IDC_LIST1);  List -> AddString("AAA");  List -> SetCurSel(0);   1. 属性列表:     SelectionMode    组件中条目的选择类型,即多选(Multiple)、单选(Single)     Rows             列表框中显示总共多少行     Selected         检测条目是否被选中     SelectedItem     返回的类型是ListItem,获得列表框中被选择的条目     Count            列表框中条目的总数     SelectedIndex    列表框中被选择项的索引值     Items            泛指列表框中的所有项,每一项的类型都是ListItem 2. 取列表框中被选中的值        ListBox.SelectedValue   3. 动态的添加列表框中的项:      ListBox.Items.Add("所要添加的项"); 4. 移出指定项:      //首先判断列表框中的项是否大于0      If(ListBox.Items.Count > 0 )      { //移出选择的项 ListBox.Items.Remove(ListBox.SelectedItem);      } 5. 清空所有项:      //首先判断列表框中的项是否大于0      If(ListBox.Items.Count > 0 )      { //清空所有项 ListBox.Items.Clear();      } 6. 列表框可以一次选择多项:          只需设置列表框的属性 SelectionMode="Multiple",按Ctrl可以多选 7. 两个列表框联动,即两级联动菜单      //判断第一个列表框中被选中的值      switch(ListBox1.SelectValue)      { //如果是"A",第二个列表框中就添加这些: case "A"       ListBox2.Items.Clear();       ListBox2.Items.Add("A1");       ListBox2.Items.Add("A2");       ListBox2.Items.Add("A3"); //如果是"B",第二个列表框中就添加这些: case "B"       ListBox2.Items.Clear();       ListBox2.Items.Add("B1");       ListBox2.Items.Add("B2");       ListBox2.Items.Add("B3");      } 8. 实现列表框中项的移位      即:向上移位、向下移位      具体的思路为:创建一个ListBox对象,并把要移位的项先暂放在这个对象中。      如果是向上移位,就是把当前选定项的的上一项的值赋给当前选定的项,然后      把刚才新加入的对象的值,再附给当前选定项的前一项。      具体代码为:       //定义一个变量,作移位用       index = -1;       //将当前条目的文本以及值都保存到一个临时变量里面       ListItem lt=new ListItem (ListBox.SelectedItem.Text,ListBox.SelectedValue);       //被选中的项的值等于上一条或下一条的值       ListBox.Items[ListBox.SelectedIndex].Text=ListBox.Items[ListBox.SelectedIndex + index].Text;       //被选中的项的值等于上一条或下一条的值       ListBox.Items[ListBox.SelectedIndex].Value=ListBox.Items[ListBox.SelectedIndex + index].Value;       //把被选中项的前一条或下一条的值用临时变量中的取代       ListBox.Items[ListBox.SelectedIndex].Test=lt.Test;       //把被选中项的前一条或下一条的值用临时变量中的取代       ListBox.Items[ListBox.SelectedIndex].Value=lt.Value;       //把鼠标指针放到移动后的那项上       ListBox.Items[ListBox.SelectedIndex].Value=lt.Value; 9. 移动指针到指定位置:       (1).移至首条           //将被选中项的索引设置为0就OK了           ListBox.SelectIndex=0;       (2).移至尾条           //将被选中项的索引设置为ListBox.Items.Count-1就OK了           ListBox.SelectIndex=ListBox.Items.Count-1;       (3).上一条           //用当前被选中的索引去减 1           ListBox.SelectIndex=ListBox.SelectIndex - 1;       (4).下一条           //用当前被选中的索引去加 1           ListBox.SelectIndex=ListBox.SelectIndex + 1; this.ListBox1.Items.Insertat(3,new   ListItem("插入在第3行之后项",""));   this.ListBox1.Items.Insertat(index,ListItem) ListBox1.Items.Insert(0,new   ListItem("text","value"));     1、让ListBox中某一个指定的索引值的项获得焦点(选中) ListBox.SelectedIndex=索引值;   2、把全部选中项都清除 ListBox.ClearSelected();   3、使其中指定索引值的某项不被选中 ListBox.SetSelected(0,False);   4、把listBox1中的所有项填入listBox2中 foreach(string item in listBox1.Items)    this.listBox2.Items.Add (item.ToString());   5、listBox2中的选中项下移    Object obj = new object ();    int index;    index = listBox2.SelectedIndex;    obj = listBox2.SelectedItem;    if(index < listBox2.Items.Count -1 )    {      listBox2.Items.RemoveAt (listBox2.SelectedIndex );      listBox2.Items.Insert (index+1 , obj);      listBox2.SelectedItem = obj;    }    else     MessageBox.Show("已经是最后一行了!");   6、listBox2中的选中项上移    Object obj = new object ();    int index;    index = listBox2.SelectedIndex;    obj = listBox2.SelectedItem;    if(index > 0 )    {     listBox2.Items.RemoveAt (listBox2.SelectedIndex );     listBox2.Items.Insert (index-1 , obj);     listBox2.SelectedItem = obj;    }    else     MessageBox.Show("已经是第一行了!");   7、把listBox1中选中的项填入listBox2中    int i;    string select1;    for(i=0;i<listBox1.SelectedItems.Count ;i++)    {      select1 = listBox1.SelectedItems[i].ToString();      foreach(string select2 in listBox2.Items)        if(select1 == select2.ToString())           flag++;      if(flag!=0)      {         MessageBox.Show("已经包含"+select1+"了!");         flag=0;      }      else          this.listBox2.Items.Add(select1);      flag1=true;    }    if(i>0)    {      int sele=this.listBox1.SelectedIndex;      this.listBox1.ClearSelected();      this.listBox1.SetSelected(sele+1,true);    }   8、拖动某项上下移动 (注:MouseDown 会和 click 产生冲突) private void listBox2_MouseDown(object sender,    System.Windows.Forms.MouseEventArgs e) {    indexofsource = ((ListBox)sender).IndexFromPoint(e.X, e.Y);    if (indexofsource != ListBox.NoMatches)    {     ((ListBox)sender).DoDragDrop(((ListBox)sender).Items[indexofsource].ToString(), DragDropEffects.All);    } }   private void listBox2_DragOver(object sender, System.Windows.Forms.DragEventArgs e) {    //拖动源和放置的目的地一定是一个ListBox    if (e.Data.GetDataPresent(typeof(System.String)) && ((ListBox)sender).Equals(listBox2))    {       e.Effect = DragDropEffects.Move;    }    else       e.Effect = DragDropEffects.None; }   private void listBox2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) {    ListBox listbox=(ListBox)sender;    indexoftarget=listbox.IndexFromPoint(listbox.PointToClient(new Point(e.X, e.Y)));    if(indexoftarget!=ListBox.NoMatches)    {      string temp=listbox.Items[indexoftarget].ToString();      listbox.Items[indexoftarget]=listbox.Items[indexofsource];      listbox.Items[indexofsource]=temp;      listbox.SelectedIndex=indexoftarget;    } }   9、选择模式:(SelectionMode)(在属性窗口设置)    None:不可选           one:单选    MultiSimple:能多选,点一下就选中一个,再点一下就不选中    MultiExtended:多选的常用模式,可拖动多选,也可用shift和ctrl多选    

上一篇:SilkTest入门快打4-appstate
下一篇:MiniGUI Lite 版本的新改进

相关文章

相关评论