1

私は C# で学校のプロジェクトに取り組んでいますが、問題があります。ボタンがいくつかあるユーザー コントロールを作成しました。これは、ボタンを含むバナーのようなものです。これらのボタンは、他のユーザーコントロールを表示および非表示にする必要があります

ボタンを持つユーザーコントロールのコードは次のとおりです。

 Reports ra = new Reports();
 PurchaseReport rb = new PurchaseReport();

ボタンの1つよりも、このコードを書きました:

 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 デザイナを使用してフォームにユーザー コントロールを追加してみてください。コードで直接宣言するよりも、デザイナーからコントロールを操作する方がはるかに簡単です。

アップデート:

この例では、フォームに 2 つのボタンと 2 つのユーザー コントロールがあります。ボタン 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

hide メソッドと他のオブジェクトの show メソッドを試してください。

于 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 に答える