如何从当前用户控件显示以前的用户控件?

时间:2015-12-13 14:35:02

标签: c#

我是C#的新手。我正在使用Windows窗体。

screenshot

如截图所示,我有一个带有4个按钮和4个用户控件的form1。

点击JSONArray jsonArray = jsnobject.getJSONArray("array-key"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject newObj = jsonArray.getJSONObject(i); } 并显示show UserControl1

点击UserControl1并显示show UserControl2

点击UserControl2并显示show UserControl3

点击UserControl3并显示show UserControl4

我想要做的是:当我点击UserControl4(在用户控件4上)时,会显示上一个用户控件。

例如:

点击Show Previous UC,然后显示show UserControl2。 点击UserControl2并显示show UserControl4

现在我想要点击UserControl4Show Previous UC显示(上一个用户控件)。

如何显示之前的用户控件(最后一个用户控件显示在当前用户控件之前)? 请帮帮我,谢谢。

UserControl2

2 个答案:

答案 0 :(得分:1)

一个简单的解决方案是向您的班级添加成员变量。

所以你的课程看起来像是:

public partial class Form1 : Form
{
    UserControl prevControl;
    // Etc...

因此,当您单击UC2的按钮时,可以将prevControl设置为UC2。

private void ShowUserControl2_Click(object sender, EventArgs e)
{
    UC2.Visible = true;
    prevControl = UC2;

    UC1.Visible = false;
    UC3.Visible = false;
    UC4.Visible = false;
}

在&#34;显示上一个控件&#34;的事件处理程序上按钮:

private void ShowPrevControl_Click(object sender, EventArgs e)
{
    if (prevControl != null) prevControl.Visible = true;
}

UserControl是C#中的引用,这使得这成为可能。

答案 1 :(得分:1)

您需要跟踪哪个用户控件是页面中的上一个用户控件(也可能是当前用户控件,除非您想要迭代UC以查找)。在页面中使用此字段。

public partial class Form1 : Form
{
    UserControl[] userControls = new []{ 
        new UserControl1(), 
        new UserControl2(),
        new UserControl3(),
        new UserControl4()
    };
    UserControl previous;
    UserControl current;

    public Form1()
    {
        InitializeComponent();

        foreach(var uc in UserControls)
        {
            uc.Click += ShowPrevControl_Click;
            Controls.Add(uc);
        }
    }

在事件中(您只需要一个)

private void ShowUserControl_Click(object sender, EventArgs e)
{
    foreach(UserControl uc in UserControls)
    {
        if(uc.Name == (string)((Control)sender).Tag)
        {
            previous = current;
            uc.Visible = true;
            current = uc;
        }
        else
        { 
            uc.Visible = false;
        }
    }
}

private void ShowPrevControl_Click(object sender, EventArgs e)
{
    if (previous != null) 
    {
        foreach(var uc in UserControls)
        {
            uc.Visible = false;
        }
        var temp = current;
        previous.Visible = true; 
        current = previous;
        previous = temp; 
    }
}

为每个按钮设置Tag属性,以保存它应控制的UserControl的名称(UserControl1,UserControl2,UserControl3或UserControl4)。

让所有按钮点击事件由ShowUserControl_Click处理。

在您的用户控件中创建一个新的公共事件(如果所有人都应该处理点击),该页面可以使用您的ShowPrevControl_Click方法处理:

public UserControlx : UserControl
{
    public event EventHandler Click;

    public UserControlx()
    {
        Button.Click += Button_Click;
    }

    private void Button_Click(object sender, EventArgs e)
    {
        if(Click != null)
            Click(this, EventArgs.Empty);
    }
}