Как сделать кнопку изображения - PullRequest
8 голосов
/ 13 сентября 2011

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

Ответы [ 5 ]

21 голосов
/ 13 сентября 2011

Вы хотите создать кнопку без рамки, но отображать разные изображения, когда пользователь наводит на нее курсор мыши? Вот как вы можете это сделать:

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

  2. Добавьте вашу кнопку и установите следующие свойства:
    FlatStyle = квартира
    FlatAppearance.BorderColor (и, возможно, MouseOverBackColor & MouseDownBackColor) к цвету фона вашей формы
    ImageList = список изображений, который вы добавили в форму
    ImageIndex к значению индекса вашего обычного изображения

Кодируйте события MouseHover и MouseLeave для кнопки следующим образом:

private void button1_MouseHover(object sender, EventArgs e) {
    // ImageList index value for the hover image.
    button1.ImageIndex = 1;
}

private void button1_MouseLeave(object sender, EventArgs e) {
    // ImageList index value for the normal image.
    button1.ImageIndex = 0;
}

Я верю, что это даст вам визуальный эффект, который вы ищете.

3 голосов
/ 10 декабря 2014

Небольшая сводка (Граница, MouseDownBackColor, MouseOverBackColor)

FlatApperance

BorderColor = черный или все, что вы хотите
BorderSize = можно установить в 0
MouseDownBackColor = прозрачный
MouseOverBackColor = прозрачный

Text = нет

для MouseDown :

private void button1_MouseDown(object sender, MouseEventArgs e) { // ImageList index value for the mouse down image. button1.ImageIndex = 2; }

1 голос
/ 13 сентября 2011

Вы можете назначить свойство BackgroundImage для кнопки.Вы также можете использовать события OnMouseEnter и OnMouseExit, чтобы изменить фон в соответствии с вашим запросом.

См. BackgroundImage OnMouseEnter OnMouseLeave

0 голосов
/ 06 июля 2016

Мне также нужна была кнопка с изображением, но я хотел такую, как ToolstripMenuButton. С правильными границами и цветами при наведении. Поэтому я сделал пользовательский элемент управления для этого:

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace LastenBoekInfrastructure.Controls.Controls
{
    [DefaultEvent("Click")]
    public class ImageButton : UserControl
    {
        public string ToolTipText
        {
            get { return _bButton.ToolTipText; }
            set { _bButton.ToolTipText = value; }
        }

        public bool CheckOnClick
        {
            get { return _bButton.CheckOnClick; }
            set { _bButton.CheckOnClick = value; }
        }

        public bool DoubleClickEnabled
        {
            get { return _bButton.DoubleClickEnabled; }
            set { _bButton.DoubleClickEnabled = value; }
        }

        public System.Drawing.Image Image
        {
            get { return _bButton.Image; }
            set { _bButton.Image = value; }
        }

        public new event EventHandler Click;
        public new event EventHandler DoubleClick;

        private ToolStrip _tsMain;
        private ToolStripButton _bButton;

        public ImageButton()
        {
            InitializeComponent();
        }

        private void InitializeComponent()
        {
            var resources = new ComponentResourceManager(typeof(ImageButton));
            _tsMain = new ToolStrip();
            _bButton = new ToolStripButton();
            _tsMain.SuspendLayout();
            SuspendLayout();

            // 
            // tsMain
            // 
            _tsMain.BackColor = System.Drawing.Color.Transparent;
            _tsMain.CanOverflow = false;
            _tsMain.Dock = DockStyle.Fill;
            _tsMain.GripMargin = new Padding(0);
            _tsMain.GripStyle = ToolStripGripStyle.Hidden;
            _tsMain.Items.AddRange(new ToolStripItem[] {
            _bButton});
            _tsMain.Location = new System.Drawing.Point(0, 0);
            _tsMain.Name = "_tsMain";
            _tsMain.Size = new System.Drawing.Size(25, 25);
            _tsMain.TabIndex = 0;
            _tsMain.Renderer = new ImageButtonToolStripSystemRenderer();
            // 
            // bButton
            // 
            _bButton.DisplayStyle = ToolStripItemDisplayStyle.Image;
            _bButton.Image = ((System.Drawing.Image)(resources.GetObject("_bButton.Image")));
            _bButton.ImageTransparentColor = System.Drawing.Color.Magenta;
            _bButton.Name = "_bButton";
            _bButton.Size = new System.Drawing.Size(23, 22);
            _bButton.Click += bButton_Click;
            _bButton.DoubleClick += bButton_DoubleClick;
            // 
            // ImageButton
            // 
            Controls.Add(_tsMain);
            Name = "ImageButton";
            Size = new System.Drawing.Size(25, 25);
            _tsMain.ResumeLayout(false);
            _tsMain.PerformLayout();
            ResumeLayout(false);
            PerformLayout();
        }

        void bButton_Click(object sender, EventArgs e)
        {
            if (Click != null)
            {
                Click(this, e);
            }
        }

        void bButton_DoubleClick(object sender, EventArgs e)
        {
            if(DoubleClick != null)
            {
                DoubleClick(this, e);
            }
        }

        public class ImageButtonToolStripSystemRenderer : ToolStripSystemRenderer
        {
            protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
            {
                //base.OnRenderToolStripBorder(e);
            }
        }
    }
}
0 голосов
/ 13 сентября 2011

WinForm не имеет ImageButton в отличие от веб-форм.Добавление изображения к обычной кнопке возможно, но в некоторых случаях выглядит не очень хорошо.Возможно, вам придется использовать сторонние кнопки управления, такие как WinForm ImageButton или создать свой собственный CustomControl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...