我有一个mainform,当用户点击mainform中的一个按钮时,我需要在mainform的中心显示一个子窗体作为弹出窗口。在此阶段,子窗体上的所有空闲空间(附加图像中的内部框周围)应该是透明的(灰色),以便主窗体中的控件可见。
如何实现这一目标?我尝试在子窗体上使用Opacity,但不透明度正在应用于窗体中的所有控件。
Make a form's background transparent:此链接中提供的解决方案完全透明。我想要不透明效果。
答案 0 :(得分:1)
对于按钮事件中的主要表单或触发子表单的任何内容,您可以使用以下代码:
ChildForm frm = new ChildForm();
frm.ShowDialog();//use this so that the main form depends on the child form
frm.Show(); // use this to show an independent child form
并且在子窗体中,您可以使用ChildForm的Opacity属性使其透明,您也可以从窗体设计器中更改它:
this.Opacity = 50; //or any other value that you like
答案 1 :(得分:1)
以下是我如何解决这个问题:
我已经创建了一个表单,并覆盖了它的OnPaintBackground方法,如下所示:
protected override void OnPaintBackground(PaintEventArgs e)
{
using (SolidBrush brush = new SolidBrush(Color.FromArgb(70, 0, 0, 0)))
{
e.Graphics.FillRectangle(brush, e.ClipRectangle);
}
}
在此表单中,我主持一个用户控件,该控件基本上是一个带有标签和两个按钮的面板(OK,Cancel)。用户点击按钮后,我会将此表单DialogResult
设置为OK
或Cancel
(具体取决于点击的按钮)。
此表单从主窗体显示为对话框(frm.ShowDialog(this)
)。
此外,它将构造函数作为主窗体并设置它自己的显示矩形以完全覆盖主窗体,然后将用户控件的大小调整为高度的三分之一和宽度的一半。形式,并以它为中心。
public FrmThickBox(Form owner, string message)
{
this.Owner = owner;
this.Width = owner.Width;
this.Height = owner.Height;
this.Top = owner.Top;
this.Left = owner.Left;
this.thickBoxControl.Text = message;
this.thickBoxControl.Size = new Size((int)this.Width / 2, (int)this.Height / 3);
this.thickBoxControl.Top = (int)((this.Height - thickBoxControl.Height) / 2);
this.thickBoxControl.Left = (int)((this.Width - thickBoxControl.Width) / 2);
}
这就是它的样子(当然,圆角是一个完全不同的故事):