《Windows Form 编程基础-2000》学习笔记

第一章:

 

1. Form类是所有窗体的基础,仅需要一个form类即可运行一个窗体。

2. Main函数可以返回voidint类型,可以在函数入口接收字符串数组

3. Application类用来管理应用程序、线程和windows消息。Application类的公有静态属性、公有静态方法、公有静态事件。

 

 

4. Using 别名命名空间,或别名其它命名空间中的类。

5. 使用公共属性代替公共字段,来保证字段不会被设置为危险的值。

6. 使用&和字母来设置Alt+字母键绑定的快捷键。&Load 设置了Alt+L热键。

7. Controls.Add 依次给窗体添加子控件。并位于先前的子控件的下层。Controls属性也能用于移除控件。

 

8. OpenFileDialog 派生自FileDialog类。Filter属性使用竖线分割字符串

9. Bitmap pictureboximage属性赋值

10. 锚定属性。用于锚定控件在窗口改变大小时控件漂移的控制,像船在湖面上锚定一样。

11. Dock属性设置控件停靠位置。

12. 通过控件添加顺序的不同,先添加图片框,再添加按钮,使得图片框将按钮覆盖,但仍可通过热键调用到图片框。

 

 

第二章:

1. Shift+F6 编译当前项目,F6编译解决方案。Ctrl+Shift+B 也能达到编译效果。(设计界面按Shift+B切换到属性窗格。)

2. F5运行,并调试。Ctrl+F5运行不调试。结果是一样的。

3. ///<summary></summary> xml文档管理标记

4. System.ComponentModel.Container components; Windows Form Designer 需要这个字段保证运行时,所有控件能被正常的管理。特别是不属于wiindows form的控件。

5. Dispose方法使对象能尽量地被及时清理。

6. 只要足够小心,我们可以按需手动修改Desinner.cs文件。

7. 所有的属性都是基于System.Attribute类。它是System.Reflection命名空间的一部分。 AssemblyInfo.cs文件使用由这个命名空间定义的一些程序集相关的属性。使用了程序文件中关于属性的标准格式定义:[assembly: <attribute>(<setting>)]

8. C#中类型的Attribute文字部分可以省略。如:AssemblyVersionAttribure,[assembly: <AssemblyVersion>("1.0")]

9. AssemblyAttribure.cs 主要的属性:

(1) AssemblyTitle: 本程序集的标题;

(2) AssemblyDescription:本程序集的简短描述;

(3) AssemblyCompany:程序集所属公司名称;

(4) AssemblyProduct:基于此程序集的产品名称;

(5) AssemblyCopyRight:程序集所属版权;

(6) AssemblyVersion:程序集的版本。(Major主号.Minor副号.Build构建号.Revision修订号)

10. 除版本号外,其他几个均可用字符串定义。而版本号比较特别。2.1 等价于2.1.0.02.1.*等价于2.1.<200011日以来的当地日期>.<午夜以来的当地时间秒数>

11. AssemblyInfo.cs修改版本,并在form的构造函数的结尾处设置到标题中。

 

 

第三章

1. 新增菜单项。

2. Alt+Enter查看控件的属性。

3. pictureBoxPhoto.Invalidate(); //使图片失效,则系统会重新加载此图片。

4. ToolStripMenuItemtag属性可以设置为各种对象,可以设置为pictureBoxSizeMode,用于点击该菜单项时直接设置相应的属性值。

5. Popup事件,不存在。菜单展开事件为dropDownList事件。

6. 新增的菜单项,输入一个 -,则会自动生成一个分割线。

7. Object相等,和强制转换指定类型相等的区别。对象比较,不仅要值相同,连对象本身也要相同。

8. 一个菜单项只能在一个菜单下面,在新的菜单中添加该项时,则会从旧的菜单中移除。

9. Foreach 不接受null

 

 

 

第四章

 

1. 控件类,包含位置、大小,锚,船坞

2. 控件的Paint 事件,以及使用该事件中的绘图对象绘制图形。

3. 设置控件为失效,使得重新绘制,并触发绘制事件

4. 状态栏在菜单项鼠标进入时显示提示,离开时恢复原本状态。还是以分项显示多个信息。

 

 

第五章

 

1. 接口支持多继承,不需要具体如何实现。抽象类只能够单继承,需要表示就具体实现。

2. 强类型集合类,适合继承CollectionBase类。而不是适合继承ArrayList这种通用类型的类,以防止类型的不安全性。

