自绘Lable的Text

本文介绍了一种在Windows Forms应用程序中自定义绘制Label控件的方法。通过为Label控件添加Paint事件处理器,可以实现背景填充及文字显示效果的自定义。代码示例展示了如何设置字体样式、颜色以及对齐方式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Paint += new System.Windows.Forms.PaintEventHandler(PaintEvent);
        }


        //自绘 显示提示信息
        private void PaintEvent(object sender, PaintEventArgs e)
        {
            Label label = ((Label)sender);

            Graphics g = e.Graphics;

            SolidBrush blueBrush = new SolidBrush(label.BackColor);
            Font fnt = new Font("SimSun", 10, FontStyle.Bold);

            Rectangle rc = new Rectangle(0, 0, ((Label)sender).Width, ((Label)sender).Height);

            g.FillRectangle(blueBrush, rc);

            System.Windows.Forms.TextRenderer.DrawText(
                g, label.Text, label.Font, rc, label.ForeColor,
                TextFormatFlags.WordEllipsis | ContentAlignmentToTextFormatFlags(label.TextAlign));
        }

        TextFormatFlags ContentAlignmentToTextFormatFlags(ContentAlignment contentAlignment)
        {
            TextFormatFlags textFormatFlags = new TextFormatFlags();

            switch (contentAlignment)
            {
                case ContentAlignment.BottomCenter:
                    //上,左右居中
                    textFormatFlags = TextFormatFlags.Bottom | TextFormatFlags.HorizontalCenter;
                    break;
                case ContentAlignment.BottomLeft:
                    textFormatFlags = TextFormatFlags.Bottom | TextFormatFlags.Left;
                    break;
                case ContentAlignment.BottomRight:
                    textFormatFlags = TextFormatFlags.Bottom | TextFormatFlags.Right;
                    break;
                case ContentAlignment.MiddleCenter:
                    textFormatFlags = TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter;
                    break;
                case ContentAlignment.MiddleLeft:
                    textFormatFlags = TextFormatFlags.VerticalCenter | TextFormatFlags.Left;
                    break;
                case ContentAlignment.MiddleRight:
                    textFormatFlags = TextFormatFlags.VerticalCenter | TextFormatFlags.Right;
                    break;
                case ContentAlignment.TopCenter:
                    textFormatFlags = TextFormatFlags.Top | TextFormatFlags.HorizontalCenter;
                    break;
                case ContentAlignment.TopLeft:
                    textFormatFlags = TextFormatFlags.Top | TextFormatFlags.Left;
                    break;
                case ContentAlignment.TopRight:
                    textFormatFlags = TextFormatFlags.Top | TextFormatFlags.Right;
                    break;
                default:
                    break;
            }
           
            return textFormatFlags;
        }

### 实现 Label 和 Text 同一行的 CSS HTML 布局 为了使 `label` 和其关联的文本在同一行显示,可以通过调整 CSS 的 `display` 属性来控制元素的行为。默认情况下,`<label>` 是一种内联 (`inline`) 元素[^2],因此它天然会与其他内联元素保持在同一行。 如果 `<label>` 或其他相关元素被设置为块级 (`block`) 显示,则需要通过特定的 CSS 设置将其恢复到内联模式或者使用弹性布局等方式实现同行排列。 以下是几种常见的方法: #### 方法一:使用 Inline Display 确保 `<label>` 及其相邻的文本都具有 `display: inline` 或者 `display: inline-block` 的属性。这样它们会在同一行上自然排列。 ```html <label for="example">Label:</label> <span id="example">Text Content</span> ``` 对应的 CSS 如下: ```css label, span { display: inline; /* 默认行为 */ } ``` 这种方法利用了内联元素的特点,简单有效。 #### 方法二:Flexbox 布局 另一种更灵活的方式是采用 Flexbox 来管理容器内的子项分布。这种方式尤其适合复杂的布局需求。 ```html <div class="container"> <label for="example">Label:</label> <input type="text" id="example" value="Text Content"> </div> ``` CSS 配置如下: ```css .container { display: flex; align-items: center; /* 对齐方式 */ } label, input { margin-right: 10px; /* 调整间距 */ } ``` 此方案不仅可以让 `label` 和输入框或其他内容处于同一条水平线上,还提供了更多的自定义选项[^4]。 #### 方法三:Grid Layout 对于更加现代化的设计场景,可以考虑 Grid 布局技术。虽然这里的需求相对基础,但 Grid 提供了一种强大的二维空间划分能力。 ```html <div class="grid-container"> <label for="example">Label:</label> <input type="text" id="example" value="Text Content"> </div> ``` 相应的 CSS 定义为: ```css .grid-container { display: grid; grid-template-columns: auto minmax(100px, auto); /* 自动分配列宽 */ gap: 10px; /* 列间间隔 */ align-items: center; /* 垂直居中 */ } ``` 以上三种方法均能达成目标,具体选用哪一种取决于项目的复杂度和个人偏好。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值