이미지 첨부 라벨을 실현해 본다
이미지 첨부 라벨을 실현해 본다
용도는 어쨌든 텍스트와 이미지가 붙은 것처럼 보이는 라벨을 만드는 방법을 검토했다.
제반 사정으로 오너 드로우 등의 방법은 배우는 시간이 걸리지 않기 때문에 검토에서 제외한다.
목표
텍스트와 이미지를 표시하는 라벨을 목표로 설정합니다.
실현 방법
설계시
런타임
그1: Label 위에 살짝 PictureBox를 겹쳐
완성 크기의 Label 를 준비해, 그 우단에 PictureBox 를 「놓는다」.
외부 테두리를 실현하기 위해 Label 내부에 PictureBox가 위치하도록 되어 있다.
처음 생각하는 방식, 단순. 이동은 양 컨트롤의 Location 으로 제어. 번잡하지만 초학자에게도 직감적으로 이해할 수 있다. 배경색을 지정하는 경우 등도 양 컨트롤의 배경색을 설정할 필요가 있다.
다만, 이 약점은, 유저 컨트롤에 갇혀 버리면, 이용측은 신경쓸 필요는 없어질지도 모른다.
private void Form1_Load(object sender, EventArgs e)
{
// その1
label1.BackColor = SystemColors.ActiveCaption;
label1.Size = new Size(200, 50);
label1.Text = "label1label1label1label1label1label1label1label1";
label1.BorderStyle = BorderStyle.FixedSingle;
pictureBox1.Size = new Size(48, 48);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.BackColor = SystemColors.ActiveCaption;
pictureBox1.PictureBox = Image.FromFile("../../sample.png");
}
그 2 Label 를 PictureBox 의 아이 컨트롤로서 배치한다
Label 를 PictureBox 의 아이 컨트롤로 한다. 이것도 솔직한 손. Padding 속성을 사용하여 이미지를 오른쪽 가장자리로 추적합니다.
이미지를 왼쪽에 두는 경우와 마찬가지로 Padding 속성과 Label의 Location에서 조정한다.
PictureBox와 Label만으로 구성할 수 있는 것이 호감할 수 있다.
private void Form1_Load(object sender, EventArgs e)
{
// その2
label2.BackColor = Color.Transparent;
label2.Parent = pictureBox2;
label2.Location = Point.Empty;
label2.Size = new Size(148, 48);
label2.Text = "label2label2label2label2label2label2label2label2";
pictureBox2.BorderStyle = BorderStyle.FixedSingle;
pictureBox2.Size = new Size(200, 50);
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox2.BackColor = SystemColors.ActiveCaption;
pictureBox2.Padding = new Padding(150, 0, 0, 0);
pictureBox2.PictureBox = Image.FromFile("../../sample.png");
pictureBox2.Controls.Add(label2);
}
3! NG! Label에서 PictureBox 및 Text 설정
"텍스트가 이미지에 걸리지 않는다"는 점에서 목표를 채울 수 없다. Padding 속성이 이미지와 텍스트 모두에 효과적이므로 겹칩니다.
private void Form1_Load(object sender, EventArgs e)
{
// その3
var PictureBox = Image.FromFile("../../sample.png");
var canvas = new Bitmap(48, 48);
using (var g = Graphics.FromImage(canvas))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(image, 0, 0, 48, 48);
image.Dispose();
}
label3.BorderStyle = BorderStyle.FixedSingle;
label3.Size = new Size(200, 50);
label3.PictureBox = canvas;
label3.TextAlign = ContentAlignment.TopLeft;
label3.ImageAlign = ContentAlignment.MiddleRight;
label3.BackColor = SystemColors.ActiveCaption;
label3.Text = "label3label3label3label3label3label3label3label3";
}
4 레이아웃 패널에 Label 및 PictureBox 배치
좀 더 복잡한 레이아웃 요구가 나오면 FlowLayOutPanel이나 TableLayoutPanel 등에 배치하는 것이 더 좋을지도 모른다.
private void Form1_Load(object sender, EventArgs e)
{
// その4
flowLayoutPanel4.BorderStyle = BorderStyle.FixedSingle;
flowLayoutPanel4.Size = new Size(200, 50);
flowLayoutPanel4.Controls.Add(label4);
flowLayoutPanel4.Controls.Add(pictureBox4);
flowLayoutPanel4.BackColor = SystemColors.ActiveCaption;
label4.BackColor = Color.Transparent;
label4.Size = new Size(148, 48);
label4.Text = "label4label4label4label4label4label4label4label4";
pictureBox4.Size = new Size(48, 48);
pictureBox4.BackColor = Color.Transparent;
pictureBox4.PictureBox = Image.FromFile("../../sample.png");
}
확인한 환경
Reference
이 문제에 관하여(이미지 첨부 라벨을 실현해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/monta31538/items/3bf0d29c205364d6e8cd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)