Создаю PictureBox в классе, он отображается, но при попытке что-либо отрисовать на нём я получаю целое ничего. Ни ошибки, ни линии. Оставил кусок кода для наглядности. В case оно заходит, но линия не отрисовывается, как и любой другой объект.
class maker
{
string path;
string[] file_mass;
Form1 f1;
Size s1;
double[,] mass;
Graphics gr;
PictureBox p1;
Pen pen = new Pen(Color.Red,1);
public maker(Form1 main_form,string file_path)
{
path = file_path;
f1 = main_form;
s1 = new Size(500,600);
p1 = new PictureBox();
p1.Location = new Point(0, 0);
p1.Size = s1;
p1.BackColor=Color.Black;
f1.Controls.Add(p1);
f1.Size = s1;
gr = p1.CreateGraphics();
draw();
}
private void draw()
{
_file_mass();
_mass();
correct_size_move();
for (int i = 1; i < mass.GetLength(0); i++)
{
switch (mass[i,0])
{
case 0:
gr.DrawLine(pen, 0, 0, 50, 50);
break;
default:
break;
}
}
}
При загрузке формы вызываю так:
maker run = new maker(this, @"C:\Users\admin\Desktop\1.txt");
//Graphics gr;
...
//gr = p1.CreateGraphics();
p1.Paint += pbPaint;
private void draw()
{
using (Graphics gr = p1.CreateGraphics())
{
draw(gr);
}
}
private void pbPaint(object sender, System.Windows.Forms.PaintEventArgs e)
{
draw(e.Graphics);
}
private void draw(Graphics gr)
{
_file_mass();
_mass();
correct_size_move();
for (int i = 1; i < mass.GetLength(0); i++)
{
switch (mass[i,0])
{
case 0:
gr.DrawLine(pen, 0, 0, 50, 50);
break;
default:
break;
}
}
}
Или создайте картинку, нарисуйте на ней и назначьте p1.Image
.
Метод pbPaint
используется как обработчик события Paint
. Это событие происходит всякий раз, когда контролу надо перерисоваться.
Когда мы при создании контролов вызываем draw()
без параметров, мы что-то рисуем на поверхности контрола p1
. При ближайшей перерисовке контрола, то, что мы нарисовали, исчезнет. Так как draw()
вызывается до появления формы на экране, думаю, что мы этого вообще не увидим. И вот тут мы используем событие Paint
- рисуем все каждый раз, когда контрол сообщает нам, что он перерисовывает свою поверхность.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Необходимо загрузить большой csv файл в БД (1,5 Гб)Пробовал делать построчную запись с помощью INSERT - это очень долго
Недавно прочитал статью на хабре (upd: из комментов понял, что нужно прицепить цитату, по которой далее вопрос)