Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 353
1

Что передать в функцию рисования?

02.06.2016, 09:47. Показов 2358. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть класс, в котором есть вот этот код:
C#
1
2
3
4
5
public void draw(PaintEventArgs e)
        {
            Pen pen = new Pen(Brushes.Black);
            e.Graphics.DrawEllipse(pen, coord.X, coord.Y, 10, 10);
        }
Не пойму, что писать при вызове. Пытаюсь вызвать по клику, то есть:
C#
1
2
3
4
5
6
7
8
private void canvasClick(object sender, EventArgs e)
        {
            if (createVertexInstrument)
            {
                vertex vert = new vertex();
                vert.draw(e);
            }
        }
В общем, что писать в аргументах, при вызове функции?

Добавлено через 3 минуты
Попытался добавить в аргументы cenvasClick, PaintEventArgs, но теперь на меня ругается вот эта строка:
C#
1
canvas.Click += new System.EventHandler(canvasClick);
Говорит, что не прописана перегрузка. Пытаюсь добавить также ещё одну:
C#
1
canvas.Click += new System.Windows.Forms.PaintEventArgs(canvasClick);
Тоже кричит. Что делать то?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2016, 09:47
Ответы с готовыми решениями:

Какие параметры нужно передать в функцию opengl при ее вызове, что бы код заработал?
Добрый день. Имеется код: #include <GL/glut.h> #include <iostream> int opengl(int, char...

Как передать аргументы из командной строки в функцию main(), что программа заработала? (файловый ввод/вывод)
Как передать аргументы из командной строки в аргумент int main(int argc, char *argv), что бы...

OpenGL. Передать в процедуру рисования Draw коэффициенты прямой, вычисляемые в другой процедуре
Пишу программу, используя OPENGL.Проблема следующая, как мне передать в процедуру рисования Draw...

Как передать в процедуру рисования Draw коэффициенты прямой, вычисляемые в другой процедуре?
Пишу программу, используя OPENGL.Проблема следующая, как мне передать в процедуру рисования Draw...

9
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
02.06.2016, 09:57 2
Semael, вот Вы написали vert.draw(e);. Откуда функция знает, на чем ей рисовать? На форме? На PictureBox?
Рекомендую Вам написать метод вот так:
C#
1
2
3
4
5
public void draw(Graphics g)
{
    Pen pen = new Pen(Brushes.Black);
    g.DrawEllipse(pen, coord.X, coord.Y, 10, 10);
}
А вызывать его вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
private void canvasClick(object sender, EventArgs e)
{
    if (createVertexInstrument)
    {
        // Рисуем на форме
        Graphics Graph = this.CreateGraphics();
 
        vertex vert = new vertex();
        vert.draw(Graph);
    }
}
1
77 / 77 / 42
Регистрация: 30.09.2014
Сообщений: 342
02.06.2016, 09:59 3
Передать в метод OnPaint параметр PaintEventArgs e
1
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 353
02.06.2016, 10:01  [ТС] 4
BroDMax, я подразумевал рисование на canvas. А canvas - это groupbox.
0
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
02.06.2016, 10:05 5
Лучший ответ Сообщение было отмечено Semael как решение

Решение

Semael, Вы серьезно?
C#
1
2
// Рисуем на GroupBox
Graphics Graph = groupBox1.CreateGraphics();
1
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 353
02.06.2016, 10:10  [ТС] 6
BroDMax, спасибо! Теперь ещё вопрос) В том же классе есть функция
C#
1
2
3
4
 private void setCoords(MouseEventArgs e){ //установка координат
            coord.X = e.X;
            coord.Y = e.Y;
        }
Как запустить её? Что передавать в в аргумент?
0
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
02.06.2016, 10:13 7
Semael, у Вас весь класс работает не правильно. Объясните, что Вы хотите сделать, какова цель создания класса и мы Вам подскажем.
0
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 353
02.06.2016, 12:31  [ТС] 8
BroDMax, это класс создания вершины графа.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class vertex
    {
        public edge input { get; set; }//входящее ребро
        public edge output { get; set; } //исходящее ребро
        public bool beginVertex, endVertex = false; //начало графа, конец графа
 
        public double score = 0; //значение метки вершины
        public int number; //номер вершины
        public bool visited = false; //посещена ли вершина
        public Point coord; //координаты местоположения вершины
        /// <summary>
        /// Установка координат
        /// </summary>
        /// <param name="e"></param>
        private void setCoords(MouseEventArgs e){ 
            coord.X = e.X;
            coord.Y = e.Y;
        }
        public vertex (edge inputEdge = null, edge outputEdge = null, bool begin = false, bool end=false)
        {
            input = inputEdge;
            output = outputEdge;
        }
 
        public void draw(Graphics g)
        {
            Pen pen = new Pen(Brushes.Black);
            g.DrawEllipse(pen, coord.X, coord.Y, 20, 20);
        }
        
    }
А вот - ребро графа.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class edge
    {
        public vertex firstVert { get; set; } //откуда
        public vertex secondVert { get; set; } //куда
        public double weightEdge { get; set; } //вес
 
        public edge(vertex firstVertex, vertex secondVertex, int weight)
        {
            firstVert = firstVertex;
            secondVert = secondVertex;
            weightEdge = weight;
        }
        /// <summary>
        /// Отрисовка ребра
        /// </summary>
        public void draw (PaintEventArgs e){ 
            Pen pen = new Pen(Brushes.Black);
            pen.Width = 0.8f;
            pen.EndCap = System.Drawing.Drawing2D.LineCap.RoundAnchor;
            e.Graphics.DrawLine(pen, firstVert.coord, secondVert.coord);
            pen.Dispose();
        }
    }
Добавлено через 24 минуты
BroDMax, ау?

Добавлено через 1 час 50 минут
Извините! Мне ответит кто-нибудь, что не так?
0
157 / 156 / 104
Регистрация: 01.10.2015
Сообщений: 310
02.06.2016, 17:59 9
Лучший ответ Сообщение было отмечено Semael как решение

Решение

Semael, метод SetCoords должен выглядеть так:
C#
1
2
3
4
5
public void setCoords(Point p)
{
    coord.X = p.X;
    coord.Y = p.Y;
}
А использовать, например, так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
private void GroupBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (createVertexInstrument)
    {
        // Рисуем на GroupBox
        Graphics Graph = this.groupBox1.CreateGraphics();
 
        vertex vert = new vertex();
        vert.setCoords(e.Location);
        vert.draw(Graph);
    }
}
Добавлено через 1 минуту
Опережая наперед скажу, что событие можно создать так:
C#
1
groupBox1.MouseMove += GroupBox1_MouseMove;
1
2 / 2 / 0
Регистрация: 14.06.2012
Сообщений: 353
02.06.2016, 19:24  [ТС] 10
BroDMax, огромное спасибо!

Добавлено через 54 минуты
BroDMax, а я могу как-то отследить клик по рисунку?
0
02.06.2016, 19:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2016, 19:24
Помогаю со студенческими работами здесь

Не могу разобраться как передать корректно передать массив из функции в функцию
//--------------------------------------------------------------------------- #pragma hdrstop ...

Написать функцию для рисования
Необходимо нарисовать квадраты и соединить их линиями. Изначально отрисовано и известно количество...

Как сделать функцию рисования в программе
название говорит само за себя

Как оптимизировать функцию рисования отрезка
Привет. От нечего делать решил написать функцию рисования отрезка по алгоритму Брезенхема....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru