System.Windows.Forms.Trackbar - ユーザーがスライダーをドラッグできないようにするにはどうすればよいですか?

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

  •  26-09-2019
  •  | 
  •  

質問

ユーザーがスライダーをドラッグして TrackBar の値を変更できないようにする方法はありますか?私が見つけた唯一の方法は、設定することです Enabled プロパティを false に設定しますが、トラックバーもグレー表示になります。

編集: どうしたらできるかということよりも、なぜやるべきではないのかという答えが増えてきたので、なぜそれをやりたいのかを説明することにしました。

ユーザーがアプリケーションのプロパティの値を調整できるようにするためにこれを使用しているのではなく、 画面 そして コントロール 何らかのアクションの進行状況。たとえば、お気に入りのメディアプレーヤーを想像してみてください - おそらく何らかのコントロールが含まれています(私はそれをトラックバーと呼んでいますが、英語は私の母国語ではないので間違っているかもしれません) ディスプレイ 現在再生されている映画の部分だけでなく、 コントロール それ - 時間を前後に移動して、別の部分を見てください。

私はまさにこの方法でトラックバーを使用しています。他にこれより良いコンポーネントはわかりません(プログレスバーでは「位置」を変更できません)。それは正常に動作しているので、私がやりたいことは、ユーザーが「映画が一時停止されない限りトラックバーを使用する」ことを許可しないことです。

まさにこの理由から、私は Delphi 6 でトラックバー コンポーネントを何度も使用しましたが、無効にしてもグレー表示にならず、私の意見では正常に動作しました。だからこそ、C#で同じ効果を達成することが可能かどうかここで尋ねました。

役に立ちましたか?

解決

最良の方法は、 Enabled あなたが正しく指摘したように、プロパティを false に設定すると、トラックバーも灰色になります。

コントロールをグレー表示にするのは、「現時点ではこのコントロールを使用できません」ということを示すための Windows 標準です。無効になっているにもかかわらずグレー表示になっていないコントロールがいくつか表示されたと想像してみてください。すべてのコントロールを試してみると、行き当たりばったりの出来事になるでしょう。どれが有効でどれが無効かを確認してください。

もし、あんたが 本当に を使用せずに変更を防ぎたい Enabled プロパティの 1 つの可能な代替方法は、 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