WinForm的延時(shí)加載控件概述
本文主要針對(duì)WinForm的延遲加載在常用控件的實(shí)現(xiàn)做簡(jiǎn)單的描述。在進(jìn)行C#項(xiàng)目開(kāi)發(fā)的時(shí)候具有一定的實(shí)用性。具體如下:
一、在界面第一次顯示時(shí)加載。最簡(jiǎn)單的延遲加載可以通過(guò)控件第一次顯示時(shí)加載數(shù)據(jù),例如你有很多的頁(yè)簽,只有用戶切換到這個(gè)頁(yè)簽時(shí),才會(huì)加載數(shù)據(jù)。
在.NET的Control中提供SetVisibleCore虛方法,當(dāng)檢測(cè)value是true且第一次調(diào)用此方法時(shí),調(diào)用延遲加載。但是并不推薦這個(gè)方法,因?yàn)槟阌懈玫牡胤健?br />
①.如果你的控件繼承自Form或者UserControl,建議重載OnLoad;
②.如果繼承自Control,可以重載OnCreateControl。
下面是延遲加載數(shù)據(jù)的例子:
public class MyTabPage : TabPage { PRotected override void OnCreateControl() { base.OnCreateControl(); string oldText = this.Text; this.Text = "Loading.."; //TODO:在這里調(diào)用加載數(shù)據(jù)的方法 this.Text = oldText; } }
二、樹(shù)控件在第一次展開(kāi)時(shí)加載。TreeView因?yàn)樗械墓?jié)點(diǎn)并不是繼承自Control,所以不能使用上面的方式,但是TreeView提供了OnBeforeExpand虛方法,最簡(jiǎn)單的辦法是在你打算實(shí)現(xiàn)延遲加載的節(jié)點(diǎn)加入一個(gè)是否已經(jīng)加載的標(biāo)記,當(dāng)?shù)谝淮握归_(kāi)時(shí),檢測(cè)這個(gè)標(biāo)記。 必須記住你的延遲加載節(jié)點(diǎn)在根位置是不能收到這個(gè)事件的。
三、在表格中延遲加載。在Windows程序中,有的使用分頁(yè)的方式實(shí)現(xiàn)延遲加載,但這種方式的用戶體驗(yàn)非常的糟糕。如果你希望仍然使用滾動(dòng)條的話,可以自己實(shí)現(xiàn)IBindList接口,內(nèi)部持有一個(gè)數(shù)據(jù)的ID列表,在表格詢問(wèn)數(shù)據(jù)時(shí),才到數(shù)據(jù)庫(kù)加載數(shù)據(jù),通常的表格控件都能夠很好的工作。 但這里有個(gè)應(yīng)該注意的地方,例如用戶按下PageDown時(shí),表格控件連續(xù)的調(diào)用獲取數(shù)據(jù)方法,如果每次請(qǐng)求都去調(diào)用數(shù)據(jù)庫(kù),將會(huì)很低的性能,應(yīng)該讓你的程序“預(yù)知”到可能要讀下50筆數(shù)據(jù)了,所以一次性多讀50條就可以。
這種方法遇到表格排序的時(shí)候就沒(méi)有辦法了。
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助
- c#異步操作后臺(tái)運(yùn)行(backgroundworker類(lèi))示例
- C#在后臺(tái)運(yùn)行操作(BackgroundWorker用法)示例分享
- C# BackgroundWorker組件學(xué)習(xí)入門(mén)介紹
- 簡(jiǎn)單使用BackgroundWorker創(chuàng)建多個(gè)線程的教程
- asp.net BackgroundWorker之在后臺(tái)下載文件
- C#實(shí)現(xiàn)winform用子窗體刷新父窗體及子窗體改變父窗體控件值的方法
- C# WinForm程序處理后臺(tái)繁忙導(dǎo)致前臺(tái)控件假死現(xiàn)象解決方法
- C#的winform控件命名規(guī)范
- C#之WinForm跨線程訪問(wèn)控件實(shí)例
- WinForm中BackgroundWorker控件用法簡(jiǎn)單實(shí)例
相關(guān)文章
c# 對(duì)cookies(增、刪、改、查)的操作方法
以前覺(jué)得cookies操作無(wú)非就那么幾種,但是“杯具事件”還是很多的,下面分享一下對(duì)cookies的簡(jiǎn)單操作2013-04-04詳解WPF如何動(dòng)態(tài)生成DataGrid的行和列
在日常開(kāi)發(fā)中,DataGrid作為二維表格,非常適合數(shù)據(jù)的展示和統(tǒng)計(jì),本文以一些簡(jiǎn)單的小例子,簡(jiǎn)述在WPF開(kāi)發(fā)中,如何動(dòng)態(tài)生成DataGrid的行和列,需要的可以了解下2024-02-02C#實(shí)現(xiàn)向數(shù)組指定索引位置插入新的元素值
這篇文章給大家介紹了利用C#實(shí)現(xiàn)向數(shù)組指定索引位置插入新的元素值,首先需要定義一個(gè)一維數(shù)組,然后修改數(shù)組的長(zhǎng)度,從而在其中增加一個(gè)元素,需要的朋友可以參考下2024-02-02c#動(dòng)態(tài)調(diào)用Webservice的兩種方法實(shí)例
這篇文章介紹了c#動(dòng)態(tài)調(diào)用Webservice的兩種方法實(shí)例,有需要的朋友可以參考一下2013-08-08基于C#的socket編程的TCP異步的實(shí)現(xiàn)代碼
本篇文章主要介紹了基于C#的socket編程的TCP異步的實(shí)現(xiàn)代碼,詳解的講訴了TCP通信異步的實(shí)現(xiàn),有興趣的可以了解一下。2016-11-11C#面向?qū)ο笤O(shè)計(jì)原則之接口隔離原則
這篇文章介紹了C#面向?qū)ο笤O(shè)計(jì)原則之接口隔離原則,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03c#分頁(yè)顯示服務(wù)器上指定目錄下的所有圖片示例
這篇文章主要介紹了c#分頁(yè)顯示服務(wù)器上指定目錄下的所有圖片示例,需要的朋友可以參考下2014-05-05DevExpress實(shí)現(xiàn)為T(mén)extEdit設(shè)置水印文字的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)為T(mén)extEdit設(shè)置水印文字的方法,對(duì)C#程序設(shè)計(jì)人員來(lái)說(shuō)是一個(gè)很實(shí)用的技巧,需要的朋友可以參考下2014-08-08