none
Как передать переменную к методу с переменным PaintEventArgs? RRS feed

  • Вопрос

  • Проблемный код:
            private void button1_Click(object sender, EventArgs e)
            {
                Method();
            }
    
            private void Method(PaintEventArgs e)
            {
                Rectangle rect = new Rectangle(0, 0, 50, 50);
                Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
                e.Graphics.ResetTransform();
                e.Graphics.ScaleTransform(1.75f, 0.5f);
                e.Graphics.RotateTransform(28, MatrixOrder.Append);
                e.Graphics.TranslateTransform(150, 150, MatrixOrder.Append);
                e.Graphics.DrawRectangle(pen, rect);
            }
    Наверное внутри скобок Method нужно чтото написать.
                Method();

Ответы

  • Добрый день.

    У вас Method всегода рисует на одном и том же элементе управления? Если да, то тогда можете убрать передачу параметров в него (вместо panel1 имя вашего компонента или если вы рисуете на форме напишите this):

    private void button1_Click(object sender, EventArgs e)
    {
    	Method();
    }
    private void Method()
    {
    	Rectangle rect = new Rectangle(0, 0, 50, 50);
    	Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
    	Graphics gr = Graphics.FromHwnd(panel1.Handle);
    	gr.ResetTransform();
    	gr.ScaleTransform(1.75f, 0.5f);
    	gr.RotateTransform(28, MatrixOrder.Append);
    	gr.TranslateTransform(150, 150, MatrixOrder.Append);
    	gr.DrawRectangle(pen, rect);
    }

    Если же вы хотите этим методом рисовать на разных компонентах , то тогда инициализацию Graphics надо вынести наружу и передавать в метод только ее:

    private void button1_Click(object sender, EventArgs e)
    {
    	Graphics gr = Graphics.FromHwnd(panel1.Handle);
    	Method(gr);
    }
    private void Method(Graphics gr)
    {
    	Rectangle rect = new Rectangle(0, 0, 50, 50);
    	Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
    	
    	gr.ResetTransform();
    	gr.ScaleTransform(1.75f, 0.5f);
    	gr.RotateTransform(28, MatrixOrder.Append);
    	gr.TranslateTransform(150, 150, MatrixOrder.Append);
    	gr.DrawRectangle(pen, rect);
    }




    Отвечающий
  • Ну можно вот так сделать:

    Graphics gr = Graphics.FromHwnd(this.Handle);
    Method(new PaintEventArgs(gr, this.ClientRectangle));
    Просто для того, чтобы передать Graphics городить новый объект... А смысл? Да, кстати, я не уверен, что передал правильный Rectangle, поэтому приведенный здесь код может работать странно.
    • Помечено в качестве ответа Abolmasov Dmitry 19 июня 2012 г. 8:14
    Отвечающий

Все ответы

  • Добрый день.

    У вас Method всегода рисует на одном и том же элементе управления? Если да, то тогда можете убрать передачу параметров в него (вместо panel1 имя вашего компонента или если вы рисуете на форме напишите this):

    private void button1_Click(object sender, EventArgs e)
    {
    	Method();
    }
    private void Method()
    {
    	Rectangle rect = new Rectangle(0, 0, 50, 50);
    	Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
    	Graphics gr = Graphics.FromHwnd(panel1.Handle);
    	gr.ResetTransform();
    	gr.ScaleTransform(1.75f, 0.5f);
    	gr.RotateTransform(28, MatrixOrder.Append);
    	gr.TranslateTransform(150, 150, MatrixOrder.Append);
    	gr.DrawRectangle(pen, rect);
    }

    Если же вы хотите этим методом рисовать на разных компонентах , то тогда инициализацию Graphics надо вынести наружу и передавать в метод только ее:

    private void button1_Click(object sender, EventArgs e)
    {
    	Graphics gr = Graphics.FromHwnd(panel1.Handle);
    	Method(gr);
    }
    private void Method(Graphics gr)
    {
    	Rectangle rect = new Rectangle(0, 0, 50, 50);
    	Pen pen = new Pen(Color.FromArgb(128, 200, 0, 200), 2);
    	
    	gr.ResetTransform();
    	gr.ScaleTransform(1.75f, 0.5f);
    	gr.RotateTransform(28, MatrixOrder.Append);
    	gr.TranslateTransform(150, 150, MatrixOrder.Append);
    	gr.DrawRectangle(pen, rect);
    }




    Отвечающий
  • Я так могу делать, просто хотел узнать как передать PaintEventArg, просто ради интереса.
  • Ну можно вот так сделать:

    Graphics gr = Graphics.FromHwnd(this.Handle);
    Method(new PaintEventArgs(gr, this.ClientRectangle));
    Просто для того, чтобы передать Graphics городить новый объект... А смысл? Да, кстати, я не уверен, что передал правильный Rectangle, поэтому приведенный здесь код может работать странно.
    • Помечено в качестве ответа Abolmasov Dmitry 19 июня 2012 г. 8:14
    Отвечающий