Làm thế nào để truy nhập ImageList từ TreeView và điều khiển dạng xem Listvới mã Visual FoxPro


Tóm tắt


Bài viết này minh họa cách các hình ảnh của điều khiển Imagelist có thể được truy nhập bởi TreeViewListView điều khiển lập trình.

Thông tin Bổ sung


Phần này có hai ví dụ về mã. Ví dụ đầu tiên minh họa cách mà hình ảnhImagelist có thể được gán cho điều khiển TreeView . Trong ví dụ này, nếu các lá được thêm vào một nút của TreeView, thì biểu tượng thư mục đóng được gán cho nút. Nếu nút có chứa các lá được bung rộng, biểu tượng của nó sẽ thay đổi thành một thư mục mở và sau khi thu gọn, nó sẽ thay đổi về thư mục đóng. ví dụ thứ hai cho biết cách gán các hình ảnh Imagelist cho điều khiển dạng xem List. Trong ví dụ này, khi một mục danh sách được tạo ra, nó được gán một biểu tượng lớn. Các biểu tượng mục sau đó có thể được chuyển đổi giữa một biểu tượng nhỏ và một biểu tượng lớn. Đối với từng kiểu các điều khiển Imagelist riêng biệt lớn và nhỏ, được sử dụng; Nếu không, cả hai loại biểu tượng xuất hiện giống như cùng kích cỡ.Lưu ý Các thư mục có chứa biểu tượng và tệp bitmap đã thay đổi trong Visual FoxPro 6,0. Vị trí mới cho các biểu tượng là:
  home(4)+"icons\office\<filename>" 
Vị trí mới cho bitmap là:
   home(4)+"bitmaps\outline\<Filename>" 
