Возникает странный баг в C# winforms, связанный со скролом
Я создаю чат, в котором у меня есть 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;
}