3. C++可以继承多个类,可以继承proteted类和private类。

4. Ctrl+Alt+L编辑文件同时可以查看文件在解决方案中的目录。

5. 新建类库项目,添加以公司命名的顶级命名空间,在原项目中引用当前类库名称的类库。

6. 下划线前缀作为私有变量

7. 当图片加载失败时,创建一个bitmap,并用graphics绘制红色X错误标记。

8. 重写Object对象的比较方法,以及Objecttostring方法。C#object 等价于Object

9. GetHashCodeEquals方法关联,需要同步修改。

10. 清除系统资源的Dispose方法。

 

 

第六章

1. 对菜单栏重新设计,用表格描述新菜单结构。画出草图,得到经理、客户及其他人的认可非常重要。

2. 对于菜单的快捷键设计尽量与大部分应用程序相符,以免使用户感到不便。比如CtrlN一般用来创建新文件,在切换下一个(next)图片的快捷键设置时,应避免占用CtrlN,而使用快捷键CtrlShiftN

3. 使用一个私有bool变量保存相册的修改状态,若没修改则不需要提示用户保存文件。

4. 设置OpenFileDialog.InitialDirectory = Environment.CurrentDirectory;

5. IndexOf依赖本类重写的Object.Equals方法。

6. statusStriptext属性: 获取和设置状态栏显示的文本。

7. Environment.SpecialPath.Personal 枚举值获取计算机中的用户文件夹。

8. GetFolderPath类加上枚举值,获取.net 框架中设置的地址路径。

