Управление изменением размера события огня несколько раз - PullRequest
0 голосов
/ 25 сентября 2018

Я установил 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;
...