c#控件笔记 原创
c# PictureBox在工具箱的哪个位置
在 Visual Studio 的工具箱中,PictureBox
控件位于 “Common Controls” 部分。要找到 PictureBox
,请按照以下步骤操作:
- 打开 Visual Studio 并加载您的项目。
- 确保已经打开了设计器视图(即您的窗体设计器)。
- 在 Visual Studio 的右侧,找到工具箱窗口。如果工具箱窗口未显示,可以通过选择菜单栏中的
View > Toolbox
打开它。 - 在工具箱窗口中,展开
Common Controls
部分,您应该能在其中找到PictureBox
控件。
将 PictureBox
拖动到您的窗体上,即可在设计器中使用它。
c# PictureBox设置白色边框和左上角添加文字
在 C# 的 Windows Forms 中,你可以通过在 PictureBox
控件上绘制自定义边框和文本来实现这些效果。下面是一个示例代码,展示如何在 PictureBox
控件上设置白色边框,并在左上角添加文字。
示例代码
using System;
using System.Drawing;
using System.Windows.Forms;
public class CustomPictureBox : PictureBox
{
private string _cornerText = "Sample Text";
private Font _cornerFont = new Font("Arial", 10);
private Color _borderColor = Color.White;
private int _borderWidth = 2;
public string CornerText
{
get { return _cornerText; }
set { _cornerText = value; Invalidate(); }
}
public Font CornerFont
{
get { return _cornerFont; }
set { _cornerFont = value; Invalidate(); }
}
public Color BorderColor
{
get { return _borderColor; }
set { _borderColor = value; Invalidate(); }
}
public int BorderWidth
{
get { return _borderWidth; }
set { _borderWidth = value; Invalidate(); }
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
// Draw the white border
using (Pen pen = new Pen(_borderColor, _borderWidth))
{
pe.Graphics.DrawRectangle(pen, 0, 0, this.Width - 1, this.Height - 1);
}
// Draw the text in the top left corner
using (Brush brush = new SolidBrush(this.ForeColor))
{
pe.Graphics.DrawString(_cornerText, _cornerFont, brush, new PointF(5, 5));
}
}
}
public class MainForm : Form
{
private CustomPictureBox customPictureBox;
public MainForm()
{
customPictureBox = new CustomPictureBox
{
Image = Image.FromFile("your_image_path_here.jpg"), // Set your image path
SizeMode = PictureBoxSizeMode.StretchImage,
CornerText = "Your Text",
CornerFont = new Font("Arial", 12, FontStyle.Bold),
BorderColor = Color.White,
BorderWidth = 3,
Dock = DockStyle.Fill
};
this.Controls.Add(customPictureBox);
this.Text = "Custom PictureBox Example";
this.Size = new Size(800, 600);
}
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
代码说明
-
CustomPictureBox 类:
- 继承自
PictureBox
控件。 - 新增了四个属性:
CornerText
、CornerFont
、BorderColor
和BorderWidth
,分别用于设置左上角的文字、文字的字体、边框颜色和边框宽度。 - 重写了
OnPaint
方法,先调用基类的OnPaint
方法,然后绘制白色边框和左上角的文字。
- 继承自
-
MainForm 类:
- 创建了一个
CustomPictureBox
实例并设置其属性。 - 将
CustomPictureBox
添加到窗体的控件集合中,并设置窗体的属性。
- 创建了一个
-
Main 方法:
- 配置应用程序的启动选项,并运行主窗体。
使用说明
- 替换
"your_image_path_here.jpg"
为你的图片路径。 - 可以根据需要调整
CornerText
、CornerFont
、BorderColor
和BorderWidth
属性,以适应你的需求。
这个示例展示了如何自定义 PictureBox
控件,以便在图像上绘制边框和文字。
不自定义 直接添加
如果不想自定义控件,只是简单地在 PictureBox
上添加白色边框和左上角的文字,可以使用 Label
控件来实现这一效果。下面是一个示例,展示如何在 PictureBox
上添加白色边框,并在左上角添加一个 Label
显示文字。
示例代码
using System;
using System.Drawing;
using System.Windows.Forms;
public class MainForm : Form
{
private PictureBox pictureBox;
private Label label;
public MainForm()
{
// Initialize PictureBox
pictureBox = new PictureBox
{
Image = Image.FromFile("your_image_path_here.jpg"), // Set your image path
SizeMode = PictureBoxSizeMode.StretchImage,
BorderStyle = BorderStyle.FixedSingle, // White border
Dock = DockStyle.Fill
};
// Initialize Label
label = new Label
{
Text = "Your Text",
ForeColor = Color.White,
BackColor = Color.Transparent,
Font = new Font("Arial", 12, FontStyle.Bold),
AutoSize = true,
Location = new Point(10, 10) // Position in the top-left corner
};
// Add Label to PictureBox
pictureBox.Controls.Add(label);
// Add PictureBox to Form
this.Controls.Add(pictureBox);
this.Text = "PictureBox with Label Example";
this.Size = new Size(800, 600);
}
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
-
PictureBox:
- 创建
PictureBox
控件,并设置其Image
、SizeMode
和BorderStyle
属性。这里使用了BorderStyle.FixedSingle
来添加白色边框。
- 创建
-
Label:
- 创建
Label
控件,并设置其Text
、ForeColor
(文字颜色为白色)、BackColor
(背景颜色为透明)、Font
和AutoSize
属性。 - 使用
Location
属性将Label
控件定位在PictureBox
的左上角。
- 创建
-
添加控件:
- 将
Label
控件添加到PictureBox
控件的Controls
集合中。 - 将
PictureBox
控件添加到窗体的Controls
集合中。
- 将
-
Main 方法:
- 配置应用程序的启动选项,并运行主窗体。
使用说明
- 替换
"your_image_path_here.jpg"
为你的图片路径。 - 根据需要调整
Label
的Text
、Font
和Location
属性,以适应你的需求。
通过这种方式,可以在不自定义控件的情况下,实现 PictureBox
上添加白色边框和左上角显示文字的效果。
添加白色边框
要在 PictureBox
控件上添加白色边框,可以使用以下方法:
-
设置 BorderStyle 属性:
pictureBox.BorderStyle = BorderStyle.FixedSingle;
-
使用 Graphics 绘制边框:
private void pictureBox_Paint(object sender, PaintEventArgs e) { ControlPaint.DrawBorder(e.Graphics, pictureBox.ClientRectangle, Color.White, ButtonBorderStyle.Solid); }
示例代码
using System;
using System.Drawing;
using System.Windows.Forms;
public class MainForm : Form
{
private PictureBox pictureBox;
private Label label;
public MainForm()
{
// Initialize PictureBox
pictureBox = new PictureBox
{
Image = Image.FromFile("your_image_path_here.jpg"), // Set your image path
SizeMode = PictureBoxSizeMode.StretchImage,
BorderStyle = BorderStyle.FixedSingle, // White border
Dock = DockStyle.Fill
};
// Add Paint event handler to draw border
pictureBox.Paint += pictureBox_Paint;
// Initialize Label
label = new Label
{
Text = "Your Text",
ForeColor = Color.White,
BackColor = Color.Transparent,
Font = new Font("Arial", 12, FontStyle.Bold),
AutoSize = true,
Location = new Point(10, 10) // Position in the top-left corner
};
// Add Label to PictureBox
pictureBox.Controls.Add(label);
// Add PictureBox to Form
this.Controls.Add(pictureBox);
this.Text = "PictureBox with Label Example";
this.Size = new Size(800, 600);
}
// Paint event handler to draw border
private void pictureBox_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, pictureBox.ClientRectangle, Color.White, ButtonBorderStyle.Solid);
}
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
c#左上角带文字的控件
在 C# 的 Windows Forms 应用程序中,如果您想创建一个在左上角带有文字的控件,可以使用 Label
控件和其他控件的组合。例如,可以将 Label
控件与 Panel
或 GroupBox
控件组合使用。以下是一个示例,展示了如何创建一个在左上角带有文字的控件:
使用说明
- 替换
"your_image_path_here.jpg"
为你的图片路径。 - 根据需要调整
Label
的Text
、Font
和Location
属性,以适应你的需求。
使用 GroupBox
GroupBox
控件本身就是一个带有标题的容器控件,通常用于分组相关的控件。
- 打开 Visual
- Studio 并加载您的项目。
- 打开设计器视图(即窗体设计器)。
- 在工具箱中找到
GroupBox
控件(位于Containers
部分)。 - 将
GroupBox
拖动到窗体上。 - 设置
GroupBox
的Text
属性,以显示左上角的文字。
使用 Panel
和 Label
如果您需要更多的定制化,可以将 Label
控件放置在 Panel
控件的左上角。
- 打开 Visual Studio 并加载您的项目。
- 打开设计器视图(即窗体设计器)。
- 在工具箱中找到
Panel
控件(位于Containers
部分)。 - 将
Panel
拖动到窗体上,并调整其大小。 - 在工具箱中找到
Label
控件(位于Common Controls
部分)。 - 将
Label
拖动到Panel
内,并放置在左上角。 - 设置
Label
的Text
属性,以显示所需的文字。
以下是一个简单的示例代码,展示了如何在代码中进行这些操作:
public class MyForm : Form
{
private Panel panel;
private Label label;
public MyForm()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.panel = new System.Windows.Forms.Panel();
this.label = new System.Windows.Forms.Label();
// Panel 设置
this.panel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.panel.Location = new System.Drawing.Point(10, 10);
this.panel.Size = new System.Drawing.Size(200, 100);
this.panel.BackColor = System.Drawing.Color.LightGray;
// Label 设置
this.label.AutoSize = true;
this.label.Location = new System.Drawing.Point(5, 5); // 左上角
this.label.Text = "我的文字";
// 添加控件
this.panel.Controls.Add(this.label);
this.Controls.Add(this.panel);
// Form 设置
this.Text = "带文字的控件示例";
this.Size = new System.Drawing.Size(300, 200);
}
}
此代码创建了一个包含 Panel
和 Label
的窗体,并在 Panel
的左上角显示文字。通过调整控件的属性,可以实现所需的布局和样式。
label
c# 设置label自动换行
在 C# 的 Windows Forms 应用程序中,您可以通过设置 Label
控件的 AutoSize
属性和 MaximumSize
属性来实现自动换行。具体步骤如下:
- 将
Label
控件拖动到窗体上。 - 设置
Label
控件的AutoSize
属性为False
。 - 设置
Label
控件的MaximumSize
属性,使其宽度保持固定,这样当文本超过指定宽度时就会自动换行。
以下是一个示例代码,展示了如何在代码中设置 Label
控件的自动换行:
public class MyForm : Form
{
private Label label;
public MyForm()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.label = new System.Windows.Forms.Label();
// Label 设置
this.label.AutoSize = false; // 禁用自动调整大小
this.label.MaximumSize = new System.Drawing.Size(200, 0); // 设置最大宽度为200像素,高度不限
this.label.Size = new System.Drawing.Size(200, 0); // 设置控件的初始大小
this.label.Text = "这是一个很长的文本示例,当它超过最大宽度时会自动换行。";
this.label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; // 可选:添加边框以便于查看
// 添加控件
this.Controls.Add(this.label);
// Form 设置
this.Text = "Label 自动换行示例";
this.Size = new System.Drawing.Size(300, 200);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MyForm());
}
}
在设计器中,您也可以通过属性窗口来设置这些属性:
- 选择
Label
控件。 - 在属性窗口中找到
AutoSize
属性并将其设置为False
。 - 在属性窗口中找到
MaximumSize
属性并设置其宽度值(例如200, 0
)。
这将确保 Label
控件在显示文本时,如果文本超过指定宽度,将会自动换行。
c# 设置label字体大小
在 C# 的 Windows Forms 应用程序中,您可以通过设置 Label
控件的 Font
属性来更改其字体大小。您可以在设计器中通过属性窗口进行设置,也可以在代码中动态设置。
在设计器中设置
- 选择
Label
控件。 - 在属性窗口中找到
Font
属性。 - 点击
Font
属性旁边的省略号按钮...
,将会打开字体对话框。 - 在字体对话框中,您可以选择字体、样式和大小。选择所需的字体大小后,点击确定。
在代码中设置
您也可以通过代码来设置 Label
控件的字体大小。例如:
public class MyForm : Form
{
private Label label;
public MyForm()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.label = new System.Windows.Forms.Label();
// Label 设置
this.label.AutoSize = true;
this.label.Text = "这是一个示例文本";
this.label.Font = new System.Drawing.Font("Arial", 14, System.Drawing.FontStyle.Regular); // 设置字体为 Arial,大小为 14
// 设置位置和大小
this.label.Location = new System.Drawing.Point(10, 10);
// 添加控件
this.Controls.Add(this.label);
// Form 设置
this.Text = "Label 字体大小示例";
this.Size = new System.Drawing.Size(300, 200);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MyForm());
}
}
在上面的示例中,我们通过 new System.Drawing.Font("Arial", 14, System.Drawing.FontStyle.Regular)
创建了一个新的字体对象,指定了字体名称为 Arial
,字体大小为 14
,并应用到 label
控件的 Font
属性上。
您可以根据需要更改字体名称和大小。例如,如果您想使用 Times New Roman
字体并将字体大小设置为 18
,可以这样做:
this.label.Font = new System.Drawing.Font("Times New Roman", 18, System.Drawing.FontStyle.Regular);
通过这种方式,您可以轻松地更改 Label
控件的字体大小以及其他字体属性。
c# 设置label行间距
在 C# 的 Windows Forms 中,默认的 Label
控件不直接支持行间距的设置。不过,您可以通过一些变通的方法来实现行间距的效果。常见的做法是重绘 Label
控件,或者使用 RichTextBox
控件来代替 Label
,因为 RichTextBox
支持更高级的文本格式设置。
方法一:使用 RichTextBox
控件
RichTextBox
控件可以通过设置段落格式来调整行间距。以下是一个简单的示例,展示如何使用 RichTextBox
控件设置行间距:
public class MyForm : Form
{
private RichTextBox richTextBox;
public MyForm()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.richTextBox = new System.Windows.Forms.RichTextBox();
// RichTextBox 设置
this.richTextBox.Text = "这是第一行\n这是第二行\n这是第三行";
this.richTextBox.ReadOnly = true; // 使其只读,类似于 Label 的行为
this.richTextBox.BorderStyle = BorderStyle.None; // 去掉边框
this.richTextBox.Location = new System.Drawing.Point(10, 10);
this.richTextBox.Size = new System.Drawing.Size(300, 200);
// 设置行间距
this.richTextBox.SelectAll();
this.richTextBox.SelectionFont = new Font("Arial", 12);
SetLineSpacing(this.richTextBox, 20); // 设置行间距为 20 像素
// 添加控件
this.Controls.Add(this.richTextBox);
// Form 设置
this.Text = "RichTextBox 行间距示例";
this.Size = new System.Drawing.Size(400, 300);
}
private void SetLineSpacing(RichTextBox rtb, int spacing)
{
var fmt = new System.Windows.Forms.RichTextBox.RichTextBoxFormatting();
fmt.LineSpacing = spacing;
// 由于 .NET Framework 没有直接设置行间距的方法,
// 需要通过发送 EM_SETPARAFORMAT 消息来间接设置。
const int EM_SETPARAFORMAT = 0x447;
const int PFM_LINESPACING = 0x200;
var pf = new PARAFORMAT2
{
cbSize = (ushort)Marshal.SizeOf(typeof(PARAFORMAT2)),
dwMask = PFM_LINESPACING,
dyLineSpacing = spacing * 20, // twips: 1/20 of a point
bLineSpacingRule = 4 // multiply dyLineSpacing by 1
};
SendMessage(rtb.Handle, EM_SETPARAFORMAT, IntPtr.Zero, ref pf);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MyForm());
}
[DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wParam, ref PARAFORMAT2 lParam);
[StructLayout(LayoutKind.Sequential)]
private struct PARAFORMAT2
{
public ushort cbSize;
public uint dwMask;
public short wNumbering;
public short wReserved;
public int dxStartIndent;
public int dxRightIndent;
public int dxOffset;
public short wAlignment;
public short cTabCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public int[] rgxTabs;
public int dySpaceBefore;
public int dySpaceAfter;
public int dyLineSpacing;
public short sStyle;
public byte bLineSpacingRule;
public byte bOutlineLevel;
public short wShadingWeight;
public short wShadingStyle;
public short wNumberingStart;
public short wNumberingStyle;
public short wNumberingTab;
public short wBorderSpace;
public short wBorderWidth;
public short wBorders;
}
}
在这个示例中,我们使用 RichTextBox
控件,并通过发送 EM_SETPARAFORMAT
消息来设置行间距。我们定义了一个 SetLineSpacing
方法,它接收一个 RichTextBox
控件和行间距值(以像素为单位)。通过这种方式,您可以灵活地设置行间距。
方法二:重绘 Label
控件
如果您想坚持使用 Label
控件,可以通过自定义控件并重写 OnPaint
方法来手动绘制文本,从而实现行间距的效果。以下是一个示例:
public class LineSpacingLabel : Label
{
private int lineSpacing = 10; // 默认行间距为 10 像素
public int LineSpacing
{
get { return lineSpacing; }
set { lineSpacing = value; Invalidate(); }
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
string[] lines = Text.Split(new[] { '\n' }, StringSplitOptions.None);
using (Brush brush = new SolidBrush(ForeColor))
{
for (int i = 0; i < lines.Length; i++)
{
e.Graphics.DrawString(lines[i], Font, brush, new PointF(0, i * (Font.Height + lineSpacing)));
}
}
}
}
使用自定义的 LineSpacingLabel
控件来替换普通的 Label
控件,并设置其 LineSpacing
属性:
public class MyForm : Form
{
private LineSpacingLabel label;
public MyForm()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.label = new LineSpacingLabel();
// Label 设置
this.label.AutoSize = false;
this.label.Text = "这是第一行\n这是第二行\n这是第三行";
this.label.Font = new System.Drawing.Font("Arial", 12);
this.label.Size = new System.Drawing.Size(300, 200);
this.label.LineSpacing = 10; // 设置行间距为 10 像素
// 设置位置
this.label.Location = new System.Drawing.Point(10, 10);
// 添加控件
this.Controls.Add(this.label);
// Form 设置
this.Text = "Label 行间距示例";
this.Size = new System.Drawing.Size(400, 300);
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MyForm());
}
}
通过这种方式,您可以创建一个带有行间距功能的 Label
控件。在设计时和运行时都可以灵活调整行间距。