Как настроить Button Control, как этот? - PullRequest
4 голосов
/ 17 марта 2011

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

Я новый пользователь, поэтому я не могу разместить изображение здесь. Поэтому я загрузил картинку здесь

Я сейчас немного отчаялся, попробовав несколько уроков

Любое предложение высоко ценится.

Спасибо

Ответы [ 3 ]

10 голосов
/ 17 марта 2011

Вы можете создать класс, унаследованный от Button, чтобы хранить все ваши стили в одном месте.Чтобы сделать состояния наведения и нажатия, вы можете переопределить события ввода / выхода мыши для кнопки и изменить стиль.

Вот пример одного из наших проектов (я изменил цвета, но вы поняли)Там, где мы меняем некоторые цвета, вы можете переключать изображения.

public class MossieButton : Button
{
    private static Font _normalFont = new Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

    private static Color _back = System.Drawing.Color.Grey;
    private static Color _border = System.Drawing.Color.Black;
    private static Color _activeBorder = System.Drawing.Color.Red;
    private static Color _fore = System.Drawing.Color.White;

    private static Padding _margin = new System.Windows.Forms.Padding(5, 0, 5, 0);
    private static Padding _padding = new System.Windows.Forms.Padding(3, 3, 3, 3);

    private static Size _minSize = new System.Drawing.Size(100, 30);

    private bool _active;

    public MossieButton()
        : base()
    {
        base.Font = _normalFont;
        base.BackColor = _border;
        base.ForeColor = _fore;
        base.FlatAppearance.BorderColor = _back;
        base.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
        base.Margin = _margin;
        base.Padding = _padding;
        base.MinimumSize = _minSize;
    }

    protected override void OnControlAdded(ControlEventArgs e)
    {
        base.OnControlAdded(e);
        UseVisualStyleBackColor = false;
    }

    protected override void OnMouseEnter(System.EventArgs e)
    {
        base.OnMouseEnter(e);
        if (!_active)
            base.FlatAppearance.BorderColor = _activeBorder;
    }

    protected override void OnMouseLeave(System.EventArgs e)
    {
        base.OnMouseLeave(e);
        if (!_active)
            base.FlatAppearance.BorderColor = _border;
    }

    public void SetStateActive()
    {
        _active = true;
        base.FlatAppearance.BorderColor = _activeBorder;
    }

    public void SetStateNormal()
    {
        _active = false;
        base.FlatAppearance.BorderColor = _border;
    }
}
2 голосов
/ 17 марта 2011

Изображение не видно, но, я думаю, вы можете изменить границу кнопки и установить фоновое изображение.

button1.FlatStyle = FlatStyle.Flat;
button1.BackgroundImage = Bitmap.FromFile("image.jpg");
1 голос
/ 17 марта 2011

Я думаю, что самый простой способ - установить некоторые свойства кнопки, как показано ниже, и

this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Image = "Any Image"
this.button1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.button1.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;

, а затем написать код для

  private void button1_Click(object sender, EventArgs e)
    {
        //Code for Image Appearance.
        button1.Text = "OnClick";
    }

    private void button1_MouseEnter(object sender, EventArgs e)
    {
        //Code for Image Appearance.
        button1.Text = "Enter";
    }

    private void button1_MouseLeave(object sender, EventArgs e)
    {
        //Code for Image Appearance.
        button1.Text = "Normal";
    }

Обновление:

Iне знаю, правильно я поступаю или нет, но я думаю, что вы также можете достичь своей цели, поместив кнопку и метку внутри панели и расположив их по своему выбору.Сделайте button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat в начале с Label.Text="Normal".Затем при помощи мыши войдите в панель и нарисуйте прямоугольник с рамкой вокруг кнопки и измените текст метки на «Hover».Как и при нажатии на панель, вы также изменяете границу прямоугольника в соответствии с вашими предпочтениями и делаете label.Text="OnClick".

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