我有这个项目,您可以作为用户和员工登录,如果您以员工身份登录,某些按钮(如报告)将显示在主页上。
我有两个名为HomePage
和frmSignIn
的表单。如果用户从frmSignIn
登录,我希望HomePage
上的某个按钮可见。我尝试了几种方法,但无法让它发挥作用。
我确实按下按钮public
以确定它是否有效,但我知道这是不好的做法。
if (ValidCredentials(txtUsername.Text, txtPassword.Text) == true && checkBoxEmployee.Checked == true && txtBoxEmpPin.Text.Equals(employeePin))
{
this.DialogResult = DialogResult.OK;
this.Tag = _usersId;
this.Close();
MessageBox.Show("You have successfully logged in as an employee.");
HomePage hp = new HomePage();
hp.Button.Visible = true; // !!!! Does not work !!!!
}
答案 0 :(得分:1)
实现此目的的一种方法是让您的原始主页为frmSignIn所知。
为此,您可以在frmSignIn中创建一个属性,如
public MyHomePage Form { get; set; }
然后,在创建SignIn表单时,还要将主页的引用添加到frmSignIn的新实例中。类似的东西:
var mySignInForm = new frmSignIn();
mySignInForm.MyHomePage = this;
现在,你在frmSignIn中有一个不错的参考来做你想做的事。你仍然需要公开按钮。
另外,您可以使用相同的方式添加对所需按钮的引用,而不是完整的表单。
这可能不是最漂亮和最优雅的解决方案,但它会起作用。
答案 1 :(得分:1)
您可以使用公共属性来保持对按钮的引用,请尝试此示例。
Form1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 x = new Form2();
x.Button1 = this.button1;
x.Show();
}
}
窗体2
public partial class Form2 : Form
{
private Button _button1;
public Button Button1
{
get { return _button1; }
set { _button1 = value; }
}
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
_button1.Visible = false;
}
}
答案 2 :(得分:0)
为homepage
创建一个启用Button
public void EnableButton(){
this.Button.Visible = true;
}
并且这样做,
this.DialogResult = DialogResult.OK;
this.Tag = _usersId;
HomePage hp = new HomePage(); //here, creating instance of homepage
hp.EnableButton(); //This enables the required button
MessageBox.Show("You have successfully logged in as an employee.");
hp.showDialog(); //Shows HomePage
this.Hide(); //Hides login page.