C#在没有窃取焦点的情况下向流量控制添加按钮

时间:2015-10-23 18:07:21

标签: c# windows winforms

在我的应用程序中,我动态创建按钮并将它们添加到稍后清除的流控件中。我有一个计时器刷新每X秒清除然后添加按钮。这一切都在主表格上完成。

问题是当我启动子窗体时,每次将控件添加到流控件时,主窗体都会窃取焦点。

以下是我的代码,它可以动态清除并在主窗体上添加控件。

我在添加控件之前调用它

flw_users.Controls.Clear();

这就是我所说的动态创建/添加按钮到流控件。

private void DisplayNewMobileUser(string MobileUserName)
    {

        // Set Button properties
        Button button = new Button();
        button.Text = MobileUserName;
        button.Size = new System.Drawing.Size(171, 28);
        button.Name = MobileUserName;


        button.BackColor = System.Drawing.Color.White;
        button.FlatAppearance.BorderColor = System.Drawing.Color.White;
        button.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Bold);

        button.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        button.ForeColor = System.Drawing.Color.Black;
        button.Margin = new System.Windows.Forms.Padding(0, 1, 0, 1);
        button.TextAlign = System.Drawing.ContentAlignment.TopLeft;



        button.Click += new EventHandler(MobileUserName_OnClick);
        flw_users.Controls.Add(button);
    }

有没有办法在流量控制中添加按钮而不会总是窃取焦点?

1 个答案:

答案 0 :(得分:-1)

感谢LarsTech,我研究了如何正确处理添加到flw_users的每个控件。通过更改OnClick事件以将焦点更改为标签来修复主要问题,这反过来不会导致主窗体在每次清除和重新添加控件时获得最大值。因此,每当我点击按钮时按钮仍然具有焦点,而新表格出现时。

谢谢大家!

以下是我用来正确清除控件的代码

private void ClearUsers()
    {
        List<Control> ctrls = new List<Control>();

        foreach (Control c in flw_users.Controls)
        {
            ctrls.Add(c);
        }

        flw_users.Controls.Clear();

        foreach (Control c in ctrls)
        {
            c.Dispose();
        }
    }