每次按下按钮时如何停止面板加载

时间:2019-07-12 12:33:43

标签: c# forms winforms panel

我有一个Windows Form应用程序,并且其中有多个用户控件。 我通过这种方法按下他们的按钮来显示它们;

private void UC_Bring(Control uc) 
{
  uc.Dock = DockStyle.Fill;
  panelControls.Controls.Clear();
  panelControls.Controls.Add(uc);
}

例如; -第一个按钮是“主页”按钮。 (这是启动页面) -第二个按钮是“操作”按钮。 我单击“操作”按钮,然后在此用户控件中填充一些文本框。但是,如果我再次单击“操作”按钮,则用户控件将重置自身,并且文本框将被清除。

如果所提到的用户控件正在使用中/已经显示在屏幕上,我不想再带给用户控件。我怎样才能做到这一点?

Screenshot

谢谢。

我之前尝试过

private void UC_Bring(Control uc) 
{
        uc.Dock = DockStyle.Fill;
        if (uc.Visible!=true)
        {
            panelControls.Controls.Clear();
            panelControls.Controls.Add(uc);
        }


    }

我用按钮单击事件以及带来方法来编辑它;

private void UC_getir(Control uc) //User control çağırma metodu
{
  uc.Dock = DockStyle.Fill;
  panelControls.Controls.Clear();
  panelControls.Controls.Add(uc);           
}
private void BtnOp_Click(object sender, EventArgs e)
{
  UC_Op ucOp = new UC_Op();
  UC_getir(ucOp);
}

1 个答案:

答案 0 :(得分:1)

您很可能每次都创建一个新控件。您只需分别Clear() PanelAdd()UserControl每一次不同的点击。如果UserControl不在容器中,则它将不可见。这意味着您也不必无所事事。这是一个完全可行的解决方案。

public partial class Form1 : Form
{
    private ucHome HomeUserControl = new ucHome();
    private ucOperations OperationsUserControl = new ucOperations();
    private ucMaterials MaterialsUserControl = new ucMaterials();
    private ucSettings SettingsUserControl = new ucSettings();

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        HomeUserControl.Dock = DockStyle.Fill;
        OperationsUserControl.Dock = DockStyle.Fill;
        MaterialsUserControl.Dock = DockStyle.Fill;
        SettingsUserControl.Dock = DockStyle.Fill;
    }

    private void UC_Bring(Control uc)
    {
        panelControls.Controls.Clear();
        panelControls.Controls.Add(uc);
    }

    private void btnHome_Click(object sender, EventArgs e)
    {
        UC_Bring(HomeUserControl);
    }

    private void btnOperations_Click(object sender, EventArgs e)
    {
        UC_Bring(OperationsUserControl);
    }

    private void btnMaterials_Click(object sender, EventArgs e)
    {
        UC_Bring(MaterialsUserControl);
    }

    private void btnSettings_Click(object sender, EventArgs e)
    {
        UC_Bring(SettingsUserControl);
    }
}

public class ucHome : UserControl { }
public class ucOperations : UserControl { }
public class ucMaterials : UserControl { }
public class ucSettings : UserControl { }