如何向其他用户控件隐藏用户控件



我在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);
}

通常,您不希望一个控件了解另一个控件。当发生有趣的事情时,让您的自定义控件公开事件,并让应用程序代码处理显示/隐藏其他控件的逻辑。

例如:

MyUserControl ctl = new MyUserControl;
ctl.OnHideReports += OnHideReports;
ctl.OnShowReports += OnShowReports;
...

然后在OnHideReports的事件处理程序中,处理逻辑:

void OnHideReports(...)
{
_reports.Hide();
_purchaseReports.Show();
...
}

此外,请尝试使用WinForm设计器将用户控件添加到窗体中。与直接在代码中声明控件相比,从设计器中使用控件要容易得多。

更新:

此示例在一个窗体上有两个按钮和两个用户控件。单击按钮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();
}
}

尝试其他对象的隐藏方法和显示方法

您正在创建用户控件的新实例

相反,你需要这样的

Reports ra = (Reports)Page.FindControl("Reports1");//Reports1 should be the name the controls renders in the browser

这将允许您访问页面上的实例我的语法可能有点偏离,上次我这样做是在VB 中

最新更新