WPFでウィンドウを前面に移動する


214

WPFアプリケーションをデスクトップの前面に表示するにはどうすればよいですか?これまでのところ、私は試しました:

SwitchToThisWindow(new WindowInteropHelper(Application.Current.MainWindow).Handle, true);

SetWindowPos(new WindowInteropHelper(Application.Current.MainWindow).Handle, IntPtr.Zero, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

SetForegroundWindow(new WindowInteropHelper(Application.Current.MainWindow).Handle);

どれもジョブを実行していません(Marshal.GetLastWin32Error()これらの操作は正常に完了し、各定義のP / Invoke属性にはがあると言っていますSetLastError=true)。

新しい空のWPFアプリケーションを作成SwitchToThisWindowし、タイマーを使用して呼び出すと、期待どおりに機能するため、元のケースで機能しない理由がわかりません。

編集:これはグローバルホットキーと組み合わせて行っています。


MainWindowが必要なウィンドウであることを確認しましたか?MSDNから:MainWindowは、AppDomainでインスタンス化される最初のWindowオブジェクトへの参照で自動的に設定されます。
Todd White、

良い考えですが、それはアプリケーションで唯一のウィンドウです。
Factor Mystic

あなたはもう少しコンテキストコードを与えることができますか?
トッドホワイト

回答:


314
myWindow.Activate();

ウィンドウを前面に移動してアクティブにします。

私が誤解していて、Always on Topの動作を望んでいない限り、これでうまくいくはずです。その場合は、次のようにします。

myWindow.TopMost = true;

14
私は単にmyWindow.Show()を使用していて、時々それが上にありませんでした。直後にmyWindow.Activate()を呼び出しましたが、うまくいきました。
ベルモ2009

4
Windows XPではアクティベートが機能しない場合があります。@Matthew Xavierの回答をお勧めします。
Lex Li

デフォルトではShowActivatedがオンになっているため、少し奇妙です。
greenoldman '26年

1
最初の答えはいいです、ありがとうございます!ただし、コードの2行目であるTopmostプロパティの使用は、他のポップアップダイアログを覆い隠して予期しない動作をする可能性があるため、不適切な方法です。
ジョナサンペリー

2
実際には、これで実行できます。if (myWindow.WindowState == WindowState.Minimized) myWindow.WindowState = WindowState.Normal;奇妙なことに、最大化されたウィンドウはすべて保持され、通常の状態に戻されません。
r41n 2017

168

ウィンドウを上に表示する解決策を見つけましたが、通常のウィンドウとして動作します。

if (!Window.IsVisible)
{
    Window.Show();
}

if (Window.WindowState == WindowState.Minimized)
{
    Window.WindowState = WindowState.Normal;
}

Window.Activate();
Window.Topmost = true;  // important
Window.Topmost = false; // important
Window.Focus();         // important

1
素晴らしいヒント!TopMostは、ウィンドウが既に開いているが他のウィンドウの下にある場合、Windows 7で魔法を起こします。
gsb 2012

これは私にとってもトリックでした。TopMostの奇妙な使い方のように見えるものについての追加コメントをgsbに感謝します!
Jen

1
ありがとう-修正は短くて甘いものでした。
code4life 2014年

2
私の場合、Window.Activate()とWindow.Focus()で十分でした。Window.TopMostの設定は不要です。
14

6
使用しないでくださいWindow.Focus()。これにより、ユーザーが現在テキストボックスに入力している内容からフォーカスが外れるため、エンドユーザーにとってはめちゃくちゃイライラします。上記のコードは、それなしでも問題なく機能します。
Contango 2016年

32

初めてロードするときにウィンドウを前面に表示する必要がある場合は、以下を使用する必要があります。

private void Window_ContentRendered(object sender, EventArgs e)
{
    this.Topmost = false;
}

private void Window_Initialized(object sender, EventArgs e)
{
    this.Topmost = true;
}

1
Launchylaunchy.net)に似たものをC#で開発した場合、この答えはほとんど役に立たないことに気付くはずです。
Lex Li

21

これをすばやくコピーして貼り付けるには-
このクラスのDoOnProcessメソッドを使用して、プロセスのメインウィンドウをフォアグラウンドに移動します(ただし、他のウィンドウからフォーカスを奪うことはありません)。

