モーダルウィンドウを表示するときに追加のウィンドウをアクティブに保つ方法はありますか?

user109078

答えはおそらくノーだと思います...しかし、いくつかの背景があります。サイズ設定ロジックが表示されている境界線を超えて機能するウィンドウにカスタム境界線を描画するために(Windows 10の場合と同様)、メッセージをキャプチャして中央のウィンドウに転送するために、エッジの周りにレイヤードウィンドウを追加しました。これは、フォームがモーダルで表示されるまではうまく機能し、その時点ですべてのエッジウィンドウが自動的に無効になりました。明らかにこれは仕様によるものです...しかし、それを回避する方法があるかどうかはわかりません。中央のウィンドウが所有するエッジウィンドウを作成しようとしましたが、うまくいきませんでした。

あるいは、完全にもっと良いアプローチがあるかもしれません。

この問題のサンプルは次のとおりです。

   public partial class Form1 : Form
   {
      public Form1()
      {
      }

      protected override void OnClick(EventArgs e)
      {
         base.OnClick(e);

         Form f2 = new Form();

         f2.Text = "Non Modal";

         f2.Show();

         Form f3 = new Form();

         f3.Text = "Modal";

         f3.ShowDialog(this);
      }
   }
私自身

モーダルウィンドウを偽造して、モーダルではなく呼び出し元を無効にすることができると思います。私はこれを自分のプロジェクトで使用しました。私はそれをこのようにしました:

//Setup small Interface
public interface IDialog
{
  //Our own Event which tell the caller if the Dialog is active/inactive
  public event DialogChangedEventArgs DialogChanged;
}

//Setup EventArgs for our own Event
public class DialogChangedEventArgs : EventArgs
{
   public bool DialogActive{get;}

   public DialogChangedEventArgs(bool dialogActive)
   {
      DialogActive = dialogActive;
   }
}

//Setup the Form which act as Dialog in any other form
public class Form2 : Form, IDialog
{
   public event EventHandler<DialogChangedEventArgs> DialogChanged;

   //If this Form is shown we fire the Event and tell subscriber we are active
   private void Form2_Shown(object sender, EventArgs e)
   {
       DialogChanged?.Invoke(this, true);
   }

   //If the user close the Form we telling subscriber we go inactive
   private void Form2_Closing(object sender, CancelEventArgs e)
   {
      DialogChanged?.Invoke(this, false);
   }
}

public class Form1 : Form
{
   //Setup our Form2 and show it (not modal here!!!)
   private void Initialize()
   {
     Form2 newForm = new Form2();
     newForm.DialogChanged += DialogChanged;
     newForm.Show();
   }

   private void Form2_DialogChanged(object sender, DialogChangedEventArgs e)
   {
       //Now check if Form2 is active or inactive and enable/disable Form1
       //So just Form1 will be disabled.
       Enable = !e.DialogActive;
   }
}

とても簡単です。イベントを使用して、最初のフォームを通知します。Heyiamの2番目のフォームでアクティブです。次に、2番目がアクティブなときに、最初のフォームを無効にすることができます。どのフォームがアクティブかどうかを完全に制御できます。お役に立てれば。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

モーダルウィンドウの背景画像をモーダルウィンドウと同時に表示する方法はありますか?

分類Dev

新しいプログラムを開くときに現在のウィンドウをアクティブに保つ方法はありますか?

分類Dev

スクリーンショットを作成するためにウィンドウフォーカスを変更するときに、Webページのダウンダウンメニューをアクティブに保つ非プログラム的な方法はありますか?

分類Dev

ネイティブスクリプトでモーダルビューを表示するときにウィンドウの背景を黒にする方法

分類Dev

LXDE:lxpanelのアクティブウィンドウを非アクティブウィンドウと区別できるようにする方法は?

分類Dev

WSH や WMI などを使用してウィンドウのウィンドウ ハンドルにアクセスする方法はありますか?

分類Dev

私のアクティブなウィンドウは、XFCEパネル(ツールバーなど)の「下」にあります。これを修正する方法は?

分類Dev

ウィンドウ(キャンバス)にテーブル(SQLite)を簡単に表示するtkinterウィジェットはありますか?

分類Dev

Unity 3dアニメーションウィンドウに複数のプロパティを一度に追加する方法はありますか?

分類Dev

「ウィンドウ」オブジェクトにtypescript定義を追加する方法はありますか?

分類Dev

Windowsでフルスクリーンモードでアクティブな別のアプリケーションがあるときにアプリケーションウィンドウを開くにはどうすればよいですか?

分類Dev

ループを作成する代わりに、ウィンドウ関数を使用して最小合計を0に保つ方法はありますか?

分類Dev

1つのブラウザのウィンドウ/タブを2つの表示領域に分割する方法はありますか?

分類Dev

ファイルAからモーダルウィンドウを開き、モーダルウィンドウにファイルBを表示できますか?

分類Dev

assertEqualsと比較失敗ウィンドウを使用するときに参照の代わりにオブジェクトフィールドを表示する方法

