如何从其他用户控件隐藏用户控件?

时间:2012-12-05 19:48:26

标签: c# .net winforms user-controls

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

    }

3 个答案:

答案 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