页码功能设计时,有如下想法:
- 前一、后一、首页、尾页,以及指定页码跳转
- 当窗口大小变化时页码随之变化
页码工具栏设计如下图:
我使用了richtextbox去显示文本,其中核心代码如下:
private void beginPage_Click(object sender, EventArgs e)
{
rtb.SelectionStart = 1;
rtb.ScrollToCaret();
GetCurrentPage();
}
private void prePage_Click(object sender, EventArgs e)
{
_WordIndex = _WordIndex - (rtb.Height / rtb.Font.Height)
* (rtb.Width / rtb.Font.Height);
if (_WordIndex < 1)
{
_WordIndex = 1;
}
rtb.SelectionStart = _WordIndex;
rtb.ScrollToCaret();
GetCurrentPage();
}
private void skipPage_Click(object sender, EventArgs e)
{
if (tb1.Text.Equals(""))
{
MessageBox.Show("请输入跳转页数!");
}
else
{
_WordIndex = Convert.ToInt32(tb1.Text) * (rtb.Height / rtb.Font.Height)
* (rtb.Width / rtb.Font.Height);
//_WordIndex = Convert.ToInt32(tb1.Text);
if (_WordIndex < 1 && _WordIndex > Convert.ToInt32(txtPages.Text))
{
MessageBox.Show($"不存在{_WordIndex}页!");
}
else
{
rtb.SelectionStart = _WordIndex;
rtb.ScrollToCaret();
GetCurrentPage();
}
}
}
页码随窗口的变化而变化的核心代码如下:
/// <summary>
/// 获取总页数
/// </summary>
private void GetPages()
{
int pages = (this.rtb.GetLineFromCharIndex(this.rtb.Text.Length) + 1) /
((this.rtb.Height / this.rtb.Font.Height) - 0) + 1;
txtPages.Text = pages.ToString();
}
private void Form2_SizeChanged(object sender, EventArgs e)
{
rtb.Top = 10;
rtb.Left = 10;
rtb.Width = this.Width - 35;
rtb.Height = this.Height - this.toolStrip1.Height - this.toolStrip2.Height - 40;
GetPages();
}
每一次窗口的大小改变时都会通过getPages()去重新计算总页数