Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Нарисовать график y=sin(x) в Panel


Автор: meteor2312 26.11.2010, 17:43
Помогите построить график функции y=sin(x) в Рanel.
У меня есть процедура private void panel1_Paint(object sender, PaintEventArgs e); надо чтобы он работала после нажатия кнопки, 
а не сразу после запуска проги.

Автор: RobinHoodPHD 27.11.2010, 10:51
Код

   public partial class Form1 : Form
    {
        bool Flag; // флаг нажатия кнопки
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Flag = false;  //при загрузке формы сбрасываем флаг в ложь
        }

        private void button1_Click(object sender, EventArgs e) // обработчик нажатия кнопки
        {
            Flag = true; // флаг нажатия истина
            panel1.Refresh(); // вызываем перерисовку Panel
        }

//отрисовка Panel
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            if (Flag) { // если кнопка была нажата
             //Заменяем эту строку на вывод функции y=sin(x)
            e.Graphics.DrawLine(new Pen(Color.Aqua), new Point(0, 0), new Point(100, 100));
            
            }
            e.Graphics.Save(); // сохраняем изменения
        }


    }

Автор: meteor2312 28.11.2010, 20:04
RobinHoodPHD, спасибо большое!

Автор: Экскалупатор 28.11.2010, 22:50
RobinHoodPHD, а для чего нужна переменная flag? просто нажатия кнопки не достаточно? )))
архитектурно было бы правильнее не рисовать график в обработчике события. лучше написать отдельный метод и запускать его в нужный момент. иначе получается что событие отрабатывает в любом случае и приходится вводить дополнительные флаги и проводить танцы с бубном.

Автор: RobinHoodPHD 29.11.2010, 20:31
Экскалупатор, Вы несомненно правы. Сэкономленные миллисекунды будут зачислены на Ваш счет) 

Автор: Экскалупатор 29.11.2010, 22:03
RobinHoodPHD, вопрос не в милисекундах(я про них не говорил), я просто говорю что этот код требует жесткого рефакторинга. потому как панель не должна знать про функцию синуса. и тем более про то нажата ли кнопка или нет. хотя если вопрос стоит в том что бы просто реализовать, то конечно можно не загоняться... просто возможно кто кроме функции y=sin(x) в Рanel захочется нарисовать что то еще, и что тогда делать прикажете? правильно "добавить еще пару тройку флагов и ифов и никаких проблем"- (читать с сарказмом).

Автор: Enter 1.12.2010, 11:15
у меня была как раз такая прога, и не только с синусом, а с кучкой разных функций

Автор: mihryak 1.12.2010, 14:48
и у меня была smile
http://forum.vingrad.ru/forum/topic-221133/view-all/hl/graph/index.html#

Автор: Экскалупатор 1.12.2010, 17:22
хм. а у меня не было... пойду утоплюсь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)