设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1995|回复: 1

【OneKeyTools源代码分享3】特殊选中

[复制链接]
发表于 2016-2-24 20:22:45 | 显示全部楼层 |阅读模式
本帖最后由 只为设计 于 2016-2-25 20:25 编辑

第三篇分享是OneKeyTools中的特殊选中功能,以“按类型”为例。之所以用这个案例,是因为涉及到Llist的基本运用。新手学习编程,一般是从if和for的掌握开始,然后学foreach,再接下来就是Array或list,这是设计的切身体会。Array或List如何结合具体运用是困扰新手的一个难题。

【全部代码】↓
  1.             PowerPoint.Selection sel = app.ActiveWindow.Selection;
  2.             if (sel.Type != PowerPoint.PpSelectionType.ppSelectionShapes)
  3.             {
  4.                 MessageBox.Show("本功能可同时选中当前页面中与所选形状相同类型的形状");
  5.             }
  6.             else
  7.             {
  8.                 PowerPoint.Slide slide = app.ActiveWindow.View.Slide;
  9.                 List<string> list = new List<string>();
  10.                 foreach (PowerPoint.Shape item in slide.Shapes)
  11.                 {
  12.                     if (item.Type == shape.Type)
  13.                     {
  14.                          list.Add(item.Name);
  15.                     }
  16.                 }
  17.                 int count = list.Count;
  18.                 string[] arr = new string[count];
  19.                 for (int i = 0; i < count; i++)
  20.                 {
  21.                     arr[i]= list[i];
  22.                 }
  23.                 slide.Shapes.Range(arr).Select();
  24.             }
复制代码

【说明】
要实现多选,可以用slide.Shapes.Range(Array)的方法。这里的Array是图形的名称(Name)的数组,Name是string字符串类型。可问题出现了:使用数组需要定义数组的长度,但我们往往是不可知的。所以需要用List作为中转(List的新建无需定义长度)。
所以我们先定义一个List:List<string> list = new List<string>()。然后加一个判断:if (item.Type == shape.Type)。是的话,就list.Add(item.Name),这样就把与所选图形类型相同的所有形状的Name添加到了List里。
接着通过list.Count获取个数:int count = list.Count。再定义Array:string[] arr = new string[count]
然后通过for循环把list里的数据导入到Array里:arr[]= list[]
最后选中所有满足条件的形状:slide.Shapes.Range(arr).Select()

本帖被以下淘专辑推荐:

点击这里给我发消息

发表于 2016-2-24 20:36:51 | 显示全部楼层
老爷棒棒哒,蟹蟹分享~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-29 01:20 , Processed in 0.084537 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表