3
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
    {
        int x1, x2, wid = 100;

        public Form1()
        {
            InitializeComponent();

            x1 = this.Width / 2 ;
            x2 = this.Height / 2 ;
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {


            e.Graphics.DrawEllipse(Pens.Red, x1,x2, wid, wid);
        }
    }
}

我想在表格中间画一个简单的圆圈,然后我想画出从圆圈中心出来的线条。我该怎么做 ?

4

2 回答 2

5

属性this.Width和与描述自己this.Height的相同:this.Bounds

获取或设置控件的大小和位置,包括其非客户端元素,以像素为单位,相对于父控件

这意味着您需要调整边框和标题栏的粗细。使用this.ClientRectangle避免了整个问题。

public partial class Form1 : Form
{
    int circleDiameter  = 100;

    public Form1()
    {
        InitializeComponent();
    }

     private void Form1_Paint(object sender, PaintEventArgs e)
    {

        Point CenterPoint = new Point()
        {
            X = this.ClientRectangle.Width/2,
            Y = this.ClientRectangle.Height/2
        };
        Point topLeft = new Point()
        {
            X=(this.ClientRectangle.Width - circleDiameter) / 2,
            Y=(this.ClientRectangle.Height - circleDiameter) / 2
        };
        Point topRight = new Point()
        {
            X=(this.ClientRectangle.Width + circleDiameter) / 2,
            Y=(this.ClientRectangle.Height - circleDiameter) / 2
        };
        Point bottomLeft = new Point()
        {
            X=(this.ClientRectangle.Width - circleDiameter) / 2,
            Y=(this.ClientRectangle.Height + circleDiameter) / 2
        };
        Point bottomRight = new Point()
        {
            X=(this.ClientRectangle.Width + circleDiameter) / 2,
            Y=(this.ClientRectangle.Height + circleDiameter) / 2
        };

         e.Graphics.DrawRectangle(Pens.Red, topLeft.X, topLeft.Y, circleDiameter, circleDiameter);
         e.Graphics.DrawLine(Pens.Red, CenterPoint, topLeft);
         e.Graphics.DrawLine(Pens.Red, CenterPoint, topRight);
         e.Graphics.DrawLine(Pens.Red, CenterPoint, bottomLeft);
         e.Graphics.DrawLine(Pens.Red, CenterPoint, bottomRight);
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        this.Invalidate();
    }

}
于 2012-09-10T01:14:32.610 回答
4

如果我理解正确,这是你想要做的吗?

        const int circleRadius = 150;
        const int circleDiameter = circleRadius * 2;

        const double angleOfLineInDegrees = 65;
        const double angleOfLineInRadians = (angleOfLineInDegrees / 180) * Math.PI;

        // Center of the form
        var cirleCenter = new PointF(((float)Width / 2), ((float)Height / 2));

        // Ellipses draw like a rectangle. 
        // So just start at the center 
        // subtract by the radius along x and y axis
        // make the width and height the diameter.
        e.Graphics.DrawEllipse(Pens.Black, cirleCenter.X - circleRadius, cirleCenter.Y - circleRadius, circleDiameter, circleDiameter);

        // This line is using trig to convert the angle into a usable vector
        var lineVector = new PointF((float)Math.Cos(angleOfLineInRadians) * circleRadius, (float)Math.Sin(angleOfLineInRadians) * circleRadius);

        var lineEndPoint = new PointF(cirleCenter.X + lineVector.X, cirleCenter.Y + lineVector.Y);

        // Draw the line starting at 
        e.Graphics.DrawLine(Pens.Blue, cirleCenter, lineEndPoint);
于 2012-09-11T18:01:58.937 回答