2010-08-05 75 views
1

是否有某种方法可以(暂时)阻止用户通过拖动滑块来更改TrackBar的值?我发现的唯一方法是将Enabled属性设置为false,但也会使轨迹栏变灰。System.Windows.Forms.Trackbar - 如何防止用户拖动滑块?

编辑: 由于I'm越来越为什么我不应该这样做,而不是它是如何能够做到这一点更多的答案,我决定来解释为什么我会喜欢这样做。我不使用它允许用户

调整某些应用属性的值,但显示和一些行动控制进展。想象一下,例如你最喜欢的媒体播放器 - 它可能包含一些控制(我称之为trackbar,但英语不是我的母语,所以它可能是错误的) 显示它正在播放的电影的部分,但也可以让你控制它 - 及时向后或向前移动并观察不同的部分。

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

由于这个原因,我在Delphi 6中多次使用过trackbar组件,但是当它被禁用时它并没有变灰,在我看来它工作正常。这就是为什么我在这里询问 是否有可能在C#中实现相同的效果。

回答

4

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

对控件进行灰色化是一种Windows标准,用于表示“您目前无法使用此控件”,想象一下您在禁用时未呈现灰色的某些控件,这将是非常受欢迎的事件试图让他们看到哪些是启用的,哪些不是。

如果你真的要防止更改,而无需使用Enabled属性的一个可能的选择是,如果你想成为雄心勃勃的(或过度热心)使用ValueChanged事件的跟踪条

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

我不想灰色的跟踪栏,因为在我看来,灰色组件是不活跃的...这不是我的情况,我的跟踪栏总是活动的,有时只是用户无法修改它的值,因为它是以编程方式修改的......使用'ValueChanged'事件是个不错的主意,尽管当我尝试移动滑块时滑块有时会“闪烁”,并立即返回到正确的位置 - 这就是为什么我想以某种方式防止用户移动滑块在所有...但无论如何感谢很多! – 2010-08-05 12:19:24

+0

所以我想没有其他方式比'ValueChanged'事件,所以我接受你的答案...再次感谢... – 2010-08-06 07:25:03

+0

我不知道是否启用双缓冲将有助于减少闪烁?或者,也可以通过GDI +创建自己的自定义控件,除非特别启用,否则不会接受用户输入。 – Xander 2010-09-13 09:18:37

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 
     } 
    } 

将此控件添加到您然后将其放置在轨道条上,即

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

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

0

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

如果您担心trackbar看起来“不活跃”,您可以尝试用其他方式显示它所代表的数据,如标签。这样,当您禁用轨迹栏时,您只是表示该值的编辑不可用。

+0

感谢您的回答,但我真的更想知道是否可以做到这一点......我可能以不同于您想象的方式使用它,但我不知道任何其他组件会做得更好......我编辑了我的问题并在那里解释它...... – 2010-08-06 07:23:41

相关问题