Возникает странный баг в C# winforms, связанный со скролом

Рейтинг: 1Ответов: 0Опубликовано: 26.04.2023

Я создаю чат, в котором у меня есть Panel, внутри которого находятся сообщения в виде другой Panel, на которой текст самого сообщения, имя и дата отправки. С каждым новым сообщением в переменную y_position_next_message добавляются высота прошлого сообщения и отступ для следующего.

В общем, у меня возник необычный баг связанный с этим. Как только список моих сообщений выходит за границу Panel, и появляется скролл, следующее сообщение делает огромный отступ без причины, при этом переменная y_position_next_message хранит правильные данные, как и должно быть, но виджет себя ведет совсем по-другому. Я заметил одну закономерность: если я не буду трогать скролл, а просто буду писать новые сообщения, баг не возникнет, но, как только я проскролю до последнего сообщения, следующее опять сделает прыжок. В общем, я в полном замешательстве, код функции создания сообщения ниже.

public int DrawMessage(Message message)
    {
        Panel MessageBlock = new Panel()
        {
            Location = new Point(x_position_message, y_position_next_message),
            BackColor = block_color,
            AutoSize = true,
            MaximumSize = new Size(width, 2110),
            
        };

     

        Label name = new Label()
        {
            Text = message.name_user,
            AutoSize = true,
            ForeColor = name_user_color,
            Font = font_name
        };


        Label text = new Label()
        {
            Text = message.message_text,
            AutoSize = true,
            MaximumSize = new Size(200, 2000),
            Font = font_message,
            Location = new Point(0, 30),
            BackColor = Color.Red
           
        };

        Label date = new Label()
        {
            Text = message.data_send,
            AutoSize = true,
            Font = date_font,
            Location = new Point(10, text.Height + 50)
        };

        MessageBlock.Controls.Add(name);
        MessageBlock.Controls.Add(text);
        MessageBlock.Controls.Add(date);
        MessageBox.Controls.Add(MessageBlock);

        Debug.WriteLine("Y:" + y_position_next_message + "/X: " + x_position_message + "fort: " + MessageBlock.Height + indent_y);
        return MessageBlock.Height + indent_y;
    }

введите сюда описание изображения

Ответы

Ответов пока нет.