-2

こんにちは、ドライブのリスト、容量、空きサイズを提供するコードを書きます。次のように、各ドライブのサイズに応じて円グラフを描画したい:

ドライブ容量の円グラフ

ここに私がこれまでに持っているコードがあります - サイズの値は freeSize および fullSize 変数にあります

string[] drivers = new string[5];
int freeSize;
int fullSize;

private void Form1_Load(object sender, EventArgs e)
{

    foreach (var item in System.IO.Directory.GetLogicalDrives())
    {
        int i = 0;
        drivers[i] = item;

        comboBox1.Items.Add(drivers[i]);
        ++i;
    }
}

private void btnSorgula_Click(object sender, EventArgs e)
{

    string a = comboBox1.Items[comboBox1.SelectedIndex].ToString();
    System.IO.DriveInfo di = new System.IO.DriveInfo(a);
    if (!di.IsReady)
    {
        MessageBox.Show("not ready");
        return;
    }
    decimal freeByt= Convert.ToDecimal(di.TotalFreeSpace);
    decimal freeGb = freeByt / (1024 * 1024*1024);
    label1.Text = freeGb.ToString();
    freeSize = Convert.ToInt32(freeGb);

    decimal totalByt = Convert.ToDecimal(di.TotalSize);
    decimal tottalGb = totalByt / (1024 * 1024 * 1024);
    label2.Text = Convert.ToString(tottalGb);
    fullSize = Convert.ToInt32(tottalGb);
}


private void Form1_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    Rectangle rect = new Rectangle(10, 10, 100, 100);
    g.FillPie(Brushes.Black, rect, fullSize, fullSize / freeSize);
    g.FillPie(Brushes.RoyalBlue, rect, 140, 100);
}
4

2 に答える 2

0

これはどう:

private Image GetCake(int width, int height, double percentage)
{
    var bitmap = new Bitmap(width, height);

    using (var g = Graphics.FromImage(bitmap))
    {
        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

        g.FillEllipse(Brushes.DarkMagenta, 1, 9, width - 2, height - 10);
        g.DrawEllipse(Pens.Black, 1, 9, width - 2, height - 10);
        g.FillPie(Brushes.DarkBlue, 1, 9, width - 2, height - 10, 0, (int)(360 * percentage));
        g.DrawPie(Pens.Black, 1, 9, width - 2, height - 10, 0, (int)(360 * percentage));

        g.FillEllipse(Brushes.Magenta, 1, 1, width - 2, height - 10);
        g.DrawEllipse(Pens.Black, 1, 1, width - 2, height - 10);
        g.FillPie(Brushes.Blue, 1, 1, width - 2, height - 10, 0, (int)(360 * percentage));
        g.DrawPie(Pens.Black, 1, 1, width - 2, height - 10, 0, (int)(360 * percentage));
        g.DrawArc(Pens.Blue, 1, 1, width - 2, height - 10, 0, (int)(360 * percentage));
    }

    return bitmap;
}

次のように呼び出すことができます。

myPictureBox.Image = GetCake(myPictureBox.Width, myPictureBox.Height, 0.4);

0.440%という意味です。そのため、0 から 1 までの任意の値を入力して、目的のパーセンテージを設定します。

于 2012-09-11T11:23:38.137 に答える
0

コードの問題はForm1_Paint、フォームが描画されるたびに呼び出されることです。たとえば、最初に表示されたときの起動直後などです。その時点ではボタンはまだクリックされていないfreeSizeため、0 です。

この問題を解決するには、ボタンが少なくとも 1 回クリックされたときにのみ描画されるようにコードを変更します。

于 2012-09-11T11:23:43.660 に答える