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 控件上设置白色边框,并在左上角添加文字。

示例代码

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 控件。
    • 新增了四个属性:CornerTextCornerFontBorderColorBorderWidth,分别用于设置左上角的文字、文字的字体、边框颜色和边框宽度。
    • 重写了 OnPaint 方法,先调用基类的 OnPaint 方法,然后绘制白色边框和左上角的文字。
  2. MainForm 类:

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

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

使用说明

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

这个示例展示了如何自定义 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());
    }
}
  1. PictureBox:

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

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

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

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

使用说明

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

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

添加白色边框

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

  1. 设置 BorderStyle 属性

    pictureBox.BorderStyle = BorderStyle.FixedSingle;
    
  2. 使用 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 控件与 PanelGroupBox 控件组合使用。以下是一个示例,展示了如何创建一个在左上角带有文字的控件:

使用说明

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

使用 GroupBox

GroupBox 控件本身就是一个带有标题的容器控件,通常用于分组相关的控件。

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

使用 PanelLabel

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

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

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

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);
    }
}

此代码创建了一个包含 PanelLabel 的窗体,并在 Panel 的左上角显示文字。通过调整控件的属性,可以实现所需的布局和样式。

label

c# 设置label自动换行

在 C# 的 Windows Forms 应用程序中,您可以通过设置 Label 控件的 AutoSize 属性和 MaximumSize 属性来实现自动换行。具体步骤如下:

  1. Label 控件拖动到窗体上。
  2. 设置 Label 控件的 AutoSize 属性为 False
  3. 设置 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());
    }
}

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

  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 控件的字体大小。例如:

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

posted @ 2024-06-03 22:48  一点灯  阅读(0)  评论(0编辑  收藏  举报  来源