按钮
2025/9/26原创大约 1 分钟约 445 字
1. 按钮点击改变背景颜色
using System;
using System.Drawing;
using System.Windows.Forms;
public class ButtonColorForm : Form
{
private Button lastClickedButton = null;
private readonly Color highlightColor = Color.LightSkyBlue;
public ButtonColorForm()
{
// 创建3个示例按钮
var button1 = CreateButton("按钮1", 50);
var button2 = CreateButton("按钮2", 150);
var button3 = CreateButton("按钮3", 250);
this.Text = "按钮颜色切换示例";
this.ClientSize = new Size(300, 350);
this.Controls.AddRange(new Control[] { button1, button2, button3 });
}
private Button CreateButton(string text, int yPos)
{
var btn = new Button
{
Text = text,
Size = new Size(200, 80),
Location = new Point(50, yPos),
Font = new Font("Microsoft YaHei", 12),
Tag = Color.Transparent // 存储原始颜色
};
btn.Click += Button_Click;
return btn;
}
private void Button_Click(object sender, EventArgs e)
{
var currentButton = (Button)sender;
// 恢复上一个按钮的颜色
if (lastClickedButton != null && lastClickedButton != currentButton)
{
lastClickedButton.BackColor = (Color)lastClickedButton.Tag;
}
// 存储当前按钮原始颜色
if (currentButton.Tag == null || (Color)currentButton.Tag == Color.Transparent)
{
currentButton.Tag = currentButton.BackColor;
}
// 设置新颜色
currentButton.BackColor = highlightColor;
lastClickedButton = currentButton;
}
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.Run(new ButtonColorForm());
}
}
2. 异步操作
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
btnStartTask.Click += BtnStartTask_Click;
}
private void BtnStartTask_Click(object sender, EventArgs e)
{
// 更新状态标签
lblStatus.Text = "任务开始...";
lblResult.Text = string.Empty;
// 使用 Task.Run 在后台线程上执行任务
Task.Run(() =>
{
// 模拟耗时操作,例如计算斐波那契数列的第N项
int result = Fibonacci(30); // 计算斐波那契数列的第30项,这是一个耗时操作
return result;
})
.ContinueWith(task =>
{
if (task.IsFaulted)
{
// 处理异常情况
MessageBox.Show("任务执行过程中发生错误: " + task.Exception.InnerException.Message);
}
else if (task.IsCompleted)
{
// 在UI线程上更新标签,因为ContinueWith默认在后台线程执行
Invoke((MethodInvoker)delegate
{
lblStatus.Text = "任务完成";
lblResult.Text = "结果: " + task.Result.ToString();
});
}
}, TaskScheduler.FromCurrentSynchronizationContext()); // 使用当前同步上下文,确保在UI线程上执行后续操作
}
private int Fibonacci(int n)
{
if (n <= 1) return n;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}