我创建了一个派生自Panel的自定义控件。 一切都很好,除了在设计师我的控制只是在它失去焦点时重新绘制。 我错过了什么?
以下是CustomControl.cs的代码
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace Picwing
{
public partial class xPanel : Panel
{
private SizeF textSize;
public xPanel() {
InitializeComponent();
}
[Browsable(true)]
public override string Text {
get { return base.Text; }
set { base.Text = value; }
}
protected override void OnPaint(PaintEventArgs pe) {
base.OnPaint(pe);
textSize = pe.Graphics.MeasureString(Text, Font);
pe.Graphics.DrawRectangle(new Pen(ForeColor, 1), pe.ClipRectangle.X, pe.ClipRectangle.Y + textSize.Height / 2, pe.ClipRectangle.Width - 1, pe.ClipRectangle.Height - textSize.Height / 2 - 1);
pe.Graphics.FillRectangle(new SolidBrush(BackColor), 5, 0, textSize.Width, textSize.Height);
pe.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), pe.ClipRectangle.X + 6, pe.ClipRectangle.Y);
}
}
}
答案 0 :(得分:1)
您的问题是因为在控件上绘画时使用pe.ClipRectangle
。
不要使用DisplayRectangle
。请根据您的要求使用ClientRactangle
或pe.ClipRectangle
。
当您绘制InitializeComponent();
边界时,如您所见,绘图将在控件的最小无效部分上完成。
注意:
除非您使用面板组件的设计器向其添加一些其他组件,否则您不需要在构造函数中使用DisplayRectangle
。
如果您使用FillRectangle
,则使用0,5
方法代替DisplayRectangle.X + 5, DisplayRectangle.Y
使用GroupBox
。
如果您尝试绘制自定义 $.ajax({
type: "POST",
url: "utils.php?do=saveTick",
data: {'dtData': JSON.stringify(sendData)},
success: function (data) {
alert(data.status);
if (data.status != "SUCCESS") {
$("#updateDiv").dialog('destroy');
alert("Failed!");
$("#btnPrint").attr('disabled', false);
return false;
} else {
me.confirmSave();
}
}
}, 'json'
);
,可以查看Custom GroupBox BackColor to Transparent