Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
2 / 2 / 1
Регистрация: 01.11.2014
Сообщений: 66
1

Не удалось привести тип объекта "System.Drawing.Rectangle" к типу "_10._02._15.Figure"

23.05.2015, 17:55. Показов 1613. Ответов 1
Метки нет (Все метки)

Есть "графический редактор".
Пытаюсь добавить "белый холст" где будет происходить рисование фигур.
В результате чего при создании нового рисунка( открытии Form2) вылетает ошибка : Не удалось привести тип объекта "System.Drawing.Rectangle" к типу "_10._02._15.Figure"
Которая указывает на Figure xy в методе :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void Form2_Paint(object sender, PaintEventArgs e)
        {
            Brush br = new SolidBrush(Color.White);
            Rectangle drawPlace = (Rectangle)arraym[0];
            e.Graphics.FillRectangle(br, drawPlace);
            foreach (Figure xy in arraym)//рисуем все фигуры, находящиеся в коллекции
            {
                xy.Draw(e.Graphics);
            }
            if (f != null)
            {
                f.Draw(e.Graphics);
            }
        }
Figure.cs
Кликните здесь для просмотра всего текста
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
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Collections;
 
namespace _10._02._15
{
    [Serializable()]
    public abstract class Figure
    {
        public int XX1, XX2, YY1, YY2;
        public Color cline;//цвет линии
        public Color cbackground;//цвет фона фигуры
        public int sline;//размер линии
        public static bool drawing;
        public ArrayList back;
        public Figure(int XX1, int YY1, int XX2, int YY2, Color cline, Color cbackground, int sline, ArrayList back)
        {
            this.XX1 = XX1;
            this.YY1 = YY1;
            this.XX2 = XX2;
            this.YY2 = YY2;
            this.cbackground = cbackground;
            this.cline = cline;
            this.sline = sline;
            this.back = back;
 
        }
        //объявление абстрактных методов
        public abstract void One(int x, int y);
        public abstract void Two(int x1, int x2);
        public abstract Rectangle CreateRect();
        public abstract void Draw(Graphics g);
        public abstract void DrawDash(Graphics g);
        public abstract void Hide(Graphics g);
 
    }
 
}


Form1 в метод private void newToolStripMenuItem_Click(object sender, EventArgs e) были добавлены строки :
C#
1
2
3
4
5
f.Width = sWidth;
           f.Height = sHeight;
            arr1 = new Rectangle(0, 0, sWidth, sHeight);
            Form2 ff = (this.ActiveMdiChild as Form2);
            ff.back(arr1);
Кликните здесь для просмотра всего текста
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
 
namespace _10._02._15
{
 
    public partial class Form1 : Form
    {
        public static int sWidth = 800;// размеры окна
        public static int sHeight = 600;// размеры окна
        public static int sizeWidth = 320;
        public static int sizeHeight = 240;
        public static Color cline = Color.Black;
        public static Color cbackground = Color.White;
        public static int sline = 1;
        public static Rectangle arr1 = new Rectangle(1, 1, 320, 240);
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            Graphics g = CreateGraphics();
            if (e.Button == MouseButtons.Left)
            {
                string s = e.X.ToString()+" "+ e.Y.ToString();
                g.DrawString(s, new Font("Times New Roman", 8),
                new SolidBrush(Color.Black), new Point(e.X, e.Y));
            }
            if (e.Button == MouseButtons.Right)
            {
                g.Clear(Color.White);
                MessageBox.Show("Нажата правая кнопка мыши","Заголовок");
            }
        }
 
