我正在 C# Windows 窗体应用程序中创建一个程序。
让我给你一个我正在做的事情的场景:
- 登录程序(登录系统)
- 该程序将确定用户的权限值(假设我是 3)
- 根据权限值,主菜单将显示按钮 3a。如果用户的权限值大于 2,用户将查看所有按钮 3b。如果用户的权限值小于 2,用户只会看到 1 个按钮
- 当我注销时,我正在使用 .hide 隐藏主菜单并再次显示登录表单。
- 我登录另一个用户(权限值 = 1)
- 所有按钮都将显示,而不仅仅是应该显示的 1。
有谁知道登录后如何根据权限值“重做”主菜单?
也许这个?
const int firstButtonY = 20;
const int padding = 20;
int currentY = firstButtonY;
foreach (var control in this.Controls)
{
if (control.GetType() != typeof(System.Windows.Forms.Button))
continue;
var curButton = (Button) control;
if (!curButton.Visible)
continue;
curButton.Top = currentY;
currentY += padding + curButton.Height;
}
而不是在 Form1 中打开新实例(在我的情况下为 Form3)Form1_Load
frm3 = new Form3(this);
并在指定事件触发后显示
frm3.Show();
并取消Form3_Closing
private void Form3_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
this.Hide();
}
frm3 = new Form3(this);
frm3.Show();
并评论创建新实例Form1_Load
//frm3 = new Form3(this);
并评论隐藏 form3 部分
private void Form3_FormClosing(object sender, FormClosingEventArgs e)
{
//e.Cancel = true;
//this.Hide();
}
因为frm3.Show()
在 form3 之后this.Hide()
不会触发
private void Form3_Load(object sender, EventArgs e)