2013-10-13 1 views
1

Я новичок в этом, так что немного порежьте меня. Я пытаюсь нарисовать точку в окне формы в месте щелчка мыши. Я продолжаю получать Null Exception в g.FillEllipse. Что мне не хватает или что-то не так?Я продолжаю получать исключение Null при использовании g.FillEllipse();

namespace ConvexHullScan 
{ 

public partial class convexHullForm : Form 
{ 
    Graphics g; 
    //Brush blue = new SolidBrush(Color.Blue); 
    Pen bluePen = new Pen(Color.Blue, 10); 
    Pen redPen = new Pen(Color.Red); 

    public convexHullForm() 
    { 
     InitializeComponent(); 
    } 

    private void mainForm_Load(object sender, EventArgs e) 
    { 
     Graphics g = this.CreateGraphics(); 
    }  

    private void convexHullForm_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 

      int x, y; 
      Brush blue = new SolidBrush(Color.Blue); 
      x = e.X; 
      y = e.Y; 
      **g.FillEllipse(blue, x, y, 20, 20);** 
     }            
    } 
    } 
} 

ответ

0

Заменить Graphics g = this.CreateGraphics(); только с g = this.CreateGraphics();, потому что в противном случае вы определяете новую переменную, которая живет только внутри области видимости функции mainForm_Load вместо присвоения значения переменной, определенной в рамках более высокого уровня convexHullForm

0

Неясно, какова ваша конечная цель, но те точки, нарисованные с помощью CreateGraphics(), будут только временными. Они будут удалены, когда форма будет перерисовываться, например, когда вы минимизируете и восстанавливаете, или если другое окно затмевает ваше. Для того, чтобы сделать их «стойкими», используйте входящий в комплект поставки e.Graphics в Paint() Событие Формы:

public partial class convexHullForm : Form 
{ 

    private List<Point> Points = new List<Point>(); 

    public convexHullForm() 
    { 
     InitializeComponent(); 
     this.Paint += new PaintEventHandler(convexHullForm_Paint); 
     this.MouseDown += new MouseEventHandler(convexHullForm_MouseDown); 
    } 

    private void convexHullForm_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
      Points.Add(new Point(e.X, e.Y)); 
      this.Refresh(); 
     }            
    } 

    void convexHullForm_Paint(object sender, PaintEventArgs e) 
    { 
     foreach (Point pt in Points) 
     { 
      e.Graphics.FillEllipse(Brushes.Blue, pt.X, pt.Y, 20, 20); 
     } 
    } 

} 
Смежные вопросы