簡體   English   中英

如何創建半透明的表格獲勝應用程序

[英]How to create semi-transparent form win apps

我想為疊加效果創建一個半透明的形式。 表格應該是透明的。 這是我嘗試執行的方式,但沒有獲得半透明的形式。 所以請你幫幫我

    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();

請指導我謝謝。

我修改了這個例程,現在如下

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();
            }
        }
    } 
}

用表格調用技術1

Form d = new Form();
d.Width = 400;
d.Height = 300;
MaskedDialog.ShowDialog(this, d);

用表格調用技術2

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;
    }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM