Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建半透明表单win应用程序_C#_Winforms_Transparent - Fatal编程技术网

C# 如何创建半透明表单win应用程序

C# 如何创建半透明表单win应用程序,c#,winforms,transparent,C#,Winforms,Transparent,我想为叠加效果创建一个半透明窗体。表格应该是透明的。 这是我尝试的方法,但它不是半透明的形式。所以请帮帮我 Form mMask = new Form(); mMask.FormBorderStyle = FormBorderStyle.None; mMask.BackColor = Color.DarkGray; mMask.Opacity = 0.10; mMask.Height = this.ClientRectangle.Height; m

我想为叠加效果创建一个半透明窗体。表格应该是透明的。 这是我尝试的方法,但它不是半透明的形式。所以请帮帮我

    Form mMask = new Form();
    mMask.FormBorderStyle = FormBorderStyle.None;
    mMask.BackColor = Color.DarkGray;
    mMask.Opacity = 0.10;
    mMask.Height = this.ClientRectangle.Height;
    mMask.Width = this.ClientRectangle.Width;
    mMask.Top = 0;
    mMask.Left = 0;
    mMask.Text = this.Text;
    mMask.AllowTransparency = true;
    mMask.ShowInTaskbar = false;
    mMask.StartPosition = FormStartPosition.Manual;
    mMask.TopLevel = false;
    this.Controls.Add(mMask);
    mMask.Show();
    mMask.BringToFront();
请引导我,谢谢

我修改了这个例程,现在如下所示 使用表单调用技巧1 用表单调用技巧2


嗯,您正在尝试向另一个窗体的控件集合添加窗体,即顶级窗口?你在尝试什么?如果有一个框架能够真正处理真正的透明性(WPF),我不建议你在winforms透明性肥皂剧中进行艰苦的旅程。错误是:-错误1不能隐式地将类型“System.Windows.Forms.DialogResult”转换为“WindowsFormsApplication2.DialogResult”@Thomas error不在Aaron的代码中,因为他的代码没有名为
WindowsFormApplication2.DialogResult
的类。你应该用你的命名/导入语句做点什么。我更新了我的答案,使之成为一个完整的程序,带有结果截图。谢谢,我会看一看,然后再问几个问题。如果你想尝试我的答案,最简单的方法是使用我用来制作它的代码段编辑器
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace dialog
{
    public class MaskedDialog : Form
    {
        static MaskedDialog mask;
        static Form frmContainer;

        private Form dialog;
        private UserControl ucDialog;

        private MaskedDialog(Form parent, Form dialog)
        {
            this.dialog = dialog;
            this.FormBorderStyle = FormBorderStyle.None;
            this.BackColor = System.Drawing.Color.Black;
            this.Opacity = 0.50;
            this.ShowInTaskbar = false;
            this.StartPosition = FormStartPosition.Manual;
            this.Size = parent.ClientSize;
            this.Location = parent.PointToScreen(System.Drawing.Point.Empty);
            parent.Move += AdjustPosition;
            parent.SizeChanged += AdjustPosition;
        }

        private MaskedDialog(Form parent, UserControl ucDialog)
        {
            this.ucDialog = ucDialog;
            this.FormBorderStyle = FormBorderStyle.None;
            this.BackColor = System.Drawing.Color.Black;
            this.Opacity = 0.50;
            this.ShowInTaskbar = false;
            this.StartPosition = FormStartPosition.Manual;
            this.Size = parent.ClientSize;
            this.Location = parent.PointToScreen(System.Drawing.Point.Empty);
            parent.Move += AdjustPosition;
            parent.SizeChanged += AdjustPosition;
        }

        private void AdjustPosition(object sender, EventArgs e)
        {
            Form parent = sender as Form;
            this.Location = parent.PointToScreen(System.Drawing.Point.Empty);
            this.ClientSize = parent.ClientSize;
        }

        public static DialogResult ShowDialog(Form parent, Form dialog)
        {
            mask = new MaskedDialog(parent, dialog);
            dialog.StartPosition = FormStartPosition.CenterParent;
            mask.Show();
            DialogResult result = dialog.ShowDialog(mask);
            mask.Close();
            return result;
        }

        public static DialogResult ShowDialog(Form parent, UserControl dialog)
        {
            mask = new MaskedDialog(parent, dialog);
            frmContainer = new Form();
            frmContainer.ShowInTaskbar = false;
            frmContainer.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            frmContainer.StartPosition = FormStartPosition.CenterParent;
            frmContainer.Height = dialog.Height;
            frmContainer.Width = dialog.Width;

            frmContainer.Controls.Add(dialog);
            mask.Show();
            DialogResult result = frmContainer.ShowDialog(mask);
            frmContainer.Close();
            mask.Close();
            return result;
        }

        public static void CloseDialog()
        {
            if (frmContainer != null)
            {
                frmContainer.Close();
            }
        }
    } 
}
Form d = new Form();
d.Width = 400;
d.Height = 300;
MaskedDialog.ShowDialog(this, d);
UserControl1 uc = new UserControl1();
uc.CloseClicked += new UserControl1.CloseComplete(OnCloseClicked);
MaskedDialog.ShowDialog(this, uc);

void OnCloseClicked()
{
    MaskedDialog.CloseDialog();
}
void Main()
{
    var f = new Form 
    {
        Width = 800,
        Height = 600
    };
    var d = new Form
    {
        Width = 400,
        Height = 300
    };
    var tb = new TextBox 
    { 
        Width = 250, 
        Height = 250, 
        Multiline = true, 
        Text = "Hello World", 
        Dock = DockStyle.Top 
    };
    var b = new Button
    {
        Text = "Display Masked Dialog",
        Dock = DockStyle.Top
    };
    b.Click += (s, e) => 
    {
        MaskedDialog.ShowDialog(f, d);
    };
    f.Controls.AddRange(new Control[] { tb, b } );
    Application.Run(f);
}

public class MaskedDialog : Form
{
    private Form dialog;
    private MaskedDialog(Form parent, Form dialog)
    {
        this.dialog = dialog;
        this.FormBorderStyle = FormBorderStyle.None;
        this.BackColor = System.Drawing.Color.Black;
        this.Opacity = 0.50;
        this.ShowInTaskbar = false;
        this.StartPosition = FormStartPosition.Manual;
        this.Size = parent.ClientSize;
        this.Location = parent.PointToScreen(System.Drawing.Point.Empty);
        parent.Move += AdjustPosition;
        parent.SizeChanged += AdjustPosition;
    }
    private void AdjustPosition(object sender, EventArgs e)
    {
        Form parent = sender as Form;
        this.Location = parent.PointToScreen(System.Drawing.Point.Empty);
        this.ClientSize = parent.ClientSize;
    }
    public static DialogResult ShowDialog(Form parent, Form dialog)
    {
        var mask = new MaskedDialog(parent, dialog);
        dialog.StartPosition = FormStartPosition.CenterParent;
        mask.Show();
        var result = dialog.ShowDialog(mask);
        mask.Close();
        return result;
    }
}