9. 按键事件,内部调用事件方法(this, EvenArgs.Empty

10. streamWriterstreamReaderfileStream需要在函数结束时执行关闭(Close方法)。

 

 

第七章

1. MDI含义是多文档界面。

2. 删除控件:通过上下文菜单删除,或选中后按下删除键。替代原来的设置方法,更新与该控件相关联的上下文菜单、引用的函数等内容。

3. 将状态栏子控件的绘制函数代码移动到状态栏的绘制函数后,修复了滚动条隐藏拉出时绘制失败的情况。(将绘制代码移动到窗体绘制函数时,未能修复)

4. 菜单,状态面板,绘制图像(使用resize函数刷新面板的绘图)

 

 

 

 

第八章

 

 

1. 模态窗口必须执行完之后,才能继续执行主窗口的功能。非模态窗口允许,同时运行。

2. 对于formshowdialog为模态窗口,show为非模态窗口。

3. DialogResult 来自form的对话框、通用对话类,按钮自定义的用于模态窗口自动返回的结果。

4. 使用using模块(清理非内存资源) 让程序自动调用dispose接口方法。

5. 重写OnClosing方法,以管理窗口是否退出。需要在方法内继续调用base.onclosing 以处理窗口的其他事件。

6. 数据层,表示层,应用程序层(业务逻辑层)。

7. 创建模态窗口的基本属性值:

(1) acceptButton,

(2) cancelButton,

(3) formBorderStyle: fixedDialog,

(4) HelpButton,

(5) MaximizeBox: False,

(6) MinimizeBox: False,s

(7) ShowInTaskBar: False,

(8) StartPosition: CenterParent,

(9) , Size: 350, 160

(10) ,Title: EditCaption

8. try catch finally语句可以没有catch, 出现异常时,仍然能够执行finally语句块

9. 使用属性打通不同窗体之间属性的设置

 

 

 

 

 

第九章

 

1. 访问级别:

(1) Public 无论任何地方都可以使用;

(2) Protected 任何子类都可以修改,无论是在哪里定义的;

(3) Protected Internal 相同程序集下定义的任何子类都可以修改;

(4) Internal 相同程序集下定义的任何类都可以修改,无论它是如何定义的;

(5) Private 任何子类都不可修改。

2. 新建派生窗体,在resetonclosing方法中调用保护属性的虚方法,在窗体中中加入保护属性的面板控件。新建派生窗体Inherited Form,派生窗体只能修改保护属性的控件和函数。

3. 使用grouppannel控制radiobutton的组。

4. Grouppanel会控制子控件的布局属性,如anchordock属性。

5. Grouppanel会独立tabindex属性。

6. 按下式按钮、单选按钮、复选框按钮

7. 按钮基类包含平面类型,按钮上的图片及图片资源,文本队列(textalign

8. Button按下式按钮,DialogResult点击时返回给父窗体指定值,若是showdialog状态会自动关闭该子窗体;PerformClick可以模拟一个点击事件。

9. 使用radiobuttontag属性来附加radio的属性值。Enum属性适合先设置为int在赋值。

10. Anchor 属性在派生窗体会重新计算距离边界的值,故在母版中距离边界的距离是会随着location变化的。应设置需要变动位置的定位属性为protected。(在自定义控件中实现)

11. 

 

 

第十章

 

 

1. 多行文本框虽然可以用来显示列表,但不同单独对每个列表项进行选择,突出显示,移动,以及其他一些由程序实现的操作

2. listBox列表框和combobox组合框(除此之外还有listviewtreeview

3. 列表框的单选和多选;

4. Listbox绑定数据源对象DateSource

5. 设置需要显示的成员DisplayMember(默认是ToString()方法)

6. ValueMember获取/设置列表中选项的值(默认是选项对象本身)。例如selectValue的值。

7. Listbox 有 选择的项的索引和值:selectIndex, selectValue

 

8. GetItemText 返回与所给项相关的文本,与DisplayMember属性的设置相关。

9. ListBox常用属性

(1) TopIndex: 用于设置第一个显示的项。值为该项的索引值。作用是控制显示,而同时不用选中该项。

(2) drawMode用于自定义列表框的绘制,使DrawItem函数生效。

(3) DrawMode.OwnerDrawFixed 为各所有项的大小均一致;而DrawMode.OwnerDrawVariable则可以各项不同大小。

(4) IntergraHeight设置列表框显示区高度正好是列表项的高度的整数倍。在DrawMode.normalDrawMode.OwnerDrawFixed 模式下生效。DrawMode.OwnerDrawVariable则不受该项限制。

(5) 自定义绘画模式下,itemHeight的值才会生效。

(6) MultiColumn = true; 设置listbox的排列方式为高度确定,超过时在右边新建一列显示的多列显示方式。只有横向滚动条,而没有纵向滚动条。相关属性有ColumnWidth

(7) Sorted 是否按字符排序,类似于文件夹的文件名排序。

(8) selectedIndex 只能设置为选中,若为多选状态,则不会移除其他项的选中状态。

(9) SetSelected(itSelected, true); 会设置项的选中状态,但不会主动改变selectedIndex 的值,在多选模式下不会变;

(10) SelectedMode: Normal单选;None不可选(不可通过代码设置选中的项);点击多选;控制键多选;

(11) DataSource 设置了的时候,不可以修改items选项。否则会出现异常。

(12) 

10. listBox1.BeginUpdate(); 方法停止绘制,endUpdate()使列表框重新绘制。

11. listBox1.SetSelected(1, true); 设置项的选中状态

12. FindString() 寻找开头与文本匹配的项。

13. ClearSelect() 清除选择

14. GetSelected() 获取选中状态,SetSelected设置选中状态

15. IndexFromPoint() 返回坐标指定的项的索引。可能为-1 65535 ,所以除大于等于0外,还需要小于选择项的个数;

16. Sorteddatasource属性不兼容。至于items兼容。

 

 

 

第十一章 tab 和 日期控件(dtpicker, monthCalendar

 

1. datetimePicker,可以设置为长日期,短日期,时间和自定义格式。

2. 时间代码:

代码

说明

DateTimeFormatInfo属性

D, dd

缩简day日期, 两位day日期

 

Ddd, dddd

星期简称, 星期全称

AbbreviatedDayNames / DayNames

M, MM

MMM,

MMMM

缩简月数字,两位月数字

月份缩写

月份全称

 

AbbreviatedMonthNames

MonthNames

y, yy,

yyyy

缩简两位数年份,两位数年份

四位数年份

 

gg

时代,或世纪(B.C. A.D.

 

h, hh

12小时简称和全称

 

H, HH

24小时简称和全称

 

m, mm

分钟简称和全称

 

s, ss

秒钟简称和全称

 

tt

AM/PM 提示(AM PM

AMDesignator PMDesignator

:

冒号,默认时间分隔符

TimeSeparator

/

斜杠,默认日期分隔符

DateSeparator

'c'

显示指定的字符

 

 

 

 

 

3. 

4. 月日历控件MonthCalendar控件

(1) BoldedDates = dates; 设置加粗的日期

(2) MinDate = minDate设置最小日期

(3) SelectionStart = minDate 确保日历显示相册的初始日期

(4) RemoveAllBoldedDates(); 移除所有加粗显示日期标识

5. MonthCalendar.HitTestInfo info = monthCalDates.HitTest(e.X, e.Y); 获取改点下的触碰信息。if (info.HitArea == MonthCalendar.HitArea.Date) 若触碰的区域是日期项。(此为MouseDown事件)可根据时间的日期值,添加改天的文件的上下文菜单。info.Time.Date

6. 继承MenuItem类自定义一个类,以添加菜单项的新属性,在创建时赋值,在点击事件中使用,作为调用函数的实参。

7. HitArea的默认值是Nowhere

 

 

 

第十二章

 

1. 只有当前具有焦点的控件才能接收keypress, keydown, keyup事件。

2. KeyPress 键盘事件可以不占用宝贵的操作系统循环来从文本框的一系列容纳对象里过滤这种事件。

3. IsInputKey IsInputChar 判定一个特殊字符是否经过了派生控件的预先处理。

4. 所有的鼠标事件都来自MouseEventArgs. (属性:Button[MouseButtons的枚举], Click[获取鼠标按下和释放的次数], Delta, X, Y)

5. 对于Ctrl右键点下时同时出现上下文菜单的情况可以,在ctrl按下时清除上下文菜单,更改一下鼠标样式。并在ctrl松开,或者窗口失去焦点时OnDeactivate ,释放锁定,恢复上下文菜单。

6. 多行文本框需要每行都进行比较才能判断是否修改,故可以在多行文本框中的textchanged事件中判断是否聚焦,是则吧保存修改标记为true

7. new item 里 新建 bitmap.bmp 位图, 在vs 中手动修改位图。创建简单的图标。如右箭头等。复制文件后,更改名字,用画图工具打开(paint)水平翻转,就得到了左箭头。在属性窗口中设置大小。

8. 设置imageAlign MiddleRight TextAlign: MiddleLeft。 或者反过来等。

9. 添加到窗口属性中的资源会自动添加到resx文件中。

10. 设置窗口的icon and mainfest配置。

 

 

第十三章

 

 

1. 工具栏:

(1) Apearance 显示风格

(2) Autosize 更具包含按钮以及dock风格调整大小

(3) Items 工具栏包含的按钮

(4) showToolTips显示鼠标停靠文本提示,默认false

(5) LayoutStyle Flow流风格,满行时换行。HorizontalStackWithOverFlow横向栈溢出下拉菜单。

2. 工具栏事件:

(1) ButtonClick 点击工具栏某个按钮时发生

(2) ButtonDropDown 点击工具栏某个下拉按钮时发生

3. 添加toolbar之后,将图片pannel置顶,右键bringtofont,可以使panel dock fill动作时不会抢占工具栏的位置,而被工具栏覆盖。

4. 工具栏按钮

(1) Tooltiptext 按钮提示文字。

(2) Tag 标签

(3) Visible 可见

(4) Enabled 可用

(5) Alignment left right

(6) TextAlign 九个位置

(7) AutoSize (bool)

(8) Autotooltip (bool) 显示提示文字

(9) Checked选择状态 (配合属性 CheckOnClick

5. 按钮Image

(1) Image 设置图片

(2) ImageAlignMiddleCenter(默认)九个属性

(3) ImageScaling 图片锁屏模式

(4) ImageTransparentColor设置图片中用作透明处理的颜色,默认Magenta品红色/洋红色

 

6. 使用Activate()方法激活窗口。

7. 使用Owner属性获取父窗口。

8. 新增tooltip 设置automaticDelay属性将自动设置显示时延(1倍),切换时延(1/5倍),保持显示时延(10倍)。

9. 如把tooptip控件命名为toolTipPhotos, 则窗口中的其他控件在属性窗口格会多出一个ToolTip On toolTipPhotos的属性。

10. toolTips showalways属性决定窗口未激活时,也显示提示。对于禁用的按钮,不会提示。

 

 

 

第十四章

 

1. ListView 的显示模式分为 LargeIcon大图标,SmallIcon小图标,list列表,Details详情。大图标,小图标模式可以自由拖动,列表和详细模式不可拖动,但有排序功能。

2. 使用项目资源设置窗口图标,在属性窗口中不支持,但支持修改Designer文件

this.Icon = global::MyAlbumExplorer.Properties.Resources.Bookshelf;

3. 窗体上的菜单优先使用手动生成,三级菜单,或上下文菜单可以自动生成。

4. Listview Items 的属性

(1) Focusd 选择选项的起始项为true

(2) Selected 所有选择的项均为 true

5. this.Controls.Add(listViewMain); 语句导致该控件被添加在了视图的底层

6. ListView.ColumnHeaderCollection.AddMethod 八个重载,直接添加列对象,或只设置一部分参数或设置全部参数。(参数顺序分别是<key, text, width, horizontalAlignment, (imageIndex / imageKey)>

7. listViewMain.Sorting = SortOrder.None; 取消排序之后,需要重选设置排对象listViewMain.ListViewItemSorter = _comparer;

8. 使用AllowColumnRecorder 启用可移动列,listViewMain_ColumnClick 事件中的e.Column 参数仍然是原来列的参数

9. labelEdit=true 用于编辑标签,有beforeLabelEditafterLabelEdit事件,(CancelEdit可设置取消编辑操作,Item获取当前编辑项ListViewItem的索引,获取新文本,分配给指定项目的标签)以下方法开启编辑,endEdit 关闭编辑。

if (listViewMain.SelectedItems.Count == 1)

{

   listViewMain.SelectedItems[0].BeginEdit();

}

10. Activation 属性 设置列表项激活的方式。OneClick 与超链接类似,鼠标飘过或出现手型,TwoClick为双击,鼠标飘过也会出现手型。

11. LISTVIEW:

// Set the view to show details.

listViewMain.View = View.Details;

// Allow the user to edit item text.

listViewMain.LabelEdit = true;

// Allow the user to rearrange columns.

listViewMain.AllowColumnReorder = true;

// Display check boxes.

listViewMain.CheckBoxes = true;

// Select the item and subitems when selection is made.

listViewMain.FullRowSelect = true;

// Display grid lines.

listViewMain.GridLines = true;

// Sort the items in the list in ascending order.

listViewMain.Sorting = SortOrder.Ascending;

 

12. 

 

 

第十五章

1. Hide Selection : False即使没有获得焦点,选中的节点也会高亮

2. Spliter 用于动态调整两个控件边界的位置。与WPF相同。

3. Spliter把容器控件分隔成两个部分,这两个部分通常是LISTBOX,LISTVIEW,TREEVIEW,PANEL.

4. 添加spliter 之后需要把外容器LISTBOX置顶,使得spliter层次在两个容器之间。

5. MINSIZE, MINEXTRA分别设置内外两个控件的最小大小

6. Spliter 和它下一层的容器控件同步设置为dock.top可以变为横向分隔。

7. SpliterMOVE SpliterMOVING 移动和移动完成的事件

8. TreeNode

(1) FIRSTNODE节点数的第一个节点, NODEFONT节点字体属性, PRENODE当前节点树下的前一个节点, INDEX节点的索引, NODES子节点集合, NEXTVISIBLENODE下一个子节点或兄弟节点, PARENT 父节点

(2) IMAGEINDEX, SELECTEDIMAGEINDEX, 图片索引,高亮图片索引

(3) ISEDITING是否编辑中, ISEXPANDED是否展开, ISSELECTED是否选中, ISVISIBLE是否可见

(4) TAG标签,  TEXT文本

(5) BEGINEDIT()初始化(开始)节点标签的编辑, COLLAPSE()收起节点树的所有子节点, EXPANDALL()展开节点树的所有节点, TOGGLE()切换折叠状态(基于ISEXPANDED

(6) albumNode1.EnsureVisible(); 展开或滚动到可以见到该节点的位置。

 

9. 使用TAG存储路径并不是行之有效的办法,最好的办法是新建子类,添加可读性强的新属性。

10. 节点展开/收起方式:点击+/-号,使用左右键盘按键,使用函数expand, collapes, toggle, ensureVisible, exall, collall等等。

11. 

 

 

 

 

第十六章

 

1. IsMdiChild 判断是否是mdi模式的子窗体

2. MdiParent 属性设置mdi的母窗体

3. 窗口之间使用internal 属性 公用方法,public 修饰符 共用属性。

4. 使用internal 方法 内调用PerformClick 安全分享按钮/菜单的点击事件。

5. WindowState MdiLayout 方法管理子窗体。

6. MergeIndex . MergeAction 属性,设置合并菜单的方法。

7. 重写OnMdiChildAcitve 方法 动态更新母窗体的标题。

 

 

 

第十七章

 

1. https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.DataGridView?view=netframework-4.0

2. 在设计面板设置DATAGRIDVIEWDATASOURCE属性,可以根据现成的类设置。最好是支持IList 或继承自CollectionBase类的模板类。另外有IListIComponent组合的Form空间下的类,这种类应用难度较高。

 

3. 在设计窗口Columns属性弹窗添加列,绑定datasource属性的情况下,会自动添加可用的属性,进行适当的修改和删除即可,也可添加同样字段,但显示格式不一样的的列,在ONload方法中给它设定自定义的格式化类即可。

 

4. 使 用于datasource绑定的类 PhotoAlbum的子项的类Photograph 继承 IEditableObject, 实现需要修改的字段的修改,数据视图会自动检测接口的三个函数beginEdit,cancelEdit, endEdit ,并在适当的时候调用。

5. Datasource 西安设置为null ,在赋值,视图才能自动更新。

 

 

 

 

17.4 DataBinding

6. BindingContext 跟踪绑定数据

7. BindingManagerBase 管理绑定数据源,

(1) BindingContext[source]

(2) BindingContext[source, member]

(3) BindingManagerBase bm = BindingContext[_album];

8. ControlBindingCollection: DATABINDINGS属性

9. Binding DATABINDING集的索引 DataBindings[property]

10. Form 自动复制bindingContext对象到所有子控件上。通过DATABINDINGS属性获取这些对象的列表。

11. Binding(类/对象)负责Format事件,Parse事件,控件属性的转化时指定如何进行绑定。

12. DataBindings.Add 添加绑定对象,("绑定控件属性", 数据源对象, "数据源对象属性"

13. 当绑定的对象支持IList时使用的是它的子对象,Current(object), Position(int) 两个属性可以获得当前对象和绑定索引信息。

14. CurrentManager

(1) Refresh() 强制刷新不支持自动刷新的控件

(2) ItemChanged 对于支持双向绑定的控件引发事件。

 

15. DATAGRIDVIEW在设计界面创建了绑定数据源,则需要在Onload方法中给这个数据源赋值它的数据源,而它也需要设置为其他控件的数据源,而不是用它的数据源来设置其他控件,photoAlbumBindingSource.DataSource = _album;

16. 当更新数据源时,强制刷新控件:(即更新的photoAlbumBindingSourceDataSource(_album 对象),也相当于更新了photoAlbumBindingSource对象

var cm2 = BindingContext[photoAlbumBindingSource] as CurrencyManager;

if (cm2 != null)

{

    cm2.Refresh();

}

17. 

18. 

 

 

第十八章

1. 打印相关

(1) PrintDocument 可服用组件,用来输出打印数据到打印机,当打印数据需要输出到打印机时触发打印事件PrintPage

(2) PrintDialog 提供和打印相关选项的通用对话框

(3) PrintPreviewDialog 预览打印效果(包含PreviewControl对象的窗体)。显示当文档在指定的打印机设备上进行打印时的外观。

(4) PageSetupDialog 通用对话框,允许用户改变和打印文档相关的页面设置。

2. .Net框架的3Timer计时器类

(1) System.Threading.Timer 用于处理多线程;

(2) System.Timer 用来实现基于服务的在发生任务;

(3) System.Windows.Forms.Timer 用来优化单线程处理环境;

3. System.Windows.Forms.Timer 计时器

(1) 该计时器对象通常和某个窗体相关,并且由该窗体配置。

(2) Winform应用程序在使用时对计时器进行了优化,在处理Form对象的线程时发生。

(3) Enabled 启用状态。

(4) Start, stop ;等同于设置Enabled属性。

(5) Tick事件,启动计时器并经过 Interval 毫秒数后 发生。

(6) 

4. 拖放Drop

(1) 初始化拖放,AllowDrop = true, 在控件的mouseDown事件中,new DataObject ,通过setData方法设置指定的文件和text 文件名称。使用doDrapDrop方法启用拖放文件。

(2) 接收拖放。

① AllowedEffect 获取拖动事件源允许那些拖放操作

② Data获取保存和事件相关的数据和数据格式的IdataObject接口

③ Effect  获取设置DragDropEffect Copy, Move 等拖动事件操作枚举。

④ KeyState Shift, Ctrl, Alt 键的状态

⑤ XY 鼠标的坐标

(3) 对于接收的文件设置为copy操作,获取里面的fileName,再设置到相册集合中。

posted @ 2019-09-21 11:42  德丽莎·阿波卡利斯  阅读(413)  评论(0编辑  收藏  举报