自己写的一个分页控件(WinForm)
找来找去没找个轻量级的分页控件,只好自己写一个凑合着先用。先看效果图:
控件的功能很简单,点击控件的几个按钮、捕获 Item_Click 事件、触发 PageIndexChanging 事件。
因此、必须要向此控件注册 PageIndexChanging 事件,在这个事件中,PageIndexChangingEventArgs 会传递新选择页的索引,根据这个索引值(NewPageIndex)就可以从数据库查询对应页的数据。
先初始化控件:
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 事件:
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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 事件:
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
protected virtual void OnPageIndexChanging(PageIndexChangingEventArgs e)
{
var handler = Events[pageIndexChangingKey] as PageIndexChangingEventHandler;
if (handler != null)
{ handler(this, e); }
}
控件的主体程序就这么多。