1

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

    }
4

3 回答 3

4

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

例如:

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();
    }
}
于 2012-12-05T20:01:41.150 回答
3

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

于 2012-12-05T22:03:54.647 回答
1

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

相反,您需要这样的东西

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

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

于 2012-12-05T19:57:35.117 回答