3

すべてのフォームのアプリケーション (フォームの子を含む) を非表示または表示するメソッドを作成しました。コードは次のとおりです。

public enum FormState
{
    Show ,
    Hidden,
    Enable,
    Disable
}

private void SetAllFormsState(FormState formState)
{
    FormCollection forms = Application.OpenForms;
    FormWindowState formWinState;
    bool state;

    if (formState == FormState.Show)
    {
        formWinState = FormWindowState.Normal;
        state = true;
    }
    else if (formState == FormState.Hidden)
    {
        formWinState = FormWindowState.Minimized;
        state = false;
    }
    else
    {
        throw new ArgumentNullException("invalid flag");
    }

    for (int i = forms.Count - 1; i >= 0; i--)
    {
        Form form = forms[i];
        form.WindowState = formWinState;

        if (state)
        {
            form.Show();
        }
        else
        {
            form.Hide();
        }
    }
}

しかし、フォームを再度呼び出すと:

SetAllFormsState(FormState.Show);

親フォームのみを選択できます。子フォームはウィンドウ/タスクバーに表示されますが、ウィンドウによって「ロック」されているように見えます。最大化することも、通常のスタイルに変更することもできません。どうすれば修正できますか?

4

2 に答える 2

2

メソッド呼び出しのform.WindowState Show()を設定してみてください。Hide()

for (int i = forms.Count - 1; i >= 0; i--)
{
  Form form = forms[i];
  if (state)
  {
    form.Show();
  }
  else
  {
    form.Hide();
  }
  form.WindowState = formWinState;
}
于 2011-12-28T14:11:54.217 に答える
1

多分それを試してみてください:

private void SetAllFormsState(FormState formState) 
{
    FormCollection forms = Application.OpenForms;
    FormWindowState formWinState;
    bool state;

    switch(formState)
    {
        case FormState.Show:
            formWinState = FormWindowState.Normal;
            state = true;
            break;

        case FormState.Hidden:
            formWinState = FormWindowState.Minimized;
            state = false;
            break;

        default:
            throw new ArgumentNullException("invalid flag");
            break;
    }

    foreach(Form form in forms)
    {
        form.WindowState = formWinState;

        if (state)
            form.Show();
        else
            form.Hide();
    }
}
于 2011-12-28T12:24:24.633 に答える