        private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form f = new Form2();
            f.MdiParent = this;
            f.Text = "Рисунок" + this.MdiChildren.Length.ToString();
            f.Show();
            сохранитьToolStripMenuItem.Enabled = true;
            сохранитьКакToolStripMenuItem.Enabled = true;
            f.Width = sWidth;
           f.Height = sHeight;
            arr1 = new Rectangle(0, 0, sWidth, sHeight);
            Form2 ff = (this.ActiveMdiChild as Form2);
            ff.back(arr1);
        }
 
        private void menuStrip2_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
        public void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
        {
 
            BinaryFormatter formatter = new BinaryFormatter();
            Stream stream = File.Create(this.ActiveMdiChild.Text);
            ArrayList sdf = new ArrayList();
            Form2 child = (this.ActiveMdiChild as Form2);
            sdf = child.arraym;
            formatter.Serialize(stream, sdf);
            stream.Close();
 
        }
 
        private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Filter = "Бинарные файлы|*.bin|Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
            openFileDialog1.InitialDirectory = Environment.CurrentDirectory;// При инициализации файловых диалогов следует указывать в качестве стартового каталога текущий каталог программы.
            if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                Stream stream = new FileStream(openFileDialog1.FileName, FileMode.Open);
                Form2 child1 = new Form2();
                child1.MdiParent = this;
                child1.Text = "Рисунок" + this.MdiChildren.Length.ToString();
                child1.arraym = (ArrayList)formatter.Deserialize(stream);
                child1.Text = Path.GetFileName(openFileDialog1.FileName);//присваиваем окну имя файла
              //  Form2.Text = child1.Text;
                stream.Close();
                child1.Show();
            }
            сохранитьToolStripMenuItem.Enabled = true;
            сохранитьКакToolStripMenuItem.Enabled = true;
        }
 
        private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "Бинарные файлы|*.bin|Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
            saveFileDialog1.FileName = this.ActiveMdiChild.Text;
            saveFileDialog1.InitialDirectory = Environment.CurrentDirectory;
            if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                Stream stream = File.Create(saveFileDialog1.FileName);
                ArrayList sdf = new ArrayList();
                Form2 child = (this.ActiveMdiChild as Form2);
                sdf = child.arraym;
                formatter.Serialize(stream, sdf);
                stream.Close();
                child.Text = Path.GetFileName(saveFileDialog1.FileName);//присваиваем окну имя сохранённого файла
 
            }      
        }
 
        private void толщинаЛинииToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LineWidth LineWidth = new LineWidth();
            LineWidth.Show();
        }
 
        private void цветЛинииToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ColorDialog colors = new ColorDialog();
            if (colors.ShowDialog() == DialogResult.OK) cline = colors.Color;
        }
 
        private void цветФонаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ColorDialog colors = new ColorDialog();
            if (colors.ShowDialog() == DialogResult.OK) cbackground = colors.Color;
        }
 
        private void размерОкнаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Size Size = new Size();
            Size.Show();
        }
    }
}


Form2 в метод public void Form2_Paint(object sender, PaintEventArgs e) были добавлены строки:
C#
1
2
3
  Brush br = new SolidBrush(Color.White);
            Rectangle drawPlace = (Rectangle)arraym[0];
            e.Graphics.FillRectangle(br, drawPlace);
и метод public void back(Rectangle r)
Кликните здесь для просмотра всего текста
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
 
namespace _10._02._15
{
    [Serializable()]
    public partial class Form2 : Form
    {
        public  ArrayList arraym = new ArrayList();//объявляем динамический массив объектов , производных от класса Figure
       public  Figure f;
       // Figure f = new Rect(0, 0, 0, 0, Color.Black, Form1.cbackground, 0, new ArrayList());
        public Figure ff;
        Boolean edit=false;
 
        public Form2()
        {
            InitializeComponent();
 
        }
 
 
        public void Form2_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                f = new Rect(0, 0, 0, 0, Color.Black, Form1.cbackground, 0, new ArrayList());//переменной f присваивается ссылка на объект
                f.One(e.X, e.Y);//координаты первой точки = 
            }
        }
        public void Form2_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.X < Form1.sWidth && e.Y < Form1.sHeight) //границы места для рисования
            {
            if (f != null)//если f ссылается на объект , то
            {
                f.Two(e.X, e.Y);//координаты первой точки =
                f.CreateRect();
                f.DrawDash(CreateGraphics());//рисуем пунктир
                f.Hide(CreateGraphics());//рисуем белую линию
                edit = true;//индикатор(что файл изменён)
            }
            }
        }
        public void Form2_MouseUp(object sender, MouseEventArgs e)
        {
            if (f != null)//если f ссылается на объект , то
            {
                f.Draw(CreateGraphics());//рисуем сплошную линию
                arraym.Add(f); //добавляем элементы в массив
                f = null;
                Invalidate();//перерисовка окна
            }
        }
        public void Form2_Paint(object sender, PaintEventArgs e)
        {
            Brush br = new SolidBrush(Color.White);
            Rectangle drawPlace = (Rectangle)arraym[0];
            e.Graphics.FillRectangle(br, drawPlace);
            foreach (Figure xy in arraym)//рисуем все фигуры, находящиеся в коллекции
            {
                xy.Draw(e.Graphics);
            }
            if (f != null)
            {
                f.Draw(e.Graphics);
            }
        }
 
        public void Form2_Load(object sender, EventArgs e)
        {
 
        }
 
        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (edit==true)
            {
                DialogResult result = MessageBox.Show("Сохранить?", "Сохранение", MessageBoxButtons.YesNoCancel);
                if (result == DialogResult.No) //Если нажал нет
                {
                    edit = false;
                }
 
                if (result == DialogResult.Yes) //Если нажал Да
                {
                    MessageBox.Show("Файл " + this.Text + " сохранён");
                    BinaryFormatter formatter = new BinaryFormatter();
                    Stream stream = File.Create(this.Text);
                    formatter.Serialize(stream, arraym);
                    stream.Close();
                    edit = false;
                  //  Form1.сохранитьToolStripMenuItem.Enabled = true;
                }
                if (result == DialogResult.Cancel) //Если нажал Отмена
                {
                    e.Cancel = true;
                }
            }
 
        }
        public void back(Rectangle r)
        {
            arraym.Insert(0, r);
        }
    }
 
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2015, 17:55
Ответы с готовыми решениями:

