透明ラベルコントロールを作成しました。しかし、コントロールのテキストフィールドを更新すると、元のテキストはクリアされずに新しいテキストがペイントされます。したがって、コントロールのTextフィールドを何度か変更すると、すぐに判読できなくなります。透明ラベルコントロールが適切にリフレッシュされていません
手がかりはありますか?ありがとう!
public partial class TransLabel : Label
{
public TransLabel()
{
InitializeComponent();
this.SetStyle(ControlStyles.Opaque, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
this.Font = new Font("Franklin Gothic Book", 12f, FontStyle.Regular);
this.ForeColor = Color.White;
this.BackColor = Color.Transparent;
}
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
this.Invalidate(); // seems to have no effect
this.Refresh(); // seems to have no effect
}
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
//do nothing
}
protected override void OnMove(EventArgs e)
{
RecreateHandle();
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
}
フォーム上で '.Refresh()'メソッドを呼び出すことができると思いますか?私は確かにわかりません... – psyklopz
よく似ています... –
メモリが提供されている場合、あなたは 'OnPaintBackground'イベントでラベルの内容を消去する必要があります。私はカスタムコントロールを作成したときに私がこれまで実行してきたことを知っていますが、私のものは透過的ではありませんでしたので、100%確実ではありません。 – CodingGorilla