隐藏c#中另一个表单的tabpages

时间:2016-03-08 12:08:17

标签: c# forms hide tabpage

我有一个登录表单和另一个表单。当用户是x而密码是y我想完全显示表格而且我没有这个部分的问题但是当用户z通过t登录时我想他不能显示3个标签页中的2个。总之,如果你能告诉我如何从另一个表单中隐藏表单的标签页,我将非常感激。

 private void button1_Click(object sender, EventArgs e)
    {
        if (textBox1.Text == "x" && textBox2.Text == "123")
        {
            this.Hide();
            Form1 fr1 = new Form1();
            fr1.ShowDialog();

        }
        else
        {
            if (textBox1.Text == "z" && textBox2.Text == "t")
            {
                this.Hide();
                Form1 fr1 = new Form1();
               //how can I hide 2 out of 3 tabpages on form1(fr1) for this user
                fr1.ShowDialog();




            }
         }

1 个答案:

答案 0 :(得分:0)

  

如果您能告诉我如何从其他表单隐藏表单的标签页,我将非常感激。

听起来您需要一种将信息从一个Form传递到另一个Form的方法。通常这可以通过OnLoad构造函数来实现,这样在实例化时,存在关于如何显示特定控件的相关信息。如果由于某种原因,使用构造函数方法并不理想 - 您可以使用共享机制来存储和收集相关数据。通常,覆盖Form1是进行调用以收集所述数据的不错选择。

获得所需数据后,您可以使用它来显示或隐藏标签页。我通常建议使用data binding并使用MVVM pattern表示WinForms。

例如,您可以使用一个模型来表示有关登录用户的各种详细信息,然后绑定到各种控件属性。

正如我所提到的,您希望有一种方法可以从其构造函数向private bool _hideTwoOutOfThreeTabs; public Form1(bool hideTwoOutOfThreeTabs = false) { _hideTwoOutOfThreeTabs = hideTwoOutOfThreeTabs; } 传达可见性。所以将它添加到构造函数中:

OnLoad

然后像这样覆盖protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (_hideTwoOutOfThreeTabs) { foreach (var tabPage in tabControl1.TabPages.Cast<TabPage>()) { // TODO: Some logical test to ensure this is the desired tab control to hide // if (tabPage) { tabPage.Visible = false; } } } }

private void button1_Click(object sender, EventArgs e)
{
    var textOne = textBox1.Text,
        textTwo = textBox2.Text;

    if (textOne == "x" && textTwo == "123")
    {
        Hide();
        using(var fr1 = new Form1())
        {
            fr1.ShowDialog();
        }
    }
    else if (textOne == "z" && textTwo == "t")
    {
        Hide();
        using(var fr1 = new Form1(true))
        {
            fr1.ShowDialog();
        }
    }
}

最后你的方法看起来像这样:

ng-repeat