Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:删除按钮内部边缘的间距_C#_String_Button - Fatal编程技术网

C#:删除按钮内部边缘的间距

C#:删除按钮内部边缘的间距,c#,string,button,C#,String,Button,情境:我需要一个小按钮,上面有一些文字 问题:按钮似乎认为在其边缘附近显示空白比显示我的文本更重要 我一辈子都想不出如何去除边缘的空白。非常感谢您的帮助 提前谢谢 -MonsterMaw假设您正在谈论WinForms,您可以将按钮的FlatStyle属性设置为System 这将使您可以调整按钮的大小,使其足够小,以便文本能够精确匹配,而无需任何内部填充。您可以覆盖按钮上的OnPaint方法,然后根据自己的喜好进行绘制。我认为您可以使用base.OnPaint在没有任何文本的情况下绘制按钮,然后使

情境:我需要一个小按钮,上面有一些文字

问题:按钮似乎认为在其边缘附近显示空白比显示我的文本更重要

我一辈子都想不出如何去除边缘的空白。非常感谢您的帮助

提前谢谢


-MonsterMaw

假设您正在谈论WinForms,您可以将按钮的
FlatStyle
属性设置为
System


这将使您可以调整按钮的大小,使其足够小,以便文本能够精确匹配,而无需任何内部填充。

您可以覆盖按钮上的OnPaint方法,然后根据自己的喜好进行绘制。我认为您可以使用base.OnPaint在没有任何文本的情况下绘制按钮,然后使用pevent.Graphics.DrawString在自己身上绘制文本?

但请考虑这是否可取。用户希望从我们的应用程序中得到某种标准行为,所以如果你试图使规则变得不规范,那么你至少应该考虑这个事实可能不是正确的解决方案。
如果按钮不适合您,其他选项包括将UI命令移动到菜单/工具栏和链接。

链接标签是一个不错的选择(假设它适合您的整个UI)。它只是文本,因此您根本不必担心边框或填充。

您可以将按钮的文本属性设置为空。然后在按钮顶部放置一个标签,如果所有其他操作都失败


编辑。别忘了将标签的底色设置为透明。

这是一个非常古老的话题,但也许有人会发现它很有用

见下面我的建议。我创建自定义按钮控件并重写
Text
属性,以便能够在
MyBase.OnPaint(e)
事件之前使用其私有部分
\u Text
并附加
String.Empty
。这使得按钮没有文本。稍后,我将旧文本重新分配给私有属性,并自己绘制字符串。我将
充气
添加到
矩形
中,只需触摸按钮的边框,而不是将其重叠,就可以使文本更漂亮。我的命题适用于任何
flatstyle
属性


这是ASP.NET还是winForms按钮?如果我需要它使FlatStyle=Flat怎么办?(我需要设置边框颜色)
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms

Public Class ButtonNoPadding
    Inherits Button

    Private _textCurrent As String
    Private _Text As String

    <Category("Appearance")>
    Public Overrides Property Text() As String
        Get
            Return _Text
        End Get
        Set(ByVal value As String)
            If value <> _Text Then
                _Text = value
                Invalidate()
            End If
        End Set
    End Property

    Protected Overrides Sub OnPaint(e As PaintEventArgs)

        _textCurrent = Text
        _Text = String.Empty
        MyBase.OnPaint(e)
        _Text = _textCurrent

        Using brush = New SolidBrush(ForeColor)
            Using stringFormat = New StringFormat() With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center}
                e.Graphics.DrawString(Text, Font, brush, Rectangle.Inflate(ClientRectangle, -2, -2), stringFormat)
            End Using
        End Using

    End Sub

End Class
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

public class ButtonNoPadding : Button
{

    private string _textCurrent;

    private string _Text;
    [Category("Appearance")]
    public override string Text {
        get { return _Text; }
        set {
            if (value != _Text) {
                _Text = value;
                Invalidate();
            }
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        _textCurrent = Text;
        _Text = string.Empty;
        base.OnPaint(e);
        _Text = _textCurrent;

        using (brush == new SolidBrush(ForeColor)) {
            using (stringFormat == new StringFormat {Alignment = StringAlignment.Center,LineAlignment = StringAlignment.Center}) {
                e.Graphics.DrawString(Text, Font, brush, Rectangle.Inflate(ClientRectangle, -2, -2), stringFormat);
            }
        }

    }

}