c#控件笔记

c# PictureBox在工具箱的哪个位置

在 Visual Studio 的工具箱中,PictureBox 控件位于 "Common Controls" 部分。要找到 PictureBox,请按照以下步骤操作:

  1. 打开 Visual Studio 并加载您的项目。
  2. 确保已经打开了设计器视图(即您的窗体设计器)。
  3. 在 Visual Studio 的右侧,找到工具箱窗口。如果工具箱窗口未显示,可以通过选择菜单栏中的 View > Toolbox 打开它。
  4. 在工具箱窗口中,展开 Common Controls 部分,您应该能在其中找到 PictureBox 控件。

将 PictureBox 拖动到您的窗体上,即可在设计器中使用它。

c# PictureBox设置白色边框和左上角添加文字

在 C# 的 Windows Forms 中,你可以通过在 PictureBox 控件上绘制自定义边框和文本来实现这些效果。下面是一个示例代码,展示如何在 PictureBox 控件上设置白色边框,并在左上角添加文字。

示例代码

csharp 复制代码
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());
    }
}

代码说明

  1. CustomPictureBox 类:

    • 继承自 PictureBox 控件。
    • 新增了四个属性:CornerText、CornerFont、BorderColor 和 BorderWidth,分别用于设置左上角的文字、文字的字体、边框颜色和边框宽度。
    • 重写了 OnPaint 方法,先调用基类的 OnPaint 方法,然后绘制白色边框和左上角的文字。
  2. MainForm 类:

    • 创建了一个 CustomPictureBox 实例并设置其属性。
    • 将 CustomPictureBox 添加到窗体的控件集合中,并设置窗体的属性。
  3. Main 方法:

    • 配置应用程序的启动选项,并运行主窗体。

使用说明

  • 替换 "your_image_path_here.jpg" 为你的图片路径。
  • 可以根据需要调整 CornerText、CornerFont、BorderColor 和 BorderWidth 属性,以适应你的需求。

这个示例展示了如何自定义 PictureBox 控件,以便在图像上绘制边框和文字。

不自定义 直接添加

如果不想自定义控件,只是简单地在 PictureBox 上添加白色边框和左上角的文字,可以使用 Label 控件来实现这一效果。下面是一个示例,展示如何在 PictureBox 上添加白色边框,并在左上角添加一个 Label 显示文字。

示例代码

csharp 复制代码
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());
    }
}
  1. PictureBox:

    • 创建 PictureBox 控件,并设置其 Image、SizeMode 和 BorderStyle 属性。这里使用了 BorderStyle.FixedSingle 来添加白色边框。
  2. Label:

    • 创建 Label 控件,并设置其 Text、ForeColor(文字颜色为白色)、BackColor(背景颜色为透明)、Font 和 AutoSize 属性。
    • 使用 Location 属性将 Label 控件定位在 PictureBox 的左上角。
  3. 添加控件:

    • 将 Label 控件添加到 PictureBox 控件的 Controls 集合中。
    • 将 PictureBox 控件添加到窗体的 Controls 集合中。
  4. Main 方法:

    • 配置应用程序的启动选项,并运行主窗体。

使用说明

  • 替换 "your_image_path_here.jpg" 为你的图片路径。
  • 根据需要调整 Label 的 Text、Font 和 Location 属性,以适应你的需求。

通过这种方式,可以在不自定义控件的情况下,实现 PictureBox 上添加白色边框和左上角显示文字的效果。

添加白色边框

要在 PictureBox 控件上添加白色边框,可以使用以下方法:

  1. 设置 BorderStyle 属性:

    csharp 复制代码
    pictureBox.BorderStyle = BorderStyle.FixedSingle;
  2. 使用 Graphics 绘制边框:

    csharp 复制代码
    private void pictureBox_Paint(object sender, PaintEventArgs e)
    {
        ControlPaint.DrawBorder(e.Graphics, pictureBox.ClientRectangle, Color.White, ButtonBorderStyle.Solid);
    }

示例代码

csharp 复制代码
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 控件本身就是一个带有标题的容器控件,通常用于分组相关的控件。

  1. 打开 Visual
  2. Studio 并加载您的项目。
  3. 打开设计器视图(即窗体设计器)。
  4. 在工具箱中找到 GroupBox 控件(位于 Containers 部分)。
  5. 将 GroupBox 拖动到窗体上。
  6. 设置 GroupBox 的 Text 属性,以显示左上角的文字。

使用 Panel 和 Label

如果您需要更多的定制化,可以将 Label 控件放置在 Panel 控件的左上角。

  1. 打开 Visual Studio 并加载您的项目。
  2. 打开设计器视图(即窗体设计器)。
  3. 在工具箱中找到 Panel 控件(位于 Containers 部分)。
  4. 将 Panel 拖动到窗体上,并调整其大小。
  5. 在工具箱中找到 Label 控件(位于 Common Controls 部分)。
  6. 将 Label 拖动到 Panel 内,并放置在左上角。
  7. 设置 Label 的 Text 属性,以显示所需的文字。

以下是一个简单的示例代码,展示了如何在代码中进行这些操作:

csharp 复制代码
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 属性来实现自动换行。具体步骤如下:

  1. 将 Label 控件拖动到窗体上。
  2. 设置 Label 控件的 AutoSize 属性为 False。
  3. 设置 Label 控件的 MaximumSize 属性,使其宽度保持固定,这样当文本超过指定宽度时就会自动换行。

以下是一个示例代码,展示了如何在代码中设置 Label 控件的自动换行:

csharp 复制代码
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());
    }
}

在设计器中,您也可以通过属性窗口来设置这些属性:

  1. 选择 Label 控件。
  2. 在属性窗口中找到 AutoSize 属性并将其设置为 False。
  3. 在属性窗口中找到 MaximumSize 属性并设置其宽度值(例如 200, 0)。

这将确保 Label 控件在显示文本时,如果文本超过指定宽度,将会自动换行。

c# 设置label字体大小

在 C# 的 Windows Forms 应用程序中,您可以通过设置 Label 控件的 Font 属性来更改其字体大小。您可以在设计器中通过属性窗口进行设置,也可以在代码中动态设置。

在设计器中设置

  1. 选择 Label 控件。
  2. 在属性窗口中找到 Font 属性。
  3. 点击 Font 属性旁边的省略号按钮 ...,将会打开字体对话框。
  4. 在字体对话框中,您可以选择字体、样式和大小。选择所需的字体大小后,点击确定。

在代码中设置

您也可以通过代码来设置 Label 控件的字体大小。例如:

csharp 复制代码
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,可以这样做:

csharp 复制代码
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 控件设置行间距:

csharp 复制代码
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 方法来手动绘制文本,从而实现行间距的效果。以下是一个示例:

csharp 复制代码
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 属性:

csharp 复制代码
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 控件。在设计时和运行时都可以灵活调整行间距。

相关推荐
顽疲4 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
曹牧5 小时前
C#:输入的字符串格式不正确
c#
启观川5 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
程序喵大人6 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
ab1237686 小时前
Spring WebSocket(STOMP)
笔记·websocket·springboot·stomp
微三云 - 廖会灵 (私域系统开发)6 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
Xudde.7 小时前
PwnLab: init 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
2402_846295777 小时前
eDNA常用的基因片段
笔记
学逆向的7 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全