System.windows.forms.trackbar - Как предотвратить пользователю перетаскивать слайдер?

StackOverflow https://stackoverflow.com/questions/3414066

  •  26-09-2019
  •  | 
  •  

Вопрос

Есть ли какой-то способ (временно) предотвратить пользователю изменить значение трекбара, перетаскивая слайдер? Только так, как я нашел, это установить Enabled Свойство для ложного, но он также серый трекбар.

Редактировать: Поскольку я получаю больше ответов о том, почему я не должен делать это, а не то, как это можно сделать, я решил объяснить, почему я хотел бы сделать это.

Я не использую его, чтобы разрешить пользователю регулировать значение своего свойства приложения, но отображать а также контроль прогресс каких-либо действий. Представьте, например, ваш любимый медиаплеер - это, вероятно, содержит некоторое управление (я бы назвал его трекбаром, но английский не мой родной язык, так что это может не так) дисплей Какую часть фильма это играет в настоящее время, но также позволяет вам контроль Это - двигаться назад или вперед во времени и посмотреть разную часть.

Я использую трекбар именно таким образом - я не знаю какой-либо другой компонент, который будет лучше (ProgressBar не позволит мне изменить «позицию»). Он работает нормально, единственное, что я хотел бы сделать, это не разрешать пользователю «использовать трекбар, если только фильм не приостановлен».

Именно к этой точной причинам я много раз использовал компонент трекбара в Delphi 6, но когда он был отключен, он не был серым, и на мой взгляд, он работает нормально. Вот почему я спросил здесь, если можно добиться того же эффекта в C #.

Это было полезно?

Решение

Лучший способ было бы установить Enabled Недвижимость в FALSE, как вы справедливо указывали на нее серый путь.

Серые элементы управления - это стандарт Windows для того, чтобы сказать «вы не можете использовать этот элемент управления», просто представьте, что вы были представлены некоторыми элементами управления, которые не были серыми, где отключены, это было бы очень ударом, и мисс, пробуя их все Посмотрите, что включено и что нет.

если ты В самом деле хочу предотвратить изменения без использования Enabled Свойство одна возможная альтернатива - использовать ValueChanged событие трекбара

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

Другие советы

Если вы хотите быть амбициозными (или чрезмерноми), вы можете создать прозрачный элемент управления панелью, чтобы наложить трекбар, тем самым предотвращая взаимодействие пользователя, то есть

   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;

Тогда вы можете скрыть его, когда вы хотите разрешить взаимодействие пользователя.

Как отметил Ксандер, имеющий трекбар, который выглядит совершенно нормально, но на самом деле не может быть использован, это хороший способ водить своих пользователей с ума!

Если вы беспокоитесь о трекбере, глядя «неактивно», вы можете попробовать другой способ отображения данных, которые он представляет, как этикетка. Таким образом, когда вы отключаете трекбар, вы только указываете, что редактирование значения недоступна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top