精华内容
下载资源
问答
  • 懂得Word文档中设置多级列表,可以使文档中的文字字体美观大方,一定程度上也提升了自己的文档水平。以下是学习啦小编为您带来的关于Word文档中设置多级列表的方法,希望对您有所帮助。Word文档中设置多级列表的方法...

    懂得Word文档中设置多级列表,可以使文档中的文字字体美观大方,一定程度上也提升了自己的文档水平。以下是学习啦小编为您带来的关于Word文档中设置多级列表的方法,希望对您有所帮助。

    Word文档中设置多级列表的方法

    1、首先选中所有文字,点击“开始”选项卡中的“段落”选项组,单击“编号库”,选中格式为“一、二、三、”的编号。

    bc66a729bcdea8c52c52c4f79983ec5c.png

    2、选中“冰箱”,点击“段落”选项组的“增加缩进量”。

    796cecc7ba7e3697e859ac99af2fac4a.png

    3、单击“段落”选项组的“编号”,选中格式为“1、2、3、”的编号。

    413d377216272591921b4f1cc1d4ed89.png

    4、点击“剪贴板”选项组的“格式刷”,将鼠标定位在“五”前,单击一下。

    24d04f8d4bd35d14ceb190d450ed145b.png

    5、然后单击“二”,选中大写数字栏,然后按两下Tab键,单击“编号”中的“1)2)3)”格式。

    ca26adeec90d2668b29b85b43b4404e0.png

    6、然后双击格式刷,在“二”和“三”前面单击,然后按Esc键退出格式刷。

    0daf8d12f6d544b75d0987fcce1275e5.png

    接下来对电视机还有蔬菜类进行分类也是用同样的方法,效果图如下。

    c2478d430a88521fbe8f7df6140e0903.png

    在这里提醒大家,同等级别设置完后一定要记得按Esc键退出哦。通过对Word文档中设置多级列表,能更加直观的知道分类级别了,确实也美观了不少。

    猜你喜欢:

    展开全文
  • android多级列表

    千次阅读 2016-11-16 11:33:51
    我们开发app过程中,经常会碰到需要 多级列表展示的效果。而android原生sdk中根本没有3级 4级甚至更多级别的列表控件。 所以我们就要自己去实现一个类似treeListView 的控件,下面这个是我项目中的一个效果图,可...
     
    

    我们开发app过程中,经常会碰到需要 多级列表展示的效果。而android原生sdk中根本没有3级 4级甚至更多级别的列表控件。

    所以我们就要自己去实现一个类似treeListView 的控件,下面这个是我项目中的一个效果图,可支持多级列表扩展。


               


    android中有ExpandListView控件,但是这个控件只支持两级列表。对于多级列表如果重写这个不是很好用。

    实现这种列表 思想就是递归,构造一个子父级的关系。

    话不多说 代码中体会

    Activity


    [java]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. package com.example.customtreeviewdemo;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5.   
    6. import android.app.Activity;  
    7. import android.os.Bundle;  
    8. import android.view.View;  
    9. import android.view.View.OnClickListener;  
    10. import android.widget.Button;  
    11. import android.widget.ListView;  
    12. import android.widget.Toast;  
    13.   
    14. import com.example.customtreeviewdemo.bean.MyNodeBean;  
    15. import com.example.customtreeviewdemo.tree.Node;  
    16. import com.example.customtreeviewdemo.tree.TreeListViewAdapter.OnTreeNodeClickListener;  
    17.   
    18. public class MainActivity extends Activity {  
    19.   
    20.     private ListView treeLv;  
    21.     private Button checkSwitchBtn;  
    22.     private MyTreeListViewAdapter<MyNodeBean> adapter;  
    23.     private List<MyNodeBean> mDatas = new ArrayList<MyNodeBean>();  
    24.     //标记是显示Checkbox还是隐藏  
    25.     private boolean isHide = true;  
    26.   
    27.     @Override  
    28.     protected void onCreate(Bundle savedInstanceState) {  
    29.         super.onCreate(savedInstanceState);  
    30.         setContentView(R.layout.activity_main);  
    31.   
    32.         initDatas();  
    33.         treeLv = (ListView) this.findViewById(R.id.tree_lv);  
    34.         checkSwitchBtn = (Button)this.findViewById(R.id.check_switch_btn);  
    35.           
    36.         checkSwitchBtn.setOnClickListener(new OnClickListener(){  
    37.   
    38.             @Override  
    39.             public void onClick(View v) {  
    40.                 if(isHide){  
    41.                     isHide = false;  
    42.                 }else{  
    43.                     isHide = true;  
    44.                 }  
    45.                   
    46.                 adapter.updateView(isHide);  
    47.             }  
    48.               
    49.         });  
    50.         try {  
    51.             adapter = new MyTreeListViewAdapter<MyNodeBean>(treeLv, this,  
    52.                     mDatas, 10, isHide);  
    53.   
    54.             adapter.setOnTreeNodeClickListener(new OnTreeNodeClickListener() {  
    55.                 @Override  
    56.                 public void onClick(Node node, int position) {  
    57.                     if (node.isLeaf()) {  
    58.                         Toast.makeText(getApplicationContext(), node.getName(),  
    59.                                 Toast.LENGTH_SHORT).show();  
    60.                     }  
    61.                 }  
    62.   
    63.                 @Override  
    64.                 public void onCheckChange(Node node, int position,  
    65.                         List<Node> checkedNodes) {  
    66.   
    67.                     StringBuffer sb = new StringBuffer();  
    68.                     for (Node n : checkedNodes) {  
    69.                         int pos = n.getId() - 1;  
    70.                         sb.append(mDatas.get(pos).getName()).append("---")  
    71.                                 .append(pos + 1).append(";");  
    72.   
    73.                     }  
    74.   
    75.                     Toast.makeText(getApplicationContext(), sb.toString(),  
    76.                             Toast.LENGTH_SHORT).show();  
    77.                 }  
    78.   
    79.             });  
    80.         } catch (IllegalArgumentException e) {  
    81.             e.printStackTrace();  
    82.         } catch (IllegalAccessException e) {  
    83.             e.printStackTrace();  
    84.         }  
    85.         treeLv.setAdapter(adapter);  
    86.   
    87.     }  
    88.   
    89.     private void initDatas() {  
    90.         mDatas.add(new MyNodeBean(10"中国古代"));  
    91.         mDatas.add(new MyNodeBean(21"唐朝"));  
    92.         mDatas.add(new MyNodeBean(31"宋朝"));  
    93.         mDatas.add(new MyNodeBean(41"明朝"));  
    94.         mDatas.add(new MyNodeBean(52"李世民"));  
    95.         mDatas.add(new MyNodeBean(62"李白"));  
    96.   
    97.         mDatas.add(new MyNodeBean(73"赵匡胤"));  
    98.         mDatas.add(new MyNodeBean(83"苏轼"));  
    99.   
    100.         mDatas.add(new MyNodeBean(94"朱元璋"));  
    101.         mDatas.add(new MyNodeBean(104"唐伯虎"));  
    102.         mDatas.add(new MyNodeBean(114"文征明"));  
    103.         mDatas.add(new MyNodeBean(127"赵建立"));  
    104.         mDatas.add(new MyNodeBean(138"苏东东"));  
    105.         mDatas.add(new MyNodeBean(1410"秋香"));  
    106.     }  
    107. }  


    Adapter

    这个adapter是继承了自己的定义的一个TreeListViewAdapter,核心实现都是在TreeListViewAdapter这个里面


    [java]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. package com.example.customtreeviewdemo;  
    2.   
    3. import java.util.List;  
    4.   
    5. import android.content.Context;  
    6. import android.view.View;  
    7. import android.view.ViewGroup;  
    8. import android.widget.CheckBox;  
    9. import android.widget.CompoundButton;  
    10. import android.widget.CompoundButton.OnCheckedChangeListener;  
    11. import android.widget.ImageView;  
    12. import android.widget.ListView;  
    13. import android.widget.TextView;  
    14.   
    15. import com.example.customtreeviewdemo.tree.Node;  
    16. import com.example.customtreeviewdemo.tree.TreeListViewAdapter;  
    17.   
    18. public class MyTreeListViewAdapter<T> extends TreeListViewAdapter<T> {  
    19.   
    20.     public MyTreeListViewAdapter(ListView mTree, Context context,  
    21.             List<T> datas, int defaultExpandLevel,boolean isHide)  
    22.             throws IllegalArgumentException, IllegalAccessException {  
    23.         super(mTree, context, datas, defaultExpandLevel,isHide);  
    24.     }  
    25.       
    26.     @SuppressWarnings("unchecked")  
    27.     @Override  
    28.     public View getConvertView(Node node, int position, View convertView,  
    29.             ViewGroup parent) {  
    30.         ViewHolder viewHolder = null;  
    31.         if (convertView == null)  
    32.         {  
    33.             convertView = mInflater.inflate(R.layout.list_item, parent, false);  
    34.             viewHolder = new ViewHolder();  
    35.             viewHolder.icon = (ImageView) convertView  
    36.                     .findViewById(R.id.id_treenode_icon);  
    37.             viewHolder.label = (TextView) convertView  
    38.                     .findViewById(R.id.id_treenode_name);  
    39.             viewHolder.checkBox = (CheckBox)convertView.findViewById(R.id.id_treeNode_check);  
    40.               
    41.             convertView.setTag(viewHolder);  
    42.   
    43.         } else  
    44.         {  
    45.             viewHolder = (ViewHolder) convertView.getTag();  
    46.         }  
    47.   
    48.         if (node.getIcon() == -1)  
    49.         {  
    50.             viewHolder.icon.setVisibility(View.INVISIBLE);  
    51.         } else  
    52.         {  
    53.             viewHolder.icon.setVisibility(View.VISIBLE);  
    54.             viewHolder.icon.setImageResource(node.getIcon());  
    55.         }  
    56.   
    57.         if(node.isHideChecked()){  
    58.             viewHolder.checkBox.setVisibility(View.GONE);  
    59.         }else{  
    60.             viewHolder.checkBox.setVisibility(View.VISIBLE);  
    61.             setCheckBoxBg(viewHolder.checkBox,node.isChecked());  
    62.         }  
    63.         viewHolder.label.setText(node.getName());  
    64.           
    65.           
    66.         return convertView;  
    67.     }  
    68.     private final class ViewHolder  
    69.     {  
    70.         ImageView icon;  
    71.         TextView label;  
    72.         CheckBox checkBox;  
    73.     }  
    74.       
    75.     /** 
    76.      * checkbox是否显示 
    77.      * @param cb 
    78.      * @param isChecked 
    79.      */  
    80.     private void setCheckBoxBg(CheckBox cb,boolean isChecked){  
    81.         if(isChecked){  
    82.             cb.setBackgroundResource(R.drawable.check_box_bg_check);  
    83.         }else{  
    84.             cb.setBackgroundResource(R.drawable.check_box_bg);  
    85.         }  
    86.     }  
    87. }  


    自定义TreeListViewAdapter  这个是整个树形结构的一个适配器,这里面主要是实现对Node节点的操作 点击,选中改变 更新等


    [java]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. package com.example.customtreeviewdemo.tree;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5.   
    6. import android.content.Context;  
    7. import android.view.LayoutInflater;  
    8. import android.view.View;  
    9. import android.view.ViewGroup;  
    10. import android.widget.AdapterView;  
    11. import android.widget.AdapterView.OnItemClickListener;  
    12. import android.widget.BaseAdapter;  
    13. import android.widget.CheckBox;  
    14. import android.widget.CompoundButton;  
    15. import android.widget.CompoundButton.OnCheckedChangeListener;  
    16. import android.widget.ListView;  
    17. import android.widget.RelativeLayout;  
    18.   
    19. /** 
    20.  * tree适配器 
    21.  * @param <T> 
    22.  */  
    23. public abstract class TreeListViewAdapter<T> extends BaseAdapter {  
    24.   
    25.     protected Context mContext;  
    26.     /** 
    27.      * 存储所有可见的Node 
    28.      */  
    29.     protected List<Node> mNodes;  
    30.     protected LayoutInflater mInflater;  
    31.     /** 
    32.      * 存储所有的Node 
    33.      */  
    34.     protected List<Node> mAllNodes;  
    35.   
    36.     /** 
    37.      * 点击的回调接口 
    38.      */  
    39.     private OnTreeNodeClickListener onTreeNodeClickListener;  
    40.   
    41.     public interface OnTreeNodeClickListener {  
    42.         /** 
    43.          * 处理node click事件 
    44.          * @param node 
    45.          * @param position 
    46.          */  
    47.         void onClick(Node node, int position);  
    48.         /** 
    49.          * 处理checkbox选择改变事件 
    50.          * @param node 
    51.          * @param position 
    52.          * @param checkedNodes 
    53.          */  
    54.         void onCheckChange(Node node, int position,List<Node> checkedNodes);  
    55.     }  
    56.   
    57.     public void setOnTreeNodeClickListener(  
    58.             OnTreeNodeClickListener onTreeNodeClickListener) {  
    59.         this.onTreeNodeClickListener = onTreeNodeClickListener;  
    60.     }  
    61.   
    62.     /** 
    63.      *  
    64.      * @param mTree 
    65.      * @param context 
    66.      * @param datas 
    67.      * @param defaultExpandLevel 
    68.      *            默认展开几级树 
    69.      * @throws IllegalArgumentException 
    70.      * @throws IllegalAccessException 
    71.      */  
    72.     public TreeListViewAdapter(ListView mTree, Context context, List<T> datas,  
    73.             int defaultExpandLevel, boolean isHide)  
    74.             throws IllegalArgumentException, IllegalAccessException {  
    75.         mContext = context;  
    76.         /** 
    77.          * 对所有的Node进行排序 
    78.          */  
    79.         mAllNodes = TreeHelper  
    80.                 .getSortedNodes(datas, defaultExpandLevel, isHide);  
    81.         /** 
    82.          * 过滤出可见的Node 
    83.          */  
    84.         mNodes = TreeHelper.filterVisibleNode(mAllNodes);  
    85.         mInflater = LayoutInflater.from(context);  
    86.   
    87.         /** 
    88.          * 设置节点点击时,可以展开以及关闭;并且将ItemClick事件继续往外公布 
    89.          */  
    90.         mTree.setOnItemClickListener(new OnItemClickListener() {  
    91.             @Override  
    92.             public void onItemClick(AdapterView<?> parent, View view,  
    93.                     int position, long id) {  
    94.                 expandOrCollapse(position);  
    95.   
    96.                 if (onTreeNodeClickListener != null) {  
    97.                     onTreeNodeClickListener.onClick(mNodes.get(position),  
    98.                             position);  
    99.                 }  
    100.             }  
    101.   
    102.         });  
    103.   
    104.     }  
    105.   
    106.     /** 
    107.      * 相应ListView的点击事件 展开或关闭某节点 
    108.      *  
    109.      * @param position 
    110.      */  
    111.     public void expandOrCollapse(int position) {  
    112.         Node n = mNodes.get(position);  
    113.   
    114.         if (n != null)// 排除传入参数错误异常  
    115.         {  
    116.             if (!n.isLeaf()) {  
    117.                 n.setExpand(!n.isExpand());  
    118.                 mNodes = TreeHelper.filterVisibleNode(mAllNodes);  
    119.                 notifyDataSetChanged();// 刷新视图  
    120.             }  
    121.         }  
    122.     }  
    123.   
    124.     @Override  
    125.     public int getCount() {  
    126.         return mNodes.size();  
    127.     }  
    128.   
    129.     @Override  
    130.     public Object getItem(int position) {  
    131.         return mNodes.get(position);  
    132.     }  
    133.   
    134.     @Override  
    135.     public long getItemId(int position) {  
    136.         return position;  
    137.     }  
    138.   
    139.     @Override  
    140.     public View getView(final int position, View convertView, ViewGroup parent) {  
    141.         final Node node = mNodes.get(position);  
    142.   
    143.         convertView = getConvertView(node, position, convertView, parent);  
    144.         // 设置内边距  
    145.         convertView.setPadding(node.getLevel() * 30333);  
    146.         if (!node.isHideChecked()) {  
    147.             //获取各个节点所在的父布局  
    148.             RelativeLayout myView = (RelativeLayout) convertView;  
    149.             //父布局下的CheckBox  
    150.             CheckBox cb = (CheckBox) myView.getChildAt(1);  
    151.             cb.setOnCheckedChangeListener(new OnCheckedChangeListener(){  
    152.   
    153.                 @Override  
    154.                 public void onCheckedChanged(CompoundButton buttonView,  
    155.                         boolean isChecked) {  
    156.                     TreeHelper.setNodeChecked(node, isChecked);  
    157.                     List<Node> checkedNodes = new ArrayList<Node>();  
    158.                     for(Node n:mAllNodes){  
    159.                         if(n.isChecked()){  
    160.                             checkedNodes.add(n);  
    161.                         }  
    162.                     }  
    163.                       
    164.                     onTreeNodeClickListener.onCheckChange(node,position,checkedNodes);  
    165.                     TreeListViewAdapter.this.notifyDataSetChanged();  
    166.                 }  
    167.                   
    168.             });  
    169.         }  
    170.   
    171.         return convertView;  
    172.     }  
    173.   
    174.     public abstract View getConvertView(Node node, int position,  
    175.             View convertView, ViewGroup parent);  
    176.   
    177.     /** 
    178.      * 更新 
    179.      * @param isHide 
    180.      */  
    181.     public void updateView(boolean isHide){  
    182.         for(Node node:mAllNodes){  
    183.             node.setHideChecked(isHide);  
    184.         }  
    185.           
    186.         this.notifyDataSetChanged();  
    187.     }  
    188.   
    189. }  


    node 模型类

    [java]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. package com.example.customtreeviewdemo.bean;  
    2.   
    3. public class MyNodeBean {  
    4.     /** 
    5.      * 节点Id 
    6.      */  
    7.     private int id;  
    8.     /** 
    9.      * 节点父id 
    10.      */  
    11.     private int pId;  
    12.     /** 
    13.      * 节点name 
    14.      */  
    15.     private String name;  
    16.     /** 
    17.      *  
    18.      */  
    19.     private String desc;  
    20.     /** 
    21.      * 节点名字长度 
    22.      */  
    23.     private long length;  
    24.       
    25.       
    26.     public MyNodeBean(int id, int pId, String name) {  
    27.         super();  
    28.         this.id = id;  
    29.         this.pId = pId;  
    30.         this.name = name;  
    31.     }  
    32.       
    33.     public int getId() {  
    34.         return id;  
    35.     }  
    36.     public void setId(int id) {  
    37.         this.id = id;  
    38.     }  
    39.     public int getPid() {  
    40.         return pId;  
    41.     }  
    42.     public void setPid(int pId) {  
    43.         this.pId = pId;  
    44.     }  
    45.     public String getName() {  
    46.         return name;  
    47.     }  
    48.     public void setName(String name) {  
    49.         this.name = name;  
    50.     }  
    51.     public String getDesc() {  
    52.         return desc;  
    53.     }  
    54.     public void setDesc(String desc) {  
    55.         this.desc = desc;  
    56.     }  
    57.     public long getLength() {  
    58.         return length;  
    59.     }  
    60.     public void setLength(long length) {  
    61.         this.length = length;  
    62.     }  
    63.       
    64.       
    65. }  


    TreeHelper这个也是核心操作类,主要功能是将业务数据和节点数据进行匹配


    [java]  view plain  copy
     print ? 在CODE上查看代码片 派生到我的代码片
    1. package com.example.customtreeviewdemo.tree;  
    2.   
    3. import java.lang.reflect.Field;  
    4. import java.util.ArrayList;  
    5. import java.util.List;  
    6.   
    7. import com.example.customtreeviewdemo.R;  
    8.   
    9. public class TreeHelper {  
    10.   
    11.     /** 
    12.      * 根据所有节点获取可见节点 
    13.      *  
    14.      * @param allNodes 
    15.      * @return 
    16.      */  
    17.     public static List<Node> filterVisibleNode(List<Node> allNodes) {  
    18.         List<Node> visibleNodes = new ArrayList<Node>();  
    19.         for (Node node : allNodes) {  
    20.             // 如果为根节点,或者上层目录为展开状态  
    21.             if (node.isRoot() || node.isParentExpand()) {  
    22.                 setNodeIcon(node);  
    23.                 visibleNodes.add(node);  
    24.             }  
    25.         }  
    26.         return visibleNodes;  
    27.     }  
    28.   
    29.     /** 
    30.      * 获取排序的所有节点 
    31.      *  
    32.      * @param datas 
    33.      * @param defaultExpandLevel 
    34.      * @return 
    35.      * @throws IllegalArgumentException 
    36.      * @throws IllegalAccessException 
    37.      */  
    38.     public static <T> List<Node> getSortedNodes(List<T> datas,  
    39.             int defaultExpandLevel, boolean isHide)  
    40.             throws IllegalAccessException, IllegalArgumentException {  
    41.         List<Node> sortedNodes = new ArrayList<Node>();  
    42.         // 将用户数据转化为List<Node>  
    43.         List<Node> nodes = convertData2Nodes(datas, isHide);  
    44.         // 拿到根节点  
    45.         List<Node> rootNodes = getRootNodes(nodes);  
    46.         // 排序以及设置Node间关系  
    47.         for (Node node : rootNodes) {  
    48.             addNode(sortedNodes, node, defaultExpandLevel, 1);  
    49.         }  
    50.         return sortedNodes;  
    51.     }  
    52.   
    53.     /** 
    54.      * 把一个节点上的所有的内容都挂上去 
    55.      */  
    56.     private static void addNode(List<Node> nodes, Node node,  
    57.             int defaultExpandLeval, int currentLevel) {  
    58.   
    59.         nodes.add(node);  
    60.         if (defaultExpandLeval >= currentLevel) {  
    61.             node.setExpand(true);  
    62.         }  
    63.   
    64.         if (node.isLeaf())  
    65.             return;  
    66.         for (int i = 0; i < node.getChildrenNodes().size(); i++) {  
    67.             addNode(nodes, node.getChildrenNodes().get(i), defaultExpandLeval,  
    68.                     currentLevel + 1);  
    69.         }  
    70.     }  
    71.   
    72.     /** 
    73.      * 获取所有的根节点 
    74.      *  
    75.      * @param nodes 
    76.      * @return 
    77.      */  
    78.     public static List<Node> getRootNodes(List<Node> nodes) {  
    79.         List<Node> rootNodes = new ArrayList<Node>();  
    80.         for (Node node : nodes) {  
    81.             if (node.isRoot()) {  
    82.                 rootNodes.add(node);  
    83.             }  
    84.         }  
    85.   
    86.         return rootNodes;  
    87.     }  
    88.   
    89.     /** 
    90.      * 将泛型datas转换为node 
    91.      *  
    92.      * @param datas 
    93.      * @return 
    94.      * @throws IllegalArgumentException 
    95.      * @throws IllegalAccessException 
    96.      */  
    97.     public static <T> List<Node> convertData2Nodes(List<T> datas, boolean isHide)  
    98.             throws IllegalAccessException, IllegalArgumentException {  
    99.         List<Node> nodes = new ArrayList<Node>();  
    100.         Node node = null;  
    101.   
    102.         for (T t : datas) {  
    103.             int id = -1;  
    104.             int pId = -1;  
    105.             String name = null;  
    106.   
    107.             Class<? extends Object> clazz = t.getClass();  
    108.             Field[] declaredFields = clazz.getDeclaredFields();  
    109.             /** 
    110.              * 与MyNodeBean实体一一对应 
    111.              */  
    112.             for (Field f : declaredFields) {  
    113.                 if ("id".equals(f.getName())) {  
    114.                     f.setAccessible(true);  
    115.                     id = f.getInt(t);  
    116.                 }  
    117.   
    118.                 if ("pId".equals(f.getName())) {  
    119.                     f.setAccessible(true);  
    120.                     pId = f.getInt(t);  
    121.                 }  
    122.   
    123.                 if ("name".equals(f.getName())) {  
    124.                     f.setAccessible(true);  
    125.                     name = (String) f.get(t);  
    126.                 }  
    127.   
    128.                 if ("desc".equals(f.getName())) {  
    129.                     continue;  
    130.                 }  
    131.   
    132.                 if ("length".equals(f.getName())) {  
    133.                     continue;  
    134.                 }  
    135.   
    136.                 if (id == -1 && pId == -1 && name == null) {  
    137.                     break;  
    138.                 }  
    139.             }  
    140.   
    141.             node = new Node(id, pId, name);  
    142.             node.setHideChecked(isHide);  
    143.             nodes.add(node);  
    144.         }  
    145.   
    146.         /** 
    147.          * 比较nodes中的所有节点,分别添加children和parent 
    148.          */  
    149.         for (int i = 0; i < nodes.size(); i++) {  
    150.             Node n = nodes.get(i);  
    151.             for (int j = i + 1; j < nodes.size(); j++) {  
    152.                 Node m = nodes.get(j);  
    153.                 if (n.getId() == m.getpId()) {  
    154.                     n.getChildrenNodes().add(m);  
    155.                     m.setParent(n);  
    156.                 } else if (n.getpId() == m.getId()) {  
    157.                     n.setParent(m);  
    158.                     m.getChildrenNodes().add(n);  
    159.                 }  
    160.             }  
    161.         }  
    162.   
    163.         for (Node n : nodes) {  
    164.             setNodeIcon(n);  
    165.         }  
    166.         return nodes;  
    167.     }  
    168.   
    169.     /** 
    170.      * 设置打开,关闭icon 
    171.      *  
    172.      * @param node 
    173.      */  
    174.     public static void setNodeIcon(Node node) {  
    175.         if (node.getChildrenNodes().size() > 0 && node.isExpand()) {  
    176.             node.setIcon(R.drawable.tree_expand);  
    177.         } else if (node.getChildrenNodes().size() > 0 && !node.isExpand()) {  
    178.             node.setIcon(R.drawable.tree_econpand);  
    179.         } else  
    180.             node.setIcon(-1);  
    181.     }  
    182.   
    183.     public static void setNodeChecked(Node node, boolean isChecked) {  
    184.         // 自己设置是否选择  
    185.         node.setChecked(isChecked);  
    186.         /** 
    187.          * 非叶子节点,子节点处理 
    188.          */  
    189.         setChildrenNodeChecked(node, isChecked);  
    190.         /** 父节点处理 */  
    191.         setParentNodeChecked(node);  
    192.     }  
    193.   
    194.     /** 
    195.      * 非叶子节点,子节点处理 
    196.      */  
    197.     private static void setChildrenNodeChecked(Node node, boolean isChecked) {  
    198.         node.setChecked(isChecked);  
    199.         if (!node.isLeaf()) {  
    200.             for (Node n : node.getChildrenNodes()) {  
    201.                 // 所有子节点设置是否选择  
    202.                 setChildrenNodeChecked(n, isChecked);  
    203.             }  
    204.         }  
    205.     }  
    206.   
    207.     /** 
    208.      * 设置父节点选择 
    209.      *  
    210.      * @param node 
    211.      */  
    212.     private static void setParentNodeChecked(Node node) {  
    213.   
    214.         /** 非根节点 */  
    215.         if (!node.isRoot()) {  
    216.             Node rootNode = node.getParent();  
    217.             boolean isAllChecked = true;  
    218.             for (Node n : rootNode.getChildrenNodes()) {  
    219.                 if (!n.isChecked()) {  
    220.                     isAllChecked = false;  
    221.                     break;  
    222.                 }  
    223.             }  
    224.   
    225.             if (isAllChecked) {  
    226.                 rootNode.setChecked(true);  
    227.             } else {  
    228.                 rootNode.setChecked(false);  
    229.             }  
    230.             setParentNodeChecked(rootNode);  
    231.         }  
    232.     }  
    233.   
    234. }  


    核心的代码就是这些,希望对大家有帮助。


    转自:http://blog.csdn.net/shaoyezhangliwei/article/details/52275130

    展开全文
  • word多级列表创建目录Microsoft Word lets you easily create and format multilevel lists in your documents. You can choose from a variety of formatting options, including bulleted, numbered, or ...
    word多级列表创建目录

    word多级列表创建目录

    Microsoft Word lets you easily create and format multilevel lists in your documents. You can choose from a variety of formatting options, including bulleted, numbered, or alphabetized lists. Let’s take a look.

    Microsoft Word使您可以轻松地在文档中创建多级列表并设置其格式。 您可以从各种格式选项中进行选择,包括项目符号,编号或字母顺序的列表。 让我们来看看。

    如何在Microsoft Word中创建多级列表 (How to Create a Multilevel List in Microsoft Word)

    Creating a multilevel list in Word is dead simple. Start by typing out one or more lines of your list, with each item of your list on a different line. Then, select those lines.

    在Word中创建多级列表非常简单。 首先输入列表中的一行或多行,然后将列表中的每一项都放在不同的行上。 然后,选择那些行。

    On the “Home” tab of the Ribbon, click the “Multilevel Lists” button, and then click one of the built-in lists types shown on the dropdown menu.

    在功能区的“主页”选项卡上,单击“多级列表”按钮,然后单击下拉菜单上显示的内置列表类型之一。

    Your list will now be formatted in the style you chose.

    现在,您的列表将以您选择的样式进行格式化。

    And yes, right now, it’s a single-level list. The truth is that technically, single- and multi-level lists are not much different in Word. It’s not until you start promoting and demoting list items that it turns into a multilevel list.

    是的,现在,这是一个单层列表。 事实是,从技术上讲,单级和多级列表在Word中没有太大区别。 直到您开始升级和降级列表项后,它才变成多级列表。

    降级和提升多级列表上的行 (Demoting and Promoting Lines On Your Multilevel List)

    Demoting a line in your list indents the line and bumps it to a lower list level. Promoting a line does just the opposite.

    降级列表中的一行会使该行缩进,并将其凸显到较低的列表级别。 推广一条路线恰恰相反。

    通过按Tab或Shift-Tab降级或提升列表项 (Demote or Promote a List Item By Pressing Tab or Shift-Tab)

    Start by placing your cursor at the beginning of the line you want to demote or promote.

    首先将光标放在要降级或升级的行的开头。

    To demote that line to a lower list level, just hit your Tab key.

    要将该行降级为较低的列表级别,只需按Tab键即可。

    You can also demote a line more than once by just pressing Tab however many times you need. Here, we’ve demoted the third line in our list twice.

    您也可以通过多次按Tab键降级一行。 在这里,我们两次将列表中的第三行降级。

    Repeat these steps if you would like to add four, five, or even more levels to your multilevel list.

    如果要向多级列表中添加四个,五个甚至更多个级别,请重复这些步骤。

    You can also promote a line (move it back a level) by placing your cursor at the beginning of the line…

    您还可以通过将光标置于行的开头来提升一行(将其移回一个级别)…

    And then hitting Shift+Tab.

    然后按Shift + Tab。

    You can also demote or promote multiple lines at a time by selecting them…

    您还可以通过选择多个行同时降级或升级它们。

    and then hitting the Tab or Shift+Tab keys.

    然后按Tab键或Shift + Tab键。

    选择行的特定列表级别 (Pick a Specific List Level for a Line)

    While just using the Tab and Shift+Tab key combos is probably the easiest way to promote or demote lines on your list, Word does have a menu option for choosing a specific level.

    虽然仅使用Tab和Shift + Tab键组合是升级或降级列表中行的最简单方法,但Word确实具有用于选择特定级别的菜单选项。

    Place your cursor anywhere in the line you want to change (or select multiple lines if you want to change more than one).

    将光标放在要更改的行中的任何位置(如果要更改多个,请选择多行)。

    Click the “Multilevel List” button on the Home tab of the Ribbon, point to the “Change List Level” option on the dropdown, and then select the level you want.

    单击功能区“主页”选项卡上的“多级列表”按钮,指向下拉菜单中的“更改列表级别”选项,然后选择所需的级别。

    And the line (or lines) you selected get changed to that level.

    然后,您选择的一条或多条线将更改为该级别。

    如何快速更改多级列表的类型 (How to Quickly Change the Type of Your Multilevel List)

    Sometimes, you may decide that you want to change the basic type of multilevel list you’re using. Perhaps you originally went with numbers, but now want to use bullet points. Or maybe you just want a different numbering scheme. Whatever the case, you can easily make that change.

    有时,您可能会决定要更改所使用的多级列表的基本类型。 也许您最初使用数字,但现在想使用项目符号。 或者,也许您只是想要一个不同的编号方案。 无论如何,您都可以轻松进行更改。

    Place your cursor anywhere on any line of your list. It really doesn’t matter where, because this is going to change the whole list.

    将光标放在列表的任何行上的任何位置。 确实无关紧要,因为这将更改整个列表。

    Open that “Multilevel Lists” dropdown menu again, and this time, just click any of the other default list types on the menu.

    再次打开该“多级列表”下拉菜单,这一次,只需单击菜单上的任何其他默认列表类型即可。

    Your whole list changes to that new type.

    您的整个列表将更改为该新类型。

    如何自定义多级列表 (How to Customize Your Multilevel List)

    So, what if you want to change something about your list like the way just one line level is numbered or how the levels are aligned. Well, you can do that, too. Multilevel lists in Word are pretty customizable, letting you make changes to just about every aspect.

    因此,如果您想更改列表的内容,例如仅对一个行级别进行编号的方式或如何对齐级别,该怎么办? 好吧,您也可以这样做。 Word中的多级列表是非常可定制的,使您几乎可以对每个方面进行更改。

    Start by placing your cursor anywhere on any line of your list. Open the “Multilevel List” dropdown, and then choose the “Define New Multilevel List” command.

    首先将光标放在列表中任何一行的任意位置。 打开“多级列表”下拉列表,然后选择“定义新的多级列表”命令。

    The Define New Multilevel List window pops up, showing you a number of basic options for customizing how the lines in your list appear. However, there’s more here than meets the eye, so go ahead and click that “More” button down in the bottom left corner.

    弹出“定义新的多层列表”窗口,为您显示许多用于自定义列表中各行显示方式的基本选项。 但是,这里的内容不仅仅吸引眼球,因此请继续并单击左下角的“更多”按钮。

    Now, your window should look like this, with a bunch of extra options off to the right.

    现在,您的窗口应该看起来像这样,右侧有许多其他选项。

    So, here’s the rundown. First, select the level of the list that you want to modify. You can click either in the simple numbered list to the left, or on a line in the center window that shows how the list actually looks.

    所以,这是总结。 首先,选择要修改的列表级别。 您可以单击左侧的简单编号列表,也可以单击中心窗口中显示列表实际外观的一行。

    Below that, you’ll find a bunch of options for changing the number format and positioning for the selected level appears.

    在其下,您将找到许多用于更改数字格式和所选级别的位置的选项。

    Here’s what you can do there (and note that this list includes the extra stuff revealed by that “More” button):

    这是您可以在其中执行的操作(请注意,此列表包括该“更多”按钮显示的其他内容):

    • Enter formatting for number: You can type the text for the line number as you want it to appear in this box. Click the “Font” button to its right to change the font used for the level.

      输入数字格式:您可以键入要显示在该框中的行号文本。 单击右侧的“字体”按钮以更改用于该级别的字体。

    • Number style for this level: Use this dropdown to change the style of the selected number level. You can change it to pretty much any number or bullet style you want. You can even mix bullet points into a numbered list this way (or vice versa).

      此级别的数字样式:使用此下拉列表可以更改所选数字级别的样式。 您可以将其更改为几乎所需的任何数字或项目符号样式。 您甚至可以通过这种方式将项目符号点混合到编号列表中(反之亦然)。

    • Include level number from: Use this dropdown to include the number from a previous level. This lets you create line numbers like 1.1; 1.1.1; and so on.

      包括来自以下级别的编号:使用此下拉列表可以包括上一个级别的编号。 这样就可以创建行号,例如1.1; 1.1.1; 等等。

    • Start at: Choose the number or letter where you want to start the numbering.

      开始于:选择要在其上开始编号的数字或字母。

    • Restart list after: Have the list restart after it reaches a certain number or letter.

      重新启动列表:在达到某个数字或字母后重新启动列表

    • Position: Use the controls in the “Position” section to change how the selected number level is aligned and indented. You can also click the “Set For All Levels” button to control alignment and indents for your whole list. You can also choose whether the line number is followed by a tab character (the default), a space, or no character at all.

      位置:使用“位置”部分中的控件来更改对齐和缩进所选数字级别的方式。 您也可以单击“为所有级别设置”按钮来控制整个列表的对齐方式和缩进量。 您还可以选择行号后跟制表符(默认),空格还是根本没有字符。

    And at the top right of the window, you’ll find a few extra options, including:

    在窗口的右上方,您会发现一些其他选项,包括:

    • Apply changes to: Choose whether you want to apply changes to the whole list, from the point where your cursor is placed in the list, or only levels you’ve selected.

      将更改应用于:选择是将更改应用于整个列表,还是将光标置于列表中,或者仅将所选级别应用于整个列表。

    • Link level to style: You can use this dropdown to link your selected level to a style, whether a built-in Word style or one you’ve created. This can be particularly handy for linking levels to heading styles.

      将级别链接到样式:可以使用此下拉列表将所选级别链接到一种样式,无论是内置Word样式还是您创建的样式。 这对于将级别链接到标题样式特别方便。

    • Level to show in gallery: This dropdown lets you choose the level of the list that’s shown in the gallery on Word’s Home tab. Honestly, its not a very useful option, and it’s usually best to leave it set to its default—Level 1.

      在图库中显示的级别:通过此下拉列表,您可以选择Word的“主页”选项卡上的图库中显示的列表级别。 老实说,它不是一个非常有用的选项,通常最好将其设置为默认值-1级。

    • ListNum field list name: Use this field to associate the level with a name that you can then use along with Word’s LISTNUM function. This is useful if you’re creating functions to generate lists.

      ListNum字段列表名称:使用此字段将级别与一个名称关联,然后可以将其与Word的LISTNUM函数一起使用。 如果要创建用于生成列表的函数,这将很有用。

    After making changes to a particular level, you’ll need to repeat the process for each additional level of the list you want to modify. So, select a level, make your changes, select the next level, make those changes, and so on.

    对特定级别进行更改后,您需要为要修改的列表的每个其他级别重复该过程。 因此,选择一个级别,进行更改,选择下一个级别,进行那些更改,依此类推。

    When you have finished changing all the levels you want, click the “OK” button, and your multilevel list will now show your changes.

    完成所需的所有级别的更改后,单击“确定”按钮,您的多级列表现在将显示您的更改。

    如何将多级列表转换为新样式 (How to Turn Your Multilevel List into a New Style)

    After customizing you multilevel list just the way you want it, you may find yourself wanting to use that same formatting for other lists—even lists in other documents. You can do this by turning the list into a style.

    在按照自己的方式自定义多级列表之后,您可能会发现自己想要对其他列表(甚至其他文档中的列表)使用相同的格式。 您可以通过将列表变成样式来实现。

    Place your cursor anywhere on any line of your list, open the “Multilevel List” dropdown menu again, and this time, choose the “Define New List Style” option.

    将光标放在列表的任何行上的任意位置,再次打开“多级列表”下拉菜单,然后选择“定义新列表样式”选项。

    In the Define New List Style window, start by giving your new style a name.

    在“定义新列表样式”窗口中,首先为您的新样式命名。

    Now, there are a number of formatting options available in this window. You can change the font, character formatting, type (number or bullet), and several other things that you were also able to change when customizing your list.

    现在,此窗口中有许多可用的格式设置选项。 您可以更改字体,字符格式,类型(数字或项目符号)以及自定义列表时也可以更改的其他几项。

    While these options can be useful if you want to create a quick new multilist style from scratch (i.e., when you have not already created and customized a list you want to turn into a style), we highly recommend that you don’t bother with them. Instead, it’s much more effective to create your list, customize using the more powerful tools we talked about in the previous section, and then creating your style. The new style will include all those customizations you’ve already made to the list.

    尽管如果您想从头开始创建快速的新多列表样式(例如,当您尚未创建和自定义要转换为样式的列表时),这些选项很有用,但我们强烈建议您不要打扰他们。 取而代之的是,创建列表,使用我们在上一节中讨论的功能更强大的工具进行自定义,然后创建样式的效果要好得多。 新样式将包括您已经对列表进行的所有自定义。

    One option you will want to pay attention to is whether you want the style to be available only in the current document, or in new documents based on the template attached to the document. You’ll want to choose the latter if you need to access the style when you create other documents.

    您将要注意的一个选项是您希望样式仅在当前文档中还是在基于文档所附模板的新文档中可用。 如果在创建其他文档时需要访问样式,则需要选择后者。

    Choose what you want, and then click “OK” to save your new style.

    选择所需的内容,然后单击“确定”以保存新样式。

    Now, you’ll be able to choose that style (or any other list styles you’ve created) from the “Multilevel List” dropdown menu any time you want to create another multilevel list.

    现在,您随时可以在要创建另一个多级列表时从“多级列表”下拉菜单中选择该样式(或您创建的任何其他列表样式)。

    And now you know more than you ever wanted to know about creating multilevel lists in Word.

    现在,您比在Word中创建多级列表要了解的知识更多。

    翻译自: https://www.howtogeek.com/355561/how-to-create-and-work-with-multilevel-lists-in-microsoft-word/

    word多级列表创建目录

    展开全文
  • Excel 创建多级列表

    千次阅读 2018-11-19 00:57:07
    近期由于数据整理,需要用到excel的多级列表相关知识,现整理如下。 1 原理 多级列表的原理一句话总结为:依据父级列表内容与子级列表标题相同的关系,逐级索引。 2 实现 (1)数据源 (2)索引关系—可以结合前述...

    近期由于数据整理,需要用到excel的多级列表相关知识,现整理如下。

    1 原理
    多级列表的原理一句话总结为:依据父级列表内容与子级列表标题相同的关系,逐级索引。

    2 实现
    (1)数据源
    在这里插入图片描述

    (2)索引关系—可以结合前述原理分析下述颜色相同具有索引关系的单元格
    在这里插入图片描述

    (3)实现步骤
    (A)选中待处理数据源
    (B)Ctrl + g 快捷键,打开定位对话框
    在这里插入图片描述

    在这里插入图片描述
    (C)根据数据源中的首行标题创建名称:公式-> 根据所选内容创建名称
    在这里插入图片描述

    在这里插入图片描述

    (D)查看生成的名称并检验是否与数据源相同:公式->名称管理器。若与数据源相异,则可以单独选中异常的列,然后再进行步骤(C),再通过(D)检验

    在这里插入图片描述

    在这里插入图片描述

    (E)重新创建名称时,会有如下提示,选中“是”即可
    在这里插入图片描述

    (F)从数据库sheet跳转到主界面sheet
    在这里插入图片描述
    (G)选中A2单元格,再选中:数据->数据验证->数据验证
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    (H)选中B2,再选中:数据->数据验证->数据验证。确定后,会有报警提示,不用处理,选择“是”。
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    (I)查看,与数据源相同
    在这里插入图片描述
    在这里插入图片描述

    (J)同理在“人员”列表,创建三级列表:数据->数据验证->数据验证。
    在这里插入图片描述

    (K)结果如下:
    在这里插入图片描述

    至此,一个三级列表创建完成。

    4 将已经形成的列表,通过下拉方式复制到下一行,如下:
    在这里插入图片描述

    (1)此时B3不受A3的主导,而是受A2的主导
    在这里插入图片描述

    (2)选中B2
    在这里插入图片描述

    再选中:数据->数据验证->数据验证,将$A$2 修改为 $A2,确定
    在这里插入图片描述

    (3)再重新选中第一行,下拉,此时后续的多级列表均受主列表控制,原因是数据源的单元格自动变换了,A4就是自动变换的结果。
    在这里插入图片描述

    展开全文
  • 定义新的多级列表的避坑指南 批量格式化标题操作
  • VBA示例之 求人不如自已动手 自动建立多级目录 ,供初学者参考,大牛勿进~~~~~~~
  • 设置完成样式后,在“开始”标签选择“段落”块里的 “多级列表”按钮。 如果我们要设置第一级就用鼠标选中级别为1级,然后设置“将级别链接到样式”为前面设置的风格名为“标题一”的样 式; 同样的操作,如果...
  • 多级列表编号可以清晰地标识出段落之间的层次关系,这也就是为什么在使用Word2010编辑文档的过程中很多朋友都喜欢做的一件事,在本文将为大家介绍下多级列表编号的插入方法。另外整理了一些与插入编号相关的问题,...
  • android多级树形列表

    万次阅读 热门讨论 2016-11-16 10:09:34
    我们开发app过程中,经常会碰到需要 多级列表展示的效果。而android原生sdk中根本没有3级 4级甚至更多级别的列表控件。
  • word vba script for format the muti-level title and single-level level, support the bullet style and number style.
  • 一、打开 “多级列表” 打开Word文档,在 开始---选择多级列表---点击定义新的多级列表; 点击之后,便可以得到下面的界面: 二、设置固定格式的 多级标题 假设我们需要下面的标题格式,我们需要一步一步...
  • 目前, 网上有许多关于论文写作时在word中设置多级列表的方发,然而,我在写作中设置,依然出现了问题,下面我将设置方法进行了总结。 我的问题:对已有文档,突然想设置列表,发现按网上方法,多级标题编号总出现...
  • 第二种做法是使用多级列表+样式表的方式自动生成插图/插表清单。 定义样式表  多级列表是对文章标题的统一管理,主要包括标题的级别和编号等。样式表是对全文格式的管理,包括字体、字号、段落、编号……你所能用到...
  • 怎样使用md命令一次建立多级子目录

    千次阅读 2019-04-02 17:09:00
    点击开始,运行,在运行窗口中输入“cmd”。 ...打开cmd窗口之后,用md创建一个多级子目录,例如,在f盘下创建一个11\22\33\44的多级子目录。 回车之后,虽然没有提示,但是确实已经...
  • BDB如何建立多级索引表

    千次阅读 2008-11-09 15:55:00
     今天想说说关于BDB的多级索引的创建。 在BDB中提供四种算法接口, 哈希(hash) 二叉平衡树(BTREE) 队列(QUEUE) 有序记录(RECNO) 至于哪种数据结构常用,不好说。 看具体业务需求! QUEUE/RECNO 数据结构不支持...
  • 在编辑Word文件时,尽管设置了多级列表,但还是不能成功添加目录。一个主要的问题是, 系统读到的各个列表的大纲级别都是“正文文本”,那么我们做法是:如下图,首先将光标置于需要添加至目录的标题处,然后点击...
  • Word多级标题模板的建立与教育应用 word自动生成目录 金山wps Word多级标题模板的建立与教育应用 word自动生成目录 金山wps Word多级标题模板的建立与教育应用 word自动生成目录 金山wps
  • 所以,上文中提到的,样式表相关的默认的多级列表,不允许更改,这显然是个bug.站在哪个角度,也难说是有道理的。 2)现在我们拿出最重要的证据: 见上图。 不论这名程序员多么胡闹,最终还是要面对用户到底要什么这...
  • 现希望建立一个查询表,在查询表中建立二级下拉列表,可供选择部门以及部门内的员工。该如何用VBA实现? 员工编号 姓名 部门 基本工资 0006 程建华 管理部 2875 0009 李国敏 管理部 ...
  • 题目: 多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。 这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如...输入的多级列表
  • 图示效果如下: 1、DataSet作为内存关联数据库DataSet ... 1.1将一级列表、二级列表(2个)、三级列表的所有DataTable加载到DataSet里 ds.Tables.AddRange(new DataTable[] { datatable1.Copy(),datatable2.Copy(...
  • 相信很多朋友都想通过Excel数据有效性实现多级联动下拉列表的制作,多级联动下拉列表就是第一列选择了某项,第二列则只会提供相对应的选项供我们选择,这个在网页中可以经常看到。  现在EXCEL也可以实现这样的效果...
  • 多级缓存

    千次阅读 2018-10-03 20:33:57
    多级缓存 基本概念 如何缓存数据 分布式缓存与应用负载均衡 热点数据与更新缓存 缓存崩溃与快速修复 基本概念 1. 什么是多级缓存 是指在整个系统架构的不同系统层级进行数据缓存、以提高访问效率 一般会使用...
  • 在做多个联动的select下拉列表框时,一般都是用javascript数组来动态显示列表框的列表项内容。看到不少程序,都是在脚本中一行一行地输入数组元素,即容易出错,而且让脚本篇幅看上去很大。经常在想为什么不能将这些...
  • word多级编号

    2013-10-10 14:47:25
    1 建立文档框架内容 2 将各级别设置为相应的标题级别 3添加更小级别 设置好标题级别后 单独选择后 再点击多级列表按钮 单独选择前面 的编号 右键选择继续编号
  • 【CoderBaby】首先需要创建多个名称(包含key及value),作为下拉列表的数据源,供后续通过名称引用。可通过菜单:“公式”---“名称管理器”找到,如下图: (2)数据验证——DataValidation 此处我们需要选List(序列)...
  • 需要itemPanel的预制体来生成每个子菜单,然后建立一个list保存所有的子菜单项,方便后续操作,也可动态根据添加,删除,修改菜单项,因为采用了vertical layout group组件,所以只需要修改里面的子物体即可实现菜单...
  • 多级分发

    2014-08-01 18:21:45
    发起人:该子任务的建立者 被下发对象:该子任务下发给谁 发送人:任务流转过程中,上一个节点的处理人 发送机构:发送人所在的机构 发送时间:任务流转过程中,上一个节点测处理时间 任务状态:子...
  • qt动态多级菜单

    千次阅读 2018-06-12 13:32:30
     好友列表可以用QTreeWidget实现,根据父节点和子节点来建立不同的右键菜单;我们知道,建立菜单需要用到QMenu和QAction,其中QMenu建立菜单,QAction建立菜单子项,同时相应子项的相应操作(增加、删除等);现在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,615
精华内容 6,646
关键字:

如何建立多级列表