1

データ入力フォーム (ユーザー コントロール) を開く devexpress ナビゲーション メニュー項目があります。ユーザー コントロールには、ユーザーがテキスト ボックスを空白のままにしないように強制する検証規則があります。そして、これまでのところかなりうまく機能しています。

しかし、データ入力ユーザー コントロールが既に表示されているときに、他のメニュー項目をクリックすると問題が発生します。今回は、画面がフリーズしてスタックするだけで、システムを再起動する必要があります。考えられる原因と解決策は?事前に感謝します ここにいくつかのコードのスナップショットがあります:

    //Here is what I've on the main form. It has a panel control called mainPanel to display the user controls   
    private XtraUserControl uc;

    private void MainForm_Load(object sender, EventArgs e)
    {
        displayUserControl("Data Entry");
        //...
    }
    private void navigationBar_LinkClicked(object sender, DevExpress.XtraNavBar.NavBarLinkEventArgs e)
    {
        displayUserControl(e.Link.Caption);
    }

    private void displayUserControl(string link)
    {
        switch (link)
        {
            case "Data Entry":
                uc = new ucDataEntry(); //the data entry user control that freezes the system
                break;
            case "Setting":
                uc = new ucSetting();
                break;
            case "Chart":
                uc = new UCReportChart();
                break;
        }

        mainPanel.Controls.Clear();
        mainPanel.Controls.Add(uc);
        uc.Dock = DockStyle.Fill;
        uc.Show();
    }
4

1 に答える 1

0

メニュー項目がクリックされるたびに、メイン パネルから前のコントロールをクリアし、新しいコントロールに置き換えます。おそらく、アプリケーションのハングの原因は ucDataEntry コントロールの検証ロジックでしょうか? (そのコントロールのコードを投稿していないので、確信が持てません。)

余談ですが、mainPanel.Controls.Clear() を呼び出すと、メモリ リークが発生します。この関数のドキュメントには、この方法でクリアされるすべてのコントロールに対して Dispose() メソッドを明示的に呼び出す必要があると記載されています。

于 2013-01-25T19:48:04.670 に答える