轉(zhuǎn)帖|其它|編輯:郝浩|2011-08-18 14:40:44.000|閱讀 925 次
概述:你可以從多方面自定義用戶界面來自定義用戶與Spread控件的交互方式。同時,你還可以自定義如何處理用戶交互方式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
你可以從多方面自定義用戶界面來自定義用戶與Spread控件的交互方式。同時,你還可以自定義如何處理用戶交互方式。
下面的列表總結(jié)了通過控件的數(shù)據(jù)區(qū)域,你可以授權(quán)用戶進行的操作(或者限制用戶進行的操作)。
允許的用戶功能 | 相關(guān)屬性或方法 |
拖拽單元格數(shù)據(jù) | FpSpread.AllowDragDrop 屬性 |
拖拽并填寫單元格數(shù)據(jù) | FpSpread.AllowDragFill 屬性 |
編輯單元格備注 | SheetView.AllowNoteEdit 屬性 |
輸入公式 | FpSpread.AllowUserFormulas屬性 |
篩選行 | Column.AllowAutoFilter 屬性 |
展開或者折疊層次樹 | Get, SetRowExpandable |
移動時鐘指針 | FarPoint.PluginCalendar.WinForms. AllowMoveHands 屬性 |
移動行和列 | FpSpread.AllowRowMove 屬性 和 FpSpread.AllowColumnMove 屬性 |
進行標準的檢索 | FpSpread.SearchWithDialog 方法) |
進行標準的檢索 | FpSpread.SearchWithDialogAdvanced方法。 |
重置行或列的大小 | 列的Resizable屬性 和行的Resizable屬性 |
在列標題中,通過點擊排序指示器進行篩選 | Column.AllowAutoSort 屬性 |
這里的列表總結(jié)了通過控件,你可以授權(quán)用戶進行的操作(或者限制用戶進行的操作)。
允許的用戶功能 | 相關(guān)屬性或方法 |
限制對行或者列的訪問 | SheetView.RestrictColumns 屬性
SheetView.RestrictRows 屬性 |
放大,或者縮放組件顯示 | FpSpread.AllowUserZoom 屬性 |
使用剪貼板快捷鍵 | FarPoint.Win.SuperEditBase. AllowClipboardKeys 屬性 |
編輯表單名稱 | FpSpread.TabStrip.Editable 屬性 |
默認情況下,用戶可以在表單中選擇一個單元格、一列單元格、一行單元格或者整個表單。你可以使用表單操作方式下,選擇策略和表單單元來決定選擇如何發(fā)生。下列的表格總結(jié)了可用于指定用戶選擇內(nèi)容的選項:
用戶可以選擇什么 | 何時為表單設(shè)置 |
單元格 | FpSpread.SelectionBlockOptions.Cells |
行 | FpSpread.SelectionBlockOptions.Rows |
列 | FpSpread.SelectionBlockOptions.Columns |
表單 | FpSpread.SelectionBlockOptions.Sheet |
組合 | FpSpread.SelectionBlockOptions.number。number 表示其他數(shù)字的組合(例如6 = 2 + 4,行和列) |
單元格,區(qū)域單元格或者多區(qū)域單元格 | OperationMode.Normal,根據(jù)SelectionPolicy屬性決定 |
只選擇行,不允許編輯 | OperationMode.SingleSelect |
只選擇行,允許編輯 | OperationMode.RowMode |
選擇多個連續(xù)的行,不允許編輯 | OperationMode.MultiSelect |
選擇多個非連續(xù)的行,不允許編輯 | OperationMode.ExtendedSelect |
注意FpSpread.SelectionBlockOptions設(shè)置在Spread控件層,而OperationMode位于表單層。
OperationMode 和 SelectionBlockOptions 屬性的設(shè)置將會影響用戶與表單交互,這意味著用戶可以選擇的內(nèi)容不一定是應(yīng)用程序可以選擇的。如果你想自定義用戶和應(yīng)用程序均可選擇的內(nèi)容,請設(shè)置SelectionUnit屬性。
你 還可以使用RestrictRows 和 RestrictColumns方法來限定可以被編輯的單元格。該限制限定了用戶不能跨越到下一行或者列輸入數(shù)據(jù)。如果你需要更多的信息,請參閱 SheetView類的SelectionPolicy屬性和 SelectionUnit屬性,以及FpSpread類的SelectionBlockOptions屬性。如果你需要更多的細節(jié),請參閱 OperationMode枚舉和SelectionBlockOptions 枚舉.
下面的示例代碼對表單進行了相關(guān)設(shè)置,允許用戶只選擇一個單元格或者選擇一定區(qū)域內(nèi)的單元格,包括多個區(qū)域的單元格。但是在本示例中用戶不能夠選擇列,行,或者整個表單。
// Set option so users can select only cells. |
fpSpread1.SelectionBlockOptions = FarPoint.Win.Spread.SelectionBlockOptions.Cells; |
// Set operation mode and let users select multiple blocks of cells. |
fpSpread1.Sheets[0].OperationMode = FarPoint.Win.Spread.OperationMode.Normal; |
fpSpread1.Sheets[0].SelectionPolicy = FarPoint.Win.Spread.Model.SelectionPolicy.MultiRange |
當用戶選定一個區(qū)域內(nèi)的單元格時,該區(qū)域的單元格可以擁有一個單獨的背景色和前景顏色,用來區(qū)分表單內(nèi)的其他單元格。你可以通過編程處理選擇的多個方面。在代碼中,你可以添加或者刪除選擇,并且你可以查找被選擇的單元。本主題總結(jié)了你可以在代碼中執(zhí)行的一些操作。
如果你需要選擇一個表單中所有的單元格,請使用該表單的RowCount 和 ColumnCount屬性,如下面的代碼所示:
FpSpread1.ActiveSheet.Models.Selection.SetSelection(0, 0, FpSpread1.ActiveSheet.RowCount, FpSpread1.ActiveSheet.ColumnCount) |
如果某一行或者某一列的所有單元格均被選擇(例如用戶點擊行標題或者列標題進行了一次選 擇),DefaultSheetSelectionModel類(以及IDisjointSelection接口)的 GetSelections方法將會返回-1給相應(yīng)的RowCount或者ColumnCount。
下面的示例代碼選擇了兩個區(qū)域的單元格。
// Set the sheet to allow multiple range selections. |
fpSpread1.Sheets[0].SelectionPolicy = FarPoint.Win.Spread.Model.SelectionPolicy.MultiRange; |
// Select cells C3 through D4. |
fpSpread1.Sheets[0].AddSelection(2, 2, 2, 2); |
// Select cells F6 through H8. |
fpSpread1.Sheets[0].AddSelection(5, 5, 3, 3); |
Spread控件為選擇提供了一個默認的外觀。你可以改變選擇的外觀,包括背景色、前景色和字體等。你還可以使用ShowRowSelector屬性指定一個行選擇器圖標。
默認情況下,Spread控件使用選擇renderer設(shè)置的外觀。當選擇了一些內(nèi)容時,renderer將會改變選擇的背景色。在不使用該 renderer的情況下,你可以為選擇的背景和文本指定特定的顏色。或者你還可以同時使用renderer的外觀以及你自定義的顏色。你還可以指定不使 用外觀對選擇進行高亮提示。
下圖依次展示了使用默認renderer樣式時被選擇單元格的外觀,使用設(shè)置顏色時被選擇單元格的外觀,和既使用renderer樣式,又使用自定義顏色時單元格的外觀。
如果沒有為選擇設(shè)置顏色,則默認顏色是Color.FromArgb(100, SystemColors.Highlight)。
被選擇單元格的繪制方式 取決于SheetView類中的不同屬性。
視圖屬性 | 描述 |
SelectionBackColor | 確定選擇的背景色 |
SelectionForeColor | 確定選擇的文本顏色 |
SelectionStyle | 確定選擇的樣式(使用自定義顏色,定制的renderer或者兩者均使用) |
SelectionFont | 確定指定文本的字體 |
當SelectionStyle是SelectionColors時,單元格使用SelectionBackColor和 SelectionForeColor設(shè)置代替單元格ForeColor和BackColor屬性設(shè)置進行繪制。當SelectionStyle是 SelectionRenderer時,單元格使用單元格的ForeColor 和 BackColor屬性的設(shè)置進行繪制。然后一個半透明的層繪制于單元格之上。該半透明層使用了系統(tǒng)的高亮顏色(Alpha值為100)實現(xiàn)。
Brush selectionBrush = new SolidBrush(Color.FromArgb(100, SystemColors.Highlight)); |
g.FillRectangle(selectionBrush, x, y, width, height); |
如果你需要更多的信息,請參閱SelectionStyles 枚舉和ISelectionRenderer接口。如果你需要關(guān)于選擇設(shè)置的更多信息,請參閱FpSpread類中的SelectionRenderer屬性和RetainSelectionBlock屬性.
下面的示例代碼使用renderer設(shè)置和顏色對選擇的高亮顯示進行了設(shè)置。
// Use the selection renderer and colors. |
fpSpread1.Sheets[0].SelectionStyle = FarPoint.Win.Spread.SelectionStyles.Both; |
// Set the background and text colors.fpSpread1.Sheets[0].SelectionBackColor = System.Drawing.Color.AliceBlue; |
fpSpread1.Sheets[0].SelectionForeColor = System.Drawing.Color.Navy; |
你可以把撤銷/恢復功能添加到你的應(yīng)用中,用來撤銷表單中被終端用戶執(zhí)行的各種操作。你可以使用UndoAction類和另外一些特定的類來滿足不同用戶的行為。另外還有一個管理類用來記錄最終用戶的可以撤銷和恢復的行為。
SpreadView類和FpSpread類擁有AllowUndo和UndoManager屬性,這些屬性用來打開和關(guān)閉撤銷/恢復特性,并返回UndoManager給相應(yīng)的SpreadView實例。每一個SpreadView擁有自己的UndoManager。
行為分配
UndoAction類是一個繼承自Action的抽象類,該類中添加了一些新方法:Undo 和 SaveUndoState。同時,它從Action類中繼承了PerformAction方法。
你可以在SaveUndoState中添加代碼用來存儲撤銷狀態(tài)的相關(guān)信息(類的成員變量)。你可以在PerformAction中添加代碼來執(zhí)行行為。你可以在Undo中添加代碼來恢復行為(使用變量中的撤銷狀態(tài)信息)。
每一個繼承自UndoAction的類被設(shè)計為僅執(zhí)行一個指定行為(例如,編輯一個單元格,調(diào)整列大小,移動一個區(qū)域等),并撤銷該行為。與執(zhí)行該 行為相關(guān)的信息需要被傳入該對象的構(gòu)造函數(shù)中,并且所有與撤銷該行為有關(guān)的信息需要被存儲在SaveUndoState的實現(xiàn)中。一旦 UndoAction對象被創(chuàng)建,指定行為的變量將被固定(根據(jù)傳入構(gòu)造函數(shù)中的變量)。例如,編輯sheet1中的A1單元格,并將值改變?yōu)? “test”,將列B調(diào)整為24像素,將區(qū)域C4:F6移動到A1:D:3等。并且只能使用指定的方法執(zhí)行指定的行為。
管理行為
UndoManager類管理撤銷棧和恢復棧,它保存著執(zhí)行的行為和恢復的記錄及其順序。UndoAction必須要傳入到UndoManager 中的PerformUndoAction方法,用來按順序執(zhí)行該行為,并被UndoManager撤銷。當這種情況發(fā)生時,UndoManager將 UndoAction壓進撤銷棧,并調(diào)用UndoAction中的PerformAction方法,然后CanUndo方法返回true(表明有行為需要 撤銷)。如果CanUndo返回的是false,這意味著撤銷棧是空的,并沒有行為準備好被撤銷。如果你的應(yīng)用擁有編輯菜單,你可以使用該方法使編輯菜單 中的撤銷菜單失效。
當一個行為準備撤銷時,你可以調(diào)用UndoManager中的Undo方法,Undo方法將撤銷棧中頂部的行為移動到恢復棧中,并且調(diào)用該行為的Undo方法,然后CanRedo方法返回true(表明有行為需要恢復)。
如果CanRedo返回false,這意味著恢復棧是空的,并且沒有行為準備好被恢復。如果你的應(yīng)用擁有編輯菜單,你可能希望使用該方法使編輯菜單中的恢復菜單失效。
當一個行為準備恢復時,你可以調(diào)用UndoManager中的Redo方法,Undo方法將恢復棧中最近執(zhí)行的行為移動到撤銷棧中,并且調(diào)用行為的Redo方法,然后CanUndo方法返回true(表明有行為需要恢復)。
當你調(diào)用UndoManager中的PerformAction方法時,你可以將一個UndoAction對象的序列傳給該方法,該方法將執(zhí)行序列 中的每一個行為,并記錄每一個行為以及行為被執(zhí)行的順序。然后你可以調(diào)用Undo方法撤銷序列中的一些行為,并且每一個方法可以使用Redo方法來恢復 (使用Undo方法可以再次撤銷)。
如果你調(diào)用PerformAction來執(zhí)行一個新的行為,在恢復棧中掛起的行為將會被清除,并且CanRedo方法返回false(這意味著一旦 你執(zhí)行了一個新的行為,你將不能夠恢復你之前撤銷的任何行為)。這就是為什么UndoManager中的PushUndo方法擁有一個標識,當行為被壓入 撤銷棧時來詢問恢復棧是否需要被清空。
一些UndoAction類將會替換動作映射中的行為對象,所以這些行為將會通過UndoManager按路徑發(fā)送并且成為可撤銷的。其他 UndoAction類將不會成為動作映射的一部分,而是用在SheetView或者SpreadView代碼中,使行為成為可撤銷的。
其他API補充
輸入映射包含新的條目將CTRL+Z 和 CTRL+Y組合鍵映射為相應(yīng)的UndoAction和RedoAction行為對象。這些行為調(diào)用UndoManager中相應(yīng)的Undo和Redo方法。
你可以自定義多種圖像,并通過用戶接口選擇自定義的圖像,應(yīng)用并替代默認圖像。可以自定義的圖像包括:
1. 級聯(lián)(展開和折疊)圖標
2. 篩選指示器
3. 排序指示器
4. 行選擇器
使用SpreadView類的GetImage 和 SetImage方法來設(shè)置用戶界面上這些部分的圖像。這些圖像的僅能在運行時設(shè)置,不支持在設(shè)計時設(shè)置。
如果你需要關(guān)于這些方法的一個示例,請參閱下述方法:
1. CollapseImage
2. CollapseImageDisabled
3. ExpandImage
4. ExpandImageDisabled
5. FilterActive
6. FilterActiveDisabled
7. FilterInactive
8. FilterInactiveDisabled
9. RowSelectorImage
10. RowSelectorImageDisabled
11. SortAscendingImage
12. SortAscendingImageDisabled
13. SortDescendingImage
14. SortDescendingImageDisabled
15. SortUnsortedImage
16. SortUnsortedImageDisabled
如果你需要將圖像重新設(shè)置為Spread默認圖像,你僅需要將SetImage方法中的圖像值設(shè)置為空。
另外一種為篩選指示器和排序指示器設(shè)置圖像的方法是重寫CellTypeColumnHeaderRenderer 類中的 PaintFilterIndicator 和 PaintSortIndicator 方法。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園