【内部资料】C#winform画笔代码
作者:野牛程序员:2024-01-07 10:02:17C#阅读 2821
画笔代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PPTorPDF
{
public partial class PenForm : Form
{
private bool isDrawing = false;
private Point lastPoint;
private Bitmap drawingBitmap;
private Pen currentPen = new Pen(Color.Black, 5) { LineJoin = LineJoin.Round };
public class NewPanel : Panel
{
public NewPanel()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
}
}
private GraphicsPath drawingPath = new GraphicsPath();
private NewPanel panel6;
public PenForm()
{
InitializeComponent();
panel6 = new NewPanel();
// panel6.Width = panel1.Width;
// panel6.Height = panel1.Height;
panel6.Width = Screen.PrimaryScreen.Bounds.Width;
panel6.Height = Screen.PrimaryScreen.Bounds.Height;
//panel6.BackColor = Color.Blue;
panel6.BackColor = panel1.BackColor;
panel6.Paint += panel6_Paint; // 将panel6_Paint事件与panel6控件的Paint事件关联
panel6.MouseMove += panel6_MouseMove;
panel6.MouseUp += panel6_MouseUp;
panel6.MouseDown += panel6_MouseDown;
panel1.Controls.Add(panel6);
// drawingBitmap = new Bitmap(panel1.Width, panel1.Height);
// 设置 drawingBitmap 为屏幕的宽度和高度
drawingBitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
InitializeColorComboBox();
colorComboBox.SelectedIndex = 0;
trackBar1.Value = 4;
}
private void InitializeColorComboBox()
{
// 添加颜色到colorComboBox
colorComboBox.Items.Add("White");
colorComboBox.Items.Add("Red");
colorComboBox.Items.Add("Blue");
colorComboBox.Items.Add("Green");
colorComboBox.Items.Add("Yellow");
colorComboBox.Items.Add("Black"); // 用于橡皮擦
colorComboBox.SelectedIndex = 0; // 默认选择第一个颜色
}
private void panel6_Paint(object sender, PaintEventArgs e)
{
using (Graphics g = Graphics.FromImage(drawingBitmap))
{
// 绘制整个路径
g.DrawPath(currentPen, drawingPath);
}
e.Graphics.DrawImage(drawingBitmap, Point.Empty);
}
private void panel1_MouseDown(object sender, MouseEventArgs e)
{
}
private void panel6_MouseDown(object sender, MouseEventArgs e)
{
isDrawing = true;
lastPoint = e.Location;
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
}
private void panel6_MouseMove(object sender, MouseEventArgs e)
{
if (isDrawing)
{
using (Graphics g = Graphics.FromImage(drawingBitmap))
{
if (currentPen.Color == Color.Black)
{
g.FillEllipse(Brushes.Black, e.X - 10, e.Y - 10, 20, 20);
}
else
{
g.DrawLine(currentPen, lastPoint, e.Location);
}
}
lastPoint = e.Location;
panel6.Invalidate();
// panel1.Invalidate(new Rectangle(lastPoint.X - 10, lastPoint.Y - 10, 20, 20));
// panel1.Invalidate(new Rectangle(lastPoint.X - 22, lastPoint.Y - 22, 30, 30));
// panel1.Invalidate(new Rectangle(lastPoint.X - 30, lastPoint.Y - 30, 60, 60));
// panel6.Invalidate(new Rectangle(lastPoint.X - 35, lastPoint.Y - 35, 105, 105));
// panel1.Invalidate(new Rectangle(lastPoint.X - 46, lastPoint.Y - 46, 100, 100));
// drawingPath.AddEllipse(e.X - 30, e.Y - 30, 60, 60);
// this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);
}
}
private void panel1_MouseUp(object sender, MouseEventArgs e)
{
}
private void panel6_MouseUp(object sender, MouseEventArgs e)
{
isDrawing = false;
}
private void EraserButton_Click(object sender, EventArgs e)
{
// 切换为橡皮擦,颜色设为黑色
currentPen.Color = Color.Black;
// 设置 colorComboBox 选中项为黑色
colorComboBox.SelectedItem = "Black";
// 更改鼠标指针为块状
Cursor = Cursors.Cross; // 你也可以选择其他合适的 Cursors 枚举值
}
private void ClearButton_Click(object sender, EventArgs e)
{
// 清除画板
drawingPath.Reset();
using (Graphics g = Graphics.FromImage(drawingBitmap))
{
g.Clear(Color.Black);
}
panel6.Invalidate();
// 切换到其他模式,恢复鼠标指针为默认形状
Cursor = Cursors.Default;
// 设置 colorComboBox 选中项为黑色
colorComboBox.SelectedItem = "White";
}
private void colorComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
// 更新画笔颜色
if (colorComboBox.SelectedItem != null)
{
currentPen.Color = Color.FromName(colorComboBox.SelectedItem.ToString());
if (colorComboBox.SelectedItem != "Black")
{
// 切换到其他模式,恢复鼠标指针为默认形状
Cursor = Cursors.Default;
}
}
}
private void colorComboBox_Click(object sender, EventArgs e)
{
}
private void panel2_Click(object sender, EventArgs e)
{
// 切换到其他模式,恢复鼠标指针为默认形状
Cursor = Cursors.Default;
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
// 滑块控件滑动时设置画笔的粗细
SetPenThickness(trackBar1.Value);
}
private void SetPenThickness(int thickness)
{
currentPen.Width = thickness;
}
}
}winform窗体代码
namespace PPTorPDF
{
partial class PenForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
panel1 = new Panel();
EraserButton = new Button();
ClearButton = new Button();
colorComboBox = new ComboBox();
panel2 = new Panel();
label2 = new Label();
label1 = new Label();
trackBar1 = new TrackBar();
panelM = new Panel();
panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackBar1).BeginInit();
panelM.SuspendLayout();
SuspendLayout();
//
// panel1
//
panel1.BackColor = SystemColors.Desktop;
panel1.Dock = DockStyle.Fill;
panel1.Location = new Point(0, 0);
panel1.Name = "panel1";
panel1.Size = new Size(2330, 1056);
panel1.TabIndex = 0;
panel1.MouseDown += panel1_MouseDown;
panel1.MouseMove += panel1_MouseMove;
panel1.MouseUp += panel1_MouseUp;
//
// EraserButton
//
EraserButton.Location = new Point(31, 3);
EraserButton.Name = "EraserButton";
EraserButton.Size = new Size(112, 34);
EraserButton.TabIndex = 1;
EraserButton.Text = "橡皮擦";
EraserButton.UseVisualStyleBackColor = true;
EraserButton.Click += EraserButton_Click;
//
// ClearButton
//
ClearButton.Location = new Point(149, 3);
ClearButton.Name = "ClearButton";
ClearButton.Size = new Size(112, 34);
ClearButton.TabIndex = 2;
ClearButton.Text = "清除画板";
ClearButton.UseVisualStyleBackColor = true;
ClearButton.Click += ClearButton_Click;
//
// colorComboBox
//
colorComboBox.FormattingEnabled = true;
colorComboBox.Location = new Point(369, 6);
colorComboBox.Name = "colorComboBox";
colorComboBox.Size = new Size(182, 32);
colorComboBox.TabIndex = 3;
colorComboBox.SelectedIndexChanged += colorComboBox_SelectedIndexChanged;
//
// panel2
//
panel2.Controls.Add(label2);
panel2.Controls.Add(label1);
panel2.Controls.Add(trackBar1);
panel2.Controls.Add(EraserButton);
panel2.Controls.Add(colorComboBox);
panel2.Controls.Add(ClearButton);
panel2.Dock = DockStyle.Top;
panel2.Location = new Point(0, 0);
panel2.Name = "panel2";
panel2.Size = new Size(2330, 66);
panel2.TabIndex = 4;
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(580, 13);
label2.Name = "label2";
label2.Size = new Size(100, 24);
label2.TabIndex = 6;
label2.Text = "画笔粗细:";
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(281, 10);
label1.Name = "label1";
label1.Size = new Size(82, 24);
label1.TabIndex = 5;
label1.Text = "画笔颜色";
//
// trackBar1
//
trackBar1.LargeChange = 10;
trackBar1.Location = new Point(677, 13);
trackBar1.Maximum = 20;
trackBar1.Name = "trackBar1";
trackBar1.Size = new Size(354, 69);
trackBar1.TabIndex = 4;
//
// panelM
//
panelM.BackColor = SystemColors.ActiveCaption;
panelM.Controls.Add(panel2);
panelM.Controls.Add(panel1);
panelM.Dock = DockStyle.Fill;
panelM.Location = new Point(0, 0);
panelM.Name = "panelM";
panelM.Size = new Size(2330, 1056);
panelM.TabIndex = 5;
//
// PenForm
//
AutoScaleDimensions = new SizeF(11F, 24F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(2330, 1056);
Controls.Add(panelM);
DoubleBuffered = true;
Name = "PenForm";
StartPosition = FormStartPosition.CenterParent;
Text = "画板-野牛程序员";
panel2.ResumeLayout(false);
panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackBar1).EndInit();
panelM.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
private Panel panel1;
private Button EraserButton;
private Button ClearButton;
private ComboBox colorComboBox;
private Panel panel2;
private Panel panelM;
private TrackBar trackBar1;
private Label label1;
private Label label2;
}
}野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

