我有一个按钮
_BtnDump = new Button();
_BtnDump.Name = "dum" + i;
_BtnDump.Text = data.DumpName;
_BtnDump.Width = 98;
_BtnDump.Height = 52;
//add icon dump puja
_BtnDump.Image = Image.FromFile(@"Images\dump.ico");
_BtnDump.TextAlign = ContentAlignment.MiddleCenter;
_BtnDump.TextImageRelation = TextImageRelation.TextAboveImage;
// Below code is not work yet. the layout get screwed
//_BtnDump.Font = new Font("Microsoft Sans Serif", 11); //new methode
_BtnDump.Visible = true;
_BtnDump.AutoSize = false;
_BtnDump.AutoEllipsis = true;
_BtnDump.TextAlign = ContentAlignment.MiddleCenter;
将高度默认值设置为23到52时,文本将更改为多行且不显示“...”
如何保持文本单行时,高度设置与自动省略号?
我设置高度是因为我在文本下面有图像。所以,当文本多行时,图像被裁剪。
编辑
这是使用@ dr. null中的代码时的结果图像。图像现在未被裁剪,但文本之间的图像区域较小,因此按下图像,并且使用TextImageRelation.ImageAboveText
时图像始终在底部
这是我想要的钮扣
1条答案
按热度按时间t8e9dugd1#
Button
控件在设计上没有提供很多指示文本应如何格式化和呈现的信息。无论是在使用Gdi还是Gdi+方法呈现字符串时。如果启用了UseCompatibleTextRendering
属性,则使用Gdi+。两种文本格式都有断字标志。虽然默认的文本呈现在我看来近乎完美,但如果愿意,您仍然可以更改此行为,使文本在一行中进行修剪。重写
OnPaint
方法以保持按钮的视觉样式,并在正确的位置和大小绘制每个部分。(文本、图像、面部、高亮显示......等),主要根据Text
、TextAlign
、Image
、ImageAlign
、TextImageRelation
、Font
等的值。这里我将使用
Reflection
从基类、适配器和相关的helper类获取所有绘图需求,而不是执行所有这些操作。LayoutOptions.LayoutData
示例的文本和图像边界。LayoutOptions.TextFormatFlags
和LayoutOptions.StringFormat
属性的TextFormatFlags
和StringFormat
。DetermineState
方法的PushButtonState
。下面是针对您的特定要求的另一个示例,其中:
TextImageRelation = TextImageRelation.TextAboveImage
开始),如果它的大小大于可用空间,它不应该被剪切。为此,你需要调用一个Graphics.DrawImage
方法重载,它同时接受目标矩形和源矩形。注意,忘记在我的第一篇文章中提到,如果文本被裁剪并且
AutoEllipsis
属性被启用,则调用base.OnPaint(e);
也是显示工具提示所必需的。