我有一个小组(命名为主面板),其中我调整了3个面板(即分别为panel1、panel2和panel3),以便它们都放置在同一位置,一个在另一个之上,而不是一个在另一个之内。加载窗体时,只有panel1可见,其余的panel2和panel3隐藏,现在单击panel1中名为button1的按钮,它打开panel2并隐藏panel1。类似地,单击panel2中名为button2的按钮时,它打开panel3并隐藏panel2。最后,当我单击button3或button4或button5时(这3个在面板3内)在面板3内,他们打开了一个新的表单。现在的问题是我已经设法通过点击所有这些按钮向前移动(或通过捕获击键)从panel1开始,但不知道如何使用击键从panel3移动到panel2和从panel2移动到panel1,返回到上一个面板。请建议我一种使用转义键实现此操作的方法。
public partial class directionform : Form
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.I:
// Simulate clicks on button1.
// button1.PerformClick();
buttonwithcue1.PerformClick();
break;
case Keys.U:
// Simulates clic on button2.
button2.PerformClick();
break;
case Keys.L:
buttonwithcue2.PerformClick();
return true;
//e.Handled = true;
// break;
case Keys.C:
buttonwithcue3.PerformClick();
return true;
//e.Handled = true;
// break;
case Keys.A:
buttonwithcue4.PerformClick();
return true;
//e.Handled = true;
// break;
case Keys.D:
buttonwithcue5.PerformClick();
return true;
//e.Handled = true;
// break;
default:
break;
if (keyData == Keys.Escape)
{
**// how to move back on pressing escape key**
}
return base.ProcessCmdKey(ref msg, keyData);
}
private void directionform_Load(object sender, EventArgs e)
{
panel5.Hide();
panel6.Hide();
}
private void buttonwithcue1_Click(object sender, EventArgs e)
{
panel1.Hide();
panel2.Show();
}
private void buttonwithcue2_Click(object sender, EventArgs e)
{
panel2.Hide();
panel3.Show();
}
// all three below buttons belong to panel 3 (last panel )
private void buttonwithcue3_Click(object sender, EventArgs e)
{
panel3.Hide();
// go to next form
}
private void buttonwithcue4_Click(object sender, EventArgs e)
{
panel3.Hide();
// go to next form
}
private void buttonwithcue5_Click(object sender, EventArgs e)
{
panel3.Hide();
// go to next form
}
1条答案
按热度按时间mm9b1k5b1#
保持面板的堆栈选取顺序。
Panel1(P1)是当前面板。
例如用户选择面板2,则当前面板P1被添加到堆栈。
用户选择Panel4,则将当前面板P2添加到堆栈。
Panel4是当前面板。
当用户按下退出键时,堆栈P2顶部的面板被弹出并成为当前面板。