2

我正在尝试制作一个垂直进度条,并且我知道没有任何简单的方法可以做到这一点。

我在论坛上看到过这段代码:

public class VerticalProgressBar : ProgressBar { 
  protected override CreateParams CreateParams { 
    get { 
      CreateParams cp = base.CreateParams; 
      cp.Style |= 0x04; 
      return cp; 
     } 
   } 
 }

我的问题是我把这段代码放在哪里?它是在我的 program.cs 文件中还是在进度条所在的表单中?

4

3 回答 3

3

将代码放在哪里并不重要,您只需确保VerticalProgressBar在 Form.Designer.cs 文件中创建一个。

你必须改变

private System.Windows.Forms.ProgressBar progressBar1

private VerticalProgressBar progressBar1

(或任何名称)和

this.progressBar1 = new System.Windows.Forms.ProgressBar();

this.progressBar1 = new VerticalProgressBar();
于 2013-04-03T18:33:48.237 回答
1

在 VS 2022 中仍然没有此控件可用,因此我使用了具有一列和两行的 TablePanelLayout。并且只是更改了 RowStyle SizeType 百分比。您可以轻松添加代码以在达到限制时更改面板颜色等。

   public class BarGraph : Panel
   {
       private Panel panel1;
       private Panel panel2;
       private TableLayoutPanel table;
       private float percentValue;

       public BarGraph()
       {
           table = new TableLayoutPanel();
           table.ColumnCount = 1;
           table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
           table.Name = "tableLayoutPanel1";
           table.RowCount = 2;
           table.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
           table.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
           table.Dock = DockStyle.Fill;
           table.Margin = new Padding(0);
           table.Padding = new Padding(0);
           table.CellBorderStyle = TableLayoutPanelCellBorderStyle.None;

           panel1 = new Panel();
           panel2 = new Panel();

           panel1.AutoSize = false;
           panel1.Dock = DockStyle.Fill;
           panel1.Padding = new Padding(0);
           panel1.Margin = new Padding(0);
           panel2.AutoSize = false;
           panel2.Dock = DockStyle.Fill;
           panel2.Padding = new Padding(0);
           panel2.Margin = new Padding(0);

           panel1.BackColor = System.Drawing.Color.White;
           panel2.BackColor = System.Drawing.Color.Blue;

           table.Controls.Add(panel1, 0, 0);
           table.Controls.Add(panel2, 0, 1);

           this.Controls.Add(table);
           this.Size = new System.Drawing.Size(150, 500);
           
           SetValue("50");
       }
       public float GetValue()
       {
           return this.percentValue;
       }
       public void IncreaseValue()
       {
           IncrementValue(percentValue - 1);
       }
       public void DecreaseValue()
       {
           IncrementValue(percentValue + 1);
       }
       private void IncrementValue(float value)
       {
           SetValue(value.ToString());
       }
       public void SetValue(string value)
       {
           float.TryParse(value, out percentValue);
           if ((percentValue >= 0) && (percentValue <=100))
           {
               table.RowStyles.RemoveAt(1);
               table.RowStyles.RemoveAt(0);
               table.RowStyles.Add(new RowStyle(SizeType.Percent, 100 - percentValue));
               table.RowStyles.Add(new RowStyle(SizeType.Percent, percentValue));
           }
       }
   }

于 2021-12-09T22:55:08.510 回答
0

如果这是一个全新的应用程序,请使用 WPF。内置垂直进度条

<ProgressBar Orientation="Vertical" />
于 2013-04-03T18:38:13.567 回答