C# Windows Forms开发实战:窗体与控件全剖析,从入门到醒目 ...

打印 上一主题 下一主题

主题 1801|帖子 1801|积分 5403

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C# 窗体与控件详解

1. Windows Forms 窗体底子

窗体(Form)​ 是 Windows 应用步伐的基本容器,用于承载控件并处理用户交互。


  • 创建窗体项目

    • 在 Visual Studio 中选择“Windows Forms App (.NET Framework)”模板。
    • 默认生成 Form1.cs(设计界面)和 Form1.Designer.cs(自动生成代码)。

  • 常用属性

    • Text:窗体标题。
    • Size:窗体尺寸。
    • StartPosition:窗体首次表现的位置(如 CenterScreen)。
    • FormBorderStyle:边框样式(如 FixedDialog 禁用调整巨细)。

  • 窗体变乱
    1. [/code] csharp
    2. [code]private void Form1_Load(object sender, EventArgs e) { } // 窗体加载时触发
    3. private void Form1_FormClosing(object sender, FormClosingEventArgs e) { } // 关闭前触发
    复制代码
  • 表现窗体

    • 主窗体在 Program.cs 中通过 Application.Run(new Form1()); 启动。
    • 模态对话框:form.ShowDialog()(阻塞其他窗口)。
    • 非模态窗口:form.Show()。

2. 常用控件详解

2.1 Label 控件



  • 属性

    • Text:表现的文本。
    • Font:字体样式。
    • ForeColor:文字颜色。

2.2 TextBox 控件



  • 属性

    • Multiline:允许多行输入。
    • PasswordChar:设置为 * 可隐藏输入(如密码框)。

  • 变乱
    1. [/code] csharp
    2. [code]private void textBox1_TextChanged(object sender, EventArgs e)
    3. {
    4.     label1.Text = $"输入长度:{textBox1.Text.Length}";
    5. }
    复制代码
2.3 Button 控件



  • 变乱
    1. [/code] csharp
    2. [code]private void button1_Click(object sender, EventArgs e)
    3. {
    4.     MessageBox.Show("按钮被点击!");
    5. }
    复制代码
2.4 ComboBox 和 ListBox



  • 添加项
    1. [/code] csharp
    2. [code]comboBox1.Items.Add("选项1");
    3. listBox1.Items.AddRange(new[] { "Item1", "Item2" });
    复制代码
  • 获取选中项
    1. [/code] csharp
    2. [code]string selected = comboBox1.SelectedItem.ToString();
    复制代码
2.5 DataGridView



  • 绑定数据
    1. [/code] csharp
    2. [code]dataGridView1.DataSource = new BindingList<Person>(personsList);
    复制代码
3. 布局管理



  • Anchor 和 Dock

    • Anchor:控件随窗体调整位置(如靠右、底部)。
    • Dock:控件添补到父容器的某侧(如 DockStyle.Top)。

  • 布局容器

    • Panel/GroupBox:分组控件。
    • FlowLayoutPanel:自动横向或纵向排列控件。
    • TableLayoutPanel:网格布局,支持行列比例。

4. 变乱处理



  • 变乱参数

    • KeyPressEventArgs:获取按下的键。
    1. [/code] csharp
    2. [code]private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    3. {
    4.     if (!char.IsDigit(e.KeyChar)) e.Handled = true; // 只允许数字输入
    5. }
    复制代码

  • 多变乱共享处理
    1. [/code] csharp
    2. [code]private void HandleButtonClick(object sender, EventArgs e)
    3. {
    4.     Button btn = (Button)sender;
    5.     btn.Text = "已点击";
    6. }
    7. // 将多个按钮的 Click 事件指向同一方法
    复制代码
5. 数据绑定与验证



  • 简单绑定
    1. [/code] csharp
    2. [code]textBox1.DataBindings.Add("Text", person, "Name");
    复制代码
  • ErrorProvider 验证
    1. [/code] csharp
    2. [code]private void textBox1_Validating(object sender, CancelEventArgs e)
    3. {
    4.     if (string.IsNullOrEmpty(textBox1.Text))
    5.         errorProvider1.SetError(textBox1, "不能为空!");
    6.     else
    7.         errorProvider1.Clear();
    8. }
    复制代码
6. 自界说控件



  • 创建用户控件

    • 右键项目 → 添加 → 用户控件(.cs)。
    • 拖放控件并添加逻辑。
    1. [/code] csharp
    2. [code]public partial class MyCustomControl : UserControl
    3. {
    4.     public MyCustomControl() { InitializeComponent(); }
    5. }
    复制代码

  • 扩展现有控件
    1. [/code] csharp
    2. [code]public class NumericTextBox : TextBox
    3. {
    4.     protected override void OnKeyPress(KeyPressEventArgs e)
    5.     {
    6.         if (!char.IsDigit(e.KeyChar)) e.Handled = true;
    7.         base.OnKeyPress(e);
    8.     }
    9. }
    复制代码
7. 高级主题



  • 多线程更新 UI
    1. [/code] csharp
    2. [code]private void UpdateStatus(string message)
    3. {
    4.     if (InvokeRequired)
    5.         Invoke(new Action(() => label1.Text = message));
    6.     else
    7.         label1.Text = message;
    8. }
    复制代码
  • 不规则窗体
    1. [/code] csharp
    2. [code]this.FormBorderStyle = FormBorderStyle.None;
    3. this.Region = new Region(new Rectangle(0, 0, 200, 200)); // 自定义形状
    复制代码
8. 实战示例:登录窗体

  1. [/code] csharp
  2. [code]public partial class LoginForm : Form
  3. {
  4.     public LoginForm() { InitializeComponent(); }
  5.     private void btnLogin_Click(object sender, EventArgs e)
  6.     {
  7.         if (txtUser.Text == "admin" && txtPass.Text == "123")
  8.             DialogResult = DialogResult.OK;
  9.         else
  10.             MessageBox.Show("登录失败!");
  11.     }
  12. }
复制代码
总结

通过系统学习窗体属性、控件利用、布局管理、变乱处理及数据绑定,开发者可以或许构建功能丰富、用户友爱的 Windows 应用步伐。联合自界说控件和高级技能,可进一步提拔界面体验和功能性。发起通过现实项目训练,加深对各个知识点的掌握。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表