Sau đây là mã mẫu cho ví dụ đầu tiên để gán hình ảnh Imagelistthành TreeView:
   LVForm=CREATEOBJECT("MyLVForm")   LVForm.SHOW   READ EVENT   *** Define the Form to hold and display all the controls ***   DEFINE CLASS MyLVForm AS FORM      LEFT=23      HEIGHT=250      WIDTH=425      mndx=0      *** Add the Control Objects to the Form ***      ADD OBJECT ImageList1 AS MyImageList      ADD OBJECT TreeView1  AS MyTreeView      ADD OBJECT AddNode    AS ANCButton      ADD OBJECT AddLeaf    AS ALCButton      ADD OBJECT mDelete    AS DCButton      ADD OBJECT mExit      AS ECButton   ENDDEFINE   *** Define ImageList to Hold Images for the TreeView Control ***   DEFINE CLASS MyImageList AS OLECONTROL      OLECLASS="COMCTL.ImageListCtrl.1"      TOP=36      LEFT=420      PROCEDURE INIT         THIS.OBJECT.ListImages.ADD(1,,LOADPICTURE(home()+;               "samples\graphics\bmps\outline\closed.bmp"))         THIS.OBJECT.ListImages.ADD(2,,LOADPICTURE(home()+;               "samples\graphics\bmps\outline\open.bmp"))      ENDPROC   ENDDEFINE   *** Define the TreeView Control ***   DEFINE CLASS MyTreeView AS OLECONTROL      OLECLASS="COMCTL.TreeCtrl.1"      TOP=24      HEIGHT=169      WIDTH=300      LEFT=20      .OBJECT.LineStyle=1      VISIBLE=.T.      *** Set ImageList property to ImageList1 Images ***      PROCEDURE INIT         THIS.OBJECT.ImageList=THISFORM.ImageList1.OBJECT      ENDPROC      PROCEDURE nodeclick         LPARAMETERS NODE      ENDPROC      *** Assign Image for Collapsed object ***      PROCEDURE collapse         LPARAMETERS NODE         IF !EMPTY(NODE.IMAGE)            NODE.IMAGE=1         ENDIF      ENDPROC      *** Assign Image for Expanded object ***      PROCEDURE expand         LPARAMETERS NODE         IF !EMPTY(NODE.IMAGE)            NODE.IMAGE=2         ENDIF      ENDPROC   ENDDEFINE   *** Define the Add Node Command Button ***   DEFINE CLASS ANCButton AS COMMANDBUTTON      TOP=70      LEFT=350      HEIGHT=18      WIDTH=59      CAPTION="Add Node"      VISIBLE=.T.      PROCEDURE CLICK         mndxtxt=""         mndxtxt=ALLTRIM(STR(THISFORM.mndx))         THISFORM.TreeView1.nodes.ADD(,2,mndxtxt+;          "_",REPLICATE(mndxtxt,5),,0)         THISFORM.mndx=THISFORM.mndx+1         THISFORM.TreeView1.ENABLED=.T.         THISFORM.AddLeaf.ENABLED=.T.         THISFORM.mDelete.ENABLED=.T.      ENDPROC   ENDDEFINE   *** Define the Add Leaf Command Button ***   DEFINE CLASS ALCButton AS COMMANDBUTTON      TOP=100      LEFT=350      HEIGHT=18      WIDTH=59      CAPTION="Add Leaf"      VISIBLE=.T.      ENABLED=.F.      PROCEDURE CLICK         so=THISFORM.TreeView1.SELECTEDITEM         IF !ISNULL(so)            THISFORM.TreeView1.nodes.ADD(so.INDEX,;                      4,,"Sub"+ALLTRIM(so.TEXT),,0)            so.IMAGE=1         ENDIF         THISFORM.REFRESH      ENDPROC   ENDDEFINE   *** Define the Delete Command Button  ***   DEFINE CLASS DCButton AS COMMANDBUTTON      TOP=150      LEFT=350      HEIGHT=18      WIDTH=59      CAPTION="Delete"      VISIBLE=.T.      ENABLED=.F.      PROCEDURE CLICK         o=THISFORM.TreeView1.SELECTEDITEM         IF !ISNULL(o)            IF !ISNULL(o.PARENT)               IF o.PARENT.children<2                  o.PARENT.IMAGE=0               ENDIF            ENDIF            THISFORM.TreeView1.nodes.REMOVE(o.INDEX)         ENDIF      ENDPROC   ENDDEFINE   *** Define the Exit Command Button ***   DEFINE CLASS ECButton AS COMMANDBUTTON      TOP=215      LEFT=180      WIDTH=70      HEIGHT=25      CAPTION="Exit"      VISIBLE=.T.      PROCEDURE CLICK         THISFORM.RELEASE         CLEAR EVENTS      ENDPROC   ENDDEFINE   Following is the sample code for the Second example:   LVForm=CREATEOBJECT("MYLVForm")   LVForm.SHOW   READ EVENT   *** Define the Form that will hold and display the controls ***   DEFINE CLASS MyLVForm AS FORM      LEFT=23      HEIGHT=300      WIDTH=478      lvitm=0      lvitxt=''      ADD OBJECT ImageList2 AS MyImageList1      ADD OBJECT ImageList3 AS MyImageList2      ADD OBJECT ListView1  AS MyListView      ADD OBJECT ADDITEM    AS AICButton      ADD OBJECT LSIOption  AS LSIOGroup      ADD OBJECT mDelete    AS DButton      ADD OBJECT MExit      AS ExButton   ENDDEFINE   *** Need separate ImageList Controls for Large and Small Icons of   *** ListView otherwise both type of icons will appear as same size   ***   *** Define ImageList to Hold Large Icon Image for the ListView   *** Control   DEFINE CLASS MyImageList1 AS OLECONTROL      OLECLASS="COMCTL.ImageListCtrl.1"      TOP=204      LEFT=420      PROCEDURE INIT         THIS.OBJECT.ListImages.ADD(1,,LOADPICTURE(home(4)+;             "icons\office\folder01.ico"))      ENDPROC   ENDDEFINE   *** Define ImageList to Hold Small Icon Image for the   *** ListView Control   DEFINE CLASS MyImageList2 AS OLECONTROL      OLECLASS="COMCTL.ImageListCtrl.1"      TOP=264      LEFT=420      PROCEDURE INIT         THIS.OBJECT.ListImages.ADD(1,,LOADPICTURE(home(4)+;               "bitmaps\outline\closed.bmp"))      ENDPROC   ENDDEFINE   *** Define the ListView Class ***   DEFINE CLASS MyListView AS OLECONTROL      OLECLASS="COMCTL.ListViewCtrl.1"      TOP=24      HEIGHT=169      WIDTH=275      LEFT=36      .OBJECT.LineStyle=1      VISIBLE=.T.   *** Set the ListView Icons property to Images in ImageList1 ***   *** and SmallIcons property to Images in ImageList2 ***      PROCEDURE INIT         THIS.OBJECT.icons=THISFORM.ImageList2.OBJECT         THIS.OBJECT.smallicons=THISFORM.ImageList3.OBJECT      ENDPROC   ENDDEFINE   *** Define the Add Item Button Class ***   DEFINE CLASS AICButton AS COMMANDBUTTON      TOP=50      LEFT=360      HEIGHT=18      WIDTH=59      CAPTION="Add Item"      VISIBLE=.T.      PROCEDURE CLICK         THISFORM.lvitm=THISFORM.lvitm+1         THISFORM.lvitxt=ALLTRIM(STR(THISFORM.lvitm))         x=THISFORM.ListView1.OBJECT.listitems.ADD;            (,THISFORM.lvitxt+"_","Item"+THISFORM.lvitxt,)         x.smallicon=1         x.ICON=1         THISFORM.LSIOption.ENABLED=.T.         THISFORM.mDelete.ENABLED=.T.         THISFORM.REFRESH      ENDPROC   ENDDEFINE   *** Define the Large/Small Icon Option Group ***   DEFINE CLASS LSIOGroup AS OPTIONGROUP      BUTTONCOUNT = 2      VALUE = 1      HEIGHT = 39      LEFT = 340      TOP = 80      WIDTH = 96      Option1.CAPTION = "Large Icon"      Option1.LEFT = 11      Option1.TOP = 5      Option1.WIDTH = 82      Option1.NAME = "Option1"      Option2.CAPTION = "Small Icon"      Option2.LEFT = 11      Option2.TOP = 20      Option2.WIDTH = 82      Option2.NAME = "Option2"      PROCEDURE INTERACTIVECHANGE         DO CASE         CASE THIS.VALUE=1            THISFORM.ListView1.OBJECT.VIEW=0         CASE THIS.VALUE=2            THISFORM.ListView1.OBJECT.VIEW=1         ENDCASE         THISFORM.REFRESH      ENDPROC   ENDDEFINE   *** Define the Delete Button Class ***   DEFINE CLASS DButton AS COMMANDBUTTON      TOP=156      LEFT=360      HEIGHT=18      WIDTH=59      CAPTION="Delete"      VISIBLE=.T.      ENABLED=.F.      PROCEDURE CLICK         o=THISFORM.ListView1.SELECTEDITEM         IF !ISNULL(o)            THISFORM.ListView1.listitems.REMOVE(o.INDEX)         ENDIF      ENDPROC   ENDDEFINE   *** Define the Exit Button Class   DEFINE CLASS ExButton AS COMMANDBUTTON      TOP=226      LEFT=192      WIDTH=192      HEIGHT=18      WIDTH=59      CAPTION="Exit"      VISIBLE=.T.      PROCEDURE CLICK         THISFORM.RELEASE         CLEAR EVENTS      ENDPROC   ENDDEFINE

Tham khảo


Để biết thêm thông tin, hãy bấm vào các số bài viết sau đây để xem các bài viết trong cơ sở kiến thức Microsoft:
166937 Lập trình lập trình thêm hình ảnh vào điều khiển ImageList
160921 Lỗi bằng cách dùng các điều khiển OLE
163803 Không thể đặt thuộc tính ImageList của TreeView trực quan