• <menu id="w2i4a"></menu>
  • logo DevExpress WinForms使用教程

    文檔首頁(yè)>>DevExpress WinForms使用教程>>DevExpress Winforms使用技巧教程:如何創(chuàng)建自定義DevExpress報(bào)表控件(下)

    DevExpress Winforms使用技巧教程:如何創(chuàng)建自定義DevExpress報(bào)表控件(下)


    下載DevExpress v20.1完整版    DevExpress v20.1漢化資源獲取

    DevExpress Winforms Controls 內(nèi)置140多個(gè)UI控件和庫(kù),完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序。想要體驗(yàn)?點(diǎn)擊下載>>

    本文記錄如何構(gòu)建自定義的DevExpress Report控件(Swiss QR-Bill報(bào)表組件),以及如何解決開發(fā)過(guò)程中遇到的問(wèn)題,希望這些信息對(duì)創(chuàng)建自定義DevExpress Report控件的用戶有價(jià)值。

    為幫助消除報(bào)表控件開發(fā)過(guò)程中的神秘性,本文介紹如何創(chuàng)建設(shè)計(jì)時(shí)設(shè)置、序列化設(shè)計(jì)器組件和相關(guān)的“bricks”,以及如何渲染和打印組件。第一部分包含有關(guān)Swiss QR Bill控件的一般信息,并描述控件本身的要求;第二部分詳細(xì)介紹了組件的實(shí)現(xiàn)。

    "Brick"實(shí)現(xiàn)

    一般概念

    VisualBrick是用于顯示數(shù)據(jù)的基本元素,VisualBrick元素由一個(gè)數(shù)據(jù)模型 (the brick)及其表示形式(the exporter)組成。

    Exporter渲染并將其導(dǎo)出為不同的格式,使用"brick"設(shè)置的BrickExporter(Type)屬性指定"brick"。在本文中,我們使用PanelBrickExporter和VisualBrickExporter后代作為exporter。Draw方法被重寫以實(shí)現(xiàn)渲染,Brick字段用于獲取對(duì)"brick"的訪問(wèn)。

    若要?jiǎng)?chuàng)建一個(gè)"brick",請(qǐng)重寫CreateBrick(VisualBrick[] childrenBricks)方法并返回"brick"實(shí)例。PutStateToBrick(VisualBrick brick, PrintingSystemBase ps)方法將控件屬性映射到"brick"數(shù)據(jù),請(qǐng)查看以下文件中的代碼以獲取更多信息:XRSwissQRBill.cs。

    基本類的選擇

    Swiss QR Control布局是一個(gè)中間帶有文本元素和條形碼的區(qū)域,基本類的主要選擇是面板、表格和文本"brick"。panel "brick"可以通過(guò)其簡(jiǎn)單的結(jié)果將組件布置在內(nèi)部,因此SwissQRBillBrick基于PanelBrick類,exporter則基于PanelBrickExporter類。

    實(shí)現(xiàn)Service Brick

    該規(guī)范指出,付款部分可能包含標(biāo)有角的空白區(qū)域。為了滿足此要求,我們創(chuàng)建了一個(gè)額外的CornerRectangleBrick和其exporter - CornerRectangleBrickExporter - 它負(fù)責(zé)繪制角,"brick" 包括BrickType屬性 - 可以重寫該屬性以實(shí)現(xiàn)正確的反序列化。

    布局實(shí)現(xiàn)

    選擇PanelBrick作為基本類,您可以使用Bricks屬性訪問(wèn)其內(nèi)部的"bricks",相對(duì)于面板本身的坐標(biāo) - 相對(duì)于點(diǎn)(0,0)設(shè)置內(nèi)部“brick”坐標(biāo)。

    將組件分為收貨和付款部分區(qū)域。

    渲染功能返回其他"bricks" (或 "brick" 組合),這些 "brick" 隨后添加到Bricks集合中。

    • CreateReceiptPart()
    • CreatePaymentPart()

    現(xiàn)在,我們必須渲染子區(qū)域。

    1. CreateReceiptTitle()
    2. CreateReceiptInformation()
    3. CreateReceiptAmount()
    4. CreateReceiptAcceptancePoint()
    5. CreatePaymentTitle()
    6. CreatePaymentSwissQRCode()
    7. CreatePaymentAmount()
    8. CreatePaymentInformation()
    9. CreatePaymentFurtherInformation()

    請(qǐng)查看以下文件中的代碼以獲取更多信息:SwissQRBillBrick.cs.

    Exporter實(shí)現(xiàn)

    exporter在完成 "brick"上繪制裝飾物,這使得可以在預(yù)覽或?qū)С龅腜DF文件中更改外觀。在本文中exporter繪制穿孔線和其他文本, brick的SeparatorKind選項(xiàng)確定要繪制的內(nèi)容,用于預(yù)覽和在PDF導(dǎo)出過(guò)程中使用相同的繪制"brick"的機(jī)制,主要區(qū)別在于傳遞給exporter的Draw方法的IGraphics是具有IPdfGraphics接口的對(duì)象。

    序列化

    一般概念

    控件和"brick"都需要序列化,"brick"僅使用xml序列化,并且控件實(shí)現(xiàn)xml序列化并支持CodeDom序列化 - 這對(duì)于Visual Studio Designer是必需的。

    控件序列化

    XtraSerializableProperty屬性負(fù)責(zé)序列化xml中的屬性,僅指定屬性來(lái)序列化返回簡(jiǎn)單類型的屬性,復(fù)雜類型需要具有XtraSerializationVisibility參數(shù)類型的構(gòu)造函數(shù)(最常用的值是Hidden,Collection,Reference,Content)。

    DesignerSerializationVisibility屬性負(fù)責(zé)Visual Studio Designer中的CodeDOM序列化,它只有相關(guān)枚舉的三個(gè)變體 - 隱藏、可見(jiàn)和內(nèi)容,使用可見(jiàn)屬性值標(biāo)記集合或引用,DefaultValue屬性確定屬性值是否包含在序列化中。

    Brick序列化

    僅XML序列化是必需的,為了正確進(jìn)行反序列化,請(qǐng)將 "brick’s" 文本類型(在Brick級(jí)別上覆蓋的BrickType屬性)映射為真實(shí)類型。BrickFactory.BrickResolve方法用于映射,為實(shí)現(xiàn)BrickResolve方法請(qǐng)查看以下文件中的代碼:CustomControl.cs

    組件使用

    要在Visual Studio Designer中使用組件,請(qǐng)將其添加到Visual Studio Toolbox中。

    要在最終用戶設(shè)計(jì)器中使用該組件,請(qǐng)使用傳遞的XRDesignMdiController作為參數(shù)來(lái)調(diào)用AddSwissQRControlToToolBox方法。 請(qǐng)查看以下文件中的代碼以獲取更多信息:CustomControlToolBoxRegistrator.cs


    DevExpress技術(shù)交流群2:775869749      歡迎一起進(jìn)群討論

    獲取第一手DevExpress咨詢,盡在DevExpress中文網(wǎng)!

    慧都高端UI界面開發(fā)
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();