<WinForm>自定义滚动条移动滑块实现文本的浏览

这两天在做一个类似于记事本的浏览功能,要用到滚动条,我刚开始本来想直接用滚动条控件的,一番操作下来,发现自带滚动条好像不能根据当前篇幅所占比例去调整滑块大小(也可能是我没整明白)。索性不用了,自己画了滚动条,然后与一个PictureBox进行交互操作了。

简述下原理:PictureBox只是个小窗口,只显示窗口这个范围,我设置的整个文本尺寸可以远大于窗口的尺寸,所以我通过移动滚动条,实现让这个小窗口不断移动,能看到文本不同位置的内容了。

废话少说,先看代码:

一、设置文本尺寸大小

        double MaxRectWidth = 3000; //文本最大宽度
        double MaxRectHeight = 3000; //文本最大高度

        UserVScrollBar vScrollBar; //自定义滚动条

二、根据文本显示窗口尺寸设置滚动条滑块大小(通过比例)

        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            if (vScrollBar != null)
            {
                CalculateCoordinate.InitRect(pictureBox1.Width, pictureBox1.Height);
                vScrollBar.SetHeightRate((double)pictureBox1.Height / MaxRectHeight);
            }
        }

三、滚动条移动时的显示处理

        public void UpdateRectY(double rateY)
        {
            CalculateCoordinate.SetRectY((float)(MaxRectHeight * rateY));
            pictureBox1.Refresh();
        }

四、坐标计算转化类CalculateCoordinate.cs

    public static class CalculateCoordinate
    {
        static float RectX;
        static float RectY;
        static float RectWidth = 500;
        static float RectHeight = 500;

        public static void SetRectX(float rectX)
        {
            RectX = rectX;
        }

        public static void SetRectY(float rectY)
        {
            RectY = rectY;
        }

        public static void InitRect(float rectW, float rectH)
        {
            RectX = 0;
            RectY = 0;
            RectWidth = rectW;
            RectHeight = rectH;
        }

        public static void PosToScreen(PointF pos, out PointF scr_pos)
        {
            scr_pos = PointF.Empty;
            scr_pos.X = pos.X - RectX;
            scr_pos.Y = pos.Y - RectY;
        }

        public static void ScreenToPos(PointF scr_pos, out PointF pos)
        {
            pos = PointF.Empty;
            pos.X = scr_pos.X + RectX;
            pos.Y = scr_pos.Y + RectY;
        }
    }

五、效果

初始效果:

 左边是测试的三行字,右边是自定义的滚动条,滑块大小是根据当前文本窗口高度壁上设置的最大高度比例换算的。

点击一次滚动条向下的效果:

 第一行字已经向上走了,幅度虽然有点小,但是可以设置的。当然,如果直接移动滑块,幅度就很大了。这样就简单的实现了浏览功能。

有部分代码没有贴上来,包括:三行字体的绘制部分和自定义滚动条的实现代码。

自定义滚动条在我资源里有,有不明白的地方可以找我。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值