我目前有一个表单和一些用户控件,我在Form1
-mainpanel中设置了一个面板,因此每当我单击一个按钮时,其中一个用户控件就会显示在mainPanel上。 / p>
我的问题是控件(InfoSetting
)之一具有其他一些新按钮,当我单击它时,我希望mainPanel显示新的用户控件。但是,目前Form1中的所有其他按钮都可以正常工作,但是当我单击InfoSetting
按钮时,似乎什么都没有显示。
这是我来自Form1
的代码
public partial class Form1 : MetroFramework.Forms.MetroForm
{
InfoSettings infoSetting;
CashSales cashSales;
PriceSetting priceSetting;
public Form1()
{
InitializeComponent();
infoSetting = new InfoSettings();
cashSales = new CashSales();
priceSetting = new PriceSetting();
}
protected void ButtonClicked(object sender, EventArgs e)
{
buttonHandler(sender);
}
public void buttonHandler(object sender)
{
Button button = sender as Button;
mainPanel.Controls.Clear();
if (button != null)
{
switch (button.Name)
{
case "HomeBtn":
infoSetting.Dock = DockStyle.Fill;
mainPanel.Controls.Add(infoSetting);
break;
case "cashSalesBtn":
cashSales.Dock = DockStyle.Fill;
mainPanel.Controls.Add(cashSales);
break;
case "settingBtn":
infoSetting.Dock = DockStyle.Fill;
mainPanel.Controls.Add(infoSetting);
break;
case "priceSettingBtn":
cashSales.Dock = DockStyle.Fill;
mainPanel.Controls.Add(cashSales);
break;
default:
mainPanel.Controls.Clear();
break;
}
}
}
这是InfoSetting
用户控件中的代码
public partial class InfoSettings : UserControl
{
public InfoSettings()
{
InitializeComponent();
}
private void priceSettingBtn_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1.buttonHandler(sender);
}
}
答案 0 :(得分:2)
如https://community.rsa.com/ideas/1423所述,您可以向父表单添加通话:
adapter = StatusAdapter()
recyclerViewStatusList.adapter = adapter
答案 1 :(得分:0)
最好有一个公共类,您可以使用窗体和用户控件来访问它,并在其中使用要在其中运行的代码。像这样:
public class FormHelper
{
public void CodeIWantToRunIn2Places()
{
// Implementation Here
}
}
您可以将上述内容实现为单例,这样您就可以在两个地方进行访问。然后可以在表单类中执行以下操作:
FormHelper.Instance.CodeIWantToRunIn2Places();
在事件处理程序以及用户控件中。
答案 2 :(得分:0)
您可以将Form 1设置为“静态”,也可以将方法 buttonHandler(对象发送方)设置为“静态”。
然后在 priceSettingBtn_Click 内部,直接调用以下函数
Form1.buttonHandler(sender);
答案 3 :(得分:0)
我将有一个全局对象,该对象带有指向应用程序中所有表单的指针。
public Global
{
public Form1 MainForm;
public Dialog1 D1;
...
}
public static Global = new Global();
在创建每个表单时输入
Global.MainForm = form1;
那你就可以去
private void priceSettingBtn_Click(object sender, EventArgs e)
{
Global.MainForm.buttonHandler(sender);
}
正如其他人所说,最好不要调用单击处理程序,最好让此代码和真实的单击处理程序调用业务逻辑级别的函数