1

リストボックスと複数のフレームで構成される Visual Studio 2010 のフォームがあります。

フレームはすべて互いの上に配置され、リストボックスはフレームの上にあります。私が達成しようとしているプロセスは、リスボックスで選択したレポートに応じて、特定のフレームが表示され、そのフレームのみが表示されるということです。

これを達成するための次のコードがあります。

switch (Convert.ToInt32(item.Value))
{

    case 11: 
        fraSelect_2.Hide();
        fraSelect_3.Hide();
        fraSelect_4.Hide();

        fraSelect_1.Visible = true;

        iCounter = 1;
        break;

    case 12: 
        fraSelect_1.Hide();
        fraSelect_3.Hide();
        fraSelect_4.Hide();

        fraSelect_2.Visible = true;           

        iCounter = 2;
        break;

}

などなど、ケースごとに。私が抱えている問題は、呼び出しているフレームが別のフレーム (表示されていない) の下にある場合、表示されないことです。トップフォームに対応するレポートを選択すると機能しますが。したがって、report1 を選択したときに report1 = frame1 の場合、frame1 が表示されます。しかし、レポート 2 を選択すると、フレーム 2 が非表示のフレーム 1 の背後にあるため、何も表示されません。

対応するレポートが選択されたら、frame1 の背後にあるフレームを表示する方法についてのアイデアはありますか?

4

2 に答える 2

1

z オーダーを使用して、必要なフォームを前面に表示しようとしましたか?

S0 フレーム 2 を選択すると、次のようになります- ケース 11:

     case 11:
                fraSelect_2.Hide();
                fraSelect_3.Hide();
                fraSelect_4.Hide();
                fraSelect_2.SendToBack();
                fraSelect_3.SendToBack();
                fraSelect_4.SendToBack();
                fraSelect_1.BringToFront();
                fraSelect_1.Visible = true;                    
                iCounter = 1;
                break;
于 2012-07-25T17:58:25.157 に答える
1

デザイン モードでは、各グループ ボックスを別の場所に配置し、それらが別のグループ ボックスに含まれていないことを確認します。1 つのグループボックスを必要なサイズで目的の位置に残します。

次に、フォームの Load イベントで、すべてのグループボックスをプレースホルダーとして使用されているのと同じ場所に再配置します。

   fraSelect_2.Location = fraSelect_1.Location;
   fraSelect_2.Size = fraSelect_1.Size;
   ... // move every other groupbox to the same spot....

次に、Visible=true/false (Hide() または BringToFront() なし) を設定するだけで、正しいものを表示するのに十分なはずです。

この問題は、グループボックスを別のグループボックスの上にドロップすると、最後のグループボックスが最初のグループボックスの子になり、最上位のグループボックスが非表示になっている場合、そのすべての子が Windows によって自動的に非表示になり、それらを表示することはできません。

于 2012-07-25T17:58:58.950 に答える