C# Forms - 带有多个文本和图像的按钮

问题描述 投票:0回答:2

我想创建带有两个文本的按钮:一个左对齐(文本标签本身),一个右对齐(热键),可能还有一个图像。下面的屏幕截图来自类似的应用程序(不是我的!)

enter image description here

支持多行文本会很好,就像图像中的按钮 F1-F6,但我可以没有它。我不需要 F8 按钮的“始终按下状态”。

我正在使用 C# 和 Windows 窗体。

编辑: 显然这在 WPF 中非常简单。从未在 WPF 中做过任何事情,但一定会看一看。

c# winforms button hotkeys
2个回答
6
投票

这是您可能满意的解决方案:

public class XButton : Button
{
    public XButton()
    {
        UseVisualStyleBackColor = false;
        TextImageRelation = TextImageRelation.ImageAboveText;
    }
    public override string Text
    {
        get { return ""; }
        set { base.Text = value;}
    }
    public string LeftText { get; set; }
    public string RightText { get; set; }
    protected override void OnPaint(PaintEventArgs pevent)
    {            
        base.OnPaint(pevent);
        Rectangle rect = ClientRectangle;
        rect.Inflate(-5, -5);
        using (StringFormat sf = new StringFormat() { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Far })
        {
            using (Brush brush = new SolidBrush(ForeColor))
            {
                pevent.Graphics.DrawString(LeftText, Font, brush, rect, sf);
                sf.Alignment = StringAlignment.Far;
                pevent.Graphics.DrawString(RightText, Font, brush, rect, sf);
            }
        }
    }
}
//Use it
xButton1.Image = yourImage;
xButton1.LeftText = "How interesting winforms is";
xButton2.RightText = "F12";
//You can add more properties to this XButton class to control how it looks

截图

enter image description here


0
投票

将这个类添加到我的项目后,但是留下的文本覆盖了图像

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.