私はユーザーコントロールをトラックバーとして機能させています。私はToolboxCustomTrackbar1
を持っています。これはMin
とMax
とSelectedMin
です。これは、ユーザがエリア内でMinPanel
をドラッグして変更することができます。このすべてが正常に動作しますC#カスタムトラックバーバッファ領域
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawRectangle(Pens.Black, 0, 0, Width - 1, Height - 1);
minPanel.Location = new Point((int)GetPosition(ref selectedMin), 0);
minPanel.Size = new Size(PanelWidth, Height/2);
minPanel.BackColor = Color.Red;
trackbarArea = new Rectangle(Buffer, 0, Width - Buffer * 2, Height);
e.Graphics.FillRectangle(Brushes.LightBlue, trackbarArea);
}
private float GetPosition(ref int input)
{
var range = Max - Min;
var value = input - Min;
var percentage = (float)value * 100/range;
var position = percentage * Width/100;
Console.WriteLine(position);
return position - (float)minPanel.Width/2;
}
:
MinPanel
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if(e.Button == MouseButtons.Left)
{
UpdateSelectedMinFromMouse(e.X);
}
}
private void UpdateSelectedMinFromMouse(float x)
{
var percentage = x * 100/Width;
var range = Max - Min;
var rawValue = percentage * range/100;
var value = rawValue + Min;
SelectedMin = (int)Math.Round(value);
}
は、次のコードで描画されます。
MinPanel
は、次のコードで変更されたSelectedMin
、に基づいて描かれていますクリックしてコントロール上でドラッグするとどこにでもMinPanel
が描画されます。しかし、コントロールの左右にある場合でも、コントロールの左右にバッファ領域を設けて、MinPanel
全体を描画したいと考えています。
私は現在でこれをやろうとしている:
Rectangle trackbarArea = new Rectangle(Buffer, 0, Width - Buffer * 2, Height);
そして、これは私が実際に私のTrackBar
のための範囲と考えることにしたいエリアを作成します。
しかし、コントロールの左端をtrackbarArea
としてMinスポット、右端をMaxスポットとして扱う方法がわかりません。
トラックバーの両側でバッファを使用できるようにするにはどうすればよいですか?私が使用ValidateValue()
、そして、I値を設定毎回
private int ShiftOffset
{
get { return shiftOffset; }
set { shiftOffset = value; }
}
private int Min
{
get { return min - ShiftOffset; }
set { min = value; }
}
private int Max
{
get { return max + ShiftOffset; }
set { max = value; }
}
:
でprivate void ValidateValue(ref int value)
{
if (value < Min + ShiftOffset) value = Min + ShiftOffset;
if (value > Max - ShiftOffset) value = Max - ShiftOffset;
}
を
あなたはあなたのtrackbarAreaにClientRectangleを設定しようとする可能性があります。さもなければ、私がここで行ったようにトラックバーコントロールをゼロから作り直すことができます:https://github.com/glm9637/MaterialWinforms/blob/master/MaterialWinforms/Controls/MaterialSlider.cs – glm9637
母私はよく知られていないか経験していませんそれを行うのに十分な、ありがとう。 – Tawm