透明儿童形式以父母形式与透明度和背景

时间:2015-12-17 09:41:55

标签: c# winforms

我有一张带有背景图片和透明度密钥的表单。 在那种形式中,我把儿童形式必须完全透明,以显示父母形式的bakground。如果我为子表单设置另一个透明度键 - 它根本不会获得透明度,如果我设置父表单的透明度键 - 子表单通过父表单的背景图像。

我需要使用表单 - 而不是用户控件,这是一个问题。而且我不想将dublicate背景图像设置为子形式。

我在视觉上工作。这是设计师的代码:

  1. 这是我的父母

        // 
        // Main
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.BackColor = System.Drawing.Color.DarkRed;
        this.BackgroundImage = global::NWN_Tsuki.Properties.Resources.Book;
        this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
        this.ClientSize = new System.Drawing.Size(800, 665);
        this.Controls.Add(this.tableLayoutPanel1);
        this.Controls.Add(this.CloseBtn);
        this.DoubleBuffered = true;
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.KeyPreview = true;
        this.MaximumSize = new System.Drawing.Size(800, 665);
        this.MinimumSize = new System.Drawing.Size(800, 665);
        this.Name = "Main";
        this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
        this.Text = "Header";
        this.TransparencyKey = System.Drawing.Color.DarkRed;
        this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Main_KeyDown);
        this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Main_MouseDown);
        this.tableLayoutPanel1.ResumeLayout(false);
        this.ResumeLayout(false);
    
  2. 这就是我将孩子插入父母小组的方式:

        private void LeftPanel_Paint(object sender, PaintEventArgs e) {
        ToC toc = new ToC();
        toc.TopLevel = false;
        toc.AutoScroll = true;
        this.LeftContent.Controls.Add(toc);
        toc.FormBorderStyle = FormBorderStyle.None;
        toc.Dock = DockStyle.Fill;
        toc.Show(); 
    }
    
  3. 这是我的孩子:

        // 
        // ToC
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.BackColor = System.Drawing.Color.Silver;
        this.ClientSize = new System.Drawing.Size(428, 396);
        this.Controls.Add(this.Ch7Btn);
        this.Controls.Add(this.Ch6Btn);
        this.Controls.Add(this.Ch5Btn);
        this.Controls.Add(this.Ch4Btn);
        this.Controls.Add(this.Ch3Btn);
        this.Controls.Add(this.Ch2Btn);
        this.Controls.Add(this.Ch1Btn);
        this.Controls.Add(this.label1);
        this.Name = "ToC";
        this.Text = "ToC";
        this.TransparencyKey = System.Drawing.Color.Silver;
        this.ResumeLayout(false);
    
  4. 当孩子在父母内部是银子的情况下,现在它具有透明度键Silver。 如果我将this.BackColor = System.Drawing.Color.DarkRed;设置为Child,则会触发父母的背景。

    这是我的意思的一些图像。

    Child with other then parent transparency key

    Child with same as parent transparency

1 个答案:

答案 0 :(得分:0)

我不确定为什么你的孩子形式的背景正在刺穿主要形式。 你可能会尝试两件事。

  1. 尝试将两种颜色设置为您最不可能使用的颜色。像Color.Magenta一样。 (我知道你可能已经尝试过这个了)

  2. 您应该能够将Back颜色设置为透明here

    Button1.BackColor = Color.Transparent;