1

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

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

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

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

この正確な理由から、私は Delphi 6 でトラックバー コンポーネントを何度も使用しましたが、無効にしてもグレーアウトせず、私の意見では問題なく動作しました。そのため、C# で同じ効果を達成できるかどうかをここで尋ねました。

4

3 に答える 3

4

最良の方法は、Enabledプロパティを false に設定することです。これは、トラック バーもグレー表示されることを正しく指摘したためです。

コントロールをグレー表示することは、「現時点ではこのコントロールを使用できません」と言うための Windows の標準です。有効になっているものとそうでないものを確認します。

プロパティを使用せずに変更を本当に防止したい場合、考えられる代替手段の 1 つは、TrackBar のイベントを使用することです。EnabledValueChanged

private void trackBar1_ValueChanged(object sender, EventArgs e)
{
  // Code here to restore the original value
}
于 2010-08-05T11:29:33.850 に答える
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;

その後、ユーザーの操作を許可したいときに非表示にすることができます。

于 2010-08-05T20:48:45.357 に答える
0

Xander が指摘したように、完全に正常に見えるが実際には使用できないトラックバーを持つことは、ユーザーを夢中にさせる良い方法です!

トラックバーが「非アクティブ」に見えることが心配な場合は、ラベルなど、トラックバーが表すデータを表示する別の方法を試すことができます。そうすれば、トラックバーを無効にすると、値の編集が利用できないことを示しているだけです。

于 2010-08-06T06:17:19.103 に答える