【问题标题】:How to customize Button Control like this one?如何自定义像这样的按钮控件?
【发布时间】:2011-07-17 03:15:05
【问题描述】:

我想做一个像这样的自定义按钮控件(图片按钮还可以)。

我是新用户,所以我不能在这里发布图片。于是我上传了图片here

在尝试了一些教程后,我现在有点绝望

非常感谢任何建议。

谢谢

08/10/2019更新:我问了这么多年前的这个问题,当时我没有上传图片的权限,所以我上传的图片是给第三方的网站早已不复存在。我收到了很多关于重新上传图像的请求,所以这是我从八年前做的那个项目中记得的,我只是找到了一些符合我记忆的关于窗口形式的随机图像

这是按钮处于正常状态时

这是当按钮悬停或单击时,带有圆形边框

【问题讨论】:

  • 我已经尝试过带有 Image 的 FlatStyle,使用了一些自定义控件。但问题是我无法像图片中那样创建按钮(带圆形边框)目前我正在处理圆形边框:(
  • 你完成了吗?
  • 能否将图片重新添加到您的问题中?我认为这会有所帮助。谢谢

标签: c# winforms button custom-controls


【解决方案1】:

看不到图片,但我想你可以更改按钮的边框并设置背景图片。

button1.FlatStyle = FlatStyle.Flat;
button1.BackgroundImage = Bitmap.FromFile("image.jpg");

【讨论】:

    【解决方案2】:

    我认为最简单的方法是设置按钮的一些属性,如下所示

    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";
        }
    

    更新:

    我不知道我是否正确,但我认为您也可以通过在面板内放置按钮和标签并根据您的选择排列它们来实现您的目标。将button1.FlatStyle = System.Windows.Forms.FlatStyle.FlatLabel.Text="Normal" 开头。然后在鼠标上进入面板,在按钮周围绘制一个带有边框的矩形,并将标签的文本更改为“Hover”。像那样点击面板,你也可以根据你改变矩形边框并制作label.Text="OnClick"

    【讨论】:

      【解决方案3】:

      您可以创建一个继承自 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;
          }
      }
      

      【讨论】:

      • 我认为这个可以解决问题。但我希望按钮的边框是圆形的。所以我正在努力。希望我能弄清楚如何创建与图片中完全相同的按钮 :) 感谢您的帮助
      • 不应该是私有静态Color _back = System.Drawing.Color.Grey;是格雷?我不知道为什么 C# 称它为“Gray”,“Grey”是正确的拼写。
      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多