我的程序中有许多UserControl。没有输入密码,只有一个用户控件(默认)可见。
如果需要查看其他用户控件,则用户必须输入密码,然后,应立即出现另一种形式(用户单击呼叫的按钮)。
对于模型,我们有2个用户控件。 第一个将在启动时立即打开,要打开第二个,我们必须单击其启动按钮,然后将出现一个密码输入,并且(如果密码正确)将打开所需的表格。
最后一个代码显示是我的问题。
我有UserLeftPanel
总是作为左面板和MainForm
(在代码Form1
中)消失。
在LeftUserPanel
中,有许多按钮被点击,Form1
将使UserControl
上扬。
我不明白如何正确地从基类(Form1
)中获取方法。
专门针对我的程序: 而且,如果调用的所有用户逻辑都不正确,我将很高兴看到正确的调用。
通过单击显示的每个UserControl都具有这种构造
private static UserMainPanel_Saved instanse;
public static UserMainPanel_Saved Instanse
{
get
{
if(instanse==null)
instanse =new UserMainPanel_Saved();
return instanse;
}
}
UserLeftPanel
中的代码
public delegate void Handler(object sender,EventArgs e, int control) ;
public event Handler ButtonClick;
protected void ButtonSavedMessages_Click(object sender, EventArgs e)
{
int formnumber = 0;
this?.ButtonClick(this, e,formnumber);// There are ButtonClick Event in Form1
}
Form1中的代码
private void userLeftPanel1_Load(object sender, EventArgs e)
{
userLeftPanel1.ButtonClick += UserControl_ButtonClick;
UserControl_ButtonClick(sender, e, 0);//to display form without password by default
}
public void UserControl_ButtonClick(object sender, EventArgs e,int number)
{
UserControl con=null ;
if (number == 0)
con = UserMainPanel_Saved.Instanse;
else
{
if (UserPassword.Password)
{
if (number == 1)
con = UserMainDaybook.Instanse;
}
else
{
con = UserPassword.Instanse;
}
}
if (!MainPanel.Controls.Contains(con))
{
MainPanel.Controls.Add( con);
con.Dock = DockStyle.Fill;
con.BringToFront();
}
else
{
con.BringToFront();
}
}
“ UserPassword”中的代码
private void button1_Click(object sender, EventArgs e)
{
Password = true;// In this place will be Some Logic
//And my idea is to Invoke there UserControl_ButtonClick( ... ) method, but I don't know how
}
答案 0 :(得分:1)
您可以尝试使用逻辑将事件与方法分离(请注意两种不同的方法:UserControl_ButtonClick
和UserControlClick
:
public void UserControl_ButtonClick(object sender, EventArgs e, int number)
{
UserControlClick(number);
}
public void UserControlClick(int number)
{
UserControl con=null ;
if (number == 0)
con = UserMainPanel_Saved.Instanse;
else
{
if (UserPassword.Password)
{
if (number == 1)
con = UserMainDaybook.Instanse;
}
else
{
con = UserPassword.Instanse;
}
}
if (!MainPanel.Controls.Contains(con))
{
MainPanel.Controls.Add( con);
con.Dock = DockStyle.Fill;
con.BringToFront();
}
else
{
con.BringToFront();
}
}```
然后在UserPassword中输入:
private void button1_Click(object sender, EventArgs e)
{
Password = true;// In this place will be Some Logic
Form1.Instance.UserControlClick(0);
//And my idea is to Invoke there UserControl_ButtonClick( ... ) method, but I don't know how
}
这样,您无需发送object sender, EventArgs e, int number
,只需发送号码即可。