通过其他表单C#Winform应用程序控制选项卡
Salam/Hi,我有两个winform,一个名为“fudafrm”,另一个名为“LoginForm”。当Id和密码正确时,我想通过LoginForm控制选项卡或关闭位于fudafrm中的3、5和8选项卡 这是什么 而loginfrm是: 我在LoginForm中尝试了thees代码:(错误代码) 请帮助我通过其他表单控制选项卡。通过其他表单C#Winform应用程序控制选项卡,c#,.net,winforms,visual-studio-2010,C#,.net,Winforms,Visual Studio 2010,Salam/Hi,我有两个winform,一个名为“fudafrm”,另一个名为“LoginForm”。当Id和密码正确时,我想通过LoginForm控制选项卡或关闭位于fudafrm中的3、5和8选项卡 这是什么 而loginfrm是: 我在LoginForm中尝试了thees代码:(错误代码) 请帮助我通过其他表单控制选项卡。 我正在使用windows窗体C#visual studio 2010。更改您的登录窗体,使其返回DialogResult。登录成功后,确定: public par
我正在使用windows窗体C#visual studio 2010。更改您的登录窗体,使其返回DialogResult。登录成功后,确定:
public partial class loginfrm : Form
{
public enum UserTypes
{
admin,
salesman,
accountant,
stockmanager
}
private UserTypes _UserType;
public UserTypes UserType
{
get { return _UserType; }
}
public loginfrm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (txt_userid.Text == "user" && txt_password.Text == "user")
{
// ... set _UserType somehow ...
this._UserType = UserTypes.salesman;
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
else
{
MessageBox.Show("Invalid User Name & password", "Error");
}
}
}
现在,回到主窗体,您可以检查结果并直接更改TabControl:
private void fudafrm_Load(object sender, EventArgs e)
{
this.Hide(); // not necessary from the Load() event
loginfrm f2 = new loginfrm();
if (f2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
switch(f2.UserType)
{
case loginfrm.UserTypes.admin:
// remove nothing
break;
case loginfrm.UserTypes.salesman:
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Remove(tabPage3);
break;
case loginfrm.UserTypes.accountant:
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Remove(tabPage2);
tabControl1.TabPages.Remove(tabPage5);
break;
case loginfrm.UserTypes.stockmanager:
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Remove(tabPage4);
tabControl1.TabPages.Remove(tabPage7);
tabControl1.TabPages.Remove(tabPage8);
break;
}
}
else
{
Application.Exit(); // ?
}
}
您可以将DialogResult设置为Cancel以指示登录失败。您需要表单的实例
fudafrm
。但不要像上面的局部变量那样创建它并将其丢弃。使用显示时使用的真实形式变量。然后,您可以使用f1.Controls.OfType()
获取该表单或以该表单提供属性。仍然无法获取该表单,需要更多详细信息或示例@timschmelter首先显示哪个表单?默认情况下为fudafrm,但我使用fudafrm的私有void fudafrm_Load(对象发送方,事件参数e){this.Hide();表单f2=新登录表单();f2.ShowDialog();}非常完美。!!谢谢@Idle\u Mind我可以抛出我自己的类似于用户对话框的对话框吗(因为对话框有限,无法为所有用户显示)user1=admin(show all tab)user2=saller(remove tab 1,3)user3=accountary(remove 1,2,5)user4=stockmanager(1,4,7,8)@Idle\u Mind你可以使用相同的方法,但也可以创建一个枚举来表示admin、saller、accounter、,还有股票经理。现在,在LoginForm中创建一个公共属性来保存登录用户的任何内容。最后,当“OK”返回到ShowDialog()时,您可以读取公共属性以确定要更改哪些选项卡。很好,但麻烦不大,因为我创建了一个按钮注销。并在其中编码编码:this.close()//对于关闭主窗体,loginfrm.showdialog();当我现在再次登录时,它不起作用,因为编码在私有空间内@懒散的头脑
private void fudafrm_Load(object sender, EventArgs e)
{
this.Hide(); // not necessary from the Load() event
loginfrm f2 = new loginfrm();
if (f2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
switch(f2.UserType)
{
case loginfrm.UserTypes.admin:
// remove nothing
break;
case loginfrm.UserTypes.salesman:
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Remove(tabPage3);
break;
case loginfrm.UserTypes.accountant:
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Remove(tabPage2);
tabControl1.TabPages.Remove(tabPage5);
break;
case loginfrm.UserTypes.stockmanager:
tabControl1.TabPages.Remove(tabPage1);
tabControl1.TabPages.Remove(tabPage4);
tabControl1.TabPages.Remove(tabPage7);
tabControl1.TabPages.Remove(tabPage8);
break;
}
}
else
{
Application.Exit(); // ?
}
}