public class MoveToForeground
{
    [DllImportAttribute("User32.dll")]
    private static extern int FindWindow(String ClassName, String WindowName);

    const int SWP_NOMOVE        = 0x0002;
    const int SWP_NOSIZE        = 0x0001;            
    const int SWP_SHOWWINDOW    = 0x0040;
    const int SWP_NOACTIVATE    = 0x0010;
    [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
    public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

    public static void DoOnProcess(string processName)
    {
        var allProcs = Process.GetProcessesByName(processName);
        if (allProcs.Length > 0)
        {
            Process proc = allProcs[0];
            int hWnd = FindWindow(null, proc.MainWindowTitle.ToString());
            // Change behavior by settings the wFlags params. See http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx
            SetWindowPos(new IntPtr(hWnd), 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOACTIVATE);
        }
    }
}

HTH


6
+1これが私にとって有用だった唯一の答えです。1つのマスターといくつかのフローティングスレーブウィンドウを持つアプリケーションがあります。これらのいずれかをアクティブにすると、他のすべてのウィンドウも前面に表示されます。しかし、ほとんどの回答が示唆しているように、アクティブ化/フォーカスを取得することはできません。突然別のウィンドウがフォーカスを取得するため、現在クリックされているウィンドウがクリック不可能になるのは、惨事です。
stijn '12

使用しない理由はprocess.MainWindowHandle
Sriram Sakthivel、2014

私の場合、メインウィンドウは必要ありませんでしたが、同意するには、を取得する他の方法がありhWndます。FWIW HwndSourceオブジェクトはうまくいきました。
tobriand 2015

21

私はこの質問がかなり古いことを知っていますが、この正確なシナリオに出くわし、実装したソリューションを共有したいと思っています。

このページのコメントで述べたように、提案されたソリューションのいくつかはXPでは機能しません。私のシナリオでサポートする必要があります。@Matthew Xavierの意見には同意しますが、これは一般にUXの悪い習慣ですが、完全に妥当なUXである場合があります。

WPFウィンドウを一番上に表示するためのソリューションは、グローバルホットキーを提供するために使用しているのと同じコードによって実際に提供されました。Joseph Cooneyによるブログ記事には、元のコードを含む彼のコードサンプルへリンクが含まれています。

コードを少し整理して修正し、System.Windows.Windowの拡張メソッドとして実装しました。私はこれをXP 32ビットとWin7 64ビットでテストしましたが、どちらも正しく動作します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Interop;
using System.Runtime.InteropServices;

namespace System.Windows
{
    public static class SystemWindows
    {
        #region Constants

        const UInt32 SWP_NOSIZE = 0x0001;
        const UInt32 SWP_NOMOVE = 0x0002;
        const UInt32 SWP_SHOWWINDOW = 0x0040;

        #endregion

        /// <summary>
        /// Activate a window from anywhere by attaching to the foreground window
        /// </summary>
        public static void GlobalActivate(this Window w)
        {
            //Get the process ID for this window's thread
            var interopHelper = new WindowInteropHelper(w);
            var thisWindowThreadId = GetWindowThreadProcessId(interopHelper.Handle, IntPtr.Zero);

            //Get the process ID for the foreground window's thread
            var currentForegroundWindow = GetForegroundWindow();
            var currentForegroundWindowThreadId = GetWindowThreadProcessId(currentForegroundWindow, IntPtr.Zero);

            //Attach this window's thread to the current window's thread
            AttachThreadInput(currentForegroundWindowThreadId, thisWindowThreadId, true);

            //Set the window position
            SetWindowPos(interopHelper.Handle, new IntPtr(0), 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_SHOWWINDOW);

            //Detach this window's thread from the current window's thread
            AttachThreadInput(currentForegroundWindowThreadId, thisWindowThreadId, false);

            //Show and activate the window
            if (w.WindowState == WindowState.Minimized) w.WindowState = WindowState.Normal;
            w.Show();
            w.Activate();
        }

        #region Imports

        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll")]
        private static extern uint GetWindowThreadProcessId(IntPtr hWnd, IntPtr ProcessId);

        [DllImport("user32.dll")]
        private static extern bool AttachThreadInput(uint idAttach, uint idAttachTo, bool fAttach);

        [DllImport("user32.dll")]
        public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

