状況:小さなボタンが必要です。テキストがいくつかあります。C#:ボタン内の端の間隔を削除する
問題:ボタンは、テキストを表示するよりも、エッジの近くに空きスペースを表示することが重要だと思われるようです。
私の人生では、そのブランクを端から取り除く方法を理解できません。どんな助けでも大歓迎です!
ありがとうございます。
-MonsterMaw
状況:小さなボタンが必要です。テキストがいくつかあります。C#:ボタン内の端の間隔を削除する
問題:ボタンは、テキストを表示するよりも、エッジの近くに空きスペースを表示することが重要だと思われるようです。
私の人生では、そのブランクを端から取り除く方法を理解できません。どんな助けでも大歓迎です!
ありがとうございます。
-MonsterMaw
あなたがWinFormsの話をしていると仮定すると、あなたはSystem
に、ボタンのFlatStyle
プロパティを設定することができます。
これにより、内部パディングなしに、テキストが正確に収まるようにボタンのサイズを変更できるようになります。
フラットスタイル=フラットにする必要がある場合はどうすればいいですか? (私は国境の色を設定する必要があります) – aliceraunsbaek
ボタンのOnPaintメソッドをオーバーライドして、好きなように描画できます。私はあなたがpevent.Graphics.DrawStringを使ってテキストを使わずにボタンを描き、テキストを自分自身に描画するためにbase.OnPaintを使うことができると思いますか?
これが望ましいかどうかを検討してください。ユーザーはアプリケーションから何らかの標準的な振る舞いを期待しているので、ルールを非標準にするためにルールを曲げようとしているなら、それが正しい解決策でないかもしれないという事実を少なくとも考慮する必要があります。
その他のオプションには、ボタンがあなたのために実行されていない場合、メニュー/ツールバーとリンクにUIコマンドを移動することが含まれます。
LinkLabelはこれに適しています(全体のUIに合っていると仮定します)。 のテキストなので、枠線やパディングを心配する必要はありません。
ボタンのTextプロパティを空に設定できます。他のすべてが失敗した場合は、ボタンの上にラベルを置きます。
編集。ラベルの背景色を透明にすることを忘れないでください。
これは非常に古いトピックですが、誰かが役に立つと思うかもしれません。
以下の私の提案を参照してください。私はカスタムButtonコントロールを作成し、プライベート部分_Text
を使用できるようにText
プロパティをオーバーライドし、MyBase.OnPaint(e)
イベントの直前にString.Empty
を添付します。これにより、そのボタンはテキストなしの描画になります。後で古いテキストを私有財産に再割り当てし、自分自身で文字列を描きます。私はInflate
にRectangle
を追加して、ボタンの境界線にちょうどタッチして、それを重ならないようにします。私の提案はどんなflatstyle
属性でも機能します。
Here comparison of standard button and no padding button in two flatstyles: standard and 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
C#バージョン:
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);
}
}
}
}
WinフォームまたはWPF? – decasteljau
これはASP.NETかwinFormsボタンですか? – PortageMonkey