Можно ли создавать прозрачные кнопки в Visual Studio 2005 с помощью C # - PullRequest
6 голосов
/ 14 октября 2008

У меня есть пользовательский интерфейс, который требует размещения нескольких круглых кнопок в проекте C # с некоторыми данными позади них. Это кнопки System.Windows.Forms.buttons, и для их создания я использовал изображение GIF с прозрачностью. Однако прозрачные области не прозрачны. Я искал ссылки в Интернете, но не нашел никаких предложений о том, как сделать это правильно. Есть некоторые упоминания об этом в Visual Studio 2008, но мне нужно сохранить этот проект в 2005 году. Любая помощь или предложение приветствуются.

Ответы [ 8 ]

1 голос
/ 15 ноября 2010

Попробуйте это:

        Bitmap temp = new Bitmap(button1.Image);

        temp.MakeTransparent(Color.Black); //your transparent color, in this case black

        button1.Image = (Image) Logo;

        temp.Dispose();

        temp = null;
1 голос
/ 13 июня 2011

Просто установите для свойства FlatStyle кнопки значение "Flat" & hellip; и вуаля! Я знаю, что это работает с PNG, но я не проверял это с GIF.

1 голос
/ 17 сентября 2009
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

public class TransparentControl : Control
{
    public TransparentControl()
    {
        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        SetStyle(ControlStyles.Opaque, true);
        SetStyle(ControlStyles.ResizeRedraw, true);
        this.BackColor = Color.Transparent;
    }

    protected override void OnPaint(PaintEventArgs pevent)
    {
        Graphics g = pevent.Graphics;
        g.DrawRectangle(Pens.Black, this.ClientRectangle);
    }


    protected override void OnPaintBackground(PaintEventArgs pevent)
    {
        // don't call the base class
        //base.OnPaintBackground(pevent);
    }


    protected override CreateParams CreateParams
    {
        get
        {
            const int WS_EX_TRANSPARENT = 0x20;
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= WS_EX_TRANSPARENT;
            return cp;
        }
    }

    // rest of class here...
}
1 голос
/ 14 октября 2008

Я уверен, что вам нужно использовать PNG с WinForms, чтобы получить прозрачность изображения. Я знаю, что успешно их использовал.

РЕДАКТИРОВАТЬ: Когда я использовал PNG, я накладывал их на элемент управления Image на Form1.BackgroundImage; Я не использовал их в кнопках.

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

0 голосов
/ 24 мая 2014

Следующий ответ проверен в Visual Studio 2012 и работает с backgroundImage форматами BMP, GIF, PNG, а также JPG; созданный MS Paint.

Чтобы сделать фон видимым с помощью вашей кнопки:

Перейти в окно свойств кнопки. Затем измените FlatStyle и BackColor, как показано на рисунке ниже:

The FlatStyle is to be chosen as Flat

The color is to be chosen from Web Tab

Примечание. Цвет должен быть выбран из вкладки Web, а FlatStyle - Flat.

Но после этого кнопка будет прозрачной до тех пор, пока мышь не будет зависать или она не будет выбрана или нажата. При этом условии он будет непрозрачным. Если вы хотите сделать его всегда прозрачным, следуйте приведенным ниже изображениям и измените соответствующие цвета на прозрачные, как раньше. Изменяемые цвета: MouseOverBackColor и MouseDownBackColor.

enter image description here

enter image description here

Примечание. Если вы выберете всегда прозрачный, как показано, внешний вид кнопки не изменится, пока она будет в действии!

Надеюсь, это поможет вам.

Удачи!

0 голосов
/ 24 июля 2009

Я использую Visual Studio 2005 и попробовал следовать вашему примеру выше, но он не работает (фрагмент в методе создания). У меня есть фон для формы, и я пытаюсь создать скошенные прозрачные кнопки.

в настоящее время вставка вышеуказанного кода делает мой фон прозрачным, а мои кнопки - белым.

вот фрагмент моего кода

       Bitmap mainFormBackground = (Bitmap)Image.FromFile("background.jpg");
        this.BackgroundImage = mainFormBackground;
        this.BackColor = Color.Black;
        this.ForeColor = Color.White;

Добавить несколько кнопок

        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        SetStyle(ControlStyles.Opaque, true);
        this.BackColor = Color.Transparent;

Я даже пытался

         btnName.BackColor = Color.Transpare;

это тоже не сработало

0 голосов
/ 05 мая 2009

создайте класс, полученный из кнопки и поместите этот код.

    protected override CreateParams CreateParams
    {
        get
        {
            const int WS_EX_TRANSPARENT = 0x20;
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= WS_EX_TRANSPARENT;
            return cp;
        }
    }

и в методе создания

        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        SetStyle(ControlStyles.Opaque, true);
        this.BackColor = Color.Transparent;
0 голосов
/ 23 октября 2008

Необходимо установить для свойства BackColor кнопки значение «Прозрачный».

Button1.BackColor = System.Drawing.Color.Transparent;

...