System.Windows.Forms.Trackbar - 如何防止用户拖动滑块?

时间:2010-08-05 11:07:41

标签: c# winforms trackbar

有没有办法(暂时)阻止用户通过拖动滑块来更改TrackBar的值?我找到的唯一方法是将Enabled属性设置为false,但它也会使轨迹栏变灰。

修改: 因为我得到了更多的答案,为什么不应该这样做,而不是如何做到这一点,我决定解释为什么我想这样做。

我不是用它来允许用户调整某些应用程序属性的值,而是用于显示控制某些操作的进度。想象一下,例如你最喜欢的媒体播放器 - 它可能包含一些控制(我称之为轨迹栏,但英语不是我的母语所以它可能是错的) 显示当前正在播放的电影的哪个部分,但也允许您控制它 - 及时向后或向前移动并观看不同的部分。

我正是以这种方式使用轨迹栏 - 我不知道任何其他更好的组件(Progressbar不允许我更改“位置”)。它工作正常, 我唯一想做的就是不允许用户“使用轨迹栏,除非电影暂停”。

由于这个原因,我在Delphi 6中多次使用了trackbar组件,但是当它被禁用时它并没有变灰,在我看来它运行正常。这就是我问的原因 这里如果可以在C#中实现相同的效果。

3 个答案:

答案 0 :(得分:4)

最好的方法是将Enabled属性设置为false,正如您正确指出的那样,它也会使轨迹栏变灰。

灰色控件是一个Windows标准,用于说“你现在不能使用这个控件”,只是想象一下,你会看到一些没有变灰的控件,这将是一个非常受欢迎和错过的事情尝试他们都看到哪些是启用的,哪些不是。

如果确实希望在不使用Enabled属性的情况下阻止更改,则可以选择使用TrackBar的ValueChanged事件

private void trackBar1_ValueChanged(object sender, EventArgs e)
{
  // Code here to restore the original value
}

答案 1 :(得分:0)

如果你想雄心勃勃(或过分热心),你可以创建一个透明面板控件来覆盖TrackBar,从而阻止用户与之交互,即

   public class TransparentPanel : System.Windows.Forms.Panel
   {
      private const int WS_EX_TRANSPARENT = 0x00000020;

      protected override CreateParams CreateParams
      {
         get
         {
            CreateParams transparentParams = base.CreateParams;
            transparentParams.ExStyle |= WS_EX_TRANSPARENT;
            return transparentParams;
         }
      }

      protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
      {
         // Do Nothing
      }
   }

将此控件添加到表单中,然后将其放在TrackBar上,即

transparentPanel.Location = trackBar1.Location;
transparentPanel.Size = trackBar1.Size;

然后,当您想要允许用户交互时,您可以隐藏它。

答案 2 :(得分:0)

正如Xander指出的那样,让一个看起来很正常但实际上无法使用的轨迹栏是一个让你的用户疯狂的好方法!

如果您担心轨迹栏看起来“无效”,您可能会尝试另一种方式来显示它所代表的数据,例如标签。这样,当您禁用跟踪栏时,您只是指示该值的编辑不可用。