System.InvalidCastException: "Не удалось привести тип объекта "System.Byte[]" к типу "System.Drawing.Bitmap"."
Ошибка System.InvalidCastException: &quot;Не удалось привести тип объекта &quot;System.Byte&quot; к типу...

Выдает ошибку - "Не удалось привести тип объекта "TheMaze.FormLevel1" к типу "System.Windows.Forms.Label"."
Ругается вот на эту строчку: ((Label)sender).Visible = false; Вот код: using System; using...

Не удалось привести тип объекта "название проекта" к типу "System.IConvertible"."
вот код : var dataSource3 = new List&lt;Class1&gt;(); dataSource3.Add(new Class1() {...

Ошибка с заданием массива. Не удалось привести тип объекта "DataGridViewRow" к типу "System.IConvertible"
Не удалось привести тип объекта &quot;System.Windows.Forms.DataGridViewRow&quot; к типу...

1
2 / 2 / 1
Регистрация: 01.11.2014
Сообщений: 66
24.05.2015, 14:00  [ТС] 2
Rect.cs
Кликните здесь для просмотра всего текста
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Collections;
 
namespace _10._02._15
{
    [Serializable()]
    class Rect : Figure
    {
 
        public Rect(int xLeft, int yTop, int xRight, int yBottom, Color cline, Color cbackground, int sline, ArrayList back) : base(xLeft, yTop, xRight, yBottom, cline, cbackground, sline, back) { }
        [NonSerialized()]
        public Pen pen = new Pen(Color.Black, 1);
        [NonSerialized()]
        Brush cbackg;
        int xx, yy;
        public Rectangle rr;
        public override void One(int x, int y)
        {
            xx = x;
            yy = y;
        }
        public override void Two(int x1, int y1)
        {
            if (x1 < xx)//если значение правой точки меньше левой,то
            {
                XX1 = x1;
                XX2 = xx;
            }
            else
            {
                XX1 = xx;
                XX2 = x1;
            }
            if (y1 < yy)
            {
                YY1 = y1;
                YY2 = yy;
            }
            else
            {
                YY1 = yy;
                YY2 = y1;
            }
        }
        public override Rectangle CreateRect()
        {
            rr = Rectangle.FromLTRB(XX1, YY1, XX2, YY2);//создает структуру Rectangle с координатами точек
            return (rr);
        }
       
        public override void DrawDash(Graphics g)//пунктир
        {
            cline = Form1.cline;//устанавливаем цвет линии
            sline = LineWidth.sline;
            cbackg = new SolidBrush(cbackground);
            pen = new Pen(cline,sline);
            pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            g.FillRectangle(cbackg, rr);//заливка фигуры
            g.DrawRectangle(pen, rr);//рисование линии(контура фигуры)
        }
        public override void Hide(Graphics g)//белая линия
        {
 
                pen = new Pen(Color.White, sline);
                g.DrawRectangle(pen, rr);
        }
        public override void Draw(Graphics g)//сплошная линия
        {
            pen = new Pen(cline, sline);
            cbackg = new SolidBrush(cbackground);
            g.FillRectangle(cbackg, rr);
            g.DrawRectangle(pen, rr);
            drawing = false;
        }
    }
}


Добавлено через 20 часов 4 минуты
Проблема решена.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2015, 14:00

Ошибка: "Не удалось привести типа объекта "System.Windows.Forms.TextBox" к типу "System.IConvertible".""
Программа выдает такой текст: &quot;System.InvalidCastException: &quot;Не удалось привести типа объекта...

Как исправить исключение "не удалось привести тип объекта TextBox к типу IConvertible"
private void button1_Click(object sender, EventArgs e) { int x =...

Не удается неявно преобразовать тип "void" в "System.Drawing. Imaging. . AForge
подскажите пожалуйста при сборке фильтра вылезла вот такая ошибка :

Не был найден метод расширения "ItemIndex", принимающий тип "System.Windows.Forms.CheckedListBox"
Помогите пожалуйста, выходит ошибка на этом этапе кода. Ошибка...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru