找来找去没找个轻量级的分页控件,只好自己写一个凑合着先用。先看效果图:
控件的功能很简单,点击控件的几个按钮、捕获 Item_Click 事件、触发 PageIndexChanging 事件。
因此、必须要向此控件注册 PageIndexChanging 事件,在这个事件中,PageIndexChangingEventArgs 会传递新选择页的索引,根据这个索引值(NewPageIndex)就可以从数据库查询对应页的数据。
先初始化控件:
InitializingComponent
public
void
InitializingComponent()
{
firtItem = new ToolStripButton();
firtItem.Image = CreateBitmap(FirstImage);
firtItem.Name = " PageNavigatorMoveFirstItem " ;
firtItem.ToolTipText = FirstTipText;
previousItem = new ToolStripButton();
previousItem.Image = CreateBitmap(PreviousImage);
previousItem.Name = " PageNavigatorMovePreviousItem " ;
previousItem.ToolTipText = PreviousTipText;
nextItem = new ToolStripButton();
nextItem.Image = CreateBitmap(NextImage);
nextItem.Name = " PageNavigatorMoveNextItem " ;
nextItem.ToolTipText = NextTipText;
lastItem = new ToolStripButton();
lastItem.Image = CreateBitmap(LastImage);
lastItem.Name = " PageNavigatorMoveLastItem " ;
lastItem.ToolTipText = LastTipText;
textItem = new ToolStripTextBox();
textItem.Name = " PageNavigatorTextItem " ;
textItem.ToolTipText = ToolTipText;
textItem.Size = new Size( 45 , 20 );
labelItemPrefix = new ToolStripLabel();
labelItemPrefix.Text = " / " ;
labelItemPrefix.Name = " PageNavigatorLabelPrefix " ;
labelItem = new ToolStripLabel();
labelItem.Text = this .pageIndex.ToString();
labelItem.Name = " PageNavigatorLabelItem " ;
labelItem.ToolTipText = LabelTipText;
labelItemEnd = new ToolStripLabel();
labelItemEnd.Text = " 页 " ;
labelItemEnd.Name = " PageNavigatorLabelEnd " ;
queryItem = new ToolStripButton();
queryItem.Image = CreateBitmap(QueryImage);
queryItem.Name = " PageNavigatorQueryItem " ;
queryItem.ToolTipText = QueryTipText;
this .Items.AddRange( new ToolStripItem[] { firtItem, previousItem, nextItem, lastItem, textItem, labelItemPrefix, labelItem, labelItemEnd, queryItem });
}
{
firtItem = new ToolStripButton();
firtItem.Image = CreateBitmap(FirstImage);
firtItem.Name = " PageNavigatorMoveFirstItem " ;
firtItem.ToolTipText = FirstTipText;
previousItem = new ToolStripButton();
previousItem.Image = CreateBitmap(PreviousImage);
previousItem.Name = " PageNavigatorMovePreviousItem " ;
previousItem.ToolTipText = PreviousTipText;
nextItem = new ToolStripButton();
nextItem.Image = CreateBitmap(NextImage);
nextItem.Name = " PageNavigatorMoveNextItem " ;
nextItem.ToolTipText = NextTipText;
lastItem = new ToolStripButton();
lastItem.Image = CreateBitmap(LastImage);
lastItem.Name = " PageNavigatorMoveLastItem " ;
lastItem.ToolTipText = LastTipText;
textItem = new ToolStripTextBox();
textItem.Name = " PageNavigatorTextItem " ;
textItem.ToolTipText = ToolTipText;
textItem.Size = new Size( 45 , 20 );
labelItemPrefix = new ToolStripLabel();
labelItemPrefix.Text = " / " ;
labelItemPrefix.Name = " PageNavigatorLabelPrefix " ;
labelItem = new ToolStripLabel();
labelItem.Text = this .pageIndex.ToString();
labelItem.Name = " PageNavigatorLabelItem " ;
labelItem.ToolTipText = LabelTipText;
labelItemEnd = new ToolStripLabel();
labelItemEnd.Text = " 页 " ;
labelItemEnd.Name = " PageNavigatorLabelEnd " ;
queryItem = new ToolStripButton();
queryItem.Image = CreateBitmap(QueryImage);
queryItem.Name = " PageNavigatorQueryItem " ;
queryItem.ToolTipText = QueryTipText;
this .Items.AddRange( new ToolStripItem[] { firtItem, previousItem, nextItem, lastItem, textItem, labelItemPrefix, labelItem, labelItemEnd, queryItem });
}
再看 Item_Click 事件:
OnItemClicked
protected
override
void
OnItemClicked(ToolStripItemClickedEventArgs e)
{
base .OnItemClicked(e);
this .currentItem = e.ClickedItem;
switch (e.ClickedItem.Name)
{
case " PageNavigatorMoveFirstItem " :
if (PageIndex > 0 )
{
pageIndex = 0 ;
}
break ;
case " PageNavigatorMovePreviousItem " :
if (PageIndex > 0 )
{ pageIndex -- ; }
break ;
case " PageNavigatorMoveLastItem " :
if (PageIndex < PageCount)
{
pageIndex = PageCount - 1 ;
}
break ;
case " PageNavigatorQueryItem " :
ToolStripTextBox txt = this .Items[ " PageNavigatorTextItem " ] as ToolStripTextBox;
if (txt != null )
{
if ( ! ValidateInput(txt.Text.Trim()))
{
MessageBox.Show( " 只能输入大于零的数字 " );
return ;
}
int index = 0 ;
int .TryParse(txt.Text, out index);
index -- ;
if ( 0 <= index && index < PageCount)
{
pageIndex = index;
}
else
{ MessageBox.Show( " 数字超出范围 " ); }
}
break ;
default :
if (PageIndex < PageCount)
{
pageIndex ++ ;
}
break ;
}
EnsureToolStripItemState(pageIndex);
//触发 PageIndexChanging 事件
PageIndexChangingEventArgs ee = new PageIndexChangingEventArgs(pageIndex);
OnPageIndexChanging(ee);
}
{
base .OnItemClicked(e);
this .currentItem = e.ClickedItem;
switch (e.ClickedItem.Name)
{
case " PageNavigatorMoveFirstItem " :
if (PageIndex > 0 )
{
pageIndex = 0 ;
}
break ;
case " PageNavigatorMovePreviousItem " :
if (PageIndex > 0 )
{ pageIndex -- ; }
break ;
case " PageNavigatorMoveLastItem " :
if (PageIndex < PageCount)
{
pageIndex = PageCount - 1 ;
}
break ;
case " PageNavigatorQueryItem " :
ToolStripTextBox txt = this .Items[ " PageNavigatorTextItem " ] as ToolStripTextBox;
if (txt != null )
{
if ( ! ValidateInput(txt.Text.Trim()))
{
MessageBox.Show( " 只能输入大于零的数字 " );
return ;
}
int index = 0 ;
int .TryParse(txt.Text, out index);
index -- ;
if ( 0 <= index && index < PageCount)
{
pageIndex = index;
}
else
{ MessageBox.Show( " 数字超出范围 " ); }
}
break ;
default :
if (PageIndex < PageCount)
{
pageIndex ++ ;
}
break ;
}
EnsureToolStripItemState(pageIndex);
//触发 PageIndexChanging 事件
PageIndexChangingEventArgs ee = new PageIndexChangingEventArgs(pageIndex);
OnPageIndexChanging(ee);
}
最后 PageIndexChanging 事件:
PageIndexChanging 事件
protected virtual void OnPageIndexChanging(PageIndexChangingEventArgs e)
{
var handler = Events[pageIndexChangingKey] as PageIndexChangingEventHandler;
if (handler != null )
{ handler( this , e); }
}
protected virtual void OnPageIndexChanging(PageIndexChangingEventArgs e)
{
var handler = Events[pageIndexChangingKey] as PageIndexChangingEventHandler;
if (handler != null )
{ handler( this , e); }
}
控件的主体程序就这么多。