我是C#的新手。我正在使用Windows窗体。
如截图所示,我有一个带有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
。
现在我想要点击UserControl4
,Show Previous UC
显示(上一个用户控件)。
如何显示之前的用户控件(最后一个用户控件显示在当前用户控件之前)? 请帮帮我,谢谢。
UserControl2
答案 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);
}
}