        #endregion
    }
}

このコードがこの問題に遭遇した他の人に役立つことを願っています。


ちょっとねえ、そこに!私は何ヶ月もこれに苦労してきました!これは私の両方の状況で機能します。驚くばかり!(Windows 7 x64)
mdiehl13 '10 / 07/15

実際、私がこれを実行した場合にのみ機能するように見えます:App.mainWindow.Show(); SystemWindows.GlobalActivate(App.mainwindow); //最初の.show()を削除しても前面に表示されません
mdiehl13

SetWindowPos()の+1、他のアプリを中断したり、フォーカスを盗んだりせずに、自分のウィンドウのみを前面に表示する方法を探していました。this.Activate()はフォーカスを盗みます。
2015

これは私にとってはうまくいきました。私の場合は、ユーザーが特定の要素を操作したときに発生したように、フォーカスを盗むことが全体のポイントでした。おかげでたくさんこれは一貫して動作するようです!電話をかけるthis.Activate()だけでうまくいく場合もあるようです。
Peter

13

ユーザーが別のアプリケーションを操作している場合、自分のアプリケーションを前面に表示できない可能性があります。一般的なルールとして、プロセスは、そのプロセスがすでにフォアグラウンドプロセスである場合にのみ、フォアグラウンドウィンドウを設定することを期待できます。(Microsoftは、SetForegroundWindow() MSDNエントリに制限を文書化しています。)これは、次の理由によります。

  1. ユーザーがフォアグラウンドを「所有」します。たとえば、ユーザーが入力している最中に別のプログラムがフォアグラウンドを盗んだ場合、少なくともワークフローが中断され、1つのアプリケーション向けのキーストロークが、変更に気づくまで犯罪者によって誤って解釈されるため、意図しない結果を引き起こす可能性があります。 。
  2. 2つのプログラムのそれぞれが、ウィンドウがフォアグラウンドであるかどうかを確認し、フォアグラウンドでない場合はフォアグラウンドに設定しようとしていると想像してください。2番目のプログラムが実行されるとすぐに、すべてのタスクスイッチでフォアグラウンドが2つの間でバウンドするため、コンピューターは使用できなくなります。

いい視点ね。ただし、コードの目的はグローバルホットキーと組み合わせたものであり、他のアプリケーションはなんとかしてそれを行います。
ファクターミスティック

この記事に記載されている内容をエミュレートするには、C#でPInvokeを使用する必要があります。codeproject.com/ Tips / 76427 /…
Lex Li

では、ビジュアルスタジオに切り替えると、式ブレンドエラーのポップアップダイアログが表示されたままになるのはなぜですか :-/
Simon_Weaver

サイモン、表示されるエラーポップアップは「最上位の」ウィンドウ(私が不承認とする設計上の決定)だと思います。フォアグラウンドウィンドウ(ユーザー入力を受け取る)とZオーダーの「最上位」ウィンドウには違いがあります。どのウィンドウも、それ自体を「最上位」にすることができます。これにより、最上位以外のすべてのウィンドウの上に配置されますが、最前面のウィンドウになるようにウィンドウキーボードフォーカスなどが与えられません。
Matthew Xavier

トリックはいくつかの特別なウィンドウでは失敗します。Visual Studioとコマンドプロンプトウィンドウには、他のウィンドウがフォアグラウンドウィンドウにならないようにする必要があります。
Lex Li

9

私はこれが遅い答えであることを知っています、おそらく研究者にとって役立つでしょう

 if (!WindowName.IsVisible)
 {
     WindowName.Show();
     WindowName.Activate();
 }

9

このページの回答の一部が間違っている理由!

  • を使用した答えはすべてwindow.Focus()間違っています。

    • どうして?通知メッセージがポップアップする場合、window.Focus()ユーザーがその時点で入力しているものからフォーカスを奪います。特にポップアップが頻繁に発生する場合、これはエンドユーザーにとってめちゃくちゃイライラします。
  • を使用した答えはすべてwindow.Activate()間違っています。

    • どうして?親ウィンドウも表示されます。
  • 省略した答えwindow.ShowActivated = falseは間違っています。
    • どうして?非常に迷惑なメッセージがポップアップ表示されると、フォーカスが別のウィンドウから離れます。
  • 使用しない回答 Visibility.Visibleウィンドウの非表示/表示に間違っています。
    • どうして?Citrixを使用している場合、ウィンドウを閉じても折りたたまれていないと、奇妙な黒い長方形のホールドが画面に残ります。したがって、window.Show()およびは使用できませんwindow.Hide()

基本的に:

