Я установил Resize
событие на FlowLayoutPanel
, и это код внутри него:
private void OnFlowPanelResize(object sender, EventArgs e)
{
if (FlowLayoutPanelSize != Size.Empty && FlowLayoutPanelSize != FlowLayoutPanel.Size)
{
foreach (Control c in FlowLayoutPanel.Controls)
{
double w = c.Width + c.Margin.Left + c.Margin.Right - 1;
double procentualno = w / FlowLayoutPanelSize.Width * 100;
//This line is problem
c.Width = Convert.ToInt32(((decimal)FlowLayoutPanel.Width * (decimal)procentualno));
int a = c.Width;
}
}
FlowLayoutPanelSize = FlowLayoutPanel.Size;
}
И, как вы можете видеть, я прокомментировал строку, которая является проблемой.Проблема состоит в том, что когда точка останова вводит void
и сначала проходит событие if
(оно существует только для безопасного кода), она входит в цикл foreach и работает нормально, пока не достигнет строки с комментариями.Когда он добирается, он не продолжает, а возвращается к началу void
и передает его один раз, а затем продолжает обычное выполнение с циклом.
Проблема в том, что при возврате в void возникают ненормальные значения.
Я пытался сделать это в 2 отдельных мероприятиях.Resize
и SizeChanged
вот так:
private void OnFlowPanelResize(object sender, EventArgs e)
{
if (FlowLayoutPanelSize != Size.Empty && FlowLayoutPanelSize != FlowLayoutPanel.Size)
{
}
FlowLayoutPanelSize = FlowLayoutPanel.Size;
}
private void OnFlowPanelSizeChanged(object sender, EventArgs e)
{
foreach (Control c in FlowLayoutPanel.Controls)
{
double w = c.Width + c.Margin.Left + c.Margin.Right - 1;
double procentualno = w / FlowLayoutPanelSize.Width * 100;
c.Width = Convert.ToInt32(((decimal)FlowLayoutPanel.Width * (decimal)procentualno));
int a = c.Width;
}
}
Но все тот же результат.
Если вы хотите скопировать код, который является событием, которое я имею, и вот FlowLayoutPanel
настроек Iиметь:
this.FlowLayoutPanel.Location = new System.Drawing.Point(4, 34);
this.FlowLayoutPanel.Size = new System.Drawing.Size(this.Width - this.ElementProperties.Width - 12, this.Height - 38);
this.FlowLayoutPanel.BackColor = System.Drawing.Color.White;
this.FlowLayoutPanel.Anchor = (System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right);
this.FlowLayoutPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.FlowLayoutPanel.HorizontalScroll.Maximum = 0;
this.FlowLayoutPanel.AutoScroll = false;
this.FlowLayoutPanel.VerticalScroll.Visible = false;
this.FlowLayoutPanel.AutoScroll = true;
this.FlowLayoutPanel.Resize += OnFlowPanelResize;
this.FlowLayoutPanel.SizeChanged += OnFlowPanelSizeChanged;