■93013 / inTopicNo.2) |
Re[1]: 子コントロールのマウスイベントを全て親コントロールに渡す方法 |
□投稿者/ KOZ (31回)-(2019/11/14(Thu) 01:00:59)
|
■No93012 (RAGI さん) に返信
> https://qiita.com/yaju/items/b86be7b86c1e54e08e39
> ↑こちらの記事のように、ボタンの上にラベルを重ねたコントロールを作成しています。
> (ボタンの子コントロールとしてラベルを持たせている)
私だったら文字は直接書いてしまいます。
#プロパティに関しては、値が変わったら Invalidate を行うような処理が必要ですが、端折っています。
using System.Drawing;
using System.Windows.Forms;
public class CommentButton : Button
{
public string CommentText { get; set; } = string.Empty;
public Color CommentColor { get; set; } = SystemColors.WindowText;
public Font CommentFont { get; set; } = Control.DefaultFont;
protected override void OnPaint(PaintEventArgs pevent) {
base.OnPaint(pevent);
var g = pevent.Graphics;
StringFormat stringFormat = new StringFormat();
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
SizeF textSize = g.MeasureString(Text, Font, ClientSize, stringFormat);
int commentHeight = (int)((ClientSize.Height - textSize.Height) / 2);
int commentTop = ClientRectangle.Bottom - commentHeight;
Rectangle commentBounds = new Rectangle(ClientRectangle.Left, commentTop, ClientSize.Width, commentHeight);
using (var brush = new SolidBrush(CommentColor)) {
g.DrawString(CommentText, CommentFont, brush, commentBounds, stringFormat);
}
}
}
使うときは
public partial class Form1 : Form
{
public Form1() {
InitializeComponent();
var button = new CommentButton();
button.Font = new Font("MS UI Gothic", 18F, FontStyle.Bold,GraphicsUnit.Point);
button.Bounds = new Rectangle(50, 50, 300, 100);
button.Text = @"注釈ありボタン";
button.CommentText= @"※ 注釈コメントがついています。";
button.CommentFont = new Font("MS UI Gothic", 15F, FontStyle.Bold, GraphicsUnit.Point);
button.CommentColor = Color.Red;
Controls.Add(button);
}
}
|
|