code

PictureBox에 대한 투명한 제어

codestyles 2020. 11. 19. 08:16
반응형

PictureBox에 대한 투명한 제어


내 C # 양식에는 다운로드 이벤트에서 다운로드 비율을 표시하는 레이블이 있습니다.

  this.lblprg.Text = overallpercent.ToString("#0") + "%";

Label 컨트롤의 BackColor 속성이 투명하게 설정되어 있고 PictureBox 위에 표시되기를 원합니다. 하지만 제대로 작동하지 않는 것 같고 회색 배경이 보이며 그림 상자 위에 투명하게 보이지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?


Label 컨트롤은 투명도를 잘 지원합니다. 디자이너가 레이블을 올바르게 배치하지 못하게 할뿐입니다. PictureBox 컨트롤은 컨테이너 컨트롤이 아니므로 Form이 레이블의 부모가됩니다. 따라서 양식의 배경이 표시됩니다.

양식 생성자에 약간의 코드를 추가하여 쉽게 수정할 수 있습니다. 이제 레이블이 양식 대신 그림 상자에 상대적이므로 레이블의 Parent 속성을 변경하고 Location을 다시 계산해야합니다. 이렇게 :

    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 +)보다 빠릅니다.

여기 에 다른 답변 여기 에 DrawText 참조를 보십시오.


당신의 디자인을 위해 쉽습니다. 패널 내부에 레이블을 배치 할 수 있습니다. 패널의 배경 이미지 설정은 원하는 모든 이미지입니다. 설정된 레이블 배경이 투명합니다.


Windows Form과 함께 Visual Studio를 사용하면 using System.Drawing 을 추가 하여 레이블 또는 기타 요소에 투명도를 적용 할 수 있습니다 . Form1.designer.cs입니다 이런 식으로 당신은 (에 BackColor에서 외관에서) 속성 패널에서 투명성을 사용할 수있을 것이다. 또는 Designer.cs에서 코드를 편집하십시오 . this.label1.BackColor = System.Drawing.Color.Transparent;

참고 URL : https://stackoverflow.com/questions/9387267/transparent-control-over-picturebox

반응형