通常フォームを最前面に持ってくるにはTopMostプロパティを利用します。
ですが、以下のWin-APIを利用しても同じ事が実現出来ます。
SetWindowPos関数
引数などの指定は以下を参照してください。
- SetWindowPos関数
別にこの関数を利用しなくてもTopMostで同じ事が出来るので
いらないのではと思ったりしますが、SetWindowPos関数は
引数にいろいろ指定できるので、結構便利だったりします。
普段利用する事はないですが、知っておくと役に立つかもしれませんね。
具体的には以下のような事ができます。
- Zオーダーの位置を細かく指定できる
- ウィンドウのサイズを指定できる
- ウィンドウの位置を指定できる
以下、サンプルです。
using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace SetWindowPosSample { public partial class Form1 : Form { static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); const uint SWP_NOSIZE = 0x0001; const uint SWP_NOMOVE = 0x0002; // (x, y), (cx, cy)を無視するようにする. const uint TOPMOST_FLAGS = (SWP_NOSIZE | SWP_NOMOVE); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint flags); public Form1() { InitializeComponent(); } private void btnTopMost_Click(object sender, EventArgs e) { Form newForm = new Form{ TopMost = true }; newForm.Show(); } private void btnSetWindowPos_Click(object sender, EventArgs e) { Form newForm = new Form(); newForm.Load += (s2, e2) => { SetWindowPos(newForm.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); }; newForm.Show(); } } }
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場