C # - прозрачная модальная форма на окне - PullRequest
0 голосов
/ 24 июня 2011

Я хочу использовать полностью прозрачную модальную форму в моем приложении, с возможностью заполнить ее частично прозрачным изображением; Для этого я использовал для удаления всех видимых элементов из формы и получил код ниже.

class WinScreenshotWindow : Form
{
    public WinScreenshotWindow()
    {
        // Create from without erasing background with a color
        // Going not to use transparent form instead, it will produce context menu bugs in textboxes for child form
        this.SuspendLayout();
        this.MaximizeBox = false;
        this.MinimizeBox = false;
        this.ShowIcon = false;
        this.ShowInTaskbar = false;
        this.FormBorderStyle = FormBorderStyle.None;
        this.StartPosition = FormStartPosition.Manual;
        this.ControlBox = false;
        this.Visible = false;
        this.Size = new Size(100, 100);
        this.Location = new Point(200, 200);
        this.ResumeLayout();
    }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        // Erase Background Windows message:
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Rectangle clientRect = e.ClipRectangle;
        e.Graphics.FillRectangle(Brushes.Transparent, clientRect);
    }
}

    static void Main()
    {
        Form form = new Form();
        form.Size = new Size(400, 400);
        form.Show();

        var ww = new WinScreenshotWindow();
        ww.ShowDialog(form);
    }

Но результат странный:

Bug

Когда я удаляю заполнение в OnPaint (), оно вообще не видно. Вопрос в том, почему это происходит? Если фон прозрачен, почему он показывает форму таким образом? А что можно сделать в этой ситуации?

Любая помощь приветствуется.

1 Ответ

1 голос
/ 24 июня 2011

Не проще ли открыть форму без полей с красным фоном и установить TransparencyKey = red?

...