我想表达的效果是这样的:一个combobox下拉框,一个按钮。每点击一下按钮,就把combobox中的数据添加到一个groupbox(原来是空的)中去,添加后,在这个数据旁边要有一个remove按钮(使用户可以将这个数据再删掉),当添加到groupbox中的数据超过一条时,再添加一个combobox(用来表示这两个数据之间的关系:或,且)在这些数据之间.这是想要实现的效果。
现在的问题是:1.不知道在添加数据到groupbox中如何动态确定它的位置(因为winform中只能用label来表示数据)
              2.因为加到groupbox中的数据是未知的(多少不确定),那怎么让这些数据按照设想一条条排列起来呢?
        其实效果很普遍,好多网站让用户选择自己中意的东西时就是这样先让客户选择,然后将选择的东西列在一个框里,只不过现在是用winform来实现。谢谢!!
   

解决方案 »

  1.   

    添加到groupbox中?这个groupbox只是一个窗口你添加进去的到底是什么?你说的groupbox是不是指listbox?你的问题:
    1:动态确定位置的话比较简单,先算出你添加的对象的高度,这个在编码时可以确定。然后left位置不变,Top+固定调试的添加这个控件。
    2:关键你的groupbox我还没明白,groupbox中你到底想添加什么?
      

  2.   

    我来说一下我理解的你的方案:
    1:左边一个Combox,有很多项。
    2:用户选择这个Combox中的某一项,然后点击一个按钮,比如:添加。
    3:把用户选中的这一项添加到一个ListBox中。
    用户可以重复步骤2,3操作添加多个数据项。1:在ListBox的旁边放一个Remove按钮
    2:用户选择ListBox中的某一项。
    3:用户点击remove,从SListBox中删除这一项。
    用户可以重复2,3操作删除记录。如果使用listBox则没有你说的什么排列的问题,自己的。
      

  3.   

    首先做一个用户控件比如叫“LableData”,包含label和remove按钮,包含一个点击remove按钮会触发的事件,OnRemove
    然后,在你的目标form里,声明一个private List<LableData> _controllst=new List<LableData>();
    接着,你的添加按钮按了之后,new一个LableData,并给其中的label赋值,然后把它加到Group.Controls集合和_controllst集合中
    别忘了给new出来的LableData绑定OnRemove事件,事件中把自身从Group.Controls集合和_controllst集合中删除。关于排序,写一个OrderLabelData函数,循环_controllst集合,第一个的top=0,其它的=上一个的top+上一个的height+5
    每次添加/移出时,调用OrderLabelData函数
      

  4.   

    说groupbox其实就是容纳label数据和remove按钮的容器。
    如果用listbox,则无法表达两条数据之间的关系(且还是或)
      

  5.   

    OK,你要表示哪两个数据之间的关系?
    这里假如左边一个ComboBox添加时从这里取出一个项生成一个label和一个对应的remove放到GoupBox中。当GroupBox中有 label时,生成另外一个ComboBox,这个Combox里是什么数据?
    你想要表达的关系是什么 和什么 之间 的关系 ?
    用什么样的方式来表达这种关系 ?Radio?checkbox还是别的什么?
      

  6.   

    不需要排序的。
    之所以不用listbox,是因为添加进去的数据超过两天的话,要在这些数据之间再放一个combobox,让用户来选择这两条数据的关系(或,且)
      

  7.   

    错了是两条。
    是的,添加进去的数据是或,且的关系,就像你写sql查询语句的条件时一样,那个表示关系的combobox里的数据是:or,add
      

  8.   

    那我大概明白你的意思了。
    左边的COMBOX是所有可能的条件,对应为某个BOOL类型的值。
    添加到Groupbox当中。
    不过问题在于:
    1:你的“与”或者“或”是相对什么的。
    比如:在groupbox中已经有2个label,假设为A,B,并且是A&B,当你新添加一项C时,假设选择是或,那么关系是什么呢?
    可能是:
    (A&B)|C
    A&B|C
    如果数据项多,这种关系是极其复杂的,它们应该如何处理呢?
      

  9.   

    groupbox好像只是个容器,和panel一样.你的这个问题可以考虑用ListBox
      

  10.   

    所以说每一条数据添加时,还要有一个combobox,这个combobox里的数据是括号:(,)。
    所以很复杂。
    综上,当你添加第一条数据时,groupbox里第一行(当个比方)一次是:一个remove按钮,和label控件(用于显示数据),一个combobox(内容是(,) )
    当添加第二条数据时:groupbox里第二行依次是:一个combobox(内容是or,and )用于表示关系,一个combobox(内容是(,) ),一个remove按钮,和label控件(用于显示数据),一个combobox(内容是(,) )
    依次类推
      

  11.   

    真不知道你想怎么使用 groupbox ,不过看你的描述,在groupbox中添加的应该不是控件,所以你应该和phy 说的情况类似,使用listbox吧
      

  12.   

    当然是控件了,要不怎么实现remove功能,和反映添加数据之间的关系呢。
    我说了,groupbox只是一个盛放控件的容器,只所以用它,是为了布局,还有就是窗体上的东西太多,用这个省地方。
      

  13.   

    其实说白了就是一个动态where条件的东西
    我理解的样式:
    comboBox(选择列) (Add button)
    ---------------------------------------------
    label1   comboBox1(and 或者 or)  (Remove button)  
    label2   comboBox2(and 或者 or)   (Remove button)   
    -----------------
    不知道理解的对不.
      

  14.   

    恩,技术很简单的。
    其实逻辑就像15楼说的那样。因为加到groupbox中的数据是用来作为sql查询语句的条件,所以需要知道它们之间的关系,不止我这么说,大家会不会理解
      

  15.   

    我来说一下我理解的你的方案: 
    1:左边一个Combox,有很多项。 
    2:用户选择这个Combox中的某一项,然后点击一个按钮,比如:添加。 
    3:把用户选中的这一项添加到一个ListBox中。 
    用户可以重复步骤2,3操作添加多个数据项。 1:在ListBox的旁边放一个Remove按钮 
    2:用户选择ListBox中的某一项。 
    3:用户点击remove,从SListBox中删除这一项。 
    用户可以重复2,3操作删除记录。 如果使用listBox则没有你说的什么排列的问题,自己的。
      

  16.   

    你想加到groupBox里?那是个容器吧!如果想在里面用lable显示的话,动态生成lable数组,并且存到arrayList里,添加好说!如果删除的时候记得要清arrayList,
      

  17.   

    如果用listbox的话,问一下它可以添加combobox控件,label控件和按钮吗?