  • ウィンドウがアクティブになったときに、他のウィンドウからフォーカスを奪ってはなりません。
  • ウィンドウは、表示されているときにその親をアクティブにするべきではありません。
  • ウィンドウはCitrixと互換性がある必要があります。

MVVMソリューション

このコードはCitrixと100%互換性があります(画面の空白領域はありません)。通常のWPFとDevExpressの両方でテストされています。

この回答は、常に他のウィンドウの前面にある小さな通知ウィンドウが必要なすべてのユースケースを対象としています(ユーザーが設定でこれを選択した場合)。

この回答が他の回答よりも複雑に思える場合、それは堅牢なエンタープライズレベルのコードであるためです。このページの他の回答の一部は単純ですが、実際には機能しません。

XAML-添付プロパティ

この添付プロパティをUserControlウィンドウ内のいずれかに追加します。添付プロパティは次のようになります。

  • まで待つ Loadedイベントが発生ます(それ以外の場合は、ビジュアルツリーをルックアップして親ウィンドウを見つけることができません)。
  • ウィンドウが表示されるかどうかを確認するイベントハンドラーを追加します。

いつでも、添付プロパティの値を反転することにより、ウィンドウを前面に表示するかどうかを設定できます。

<UserControl x:Class="..."
         ...
         attachedProperties:EnsureWindowInForeground.EnsureWindowInForeground=
             "{Binding EnsureWindowInForeground, Mode=OneWay}">

C#-ヘルパーメソッド

public static class HideAndShowWindowHelper
{
    /// <summary>
    ///     Intent: Ensure that small notification window is on top of other windows.
    /// </summary>
    /// <param name="window"></param>
    public static void ShiftWindowIntoForeground(Window window)
    {
        try
        {
            // Prevent the window from grabbing focus away from other windows the first time is created.
            window.ShowActivated = false;

            // Do not use .Show() and .Hide() - not compatible with Citrix!
            if (window.Visibility != Visibility.Visible)
            {
                window.Visibility = Visibility.Visible;
            }

            // We can't allow the window to be maximized, as there is no de-maximize button!
            if (window.WindowState == WindowState.Maximized)
            {
                window.WindowState = WindowState.Normal;
            }

            window.Topmost = true;
        }
        catch (Exception)
        {
            // Gulp. Avoids "Cannot set visibility while window is closing".
        }
    }

