c#将按钮添加到流控制中,而不会窃取焦点

本文关键字:焦点 按钮 添加 流控制 | 更新日期: 2023-09-27 18:19:03

在我的应用程序中,我动态地创建按钮并将它们添加到稍后被清除的流控制中。我设置了计时器,每隔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);
    }

是否有一种方法可以在流量控制中添加按钮,而不会总是窃取焦点?

c#将按钮添加到流控制中,而不会窃取焦点

多亏了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();
        }
    }