2015-05-12 3 views
0

этот код работает очень хорошо, когда он находится в другом делегате, но не работает, когда он запускается кнопкой. «Draw_Click» - это кнопка «Рисовать», и она должна сделать рисунок на экране на основе предварительно созданного массива точек.Невозможно заставить DrawLine работать при нажатии кнопки.

private void Draw_Click(object sender, EventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 

     for (int t = 0; t <= numberOfPoints - 1; t++) 
     { 
      myInstance.DrawLine(pen, spiroArray[0, t], spiroArray[1, t], spiroArray[0, t + 1], spiroArray[1, t + 1]); 
     } 

    } 

Но когда у меня этот же код в этом классе, он отлично работает (минус строка myInstance).

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
    } 

Я использую «e» вместо «myInstance», чтобы сделать этот вопрос максимально кратким.

В принципе, что особенного в Form1_Paint? Разве я не могу заставить его нарисовать что-то даже вне этого специального класса Form1Paint? Если я использую этот Form1_Paint, у меня нет контроля над тем, когда он рисует. Я в основном пытаюсь его обновления чертежа, как пользователь изменяет параметры и т.д.

ошибка является «Ошибка 1 Имя„DrawLine“не существует в текущем контексте»

Спасибо за любую помощь ,

+0

Он имеет отношение к спецификатору 'this'; это, вероятно, относится к неправильному контексту в функции. Попробуйте идентифицировать объект, используя его фактическое полное имя. –

+0

@ Жан-Поль, использующий 'this' в Winforms, является общим, это относится к форме, в которой активировано событие Click(). – DrewJordan

+0

@DrewJordan: Ах, ладно, не знал этого. Спасибо. –

ответ

0

Я не уверен, что правильно задаю вопрос, потому что, если я прочитаю ваш вопрос и код так, как я думаю, ошибка, которую вы должны получить, заключается в том, что в текущем контексте «перо» не существует. Если вы используете тот же код для рисования, он будет работать либо на кнопке button_click, либо на события form_paint. «this» будет по-прежнему ссылаться на форму, и ее использование для создания экземпляра графического объекта даст вам доступ к рисованию в любом месте формы. От любого обработчика кнопки или метода рисования формы. Тем не менее, единственное, что я вижу, это может быть неудачно, если вы никогда не определяли перо. Вот код, который я использовал, и он нарисовал красную линию, когда форма сначала подошла, а затем нарисовала черную линию, когда я нажал на кнопку, которую я наложил на ту же форму.

private void button1_Click(object sender, EventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 
     myInstance.DrawLine(Pens.Black, 15, 10, 25, 20); 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Graphics myInstance = this.CreateGraphics(); 
     myInstance.DrawLine(Pens.Red, 10, 10, 20, 20); 
    } 

Должно быть что-то, что не соответствует действительности в утверждении вашего вопроса.

+0

Я создал Pens поле, и, следовательно, он имеет класс в широком диапазоне. Итак, я не думаю, что все. – user3832863

+0

Не знаю, что еще вам рассказать. Вы сказали: «Я использую« e »вместо« myInstance », чтобы сделать этот вопрос как можно более кратким». Поэтому я думаю, что не вижу кода, который на самом деле дает вам ошибку. Код, который вы показываете здесь, внутри обработчика события draw_click должен отлично работать либо в этом обработчике, либо в обработчике form_paint. – AgapwIesu

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