Добавить текст в графический редактор

В названии и заключается проблема. Не получается добавить текст. Пробовала так, неправильно:

private void pic_MouseUp(object sender, MouseEventArgs e)
        {
            if (index == 6)
            {
                g.DrawString(s, font, brush, x, y);
            }
        }
private void btn_text_Click(object sender, EventArgs e)
        {
            index = 6;
        }

Буду благодарна любой помощи, файл прикрепляю.
Paint2.rar (215.8 КБ)

Рисовать в OnPaint надо.
То есть по клику можно добавить координаты и текст в какой-нибудь список (и может быть еще вызвать что-то типа Invalidate()), а в OnPaint выводить этот список.

Как это сделать?

Что такое вообще OnPaint, я еще не очень в этом разбираюсь, но работу сделать нужно для учебы.

Overriding the OnPaint Method - Windows Forms .NET Framework | Microsoft Docs

Как тут например Анимация в c#

Сделала так, но все равно не работает:

public class FirstControl : Control
        {
            public FirstControl() { }
            protected override void OnPaint(PaintEventArgs e)
            {
                base.OnPaint(e);
                
                e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);
            }
        }
private void pic_MouseUp(object sender, MouseEventArgs e)
        {
            ....
            if (index == 6)
            {
                g.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);
            }
        }
private void btn_text_Click(object sender, EventArgs e)
        
        {
            index = 6;
        }

Так надо разобраться, а не тупо копипастить )
OnPaint надо объявлять в форме или контроле, где рисуете, а не создавать неиспользуемый FirstControl.

Рисую в pictureBox переименовала в pic в коде есть pictureBox свойство paint туда вставить?

private void pic_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            if (paint)
            {
                if (index == 3)
                {
                    g.DrawEllipse(p, cX, cY, sX, sY);
                }
                if (index == 4)
                {
                    g.DrawRectangle(p, cX, cY, sX, sY);
                }
                if (index == 5)
                {
                    g.DrawLine(p, cX, cY, x, y);
                }
            }
        }

Там и надо рисовать.

        private void pic_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            g.DrawString("Hello", Font, new SolidBrush(Color.Black), 0, 0);
        }

(хз что за index, он тут явно странно используется если вам не только один нарисованный объект одновременно отображать надо)

Ну а чтобы рисовать любое количество объектов с указанными пользователем параметрами надо по нажатию кнопки и т.д. не рисовать, а просто добавить в список какой-то объект (см. ООП) с нужными параметрами, и наверно вызвать Invalidate() у pic. А в pic_Paint проходить этот список и рисовать то, что задано там.

Все равно не работает(
Можете, пожалуйста, в файле попробовать исправить?
Насчет index точно не знаю, в видео он в основе использовался, объяснялось, что например метод рисования карандашом линии свободной формы если значение bool paint = true и index == 1, пользователь щелкает и перемещает мышь. MouseUp, mouseMove и pic_Paint как присвоение, а в самой кнопке уже просто index = 1; index = 2 и тд.

Если так делать, то всё предыдущее нарисованное будет пропадать как минимум если свернуть программу или поменять ее размер (ну и при разных других взаимодействиях с элементами формы). Или наоборот, может долго не появляться.

    public partial class Form1 : Form
    {
        int index;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            index = 1;

            pictureBox1.Invalidate();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            index = 2;

            pictureBox1.Invalidate();
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            if (index == 1)
            {
                g.DrawString("Hello", new Font(Font.FontFamily, 20f), new SolidBrush(Color.Black), 0, 0);
            }
            if (index == 2)
            {
                g.DrawString("world", new Font(Font.FontFamily, 20f), new SolidBrush(Color.Black), 100, 0);
            }
        }
    }
}

поэтому и говорю

Так что надо искать другое видео, где делают что-то более правильное ))
Типа как выше описал со списком.

Мне нужно, чтобы можно было написать любой текст, как в paint)