我在C#的学校项目中工作,但我遇到了问题。我做了一个用户控件,其中我有一些按钮,这就像一个带有按钮的横幅。这些按钮应显示和隐藏其他用户控件
以下是用户控件中的代码,其中包含按钮:
Reports ra = new Reports();
PurchaseReport rb = new PurchaseReport();
比我编写此代码的按钮之一:
ra.Hide();
rb.Show();
this.Controls.Add(rb);
rb.Location = new Point(130, 153);
但问题是它不会隐藏报告(ra)。并且它不显示购买报告(rb)。问题是什么?
public partial class MenuUserC : UserControl
{
Reports ra = new Reports();
PurchaseReport rb = new PurchaseReport();
public MenuUserC()
{
InitializeComponent();
}
private void ButtonItem15_Click(object sender, EventArgs e)
{
rb.Hide();
ra.Show();
this.Controls.Add(ra);
ra.Location = new Point(130, 153);
}
private void ButtonItem1_Click(object sender, EventArgs e)
{
ra.Hide();
rb.Show();
this.Controls.Add(rb);
rb.Location = new Point(130, 153);
}
答案 0 :(得分:4)
通常,您不希望一个控件知道另一个。 当有趣的事情发生时让你的自定义控件公开事件,让应用程序代码处理显示/隐藏其他控件的逻辑。
例如:
MyUserControl ctl = new MyUserControl;
ctl.OnHideReports += OnHideReports;
ctl.OnShowReports += OnShowReports;
...
然后在OnHideReports的事件处理程序中,处理逻辑:
void OnHideReports(...)
{
_reports.Hide();
_purchaseReports.Show();
...
}
此外,尝试使用WinForm设计器将用户控件添加到窗体。使用设计器中的Controls比直接在代码中声明它们要容易得多。
更新
此示例在表单上有两个按钮以及两个用户控件。单击按钮1时,它显示用户控件1并隐藏用户控件2.单击按钮2时,它会执行相反的操作。请注意,按钮和用户控件使用表单设计器添加到表单中,而不是手动添加到代码中。这将负责定位,将它们作为子控件添加到主窗体等。除非您有充分的理由,否则不要使用您自己的代码手动添加它们。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void UiButtonOneClick(object sender, EventArgs e)
{
myUserControlOne.Show();
myUserControlTwo.Hide();
}
private void UiButtonTwoClick(object sender, EventArgs e)
{
myUserControlOne.Hide();
myUserControlTwo.Show();
}
}
答案 1 :(得分:3)
尝试隐藏方法以及其他对象的show方法
答案 2 :(得分:1)
您正在创建用户控件的新实例
相反,你需要这样的东西
Reports ra = (Reports)Page.FindControl("Reports1");//Reports1 should be the name the controls renders in the browser
将允许您访问页面上的实例 我的语法可能有点偏差,上次我这样做是在VB