    /// <summary>
    ///     Intent: Ensure that small notification window can be hidden by other windows.
    /// </summary>
    /// <param name="window"></param>
    public static void ShiftWindowIntoBackground(Window window)
    {
        try
        {
            // Prevent the window from grabbing focus away from other windows the first time is created.
            window.ShowActivated = false;

            // Do not use .Show() and .Hide() - not compatible with Citrix!
            if (window.Visibility != Visibility.Collapsed)
            {
                window.Visibility = Visibility.Collapsed;
            }

            // We can't allow the window to be maximized, as there is no de-maximize button!
            if (window.WindowState == WindowState.Maximized)
            {
                window.WindowState = WindowState.Normal;
            }

            window.Topmost = false;
        }
        catch (Exception)
        {
            // Gulp. Avoids "Cannot set visibility while window is closing".
        }
    }
}

使用法

これを使用するには、ViewModelでウィンドウを作成する必要があります。

private ToastView _toastViewWindow;
private void ShowWindow()
{
    if (_toastViewWindow == null)
    {
        _toastViewWindow = new ToastView();
        _dialogService.Show<ToastView>(this, this, _toastViewWindow, true);
    }
    ShiftWindowOntoScreenHelper.ShiftWindowOntoScreen(_toastViewWindow);
    HideAndShowWindowHelper.ShiftWindowIntoForeground(_toastViewWindow);
}

private void HideWindow()
{
    if (_toastViewWindow != null)
    {
        HideAndShowWindowHelper.ShiftWindowIntoBackground(_toastViewWindow);
    }
}

追加リンク

通知ウィンドウが常に表示画面に戻るようにする方法のヒントについては、私の回答を参照してください


5
「エンタープライズレベルのコード」と数行後catch (Exception) { }。ええ、そうです...そして、_dialogServiceやのような答えにも示されていないコードを使用していますShiftWindowOntoScreenHelper。さらに、viewmodel側にウィンドウを作成するように要求します(これは基本的にMVVMパターン全体を壊します)...
Kryptos 2018

@Kryptosこれはエンタープライズレベルのコードです。私はそれをメモリからタイプアウトし、この正確な手法はFTSE100の大企業で使用されています。実際の生活は、私たちが目指している完璧なデザインパターンと比べると、少し原始的ではありません。
Contango 2018

Kryptosがmvvmの全体のポイントを壊すと述べたように、ビューモデルにウィンドウのインスタンスを自分で保持しているという事実は好きではありません。
Igor Meszaros

1
@Igor Meszaros同意する。これで経験が増えたので、もう一度行う必要がある場合は、Behaviorを追加Func<>し、ViewModelにバインドされているを使用して制御します。
Contango

7

Shellオブジェクトを介してAccessアプリケーションから呼び出されるWPFアプリケーションにも同様の問題がありました。

私の解決策は以下です-x86ターゲットにコンパイルされたアプリでXPおよびWin7 x64で動作します。

これは、alt-tabをシミュレートするよりもはるかに行いたいと思います。

void Window_Loaded(object sender, RoutedEventArgs e)
{
    // make sure the window is normal or maximised
    // this was the core of the problem for me;
    // even though the default was "Normal", starting it via shell minimised it
    this.WindowState = WindowState.Normal;

    // only required for some scenarios
    this.Activate();
}

4

ええと、これはとてもホットなトピックなので...ここに私のために働くものがあります。ウィンドウが表示されない場合、Activate()がエラーを出力するため、この方法で実行しないとエラーが発生します。

XAML:

<Window .... 
        Topmost="True" 
        .... 
        ContentRendered="mainWindow_ContentRendered"> .... </Window>

分離コード:

private void mainWindow_ContentRendered(object sender, EventArgs e)
{
    this.Topmost = false;
    this.Activate();
    _UsernameTextBox.Focus();
}

これが、ウィンドウを前面に表示する唯一の方法でした。次に、それをアクティブにして、マウスでフォーカスを設定しなくてもボックスに入力できるようにします。control.Focus()は、ウィンドウがActive();でない限り機能しません。


2

まあ私は回避策を考え出した。ホットキーの実装に使用するキーボードフックから呼び出します。一時停止してBackgroundWorkerに入れると、呼び出しは期待どおりに機能します。それはくだらないことですが、なぜそれが元々機能していなかったのかはわかりません。

void hotkey_execute()
{
    IntPtr handle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
    BackgroundWorker bg = new BackgroundWorker();
    bg.DoWork += new DoWorkEventHandler(delegate
        {
            Thread.Sleep(10);
            SwitchToThisWindow(handle, true);
        });
    bg.RunWorkerAsync();
}

ちょうど興味がある:(Mortenによって提案された)Window.Activateと他の提案を試しましたか?彼らはこの認められたクラッジよりもハックが少ないようです。
Simon D.

これはかなり前のことですが、はい、私はそれを試しました
Factor Mystic

これは私のWindows XPでは動作しません。@Matthew Xavierの回答をお勧めします。
Lex Li

2

現在開いているウィンドウを表示するには、それらのDLLをインポートします。

public partial class Form1 : Form
{
    [DllImportAttribute("User32.dll")]
    private static extern int FindWindow(String ClassName, String WindowName);
    [DllImportAttribute("User32.dll")]
    private static extern int SetForegroundWindow(int hWnd);

プログラム内で指定されたタイトルのアプリを検索します(最初の文字なしでタイトルを書き込みます(インデックス> 0))

