跳转至

常用控件1

本章将介绍 .NET WinForms 中的一些常见控件,并描述它们的常用操作。这些控件是构建桌面应用程序用户界面的基础。

要了解 WinForms 的所有控件和它们的详细用法,请参阅 Microsoft 官方文档:

.NET WinForms 官方文档

标签 (Label)

System.Windows.Forms.Label 用于显示文字或图片。

设置文本

使用 Text 属性。WinForms 的 Label 不直接支持 HTML 富文本。如果需要富文本,可以考虑使用 RichTextBox 并设置其边框为无,背景色与容器相同。

label.Text = "这是一个标签";

显示图片

Label 也可以显示图片,通过 Image 属性。

using System.Drawing;

// 加载图片
label.Image = Image.FromFile("image.png");

// 如果需要同时显示文本和图片,可以设置 ImageAlign 和 TextAlign
label.ImageAlign = ContentAlignment.MiddleLeft;
label.TextAlign = ContentAlignment.MiddleRight;
为了更好地控制图片缩放和显示,推荐使用 PictureBox 控件。

按钮 (Button)

System.Windows.Forms.Button 就是常见的按钮。

事件:被点击

当按钮被点击时,会触发 Click 事件。可以这样指定处理该事件的方法:

// C#
button.Click += new EventHandler(HandleClick);

// 或者使用 lambda 表达式
button.Click += (sender, e) => {
    // 处理点击事件的代码
};

private void HandleClick(object sender, EventArgs e)
{
    // 处理点击事件的代码
}

改变文本

代码中可以使用 Text 属性来改变按钮的文本:

button.Text = "新的文本";

禁用、启用

所有控件(继承自 Control 类)都支持禁用和启用。禁用后,该控件不再响应用户输入。

  • 禁用
button.Enabled = false;
  • 启用
button.Enabled = true;

设置图标

可以通过 Image 属性给按钮设置图标。

using System.Drawing;

// 设置图标
button.Image = Image.FromFile("logo.png");

// 设置图标对齐方式
button.ImageAlign = ContentAlignment.MiddleLeft;

// 设置文本对齐方式
button.TextAlign = ContentAlignment.MiddleRight;

文本框 (TextBox)

System.Windows.Forms.TextBox 是用于文本输入的控件,默认是单行编辑。

如果需要多行编辑,可以设置 Multiline 属性为 true

事件:文本被修改

当文本框中的内容被修改时,会发出 TextChanged 事件。

textBox.TextChanged += new EventHandler(HandleTextChanged);

private void HandleTextChanged(object sender, EventArgs e)
{
    // sender 是文本框对象
    TextBox tb = sender as TextBox;
    string currentText = tb.Text;
    // 处理文本变化
}

事件:按下回车键

当用户在文本框中按下回车键时,可以处理 KeyDown 事件来响应。

textBox.KeyDown += new KeyEventHandler(HandleKeyDown);

private void HandleKeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        // 处理回车键事件
        e.SuppressKeyPress = true; // 阻止发出按键声音
    }
}
一个更常见的做法是设置窗体的 AcceptButton 属性为某个按钮,这样当用户在任何控件上按回车时,都会触发该按钮的点击事件。

获取文本

通过 Text 属性获取编辑框内的文本内容:

string text = textBox.Text;

设置提示文本 (Placeholder)

WinForms 的 TextBox 没有内置的 PlaceholderText 属性。但这可以通过一些技巧来实现,比如使用 SendMessage API。对于简单的场景,可以在窗体加载时设置提示,并在用户点击时清除。

设置文本

通过 Text 属性设置编辑框内的文本内容:

textBox.Text = "你好,WinForms";

清除所有文本

Clear 方法可以清除编辑框内所有的文本内容:

textBox.Clear();
或者
textBox.Text = string.Empty;

只允许输入数字

可以通过处理 KeyPress 事件来限制用户输入:

textBox.KeyPress += new KeyPressEventHandler(HandleKeyPress);

private void HandleKeyPress(object sender, KeyPressEventArgs e)
{
    // 如果输入的不是数字,也不是控制字符(如退格键),则取消该输入
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
    {
        e.Handled = true;
    }
}

拷贝和粘贴文本

TextBox 控件内置了标准的 Ctrl+CCtrl+V 功能。也可以通过代码调用:

// 拷贝选中文本到剪贴板
textBox.Copy();

// 粘贴剪贴板内容到当前光标处
textBox.Paste();

在末尾添加文本

AppendText 方法可以在末尾添加文本,并且会自动换行:

multiLineTextBox.AppendText("你好,白月黑羽");

在光标处插入文本

通过 SelectedText 属性可以在光标处插入文本(或替换选中的文本):

multiLineTextBox.SelectedText = "你好,白月黑羽";

获取选中文本

通过 SelectedText 属性获取:

string selection = multiLineTextBox.SelectedText;

设置最大长度

通过 MaxLength 属性可以限制文本框能输入的最大字符数。

multiLineTextBox.MaxLength = 1000;
对于行数限制,没有直接的属性,需要通过代码在 TextChanged 事件中进行判断和处理。

在末尾添加文本并自动滚动

添加内容后,调用 ScrollToCaret 方法可以确保新内容可见。

logBox.AppendText("新日志条目...
");
logBox.ScrollToCaret();