分類Dev

JSを使用して、ブラウザウィンドウに表示できるテキストを検出する方法はありますか?

分類Dev

WPFのC#エクスポートスティーマTeeChartモーダルダイアログウィンドウはどこにありますか

分類Dev

C ++ウィンドウコードに、マウスがウィンドウ境界を追い出すのを止める方法はありますか?

分類Dev

非アクティブなときにウィンドウを不透明に保つにはどうすればよいですか?

分類Dev

AmStockChartは、ウィンドウが端にあるときにウィンドウをズームします

分類Dev

ウィンドウは、ウィンドウを表示するモニターをどのように決定し、どのように制御できますか?

分類Dev

大きなテーブルを表示すると、HTMLテーブルヘッダーが常にウィンドウの上部に表示されます

分類Dev

ワークスペースとコマンドウィンドウを同時にクリアするコマンドまたは方法はありますか?

分類Dev

ウィンドウの表示がアクティブになることはありません

分類Dev

ウィンドウを閉じずにモードレスviを終了する方法はありますか?

分類Dev

AngularJs-モーダルウィンドウをどのように切り離す必要がありますか?

分類Dev

最大化されたウィンドウで作業しているときにドックを完全に非表示にする方法はありますか?

分類Dev

gitリモートブランチウィンドウをチェックアウトするときに「ディレクトリを作成できません」と表示されるのはなぜですか?

分類Dev

ダイアログウィンドウが表示されているかのようにウィンドウをブロックする方法

Related 関連記事

  1. 1

    モーダルウィンドウの背景画像をモーダルウィンドウと同時に表示する方法はありますか?

  2. 2

    新しいプログラムを開くときに現在のウィンドウをアクティブに保つ方法はありますか?

  3. 3

    スクリーンショットを作成するためにウィンドウフォーカスを変更するときに、Webページのダウンダウンメニューをアクティブに保つ非プログラム的な方法はありますか?

  4. 4

    ネイティブスクリプトでモーダルビューを表示するときにウィンドウの背景を黒にする方法

  5. 5

    LXDE:lxpanelのアクティブウィンドウを非アクティブウィンドウと区別できるようにする方法は?

  6. 6

    WSH や WMI などを使用してウィンドウのウィンドウ ハンドルにアクセスする方法はありますか?

  7. 7

    私のアクティブなウィンドウは、XFCEパネル(ツールバーなど)の「下」にあります。これを修正する方法は?

  8. 8

    ウィンドウ(キャンバス)にテーブル(SQLite)を簡単に表示するtkinterウィジェットはありますか?

  9. 9

    Unity 3dアニメーションウィンドウに複数のプロパティを一度に追加する方法はありますか?

  10. 10

    「ウィンドウ」オブジェクトにtypescript定義を追加する方法はありますか?

  11. 11

    Windowsでフルスクリーンモードでアクティブな別のアプリケーションがあるときにアプリケーションウィンドウを開くにはどうすればよいですか?

  12. 12

    ループを作成する代わりに、ウィンドウ関数を使用して最小合計を0に保つ方法はありますか?

  13. 13

    1つのブラウザのウィンドウ/タブを2つの表示領域に分割する方法はありますか?

  14. 14

    ファイルAからモーダルウィンドウを開き、モーダルウィンドウにファイルBを表示できますか?

  15. 15

    assertEqualsと比較失敗ウィンドウを使用するときに参照の代わりにオブジェクトフィールドを表示する方法

  16. 16

    JSを使用して、ブラウザウィンドウに表示できるテキストを検出する方法はありますか?

  17. 17

    WPFのC#エクスポートスティーマTeeChartモーダルダイアログウィンドウはどこにありますか

  18. 18

    C ++ウィンドウコードに、マウスがウィンドウ境界を追い出すのを止める方法はありますか?

  19. 19

    非アクティブなときにウィンドウを不透明に保つにはどうすればよいですか?

  20. 20

    AmStockChartは、ウィンドウが端にあるときにウィンドウをズームします

  21. 21

    ウィンドウは、ウィンドウを表示するモニターをどのように決定し、どのように制御できますか?

  22. 22

    大きなテーブルを表示すると、HTMLテーブルヘッダーが常にウィンドウの上部に表示されます

  23. 23

    ワークスペースとコマンドウィンドウを同時にクリアするコマンドまたは方法はありますか?

  24. 24

    ウィンドウの表示がアクティブになることはありません

  25. 25

    ウィンドウを閉じずにモードレスviを終了する方法はありますか?

  26. 26

    AngularJs-モーダルウィンドウをどのように切り離す必要がありますか?

  27. 27

    最大化されたウィンドウで作業しているときにドックを完全に非表示にする方法はありますか?

  28. 28

    gitリモートブランチウィンドウをチェックアウトするときに「ディレクトリを作成できません」と表示されるのはなぜですか?

  29. 29

    ダイアログウィンドウが表示されているかのようにウィンドウをブロックする方法

ホットタグ

アーカイブ