読み込みオーバーレイとして機能するカスタム コントロールをセットアップしました。オーバーレイは、画像を表示するためのピクチャ ボックスを含むフォームです。
オーバーレイが所定の位置に配置され、それを呼び出すメイン フォームの前に表示されると、見栄えがよくなります。ただし、ユーザーがフォームを移動したりサイズを変更したりすると、フォームはメイン フォームの後ろに移動します。
メイン フォームが移動またはサイズ変更されている場合、オーバーレイ フォームは問題なく移動およびサイズ変更されますが、サイズ変更または移動が完了すると、フォームはメイン フォームの後ろに移動します。TopMost を使用せずにオーバーレイ フォームをトップに戻すにはどうすればよいですか?
を使用してメインフォームから以下のコードを呼び出します
LoadingControl p = new LoadingControl(dataGridView1, this);
p.Show();
そしてオーバーレイフォーム:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class LoadingControl : Form
{
private Color BackgroundColour = Color.Black;
private double BackgroundOpacity = 0.50;
private Image LoadingImage = APPNAME.Properties.Resources.loading_120x128;
private Form Mainform;
private Control MainControl;
public LoadingControl(Control parent, Form frm)
{
MainControl = parent;
Mainform = frm;
SetupForm();
Size = parent.ClientSize;
Location = parent.PointToScreen(Point.Empty);
Mainform.Move += AdjustPosition;
MainControl.SizeChanged += AdjustPosition;
}
private void SetupForm()
{
FormBorderStyle = FormBorderStyle.None;
BackColor = BackgroundColour;
Opacity = BackgroundOpacity;//0.50;
ShowInTaskbar = false;
StartPosition = FormStartPosition.Manual;
PictureBox pbox = new PictureBox {Image = LoadingImage, Parent = this};
pbox.Width = pbox.Image.Width;
pbox.Height = pbox.Image.Height;
pbox.Left = (Width/2) - (pbox.Width/2);
pbox.Top = (Height/2) - (pbox.Height/2)-10;
pbox.Anchor = AnchorStyles.None;
Controls.Add(pbox);
}
public void SetLoadingImage(Image img)
{
LoadingImage = img;
}
public void SetBackgroundColour(Color col)
{
BackgroundColour = col;
}
public void SetOpacity(double Opa)
{
BackgroundOpacity = Opa;
}
private void AdjustPosition(object sender, EventArgs e)
{
//TopMost = true;
BringToFront();
ClientSize = MainControl.ClientSize;
Location = MainControl.PointToScreen(Point.Empty);
//Mainform.Activate();
//TopMost = false;
BringToFront();
Focus();
//MakeTopMost(this);
}
}