  foreach (Process proc in Process.GetProcesses())
                {
                    tx = proc.MainWindowTitle.ToString();
                    if (tx.IndexOf("Title of Your app WITHOUT FIRST LETTER") > 0)
                    {
                        tx = proc.MainWindowTitle;
                        hWnd = proc.Handle.ToInt32(); break;
                    }
                }
                hWnd = FindWindow(null, tx);
                if (hWnd > 0)
                {
                    SetForegroundWindow(hWnd);
                }

「最初の文字なしのアプリのタイトル」 Oof、ハッキーハッキーハッキー。IndexOf代わりに、なぜ正しく使用しないのですか?
オービットのライトネスレース

1

問題は、フックからコードを呼び出すスレッドがランタイムによって初期化されていないため、ランタイムメソッドの呼び出しが機能しないことである可能性があります。

おそらく、Invokeを実行してコードをUIスレッドにマーシャリングし、ウィンドウを前面に表示するコードを呼び出すことができます。


1

これらのコードは常に正常に動作します。

最初に、アクティブ化されたイベントハンドラーをXAMLで設定します。

Activated="Window_Activated"

以下の行をメインウィンドウのコンストラクタブロックに追加します。

public MainWindow()
{
    InitializeComponent();
    this.LocationChanged += (sender, e) => this.Window_Activated(sender, e);
}

そして、アクティブ化されたイベントハンドラー内でこのコードをコピーします。

private void Window_Activated(object sender, EventArgs e)
{
    if (Application.Current.Windows.Count > 1)
    {
        foreach (Window win in Application.Current.Windows)
            try
            {
                if (!win.Equals(this))
                {
                    if (!win.IsVisible)
                    {
                        win.ShowDialog();
                    }

                    if (win.WindowState == WindowState.Minimized)
                    {
                        win.WindowState = WindowState.Normal;
                    }

                    win.Activate();
                    win.Topmost = true;
                    win.Topmost = false;
                    win.Focus();
                }
            }
            catch { }
    }
    else
        this.Focus();
}

これらの手順は正常に機能し、他のすべてのウィンドウを親ウィンドウの前面に表示します。


0

ウィンドウを非表示にしようとしている場合、たとえばウィンドウを最小化している場合、

    this.Hide();

それを正しく非表示にし、単に使用します

    this.Show();

次に、ウィンドウを最上位のアイテムとして再び表示します。


0

この質問に別の解決策を追加したかっただけです。この実装は、CaliBurnがメインウィンドウの表示を担当する私のシナリオで機能します。

protected override void OnStartup(object sender, StartupEventArgs e)
{
    DisplayRootViewFor<IMainWindowViewModel>();

    Application.MainWindow.Topmost = true;
    Application.MainWindow.Activate();
    Application.MainWindow.Activated += OnMainWindowActivated;
}

private static void OnMainWindowActivated(object sender, EventArgs e)
{
    var window = sender as Window;
    if (window != null)
    {
        window.Activated -= OnMainWindowActivated;
        window.Topmost = false;
        window.Focus();
    }
}

0

アクティブウィンドウがイベントを処理したウィンドウに戻るため、そのウィンドウを示すコードをPreviewMouseDoubleClickハンドラー内に配置しないでください。MouseDoubleClickイベントハンドラーに配置するか、e.HandledをTrueに設定してバブリングを停止します。

私の場合、リストビューでPreviewMouseDoubleClickを処理していて、e.Handled = trueを設定していなかった場合、MouseDoubleClickイベントが発生し、元のウィンドウにフォーカスが戻りました。


-1

簡単に再利用できるように拡張メソッドを作成しました。

using System.Windows.Forms;
    namespace YourNamespace{
        public static class WindowsFormExtensions {
            public static void PutOnTop(this Form form) {
                form.Show();
                form.Activate();
            }// END PutOnTop()       
        }// END class
    }// END namespace

フォームコンストラクターで呼び出す

namespace YourNamespace{
       public partial class FormName : Form {
       public FormName(){
            this.PutOnTop();
            InitalizeComponents();
        }// END Constructor
    } // END Form            
}// END namespace

こんにちはマイク。あなたはこの質問にかなり遅く答えています。このアプローチが、この質問に対してすでに投稿されている非常に良い回答と異なる(そしておそらくより良い)理由を回答で説明できますか?
Noel Widmer

私がこれをする必要があるだけで遅くて、私はこれに遭遇し、他の人がそれを使用したいと思ったときに問題をどのように解決したかを共有したいと思いました。
マイク

確かに、私はあなたの投稿をレビューすることに選ばれ、あなたに気づかせたいと思いました。コミュニティへの貢献が良いと思われる場合は、常に新しい回答を提供することをお勧めします。
ノエルウィドマー

2
この質問は特にWPFに関するものでしたが、ソリューションはWinForms向けです。
Brian Reichle 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.