最近再研究一个小程序,需要显示出来的内容不能被复制,再网上看到有说将TextBox的ReadOnly设置为True、ShortcutsEnabled设置为false,不过这样弄了之后内容虽然不能复制了,但是内容还是可以被选中(本人有点小完美主义,- -!,先自己笔视下自己),最终通过网上的资料和自己的研究总算有个较为完美的解决方案。

解决思路

通过Panel+Label达到效果。Panel提供滚动条,Label达到不能选中不能复制的效果。

参数设置

Panel

  1. AutoScroll=True

Label

  1. AutoSize=True
  2. Dock=Top
  3. MaximumSize=(Panel.width-15,0)//15为滚动条的宽度

实现效果

QQ截图20170322145910.png

鼠标滚动效果

Panel

int lastRightPanelVerticalScrollValue = -1;//为鼠标滚动事件提供一个静态变量,用来存储上次滚动后的VerticalScroll.Value
panel.MouseWheel += Panel_MouseWheel;//添加鼠标的滚动事件
private void Panel_MouseWheel(object sender, MouseEventArgs e)
        {
            if (!(((Panel)sender).VerticalScroll.Visible == false ||
                (((Panel)sender).VerticalScroll.Value == 0 && e.Delta > 0) ||
                (((Panel)sender).VerticalScroll.Value == lastRightPanelVerticalScrollValue && e.Delta < 0)))
            {
                ((Panel)sender).VerticalScroll.Value += 10;
                lastRightPanelVerticalScrollValue = ((Panel)sender).VerticalScroll.Value;
                ((Panel)sender).Refresh();
                ((Panel)sender).Invalidate();
                ((Panel)sender).Update();
            }

        }

Label

Label.MouseWheel += Label_MouseEnter;//添加鼠标进入Label事件
private void label_MouseEnter(object sender, EventArgs e)
        {
            Panel.Focus();
        }