1 Востаннє редагувалося fatalerror2011 (24.04.2015 16:52:39)

Тема: C# допоможіть скомпілювати код

Має вийти граф.



http://s019.radikal.ru/i617/1504/c4/a74a62813692.png



using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsFormsApplication1 {
    public class Form1 : Form {
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        private const int NodeRadius = 5;

        private static readonly Pen ArrowPen = new Pen(Color.Black, 2) {
            StartCap = LineCap.Round,
            EndCap = LineCap.ArrowAnchor,
            CustomEndCap = new AdjustableArrowCap(7, 7)
        };

        private readonly List<Node> _nodes = new List<Node>();

        private Node _currentNode;

        protected override void OnPaint(PaintEventArgs e) {
            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;

            foreach (var node in _nodes) {
                e.Graphics.FillEllipse(node == _currentNode ? Brushes.Red : Brushes.Black, new Rectangle(node.Position.X - NodeRadius, node.Position.Y - NodeRadius, NodeRadius * 2, NodeRadius * 2));
                foreach (var next in node.Dependencies) {
                    e.Graphics.DrawLine(ArrowPen, node.Position, next.Position);
                }
            }
            base.OnPaint(e);
        }

        public Node GetNode(Point point) {
            foreach (var node in _nodes)
                if (Math.Abs(node.Position.X - point.X) < NodeRadius && Math.Abs(node.Position.Y - point.Y) < NodeRadius)
                    return node;

            return null;
        }

        protected override void OnMouseClick(MouseEventArgs e) {
            if (e.Button == MouseButtons.Left && _currentNode == null) {
                _nodes.Add(new Node() { Position = e.Location });
                Invalidate();
            }

            base.OnMouseClick(e);
        }
        protected override void OnMouseDown(MouseEventArgs e) {
            var currentNode = GetNode(e.Location);

            if (e.Button == MouseButtons.Right && _currentNode != null && currentNode != null && !_currentNode.Dependencies.Contains(currentNode)) {
                _currentNode.Dependencies.Add(currentNode);
                Invalidate();

            } else if (e.Button == MouseButtons.Left) {
                _currentNode = currentNode;
                Invalidate();

            }

            base.OnMouseDown(e);
        }

        protected override void OnMouseMove(MouseEventArgs e) {
            if (e.Button == MouseButtons.Left && _currentNode != null) {
                _currentNode.Position = e.Location;
                Invalidate();

            }
           
            base.OnMouseMove(e);
        }

    }

    public class Node {
        private readonly List<Node> _dependencies = new List<Node>();

        public List<Node> Dependencies { get { return _dependencies; } }
        public Point Position { get; set; }
    }
}

Помилка 1

Ошибка    1    Для программы "C:\Users\jeka\AppData\Local\Temporary Projects\WindowsFormsApplication1\obj\x86\Debug\WindowsFormsApplication1.exe" определено несколько точек входа: "WindowsFormsApplication1.Form1.Main()". Компиляция с /main позволит указать тип, содержащий точку входа.    C:\Users\jeka\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs    12    21    WindowsFormsApplication1

Помилка 2

Ошибка    2    Для программы "C:\Users\jeka\AppData\Local\Temporary Projects\WindowsFormsApplication1\obj\x86\Debug\WindowsFormsApplication1.exe" определено несколько точек входа: "WindowsFormsApplication1.Program.Main()". Компиляция с /main позволит указать тип, содержащий точку входа.    C:\Users\jeka\AppData\Local\Temporary Projects\WindowsFormsApplication1\Program.cs    14    21    WindowsFormsApplication1

Post's attachments

WindowsFormsApplication2.rar 31.03 kb, 198 downloads since 2015-04-24 

2

Re: C# допоможіть скомпілювати код

А хто вам сказав, що у формі має бути метод Main?

Подякували: leofun011

3 Востаннє редагувалося fatalerror2011 (21.04.2015 20:24:53)

Re: C# допоможіть скомпілювати код

koala написав:

А хто вам сказав, що у формі має бути метод Main?

Ну а як без нього. Виправте мене, тому що боюсь до завтра не встигну

4

Re: C# допоможіть скомпілювати код

Ви створили, як не помиляюся, проект з формою. А в ньому метод Main вже є деінде, якщо хочете щось зробити при створенні форми - дописуйте в OnCreate.

5

Re: C# допоможіть скомпілювати код

Знову помилка(

Ошибка    1    Нет перегруженного метода для "OnPaint", который соответствует делегату "System.Windows.Forms.PaintEventHandler"    C:\Users\jeka\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.Designer.cs    40    27    WindowsFormsApplication1

Теж саме з "OnMouseDown", "OnMouseMove", "OnMouseClick"

6

Re: C# допоможіть скомпілювати код

Панове, хтось все ж наважиться допомогти ?

7

Re: C# допоможіть скомпілювати код

залий цілий проект кудись, я гляну.

8

Re: C# допоможіть скомпілювати код

truesupport написав:

залий цілий проект кудись, я гляну.

Завантажив

9

Re: C# допоможіть скомпілювати код

У PaintEventHandler два параметри, а у вашого OnPaint - один.

10

Re: C# допоможіть скомпілювати код

Файл називається Form1.Designer.cs там треба видалити або закоментити рядки 40 - 43 включно і воно запуститься. Як воно працює і чи працює взагалі я не перевіряв.

Подякували: koala, leofun012

11

Re: C# допоможіть скомпілювати код

truesupport написав:

Файл називається Form1.Designer.cs там треба видалити або закоментити рядки 40 - 43 включно і воно запуститься. Як воно працює і чи працює взагалі я не перевіряв.

Дякую, все запрацювало !!!

12

Re: C# допоможіть скомпілювати код

fatalerror2011 написав:
namespace WindowsFormsApplication1 {
    public class Form1 : Form {
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
 

Program.cs - це не файл для того, щоб скопіювати кудись метод main