0

我正在 C# Windows 窗体应用程序中创建一个程序。

让我给你一个我正在做的事情的场景:

  1. 登录程序(登录系统)
  2. 该程序将确定用户的权限值(假设我是 3)
  3. 根据权限值,主菜单将显示按钮 3a。如果用户的权限值大于 2,用户将查看所有按钮 3b。如果用户的权限值小于 2,用户只会看到 1 个按钮
  4. 当我注销时,我正在使用 .hide 隐藏主菜单并再次显示登录表单。
  5. 我登录另一个用户(权限值 = 1)
  6. 所有按钮都将显示,而不仅仅是应该显示的 1。

有谁知道登录后如何根据权限值“重做”主菜单?

4

2 回答 2

0

也许这个?

        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;

        }
于 2012-12-05T22:25:14.560 回答
0

而不是在 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)
于 2014-03-11T03:18:45.560 回答