新版15.2里新添加了recentitemcontrol(ric)这个控件,这个控件能实现office打开菜单里的文件列表,包括选项卡和置顶等功能。类似于下图
直接从工具箱拖过来就可以,添加各项相当简单。问题难就难在如何动态添加这些项。demo里只有一个案例,在Ribbon Simple Pad,里面用到了ric,也是run-time design,翻了下代码太多了懒得看,官网无帮助,讨论也很少,就自己研究了一下,略成功。
图右边是一个个的recentpinitem,单击后会触发itemclick。End-users can click this pin button at runtime, which fires the RecentPinItem.PinButtonCheckedChanged event and toggles the boolean RecentPinItem.PinButtonChecked property(懒得翻)。添加的代码如下:
我从数据库里得到datatable,按是否pin排序,略
[Visual Basic .NET] 纯文本查看 复制代码
Dim pinitem As New RecentPinItem
pinitem.Caption = .Item("name").ToString '将caption 和 description赋值
pinitem.Description = .Item("description").ToString
If CInt(.Item("pin").ToString) = 1 Then ’我这里判断是否置顶了
pinitem.PinButtonChecked = True
Form_main.RecentTabItem_All.TabPanel.Items.Add(pinitem) '添加到控件中
Try
If CInt(dt.Rows(i + 1).Item("pin").ToString) = 0 Then '如果下一项不是pin,添加个separator
Form_main.RecentTabItem_All.TabPanel.Items.Add(New RecentSeparatorItem)
End If
Catch ex As Exception
End Try
Else
Form_main.RecentTabItem_All.TabPanel.Items.Add(pinitem)
End If
AddHandler pinitem.ItemClick, AddressOf openProject '将itemclick 和 checked事件绑定上
AddHandler pinitem.PinButtonCheckedChanged, AddressOf topProject
之前比较坑的是seperator必需手动添加,否则pin和非pin之间没有间隔线,运行时如果有pin发生,seperator自动添加到最后一个pin。
还有不知道是不是bug还是编写问题。在触发PinButtonCheckedChanged事件后会自动触发ItemClick事件。帮助中 The base RecentItemBase class provides the ItemClick event for all Recent Item Control elements.,我新建了工程手动添加几个pinitem,做个msgbox,发现确实如此,但demo中没有此问题,所以比较恼人,后续跟进吧。
个人编程新手,代码有什么硬伤请指正。
|