c# обновить графический холст после изменения размера панели - PullRequest
0 голосов
/ 21 апреля 2020

Должно быть, простой вопрос, но не могу найти ответ, должно быть, потому что я новичок в c#.

У меня есть windows форма с этой панелью, скажем, 500x500 пикселей. Когда форма инициализируется, она также создает графику g.

Затем, выбрав цвет, я могу нарисовать на панели пером p.

Все это прекрасно работает.

Но затем я изменяю размер панели, нажимая кнопку, давая ей 500 пикселей влево (или вниз).

Теперь, хотя я вижу дополнительные 500 пикселей, при рисовании он все еще только dr aws в пределах 500x500 (вероятно, потому что это был размер panel1 при инициализации g = panel1.creategraphics ().

Итак, как мне обновить эту область, чтобы рисовать на ней? Я пытался сделать это с помощью clip en clipbounds, но, похоже, это что-то другое (и это тоже не получилось).

Любая помощь ценится. Спасибо.

1 Ответ

0 голосов
/ 22 апреля 2020
    ArrayList listofpoints;
    bool moving = false;

    int panelhoogte = 500;
    int panelbreedte = 500;
    Color def = Color.Black;

    public Form1()
    {
        InitializeComponent();
        listofpoints = new ArrayList();
    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {
        PictureBox p = (PictureBox)sender;
        def = p.BackColor; 
    }

    private void panel1_MouseDown(object sender, MouseEventArgs e)
    {
        Point punt = new Point(e.X, e.Y);
        listofpoints.Add(punt);
        moving = true;
        panel1.Cursor = Cursors.Cross;
    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        Graphics g = panel1.CreateGraphics();
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
        Point punten = new Point(e.X, e.Y);
        Pen penceel = new Pen(def, 5);
        penceel.StartCap = penceel.EndCap = System.Drawing.Drawing2D.LineCap.Round;
        if (moving && listofpoints.Count > 1)
        {
            g.DrawLine(penceel, (Point)listofpoints[listofpoints.Count - 1], punten);
            listofpoints.Add(punten);
        }
    }

    private void panel1_MouseUp(object sender, MouseEventArgs e)
    {
        moving = false;
        panel1.Cursor = Cursors.Default; 
    }

    private void button2_Click(object sender, EventArgs e)
    {
        panelhoogte = panelhoogte + 500;
        panel1.Height = panelhoogte;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        panelbreedte = panelbreedte + 500;
        panel1.Width = panelbreedte;
    }
...