WinForms是否支持此功能?假设我想显示一个包含ListView的面板,其中包含一些结果。它通过点击窗体角上的按钮显示,并且面板显示在窗体内部,高于所有控件,最好是背部有阴影以使其更具吸引力。控制面板上的内容形式
我希望此面板始终位于窗体内部,作为它的一部分。我想到的一个解决方案是用该面板创建一个无边框的表单,并使其与原始表单同步。
有没有可能是我失踪的其他方式?
WinForms是否支持此功能?假设我想显示一个包含ListView的面板,其中包含一些结果。它通过点击窗体角上的按钮显示,并且面板显示在窗体内部,高于所有控件,最好是背部有阴影以使其更具吸引力。控制面板上的内容形式
我希望此面板始终位于窗体内部,作为它的一部分。我想到的一个解决方案是用该面板创建一个无边框的表单,并使其与原始表单同步。
有没有可能是我失踪的其他方式?
这里有一个粗略的方法,将让你开始:
public Panel CreateFloatingPanel(Panel originalPanel)
{
Bitmap bmp = new Bitmap(originalPanel.Width,
originalPanel.Height);
Rectangle rect = new Rectangle(0, 0,
bmp.Width, bmp.Height);
originalPanel.DrawToBitmap(bmp, rect);
foreach (Control ctrl in originalPanel.Controls)
{
ctrl.Visible = false;
}
using (Graphics g = Graphics.FromHwnd(originalPanel.Handle))
{
g.DrawImage(bmp, 0, 0);
bmp.Dispose();
SolidBrush brush =
new SolidBrush(Color.FromArgb(128, Color.Gray));
g.FillRectangle(brush, rect);
brush.Dispose();
}
Panel floater = new Panel();
floater.Size = originalPanel.Size;
floater.Left = originalPanel.Left - 50;
floater.Top = originalPanel.Top - 50;
this.Controls.Add(floater);
floater.BringToFront();
return floater;
}
这种方法需要在面板与一些控件上,绘制其所有控制面板上的临时位图,使得所有的控制看不见的,将临时位图绘制到面板上,然后在面板上添加一个半透明的灰色图层。然后,该方法创建一个新面板,并将其悬浮在原始面板上方和左侧,然后返回。这基本上使得新面板成为一种模式弹出窗口,有点像网页有时这样做。
要在表格上使用此功能,把所有你想变成灰色的控制之下到面板上,然后让你的按钮的Click事件做这样的事情:
Panel floater = CreateFloatingPanel(panel1);
floater.BackColor = Color.White;
ListView lv = new ListView();
floater.Controls.Add(lv);
要撤消的效果,您只需从窗体的Controls集合中删除浮动面板,然后再次使原始面板上的所有控件可见,然后再次刷新或使面板失效以摆脱灰色的东西。简单的Invalidate可以工作,因为灰色的效果不会持续 - 让你不得不使这一切变得更加复杂。但是这至少会让你开始。
你能不能创建在表格背面的隐藏面板,然后使其可见,然后把它前面?
没有必要把它放回去,然后把它放在前面...只是切换其可见性。 – JustLoren 2009-09-25 19:40:03
不是我想要的...... :( – 2009-09-25 19:45:23