私のC#フォームには、ダウンロードイベントでダウンロードの割合を表示するラベルがあります。
this.lblprg.Text = overallpercent.ToString("#0") + "%";
LabelコントロールのBackColorプロパティは透明に設定されており、PictureBoxの上に表示する必要があります。しかし、それは正しく機能していないように見えます。灰色の背景が表示され、画像ボックスの上で透明に見えません。どうすれば修正できますか?
Labelコントロールは透明度をサポートします。それは、デザイナーがラベルを正しく配置させないということです。 PictureBoxコントロールはコンテナコントロールではないため、フォームはラベルの親になります。したがって、フォームの背景が表示されます。
フォームコンストラクターにコードを少し追加することで、簡単に修正できます。ラベルの親プロパティを変更し、フォームの代わりに画像ボックスを基準にしているため、場所を再計算する必要があります。このような:
public Form1() {
InitializeComponent();
var pos = this.PointToScreen(label1.Location);
pos = pictureBox1.PointToClient(pos);
label1.Parent = pictureBox1;
label1.Location = pos;
label1.BackColor = Color.Transparent;
}
実行時は次のようになります。
別のアプローチは、設計時の問題を解決することです。それはただ属性を取ります。 System.Designへの参照を追加し、プロジェクトにクラスを追加して、次のコードを貼り付けます。
using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design; // Add reference to System.Design
[Designer(typeof(ParentControlDesigner))]
class PictureContainer : PictureBox {}
あなたはただ使うことができます
label1.Parent = pictureBox1;
label1.BackColor = Color.Transparent; // You can also set this in the designer, as stated by ElDoRado1239
TextRendererを使用して、背景なしでテキストを描画できます。
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
TextRenderer.DrawText(e.Graphics,
overallpercent.ToString("#0") + "%",
this.Font,
new Point(10, 10),
Color.Red);
}
全体のパーセント値が変更されたら、pictureBoxを更新します。
pictureBox1.Refresh();
Graphics.DrawStringを使用することもできますが、TextRenderer.DrawText(GDIを使用)はDrawString(GDI +)よりも高速です
あなたの設計のために簡単に。ラベルをパネル内に配置できます。パネルの背景画像を設定することは、あなたが望むすべての画像です。ラベルの背景を透明に設定