我有一个登录表单和另一个表单。当用户是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();
}
}
答案 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