|
■No41956 (める さん) に返信
> 「透過でロックする」方法ではなくても、ボタンのEnable
> プロパティをFalseにしてもそのままの状態で表示できる方法でも
> 結構です。どなたかご教授いただけませんか?
無理矢理な実装。
・「触れなくしたいコントロール」を panel1 の上に載せておく。
・panel1 と同座標に、空の panel2 を非表示状態で配置。
・Show イベントにて panel1 の画面イメージを生成し、それを panel2 に割り当てた後、
元の panel1 を非表示にし、代わりに panel2 を表示させる。
実装例。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Form2(bool locked, object 表示データ)
{
InitializeComponent();
// データ表示処理
if (!locked) return;
Shown += delegate
{
Bitmap bmp = new Bitmap(panel1.Width, panel1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.Black);
panel2.Hide();
panel1.Show();
Point p = panel1.Parent.PointToScreen(panel1.Location);
Update();
g.CopyFromScreen(p.X, p.Y, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
}
panel2.BackgroundImage = bmp;
panel1.Hide();
panel2.Show();
};
}
}
|