通过单击一个用户控件将用户控件置于最前面

Bringing user control to front by clicking on one user control

我需要一些帮助。 我有 4-5 个用户控件堆叠在一个 another.All 上,大小相同,只有顶部的那个是可见的。 我在最顶部的用户控件上有一个按钮。 我希望当我单击按钮时,用户控件被发送到后面,另一个用户控件被带到前面。 这是我的代码:

 private void btnaddcstmrdashbrd_Click(object sender, EventArgs e)
    {
        addorder addorder = new addorder();
        this.Visible = false;
        this.SendToBack();
        addorder.Visible = true;
        addorder.BringToFront();
    }

实际情况是,最顶层的 userControl 不再可见。 但是,其他用户控件不会出现在前面并且不可见。 非常感谢您的帮助。

如果用户控件的类型不同,可以参考下面的代码。给用户控件中的按钮绑定同样的方法,使用switch判断用户控件类型

UserControl1 userControl1 = new UserControl1();
UserControl2 userControl2 = new UserControl2();
UserControl3 userControl3 = new UserControl3();

private void Form1_Load(object sender, EventArgs e)
{
    Button button1 = new Button
    {
        Text = "Next Control",
        Dock = DockStyle.Bottom,
    };
    button1.Click += Button_Click;

    Button button2 = new Button
    {
        Text = "Next Control",
        Dock = DockStyle.Bottom,
    };
    button2.Click += Button_Click; 
        
    Button button3 = new Button
    {
        Text = "Next Control",
        Dock = DockStyle.Bottom,
    };
    button3.Click += Button_Click;

    userControl1.Controls.Add(button1);
    userControl2.Controls.Add(button2);
    userControl3.Controls.Add(button3);

    Controls.Add(userControl1);
    Controls.Add(userControl2);
    Controls.Add(userControl3);
}

private void Button_Click(object sender, EventArgs e)
{
    string controlName = ((Button)sender).Parent.Name;

    switch (controlName)
    {
        case "UserControl1":
            userControl2.BringToFront();
            break;
        case "UserControl2":
            userControl3.BringToFront();
            break;
        case "UserControl3":
            userControl1.BringToFront();
            break;
    }
}

测试结果,


更新

如果按钮是从设计器添加的,可以参考下面的代码

首先,在Form1.cs中定义用户控件属性。并通过参数传递Form对象。

public partial class Form1 : Form
{
    public static Form1 form1;

    public Form1()
    {
        InitializeComponent();
        form1 = this;
    }

    public UserControl1 UC1{get;set;}
    public UserControl2 UC2{get;set;}
    public UserControl3 UC3{get;set;}

    private void Form1_Load(object sender, EventArgs e)
    {
        UC1 = new UserControl1(form1);
        UC2 = new UserControl2(form1);
        UC3 = new UserControl3(form1);
        Controls.Add(UC1);
        Controls.Add(UC2);
        Controls.Add(UC3);
    }
}

然后修改UserControl1.cs中的代码。

public partial class UserControl1 : UserControl
{
    public Form1 f1;

    public UserControl1(Form1 form1)
    {
        InitializeComponent();
        f1 = form1;
    }

    // this button is dragged and dropped from toolbox
    private void button1_Click(object sender, EventArgs e)
    {
        f1.UC2.BringToFront();
        //f1.UC3.BringToFront();
        //f1.UC1.BringToFront();
    }
}

对其余的用户控件执行相同的操作。