C# Winform實(shí)現(xiàn)自定義分頁控件
前言
其實(shí),也用過一些第三方的分頁控件;都是感覺很奇怪,要么就是界面不夠美觀大方,要么就是使用起來感覺很麻煩。想想覺得這玩意應(yīng)該挺簡單的啊,所以就決定還是寫一個(gè)適合自己的吧。
一向簡潔的我,終究只會(huì)造就一個(gè)簡單的結(jié)果。所以注定這個(gè)控件足夠簡單。
實(shí)現(xiàn)方法
1.新建一個(gè)用戶控件,在上面拖幾個(gè)Label和TextBox控件,效果如下:

2.在代碼頁面分別定義以下屬性
public Action<int> GetPageData { get; set; }
private Color _FontColor;
[Browsable(true), Description("設(shè)置字體顏色")]
public Color FontColor
{
get => _FontColor; set
{
lb_down.ForeColor = lb_end.ForeColor = lb_go.ForeColor = lb_home.ForeColor = lb_page.ForeColor = lb_up.ForeColor = value;
}
}
private int _DataCount;
[Description("數(shù)據(jù)總數(shù)量")]
public int DataCount
{
get => _DataCount;
set
{
_DataCount = value;
lb_page.Text = PageIndex + "/" + PageTotal;
}
}
private int _PageSize;
[Description("頁顯示數(shù)量")]
public int PageSize
{
get
{
return _PageSize <= 0 ? 50 : _PageSize;
}
set
{
_PageSize = value;
lb_page.Text = PageIndex + "/" + PageTotal;
}
}
private int _PageTotal;
[Description("總頁數(shù)")]
public int PageTotal
{
get
{
if (DataCount % PageSize == 0)
{
_PageTotal = DataCount / PageSize;
}
else
{
_PageTotal = DataCount / PageSize + 1;
}
return _PageTotal <= 0 ? 1 : _PageTotal;
}
}
??????? private int _PageIndex;
[Description("當(dāng)前頁數(shù)")]
public int PageIndex
{
get
{
return _PageIndex <= 0 ? 1 : _PageIndex;
}
private set
{
_PageIndex = value;
if (_PageIndex <= 0)
{
_PageIndex = 1;
}
if (_PageIndex > PageTotal)
{
_PageIndex = PageTotal;
}
if (GetPageData != null)
{
GetPageData(_PageIndex);
lb_page.Text = _PageIndex + "/" + PageTotal;
}
}
}3.針對每個(gè)Label對應(yīng)的屬性做點(diǎn)擊處理
private void lb_home_Click(object sender, EventArgs e)
{
PageIndex = 1;
}
private void lb_up_Click(object sender, EventArgs e)
{
PageIndex--;
}
private void lb_down_Click(object sender, EventArgs e)
{
PageIndex++;
}
private void lb_end_Click(object sender, EventArgs e)
{
PageIndex = PageTotal;
}
private void lb_go_Click(object sender, EventArgs e)
{
if (int.TryParse(txt_num.Text, out int result))
{
PageIndex = result;
}
}
??????? private void txt_num_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(e.KeyChar == '\b' || (e.KeyChar >= '0' && e.KeyChar <= '9')))
{
e.Handled = true;
}
}4.好了,沒了,控件結(jié)束了,簡單吧。
5.再來看下使用方式,首先就是在獲取到數(shù)據(jù)之后,把DataCount屬性賦值數(shù)據(jù)的總數(shù)量
private async Task GetPageData()
{
//...獲取服務(wù)端數(shù)據(jù)的代碼
BindList.SetData(result.Data);
pageEx1.DataCount = result.DataCount;
}6.然后就是做換頁的處理了,也就是使用GetPageData獲取到頁碼之后,重新進(jìn)行數(shù)據(jù)獲取即可
pageEx1.GetPageData = async s =>
{
PageIndex = s;
await GetPageData();
};7.控件簡單,功能滿足,使用方便。這不是理想中的控件么?
實(shí)現(xiàn)效果

到此這篇關(guān)于C# Winform實(shí)現(xiàn)自定義分頁控件的文章就介紹到這了,更多相關(guān)C# Winform分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# 中的IComparable和IComparer的使用及區(qū)別
這篇文章主要介紹了C# 中的IComparable和IComparer的使用及區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
基于WebClient實(shí)現(xiàn)Http協(xié)議的Post與Get對網(wǎng)站進(jìn)行模擬登陸和瀏覽實(shí)例
這篇文章主要介紹了基于WebClient實(shí)現(xiàn)Http協(xié)議的Post與Get對網(wǎng)站進(jìn)行模擬登陸和瀏覽的方法,以實(shí)例形式詳細(xì)分析了WebClient模擬POST與GET登陸與瀏覽的過程,對于C#項(xiàng)目開發(fā)來說具有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11

