first commit

This commit is contained in:
lq
2026-09-07 08:07:08 +08:00
commit e703fb2752
2488 changed files with 2784663 additions and 0 deletions
File diff suppressed because one or more lines are too long
+64
View File
@@ -0,0 +1,64 @@
using AntdUI;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Controls
{
public class AlertManager
{
private readonly Alert alert;
private readonly Queue<(string message, TType type)> messageQueue = new Queue<(string, TType)>();
private readonly System.Windows.Forms.Timer throttleTimer;
private const int ThrottleInterval = 100; // 毫秒
public AlertManager(Alert alertControl)
{
alert = alertControl ?? throw new ArgumentNullException(nameof(alertControl));
throttleTimer = new System.Windows.Forms.Timer();
throttleTimer.Interval = ThrottleInterval;
throttleTimer.Tick += ThrottleTimer_Tick;
}
public void ShowAlert(string message, TType type = TType.Info)
{
messageQueue.Enqueue((message, type));
if (!throttleTimer.Enabled)
{
throttleTimer.Start();
}
}
private void ThrottleTimer_Tick(object sender, EventArgs e)
{
if (messageQueue.Count > 0)
{
var (message, type) = messageQueue.Dequeue();
UpdateAlertUI(message, type);
}
else
{
throttleTimer.Stop();
}
}
private void UpdateAlertUI(string message, TType type)
{
if (alert.InvokeRequired)
{
alert.BeginInvoke(new Action(() => UpdateAlertUI(message, type)));
return;
}
alert.Text = message;
alert.Icon = type;
alert.Invalidate();
}
public void Dispose()
{
throttleTimer?.Dispose();
}
}
}
+173
View File
@@ -0,0 +1,173 @@
namespace JinYuan.ControlLib
{
partial class ArrTotalQty
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ArrTotalQty));
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.lbl_Title6 = new JinYuan.ControlLib.TotalQty();
this.lbl_Title5 = new JinYuan.ControlLib.TotalQty();
this.lbl_Title4 = new JinYuan.ControlLib.TotalQty();
this.lbl_Title3 = new JinYuan.ControlLib.TotalQty();
this.lbl_Title2 = new JinYuan.ControlLib.TotalQty();
this.lbl_Title1 = new JinYuan.ControlLib.TotalQty();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 6;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.Controls.Add(this.lbl_Title6, 5, 0);
this.tableLayoutPanel1.Controls.Add(this.lbl_Title5, 4, 0);
this.tableLayoutPanel1.Controls.Add(this.lbl_Title4, 3, 0);
this.tableLayoutPanel1.Controls.Add(this.lbl_Title3, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.lbl_Title2, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.lbl_Title1, 0, 0);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 1;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(300, 79);
this.tableLayoutPanel1.TabIndex = 1;
//
// lbl_Title6
//
this.lbl_Title6.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title6.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lbl_Title6.BackgroundImage")));
this.lbl_Title6.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbl_Title6.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title6.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_Title6.Location = new System.Drawing.Point(254, 5);
this.lbl_Title6.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.lbl_Title6.Name = "lbl_Title6";
this.lbl_Title6.Size = new System.Drawing.Size(42, 69);
this.lbl_Title6.TabIndex = 5;
this.lbl_Title6.TitleName = "0";
//
// lbl_Title5
//
this.lbl_Title5.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title5.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lbl_Title5.BackgroundImage")));
this.lbl_Title5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbl_Title5.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title5.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_Title5.Location = new System.Drawing.Point(204, 5);
this.lbl_Title5.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.lbl_Title5.Name = "lbl_Title5";
this.lbl_Title5.Size = new System.Drawing.Size(42, 69);
this.lbl_Title5.TabIndex = 4;
this.lbl_Title5.TitleName = "0";
//
// lbl_Title4
//
this.lbl_Title4.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title4.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lbl_Title4.BackgroundImage")));
this.lbl_Title4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbl_Title4.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title4.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_Title4.Location = new System.Drawing.Point(154, 5);
this.lbl_Title4.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.lbl_Title4.Name = "lbl_Title4";
this.lbl_Title4.Size = new System.Drawing.Size(42, 69);
this.lbl_Title4.TabIndex = 3;
this.lbl_Title4.TitleName = "0";
//
// lbl_Title3
//
this.lbl_Title3.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title3.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lbl_Title3.BackgroundImage")));
this.lbl_Title3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbl_Title3.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title3.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_Title3.Location = new System.Drawing.Point(104, 5);
this.lbl_Title3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.lbl_Title3.Name = "lbl_Title3";
this.lbl_Title3.Size = new System.Drawing.Size(42, 69);
this.lbl_Title3.TabIndex = 2;
this.lbl_Title3.TitleName = "0";
//
// lbl_Title2
//
this.lbl_Title2.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lbl_Title2.BackgroundImage")));
this.lbl_Title2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbl_Title2.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title2.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_Title2.Location = new System.Drawing.Point(54, 5);
this.lbl_Title2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.lbl_Title2.Name = "lbl_Title2";
this.lbl_Title2.Size = new System.Drawing.Size(42, 69);
this.lbl_Title2.TabIndex = 1;
this.lbl_Title2.TitleName = "0";
//
// lbl_Title1
//
this.lbl_Title1.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("lbl_Title1.BackgroundImage")));
this.lbl_Title1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbl_Title1.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_Title1.ForeColor = System.Drawing.Color.White;
this.lbl_Title1.Location = new System.Drawing.Point(4, 5);
this.lbl_Title1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.lbl_Title1.Name = "lbl_Title1";
this.lbl_Title1.Size = new System.Drawing.Size(42, 69);
this.lbl_Title1.TabIndex = 0;
this.lbl_Title1.TitleName = "0";
//
// ArrTotalQty
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Transparent;
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "ArrTotalQty";
this.Size = new System.Drawing.Size(300, 79);
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private TotalQty lbl_Title1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private TotalQty lbl_Title6;
private TotalQty lbl_Title5;
private TotalQty lbl_Title4;
private TotalQty lbl_Title3;
private TotalQty lbl_Title2;
}
}
+144
View File
@@ -0,0 +1,144 @@
using JinYuan.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class ArrTotalQty : UserControl
{
public ArrTotalQty()
{
InitializeComponent();
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
// UpData();
}
//#region 减少闪烁
//protected override CreateParams CreateParams
//{
// get
// {
// CreateParams cp = base.CreateParams;
// cp.ExStyle |= 0x02000000;
// return cp;
// }
//}
//#endregion
private int _MaxValue = 999999;
private int totalValue = 0;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示数字值:(最大值999999)")]
public int TotalValue
{
get { return totalValue; }
set
{
if (value > _MaxValue) return;
totalValue = value;
SetElectricEnergy(totalValue);
}
}
private void SetElectricEnergy(int value)
{
if (totalValue.ToString().Length < 7)
{
bool isNumeric = Regex.IsMatch(totalValue.ToString(), @"^\d+$");
if (isNumeric)
{
List<int> numbers = new List<int>();
foreach (char c in totalValue.ToString())
{
if (char.IsDigit(c))
{
int number = int.Parse(c.ToString());
numbers.Add(number);
}
}
for (int i = 1; i < numbers.Count + 1; i++)
{
switch (numbers.Count)
{
case 1:
this.lbl_Title1.TitleName = 0.ToString();
this.lbl_Title2.TitleName = 0.ToString();
this.lbl_Title3.TitleName = 0.ToString();
this.lbl_Title4.TitleName = 0.ToString();
this.lbl_Title5.TitleName = 0.ToString();
this.lbl_Title6.TitleName = numbers[0].ToString();
break;
case 2:
this.lbl_Title1.TitleName = 0.ToString();
this.lbl_Title2.TitleName = 0.ToString();
this.lbl_Title3.TitleName = 0.ToString();
this.lbl_Title4.TitleName = 0.ToString();
this.lbl_Title5.TitleName = numbers[0].ToString();
this.lbl_Title6.TitleName = numbers[1].ToString();
break;
case 3:
this.lbl_Title1.TitleName = 0.ToString();
this.lbl_Title2.TitleName = 0.ToString();
this.lbl_Title3.TitleName = 0.ToString();
this.lbl_Title4.TitleName = numbers[0].ToString();
this.lbl_Title5.TitleName = numbers[1].ToString();
this.lbl_Title6.TitleName = numbers[2].ToString();
break;
case 4:
this.lbl_Title1.TitleName = 0.ToString();
this.lbl_Title2.TitleName = 0.ToString();
this.lbl_Title3.TitleName = numbers[0].ToString();
this.lbl_Title4.TitleName = numbers[1].ToString();
this.lbl_Title5.TitleName = numbers[2].ToString();
this.lbl_Title6.TitleName = numbers[3].ToString();
break;
case 5:
this.lbl_Title1.TitleName = 0.ToString();
this.lbl_Title2.TitleName = numbers[0].ToString();
this.lbl_Title3.TitleName = numbers[1].ToString();
this.lbl_Title4.TitleName = numbers[2].ToString();
this.lbl_Title5.TitleName = numbers[3].ToString();
this.lbl_Title6.TitleName = numbers[4].ToString();
break;
case 6:
this.lbl_Title1.TitleName = numbers[0].ToString();
this.lbl_Title2.TitleName = numbers[1].ToString();
this.lbl_Title3.TitleName = numbers[2].ToString();
this.lbl_Title4.TitleName = numbers[3].ToString();
this.lbl_Title5.TitleName = numbers[4].ToString();
this.lbl_Title6.TitleName = numbers[5].ToString();
break;
default:
break;
}
}
}
}
}
}
}
+877
View File
@@ -0,0 +1,877 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lbl_Title1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
BD5r4T4h7uvLAAAAAElFTkSuQmCC
</value>
</data>
<data name="lbl_Title2.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
BD5r4T4h7uvLAAAAAElFTkSuQmCC
</value>
</data>
<data name="lbl_Title3.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADEAAABFCAYAAADjLw7LAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKNWlDQ1BzUkdCIElFQzYxOTY2LTIuMQAA
SMedlndUVNcWh8+9d3qhzTDSGXqTLjCA9C4gHQRRGGYGGMoAwwxNbIioQEQREQFFkKCAAaOhSKyIYiEo
qGAPSBBQYjCKqKhkRtZKfHl57+Xl98e939pn73P32XuftS4AJE8fLi8FlgIgmSfgB3o401eFR9Cx/QAG
eIABpgAwWempvkHuwUAkLzcXerrICfyL3gwBSPy+ZejpT6eD/0/SrFS+AADIX8TmbE46S8T5Ik7KFKSK
7TMipsYkihlGiZkvSlDEcmKOW+Sln30W2VHM7GQeW8TinFPZyWwx94h4e4aQI2LER8QFGVxOpohvi1gz
SZjMFfFbcWwyh5kOAIoktgs4rHgRm4iYxA8OdBHxcgBwpLgvOOYLFnCyBOJDuaSkZvO5cfECui5Lj25q
bc2ge3IykzgCgaE/k5XI5LPpLinJqUxeNgCLZ/4sGXFt6aIiW5paW1oamhmZflGo/7r4NyXu7SK9Cvjc
M4jW94ftr/xS6gBgzIpqs+sPW8x+ADq2AiB3/w+b5iEAJEV9a7/xxXlo4nmJFwhSbYyNMzMzjbgclpG4
oL/rfzr8DX3xPSPxdr+Xh+7KiWUKkwR0cd1YKUkpQj49PZXJ4tAN/zzE/zjwr/NYGsiJ5fA5PFFEqGjK
uLw4Ubt5bK6Am8Kjc3n/qYn/MOxPWpxrkSj1nwA1yghI3aAC5Oc+gKIQARJ5UNz13/vmgw8F4psXpjqx
OPefBf37rnCJ+JHOjfsc5xIYTGcJ+RmLa+JrCdCAACQBFcgDFaABdIEhMANWwBY4AjewAviBYBAO1gIW
iAfJgA8yQS7YDApAEdgF9oJKUAPqQSNoASdABzgNLoDL4Dq4Ce6AB2AEjIPnYAa8AfMQBGEhMkSB5CFV
SAsygMwgBmQPuUE+UCAUDkVDcRAPEkK50BaoCCqFKqFaqBH6FjoFXYCuQgPQPWgUmoJ+hd7DCEyCqbAy
rA0bwwzYCfaGg+E1cBycBufA+fBOuAKug4/B7fAF+Dp8Bx6Bn8OzCECICA1RQwwRBuKC+CERSCzCRzYg
hUg5Uoe0IF1IL3ILGUGmkXcoDIqCoqMMUbYoT1QIioVKQ21AFaMqUUdR7age1C3UKGoG9QlNRiuhDdA2
aC/0KnQcOhNdgC5HN6Db0JfQd9Dj6DcYDIaG0cFYYTwx4ZgEzDpMMeYAphVzHjOAGcPMYrFYeawB1g7r
h2ViBdgC7H7sMew57CB2HPsWR8Sp4sxw7rgIHA+XhyvHNeHO4gZxE7h5vBReC2+D98Oz8dn4Enw9vgt/
Az+OnydIE3QIdoRgQgJhM6GC0EK4RHhIeEUkEtWJ1sQAIpe4iVhBPE68QhwlviPJkPRJLqRIkpC0k3SE
dJ50j/SKTCZrkx3JEWQBeSe5kXyR/Jj8VoIiYSThJcGW2ChRJdEuMSjxQhIvqSXpJLlWMkeyXPKk5A3J
aSm8lLaUixRTaoNUldQpqWGpWWmKtKm0n3SydLF0k/RV6UkZrIy2jJsMWyZf5rDMRZkxCkLRoLhQWJQt
lHrKJco4FUPVoXpRE6hF1G+o/dQZWRnZZbKhslmyVbJnZEdoCE2b5kVLopXQTtCGaO+XKC9xWsJZsmNJ
y5LBJXNyinKOchy5QrlWuTty7+Xp8m7yifK75TvkHymgFPQVAhQyFQ4qXFKYVqQq2iqyFAsVTyjeV4KV
9JUCldYpHVbqU5pVVlH2UE5V3q98UXlahabiqJKgUqZyVmVKlaJqr8pVLVM9p/qMLkt3oifRK+g99Bk1
JTVPNaFarVq/2ry6jnqIep56q/ojDYIGQyNWo0yjW2NGU1XTVzNXs1nzvhZei6EVr7VPq1drTltHO0x7
m3aH9qSOnI6XTo5Os85DXbKug26abp3ubT2MHkMvUe+A3k19WN9CP16/Sv+GAWxgacA1OGAwsBS91Hop
b2nd0mFDkqGTYYZhs+GoEc3IxyjPqMPohbGmcYTxbuNe408mFiZJJvUmD0xlTFeY5pl2mf5qpm/GMqsy
u21ONnc332jeaf5ymcEyzrKDy+5aUCx8LbZZdFt8tLSy5Fu2WE5ZaVpFW1VbDTOoDH9GMeOKNdra2Xqj
9WnrdzaWNgKbEza/2BraJto22U4u11nOWV6/fMxO3Y5pV2s3Yk+3j7Y/ZD/ioObAdKhzeOKo4ch2bHCc
cNJzSnA65vTC2cSZ79zmPOdi47Le5bwr4urhWuja7ybjFuJW6fbYXd09zr3ZfcbDwmOdx3lPtKe3527P
YS9lL5ZXo9fMCqsV61f0eJO8g7wrvZ/46Pvwfbp8Yd8Vvnt8H67UWslb2eEH/Lz89vg98tfxT/P/PgAT
4B9QFfA00DQwN7A3iBIUFdQU9CbYObgk+EGIbogwpDtUMjQytDF0Lsw1rDRsZJXxqvWrrocrhHPDOyOw
EaERDRGzq91W7109HmkRWRA5tEZnTdaaq2sV1iatPRMlGcWMOhmNjg6Lbor+wPRj1jFnY7xiqmNmWC6s
faznbEd2GXuKY8cp5UzE2sWWxk7G2cXtiZuKd4gvj5/munAruS8TPBNqEuYS/RKPJC4khSW1JuOSo5NP
8WR4ibyeFJWUrJSBVIPUgtSRNJu0vWkzfG9+QzqUvia9U0AV/Uz1CXWFW4WjGfYZVRlvM0MzT2ZJZ/Gy
+rL1s3dkT+S453y9DrWOta47Vy13c+7oeqf1tRugDTEbujdqbMzfOL7JY9PRzYTNiZt/yDPJK817vSVs
S1e+cv6m/LGtHlubCyQK+AXD22y31WxHbedu799hvmP/jk+F7MJrRSZF5UUfilnF174y/ariq4WdsTv7
SyxLDu7C7OLtGtrtsPtoqXRpTunYHt897WX0ssKy13uj9l4tX1Zes4+wT7hvpMKnonO/5v5d+z9Uxlfe
qXKuaq1Wqt5RPXeAfWDwoOPBlhrlmqKa94e4h+7WetS212nXlR/GHM44/LQ+tL73a8bXjQ0KDUUNH4/w
jowcDTza02jV2Nik1FTSDDcLm6eORR67+Y3rN50thi21rbTWouPguPD4s2+jvx064X2i+yTjZMt3Wt9V
t1HaCtuh9uz2mY74jpHO8M6BUytOdXfZdrV9b/T9kdNqp6vOyJ4pOUs4m3924VzOudnzqeenL8RdGOuO
6n5wcdXF2z0BPf2XvC9duex++WKvU++5K3ZXTl+1uXrqGuNax3XL6+19Fn1tP1j80NZv2d9+w+pG503r
m10DywfODjoMXrjleuvyba/b1++svDMwFDJ0dzhyeOQu++7kvaR7L+9n3J9/sOkh+mHhI6lH5Y+VHtf9
qPdj64jlyJlR19G+J0FPHoyxxp7/lP7Th/H8p+Sn5ROqE42TZpOnp9ynbj5b/Wz8eerz+emCn6V/rn6h
++K7Xxx/6ZtZNTP+kv9y4dfiV/Kvjrxe9rp71n/28ZvkN/NzhW/l3x59x3jX+z7s/cR85gfsh4qPeh+7
Pnl/eriQvLDwG/eE8/s6uL5TAAAACXBIWXMAAAsMAAALDAE/QCLIAAARpklEQVRoQ9WaeVwT19rHh50k
bAmEBEjC5lp7l89t6y4ighu07rsgLiwuJIQAIYEEENms4tbba93aWtu6L9W64FK1ouLWuoIrgrWiVq2t
du/M/T2TRKPX9733837e2+AfXyfJzHme5ztzZs45g4ys8MIrYAwYCAZZwef6gTJz/Rtyc93rjgQ1vI5a
3viX+oouDA801cdKDec9SKIPMIJpFuqnys3n0+WmcylBpjOTwUTHcnYSSJGbzqdBaIq1zumQyIZEIiQE
TGDRpShZ4UXakSQ314+Vm86MDC44PTSk4ItBIfnH31DkH3vdkYTknxhItQQXnBoCqRE4waMhkygrupgq
NV8YGmCsFzDS4ss9ITFdZq4bG1RwZkRwwReDFcZjryuNtQOUxkP9Qg01fUMNB/s4ChVqUBqPDFAYjyaE
5J+EzOmh6CWjUXOKtPDSsICCCwImoPhKL3ShabhkI2A8WJF/NF5lQPF5n8eG5u2LCdfv7RWu3xPtGPZG
h+n39Q7NOxCLmvoq8mvjcWUG4WQPlxfWT4LE8AATSZRAwlw3lQzpCpBAmP5AbHjunugIfXVUq9zt3R3H
ju6ROdVREbm7e4bp9/cONR7sozQehcgXg4LM55MDii4N9zddhMTMht50I2PHQOpCuAJxJBCZs6NH6+yt
XdvoNndpo9vU2TFs7tI6e0uXVjnbu5NIaN7+3krj4f4K3KtB5rOJkBjhb74kZPwhga6USjvoHghDF4rI
rY7iBbI2dW6bta5ju6y1DqOtbkMniHSlk0pdm+5R9JiEIPOZxIDiSyPEhZeFjKS0MVZuPptCNw4O6BOB
ftgqZ0f3NrpPurSDQHvtqlfba1c7iFWvkghdlVbZ27pFoIeo0FOoSwWbTo/1n3FlpF/xVUiUNcZBIpWX
yDsIiT2Q2A6JTZ0R4DUK9FLmR684inba1a+1zaKrsbVbeO7uaOru9LQKNp0aA4lRfsUNXoy4vKkvJNIg
Ef9iSXw5RlJydYzvjEZvRlxxvb/cfC79xZM4NVZS0jDWd0aTN+NXeWPACylhPjVWPLMhyWdGkw9JJLyo
V0I881qSTwkkfN+8iZnquSkvmER/SIzzK2tK9i694cP4zG4eKC88N/WFkjBAwgyJ8qZJXmU3fBmfObeG
QGIaJDBa20tsxjixlh8nnhf8j4KX0G20SWDUtkmcHudb8VWKV/lNP8Z77u1h8sLz05WGZ69Ey5SwDHa1
A4LMpxMhkcpLeFV9MwISGZAYQFNfy4jdEiQ+fIVyt8ta81ob3UaM2J9CAiO2wSphIokb6V4VzZCYd2ck
JNQKwzFMwWv6hus/64VpRw+rhEPvCZp60InkJXIggV6iQm/BtAOP2DNJPpVfTxVVNIsZ0by7YyCRqTAe
T8AMEdPwz3pF5uyExCddaPLnWAnb3OmJBLp8HN2/8sKzyd6zvs4QVtySMKL598fJCuu0kIinaW6ofn9M
RIuT2GyZjlsk+tCTlJd4s1kjnHVHwggXfDs5sLBOpzCeiFdZJHpHYCHSWrela1vd+k4tSYKm4tTlMRWP
x3pivPfsW7mQ8GcE8+4PkZQ1FCqNJ7CuPtKfloIRubt64mnAS7TLWv1a+0zHiJAE9QbqFdTFqatTlyeJ
wOJ6tWju3SxRxS13RlR620dU9Y1eXnQ2Gc9frK1JYndP9MGubbM2YsBb4xCJ9pkf8esJOpHUK6h3UC/B
wq1/SMHJIT6zbxYLK+/81avoJsMIFtxlPOd9G+1f3pCv0h+KDTUciLNIbOuG57MDJagr0RjBj9ZdqXdg
eRqryjvURzbj/GSvkjtqz8X3GOfzvzAMc4V71WPRgxH+xQ05Kv3hOIwVkNgDie3dHS+xxjblsEocgMTh
PuhKU4Rv3h3puu/ndsx9rj3DXOM2ub/zfZVkxrV0Vd6RPrhx+tANZB3wLPOnzI8dJ2F9vFpeFPASfQML
6tI9lz2IZr7m5jBXuTcZ/LPU/Z3vKiQl1zJIghbi1gEPV6KlSND6GhLo6ioDJEwXpnou/q4v08CZQD51
p6Vui7+fJS65lqnKq40NMx37W0R+TYc2hj1t2us/De+Qs1H5sm6N4s+61cF/JC/r1io65KxXvqTfEtbW
sDOytfFAuwjz0b+oCk50DjTVZXgu+a7/E4mr3BL3dx7OlpRez1DqjyRIpm7cK05bV+OfvubzgLRVBwLS
Pt4vTf1wn0NI+2gf5fdPX33AP33dQb/UNTXS6Z+ukBVdTvJY+n3CUxJuix/NkVQ0T1Fm7R8iaBXLuSk7
c+7h0ZxbeAznFtGbc42IcwCxPHwNqMU9vCfnGtCB8+2YfE9ecWsYJN54SsJ1yQ9V4rIbmaqcmgHSweXL
A+NN78sTCpbL4w1LgwfkLgnpr1sM3vljyV4cPCBncXC8finVIksofFfaz7BCPurtysCSxskeSx8OflZi
vl9Jo15lOBobWlr3l8iSU23bFB0Jb2/er+hgqg76k3Gr7M/GLYF/JH8ybpO9bNoh72DeG9K2qCa0dfHJ
yIiyupfCis+9KjXVa92XPRoCAbOdxI8L/GY26fF0iqW5CYb3GHpt+HgS2JKeThgnpOaLavelj4Y9kbjC
LXZZ+tNCv7LrBkj0bnmP2A2dLOOEbbA7FBdQeFHjtuyHEfYSmyCxDBK4EodjWtxg98yIHQoJuhJu7/04
hLnJzUNPms0wzdx41+U/5/uVXJ+BaQckDvahZaBFwvrGw2ESNHfCBNBu7hSqP9g7oPiixn3hw8lOJ3/r
j2lHAuO26hHj+o+fBvlU3lgYqq+JfjIB3O7gCeDHllnsU1Px/TGheTWx0pl1ae5zHy11n/uAcVv3kGE8
Sr91c/37D/P9Sy/rcKlwuR5PxR0qQTwrQfcqdXel4dgA77m3Frks+NHoWXjPhXF9+6dkr6rb7ysMtDyl
vxTZLYqyaFHkWAl0Z0hswsoOTyjr8lRpONovOP/UUOGCe1udF/8Sx7gs/bVKOuNiKdbYff/n5enHz03y
38ZOwu6VDdbY+UcTlPrj0eLypuXMCm48SVTIiuqKbRJh+n0YI6qjHo8RvMTzk/y3sUjwY4X15Rnd3Px7
p3hl3vFefhXX32Pe48aSxCxZUX2J0nisb0t7ZUPYvYvFE6o6KgzdnSRU+qPR4oqm9yGRyDgv+202Vkol
yryjWBAdwkBHY0TLeHlGWCRsj1lI8OvsI/1V+tqe4kpIvM8lMc7Lf5tjkajFguOgVaJFvYtFl1rXsXX2
J10jc+kxu4//MzAkoiCxAvdEMq7E73MhMVNpqI1roS+UrRJbeAk8ZjEgH+oHiR6Q+ABXYgJJzLdIHMEY
8SJJHOkOiQ8hMQndiV0IiVIlTf6ekmg5f2Sxdqcukbn0B3ka8GwS1z9Cd0phnJazb0Gi7AWU6OZXeX0V
JFJJ4u3/H4kP/w88L87T/BuJ1TaJRZAo/88knpeYZriYrGWuopmnDXxf/RyeOuZx26fjPS34byTWQCKN
JBZDouL5Epg3QQIzSiQFGhSrwY2mWfNaO826jm3V68GGTm3VGzu1UW/q3Dpjs5VPuljY0vUJ9N2yv43a
gqXteqJjO81axEQ+jV0+AvnpAdM6e/PzJNZCYgpJLHkswf8HFZvEZozYGzq2y0Sxmes7tdFg6Nds7tJa
jaeE+tNukRnbu0dm7OgRkVEdZWFXz/Dpu+3YE/00T/ZFZBDVRBTFQCyieyv11m4Uv40GkshHedtpkT+L
ph2WcQISMfS/0SDRFRLrIDGVcXqXWwaJWZgZxvJzp7x9mADu7hmp29GjVSYCa7Z1j9Rs7xGh3hUVod4d
HZaxt1dYxmcxoRn7eodm7AdYbWXsj8OWwOfP40KnA9raY/mtj+U7HUtteKg94uyLCc/YG0PxI9R7elK+
SM021LCteyvtju6Rup1RNAHE3AnTjiMD+Csx6/oGZiU3jXFayS2XFl2crTCcoL/AJKj0h/qGZh+MC81C
osz9vcPUSKLG2lZ9ME6VUdPXwqF+yozD4Eh/OwZYwOSMUD+D7Xce27H27Q/3o7h8fHVN31A1ZNUH4sI0
yK890Bv1xFJdSj3/9wnMYo9F+VV+tYlZx01nnBax70pLL80NNnwZH5x3cnBIzolBCt2JgQrt8QRF5tF4
heZogkJzDNtj2B5/3cKJN0I0JwaGaE5iexLbLwaBwRa+HByceWpIyDPwv2GfBf5YagP4GHw8imuJT7l4
LPkz8VmL31FXSO6Jgah1iEJ/Msa36sYW5i1IOJey70tmX3lLrj83RK4/Pzoo5+xIue7syCDt6WFgaFDm
l3wBwZrT2J4eZmV4kPbsCIDjzo0K0qKd9vwYC3Vj5Vn1jwnKevx9HO0DluMy0YbQnkMMinNmOMW1xh8a
rCFxS25LLWeGy7NxXM7ZUfK8ujHBuWf6eb91c4dTNpfBOFewKySV1xYF6i+OluZeniDNvpQcqKtPlPHJ
60bLUKAcyeRILEMRMm09kSjTXiCSZFkXxwfqLiXLdJcmyLKvTJRlX50sy25Ikeoa03y1jWlCTWOaBNtA
3bU0/J4q012dJNNdnkjHB2YhF9pb4lC8unGW+JSLh8+PWsaAcYHZF5ICcy5NkOovT5Tn1A30nt+8y8nA
aRincm6lpLRpEYInynSNU6TaxvQAzbVUWWZDilxzNUWqaUgJwGf8lu6f2TjVP7Npur/2ukasvZ4lzvoq
R5L9dZ44p7lAom+eITHerpAWfjM/qOz+YtWCBx+9+u7DLTErH+7ssOT7jcFV364ILLv3j4Cib6ok+bfL
JcbmIrHhZr4k54ZeovsqG/G0Em2TWpzZNM1fc20qSPfXNKSCFH/U4Z95LRWk+Wc1TvHPvjZFpr002Lvq
djVj4LIYpzncLp95zYclhTf+LjY3f+BruvWBX/7tD3zzb62krbfxzseinLsbvPLvrhUZ724UGO9t9jR9
u83T/KBaaP5ur6Dw4UHBjEfHBaU/nhOU/Xzdq+rX++Klv/+q/JTlhp/hOFMDx0Uf57jA9Sznu+j3H0VV
v9wRVP50VVj6wxnhzEe1gqLvDyDOHqHpwQ5hwf0tovx7m5BrvSj/mzVe+XdWeeXf/tCb6iAKbq30Nt1a
6VPYvEJiapolfOfuDaaAMzEu+Vyu81x2i3P57584lbFbcY9sA9sfM5Pd6TyDq3YpZXcSHqXsLlEZR+x2
L+P2uJVze90quM/cKrkDHpXcQY83uRrPOdxh4Tyu1nchVyteyB3xXsDVCudytZ6zucO0H8d+jjb70fYz
1zJurwvigN0uFWy1SyW7C1s+F9jhMhOgDpcyvh6qbZsz1Vn++2bUvdUlg41l3EexjPsIjnEbyeEztqM4
J7fRnCtwA+4eYzgPj0QwjhN4JLJCryRW5Dee9fabwPqIJrJ+whRWIkpl/UXprNRrGiv3nsYG+6hZhbea
VXllcCqhmlN5qVklviu9prMKHBMsmsLKRGmslNoJJ7FiAeJ4JrM+nojrkcR6IZ+QzzeO83RHfnfUAdyA
M9XI10n1DgdjOIZxT2SdgAsKRLGsCPgikARIPZK4QCDzGM/JCc/xXDC2IW7JrMJ9IqvwnMQqBSmsCoQK
UtkwYRpIZ8NBBAGxCBQcSVvrb5Z9dGwq2lC7yWg/mVUilgIiITzj2SCP8Syf01oDYAOwFaM+HzqZwB11
O1P9DL7YIBE34IkGIkAyYkBCAZ6Q8kQwiBByJJN7TmDlgglcEM5ksGASZ08ICgsRTuaAZUvf+d9tx0wk
0G4CYiEOHy+Zk1nis4GUj/Ja81Md3qiNTjKdbFfgDOgiMPYSjCesgDNwAx5AgGAi4AN8gRhIgD8IQDJC
yicFguTHyAQo6F+h3y3H2kHt6SQRFJugPJSP8or4OnDmgSvgi7fxPAkbNhkX4IZAHsCTD4g+C2xShB+w
ydlDos9iv5/aENTeFotiE3TyKB8VTieU6qCa+Prsa/7fJOyxCTkjqCsgKXdrEkJoxSZoj7cdz+6j46md
rWBL0RTfUrQlp13xNuxr/k8lnkKAoHY4Axc7XAVJnBX6zLrhM6Ct3T467kkbikE8jvu8vPbY1+yeyDL/
BD5r4T4h7uvLAAAAAElFTkSuQmCC
</value>
</data>
<data name="lbl_Title4.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
BD5r4T4h7uvLAAAAAElFTkSuQmCC
</value>
</data>
<data name="lbl_Title5.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
BD5r4T4h7uvLAAAAAElFTkSuQmCC
</value>
</data>
<data name="lbl_Title6.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
BD5r4T4h7uvLAAAAAElFTkSuQmCC
</value>
</data>
</root>
+263
View File
@@ -0,0 +1,263 @@
namespace JinYuan.ControlLib
{
partial class CPK
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.listView1 = new System.Windows.Forms.ListView();
this.项目1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.数值1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.项目2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.数值2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.项目3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.数值3 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
this.lbl_Ca = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
this.listView2 = new System.Windows.Forms.ListView();
this.tableLayoutPanel1.SuspendLayout();
this.tableLayoutPanel2.SuspendLayout();
this.tableLayoutPanel3.SuspendLayout();
this.SuspendLayout();
//
// listView1
//
this.listView1.Activation = System.Windows.Forms.ItemActivation.OneClick;
this.listView1.AutoArrange = false;
this.listView1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(6)))), ((int)(((byte)(30)))), ((int)(((byte)(78)))));
this.listView1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.项目1,
this.数值1,
this.项目2,
this.数值2,
this.项目3,
this.数值3});
this.listView1.ForeColor = System.Drawing.Color.White;
this.listView1.GridLines = true;
this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.listView1.HideSelection = false;
this.listView1.LabelWrap = false;
this.listView1.Location = new System.Drawing.Point(4, 5);
this.listView1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.listView1.Name = "listView1";
this.listView1.ShowItemToolTips = true;
this.listView1.Size = new System.Drawing.Size(518, 99);
this.listView1.TabIndex = 3;
this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Details;
//
// 项目1
//
this.项目1.Text = "项目1";
this.项目1.Width = 90;
//
// 数值1
//
this.数值1.Text = "数值";
this.数值1.Width = 80;
//
// 项目2
//
this.项目2.Text = "项目2";
this.项目2.Width = 90;
//
// 数值2
//
this.数值2.Text = "数值";
this.数值2.Width = 75;
//
// 项目3
//
this.项目3.Text = "项目3";
this.项目3.Width = 100;
//
// 数值3
//
this.数值3.Text = "数值3";
this.数值3.Width = 80;
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tableLayoutPanel1.Controls.Add(this.listView1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.listView2, 0, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 3;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 109F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 229F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 364F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(526, 415);
this.tableLayoutPanel1.TabIndex = 5;
//
// tableLayoutPanel2
//
this.tableLayoutPanel2.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel2.ColumnCount = 3;
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 53.63881F));
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 46.36119F));
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 195F));
this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel5, 2, 0);
this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel3, 0, 0);
this.tableLayoutPanel2.Controls.Add(this.tableLayoutPanel4, 1, 0);
this.tableLayoutPanel2.Location = new System.Drawing.Point(4, 343);
this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
this.tableLayoutPanel2.RowCount = 2;
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel2.Size = new System.Drawing.Size(518, 67);
this.tableLayoutPanel2.TabIndex = 5;
//
// tableLayoutPanel5
//
this.tableLayoutPanel5.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel5.ColumnCount = 2;
this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel5.Location = new System.Drawing.Point(325, 6);
this.tableLayoutPanel5.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tableLayoutPanel5.Name = "tableLayoutPanel5";
this.tableLayoutPanel5.RowCount = 1;
this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel5.Size = new System.Drawing.Size(185, 22);
this.tableLayoutPanel5.TabIndex = 2;
//
// tableLayoutPanel3
//
this.tableLayoutPanel3.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel3.ColumnCount = 2;
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel3.Controls.Add(this.lbl_Ca, 1, 0);
this.tableLayoutPanel3.Controls.Add(this.label2, 0, 0);
this.tableLayoutPanel3.Location = new System.Drawing.Point(5, 6);
this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
this.tableLayoutPanel3.RowCount = 1;
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel3.Size = new System.Drawing.Size(163, 22);
this.tableLayoutPanel3.TabIndex = 0;
//
// lbl_Ca
//
this.lbl_Ca.AutoSize = true;
this.lbl_Ca.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Ca.ForeColor = System.Drawing.Color.White;
this.lbl_Ca.Location = new System.Drawing.Point(86, 1);
this.lbl_Ca.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lbl_Ca.Name = "lbl_Ca";
this.lbl_Ca.Size = new System.Drawing.Size(72, 20);
this.lbl_Ca.TabIndex = 0;
this.lbl_Ca.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
this.label2.ForeColor = System.Drawing.Color.White;
this.label2.Location = new System.Drawing.Point(4, 1);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(74, 20);
this.label2.TabIndex = 1;
this.label2.Text = "CA";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// tableLayoutPanel4
//
this.tableLayoutPanel4.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel4.ColumnCount = 2;
this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel4.Location = new System.Drawing.Point(177, 6);
this.tableLayoutPanel4.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.tableLayoutPanel4.Name = "tableLayoutPanel4";
this.tableLayoutPanel4.RowCount = 1;
this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel4.Size = new System.Drawing.Size(139, 22);
this.tableLayoutPanel4.TabIndex = 1;
//
// listView2
//
this.listView2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(6)))), ((int)(((byte)(30)))), ((int)(((byte)(78)))));
this.listView2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.listView2.Dock = System.Windows.Forms.DockStyle.Fill;
this.listView2.ForeColor = System.Drawing.Color.White;
this.listView2.GridLines = true;
this.listView2.HideSelection = false;
this.listView2.Location = new System.Drawing.Point(3, 112);
this.listView2.Name = "listView2";
this.listView2.Size = new System.Drawing.Size(520, 223);
this.listView2.TabIndex = 6;
this.listView2.UseCompatibleStateImageBehavior = false;
this.listView2.View = System.Windows.Forms.View.Details;
//
// trw
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Transparent;
this.Controls.Add(this.tableLayoutPanel1);
this.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "trw";
this.Size = new System.Drawing.Size(526, 415);
this.tableLayoutPanel1.ResumeLayout(false);
this.tableLayoutPanel2.ResumeLayout(false);
this.tableLayoutPanel3.ResumeLayout(false);
this.tableLayoutPanel3.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.ColumnHeader 项目1;
private System.Windows.Forms.ColumnHeader 数值1;
private System.Windows.Forms.ColumnHeader 项目2;
private System.Windows.Forms.ColumnHeader 数值2;
private System.Windows.Forms.ColumnHeader 项目3;
private System.Windows.Forms.ColumnHeader 数值3;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
private System.Windows.Forms.Label lbl_Ca;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.ListView listView2;
}
}
+285
View File
@@ -0,0 +1,285 @@
using JinYuan.ControlLib.Models;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class CPK : UserControl
{
public CPK()
{
InitializeComponent();
IntValue();
}
#region 减少闪烁
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
#endregion
private int subgroupSize =5;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取子组大小值")]
public int SubgroupSize
{
get { return subgroupSize; }
set
{
subgroupSize = value;
listView1.Items[0].SubItems[3].Text = value.ToString();
this.Invalidate();
}
}
private double _uSLs = 0;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取上规格值")]
public double USLs
{
get { return _uSLs; }
set
{
_uSLs = value;
listView1.Items[2].SubItems[1].Text = value.ToString();
this.Invalidate();
}
}
private double _lSLs = 0;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取下规格值")]
public double LSLs
{
get { return _lSLs; }
set
{
_lSLs = value;
listView1.Items[2].SubItems[5].Text = value.ToString();
this.Invalidate();
}
}
private double _cpkPpkAcceptanceValue = 0;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取目标值")]
public double CpkPpkAcceptanceValue
{
get { return _cpkPpkAcceptanceValue; }
set
{
_cpkPpkAcceptanceValue = value;
listView1.Items[2].SubItems[3].Text = value.ToString();
this.Invalidate();
}
}
private CPKModel _cPKData=new CPKModel();
[Browsable(true)]
[Category("自定义属性")]
[Description("获取目标值")]
public CPKModel CPKData
{
get { return _cPKData; }
set
{
if (value!=null)
{
_cPKData = value;
//总样本数
listView1.Items[0].SubItems[1].Text = _cPKData.TotalNumber.ToString();
//平均值
listView1.Items[1].SubItems[1].Text = _cPKData.MeanVlaue.ToString();
//最大值
listView1.Items[1].SubItems[3].Text = _cPKData.MaxValue.ToString();
//最小值
listView1.Items[1].SubItems[5].Text = _cPKData.MinValue.ToString();
// 正的3倍标准差线
listView1.Items[3].SubItems[1].Text = _cPKData.Pos3Sigma.ToString();
// 负的3倍标准差线
listView1.Items[3].SubItems[3].Text = _cPKData.Neg3Sigma.ToString();
// 组内标准差值
listView2.Items[0].SubItems[1].Text= _cPKData.GroupSTDEV.ToString();
// 整体标准差值
listView2.Items[0].SubItems[2].Text = _cPKData.WholeSTDEV.ToString();
// 组内CPK值
listView2.Items[1].SubItems[1].Text = _cPKData.GroupCPK.ToString();
// 整体CPK值
listView2.Items[1].SubItems[2].Text = _cPKData.WholeCPK.ToString();
// 组内CP值
listView2.Items[2].SubItems[1].Text = _cPKData.GroupCP.ToString();
// 整体CP值
listView2.Items[2].SubItems[2].Text = _cPKData.WholeCP.ToString();
// 组内CPL值
listView2.Items[3].SubItems[1].Text = _cPKData.GroupCPL.ToString();
// 整体CPL值
listView2.Items[3].SubItems[2].Text = _cPKData.WholeCPL.ToString();
// 组内CPU值
listView2.Items[4].SubItems[1].Text = _cPKData.GroupCPU.ToString();
// 整体CPU值
listView2.Items[4].SubItems[2].Text = _cPKData.WholeCPU.ToString();
// 组内PPM<LSL值
listView2.Items[5].SubItems[1].Text = _cPKData.GroupPPM_LSL.ToString();
// 整体PPM<LSL值
listView2.Items[5].SubItems[2].Text = _cPKData.WholePPM_LSL.ToString();
// 组内PPM>USL值
listView2.Items[6].SubItems[1].Text = _cPKData.GroupPPM_USL.ToString();
// 整体PPM>USL值
listView2.Items[6].SubItems[2].Text = _cPKData.WholePPM_USL.ToString();
// 组内PPM Total值
listView2.Items[7].SubItems[1].Text = _cPKData.GroupPPM_Total.ToString();
// 整体PPMN Total值
listView2.Items[7].SubItems[2].Text = _cPKData.WholePPM_Total.ToString();
lbl_Ca.Text= _cPKData.CA.ToString();
this.Invalidate();
}
}
}
#region 初始化
private void IntValue()
{
//listView2.OwnerDraw = true;
//listView2.DrawColumnHeader += ListView2_DrawColumnHeader;
listView1.Columns.Clear();
listView2.Columns.Clear();
// 假设ListView控件的名称为listView1
// 添加列头
listView1.Columns.Add("项目1",80);
listView1.Columns.Add("数值1",90);
listView1.Columns.Add("项目2",80);
listView1.Columns.Add("数值2", 90);
listView1.Columns.Add("项目3", 80);
listView1.Columns.Add("数值3", 95);
// 创建一个ListViewItem对象,并将数据添加到指定单元格 0
ListViewItem item1_1 = new ListViewItem("总样本数");
item1_1.SubItems.Add("0");
item1_1.SubItems.Add("子组大小");
item1_1.SubItems.Add("0");
item1_1.SubItems.Add("图标类型");
item1_1.SubItems.Add("XR");
listView1.Items.Add(item1_1); // 添加完整的ListViewItem对象到ListView控件中的指定行索引
// 如果需要添加多行数据,可以类似地重复上述步骤
ListViewItem item1_2 = new ListViewItem("平均值"); //1
item1_2.SubItems.Add("0");
item1_2.SubItems.Add("最大值");
item1_2.SubItems.Add("0");
item1_2.SubItems.Add("最小值");
item1_2.SubItems.Add("0");
listView1.Items.Add(item1_2);
ListViewItem item1_3 = new ListViewItem("上规格"); //2
item1_3.SubItems.Add("0");
item1_3.SubItems.Add("目标值");
item1_3.SubItems.Add("0");
item1_3.SubItems.Add("下规格");
item1_3.SubItems.Add("0");
listView1.Items.Add(item1_3);
ListViewItem item1_4 = new ListViewItem("+3Sigma"); //3
item1_4.SubItems.Add("0");
item1_4.SubItems.Add("-3Sigma");
item1_4.SubItems.Add("0");
listView1.Items.Add(item1_4);
// 假设ListView控件的名称为listView1
// 添加列头
listView2.Columns.Add("", 150);
listView2.Columns.Add("组内", 120);
listView2.Columns.Add("整体", 120);
listView2.Columns.Add("实测", 128);
// 创建一个ListViewItem对象,并将数据添加到指定单元格
ListViewItem item2_1 = new ListViewItem("STDEV"); //0
item2_1.SubItems.Add("0");
item2_1.SubItems.Add("0");
item2_1.SubItems.Add("");
listView2.Items.Add(item2_1); // 添加完整的ListViewItem对象到ListView控件中的指定行索引
ListViewItem item2_2 = new ListViewItem("CPK"); //1
item2_2.SubItems.Add("0");
item2_2.SubItems.Add("0");
item2_2.SubItems.Add("");
listView2.Items.Add(item2_2);
ListViewItem item2_3 = new ListViewItem("CP");//2
item2_3.SubItems.Add("0");
item2_3.SubItems.Add("0");
item2_3.SubItems.Add("");
listView2.Items.Add(item2_3);
ListViewItem item2_4 = new ListViewItem("CPL");//3
item2_4.SubItems.Add("0");
item2_4.SubItems.Add("0");
item2_4.SubItems.Add("");
listView2.Items.Add(item2_4);
ListViewItem item2_5 = new ListViewItem("CPU");//4
item2_5.SubItems.Add("0");
item2_5.SubItems.Add("0");
item2_5.SubItems.Add("");
listView2.Items.Add(item2_5);
ListViewItem item2_6 = new ListViewItem("PPM<LSL");//5
item2_6.SubItems.Add("0");
item2_6.SubItems.Add("0");
item2_6.SubItems.Add("0");
listView2.Items.Add(item2_6);
ListViewItem item2_7 = new ListViewItem("PPM>USL");//6
item2_7.SubItems.Add("0");
item2_7.SubItems.Add("0");
item2_7.SubItems.Add("0");
listView2.Items.Add(item2_7);
ListViewItem item2_8 = new ListViewItem("PPM Total");//7
item2_8.SubItems.Add("0");
item2_8.SubItems.Add("0");
item2_8.SubItems.Add("0");
listView2.Items.Add(item2_8);
lbl_Ca.Text = "0";
}
#endregion
public void ListView2_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.DrawBackground();
// 设置自定义的列标题栏背景颜色
e.Graphics.FillRectangle(Brushes.AliceBlue, e.Bounds);
// 绘制列标题栏的文本
e.DrawText();
}
}
}
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class CheckBoxExt
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+139
View File
@@ -0,0 +1,139 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Serialization;
namespace JinYuan.ControlLib
{
public partial class CheckBoxExt : CheckBox
{
public CheckBoxExt()
{
InitializeComponent();
_format.LineAlignment=StringAlignment.Center;
_format.Alignment=StringAlignment.Center;
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
private StringFormat _format = new StringFormat();
private int defultCheckButtonWidth=20;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示标题名称")]
public int DefultCheckButtonWidth
{
get { return defultCheckButtonWidth; }
set { defultCheckButtonWidth= value; }
}
private Color checkColor=Color.FromArgb(3,25,66);
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示选中颜色")]
public Color CheckColor
{
get { return checkColor; }
set
{
checkColor = value;
this.Invalidate();
}
}
private Color checkBackColor = Color.White;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示选中框背景颜色")]
public Color CheckBackColor
{
get { return checkBackColor; }
set
{
checkBackColor = value;
this.Invalidate();
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
base.OnPaintBackground(e);
Graphics g = e.Graphics;
g.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.TextRenderingHint=System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
Rectangle checkRec;
Rectangle textRec;
CalculatorRec(out checkRec,out textRec);
SolidBrush solidBrush = new SolidBrush(CheckBackColor);
g.FillRectangle(solidBrush, checkRec);
Pen pen=new Pen(Color.LightGray);
g.DrawRectangle(pen, checkRec);
if (this.CheckState==CheckState.Checked)
{
//画勾选
DrawCheckFlag(g, checkRec,checkColor);
}
//绘制文本
g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), textRec, this._format);
}
/// <summary>
/// 计算矩形
/// </summary>
/// <param name="checkRec"></param>
/// <param name="textRec"></param>
private void CalculatorRec(out Rectangle checkRec, out Rectangle textRec)
{
checkRec = new Rectangle(3,(this.Height - defultCheckButtonWidth) / 2, defultCheckButtonWidth,
defultCheckButtonWidth);
textRec = new Rectangle(checkRec.Right+3,0,Width-checkRec.Right-6,this.Height);
}
/// <summary>
/// 画勾选
/// </summary>
/// <param name="g"></param>
/// <param name="rectangle"></param>
/// <param name="color"></param>
private void DrawCheckFlag(Graphics g,Rectangle rectangle,Color color)
{
PointF[] pointFs = new PointF[3];
pointFs[0] = new PointF(rectangle.X+rectangle.Width/4.5f,rectangle.Y+rectangle.Height/2.5f);
pointFs[1] = new PointF(rectangle.X + rectangle.Width / 2.5F, rectangle.Bottom - rectangle.Height / 3.0f);
pointFs[2] = new PointF(rectangle.Right-rectangle.Width/4.0f, rectangle.Y+rectangle.Height/4.5f);
Pen pen = new Pen(color,2.0f);
g.DrawLines(pen, pointFs);
}
}
}
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class CircleProgramBar
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+226
View File
@@ -0,0 +1,226 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class CircleProgramBar : Control
{
public CircleProgramBar()
{
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
InitControl();
this.SizeChanged += delegate
{
this.Invalidate(); //重绘控件
};
}
#region 减少闪烁
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
#endregion
/// <summary>
/// 初始化控件参数
/// </summary>
private void InitControl()
{
this.Width = 200;
this.Height = 200;
}
private Color bgColor = Color.FromArgb(224, 224, 224);
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示背景边框颜色")]
public Color BgColor
{
get { return this.bgColor; }
set
{
this.bgColor = value;
this.Invalidate();
}
}
private Color sectorColor = Color.FromArgb(109, 179, 63);
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示扇形颜色")]
public Color SectorColor
{
get { return this.sectorColor; }
set
{
this.sectorColor = value;
this.Invalidate();
}
}
private int borderWidth = 5;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示边框宽度")]
public int BorderWidth
{
get { return this.borderWidth; }
set
{
this.borderWidth = value;
this.Invalidate();
}
}
private int maxValue = 100;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示进度最大值")]
public int MaxValue
{
get { return this.maxValue; }
set
{
this.maxValue = value;
this.Invalidate();
}
}
private bool isShowDataType = false;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置显示数值是小数还是整数")]
public bool IsShowDataType
{
get { return this.isShowDataType; }
set
{
this.isShowDataType = value;
this.Invalidate();
}
}
private int intValue = 0;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示整数进度值")]
public int IntValue
{
get { return this.intValue; }
set
{
if (value > this.maxValue)
{
return;
}
this.intValue = value;
this.Invalidate();
}
}
private int floatValue = 0;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示小数进度值")]
public int FloatValue
{
get { return this.floatValue; }
set
{
if (value > this.maxValue)
{
return;
}
this.floatValue = value;
this.Invalidate();
}
}
private bool setShowsign = false;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示百分号,显示百分号需要设置MaxValue值为100")]
public bool SetShowsign
{
get { return this.setShowsign; }
set
{
if (this.maxValue>100)
{
this.maxValue = 100;
}
this.setShowsign = value;
this.Invalidate();
}
}
//对Control进行绘制
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.Width < borderWidth * 4 || this.Height < borderWidth * 4)
{
return;
}
var g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;//消除锯齿,也就是抗锯齿什么鬼东西
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.CompositingQuality = CompositingQuality.HighQuality;
RectangleF bg_rectangle = new RectangleF(0 + borderWidth, 0 + borderWidth, Width - borderWidth * 2, Height - borderWidth * 2); //控件整体坐标
g.DrawEllipse(new Pen(bgColor, borderWidth), bg_rectangle); //画背景圆
Rectangle rl = new Rectangle(0 + borderWidth * 2, 0 + borderWidth * 2, this.Width - borderWidth * 4, this.Height - borderWidth * 4);
decimal topAngle = (isShowDataType? this.floatValue : this.intValue * 1.0M / this.maxValue) * 360M;//计算进度条划过的度数
g.FillPie(new SolidBrush(sectorColor), rl, 0, (float)topAngle); //填充扇形
if (this.setShowsign)
{
SizeF proValSize = g.MeasureString(isShowDataType ? this.floatValue.ToString() : this.intValue.ToString() + "%", this.Font);//计算文字的范围
g.DrawString(isShowDataType ? this.floatValue.ToString() : this.intValue.ToString() + "%", this.Font, new SolidBrush(this.ForeColor),
bg_rectangle.X + bg_rectangle.Width / 2 - proValSize.Width / 2, bg_rectangle.Y + bg_rectangle.Height / 2 - proValSize.Height / 2);
}
else
{
SizeF proValSize = g.MeasureString(isShowDataType ? this.floatValue.ToString() : this.intValue.ToString(), this.Font);//计算文字的范围
g.DrawString(isShowDataType ? this.floatValue.ToString() : this.intValue.ToString(), this.Font, new SolidBrush(this.ForeColor),
bg_rectangle.X + bg_rectangle.Width / 2 - proValSize.Width / 2, bg_rectangle.Y + bg_rectangle.Height / 2 - proValSize.Height / 2);
}
}
}
}
+37
View File
@@ -0,0 +1,37 @@
namespace JinYuan.ControlLib
{
partial class ControlBase
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
}
#endregion
}
}
+263
View File
@@ -0,0 +1,263 @@
using JinYuan.ControlLib.UCHelper;
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 JinYuan.ControlLib
{
public partial class ControlBase : UserControl
{
/// <summary>
/// The is radius
/// </summary>
private bool _isRadius = false;
/// <summary>
/// The corner radius
/// </summary>
private int _cornerRadius = 24;
/// <summary>
/// The is show rect
/// </summary>
private bool _isShowRect = false;
/// <summary>
/// The rect color
/// </summary>
private Color _rectColor = Color.FromArgb(220, 220, 220);
/// <summary>
/// The rect width
/// </summary>
private int _rectWidth = 1;
/// <summary>
/// The fill color
/// </summary>
private Color _fillColor = Color.Transparent;
/// <summary>
/// 是否圆角
/// </summary>
/// <value><c>true</c> if this instance is radius; otherwise, <c>false</c>.</value>
[Description("是否圆角"), Category("自定义")]
public virtual bool IsRadius
{
get
{
return this._isRadius;
}
set
{
this._isRadius = value;
Refresh();
}
}
/// <summary>
/// 圆角角度
/// </summary>
/// <value>The coner radius.</value>
[Description("圆角角度"), Category("自定义")]
public virtual int ConerRadius
{
get
{
return this._cornerRadius;
}
set
{
this._cornerRadius = Math.Max(value, 1);
Refresh();
}
}
/// <summary>
/// 是否显示边框
/// </summary>
/// <value><c>true</c> if this instance is show rect; otherwise, <c>false</c>.</value>
[Description("是否显示边框"), Category("自定义")]
public virtual bool IsShowRect
{
get
{
return this._isShowRect;
}
set
{
this._isShowRect = value;
Refresh();
}
}
/// <summary>
/// 边框颜色
/// </summary>
/// <value>The color of the rect.</value>
[Description("边框颜色"), Category("自定义")]
public virtual Color RectColor
{
get
{
return this._rectColor;
}
set
{
this._rectColor = value;
this.Refresh();
}
}
/// <summary>
/// 边框宽度
/// </summary>
/// <value>The width of the rect.</value>
[Description("边框宽度"), Category("自定义")]
public virtual int RectWidth
{
get
{
return this._rectWidth;
}
set
{
this._rectWidth = value;
Refresh();
}
}
/// <summary>
/// 当使用边框时填充颜色,当值为背景色或透明色或空值则不填充
/// </summary>
/// <value>The color of the fill.</value>
[Description("当使用边框时填充颜色,当值为背景色或透明色或空值则不填充"), Category("自定义")]
public virtual Color FillColor
{
get
{
return this._fillColor;
}
set
{
this._fillColor = value;
Refresh();
}
}
/// <summary>
/// Initializes a new instance of the <see cref="UCControlBase" /> class.
/// </summary>
public ControlBase()
{
this.InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.UserPaint, true);
}
/// <summary>
/// 引发 <see cref="E:System.Windows.Forms.Control.Paint" /> 事件。
/// </summary>
/// <param name="e">包含事件数据的 <see cref="T:System.Windows.Forms.PaintEventArgs" />。</param>
protected override void OnPaint(PaintEventArgs e)
{
if (this.Visible)
{
if (this._isRadius)
{
this.SetWindowRegion();
}
else
{
//关闭圆角后显示为原矩形
GraphicsPath g = new GraphicsPath();
g.AddRectangle(base.ClientRectangle);
g.CloseFigure();
base.Region = new Region(g);
}
GraphicsPath graphicsPath = new GraphicsPath();
if (this._isShowRect || (_fillColor != Color.Empty && _fillColor != Color.Transparent && _fillColor != this.BackColor))
{
Rectangle clientRectangle = base.ClientRectangle;
if (_isRadius)
{
graphicsPath.AddArc(0, 0, _cornerRadius, _cornerRadius, 180f, 90f);
graphicsPath.AddArc(clientRectangle.Width - _cornerRadius - 1, 0, _cornerRadius, _cornerRadius, 270f, 90f);
graphicsPath.AddArc(clientRectangle.Width - _cornerRadius - 1, clientRectangle.Height - _cornerRadius - 1, _cornerRadius, _cornerRadius, 0f, 90f);
graphicsPath.AddArc(0, clientRectangle.Height - _cornerRadius - 1, _cornerRadius, _cornerRadius, 90f, 90f);
graphicsPath.CloseFigure();
}
else
{
graphicsPath.AddRectangle(clientRectangle);
}
}
e.Graphics.SetGDIHigh();
if (_fillColor != Color.Empty && _fillColor != Color.Transparent && _fillColor != this.BackColor)
e.Graphics.FillPath(new SolidBrush(this._fillColor), graphicsPath);
if (this._isShowRect)
{
Color rectColor = this._rectColor;
Pen pen = new Pen(rectColor, (float)this._rectWidth);
e.Graphics.DrawPath(pen, graphicsPath);
}
}
base.OnPaint(e);
}
/// <summary>
/// Sets the window region.
/// </summary>
private void SetWindowRegion()
{
GraphicsPath path = new GraphicsPath();
Rectangle rect = new Rectangle(-1, -1, base.Width + 1, base.Height);
path = this.GetRoundedRectPath(rect, this._cornerRadius);
base.Region = new Region(path);
}
/// <summary>
/// Gets the rounded rect path.
/// </summary>
/// <param name="rect">The rect.</param>
/// <param name="radius">The radius.</param>
/// <returns>GraphicsPath.</returns>
private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius)
{
Rectangle rect2 = new Rectangle(rect.Location, new Size(radius, radius));
GraphicsPath graphicsPath = new GraphicsPath();
graphicsPath.AddArc(rect2, 180f, 90f);//左上角
rect2.X = rect.Right - radius;
graphicsPath.AddArc(rect2, 270f, 90f);//右上角
rect2.Y = rect.Bottom - radius;
rect2.Width += 1;
rect2.Height += 1;
graphicsPath.AddArc(rect2, 360f, 90f);//右下角
rect2.X = rect.Left;
graphicsPath.AddArc(rect2, 90f, 90f);//左下角
graphicsPath.CloseFigure();
return graphicsPath;
}
/// <summary>
/// WNDs the proc.
/// </summary>
/// <param name="m">要处理的 Windows <see cref="T:System.Windows.Forms.Message" />。</param>
protected override void WndProc(ref Message m)
{
if (m.Msg != 20)
{
base.WndProc(ref m);
}
}
}
}
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class CustomComboBox
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+286
View File
@@ -0,0 +1,286 @@
using AntdUI.Theme;
using AntdUI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing.Drawing2D;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class CustomComboBox : ComboBox
{
private Color darkBackColor = Color.FromArgb(30, 30, 30);
private Color lightBackColor = Color.White;
private Color darkForeColor = Color.White;
private Color lightForeColor = Color.Black;
private Color darkBorderColor = Color.FromArgb(64, 64, 64);
private Color lightBorderColor = Color.FromArgb(217, 217, 217);
private Color darkArrowColor = Color.White;
private Color lightArrowColor = Color.Black;
private Color darkWatermarkColor = Color.Gray;
private Color lightWatermarkColor = Color.LightGray;
private string watermarkText = string.Empty;
[Category("行为")]
public string WatermarkText
{
get { return watermarkText; }
set
{
watermarkText = value;
Invalidate();
}
}
private int cornerRadius = 5; // 新增:控制圆角半径的字段
[Category("外观")]
[DefaultValue(5)]
public int CornerRadius
{
get { return cornerRadius; }
set
{
if (cornerRadius != value)
{
cornerRadius = value;
Invalidate();
}
}
}
public CustomComboBox()
{
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
DrawMode = DrawMode.OwnerDrawFixed;
DropDownStyle = ComboBoxStyle.DropDownList;
UpdateTheme(Config.IsDark);
}
public void UpdateTheme(bool isDark)
{
BackColor = isDark ? darkBackColor : lightBackColor;
ForeColor = isDark ? darkForeColor : lightForeColor;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
using (var path = CreateRoundedRectangle(new Rectangle(0, 0, Width - 1, Height - 1), cornerRadius))
{
var g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;
var rect = new Rectangle(0, 0, Width - 1, Height - 1);
var borderColor = Config.IsDark ? darkBorderColor : lightBorderColor;
var arrowColor = Config.IsDark ? darkArrowColor : lightArrowColor;
// Draw background
using (var brush = new SolidBrush(BackColor))
{
g.FillPath(brush, path);
}
// Draw border
using (var pen = new Pen(borderColor))
{
g.DrawPath(pen, path);
}
// Draw text or watermark
var textRect = new Rectangle(cornerRadius, 2, Width - 20 - cornerRadius, Height - 4);
var flags = TextFormatFlags.VerticalCenter | TextFormatFlags.Left;
if (SelectedItem != null)
{
string displayText = GetCustomItemText(SelectedItem);
using (var brush = new SolidBrush(ForeColor))
{
TextRenderer.DrawText(g, displayText, Font, textRect, ForeColor, flags);
}
}
else if (!string.IsNullOrEmpty(watermarkText))
{
var watermarkColor = Config.IsDark ? darkWatermarkColor : lightWatermarkColor;
TextRenderer.DrawText(g, watermarkText, Font, textRect, watermarkColor, flags);
}
// Draw arrow
var arrowSize = 8;
var arrowRect = new Rectangle(Width - arrowSize - 8 - cornerRadius, (Height - arrowSize) / 2, arrowSize, arrowSize);
using (var brush = new SolidBrush(arrowColor))
{
Point[] arrow = {
new Point(arrowRect.Left, arrowRect.Top),
new Point(arrowRect.Right, arrowRect.Top),
new Point(arrowRect.Left + arrowRect.Width / 2, arrowRect.Bottom)
};
g.FillPolygon(brush, arrow);
}
}
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
if (e.Index < 0) return;
// 设置下拉项的背景色
Color backColor;
Color textColor;
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
// 选中项的颜色
backColor = Config.IsDark ? Color.FromArgb(45, 45, 45) : Color.FromArgb(230, 230, 230);
textColor = Config.IsDark ? darkForeColor : lightForeColor;
}
else
{
// 未选中项的颜色
backColor = Config.IsDark ? darkBackColor : lightBackColor;
textColor = Config.IsDark ? darkForeColor : lightForeColor;
}
// 使用新的背景色绘制背景
using (var backBrush = new SolidBrush(backColor))
{
e.Graphics.FillRectangle(backBrush, e.Bounds);
}
// 绘制文本
if (e.Index >= 0)
{
string itemText = GetCustomItemText(Items[e.Index]);
// 设置文本边距
Rectangle textBounds = new Rectangle(
e.Bounds.X + 5, // 左边距
e.Bounds.Y,
e.Bounds.Width - 10, // 右边距
e.Bounds.Height
);
// 使用TextRenderer绘制文本以获得更好的文本渲染效果
TextRenderer.DrawText(
e.Graphics,
itemText,
Font,
textBounds,
textColor,
TextFormatFlags.VerticalCenter | TextFormatFlags.Left
);
}
// 如果有焦点,绘制焦点矩形
if ((e.State & DrawItemState.Focus) == DrawItemState.Focus)
{
using (Pen focusPen = new Pen(Config.IsDark ? Color.FromArgb(70, 70, 70) : Color.FromArgb(180, 180, 180)))
{
e.Graphics.DrawRectangle(focusPen, new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height - 1));
}
}
}
// 添加这个方法来处理下拉列表的外观
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == 0x204E) // WM_CTLCOLORLISTBOX
{
// 获取下拉列表的句柄
var hDC = m.WParam;
var hListBox = m.LParam;
using (Graphics g = Graphics.FromHdc(hDC))
{
// 设置下拉列表的背景色
using (SolidBrush backBrush = new SolidBrush(Config.IsDark ? darkBackColor : lightBackColor))
{
g.FillRectangle(backBrush, this.DropDownRectangle);
}
}
}
base.WndProc(ref m);
}
// 获取下拉列表的矩形区域
private Rectangle DropDownRectangle
{
get
{
return new Rectangle(0, 0, DropDownWidth, ItemHeight * Math.Max(Items.Count, 1));
}
}
private string GetCustomItemText(object item)
{
if (item == null)
return string.Empty;
if (string.IsNullOrEmpty(DisplayMember))
return item.ToString();
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(item).Find(DisplayMember, true);
if (descriptor != null)
return descriptor.GetValue(item)?.ToString() ?? string.Empty;
return item.ToString();
}
public object GetSelectedValue()
{
if (SelectedItem == null)
return null;
if (string.IsNullOrEmpty(ValueMember))
return SelectedItem;
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(SelectedItem).Find(ValueMember, true);
if (descriptor != null)
return descriptor.GetValue(SelectedItem);
return null;
}
private GraphicsPath CreateRoundedRectangle(Rectangle bounds, int radius)
{
int diameter = radius * 2;
Size size = new Size(diameter, diameter);
Rectangle arc = new Rectangle(bounds.Location, size);
GraphicsPath path = new GraphicsPath();
if (radius == 0)
{
path.AddRectangle(bounds);
return path;
}
// 左上角
path.AddArc(arc, 180, 90);
// 右上角
arc.X = bounds.Right - diameter;
path.AddArc(arc, 270, 90);
// 右下角
arc.Y = bounds.Bottom - diameter;
path.AddArc(arc, 0, 90);
// 左下角
arc.X = bounds.Left;
path.AddArc(arc, 90, 90);
path.CloseFigure();
return path;
}
}
}
+238
View File
@@ -0,0 +1,238 @@
using AntdUI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public class CustomDataGridView : DataGridView
{
private Color darkBackgroundColor = Color.FromArgb(18, 18, 18);
private Color lightBackgroundColor = Color.White;
private Color darkForeColor = Color.White;
private Color lightForeColor = Color.Black;
private Color darkHeaderBackColor = Color.FromArgb(30, 30, 30);
private Color lightHeaderBackColor = Color.FromArgb(240, 240, 240);
private Color darkSelectedCellColor = Color.FromArgb(64, 64, 64);
private Color lightSelectedCellColor = Color.FromArgb(200, 200, 200);
private Color darkSelectedColumnColor = Color.FromArgb(45, 45, 45);
private Color lightSelectedColumnColor = Color.FromArgb(220, 220, 220);
private Color darkButtonColor = Color.FromArgb(64, 64, 64);
private Color lightButtonColor = Color.FromArgb(240, 240, 240);
private Color darkComboBoxColor = Color.FromArgb(45, 45, 45);
private Color lightComboBoxColor = Color.FromArgb(250, 250, 250);
public CustomDataGridView()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
UpdateTheme(Config.IsDark);
}
private void InitializeComponent()
{
this.RowHeadersVisible = true;
this.AllowUserToAddRows = false;
this.AllowUserToDeleteRows = false;
this.AllowUserToResizeRows = false;
this.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
this.MultiSelect = false;
this.CellBorderStyle = DataGridViewCellBorderStyle.SingleHorizontal;
this.BorderStyle = BorderStyle.None;
this.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None;
this.EnableHeadersVisualStyles = false;
this.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
this.ColumnHeadersDefaultCellStyle.Font = new Font(this.Font.FontFamily, this.Font.Size, FontStyle.Bold);
this.ColumnHeadersHeight = 30;
this.RowHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
this.RowHeadersWidth = 50;
// 设置默认的行高
this.RowTemplate.Height = 28;
}
public void UpdateTheme(bool isDark)
{
// 基础颜色
this.BackgroundColor = isDark ? darkBackgroundColor : lightBackgroundColor;
this.ForeColor = isDark ? darkForeColor : lightForeColor;
this.GridColor = isDark ? Color.DimGray : Color.LightGray;
// 列头样式
this.ColumnHeadersDefaultCellStyle.BackColor = isDark ? darkHeaderBackColor : lightHeaderBackColor;
this.ColumnHeadersDefaultCellStyle.ForeColor = isDark ? darkForeColor : lightForeColor;
this.ColumnHeadersDefaultCellStyle.SelectionBackColor = isDark ? darkSelectedColumnColor : lightSelectedColumnColor;
this.ColumnHeadersDefaultCellStyle.SelectionForeColor = isDark ? darkForeColor : lightForeColor;
// 行头样式
this.RowHeadersDefaultCellStyle.BackColor = isDark ? darkHeaderBackColor : lightHeaderBackColor;
this.RowHeadersDefaultCellStyle.ForeColor = isDark ? darkForeColor : lightForeColor;
this.RowHeadersDefaultCellStyle.SelectionBackColor = isDark ? darkSelectedCellColor : lightSelectedCellColor;
this.RowHeadersDefaultCellStyle.SelectionForeColor = isDark ? darkForeColor : lightForeColor;
// 默认单元格样式
this.DefaultCellStyle.BackColor = this.BackgroundColor;
this.DefaultCellStyle.ForeColor = this.ForeColor;
this.DefaultCellStyle.SelectionBackColor = isDark ? darkSelectedCellColor : lightSelectedCellColor;
this.DefaultCellStyle.SelectionForeColor = isDark ? darkForeColor : lightForeColor;
// 更新所有列的样式
foreach (DataGridViewColumn column in this.Columns)
{
if (column is DataGridViewComboBoxColumn comboBoxColumn)
{
// ComboBox列样式
comboBoxColumn.DefaultCellStyle.BackColor = isDark ? darkComboBoxColor : lightComboBoxColor;
comboBoxColumn.DefaultCellStyle.ForeColor = isDark ? darkForeColor : lightForeColor;
comboBoxColumn.DefaultCellStyle.SelectionBackColor = isDark ? darkSelectedCellColor : lightSelectedCellColor;
comboBoxColumn.DefaultCellStyle.SelectionForeColor = isDark ? darkForeColor : lightForeColor;
comboBoxColumn.FlatStyle = FlatStyle.Flat;
}
else if (column is DataGridViewButtonColumn buttonColumn)
{
// Button列样式
DataGridViewCellStyle buttonStyle = new DataGridViewCellStyle();
buttonStyle.BackColor = isDark ? darkButtonColor : lightButtonColor;
buttonStyle.ForeColor = isDark ? darkForeColor : lightForeColor;
buttonStyle.SelectionBackColor = isDark ? darkSelectedCellColor : lightSelectedCellColor;
buttonStyle.SelectionForeColor = isDark ? darkForeColor : lightForeColor;
buttonStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
buttonColumn.DefaultCellStyle = buttonStyle;
buttonColumn.FlatStyle = FlatStyle.Flat;
}
}
this.Invalidate();
}
protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == -1 && e.ColumnIndex >= 0)
{
// 绘制列头
e.PaintBackground(e.CellBounds, true);
Rectangle newRect = new Rectangle(e.CellBounds.X + 2, e.CellBounds.Y + 2,
e.CellBounds.Width - 4, e.CellBounds.Height - 4);
using (var brush = new SolidBrush(e.CellStyle.ForeColor))
{
e.Graphics.DrawString(e.Value?.ToString(), this.ColumnHeadersDefaultCellStyle.Font,
brush, newRect, new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
});
}
e.Handled = true;
}
else if (e.RowIndex >= 0 && e.ColumnIndex == -1)
{
// 绘制行头(行号)
e.PaintBackground(e.CellBounds, true);
Rectangle newRect = new Rectangle(e.CellBounds.X + 2, e.CellBounds.Y + 2,
e.CellBounds.Width - 4, e.CellBounds.Height - 4);
string rowNumber = (e.RowIndex + 1).ToString();
// 判断当前行是否被选中
bool isSelected = this.Rows[e.RowIndex].Selected;
Color textColor;
if (isSelected)
{
// 如果行被选中,使用选中状态的前景色
textColor = this.RowHeadersDefaultCellStyle.SelectionForeColor;
}
else
{
// 如果行未被选中,使用普通状态的前景色
textColor = Config.IsDark ? darkForeColor : lightForeColor;
}
using (var brush = new SolidBrush(textColor))
{
e.Graphics.DrawString(rowNumber, this.RowHeadersDefaultCellStyle.Font,
brush, newRect, new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
});
}
e.Handled = true;
}
else if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
// 处理按钮列的绘制
if (this.Columns[e.ColumnIndex] is DataGridViewButtonColumn)
{
e.PaintBackground(e.CellBounds, true);
Rectangle buttonBounds = new Rectangle(e.CellBounds.X + 2, e.CellBounds.Y + 2,
e.CellBounds.Width - 4, e.CellBounds.Height - 4);
using (var buttonBrush = new SolidBrush(e.CellStyle.BackColor))
using (var textBrush = new SolidBrush(e.CellStyle.ForeColor))
{
// 绘制按钮背景
e.Graphics.FillRectangle(buttonBrush, buttonBounds);
// 绘制按钮文本
string buttonText = e.Value?.ToString() ?? string.Empty;
e.Graphics.DrawString(buttonText, this.Font, textBrush,
buttonBounds, new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
});
}
e.Handled = true;
}
else
{
base.OnCellPainting(e);
}
}
else
{
base.OnCellPainting(e);
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// 绘制列头底部边框
using (var pen = new Pen(Config.IsDark ? Color.DimGray : Color.LightGray))
{
e.Graphics.DrawLine(pen, 0, this.ColumnHeadersHeight, this.Width, this.ColumnHeadersHeight);
}
}
protected override void OnColumnHeadersHeightChanged(EventArgs e)
{
base.OnColumnHeadersHeightChanged(e);
this.ColumnHeadersHeight = 30;
}
protected override void OnDataBindingComplete(DataGridViewBindingCompleteEventArgs e)
{
base.OnDataBindingComplete(e);
// 重新应用主题样式
UpdateTheme(Config.IsDark);
}
}
}
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class CustomGroupBox
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+143
View File
@@ -0,0 +1,143 @@
using AntdUI.Theme;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing.Drawing2D;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AntdUI;
namespace JinYuan.ControlLib
{
public partial class CustomGroupBox : GroupBox
{
private Color darkBorderColor = Color.FromArgb(64, 64, 64);
private Color lightBorderColor = Color.FromArgb(217, 217, 217);
private Color darkForeColor = Color.White;
private Color lightForeColor = Color.Black;
private const int TextPadding = 4;
public Color BorderColor { get; set; } = Color.Gray;
private float _borderWidth = 1f;
private float _cornerRadius = 5f;
[Category("Appearance")]
[DefaultValue(1f)]
public float BorderWidth
{
get => _borderWidth;
set
{
_borderWidth = value;
Invalidate();
}
}
[Category("Appearance")]
[DefaultValue(5f)]
public float CornerRadius
{
get => _cornerRadius;
set
{
_cornerRadius = value;
Invalidate();
}
}
public CustomGroupBox()
{
SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
UpdateTheme(Config.IsDark);
}
public void UpdateTheme(bool isDark)
{
ForeColor = isDark ? darkForeColor : lightForeColor;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
var g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;
var borderColor = Config.IsDark ? darkBorderColor : lightBorderColor;
var textSize = g.MeasureString(Text, Font);
var textWidth = (int)Math.Ceiling(textSize.Width) + TextPadding * 2;
var textHeight = (int)Math.Ceiling(textSize.Height);
var textRect = new Rectangle(TextPadding, 0, textWidth, textHeight);
var borderRect = new Rectangle((int)(_borderWidth / 2), textHeight / 2,
Width - 1 - (int)_borderWidth, Height - textHeight / 2 - 1 - (int)_borderWidth);
//绘制边框颜色
using (var pen = new Pen(BorderColor, BorderWidth))
{
e.Graphics.DrawRectangle(pen, 0, 0, Width - BorderWidth, Height - BorderWidth);
}
// 绘制背景
using (var brush = new SolidBrush(BackColor))
{
g.FillRectangle(brush, ClientRectangle);
}
// 创建圆角矩形路径
using (var path = GetRoundedRectanglePath(borderRect, _cornerRadius))
{
// 绘制边框
using (var pen = new Pen(borderColor, _borderWidth))
{
g.DrawPath(pen, path);
}
}
// 绘制标题文本背景
using (var brush = new SolidBrush(BackColor))
{
g.FillRectangle(brush, textRect);
}
// 绘制标题文本
using (var brush = new SolidBrush(ForeColor))
{
g.DrawString(Text, Font, brush, textRect, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
}
}
private GraphicsPath GetRoundedRectanglePath(Rectangle rect, float radius)
{
GraphicsPath path = new GraphicsPath();
float diameter = radius * 2;
RectangleF arcRect = new RectangleF(rect.Location, new SizeF(diameter, diameter));
// 左上角
path.AddArc(arcRect, 180, 90);
// 顶边
arcRect.X = rect.Right - diameter;
path.AddArc(arcRect, 270, 90);
// 右边
arcRect.Y = rect.Bottom - diameter;
path.AddArc(arcRect, 0, 90);
// 底边
arcRect.X = rect.Left;
path.AddArc(arcRect, 90, 90);
path.CloseFigure();
return path;
}
}
}
+37
View File
@@ -0,0 +1,37 @@
namespace JinYuan.ControlLib
{
partial class CustomRichTextBox
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
HandleCreated -= CustomRichTextBox_HandleCreated;
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+447
View File
@@ -0,0 +1,447 @@
using AntdUI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class CustomRichTextBox : RichTextBox
{
private Color darkBackColor = Color.Black;
private Color lightBackColor = Color.White;
private Color darkForeColor = Color.White;
private Color lightForeColor = Color.Black;
private Color darkBorderColor = Color.FromArgb(64, 64, 64);
private Color lightBorderColor = Color.FromArgb(217, 217, 217);
private bool isDarkTheme;
private const int BatchSize = 5000;
private bool isUpdatingTheme = false;
private bool isInitialized = false;
public CustomRichTextBox()
{
BorderStyle = BorderStyle.None;
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
// 在句柄创建后初始化主题
HandleCreated += CustomRichTextBox_HandleCreated;
}
private void CustomRichTextBox_HandleCreated(object sender, EventArgs e)
{
if (!isInitialized)
{
isInitialized = true;
InitializeThemeAsync();
}
}
private async void InitializeThemeAsync()
{
try
{
await UpdateThemeAsync(Config.IsDark);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Theme initialization failed: {ex.Message}");
}
}
public async Task UpdateThemeAsync(bool isDark)
{
if (isDarkTheme == isDark || isUpdatingTheme || !IsHandleCreated) return;
isUpdatingTheme = true;
isDarkTheme = isDark;
try
{
if (InvokeRequired)
{
await Task.Run(() =>
{
Invoke((MethodInvoker)(() => UpdateThemeInternal()));
});
}
else
{
UpdateThemeInternal();
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Theme update failed: {ex.Message}");
}
finally
{
isUpdatingTheme = false;
}
}
private void UpdateThemeInternal()
{
if (!IsHandleCreated) return;
BackColor = isDarkTheme ? darkBackColor : lightBackColor;
ForeColor = isDarkTheme ? darkForeColor : lightForeColor;
SuspendLayout();
try
{
int visibleStart = GetCharIndexFromPosition(new Point(0, 0));
int visibleEnd = GetCharIndexFromPosition(new Point(ClientSize.Width, ClientSize.Height));
// Update visible text first
UpdateTextColors(visibleStart, visibleEnd - visibleStart);
// Then update the rest in batches
for (int i = 0; i < TextLength; i += BatchSize)
{
if (i >= visibleStart && i < visibleEnd) continue;
int length = Math.Min(BatchSize, TextLength - i);
UpdateTextColors(i, length);
if (i % (BatchSize * 10) == 0) Application.DoEvents();
}
}
finally
{
ResumeLayout();
}
Invalidate();
}
private void UpdateTextColors(int start, int length)
{
if (start < 0 || length <= 0 || start + length > TextLength) return;
Select(start, length);
SelectionColor = ForeColor;
SelectionBackColor = BackColor;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
using (var pen = new Pen(isDarkTheme ? darkBorderColor : lightBorderColor))
{
e.Graphics.DrawRectangle(pen, 0, 0, Width - 1, Height - 1);
}
}
protected override void OnTextChanged(EventArgs e)
{
base.OnTextChanged(e);
if (!isUpdatingTheme && TextLength > 0 && IsHandleCreated)
{
int start = TextLength - 1;
int length = 1;
if (start < 0) start = 0;
if (start + length > TextLength) length = TextLength - start;
UpdateTextColors(start, length);
SelectionLength = 0;
SelectionStart = TextLength;
}
}
[Browsable(true)]
[Category("Appearance")]
[DefaultValue(typeof(Color), "30, 30, 30")]
public Color DarkBackColor
{
get => darkBackColor;
set
{
if (darkBackColor != value)
{
darkBackColor = value;
if (isDarkTheme && IsHandleCreated) SafeRefreshTheme();
}
}
}
[Browsable(true)]
[Category("Appearance")]
[DefaultValue(typeof(Color), "White")]
public Color LightBackColor
{
get => lightBackColor;
set
{
if (lightBackColor != value)
{
lightBackColor = value;
if (!isDarkTheme && IsHandleCreated) SafeRefreshTheme();
}
}
}
[Browsable(true)]
[Category("Appearance")]
[DefaultValue(typeof(Color), "White")]
public Color DarkForeColor
{
get => darkForeColor;
set
{
if (darkForeColor != value)
{
darkForeColor = value;
if (isDarkTheme && IsHandleCreated) SafeRefreshTheme();
}
}
}
[Browsable(true)]
[Category("Appearance")]
[DefaultValue(typeof(Color), "Black")]
public Color LightForeColor
{
get => lightForeColor;
set
{
if (lightForeColor != value)
{
lightForeColor = value;
if (!isDarkTheme && IsHandleCreated) SafeRefreshTheme();
}
}
}
[Browsable(true)]
[Category("Appearance")]
[DefaultValue(typeof(Color), "64, 64, 64")]
public Color DarkBorderColor
{
get => darkBorderColor;
set
{
if (darkBorderColor != value)
{
darkBorderColor = value;
if (isDarkTheme && IsHandleCreated) Invalidate();
}
}
}
[Browsable(true)]
[Category("Appearance")]
[DefaultValue(typeof(Color), "217, 217, 217")]
public Color LightBorderColor
{
get => lightBorderColor;
set
{
if (lightBorderColor != value)
{
lightBorderColor = value;
if (!isDarkTheme && IsHandleCreated) Invalidate();
}
}
}
private async void SafeRefreshTheme()
{
try
{
await RefreshThemeAsync();
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Theme refresh failed: {ex.Message}");
}
}
public async Task RefreshThemeAsync()
{
if (!IsHandleCreated) return;
await UpdateThemeAsync(isDarkTheme);
}
}
}
//public partial class CustomRichTextBox : RichTextBox
//{
// private Color darkBackColor = Color.Black;
// private Color lightBackColor = Color.White;
// private Color darkForeColor = Color.White;
// private Color lightForeColor = Color.Black;
// private Color darkBorderColor = Color.FromArgb(64, 64, 64);
// private Color lightBorderColor = Color.FromArgb(217, 217, 217);
// private bool isDarkTheme;
// private const int BatchSize = 5000; // 每批处理的字符数
// private bool isUpdatingTheme = false;
// public CustomRichTextBox()
// {
// BorderStyle = BorderStyle.None;
// SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
// InitializeThemeAsync();
// }
// private async void InitializeThemeAsync()
// {
// await UpdateThemeAsync(Config.IsDark);
// }
// public async Task UpdateThemeAsync(bool isDark)
// {
// if (isDarkTheme == isDark || isUpdatingTheme) return;
// isUpdatingTheme = true;
// isDarkTheme = isDark;
// try
// {
// await Task.Run(async () =>
// {
// await InvokeAsync(() =>
// {
// BackColor = isDark ? darkBackColor : lightBackColor;
// ForeColor = isDark ? darkForeColor : lightForeColor;
// SuspendLayout();
// try
// {
// int visibleStart = GetCharIndexFromPosition(new Point(0, 0));
// int visibleEnd = GetCharIndexFromPosition(new Point(ClientSize.Width, ClientSize.Height));
// // Update visible text first
// UpdateTextColors(visibleStart, visibleEnd - visibleStart);
// // Then update the rest in batches
// for (int i = 0; i < TextLength; i += BatchSize)
// {
// if (i >= visibleStart && i < visibleEnd) continue; // Skip already updated visible part
// int length = Math.Min(BatchSize, TextLength - i);
// UpdateTextColors(i, length);
// if (i % (BatchSize * 10) == 0) Application.DoEvents();
// }
// }
// finally
// {
// ResumeLayout();
// }
// Invalidate();
// });
// });
// }
// finally
// {
// isUpdatingTheme = false;
// }
// }
// private void UpdateTextColors(int start, int length)
// {
// Select(start, length);
// SelectionColor = ForeColor;
// SelectionBackColor = BackColor;
// }
// protected override void OnPaint(PaintEventArgs e)
// {
// base.OnPaint(e);
// using (var pen = new Pen(isDarkTheme ? darkBorderColor : lightBorderColor))
// {
// e.Graphics.DrawRectangle(pen, 0, 0, Width - 1, Height - 1);
// }
// }
// protected override void OnTextChanged(EventArgs e)
// {
// base.OnTextChanged(e);
// if (!isUpdatingTheme && TextLength > 0)
// {
// int start = TextLength - 1;
// int length = 1;
// if (start < 0) start = 0;
// if (start + length > TextLength) length = TextLength - start;
// UpdateTextColors(start, length);
// SelectionLength = 0;
// SelectionStart = TextLength;
// }
// }
// [Browsable(true)]
// [Category("Appearance")]
// [DefaultValue(typeof(Color), "30, 30, 30")]
// public Color DarkBackColor
// {
// get => darkBackColor;
// set { darkBackColor = value; if (isDarkTheme) RefreshThemeAsync(); }
// }
// [Browsable(true)]
// [Category("Appearance")]
// [DefaultValue(typeof(Color), "White")]
// public Color LightBackColor
// {
// get => lightBackColor;
// set { lightBackColor = value; if (!isDarkTheme) RefreshThemeAsync(); }
// }
// [Browsable(true)]
// [Category("Appearance")]
// [DefaultValue(typeof(Color), "White")]
// public Color DarkForeColor
// {
// get => darkForeColor;
// set { darkForeColor = value; if (isDarkTheme) RefreshThemeAsync(); }
// }
// [Browsable(true)]
// [Category("Appearance")]
// [DefaultValue(typeof(Color), "Black")]
// public Color LightForeColor
// {
// get => lightForeColor;
// set { lightForeColor = value; if (!isDarkTheme) RefreshThemeAsync(); }
// }
// [Browsable(true)]
// [Category("Appearance")]
// [DefaultValue(typeof(Color), "64, 64, 64")]
// public Color DarkBorderColor
// {
// get => darkBorderColor;
// set { darkBorderColor = value; if (isDarkTheme) Invalidate(); }
// }
// [Browsable(true)]
// [Category("Appearance")]
// [DefaultValue(typeof(Color), "217, 217, 217")]
// public Color LightBorderColor
// {
// get => lightBorderColor;
// set { lightBorderColor = value; if (!isDarkTheme) Invalidate(); }
// }
// public async Task RefreshThemeAsync()
// {
// await UpdateThemeAsync(isDarkTheme);
// }
// private Task InvokeAsync(Action action)
// {
// return Task.Factory.FromAsync(BeginInvoke(action), EndInvoke);
// }
//}
@@ -0,0 +1,45 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="DataGridViewCellEntity.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JinYuan.ControlLib
{
/// <summary>
/// Class DataGridViewCellEntity.
/// </summary>
public class DataGridViewCellEntity
{
/// <summary>
/// Gets or sets the title.
/// </summary>
/// <value>The title.</value>
public string Title { get; set; }
/// <summary>
/// Gets or sets the width.
/// </summary>
/// <value>The width.</value>
public int Width { get; set; }
/// <summary>
/// Gets or sets the type of the width.
/// </summary>
/// <value>The type of the width.</value>
public System.Windows.Forms.SizeType WidthType { get; set; }
}
}
@@ -0,0 +1,48 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="DataGridViewCellEventArgs.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
/// <summary>
/// Class DataGridViewEventArgs.
/// Implements the <see cref="System.EventArgs" />
/// </summary>
/// <seealso cref="System.EventArgs" />
public class DataGridViewEventArgs : EventArgs
{
/// <summary>
/// Gets or sets the cell control.
/// </summary>
/// <value>The cell control.</value>
public Control CellControl { get; set; }
/// <summary>
/// Gets or sets the index of the cell.
/// </summary>
/// <value>The index of the cell.</value>
public int CellIndex { get; set; }
/// <summary>
/// Gets or sets the index of the row.
/// </summary>
/// <value>The index of the row.</value>
public int RowIndex { get; set; }
}
}
@@ -0,0 +1,41 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="DataGridViewCellEventHandler.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace JinYuan.ControlLib
{
/// <summary>
/// Delegate DataGridViewEventHandler
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="DataGridViewEventArgs" /> instance containing the event data.</param>
[Serializable]
[ComVisible(true)]
public delegate void DataGridViewEventHandler(object sender, DataGridViewEventArgs e);
/// <summary>
/// Delegate DataGridViewRowCustomEventHandler
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="DataGridViewRowCustomEventArgs" /> instance containing the event data.</param>
[Serializable]
[ComVisible(true)]
public delegate void DataGridViewRowCustomEventHandler(object sender, DataGridViewRowCustomEventArgs e);
}
@@ -0,0 +1,82 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="DataGridViewColumnEntity.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace JinYuan.ControlLib
{
/// <summary>
/// Class DataGridViewColumnEntity.
/// </summary>
public class DataGridViewColumnEntity
{
/// <summary>
/// Gets or sets the head text.
/// </summary>
/// <value>The head text.</value>
public string HeadText { get; set; }
/// <summary>
/// Gets or sets the width.
/// </summary>
/// <value>The width.</value>
public int Width { get; set; }
/// <summary>
/// Gets or sets the type of the width.
/// </summary>
/// <value>The type of the width.</value>
public System.Windows.Forms.SizeType WidthType { get; set; }
/// <summary>
/// Gets or sets the data field.
/// </summary>
/// <value>The data field.</value>
public string DataField { get; set; }
/// <summary>
/// Gets or sets the format.
/// </summary>
/// <value>The format.</value>
public Func<object, string> Format { get; set; }
/// <summary>
/// The text align
/// </summary>
private ContentAlignment _TextAlign = ContentAlignment.MiddleCenter;
/// <summary>
/// Gets or sets the text align.
/// </summary>
/// <value>The text align.</value>
public ContentAlignment TextAlign { get { return _TextAlign; } set { _TextAlign = value; } }
/// <summary>
/// 自定义的单元格控件,一个实现IDataGridViewCustomCell的Control
/// </summary>
/// <value>The custom cell.</value>
private Type customCellType = null;
public Type CustomCellType
{
get
{
return customCellType;
}
set
{
if (!typeof(IDataGridViewCustomCell).IsAssignableFrom(value) || !value.IsSubclassOf(typeof(System.Windows.Forms.Control)))
throw new Exception("行控件没有实现IDataGridViewCustomCell接口");
customCellType = value;
}
}
}
}
@@ -0,0 +1,39 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-27-2019
//
// ***********************************************************************
// <copyright file="DataGridViewRowCustomEventArgs.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JinYuan.ControlLib
{
/// <summary>
/// Class DataGridViewRowCustomEventArgs.
/// Implements the <see cref="System.EventArgs" />
/// </summary>
/// <seealso cref="System.EventArgs" />
public class DataGridViewRowCustomEventArgs : EventArgs
{
/// <summary>
/// Gets or sets the name of the event.
/// </summary>
/// <value>The name of the event.</value>
public string EventName { get; set; }
public object Data { get; set; }
}
}
@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace JinYuan.ControlLib
{
public interface IDataGridViewCustomCell
{
/// <summary>
/// 绑定行关联的数据
/// </summary>
/// <param name="obj">The object.</param>
void SetBindSource(object obj);
/// <summary>
/// 自定义事件传递,用于单元格向行中传递此事件
/// </summary>
event DataGridViewRowCustomEventHandler RowCustomEvent;
/// <summary>
/// 关联数据源
/// </summary>
object DataSource { get; }
}
}
@@ -0,0 +1,91 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="IDataGridViewRow.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
/// <summary>
/// Interface IDataGridViewRow
/// </summary>
public interface IDataGridViewRow
{
/// <summary>
/// Occurs when [row custom event].
/// </summary>
event DataGridViewRowCustomEventHandler RowCustomEvent;
/// <summary>
/// CheckBox选中事件
/// </summary>
event DataGridViewEventHandler CheckBoxChangeEvent;
/// <summary>
/// 点击单元格事件
/// </summary>
event DataGridViewEventHandler CellClick;
/// <summary>
/// 数据源改变事件
/// </summary>
event DataGridViewEventHandler SourceChanged;
/// <summary>
/// 列参数,用于创建列数和宽度
/// </summary>
/// <value>The columns.</value>
List<DataGridViewColumnEntity> Columns { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is show CheckBox.
/// </summary>
/// <value><c>true</c> if this instance is show CheckBox; otherwise, <c>false</c>.</value>
bool IsShowCheckBox { get; set; }
/// <summary>
/// 是否选中
/// </summary>
/// <value><c>true</c> if this instance is checked; otherwise, <c>false</c>.</value>
bool IsChecked { get; set; }
/// <summary>
/// 数据源
/// </summary>
/// <value>The data source.</value>
object DataSource { get; set; }
/// <summary>
/// 添加单元格元素,仅做添加控件操作,不做数据绑定,数据绑定使用BindingCells
/// </summary>
void ReloadCells();
/// <summary>
/// 绑定数据到Cell
/// </summary>
/// <returns>返回true则表示已处理过,否则将进行默认绑定(通常只针对有Text值的控件)</returns>
void BindingCellData();
/// <summary>
/// 设置选中状态,通常为设置颜色即可
/// </summary>
/// <param name="blnSelected">是否选中</param>
void SetSelect(bool blnSelected);
/// <summary>
/// 行高
/// </summary>
/// <value>The height of the row.</value>
int RowHeight { get; set; }
/// <summary>
/// 行号
/// </summary>
/// <value>The Index of the row.</value>
int RowIndex { get; set; }
}
}
+147
View File
@@ -0,0 +1,147 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="UCDataGridView.Designer.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
namespace JinYuan.ControlLib
{
/// <summary>
/// Class UCDataGridView.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
partial class UCDataGridView
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.panHead = new System.Windows.Forms.Panel();
this.panColumns = new System.Windows.Forms.TableLayoutPanel();
this.panHeadLeft = new System.Windows.Forms.Panel();
this.panRow = new System.Windows.Forms.FlowLayoutPanel();
this.ucSplitLine_H1 = new JinYuan.ControlLib.UCSplitLine_H();
this.panHead.SuspendLayout();
this.SuspendLayout();
//
// panHead
//
this.panHead.Controls.Add(this.panColumns);
this.panHead.Controls.Add(this.panHeadLeft);
this.panHead.Controls.Add(this.ucSplitLine_H1);
this.panHead.Location = new System.Drawing.Point(0, 0);
this.panHead.Name = "panHead";
this.panHead.Size = new System.Drawing.Size(1061, 40);
this.panHead.TabIndex = 0;
//
// panColumns
//
this.panColumns.ColumnCount = 1;
this.panColumns.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.panColumns.Dock = System.Windows.Forms.DockStyle.Fill;
this.panColumns.Location = new System.Drawing.Point(0, 0);
this.panColumns.Name = "panColumns";
this.panColumns.RowCount = 1;
this.panColumns.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.panColumns.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.panColumns.Size = new System.Drawing.Size(1061, 39);
this.panColumns.TabIndex = 1;
//
// panHeadLeft
//
this.panHeadLeft.Dock = System.Windows.Forms.DockStyle.Left;
this.panHeadLeft.Location = new System.Drawing.Point(0, 0);
this.panHeadLeft.Name = "panHeadLeft";
this.panHeadLeft.Size = new System.Drawing.Size(0, 39);
this.panHeadLeft.TabIndex = 2;
//
// panRow
//
this.panRow.AutoScroll = true;
this.panRow.Dock = System.Windows.Forms.DockStyle.Fill;
this.panRow.Location = new System.Drawing.Point(0, 40);
this.panRow.Name = "panRow";
this.panRow.Size = new System.Drawing.Size(317, 225);
this.panRow.TabIndex = 1;
this.panRow.Scroll += new System.Windows.Forms.ScrollEventHandler(this.panRow_Scroll);
//
// ucSplitLine_H1
//
this.ucSplitLine_H1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(232)))), ((int)(((byte)(232)))));
this.ucSplitLine_H1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.ucSplitLine_H1.Location = new System.Drawing.Point(0, 39);
this.ucSplitLine_H1.Name = "ucSplitLine_H1";
this.ucSplitLine_H1.Size = new System.Drawing.Size(1061, 1);
this.ucSplitLine_H1.TabIndex = 0;
this.ucSplitLine_H1.TabStop = false;
//
// UCDataGridView
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.White;
this.Controls.Add(this.panRow);
this.Controls.Add(this.panHead);
this.Name = "UCDataGridView";
this.Padding = new System.Windows.Forms.Padding(0, 40, 0, 0);
this.Size = new System.Drawing.Size(317, 265);
this.Scroll += new System.Windows.Forms.ScrollEventHandler(this.UCDataGridView_Scroll);
this.SizeChanged += new System.EventHandler(this.UCDataGridView_SizeChanged);
this.panHead.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The pan head
/// </summary>
private System.Windows.Forms.Panel panHead;
/// <summary>
/// The pan columns
/// </summary>
private System.Windows.Forms.TableLayoutPanel panColumns;
/// <summary>
/// The uc split line h1
/// </summary>
private UCSplitLine_H ucSplitLine_H1;
/// <summary>
/// The pan head left
/// </summary>
private System.Windows.Forms.Panel panHeadLeft;
private System.Windows.Forms.FlowLayoutPanel panRow;
}
}
@@ -0,0 +1,816 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="UCDataGridView.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using JinYuan.ControlLib.UCHelper;
namespace JinYuan.ControlLib
{
/// <summary>
/// Class UCDataGridView.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
public partial class UCDataGridView : UserControl
{
#region 属性
/// <summary>
/// The m head pading left
/// </summary>
private int m_headPadingLeft = 0;
/// <summary>
/// Gets or sets the head pading left.
/// </summary>
/// <value>The head pading left.</value>
[Description("标题左侧间距"), Category("自定义")]
public int HeadPadingLeft
{
get { return m_headPadingLeft; }
set
{
m_headPadingLeft = value;
this.panHeadLeft.Width = m_headPadingLeft;
}
}
/// <summary>
/// The m head font
/// </summary>
private Font m_headFont = new Font("微软雅黑", 12F);
/// <summary>
/// 标题字体
/// </summary>
/// <value>The head font.</value>
[Description("标题字体"), Category("自定义")]
public Font HeadFont
{
get { return m_headFont; }
set { m_headFont = value; }
}
/// <summary>
/// The m head text color
/// </summary>
private Color m_headTextColor = Color.Black;
/// <summary>
/// 标题字体颜色
/// </summary>
/// <value>The color of the head text.</value>
[Description("标题文字颜色"), Category("自定义")]
public Color HeadTextColor
{
get { return m_headTextColor; }
set { m_headTextColor = value; }
}
/// <summary>
/// The m is show head
/// </summary>
private bool m_isShowHead = true;
/// <summary>
/// 是否显示标题
/// </summary>
/// <value><c>true</c> if this instance is show head; otherwise, <c>false</c>.</value>
[Description("是否显示标题"), Category("自定义")]
public bool IsShowHead
{
get { return m_isShowHead; }
set
{
if (m_isShowHead != value)
{
m_isShowHead = value;
panHead.Visible = value;
if (value)
{
this.panRow.Location = new Point(0, panHead.Height);
this.panRow.Height = this.panRow.Height - panHead.Height;
}
else
{
this.panRow.Location = new Point(0, 0);
this.panRow.Height = this.panRow.Height + panHead.Height;
}
}
}
}
/// <summary>
/// The m head height
/// </summary>
private int m_headHeight = 40;
/// <summary>
/// 标题高度
/// </summary>
/// <value>The height of the head.</value>
[Description("标题高度"), Category("自定义")]
public int HeadHeight
{
get { return m_headHeight; }
set
{
m_headHeight = value;
panHead.Height = value;
this.Padding = new Padding(0, value, 0, 0);
}
}
/// <summary>
/// The m is show CheckBox
/// </summary>
private bool m_isShowCheckBox = false;
/// <summary>
/// 是否显示复选框
/// </summary>
/// <value><c>true</c> if this instance is show CheckBox; otherwise, <c>false</c>.</value>
[Description("是否显示选择框"), Category("自定义")]
public bool IsShowCheckBox
{
get { return m_isShowCheckBox; }
set
{
if (value != m_isShowCheckBox)
{
m_isShowCheckBox = value;
LoadColumns();
}
}
}
/// <summary>
/// The m row height
/// </summary>
private int m_rowHeight = 40;
/// <summary>
/// 行高
/// </summary>
/// <value>The height of the row.</value>
[Description("数据行高"), Category("自定义")]
public int RowHeight
{
get { return m_rowHeight; }
set { m_rowHeight = value; }
}
/// <summary>
/// Gets the show count.
/// </summary>
/// <value>The show count.</value>
[Description("当前高度可显示行个数"), Category("自定义")]
public int ShowCount
{
get
{
return this.panRow.Height / (m_rowHeight);
}
}
/// <summary>
/// The m columns
/// </summary>
private List<DataGridViewColumnEntity> m_columns = null;
/// <summary>
/// 列
/// </summary>
/// <value>The columns.</value>
[Description("列"), Category("自定义")]
public List<DataGridViewColumnEntity> Columns
{
get { return m_columns; }
set
{
m_columns = value;
LoadColumns();
}
}
/// <summary>
/// The m data source
/// </summary>
private object m_dataSource = null;
/// <summary>
/// 数据源,支持列表或table,如果使用翻页控件,请使用翻页控件的DataSource
/// </summary>
/// <value>The data source.</value>
/// <exception cref="Exception">数据源不是有效的数据类型,请使用Datatable或列表</exception>
/// <exception cref="System.Exception">数据源不是有效的数据类型,请使用Datatable或列表</exception>
[Description("数据源,支持列表或table,如果使用翻页控件,请使用翻页控件的DataSource"), Category("自定义")]
public object DataSource
{
get { return m_dataSource; }
set
{
if (value != null)
{
if (!(value is DataTable) && (!typeof(IList).IsAssignableFrom(value.GetType())))
{
throw new Exception("数据源不是有效的数据类型,请使用Datatable或列表");
}
}
m_dataSource = value;
if (m_columns != null && m_columns.Count > 0)
{
ReloadSource();
}
if (BindingSourceEvent != null)
{
BindingSourceEvent(this, null);
}
}
}
/// <summary>
/// Gets the rows.
/// </summary>
/// <value>The rows.</value>
public List<IDataGridViewRow> Rows { get; private set; }
/// <summary>
/// The m row type
/// </summary>
private Type m_rowType = typeof(UCDataGridViewRow);
/// <summary>
/// 行元素类型,默认UCDataGridViewItem
/// </summary>
/// <value>The type of the row.</value>
/// <exception cref="Exception">行控件没有实现IDataGridViewRow接口</exception>
/// <exception cref="System.Exception">行控件没有实现IDataGridViewRow接口</exception>
[Description("行控件类型,默认UCDataGridViewRow,如果不满足请自定义行控件实现接口IDataGridViewRow"), Category("自定义")]
public Type RowType
{
get { return m_rowType; }
set
{
if (value == null)
return;
if (!typeof(IDataGridViewRow).IsAssignableFrom(value) || !value.IsSubclassOf(typeof(Control)))
throw new Exception("行控件没有实现IDataGridViewRow接口");
m_rowType = value;
if (m_columns != null && m_columns.Count > 0)
ReloadSource();
}
}
/// <summary>
/// The m select row
/// </summary>
IDataGridViewRow m_selectRow = null;
/// <summary>
/// 选中的节点
/// </summary>
/// <value>The select row.</value>
[Description("选中行"), Category("自定义")]
public IDataGridViewRow SelectRow
{
get { return m_selectRow; }
private set { m_selectRow = value; }
}
/// <summary>
/// 选中的行,如果显示CheckBox,则以CheckBox选中为准
/// </summary>
/// <value>The select rows.</value>
[Description("选中的行,如果显示CheckBox,则以CheckBox选中为准"), Category("自定义")]
public List<IDataGridViewRow> SelectRows
{
get
{
return GetSelectRows();
}
}
/// <summary>
/// Gets the select rows.
/// </summary>
/// <returns>List&lt;IDataGridViewRow&gt;.</returns>
private List<IDataGridViewRow> GetSelectRows()
{
List<IDataGridViewRow> lst = new List<IDataGridViewRow>();
if (m_isShowCheckBox)
{
if (Rows != null && Rows.Count > 0)
lst.AddRange(Rows.FindAll(p => p.IsChecked));
}
else
{
if (m_selectRow != null)
lst.AddRange(new List<IDataGridViewRow>() { m_selectRow });
}
if (Rows != null && Rows.Count > 0 && m_rowType == typeof(UCDataGridViewTreeRow))
{
foreach (UCDataGridViewTreeRow row in Rows)
{
lst.AddRange(FindTreeRowSelected(row));
}
}
return lst;
}
private List<IDataGridViewRow> FindTreeRowSelected(UCDataGridViewTreeRow row)
{
List<IDataGridViewRow> lst = new List<IDataGridViewRow>();
var _lst = row.ChildrenRows.FindAll(p => p.IsChecked);
lst.AddRange(_lst);
foreach (UCDataGridViewTreeRow _row in row.ChildrenRows)
{
lst.AddRange(FindTreeRowSelected(_row));
}
return lst;
}
/// <summary>
/// Finds the child grid.
/// </summary>
/// <param name="c">The c.</param>
/// <returns>UCDataGridView.</returns>
private UCDataGridView FindChildGrid(Control c)
{
foreach (Control item in c.Controls)
{
if (item is UCDataGridView)
return item as UCDataGridView;
else if (item.Controls.Count > 0)
{
var grid = FindChildGrid(item);
if (grid != null)
return grid;
}
}
return null;
}
[Bindable(false)]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[EditorBrowsable(EditorBrowsableState.Never)]
public override bool AutoScroll
{
get
{
return base.AutoScroll;
}
set
{
base.AutoScroll = value;
}
}
#region 事件
/// <summary>
/// The head CheckBox change event
/// </summary>
[Description("选中标题选择框事件"), Category("自定义")]
public EventHandler HeadCheckBoxChangeEvent;
/// <summary>
/// The head column click event
/// </summary>
[Description("标题点击事件"), Category("自定义")]
public EventHandler HeadColumnClickEvent;
/// <summary>
/// Occurs when [item click].
/// </summary>
[Description("项点击事件"), Category("自定义")]
public event DataGridViewEventHandler ItemClick;
/// <summary>
/// Occurs when [source changed].
/// </summary>
[Description("行数据源改变事件"), Category("自定义")]
public event DataGridViewEventHandler RowSourceChangedEvent;
/// <summary>
/// Occurs when [row custom event].
/// </summary>
[Description("预留的自定义的事件,比如你需要在行上放置删改等按钮时,可以通过此事件传递出来"), Category("自定义")]
public event DataGridViewRowCustomEventHandler RowCustomEvent;
[Description("绑定数据源后事件"), Category("自定义")]
public event EventHandler BindingSourceEvent;
#endregion
#endregion
/// <summary>
/// Initializes a new instance of the <see cref="UCDataGridView" /> class.
/// </summary>
public UCDataGridView()
{
InitializeComponent();
}
#region 私有方法
#region 加载column
/// <summary>
/// 功能描述:加载column
/// 作  者:HZH
/// 创建日期:2019-08-08 17:51:50
/// 任务编号:POS
/// </summary>
private void LoadColumns()
{
try
{
if (DesignMode)
{ return; }
ControlHelper.FreezeControl(this.panHead, true);
this.panRow.Controls.Clear();
this.panColumns.Controls.Clear();
this.panColumns.ColumnStyles.Clear();
if (m_columns != null && m_columns.Count() > 0)
{
int _width = 0;
m_columns.ForEach(p =>
{
if (p.WidthType == SizeType.Absolute)
{
_width += p.Width;
}
else if (p.WidthType == SizeType.Percent)
{
_width += (int)((p.Width / 100f) * this.Width);
}
});
if (m_isShowCheckBox)
_width += 30;
if (_width > this.Width)
{
//this.panRow.Width = _width;
this.panHead.Width = _width;
}
else
{
if (m_columns.Any(p => p.WidthType == SizeType.AutoSize))
{
//this.panRow.Width = this.Width;
this.panHead.Width = this.Width;
}
else
{
//this.panRow.Width = _width;
this.panHead.Width = _width;
}
}
m_columns.FindAll(p => p.WidthType == SizeType.Absolute);
m_columns.FindAll(p => p.WidthType == SizeType.Percent);
int intColumnsCount = m_columns.Count();
if (m_isShowCheckBox)
{
intColumnsCount++;
}
this.panColumns.ColumnCount = intColumnsCount;
for (int i = 0; i < intColumnsCount; i++)
{
Control c = null;
if (i == 0 && m_isShowCheckBox)
{
this.panColumns.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(SizeType.Absolute, 30F));
UCCheckBox box = new UCCheckBox();
box.TextValue = "";
box.Size = new Size(30, 30);
box.CheckedChangeEvent += (a, b) =>
{
Rows.ForEach(p => p.IsChecked = box.Checked);
if (HeadCheckBoxChangeEvent != null)
{
HeadCheckBoxChangeEvent(a, b);
}
};
c = box;
}
else
{
var item = m_columns[i - (m_isShowCheckBox ? 1 : 0)];
this.panColumns.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(item.WidthType, item.Width));
Label lbl = new Label();
lbl.Name = "dgvColumns_" + i;
lbl.Text = item.HeadText;
lbl.Font = m_headFont;
lbl.ForeColor = m_headTextColor;
lbl.TextAlign = ContentAlignment.MiddleCenter;
lbl.AutoSize = false;
lbl.Dock = DockStyle.Fill;
lbl.MouseDown += (a, b) =>
{
if (HeadColumnClickEvent != null)
{
HeadColumnClickEvent(a, b);
}
};
c = lbl;
}
this.panColumns.Controls.Add(c, i, 0);
}
}
}
finally
{
ControlHelper.FreezeControl(this.panHead, false);
}
}
#endregion
#endregion
#region 公共函数
/// <summary>
/// 刷新数据
/// </summary>
public void ReloadSource()
{
if (DesignMode)
{ return; }
try
{
ControlHelper.FreezeControl(this, true);
panHead.Location = new Point(0, 0);
Rows = new List<IDataGridViewRow>();
if (m_columns == null || m_columns.Count <= 0)
return;
if (m_dataSource != null)
{
int intIndex = 0;
int intSourceCount = 0;
if (m_dataSource is DataTable)
{
intSourceCount = (m_dataSource as DataTable).Rows.Count;
}
else if (typeof(IList).IsAssignableFrom(m_dataSource.GetType()))
{
intSourceCount = (m_dataSource as IList).Count;
}
foreach (Control item in this.panRow.Controls)
{
if (intIndex >= intSourceCount)
{
item.Visible = false;
}
else
{
var row = (item as IDataGridViewRow);
row.IsShowCheckBox = m_isShowCheckBox;
if (m_dataSource is DataTable)
{
row.DataSource = (m_dataSource as DataTable).Rows[intIndex];
}
else
{
row.DataSource = (m_dataSource as IList)[intIndex];
}
row.BindingCellData();
if (row.RowHeight != m_rowHeight)
row.RowHeight = m_rowHeight;
item.Visible = true;
item.Width = panHead.Width;
Rows.Add(row);
row.RowIndex = Rows.IndexOf(row);
}
intIndex++;
}
if (intIndex < intSourceCount)
{
for (int i = intIndex; i < intSourceCount; i++)
{
IDataGridViewRow row = (IDataGridViewRow)Activator.CreateInstance(m_rowType);
if (m_dataSource is DataTable)
{
row.DataSource = (m_dataSource as DataTable).Rows[i];
}
else
{
row.DataSource = (m_dataSource as IList)[i];
}
row.Columns = m_columns;
List<Control> lstCells = new List<Control>();
row.IsShowCheckBox = m_isShowCheckBox;
row.ReloadCells();
row.BindingCellData();
Control rowControl = (row as Control);
rowControl.Width = panHead.Width;
row.RowHeight = m_rowHeight;
row.CellClick += (a, b) => { this.FindForm().ActiveControl = this; rowControl.Focus(); SetSelectRow(rowControl, b); };
row.CheckBoxChangeEvent += (a, b) => { SetSelectRow(rowControl, b); };
row.RowCustomEvent += (a, b) => { if (RowCustomEvent != null) { RowCustomEvent(a, b); } };
row.SourceChanged += RowSourceChanged;
Rows.Add(row);
row.RowIndex = Rows.IndexOf(row);
this.panRow.Controls.Add(rowControl);
}
}
//this.panRow.Height = intSourceCount * RowHeight;
}
else
{
foreach (Control item in this.panRow.Controls)
{
item.Visible = false;
}
}
}
finally
{
ControlHelper.FreezeControl(this, false);
}
}
/// <summary>
/// 快捷键
/// </summary>
/// <param name="msg">通过引用传递的 <see cref="T:System.Windows.Forms.Message" />,它表示要处理的窗口消息。</param>
/// <param name="keyData"><see cref="T:System.Windows.Forms.Keys" /> 值之一,它表示要处理的键。</param>
/// <returns>如果字符已由控件处理,则为 true;否则为 false。</returns>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Up)
{
Previous();
}
else if (keyData == Keys.Down)
{
Next();
}
else if (keyData == Keys.Home)
{
First();
}
else if (keyData == Keys.End)
{
End();
}
return base.ProcessCmdKey(ref msg, keyData);
}
/// <summary>
/// 选中第一个
/// </summary>
public void First()
{
if (Rows == null || Rows.Count <= 0)
return;
Control c = null;
c = (Rows[0] as Control);
SetSelectRow(c, new DataGridViewEventArgs() { RowIndex = 0 });
}
/// <summary>
/// 选中上一个
/// </summary>
public void Previous()
{
if (Rows == null || Rows.Count <= 0)
return;
Control c = null;
int index = Rows.IndexOf(m_selectRow);
if (index - 1 >= 0)
{
c = (Rows[index - 1] as Control);
SetSelectRow(c, new DataGridViewEventArgs() { RowIndex = index - 1 });
}
}
/// <summary>
/// 选中下一个
/// </summary>
public void Next()
{
if (Rows == null || Rows.Count <= 0)
return;
Control c = null;
int index = Rows.IndexOf(m_selectRow);
if (index + 1 < Rows.Count)
{
c = (Rows[index + 1] as Control);
SetSelectRow(c, new DataGridViewEventArgs() { RowIndex = index + 1 });
}
}
/// <summary>
/// 选中最后一个
/// </summary>
public void End()
{
if (Rows == null || Rows.Count <= 0)
return;
Control c = null;
c = (Rows[Rows.Count - 1] as Control);
SetSelectRow(c, new DataGridViewEventArgs() { RowIndex = Rows.Count - 1 });
}
#endregion
#region 事件
/// <summary>
/// Rows the source changed.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="DataGridViewEventArgs" /> instance containing the event data.</param>
void RowSourceChanged(object sender, DataGridViewEventArgs e)
{
if (RowSourceChangedEvent != null)
RowSourceChangedEvent(sender, e);
}
/// <summary>
/// Sets the select row.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="e">The <see cref="DataGridViewEventArgs" /> instance containing the event data.</param>
private void SetSelectRow(Control item, DataGridViewEventArgs e)
{
try
{
ControlHelper.FreezeControl(this, true);
if (item == null)
return;
if (item.Visible == false)
return;
this.FindForm().ActiveControl = this;
this.FindForm().ActiveControl = item;
if (m_selectRow != item)
{
if (m_selectRow != null)
{
m_selectRow.SetSelect(false);
}
m_selectRow = item as IDataGridViewRow;
m_selectRow.SetSelect(true);
if (this.panRow.Controls.Count > 0)
{
if (item.Location.Y < 0)
{
this.panRow.AutoScrollPosition = new Point(0, Math.Abs(this.panRow.Controls[this.panRow.Controls.Count - 1].Location.Y) + item.Location.Y);
}
else if (item.Location.Y + m_rowHeight > this.panRow.Height)
{
this.panRow.AutoScrollPosition = new Point(0, Math.Abs(this.panRow.AutoScrollPosition.Y) + item.Location.Y - this.panRow.Height + m_rowHeight);
}
}
}
if (ItemClick != null)
{
ItemClick(item, e);
}
}
finally
{
ControlHelper.FreezeControl(this, false);
}
}
#endregion
private void UCDataGridView_SizeChanged(object sender, EventArgs e)
{
//LoadColumns();
//ReloadSource();
}
private void UCDataGridView_Scroll(object sender, ScrollEventArgs e)
{
//if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
//{
// panHead.Location = new Point(0, this.VerticalScroll.Value + this.panRow.Location.Y - panHead.Height - 2);
//}
}
private void panRow_Scroll(object sender, ScrollEventArgs e)
{
if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll && this.panRow.Controls.Count > 0)
{
Console.WriteLine(this.panRow.HorizontalScroll.Value);
Console.WriteLine(this.panRow.Controls[0].Location.X);
panHead.Location = new Point(this.panRow.HorizontalScroll.Value * -1, 0);
}
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,102 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="UCDataGridViewRow.Designer.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
namespace JinYuan.ControlLib
{
/// <summary>
/// Class UCDataGridViewRow.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
partial class UCDataGridViewRow
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.ucSplitLine_H1 = new JinYuan.ControlLib.UCSplitLine_H();
this.panCells = new System.Windows.Forms.TableLayoutPanel();
this.SuspendLayout();
//
// ucSplitLine_H1
//
this.ucSplitLine_H1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(232)))), ((int)(((byte)(232)))));
this.ucSplitLine_H1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.ucSplitLine_H1.Location = new System.Drawing.Point(0, 55);
this.ucSplitLine_H1.Name = "ucSplitLine_H1";
this.ucSplitLine_H1.Size = new System.Drawing.Size(661, 1);
this.ucSplitLine_H1.TabIndex = 0;
this.ucSplitLine_H1.TabStop = false;
//
// panCells
//
this.panCells.ColumnCount = 1;
this.panCells.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.panCells.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.panCells.Dock = System.Windows.Forms.DockStyle.Fill;
this.panCells.Location = new System.Drawing.Point(0, 0);
this.panCells.Name = "panCells";
this.panCells.RowCount = 1;
this.panCells.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.panCells.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.panCells.Size = new System.Drawing.Size(661, 55);
this.panCells.TabIndex = 1;
//
// UCDataGridViewItem
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.White;
this.Controls.Add(this.panCells);
this.Controls.Add(this.ucSplitLine_H1);
this.Name = "UCDataGridViewItem";
this.Size = new System.Drawing.Size(661, 56);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The uc split line h1
/// </summary>
private UCSplitLine_H ucSplitLine_H1;
/// <summary>
/// The pan cells
/// </summary>
private System.Windows.Forms.TableLayoutPanel panCells;
}
}
@@ -0,0 +1,333 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-09-2019
//
// ***********************************************************************
// <copyright file="UCDataGridViewRow.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using JinYuan.ControlLib.UCHelper;
namespace JinYuan.ControlLib
{
/// <summary>
/// Class UCDataGridViewRow.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// Implements the <see cref="JinYuan.ControlLib.Controls.IDataGridViewRow" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
/// <seealso cref="JinYuan.ControlLib.Controls.IDataGridViewRow" />
[ToolboxItem(false)]
public partial class UCDataGridViewRow : UserControl, IDataGridViewRow
{
#region 属性
/// <summary>
/// CheckBox选中事件
/// </summary>
public event DataGridViewEventHandler CheckBoxChangeEvent;
/// <summary>
/// Occurs when [row custom event].
/// </summary>
public event DataGridViewRowCustomEventHandler RowCustomEvent;
/// <summary>
/// 点击单元格事件
/// </summary>
public event DataGridViewEventHandler CellClick;
/// <summary>
/// 数据源改变事件
/// </summary>
public event DataGridViewEventHandler SourceChanged;
/// <summary>
/// 列参数,用于创建列数和宽度
/// </summary>
/// <value>The columns.</value>
public List<DataGridViewColumnEntity> Columns
{
get;
set;
}
/// <summary>
/// 数据源
/// </summary>
/// <value>The data source.</value>
public object DataSource
{
get;
set;
}
/// <summary>
/// 行号
/// </summary>
/// <value>The Index of the row.</value>
public int RowIndex { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is show CheckBox.
/// </summary>
/// <value><c>true</c> if this instance is show CheckBox; otherwise, <c>false</c>.</value>
public bool IsShowCheckBox
{
get;
set;
}
/// <summary>
/// The m is checked
/// </summary>
private bool m_isChecked;
/// <summary>
/// 是否选中
/// </summary>
/// <value><c>true</c> if this instance is checked; otherwise, <c>false</c>.</value>
public bool IsChecked
{
get
{
return m_isChecked;
}
set
{
if (m_isChecked != value)
{
m_isChecked = value;
(this.panCells.Controls.Find("check", false)[0] as UCCheckBox).Checked = value;
}
}
}
/// <summary>
/// The m row height
/// </summary>
int m_rowHeight = 40;
/// <summary>
/// 行高
/// </summary>
/// <value>The height of the row.</value>
public int RowHeight
{
get
{
return m_rowHeight;
}
set
{
m_rowHeight = value;
this.Height = value;
}
}
#endregion
/// <summary>
/// Initializes a new instance of the <see cref="UCDataGridViewRow" /> class.
/// </summary>
public UCDataGridViewRow()
{
InitializeComponent();
}
/// <summary>
/// 绑定数据到Cell
/// </summary>
/// <returns>返回true则表示已处理过,否则将进行默认绑定(通常只针对有Text值的控件)</returns>
public void BindingCellData()
{
if (DataSource != null)
{
for (int i = 0; i < Columns.Count; i++)
{
DataGridViewColumnEntity com = Columns[i];
var cs = this.panCells.Controls.Find("lbl_" + com.DataField, false);
if (cs != null && cs.Length > 0)
{
if (DataSource is DataRow)
{
DataRow row=DataSource as DataRow;
if (com.Format != null)
{
cs[0].Text = com.Format(row[com.DataField]);
}
else
{
cs[0].Text = row[com.DataField].ToStringExt();
}
}
else
{
var pro = DataSource.GetType().GetProperty(com.DataField);
if (pro != null)
{
var value = pro.GetValue(DataSource, null);
if (com.Format != null)
{
cs[0].Text = com.Format(value);
}
else
{
cs[0].Text = value.ToStringExt();
}
}
}
}
}
}
foreach (Control item in this.panCells.Controls)
{
if (item is IDataGridViewCustomCell)
{
IDataGridViewCustomCell cell = item as IDataGridViewCustomCell;
cell.RowCustomEvent += cell_RowCustomEvent;
cell.SetBindSource(DataSource);
}
}
}
void cell_RowCustomEvent(object sender, DataGridViewRowCustomEventArgs e)
{
if (RowCustomEvent != null)
{
RowCustomEvent(sender, e);
}
}
/// <summary>
/// Handles the MouseDown event of the Item control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
void Item_MouseDown(object sender, MouseEventArgs e)
{
if (CellClick != null)
{
CellClick(this, new DataGridViewEventArgs()
{
CellControl = this,
CellIndex = (sender as Control).Tag.ToInt(),
RowIndex = this.RowIndex
});
}
}
/// <summary>
/// 设置选中状态,通常为设置颜色即可
/// </summary>
/// <param name="blnSelected">是否选中</param>
public void SetSelect(bool blnSelected)
{
if (blnSelected)
{
this.BackColor = Color.FromArgb(255, 247, 245);
}
else
{
this.BackColor = Color.Transparent;
}
}
/// <summary>
/// Reloads the cells.
/// </summary>
public void ReloadCells()
{
try
{
ControlHelper.FreezeControl(this, true);
this.panCells.Controls.Clear();
this.panCells.ColumnStyles.Clear();
int intColumnsCount = Columns.Count();
if (Columns != null && intColumnsCount > 0)
{
if (IsShowCheckBox)
{
intColumnsCount++;
}
this.panCells.ColumnCount = intColumnsCount;
for (int i = 0; i < intColumnsCount; i++)
{
Control c = null;
if (i == 0 && IsShowCheckBox)
{
this.panCells.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(SizeType.Absolute, 30F));
UCCheckBox box = new UCCheckBox();
box.Name = "check";
box.TextValue = "";
box.Size = new Size(30, 30);
box.Dock = DockStyle.Fill;
box.CheckedChangeEvent += (a, b) =>
{
IsChecked = box.Checked;
if (CheckBoxChangeEvent != null)
{
CheckBoxChangeEvent(a, new DataGridViewEventArgs()
{
RowIndex = this.RowIndex,
CellControl = box,
CellIndex = 0
});
}
};
c = box;
}
else
{
var item = Columns[i - (IsShowCheckBox ? 1 : 0)];
this.panCells.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(item.WidthType, item.Width));
if (item.CustomCellType == null)
{
Label lbl = new Label();
lbl.Tag = i - (IsShowCheckBox ? 1 : 0);
lbl.Name = "lbl_" + item.DataField;
lbl.Font = new Font("微软雅黑", 12);
lbl.ForeColor = Color.Black;
lbl.AutoSize = false;
lbl.Dock = DockStyle.Fill;
lbl.TextAlign = item.TextAlign;
lbl.MouseDown += (a, b) =>
{
Item_MouseDown(a, b);
};
c = lbl;
}
else
{
Control cc = (Control)Activator.CreateInstance(item.CustomCellType);
cc.Dock = DockStyle.Fill;
c = cc;
}
}
this.panCells.Controls.Add(c, i, 0);
}
}
}
finally
{
ControlHelper.FreezeControl(this, false);
}
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,149 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-23-2019
//
// ***********************************************************************
// <copyright file="UCDataGridViewTreeRow.Designer.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
namespace JinYuan.ControlLib
{
/// <summary>
/// Class UCDataGridViewTreeRow.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
partial class UCDataGridViewTreeRow
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.panCells = new System.Windows.Forms.TableLayoutPanel();
this.panLeft = new System.Windows.Forms.Panel();
this.panMain = new System.Windows.Forms.Panel();
this.ucSplitLine_H1 = new JinYuan.ControlLib.UCSplitLine_H();
this.ucSplitLine_V1 = new JinYuan.ControlLib.UCSplitLine_V();
this.panMain.SuspendLayout();
this.SuspendLayout();
//
// panCells
//
this.panCells.ColumnCount = 1;
this.panCells.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.panCells.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.panCells.Dock = System.Windows.Forms.DockStyle.Fill;
this.panCells.Location = new System.Drawing.Point(24, 0);
this.panCells.Name = "panCells";
this.panCells.RowCount = 1;
this.panCells.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.panCells.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 55F));
this.panCells.Size = new System.Drawing.Size(636, 64);
this.panCells.TabIndex = 2;
//
// panLeft
//
this.panLeft.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.panLeft.Dock = System.Windows.Forms.DockStyle.Left;
this.panLeft.Location = new System.Drawing.Point(0, 0);
this.panLeft.Name = "panLeft";
this.panLeft.Size = new System.Drawing.Size(24, 64);
this.panLeft.TabIndex = 0;
this.panLeft.Tag = "0";
this.panLeft.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panLeft_MouseDown);
//
// panMain
//
this.panMain.Controls.Add(this.panCells);
this.panMain.Controls.Add(this.panLeft);
this.panMain.Dock = System.Windows.Forms.DockStyle.Fill;
this.panMain.Location = new System.Drawing.Point(1, 0);
this.panMain.Name = "panMain";
this.panMain.Size = new System.Drawing.Size(660, 64);
this.panMain.TabIndex = 0;
//
// ucSplitLine_H1
//
this.ucSplitLine_H1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(232)))), ((int)(((byte)(232)))));
this.ucSplitLine_H1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.ucSplitLine_H1.Location = new System.Drawing.Point(1, 64);
this.ucSplitLine_H1.Name = "ucSplitLine_H1";
this.ucSplitLine_H1.Size = new System.Drawing.Size(660, 1);
this.ucSplitLine_H1.TabIndex = 1;
this.ucSplitLine_H1.TabStop = false;
//
// ucSplitLine_V1
//
this.ucSplitLine_V1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(232)))), ((int)(((byte)(232)))));
this.ucSplitLine_V1.Dock = System.Windows.Forms.DockStyle.Left;
this.ucSplitLine_V1.Location = new System.Drawing.Point(0, 0);
this.ucSplitLine_V1.Name = "ucSplitLine_V1";
this.ucSplitLine_V1.Size = new System.Drawing.Size(1, 65);
this.ucSplitLine_V1.TabIndex = 0;
this.ucSplitLine_V1.TabStop = false;
this.ucSplitLine_V1.Visible = false;
//
// UCDataGridViewTreeRow
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.White;
this.Controls.Add(this.panMain);
this.Controls.Add(this.ucSplitLine_H1);
this.Controls.Add(this.ucSplitLine_V1);
this.Name = "UCDataGridViewTreeRow";
this.Size = new System.Drawing.Size(661, 65);
this.panMain.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The pan cells
/// </summary>
private System.Windows.Forms.TableLayoutPanel panCells;
/// <summary>
/// The uc split line h1
/// </summary>
private UCSplitLine_H ucSplitLine_H1;
/// <summary>
/// The pan left
/// </summary>
private System.Windows.Forms.Panel panLeft;
/// <summary>
/// The pan main
/// </summary>
private System.Windows.Forms.Panel panMain;
private UCSplitLine_V ucSplitLine_V1;
}
}
@@ -0,0 +1,476 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-23-2019
//
// ***********************************************************************
// <copyright file="UCDataGridViewTreeRow.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using JinYuan.ControlLib.UCHelper;
namespace JinYuan.ControlLib
{
/// <summary>
/// Class UCDataGridViewTreeRow.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// Implements the <see cref="JinYuan.ControlLib.Controls.IDataGridViewRow" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
/// <seealso cref="JinYuan.ControlLib.Controls.IDataGridViewRow" />
[ToolboxItem(false)]
public partial class UCDataGridViewTreeRow : UserControl, IDataGridViewRow
{
#region 属性
/// <summary>
/// CheckBox选中事件
/// </summary>
public event DataGridViewEventHandler CheckBoxChangeEvent;
/// <summary>
/// 点击单元格事件
/// </summary>
public event DataGridViewEventHandler CellClick;
/// <summary>
/// 数据源改变事件
/// </summary>
public event DataGridViewEventHandler SourceChanged;
/// <summary>
/// Occurs when [row custom event].
/// </summary>
public event DataGridViewRowCustomEventHandler RowCustomEvent;
/// <summary>
/// 列参数,用于创建列数和宽度
/// </summary>
/// <value>The columns.</value>
public List<DataGridViewColumnEntity> Columns
{
get;
set;
}
/// <summary>
/// 数据源
/// </summary>
/// <value>The data source.</value>
public object DataSource
{
get;
set;
}
private int rowLevel = 0;
/// <summary>
/// 折叠的第几层,用于缩进
/// </summary>
public int RowLevel
{
get { return rowLevel; }
set
{
rowLevel = value;
this.Padding = new Padding(this.panLeft.Width / 2 * value, this.Padding.Top, this.panLeft.Right, this.Padding.Bottom);
this.ucSplitLine_V1.Visible = value > 0;
}
}
/// <summary>
/// 行号,树状图目前没有给予行号
/// </summary>
/// <value>The Index of the row.</value>
public int RowIndex { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is show CheckBox.
/// </summary>
/// <value><c>true</c> if this instance is show CheckBox; otherwise, <c>false</c>.</value>
public bool IsShowCheckBox
{
get;
set;
}
/// <summary>
/// The m is checked
/// </summary>
private bool m_isChecked;
/// <summary>
/// 是否选中
/// </summary>
/// <value><c>true</c> if this instance is checked; otherwise, <c>false</c>.</value>
public bool IsChecked
{
get
{
return m_isChecked;
}
set
{
if (m_isChecked != value)
{
m_isChecked = value;
(this.panCells.Controls.Find("check", false)[0] as UCCheckBox).Checked = value;
}
}
}
/// <summary>
/// The m row height
/// </summary>
int m_rowHeight = 40;
/// <summary>
/// 行高
/// </summary>
/// <value>The height of the row.</value>
public int RowHeight
{
get
{
return m_rowHeight;
}
set
{
m_rowHeight = value;
this.Height = value;
}
}
private List<UCDataGridViewTreeRow> childrenRows = new List<UCDataGridViewTreeRow>();
public List<UCDataGridViewTreeRow> ChildrenRows
{
get { return childrenRows; }
set { childrenRows = value; }
}
private bool? isOpened = false;
/// <summary>
/// 是否打开状态
/// </summary>
public bool? IsOpened
{
get { return isOpened; }
set
{
isOpened = value;
if (value.HasValue)
{
panLeft.Enabled = true;
if (value.Value)
{
panLeft.BackgroundImage = Properties.Resources.caret_down;
}
else
{
panLeft.BackgroundImage = Properties.Resources.caret_right;
}
}
else
{
panLeft.BackgroundImage = null;
panLeft.Enabled = false;
}
}
}
#endregion
/// <summary>
/// Initializes a new instance of the <see cref="UCDataGridViewTreeRow" /> class.
/// </summary>
public UCDataGridViewTreeRow()
{
InitializeComponent();
}
/// <summary>
/// 绑定数据到Cell
/// </summary>
public void BindingCellData()
{
for (int i = 0; i < Columns.Count; i++)
{
DataGridViewColumnEntity com = Columns[i];
var cs = this.panCells.Controls.Find("lbl_" + com.DataField, false);
if (cs != null && cs.Length > 0)
{
var pro = DataSource.GetType().GetProperty(com.DataField);
if (pro != null)
{
var value = pro.GetValue(DataSource, null);
if (com.Format != null)
{
cs[0].Text = com.Format(value);
}
else
{
cs[0].Text = value.ToStringExt();
}
}
}
}
foreach (Control item in this.panCells.Controls)
{
if (item is IDataGridViewCustomCell)
{
IDataGridViewCustomCell cell = item as IDataGridViewCustomCell;
cell.RowCustomEvent += cell_RowCustomEvent;
cell.SetBindSource(DataSource);
}
}
IsOpened = false;
var proChildrens = DataSource.GetType().GetProperty("Childrens");
if (proChildrens != null)
{
var value = proChildrens.GetValue(DataSource, null);
if (value != null)
{
}
else
{
IsOpened = null;
}
}
else
{
IsOpened = null;
}
}
void cell_RowCustomEvent(object sender, DataGridViewRowCustomEventArgs e)
{
if (RowCustomEvent != null)
RowCustomEvent(sender, e);
}
/// <summary>
/// Handles the MouseDown event of the Item control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
void Item_MouseDown(object sender, MouseEventArgs e)
{
if (CellClick != null)
{
CellClick(this, new DataGridViewEventArgs()
{
CellControl = this,
CellIndex = (sender as Control).Tag.ToInt()
});
}
}
/// <summary>
/// 设置选中状态,通常为设置颜色即可
/// </summary>
/// <param name="blnSelected">是否选中</param>
public void SetSelect(bool blnSelected)
{
if (blnSelected)
{
this.panMain.BackColor = Color.FromArgb(255, 247, 245);
}
else
{
this.panMain.BackColor = Color.Transparent;
}
}
/// <summary>
/// 添加单元格元素,仅做添加控件操作,不做数据绑定,数据绑定使用BindingCells
/// </summary>
public void ReloadCells()
{
try
{
ControlHelper.FreezeControl(this, true);
this.panCells.Controls.Clear();
this.panCells.ColumnStyles.Clear();
int intColumnsCount = Columns.Count();
if (Columns != null && intColumnsCount > 0)
{
if (IsShowCheckBox)
{
intColumnsCount++;
}
this.panCells.ColumnCount = intColumnsCount;
bool blnFirst = true;
for (int i = 0; i < intColumnsCount; i++)
{
Control c = null;
if (i == 0 && IsShowCheckBox)
{
this.panCells.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(SizeType.Absolute, 30F));
UCCheckBox box = new UCCheckBox();
box.Name = "check";
box.TextValue = "";
box.Size = new Size(30, 30);
box.Dock = DockStyle.Fill;
box.CheckedChangeEvent += box_CheckedChangeEvent;
c = box;
}
else
{
var item = Columns[i - (IsShowCheckBox ? 1 : 0)];
var w = item.Width - (blnFirst ? (this.panLeft.Width / 2 * rowLevel) : 0);
if (w < 5)
w = 5;
this.panCells.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(item.WidthType, w));
blnFirst = false;
if (item.CustomCellType == null)
{
Label lbl = new Label();
lbl.Tag = i - (IsShowCheckBox ? 1 : 0);
lbl.Name = "lbl_" + item.DataField;
lbl.Font = new Font("微软雅黑", 12);
lbl.ForeColor = Color.Black;
lbl.AutoSize = false;
lbl.Dock = DockStyle.Fill;
lbl.TextAlign = item.TextAlign;
lbl.MouseDown += (a, b) =>
{
Item_MouseDown(a, b);
};
c = lbl;
}
else
{
Control cc = (Control)Activator.CreateInstance(item.CustomCellType);
cc.Dock = DockStyle.Fill;
c = cc;
}
}
this.panCells.Controls.Add(c, i, 0);
}
}
}
finally
{
ControlHelper.FreezeControl(this, false);
}
}
void box_CheckedChangeEvent(object sender, EventArgs e)
{
IsChecked = ((UCCheckBox)sender).Checked;
}
/// <summary>
/// Handles the MouseDown event of the panLeft control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
private void panLeft_MouseDown(object sender, MouseEventArgs e)
{
try
{
if (!IsOpened.HasValue)
return;
ControlHelper.FreezeControl(this.FindForm(), true);
if (!IsOpened.Value)
{
IsOpened = !IsOpened;
if (childrenRows.Count > 0)
{
childrenRows.ForEach(p =>
{
p.IsChecked = IsChecked;
p.Visible = true;
});
}
else
{
var proChildrens = DataSource.GetType().GetProperty("Childrens");
if (proChildrens != null)
{
var value = proChildrens.GetValue(DataSource, null);
int intSourceCount = 0;
if (value is DataTable)
{
intSourceCount = (value as DataTable).Rows.Count;
}
else if (typeof(IList).IsAssignableFrom(value.GetType()))
{
intSourceCount = (value as IList).Count;
}
for (int i = intSourceCount - 1; i >= 0; i--)
{
UCDataGridViewTreeRow row = new UCDataGridViewTreeRow();
if (value is DataTable)
{
row.DataSource = (value as DataTable).Rows[i];
}
else
{
row.DataSource = (value as IList)[i];
}
row.RowLevel = RowLevel + 1;
row.Columns = Columns;
row.IsShowCheckBox = IsShowCheckBox;
row.ReloadCells();
row.BindingCellData();
Control rowControl = (row as Control);
row.RowHeight = m_rowHeight;
rowControl.Width = this.Width;
//rowControl.Dock = DockStyle.Top;
row.CellClick += (a, b) => { CellClick(rowControl, b); };
row.CheckBoxChangeEvent += (a, b) => { CheckBoxChangeEvent(rowControl, b); };
row.RowCustomEvent += (a, b) => { if (RowCustomEvent != null) { RowCustomEvent(a, b); } };
row.SourceChanged += SourceChanged;
ChildrenRows.Add(row);
row.RowIndex = ChildrenRows.IndexOf(row);
this.Parent.Controls.Add(rowControl);
var index = this.Parent.Controls.GetChildIndex(this);
this.Parent.Controls.SetChildIndex(row, index+1);
}
}
}
}
else
{
HideChildrenRows(this);
this.Height = m_rowHeight;
}
}
finally
{
ControlHelper.FreezeControl(this.FindForm(), false);
}
}
private void HideChildrenRows(UCDataGridViewTreeRow row)
{
if (row.ChildrenRows.Count > 0)
{
foreach (var item in row.ChildrenRows)
{
HideChildrenRows(item);
item.Hide();
}
row.IsOpened = false;
}
}
}
}
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+48
View File
@@ -0,0 +1,48 @@
namespace JinYuan.ControlLib
{
partial class DialPlate
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// DialPlate
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(5)))), ((int)(((byte)(28)))), ((int)(((byte)(68)))));
this.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "DialPlate";
this.Size = new System.Drawing.Size(329, 202);
this.ResumeLayout(false);
}
#endregion
}
}
+346
View File
@@ -0,0 +1,346 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class DialPlate : UserControl
{
public DialPlate()
{
InitializeComponent();
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
stringFormat.Alignment = StringAlignment.Center;
stringFormat.LineAlignment = StringAlignment.Center;
}
private StringFormat stringFormat = new StringFormat();
#region 外环设计
private Color alarmColor=Color.FromArgb(36,184,196);
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取报警颜色")]
public Color AlarmColor
{
get { return alarmColor; }
set
{
alarmColor=value;
this.Invalidate();
}
}
private Color rightColor = Color.FromArgb(187, 187, 187);
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取圆环整体颜色")]
public Color RightColor
{
get { return rightColor; }
set
{
rightColor = value;
this.Invalidate();
}
}
private float alarmAngle = 120.0f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取报警角度")]
public float AlarmAngle
{
get { return alarmAngle; }
set
{
alarmAngle = value;
this.Invalidate();
}
}
private int outThickness = 8;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取外环宽度")]
public int OutThickness
{
get { return outThickness; }
set
{
outThickness = value;
this.Invalidate();
}
}
#endregion
#region 内环设计
private float tempScale = 0.8f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取温度环比列,默认小于1.0f")]
public float TempScale
{
get { return tempScale; }
set
{
if (value > 1.0f ) return;
tempScale = value;
this.Invalidate();
}
}
private Color tempColor = Color.FromArgb(36, 184, 196);
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取温度环颜色")]
public Color TempColor
{
get { return tempColor; }
set
{
tempColor = value;
this.Invalidate();
}
}
private float humidityScale = 0.4f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取湿度环比列,默认小于1.0f")]
public float HumidityScale
{
get { return humidityScale; }
set
{
if (value>1.0f) return;
humidityScale = value;
this.Invalidate();
}
}
private Color humidityColor = Color.FromArgb(36, 184, 196);
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取湿度环颜色")]
public Color HumidityColor
{
get { return humidityColor; }
set
{
humidityColor = value;
this.Invalidate();
}
}
private int inThickness = 16;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取内环宽度")]
public int InThickness
{
get { return inThickness; }
set
{
inThickness = value;
this.Invalidate();
}
}
#endregion
#region 刻度环设计
private float textScale=0.6f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取刻度环比列,默认小于1.0f")]
public float MyProperty
{
get { return textScale; }
set
{
if (value > 1.0f) return;
textScale =value;
this.Invalidate();
}
}
private float rangeMin = 0.0f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取刻度量程低限")]
public float RangeMin
{
get { return rangeMin; }
set
{
if (value > rangeMax) return;
rangeMin = value;
this.Invalidate();
}
}
private float rangeMax = 90.0f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取刻度量程高限")]
public float RangeMax
{
get { return rangeMax; }
set
{
if (value < rangeMin) return;
rangeMax = value;
this.Invalidate();
}
}
#endregion
#region 实时显示
private float temp = 10.0f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取温度实时值")]
public float Temp
{
get { return temp; }
set
{
if (value < rangeMin)
value=rangeMin;
if (value> rangeMax)
value = rangeMax;
temp = value;
this.Invalidate();
}
}
private float humidity = 10.0f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或获取湿度实时值")]
public float Humidity
{
get { return humidity; }
set
{
if (value < rangeMin)
value = rangeMin;
if (value > rangeMax)
value = rangeMax;
humidity = value;
this.Invalidate();
}
}
#endregion
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//获取画布并设置
Graphics g = e.Graphics;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
//异常情况处理
if (this.Width <= 20 || this.Height <= 20) return;
if (this.Height < this.Width / 2) return;
//画外环
Pen pen = new Pen(alarmColor, OutThickness);
g.DrawArc(pen,new RectangleF(10,10,this.Width-20,this.Width-20),180,alarmAngle);
pen=new Pen(rightColor, OutThickness);
g.DrawArc(pen, new RectangleF(10, 10, this.Width - 20, this.Width - 20),180+ alarmAngle, 180-alarmAngle);
//转移坐标系
g.TranslateTransform(this.Width*0.5f,this.Width*0.5f);
//旋转坐标系
g.RotateTransform(-90);
SolidBrush solidBrush;
for (int i = 0; i < 7; i++)
{
if (30*i <= alarmAngle)
{
solidBrush=new SolidBrush(alarmColor);
}
else
{
solidBrush=new SolidBrush(rightColor);
}
float x = -0.3f;
float width = 6.0f;
float height = outThickness + 4;
float y = (this.Width * 0.5f - 10 + height * 0.5f) * (-1.0f);
g.FillRectangle(solidBrush,new RectangleF(x,y,width,height));
g.RotateTransform(30);
}
//坐标系旋转回去
g.RotateTransform(-210);
g.RotateTransform(90);
////绘制刻度
float rangeAvg = ((rangeMax - rangeMin) % 6 == 0) ? Convert.ToSingle((rangeMax - rangeMin) / 6):Convert.ToSingle(((rangeMax - rangeMin) / 6).ToString("f1"));
for (int i = 0; i < 7; i++)
{
float angle = -180.0f + i * 30.0f;
float pointX = Convert.ToSingle(this.Width * textScale * 0.5f * Math.Cos(angle * Math.PI / 180.0f));
float pointY = Convert.ToSingle(this.Width * textScale * 0.5f * Math.Sin(angle * Math.PI / 180.0f));
string text = (rangeMin + rangeAvg * i).ToString();
SizeF size = g.MeasureString(text, this.Font);
RectangleF rectangle = new RectangleF(pointX - size.Width * 0.5f, pointY, size.Width, size.Height);
g.DrawString(text, this.Font, new SolidBrush(this.ForeColor), rectangle, stringFormat);
}
////绘制实际温度湿度环
//pen = new Pen(tempColor, inThickness);
//float sweepAngle = (temp - rangeMin) / (rangeMax - rangeMin) * 180.0f;
//float xx = this.Width * tempScale * 0.5f * (-1.0f);
//float yy = this.Width * tempScale * 0.5f * (-1.0f);
//g.DrawArc(pen, new RectangleF(xx, yy, this.Width * tempScale, this.Width * tempScale), 180.0f, sweepAngle);
//pen = new Pen(humidityColor, inThickness);
//sweepAngle = (humidity - rangeMin) / (rangeMax - rangeMin) * 180.0f;
//xx = this.Width * humidityScale * 0.5f * (-1.0f);
//yy = this.Width * humidityScale * 0.5f * (-1.0f);
//g.DrawArc(pen, new RectangleF(xx, yy, this.Width * humidityScale, this.Width * humidityScale), 180.0f, sweepAngle);
}
}
}
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+37
View File
@@ -0,0 +1,37 @@
namespace JinYuan.ControlLib
{
partial class FanShapedSchedule
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
}
#endregion
}
}
+94
View File
@@ -0,0 +1,94 @@
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 JinYuan.ControlLib
{
public partial class FanShapedSchedule : UserControl
{
public FanShapedSchedule()
{
InitializeComponent();
}
//最大值
private float maxValue = 100;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置最大值")]
public float MaxValue
{
get { return maxValue; }
set
{
maxValue = value;
this.Invalidate();
}
}
//实际值
private float actureValue = 60;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置实际值")]
public float ActureValue
{
get { return actureValue; }
set
{
actureValue = value;
this.Invalidate();
}
}
//文字显示值
private float PercentVal = 0;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// 获取画布
Graphics graphics = e.Graphics;
//消除锯齿
graphics.SmoothingMode = SmoothingMode.AntiAlias;
//文字显示效果
graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
//插补模式
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
//图片呈现质量
graphics.CompositingQuality = CompositingQuality.HighQuality;
// 绘制底圆
SolidBrush brush1 = new SolidBrush(Color.FromArgb(93, 107, 153));
Rectangle rectangle1 = new Rectangle(1, 1, this.Width - 2, this.Height - 2);
graphics.FillEllipse(brush1, rectangle1);
//绘制扇形
Rectangle rectangle2 = new Rectangle(1, 1, this.Width - 2, this.Height - 2);
LinearGradientBrush brush2 = new LinearGradientBrush(rectangle2, Color.Blue, Color.Red, 150.0f, true);
this.PercentVal = (ActureValue / MaxValue) * 100;
graphics.FillPie(brush2, rectangle2, -90, (ActureValue / MaxValue) * 360f);
//绘制上圆
SolidBrush solidBrushElipse = new SolidBrush(this.BackColor);
Rectangle rectangle3 = new Rectangle(15, 15, this.Width - 30, this.Height - 30);
graphics.FillEllipse(solidBrushElipse, rectangle3);
//绘制文字
Font font = new Font("微软雅黑", 15);
PointF point = new PointF(((float)this.Width) / 2.0f - 27, ((float)this.Height) / 2.0f - 10);
graphics.DrawString(this.PercentVal.ToString("0.0") + "%", font, Brushes.Coral, point);
}
}
}
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class FlatComboBox
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+176
View File
@@ -0,0 +1,176 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class FlatComboBox : ComboBox
{
private Color borderColor = Color.Gray;
[DefaultValue(typeof(Color), "Gray")]
public Color BorderColor
{
get { return borderColor; }
set
{
if (borderColor != value)
{
borderColor = value;
Invalidate();
}
}
}
private Color buttonColor = Color.LightGray;
[DefaultValue(typeof(Color), "LightGray")]
public Color ButtonColor
{
get { return buttonColor; }
set
{
if (buttonColor != value)
{
buttonColor = value;
Invalidate();
}
}
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PAINT && DropDownStyle != ComboBoxStyle.Simple)
{
var clientRect = ClientRectangle;
var dropDownButtonWidth = SystemInformation.HorizontalScrollBarArrowWidth;
var outerBorder = new Rectangle(clientRect.Location,
new Size(clientRect.Width - 1, clientRect.Height - 1));
var innerBorder = new Rectangle(outerBorder.X + 1, outerBorder.Y + 1,
outerBorder.Width - dropDownButtonWidth - 2, outerBorder.Height - 2);
var innerInnerBorder = new Rectangle(innerBorder.X + 1, innerBorder.Y + 1,
innerBorder.Width - 2, innerBorder.Height - 2);
var dropDownRect = new Rectangle(innerBorder.Right + 1, innerBorder.Y,
dropDownButtonWidth, innerBorder.Height + 1);
if (RightToLeft == RightToLeft.Yes)
{
innerBorder.X = clientRect.Width - innerBorder.Right;
innerInnerBorder.X = clientRect.Width - innerInnerBorder.Right;
dropDownRect.X = clientRect.Width - dropDownRect.Right;
dropDownRect.Width += 1;
}
var innerBorderColor = Enabled ? BackColor : SystemColors.Control;
var outerBorderColor = Enabled ? BorderColor : SystemColors.ControlDark;
var buttonColor = Enabled ? ButtonColor : SystemColors.Control;
var middle = new Point(dropDownRect.Left + dropDownRect.Width / 2,
dropDownRect.Top + dropDownRect.Height / 2);
var arrow = new Point[]
{
new Point(middle.X - 3, middle.Y - 2),
new Point(middle.X + 4, middle.Y - 2),
new Point(middle.X, middle.Y + 2)
};
var ps = new PAINTSTRUCT();
bool shoulEndPaint = false;
IntPtr dc;
if (m.WParam == IntPtr.Zero)
{
dc = BeginPaint(Handle, ref ps);
m.WParam = dc;
shoulEndPaint = true;
}
else
{
dc = m.WParam;
}
var rgn = CreateRectRgn(innerInnerBorder.Left, innerInnerBorder.Top,
innerInnerBorder.Right, innerInnerBorder.Bottom);
SelectClipRgn(dc, rgn);
DefWndProc(ref m);
DeleteObject(rgn);
rgn = CreateRectRgn(clientRect.Left, clientRect.Top,
clientRect.Right, clientRect.Bottom);
SelectClipRgn(dc, rgn);
using (var g = Graphics.FromHdc(dc))
{
using (var b = new SolidBrush(buttonColor))
{
g.FillRectangle(b, dropDownRect);
}
using (var b = new SolidBrush(outerBorderColor))
{
g.FillPolygon(b, arrow);
}
using (var p = new Pen(innerBorderColor))
{
g.DrawRectangle(p, innerBorder);
g.DrawRectangle(p, innerInnerBorder);
}
using (var p = new Pen(outerBorderColor))
{
g.DrawRectangle(p, outerBorder);
}
}
if (shoulEndPaint)
EndPaint(Handle, ref ps);
DeleteObject(rgn);
}
else
base.WndProc(ref m);
}
private const int WM_PAINT = 0xF;
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int L, T, R, B;
}
[StructLayout(LayoutKind.Sequential)]
public struct PAINTSTRUCT
{
public IntPtr hdc;
public bool fErase;
public int rcPaint_left;
public int rcPaint_top;
public int rcPaint_right;
public int rcPaint_bottom;
public bool fRestore;
public bool fIncUpdate;
public int reserved1;
public int reserved2;
public int reserved3;
public int reserved4;
public int reserved5;
public int reserved6;
public int reserved7;
public int reserved8;
}
[DllImport("user32.dll")]
private static extern IntPtr BeginPaint(IntPtr hWnd,
[In, Out] ref PAINTSTRUCT lpPaint);
[DllImport("user32.dll")]
private static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT lpPaint);
[DllImport("gdi32.dll")]
public static extern int SelectClipRgn(IntPtr hDC, IntPtr hRgn);
[DllImport("user32.dll")]
public static extern int GetUpdateRgn(IntPtr hwnd, IntPtr hrgn, bool fErase);
public enum RegionFlags
{
ERROR = 0,
NULLREGION = 1,
SIMPLEREGION = 2,
COMPLEXREGION = 3,
}
[DllImport("gdi32.dll")]
internal static extern bool DeleteObject(IntPtr hObject);
[DllImport("gdi32.dll")]
private static extern IntPtr CreateRectRgn(int x1, int y1, int x2, int y2);
}
}
+74
View File
@@ -0,0 +1,74 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-08-2019
//
// ***********************************************************************
// <copyright file="FrmBase.Designer.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
namespace JinYuan.ControlLib.Forms
{
/// <summary>
/// Class FrmBase.
/// Implements the <see cref="System.Windows.Forms.Form" />
/// </summary>
/// <seealso cref="System.Windows.Forms.Form" />
partial class FrmBase
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmBase));
this.SuspendLayout();
//
// FrmBase
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247)))));
this.ClientSize = new System.Drawing.Size(331, 371);
this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(66)))), ((int)(((byte)(66)))), ((int)(((byte)(66)))));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.Name = "FrmBase";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "FrmBase";
this.Load += new System.EventHandler(this.FrmBase_Load);
this.ResumeLayout(false);
}
#endregion
}
}
+625
View File
@@ -0,0 +1,625 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-08-2019
//
// ***********************************************************************
// <copyright file="FrmBase.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using JinYuan.ControlLib.UCHelper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace JinYuan.ControlLib.Forms
{
/// <summary>
/// Class FrmBase.
/// Implements the <see cref="System.Windows.Forms.Form" />
/// </summary>
/// <seealso cref="System.Windows.Forms.Form" />
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(System.ComponentModel.Design.IDesigner))]
public partial class FrmBase : Form
{
/// <summary>
/// Gets or sets the hot keys.
/// </summary>
/// <value>The hot keys.</value>
[Description("定义的热键列表"), Category("自定义")]
public Dictionary<int, string> HotKeys { get; set; }
/// <summary>
/// Delegate HotKeyEventHandler
/// </summary>
/// <param name="strHotKey">The string hot key.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
public delegate bool HotKeyEventHandler(string strHotKey);
/// <summary>
/// 热键事件
/// </summary>
[Description("热键事件"), Category("自定义")]
public event HotKeyEventHandler HotKeyDown;
#region 字段属性
/// <summary>
/// 失去焦点关闭
/// </summary>
bool _isLoseFocusClose = false;
/// <summary>
/// 是否重绘边框样式
/// </summary>
private bool _redraw = false;
/// <summary>
/// 是否显示圆角
/// </summary>
private bool _isShowRegion = false;
/// <summary>
/// 边圆角大小
/// </summary>
private int _regionRadius = 10;
/// <summary>
/// 边框颜色
/// </summary>
private Color _borderStyleColor;
/// <summary>
/// 边框宽度
/// </summary>
private int _borderStyleSize;
/// <summary>
/// 边框样式
/// </summary>
private ButtonBorderStyle _borderStyleType;
/// <summary>
/// 是否显示模态
/// </summary>
private bool _isShowMaskDialog = false;
/// <summary>
/// 蒙版窗体
/// </summary>
/// <value><c>true</c> if this instance is show mask dialog; otherwise, <c>false</c>.</value>
[Description("是否显示蒙版窗体")]
public bool IsShowMaskDialog
{
get
{
return this._isShowMaskDialog;
}
set
{
this._isShowMaskDialog = value;
}
}
/// <summary>
/// 边框宽度
/// </summary>
/// <value>The size of the border style.</value>
[Description("边框宽度")]
public int BorderStyleSize
{
get
{
return this._borderStyleSize;
}
set
{
this._borderStyleSize = value;
}
}
/// <summary>
/// 边框颜色
/// </summary>
/// <value>The color of the border style.</value>
[Description("边框颜色")]
public Color BorderStyleColor
{
get
{
return this._borderStyleColor;
}
set
{
this._borderStyleColor = value;
}
}
/// <summary>
/// 边框样式
/// </summary>
/// <value>The type of the border style.</value>
[Description("边框样式")]
public ButtonBorderStyle BorderStyleType
{
get
{
return this._borderStyleType;
}
set
{
this._borderStyleType = value;
}
}
/// <summary>
/// 边框圆角
/// </summary>
/// <value>The region radius.</value>
[Description("边框圆角")]
public int RegionRadius
{
get
{
return this._regionRadius;
}
set
{
this._regionRadius = Math.Max(value, 1);
}
}
/// <summary>
/// 是否显示自定义绘制内容
/// </summary>
/// <value><c>true</c> if this instance is show region; otherwise, <c>false</c>.</value>
[Description("是否显示自定义绘制内容")]
public bool IsShowRegion
{
get
{
return this._isShowRegion;
}
set
{
this._isShowRegion = value;
}
}
/// <summary>
/// 是否显示重绘边框
/// </summary>
/// <value><c>true</c> if redraw; otherwise, <c>false</c>.</value>
[Description("是否显示重绘边框")]
public bool Redraw
{
get
{
return this._redraw;
}
set
{
this._redraw = value;
}
}
/// <summary>
/// The is full size
/// </summary>
private bool _isFullSize = true;
/// <summary>
/// 是否全屏
/// </summary>
/// <value><c>true</c> if this instance is full size; otherwise, <c>false</c>.</value>
[Description("是否全屏")]
public virtual bool IsFullSize
{
get { return _isFullSize; }
set { _isFullSize = value; }
}
/// <summary>
/// 失去焦点自动关闭
/// </summary>
/// <value><c>true</c> if this instance is lose focus close; otherwise, <c>false</c>.</value>
[Description("失去焦点自动关闭")]
public bool IsLoseFocusClose
{
get
{
return this._isLoseFocusClose;
}
set
{
this._isLoseFocusClose = value;
}
}
#endregion
/// <summary>
/// Gets a value indicating whether this instance is desing mode.
/// </summary>
/// <value><c>true</c> if this instance is desing mode; otherwise, <c>false</c>.</value>
private bool IsDesingMode
{
get
{
bool ReturnFlag = false;
if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)
ReturnFlag = true;
else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv")
ReturnFlag = true;
return ReturnFlag;
}
}
#region 初始化
/// <summary>
/// Initializes a new instance of the <see cref="FrmBase" /> class.
/// </summary>
public FrmBase()
{
InitializeComponent();
base.SetStyle(ControlStyles.UserPaint, true);
base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
base.SetStyle(ControlStyles.DoubleBuffer, true);
//base.HandleCreated += new EventHandler(this.FrmBase_HandleCreated);
//base.HandleDestroyed += new EventHandler(this.FrmBase_HandleDestroyed);
this.KeyDown += FrmBase_KeyDown;
this.FormClosing += FrmBase_FormClosing;
}
/// <summary>
/// Handles the FormClosing event of the FrmBase control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="FormClosingEventArgs" /> instance containing the event data.</param>
void FrmBase_FormClosing(object sender, FormClosingEventArgs e)
{
if (_isLoseFocusClose)
{
MouseHook.OnMouseActivity -= hook_OnMouseActivity;
}
}
/// <summary>
/// Handles the Load event of the FrmBase control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
private void FrmBase_Load(object sender, EventArgs e)
{
if (!IsDesingMode)
{
if (_isFullSize)
SetFullSize();
}
if (_isLoseFocusClose)
{
MouseHook.OnMouseActivity += hook_OnMouseActivity;
}
}
#endregion
#region 方法区
/// <summary>
/// Handles the OnMouseActivity event of the hook control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
void hook_OnMouseActivity(object sender, MouseEventArgs e)
{
try
{
if (this._isLoseFocusClose && e.Clicks > 0)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left || e.Button == System.Windows.Forms.MouseButtons.Right)
{
if (!this.IsDisposed)
{
if (!this.ClientRectangle.Contains(this.PointToClient(e.Location)))
{
base.Close();
}
}
}
}
}
catch { }
}
/// <summary>
/// 全屏
/// </summary>
public void SetFullSize()
{
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
}
/// <summary>
/// Does the escape.
/// </summary>
protected virtual void DoEsc()
{
base.Close();
}
/// <summary>
/// Does the enter.
/// </summary>
protected virtual void DoEnter()
{
}
/// <summary>
/// 设置重绘区域
/// </summary>
public void SetWindowRegion()
{
GraphicsPath path = new GraphicsPath();
Rectangle rect = new Rectangle(-1, -1, base.Width + 1, base.Height);
path = this.GetRoundedRectPath(rect, this._regionRadius);
base.Region = new Region(path);
}
/// <summary>
/// 获取重绘区域
/// </summary>
/// <param name="rect">The rect.</param>
/// <param name="radius">The radius.</param>
/// <returns>GraphicsPath.</returns>
private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius)
{
Rectangle rect2 = new Rectangle(rect.Location, new Size(radius, radius));
GraphicsPath graphicsPath = new GraphicsPath();
graphicsPath.AddArc(rect2, 180f, 90f);
rect2.X = rect.Right - radius;
graphicsPath.AddArc(rect2, 270f, 90f);
rect2.Y = rect.Bottom - radius;
rect2.Width += 1;
rect2.Height += 1;
graphicsPath.AddArc(rect2, 360f, 90f);
rect2.X = rect.Left;
graphicsPath.AddArc(rect2, 90f, 90f);
graphicsPath.CloseFigure();
return graphicsPath;
}
/// <summary>
/// 将窗体显示为具有指定所有者的模式对话框。
/// </summary>
/// <param name="owner">任何实现 <see cref="T:System.Windows.Forms.IWin32Window" />(表示将拥有模式对话框的顶级窗口)的对象。</param>
/// <returns><see cref="T:System.Windows.Forms.DialogResult" /> 值之一。</returns>
/// <PermissionSet>
/// <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
/// <IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// </PermissionSet>
public new DialogResult ShowDialog(IWin32Window owner)
{
try
{
if (this._isShowMaskDialog && owner != null)
{
var frmOwner = (Control)owner;
FrmTransparent _frmTransparent = new FrmTransparent();
_frmTransparent.Width = frmOwner.Width;
_frmTransparent.Height = frmOwner.Height;
Point location = frmOwner.PointToScreen(new Point(0, 0));
_frmTransparent.Location = location;
_frmTransparent.frmchild = this;
_frmTransparent.IsShowMaskDialog = false;
return _frmTransparent.ShowDialog(owner);
}
else
{
return base.ShowDialog(owner);
}
}
catch (NullReferenceException)
{
return System.Windows.Forms.DialogResult.None;
}
}
/// <summary>
/// 将窗体显示为模式对话框,并将当前活动窗口设置为它的所有者。
/// </summary>
/// <returns><see cref="T:System.Windows.Forms.DialogResult" /> 值之一。</returns>
/// <PermissionSet>
/// <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
/// <IPermission class="System.Security.Permissions.UIPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// </PermissionSet>
public new DialogResult ShowDialog()
{
return base.ShowDialog();
}
#endregion
#region 事件区
/// <summary>
/// 关闭时发生
/// </summary>
/// <param name="e">一个包含事件数据的 <see cref="T:System.EventArgs" />。</param>
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
if (base.Owner != null && base.Owner is FrmTransparent)
{
(base.Owner as FrmTransparent).Close();
}
}
/// <summary>
/// 快捷键
/// </summary>
/// <param name="msg">通过引用传递的 <see cref="T:System.Windows.Forms.Message" />,它表示要处理的 Win32 消息。</param>
/// <param name="keyData"><see cref="T:System.Windows.Forms.Keys" /> 值之一,它表示要处理的键。</param>
/// <returns>如果控件处理并使用击键,则为 true;否则为 false,以允许进一步处理。</returns>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
int num = 256;
int num2 = 260;
bool result;
if (msg.Msg == num | msg.Msg == num2)
{
if (keyData == (Keys)262259)
{
result = true;
return result;
}
if (keyData != Keys.Enter)
{
if (keyData == Keys.Escape)
{
this.DoEsc();
}
}
else
{
this.DoEnter();
}
}
result = false;
if (result)
return result;
else
return base.ProcessCmdKey(ref msg, keyData);
}
/// <summary>
/// Handles the KeyDown event of the FrmBase control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="KeyEventArgs" /> instance containing the event data.</param>
protected void FrmBase_KeyDown(object sender, KeyEventArgs e)
{
if (HotKeyDown != null && HotKeys != null)
{
bool blnCtrl = false;
bool blnAlt = false;
bool blnShift = false;
if (e.Control)
blnCtrl = true;
if (e.Alt)
blnAlt = true;
if (e.Shift)
blnShift = true;
if (HotKeys.ContainsKey(e.KeyValue))
{
string strKey = string.Empty;
if (blnCtrl)
{
strKey += "Ctrl+";
}
if (blnAlt)
{
strKey += "Alt+";
}
if (blnShift)
{
strKey += "Shift+";
}
strKey += HotKeys[e.KeyValue];
if (HotKeyDown(strKey))
{
e.Handled = true;
e.SuppressKeyPress = true;
}
}
}
}
/// <summary>
/// 重绘事件
/// </summary>
/// <param name="e">包含事件数据的 <see cref="T:System.Windows.Forms.PaintEventArgs" />。</param>
protected override void OnPaint(PaintEventArgs e)
{
if (this._isShowRegion)
{
this.SetWindowRegion();
}
base.OnPaint(e);
if (this._redraw)
{
ControlPaint.DrawBorder(e.Graphics, base.ClientRectangle, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType, this._borderStyleColor, this._borderStyleSize, this._borderStyleType);
}
}
#endregion
#region 窗体拖动 English:Form drag
/// <summary>
/// Releases the capture.
/// </summary>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
/// <summary>
/// Sends the message.
/// </summary>
/// <param name="hwnd">The HWND.</param>
/// <param name="wMsg">The w MSG.</param>
/// <param name="wParam">The w parameter.</param>
/// <param name="lParam">The l parameter.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
/// <summary>
/// The wm syscommand
/// </summary>
public const int WM_SYSCOMMAND = 0x0112;
/// <summary>
/// The sc move
/// </summary>
public const int SC_MOVE = 0xF010;
/// <summary>
/// The htcaption
/// </summary>
public const int HTCAPTION = 0x0002;
/// <summary>
/// 通过Windows的API控制窗体的拖动
/// </summary>
/// <param name="hwnd">The HWND.</param>
public static void MouseDown(IntPtr hwnd)
{
ReleaseCapture();
SendMessage(hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
#endregion
/// <summary>
/// 在构造函数中调用设置窗体移动
/// </summary>
/// <param name="cs">The cs.</param>
protected void InitFormMove(params Control[] cs)
{
foreach (Control c in cs)
{
if (c != null && !c.IsDisposed)
c.MouseDown += c_MouseDown;
}
}
/// <summary>
/// Handles the MouseDown event of the c control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
void c_MouseDown(object sender, MouseEventArgs e)
{
MouseDown(this.Handle);
}
}
}
File diff suppressed because it is too large Load Diff
+73
View File
@@ -0,0 +1,73 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-08-2019
//
// ***********************************************************************
// <copyright file="FrmTransparent.Designer.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
namespace JinYuan.ControlLib.Forms
{
/// <summary>
/// Class FrmTransparent.
/// Implements the <see cref="JinYuan.ControlLib.Forms.FrmBase" />
/// </summary>
/// <seealso cref="JinYuan.ControlLib.Forms.FrmBase" />
partial class FrmTransparent
{
/// <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()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmTransparent));
this.SuspendLayout();
//
// FrmTransparent
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.Black;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FrmTransparent";
this.Opacity = 0.5D;
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "FrmTransparent";
this.Load += new System.EventHandler(this.FrmTransparent_Load);
this.ResumeLayout(false);
}
#endregion
}
}
+175
View File
@@ -0,0 +1,175 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-08-2019
//
// ***********************************************************************
// <copyright file="FrmTransparent.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace JinYuan.ControlLib.Forms
{
/// <summary>
/// Class FrmTransparent.
/// Implements the <see cref="JinYuan.ControlLib.Forms.FrmBase" />
/// </summary>
/// <seealso cref="JinYuan.ControlLib.Forms.FrmBase" />
public partial class FrmTransparent : FrmBase
{
/// <summary>
/// The wm activate
/// </summary>
private const int WM_ACTIVATE = 6;
/// <summary>
/// The wm activateapp
/// </summary>
private const int WM_ACTIVATEAPP = 28;
/// <summary>
/// The wm ncactivate
/// </summary>
private const int WM_NCACTIVATE = 134;
/// <summary>
/// The wa inactive
/// </summary>
private const int WA_INACTIVE = 0;
/// <summary>
/// The wm mouseactivate
/// </summary>
private const int WM_MOUSEACTIVATE = 33;
/// <summary>
/// The ma noactivate
/// </summary>
private const int MA_NOACTIVATE = 3;
/// <summary>
/// Gets the create parameters.
/// </summary>
/// <value>The create parameters.</value>
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
/// <summary>
/// Gets or sets the frmchild.
/// </summary>
/// <value>The frmchild.</value>
public FrmBase frmchild
{
get;
set;
}
/// <summary>
/// Initializes a new instance of the <see cref="FrmTransparent" /> class.
/// </summary>
public FrmTransparent()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.UserPaint, true);
MethodInfo method = base.GetType().GetMethod("SetStyle", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod);
method.Invoke(this, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, new object[]
{
ControlStyles.Selectable,
false
}, Application.CurrentCulture);
}
/// <summary>
/// 引发 <see cref="E:System.Windows.Forms.Form.Load" /> 事件。
/// </summary>
/// <param name="e">一个包含事件数据的 <see cref="T:System.EventArgs" />。</param>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
base.ShowInTaskbar = false;
base.ShowIcon = true;
}
/// <summary>
/// Sets the active window.
/// </summary>
/// <param name="handle">The handle.</param>
/// <returns>IntPtr.</returns>
[DllImport("user32.dll")]
private static extern IntPtr SetActiveWindow(IntPtr handle);
/// <summary>
/// WNDs the proc.
/// </summary>
/// <param name="m">要处理的 Windows <see cref="T:System.Windows.Forms.Message" />。</param>
protected override void WndProc(ref Message m)
{
if (m.Msg == 33)
{
m.Result = new IntPtr(3);
}
else
{
if (m.Msg == 134)
{
if (((int)m.WParam & 65535) != 0)
{
if (m.LParam != IntPtr.Zero)
{
FrmTransparent.SetActiveWindow(m.LParam);
}
else
{
FrmTransparent.SetActiveWindow(IntPtr.Zero);
}
}
}
else if (m.Msg == 2000)
{
}
base.WndProc(ref m);
}
}
/// <summary>
/// Handles the Load event of the FrmTransparent control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
private void FrmTransparent_Load(object sender, EventArgs e)
{
if (frmchild != null)
{
frmchild.IsShowMaskDialog = false;
var dia = frmchild.ShowDialog(this);
this.DialogResult = dia;
}
}
}
}
File diff suppressed because it is too large Load Diff
+162
View File
@@ -0,0 +1,162 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-08-2019
//
// ***********************************************************************
// <copyright file="FrmWaiting.Designer.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
namespace JinYuan.ControlLib.Forms
{
/// <summary>
/// Class FrmWaiting.
/// Implements the <see cref="JinYuan.ControlLib.Forms.FrmBase" />
/// </summary>
/// <seealso cref="JinYuan.ControlLib.Forms.FrmBase" />
partial class FrmWaiting
{
/// <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()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmWaiting));
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.label1 = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.label2 = new System.Windows.Forms.Label();
this.timer2 = new System.Windows.Forms.Timer(this.components);
this.SuspendLayout();
//
// imageList1
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.White;
this.imageList1.Images.SetKeyName(0, "0.png");
this.imageList1.Images.SetKeyName(1, "1.png");
this.imageList1.Images.SetKeyName(2, "2.png");
this.imageList1.Images.SetKeyName(3, "3.png");
this.imageList1.Images.SetKeyName(4, "4.png");
this.imageList1.Images.SetKeyName(5, "5.png");
this.imageList1.Images.SetKeyName(6, "6.png");
this.imageList1.Images.SetKeyName(7, "7.png");
this.imageList1.Images.SetKeyName(8, "8.png");
this.imageList1.Images.SetKeyName(9, "9.png");
this.imageList1.Images.SetKeyName(10, "10.png");
this.imageList1.Images.SetKeyName(11, "11.png");
this.imageList1.Images.SetKeyName(12, "12.png");
this.imageList1.Images.SetKeyName(13, "13.png");
this.imageList1.Images.SetKeyName(14, "14.png");
this.imageList1.Images.SetKeyName(15, "15.png");
this.imageList1.Images.SetKeyName(16, "16.png");
this.imageList1.Images.SetKeyName(17, "17.png");
this.imageList1.Images.SetKeyName(18, "18.png");
this.imageList1.Images.SetKeyName(19, "19.png");
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Top;
this.label1.Image = global::JinYuan.ControlLib.Properties.Resources.loading;
this.label1.Location = new System.Drawing.Point(0, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(276, 196);
this.label1.TabIndex = 0;
//
// timer1
//
this.timer1.Interval = 20;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Top;
this.label2.Font = new System.Drawing.Font("微软雅黑", 12F);
this.label2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.label2.Location = new System.Drawing.Point(0, 196);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(276, 30);
this.label2.TabIndex = 1;
this.label2.Text = "处理正在进行中,请稍候...";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// timer2
//
this.timer2.Tick += new System.EventHandler(this.timer2_Tick);
//
// FrmWaiting
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247)))));
this.ClientSize = new System.Drawing.Size(276, 244);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.IsFullSize = false;
this.Name = "FrmWaiting";
this.Opacity = 0D;
this.RegionRadius = 20;
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.Text = "";
this.TopMost = true;
this.TransparencyKey = System.Drawing.Color.FromArgb(((int)(((byte)(247)))), ((int)(((byte)(247)))), ((int)(((byte)(247)))));
this.VisibleChanged += new System.EventHandler(this.FrmWaiting_VisibleChanged);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// The image list1
/// </summary>
private System.Windows.Forms.ImageList imageList1;
/// <summary>
/// The label1
/// </summary>
private System.Windows.Forms.Label label1;
/// <summary>
/// The timer1
/// </summary>
private System.Windows.Forms.Timer timer1;
/// <summary>
/// The label2
/// </summary>
private System.Windows.Forms.Label label2;
/// <summary>
/// The timer2
/// </summary>
private System.Windows.Forms.Timer timer2;
}
}
+109
View File
@@ -0,0 +1,109 @@
// ***********************************************************************
// Assembly : JinYuan.ControlLib
// Created : 08-08-2019
//
// ***********************************************************************
// <copyright file="FrmWaiting.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHub:https://github.com/kwwwvagaa/NetWinformControl
// gitee:https://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace JinYuan.ControlLib.Forms
{
/// <summary>
/// Class FrmWaiting.
/// Implements the <see cref="JinYuan.ControlLib.Forms.FrmBase" />
/// </summary>
/// <seealso cref="JinYuan.ControlLib.Forms.FrmBase" />
public partial class FrmWaiting : FrmBase
{
/// <summary>
/// Gets or sets the MSG.
/// </summary>
/// <value>The MSG.</value>
public string Msg { get { return label2.Text; } set { label2.Text = value; } }
/// <summary>
/// Initializes a new instance of the <see cref="FrmWaiting" /> class.
/// </summary>
public FrmWaiting()
{
base.SetStyle(ControlStyles.UserPaint, true);
base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
base.SetStyle(ControlStyles.DoubleBuffer, true);
InitializeComponent();
}
/// <summary>
/// Handles the Tick event of the timer1 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
private void timer1_Tick(object sender, EventArgs e)
{
if (this.label1.ImageIndex == this.imageList1.Images.Count - 1)
this.label1.ImageIndex = 0;
else
this.label1.ImageIndex++;
}
/// <summary>
/// Handles the VisibleChanged event of the FrmWaiting control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
private void FrmWaiting_VisibleChanged(object sender, EventArgs e)
{
//this.timer1.Enabled = this.Visible;
}
/// <summary>
/// Does the escape.
/// </summary>
protected override void DoEsc()
{
}
/// <summary>
/// Handles the Tick event of the timer2 control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
private void timer2_Tick(object sender, EventArgs e)
{
base.Opacity = 1.0;
this.timer2.Enabled = false;
}
/// <summary>
/// Shows the form.
/// </summary>
/// <param name="intSleep">The int sleep.</param>
public void ShowForm(int intSleep = 1)
{
base.Opacity = 0.0;
if (intSleep <= 0)
{
intSleep = 1;
}
base.Show();
this.timer2.Interval = intSleep;
this.timer2.Enabled = true;
}
}
}
File diff suppressed because it is too large Load Diff
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class GroupBoxEX
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+46
View File
@@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class GroupBoxEX : GroupBox
{
private Color mBorderColor = Color.FromArgb(1, 146, 235);
[Browsable(true), Description("边框颜色"), Category("自定义分组")]
public Color BorderColor
{
get { return mBorderColor; }
set { mBorderColor = value; }
}
public GroupBoxEX()
{
InitializeComponent();
}
// 重写
protected override void OnPaint(PaintEventArgs e)
{
var vSize = e.Graphics.MeasureString(this.Text, this.Font);
e.Graphics.Clear(this.BackColor);
e.Graphics.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), 10, 1);
Pen vPen = new Pen(this.mBorderColor); // 用属性颜色来画边框颜色
e.Graphics.DrawLine(vPen, 1, vSize.Height / 2, 8, vSize.Height / 2);
e.Graphics.DrawLine(vPen, vSize.Width + 8, vSize.Height / 2, this.Width - 2, vSize.Height / 2);
e.Graphics.DrawLine(vPen, 1, vSize.Height / 2, 1, this.Height - 2);
e.Graphics.DrawLine(vPen, 1, this.Height - 2, this.Width - 2, this.Height - 2);
e.Graphics.DrawLine(vPen, this.Width - 2, vSize.Height / 2, this.Width - 2, this.Height - 2);
}
}
}
@@ -0,0 +1,673 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{1BB7ED33-D2CB-4CDD-AB39-F7F9AE948CA2}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>JinYuan.ControlLib</RootNamespace>
<AssemblyName>JinYuan.ControlLib</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<ItemGroup>
<Reference Include="AntdUI, Version=1.8.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\AntdUI.1.8.4\lib\net48\AntdUI.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.Drawing.Design" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
<Reference Include="WindowsFormsIntegration" />
</ItemGroup>
<ItemGroup>
<Compile Include="AlertManager.cs" />
<Compile Include="ArrTotalQty.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ArrTotalQty.Designer.cs">
<DependentUpon>ArrTotalQty.cs</DependentUpon>
</Compile>
<Compile Include="CheckBoxExt.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="CheckBoxExt.Designer.cs">
<DependentUpon>CheckBoxExt.cs</DependentUpon>
</Compile>
<Compile Include="CircleProgramBar.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="CircleProgramBar.Designer.cs">
<DependentUpon>CircleProgramBar.cs</DependentUpon>
</Compile>
<Compile Include="ControlBase.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ControlBase.Designer.cs">
<DependentUpon>ControlBase.cs</DependentUpon>
</Compile>
<Compile Include="CustomComboBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="CustomComboBox.Designer.cs">
<DependentUpon>CustomComboBox.cs</DependentUpon>
</Compile>
<Compile Include="CustomDataGridView.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="CustomGroupBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="CustomGroupBox.Designer.cs">
<DependentUpon>CustomGroupBox.cs</DependentUpon>
</Compile>
<Compile Include="CustomRichTextBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="CustomRichTextBox.Designer.cs">
<DependentUpon>CustomRichTextBox.cs</DependentUpon>
</Compile>
<Compile Include="DataGridView\DataGridViewCellEntity.cs" />
<Compile Include="DataGridView\DataGridViewCellEventArgs.cs" />
<Compile Include="DataGridView\DataGridViewCellEventHandler.cs" />
<Compile Include="DataGridView\DataGridViewColumnEntity.cs" />
<Compile Include="DataGridView\DataGridViewRowCustomEventArgs.cs" />
<Compile Include="DataGridView\IDataGridViewCustomCell.cs" />
<Compile Include="DataGridView\IDataGridViewRow.cs" />
<Compile Include="DataGridView\UCDataGridView.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="DataGridView\UCDataGridView.Designer.cs">
<DependentUpon>UCDataGridView.cs</DependentUpon>
</Compile>
<Compile Include="DataGridView\UCDataGridViewRow.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="DataGridView\UCDataGridViewRow.Designer.cs">
<DependentUpon>UCDataGridViewRow.cs</DependentUpon>
</Compile>
<Compile Include="DataGridView\UCDataGridViewTreeRow.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="DataGridView\UCDataGridViewTreeRow.Designer.cs">
<DependentUpon>UCDataGridViewTreeRow.cs</DependentUpon>
</Compile>
<Compile Include="DialPlate.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="DialPlate.Designer.cs">
<DependentUpon>DialPlate.cs</DependentUpon>
</Compile>
<Compile Include="FlatComboBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="FlatComboBox.Designer.cs">
<DependentUpon>FlatComboBox.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FrmBase.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FrmBase.Designer.cs">
<DependentUpon>FrmBase.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FrmTransparent.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FrmTransparent.Designer.cs">
<DependentUpon>FrmTransparent.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FrmWaiting.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FrmWaiting.Designer.cs">
<DependentUpon>FrmWaiting.cs</DependentUpon>
</Compile>
<Compile Include="GroupBoxEX.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="GroupBoxEX.Designer.cs">
<DependentUpon>GroupBoxEX.cs</DependentUpon>
</Compile>
<Compile Include="ListViewEx.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ListViewEx.Designer.cs">
<DependentUpon>ListViewEx.cs</DependentUpon>
</Compile>
<Compile Include="LogListBox.cs" />
<Compile Include="LogListBox.Designer.cs">
<DependentUpon>LogListBox.cs</DependentUpon>
</Compile>
<Compile Include="LongTitle.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="LongTitle.Designer.cs">
<DependentUpon>LongTitle.cs</DependentUpon>
</Compile>
<Compile Include="LongTitleStyle2.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="LongTitleStyle2.Designer.cs">
<DependentUpon>LongTitleStyle2.cs</DependentUpon>
</Compile>
<Compile Include="Models\CPKModel.cs" />
<Compile Include="SidebarNavigation.cs" />
<Compile Include="SidebarNavigation.Designer.cs">
<DependentUpon>SidebarNavigation.cs</DependentUpon>
</Compile>
<Compile Include="UCCheckBox.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCCheckBox.Designer.cs">
<DependentUpon>UCCheckBox.cs</DependentUpon>
</Compile>
<Compile Include="UCHelper\Ext.cs" />
<Compile Include="UCHelper\MouseHook.cs" />
<Compile Include="NaviButton2.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="NaviButton2.Designer.cs">
<DependentUpon>NaviButton2.cs</DependentUpon>
</Compile>
<Compile Include="NaviButton.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="NaviButton.Designer.cs">
<DependentUpon>NaviButton.cs</DependentUpon>
</Compile>
<Compile Include="NumKeyboard.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="NumKeyboard.Designer.cs">
<DependentUpon>NumKeyboard.cs</DependentUpon>
</Compile>
<Compile Include="PanelEnhanced.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="PanelEnhanced.Designer.cs">
<DependentUpon>PanelEnhanced.cs</DependentUpon>
</Compile>
<Compile Include="PanelExt.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="PanelExt.Designer.cs">
<DependentUpon>PanelExt.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="ScrollBar\ScrollbarComponent.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="ScrollBar\ScrollbarControlDesigner.cs" />
<Compile Include="ScrollBar\UCHScrollbar.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ScrollBar\UCVScrollbar.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SimpleLed.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="SimpleLed.Designer.cs">
<DependentUpon>SimpleLed.cs</DependentUpon>
</Compile>
<Compile Include="TextSet2.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="TextSet2.Designer.cs">
<DependentUpon>TextSet2.cs</DependentUpon>
</Compile>
<Compile Include="TextSet.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="TextSet.Designer.cs">
<DependentUpon>TextSet.cs</DependentUpon>
</Compile>
<Compile Include="Title.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Title.Designer.cs">
<DependentUpon>Title.cs</DependentUpon>
</Compile>
<Compile Include="FanShapedSchedule.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="FanShapedSchedule.Designer.cs">
<DependentUpon>FanShapedSchedule.cs</DependentUpon>
</Compile>
<Compile Include="ProcessEllipse.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ProcessEllipse.Designer.cs">
<DependentUpon>ProcessEllipse.cs</DependentUpon>
</Compile>
<Compile Include="TitleTime.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="TitleTime.Designer.cs">
<DependentUpon>TitleTime.cs</DependentUpon>
</Compile>
<Compile Include="Toggle.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Toggle.Designer.cs">
<DependentUpon>Toggle.cs</DependentUpon>
</Compile>
<Compile Include="TotalQty.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="TotalQty.Designer.cs">
<DependentUpon>TotalQty.cs</DependentUpon>
</Compile>
<Compile Include="CPK.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="CPK.Designer.cs">
<DependentUpon>CPK.cs</DependentUpon>
</Compile>
<Compile Include="UCBlower.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCBlower.Designer.cs">
<DependentUpon>UCBlower.cs</DependentUpon>
</Compile>
<Compile Include="UCControlBase.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCControlBase.Designer.cs">
<DependentUpon>UCControlBase.cs</DependentUpon>
</Compile>
<Compile Include="UCElectricityMeterH.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCElectricityMeterH.Designer.cs">
<DependentUpon>UCElectricityMeterH.cs</DependentUpon>
</Compile>
<Compile Include="UCElectricityMeterV.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCElectricityMeterV.Designer.cs">
<DependentUpon>UCElectricityMeterV.cs</DependentUpon>
</Compile>
<Compile Include="UCFengSu.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCFengSu.Designer.cs">
<DependentUpon>UCFengSu.cs</DependentUpon>
</Compile>
<Compile Include="UCHelper\ControlHelper.cs" />
<Compile Include="UCHelper\DpiControl.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="UCHelper\DpiHelper.cs" />
<Compile Include="UCHelper\IDpiControl.cs" />
<Compile Include="UCHelper\MainThreadAnimationControl.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="UCHelper\NativeMethods.cs" />
<Compile Include="UCHelper\PropertyOrderPair.cs" />
<Compile Include="UCHelper\WindowsHook.cs" />
<Compile Include="UCLed.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCLed.Designer.cs">
<DependentUpon>UCLed.cs</DependentUpon>
</Compile>
<Compile Include="UCLedAvatar.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCLedAvatar.Designer.cs">
<DependentUpon>UCLedAvatar.cs</DependentUpon>
</Compile>
<Compile Include="ucPanel_400_200.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ucPanel_400_200.Designer.cs">
<DependentUpon>ucPanel_400_200.cs</DependentUpon>
</Compile>
<Compile Include="ucPanel_900_450.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ucPanel_900_450.Designer.cs">
<DependentUpon>ucPanel_900_450.cs</DependentUpon>
</Compile>
<Compile Include="UCHelper\PropertyOrderAttribute.cs" />
<Compile Include="UCHelper\PropertyOrderConverter.cs" />
<Compile Include="UCRollText.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCRollText.Designer.cs">
<DependentUpon>UCRollText.cs</DependentUpon>
</Compile>
<Compile Include="UCSplitLine_H.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCSplitLine_H.Designer.cs">
<DependentUpon>UCSplitLine_H.cs</DependentUpon>
</Compile>
<Compile Include="UCSplitLine_V.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UCSplitLine_V.Designer.cs">
<DependentUpon>UCSplitLine_V.cs</DependentUpon>
</Compile>
<Compile Include="UpDownLabel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UpDownLabel.Designer.cs">
<DependentUpon>UpDownLabel.cs</DependentUpon>
</Compile>
<Compile Include="UserStateChangedEvent.cs" />
<Compile Include="UserStateMonitor.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Wave.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Wave.Designer.cs">
<DependentUpon>Wave.cs</DependentUpon>
</Compile>
<Compile Include="WaveProcess.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="WaveProcess.Designer.cs">
<DependentUpon>WaveProcess.cs</DependentUpon>
</Compile>
<Compile Include="WithBgBox.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="WithBgBox.Designer.cs">
<DependentUpon>WithBgBox.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ArrTotalQty.resx">
<DependentUpon>ArrTotalQty.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DataGridView\UCDataGridView.resx">
<DependentUpon>UCDataGridView.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DataGridView\UCDataGridViewRow.resx">
<DependentUpon>UCDataGridViewRow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DataGridView\UCDataGridViewTreeRow.resx">
<DependentUpon>UCDataGridViewTreeRow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="DialPlate.resx">
<DependentUpon>DialPlate.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FrmBase.resx">
<DependentUpon>FrmBase.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FrmTransparent.resx">
<DependentUpon>FrmTransparent.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FrmWaiting.resx">
<DependentUpon>FrmWaiting.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LongTitle.resx">
<DependentUpon>LongTitle.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LongTitleStyle2.resx">
<DependentUpon>LongTitleStyle2.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="NaviButton2.resx">
<DependentUpon>NaviButton2.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="NaviButton.resx">
<DependentUpon>NaviButton.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="NumKeyboard.resx">
<DependentUpon>NumKeyboard.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ProcessEllipse.resx">
<DependentUpon>ProcessEllipse.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="ScrollBar\UCVScrollbar.resx">
<DependentUpon>UCVScrollbar.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SidebarNavigation.resx">
<DependentUpon>SidebarNavigation.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SimpleLed.resx">
<DependentUpon>SimpleLed.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TextSet2.resx">
<DependentUpon>TextSet2.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TextSet.resx">
<DependentUpon>TextSet.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Title.resx">
<DependentUpon>Title.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TitleTime.resx">
<DependentUpon>TitleTime.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Toggle.resx">
<DependentUpon>Toggle.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="TotalQty.resx">
<DependentUpon>TotalQty.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="CPK.resx">
<DependentUpon>CPK.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UCBlower.resx">
<DependentUpon>UCBlower.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UCCheckBox.resx">
<DependentUpon>UCCheckBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UCElectricityMeterH.resx">
<DependentUpon>UCElectricityMeterH.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UCElectricityMeterV.resx">
<DependentUpon>UCElectricityMeterV.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UCFengSu.resx">
<DependentUpon>UCFengSu.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ucPanel_400_200.resx">
<DependentUpon>ucPanel_400_200.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ucPanel_900_450.resx">
<DependentUpon>ucPanel_900_450.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UCSplitLine_H.resx">
<DependentUpon>UCSplitLine_H.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UCSplitLine_V.resx">
<DependentUpon>UCSplitLine_V.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UpDownLabel.resx">
<DependentUpon>UpDownLabel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WaveProcess.resx">
<DependentUpon>WaveProcess.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WithBgBox.resx">
<DependentUpon>WithBgBox.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
<None Include="Resources\RightUnSelected.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\LeftSelected.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\LeftUnSelected.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\RightSelected.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Title.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\6.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\蓝色.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\bg2.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\标题_03.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\2bg.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\4.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\标题_03右.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\标题_04.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\开机时间.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\运行时间.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\常规按钮.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\LeftUnSelected2.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\RightUnSelected3.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\LeftSelected3.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\LeftUnSelected3.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\RightSelected3.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\TotalQty.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\数字指标.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\big_arrow_l.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\big_box.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\big_box_l.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\big_box_s.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\big_box_super.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\big_arrow.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\组 178 拷贝.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\星球地球科技蓝色转动动图压缩86.9.gif" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Green.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Red.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\61.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\JinYuan.Models\JinYuan.Models.csproj">
<Project>{4c0bcb84-5cd7-4846-8363-c4c10d46e391}</Project>
<Name>JinYuan.Models</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="Resources\loading.gif" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\caret-down.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\caret-right.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectView>ProjectFiles</ProjectView>
</PropertyGroup>
</Project>
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class ListViewEx
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+82
View File
@@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class ListViewEx : ListView
{
StringFormat sf = new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center };//字体水平位置居左,垂直居中
public ListViewEx()
{
InitializeComponent();
this.OwnerDraw = true;
}
public ListViewEx(IContainer container)
{
container.Add(this);
InitializeComponent();
}
private Brush bgColor = Brushes.DodgerBlue;
[CategoryAttribute("自定义")]
[DescriptionAttribute("背景颜色")]
public Brush BgColor
{
set
{
bgColor = value;
}
get
{
return bgColor;
}
}
private Brush fontColor = Brushes.White;
[CategoryAttribute("自定义")]
[DescriptionAttribute("字体颜色")]
public Brush FontColor
{
set
{
fontColor = value;
}
get
{
return fontColor;
}
}
protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e)
{
//e.DrawBackground();
e.Graphics.FillRectangle(BgColor, e.Bounds); //设置背景颜色
Font font = new Font("微软雅黑", 12, FontStyle.Bold); //设置字体大小
e.Graphics.DrawString(e.Header.Text, font, FontColor, e.Bounds, sf); //设置字体颜色
}
protected override void OnDrawItem(DrawListViewItemEventArgs e)
{
e.DrawDefault = true; //采用系统默认方式绘制项
}
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
{
e.DrawDefault = true; //采用系统默认方式绘制项
}
}
}
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class LogListBox
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+106
View File
@@ -0,0 +1,106 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
class LogItem
{
public String info;
public int index;
public Color color;
}
public partial class LogListBox : ListBox
{
private int m_nMaxLength = 1000;
[CategoryAttribute("自定义")]
[DescriptionAttribute("日志最大显示条数")]
public int MaxLength
{
set
{
m_nMaxLength = value;
}
get
{
return m_nMaxLength;
}
}
Dictionary<int, LogItem> m_dicItems = new Dictionary<int, LogItem>();
public LogListBox()
{
InitializeComponent();
this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
}
public LogListBox(IContainer container)
{
container.Add(this);
InitializeComponent();
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
// 确保listbox中有日志且该日志被记录在字典中
if (e.Index >= 0 && m_dicItems.Keys.Contains(e.Index))
{
e.Graphics.DrawString(m_dicItems[e.Index].info, Font, new SolidBrush(m_dicItems[e.Index].color), e.Bounds);
}
}
protected override void OnMeasureItem(MeasureItemEventArgs e)
{
base.OnMeasureItem(e);
e.ItemHeight = 16;
}
public void AddLog(String log, Color color)
{
ModefyItems();
LogItem item = new LogItem();
String showLog = String.Format("[{0}] {1}", DateTime.Now.ToString("HH:mm:ss"), log);
item.info = showLog;
item.color = color;
item.index = Items.Add(log);
if (!m_dicItems.Keys.Contains(item.index))
m_dicItems.Add(item.index, item);
SelectedIndex = item.index;
}
public void Clear()
{
Items.Clear();
m_dicItems.Clear();
}
private void ModefyItems()
{
if (Items.Count >= m_nMaxLength)
{
Items.RemoveAt(0);
for (int n = 0; n < m_dicItems.Count - 1; n++)
{
if (m_dicItems.Keys.Contains(n) && m_dicItems.Keys.Contains(n + 1))
{
m_dicItems[n].info = m_dicItems[n + 1].info;
m_dicItems[n].color = m_dicItems[n + 1].color;
}
}
m_dicItems.Remove(m_dicItems.Count - 1);
}
}
}
}
+68
View File
@@ -0,0 +1,68 @@
namespace JinYuan.ControlLib
{
partial class LongTitle
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.lbl_Title = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// lbl_Title
//
this.lbl_Title.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title.Font = new System.Drawing.Font("微软雅黑", 16F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))));
this.lbl_Title.ForeColor = System.Drawing.Color.White;
this.lbl_Title.Location = new System.Drawing.Point(35, 0);
this.lbl_Title.Margin = new System.Windows.Forms.Padding(50, 0, 0, 0);
this.lbl_Title.Name = "lbl_Title";
this.lbl_Title.Size = new System.Drawing.Size(205, 52);
this.lbl_Title.TabIndex = 0;
this.lbl_Title.Text = "标题名称";
this.lbl_Title.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// LongTitle
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 19F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Transparent;
this.BackgroundImage = global::JinYuan.ControlLib.Properties.Resources.标题_03左;
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.Controls.Add(this.lbl_Title);
this.DoubleBuffered = true;
this.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold);
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "LongTitle";
this.Size = new System.Drawing.Size(543, 52);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label lbl_Title;
}
}
+75
View File
@@ -0,0 +1,75 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class LongTitle : UserControl
{
public LongTitle()
{
InitializeComponent();
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
private bool isRight = true;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示导航按钮是否为右边")]
public bool IsRight
{
get { return isRight; }
set
{
isRight = value;
UpdataImage();
}
}
private string titleName = "标题名称";
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示标题名称")]
public string TitleName
{
get { return titleName; }
set
{
titleName = value;
this.lbl_Title.Text = titleName;
}
}
/// <summary>
///统一更新背景
/// </summary>
private void UpdataImage()
{
if (this.isRight)
{
lbl_Title.Dock = DockStyle.Right;
this.BackgroundImage = Properties.Resources.标题_03右;
}
else
{
lbl_Title.Dock = DockStyle.Left;
this.BackgroundImage =Properties.Resources.标题_03左;
}
}
}
}
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+68
View File
@@ -0,0 +1,68 @@
namespace JinYuan.ControlLib
{
partial class LongTitleStyle2
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LongTitleStyle2));
this.lbl_Title = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// lbl_Title
//
this.lbl_Title.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title.Font = new System.Drawing.Font("微软雅黑", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lbl_Title.ForeColor = System.Drawing.Color.White;
this.lbl_Title.Location = new System.Drawing.Point(0, 0);
this.lbl_Title.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lbl_Title.Name = "lbl_Title";
this.lbl_Title.Size = new System.Drawing.Size(233, 41);
this.lbl_Title.TabIndex = 1;
this.lbl_Title.Text = "标题名称";
this.lbl_Title.TextAlign = System.Drawing.ContentAlignment.TopCenter;
//
// LongTitleStyle2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Transparent;
this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage")));
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.Controls.Add(this.lbl_Title);
this.DoubleBuffered = true;
this.Name = "LongTitleStyle2";
this.Size = new System.Drawing.Size(233, 41);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label lbl_Title;
}
}
+45
View File
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class LongTitleStyle2 : UserControl
{
public LongTitleStyle2()
{
InitializeComponent();
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
private string titleName = "标题名称";
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示标题名称")]
public string TitleName
{
get { return titleName; }
set
{
titleName = value;
this.lbl_Title.Text = titleName;
}
}
}
}
+256
View File
@@ -0,0 +1,256 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>
+140
View File
@@ -0,0 +1,140 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JinYuan.ControlLib.Models
{
//子组大小:这个与计算内的CPK值又非常打的关系,即是分组的样本个数,数据的分组在此处需要说明的是,必须
//是根据实际情况来填写,比如每次抽样为5个,那么子组大小为5个,我们不能随心所欲的任意填写这个值,否则
//将没有实际意义。
//上规格:用户录入的上规格值
//目标值:用户输入的目标值,即期望达到的中心值
//下规格:用户输入的下规格值
public class CPKModel
{
/// <summary>
/// 总样本数 。参与分析的数据的个数
/// </summary>
public int TotalNumber { get; set; }
/// <summary>
/// 图表类型 .说明进行分析的控制图的类型,此处为XR控制图
/// </summary>
public string ChartType { get; set; }
/// <summary>
/// 平均值 所有样本数据的平均值
/// </summary>
public double MeanVlaue { get; set; }
/// <summary>
/// 最大值 所有样本的最大值
/// </summary>
public double MaxValue { get; set; }
/// <summary>
/// 最小值
/// </summary>
public double MinValue { get; set; }
/// <summary>
/// 正的3倍标准差线
/// </summary>
public double Pos3Sigma { get; set; }
/// <summary>
/// 负的3倍标准差线
/// </summary>
public double Neg3Sigma { get; set; }
/// <summary>
/// 组内标准差值
/// </summary>
public double GroupSTDEV { get; set; }
/// <summary>
/// 整体标准差值
/// </summary>
public double WholeSTDEV { get; set; }
/// <summary>
/// 组内CPK值 工序能力指数,与规格值及上述标准差值相关联
/// </summary>
public double GroupCPK { get; set; }
/// <summary>
/// 整体CPK值 工序能力指数,与规格值及上述标准差值相关联
/// </summary>
public double WholeCPK { get; set; }
/// <summary>
/// 组内CP值 Cp值是衡量过程满足产品品质标准的成都,也叫制程精密度,Cp值越大,表示过程变异越小,过程能力越差
/// </summary>
public double GroupCP { get; set; }
/// <summary>
/// 整体CP值 Cp值是衡量过程满足产品品质标准的成都,也叫制程精密度,Cp值越大,表示过程变异越小,过程能力越差
/// </summary>
public double WholeCP { get; set; }
/// <summary>
/// 组内CPL值 相对应于下规格的工序能力值;
/// </summary>
public double GroupCPL { get; set; }
/// <summary>
/// 整体CPL值 相对应于下规格的工序能力值;
/// </summary>
public double WholeCPL { get; set; }
/// <summary>
/// 组内CPU值 相对应于上规格的工序能力值;
/// </summary>
public double GroupCPU { get; set; }
/// <summary>
/// 整体CPU值 相对应于上规格的工序能力值;
/// </summary>
public double WholeCPU { get; set; }
/// <summary>
/// 组内PPM<LSL值,预测的低于下规格值的不合格品数(PPM -百万分之比)
/// </summary>
public double GroupPPM_LSL { get; set; }
/// <summary>
/// 整体PPM<LSL值,预测的低于下规格值的不合格品数(PPM -百万分之比);
/// </summary>
public double WholePPM_LSL { get; set; }
/// <summary>
/// 实际检测PPM<LSL值,预测的低于下规格值的不合格品数(PPM -百万分之比);
/// </summary>
public double MeasuredPPM_LSL { get; set; }
/// <summary>
/// 组内PPM<USL值,预测的低于上规格值的不合格品数(PPM -百万分之比)
/// </summary>
public double GroupPPM_USL { get; set; }
/// <summary>
/// 整体PPM<USL值,预测的低于上规格值的不合格品数(PPM -百万分之比);
/// </summary>
public double WholePPM_USL { get; set; }
/// <summary>
/// 实际检测PPM<USL值,预测的低于上规格值的不合格品数(PPM -百万分之比)
/// </summary>
public double MeasuredPPM_USL { get; set; }
/// <summary>
/// 组内PPM Total值,预测的总的不合格品数
/// </summary>
public double GroupPPM_Total { get; set; }
/// <summary>
/// 整体PPM<USL值,预测的总的不合格品数
/// </summary>
public double WholePPM_Total { get; set; }
/// <summary>
/// 实际检测PPM<USL值,预测的总的不合格品数
/// </summary>
public double MeasuredPPM_Total { get; set; }
/// <summary>
/// 制程准确度,值越小越好
/// </summary>
public double CA { get; set; }
}
}
+66
View File
@@ -0,0 +1,66 @@
namespace JinYuan.ControlLib
{
partial class NaviButton
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.lbl_Title = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// lbl_Title
//
this.lbl_Title.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Bold);
this.lbl_Title.ForeColor = System.Drawing.Color.White;
this.lbl_Title.Location = new System.Drawing.Point(0, 0);
this.lbl_Title.Name = "lbl_Title";
this.lbl_Title.Size = new System.Drawing.Size(129, 43);
this.lbl_Title.TabIndex = 0;
this.lbl_Title.Text = "导航按钮";
this.lbl_Title.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbl_Title.Click += new System.EventHandler(this.lbl_Title_Click);
//
// NaviButton
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackgroundImage = global::JinYuan.ControlLib.Properties.Resources.LeftUnSelected;
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.Controls.Add(this.lbl_Title);
this.DoubleBuffered = true;
this.Name = "NaviButton";
this.Size = new System.Drawing.Size(129, 43);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label lbl_Title;
}
}
+90
View File
@@ -0,0 +1,90 @@
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
[DefaultEvent("Click")]//增加特性事件
public partial class NaviButton : UserControl
{
public NaviButton()
{
InitializeComponent();
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
private bool isSelected=false;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示导航按钮是否选中")]
public bool IsSelected
{
get { return isSelected; }
set
{
isSelected = value;
UpdataImage();
}
}
private bool isLeft=true;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示导航按钮是否为左边")]
public bool IsLeft
{
get { return isLeft; }
set
{
isLeft= value;
UpdataImage();
}
}
private string titleName="导航按钮";
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示导航按钮文本内容")]
public string TitleName
{
get { return titleName; }
set
{
titleName= value;
this.lbl_Title.Text = titleName;
}
}
/// <summary>
///统一更新背景
/// </summary>
private void UpdataImage()
{
if (this.isLeft)
{
this.BackgroundImage=isSelected?Properties.Resources.LeftSelected:Properties.Resources.LeftUnSelected;
}
else
{
this.BackgroundImage=isSelected?Properties.Resources.RightSelected:Properties.Resources.RightUnSelected;
}
}
[Browsable(true)]//是否可见
[Category("自定义事件")] //类别
[Description("设置或显示导航按钮文本内容")]
public new EventHandler Click;
private void lbl_Title_Click(object sender, EventArgs e)
{
this.Click?.Invoke(this, e);
}
}
}
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+65
View File
@@ -0,0 +1,65 @@
namespace JinYuan.ControlLib
{
partial class NaviButton2
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.lbl_Title = new AntdUI.Label();
this.SuspendLayout();
//
// lbl_Title
//
this.lbl_Title.BackColor = System.Drawing.Color.Transparent;
this.lbl_Title.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Title.Font = new System.Drawing.Font("Cambria", 10.5F);
this.lbl_Title.Location = new System.Drawing.Point(0, 0);
this.lbl_Title.Name = "lbl_Title";
this.lbl_Title.Size = new System.Drawing.Size(129, 43);
this.lbl_Title.TabIndex = 1;
this.lbl_Title.Text = "Data Monitor";
this.lbl_Title.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// NaviButton2
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.SystemColors.Control;
this.BackgroundImage = global::JinYuan.ControlLib.Properties.Resources.RightUnSelected2;
this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.Controls.Add(this.lbl_Title);
this.DoubleBuffered = true;
this.Name = "NaviButton2";
this.Size = new System.Drawing.Size(129, 43);
this.ResumeLayout(false);
}
#endregion
private AntdUI.Label lbl_Title;
}
}
+315
View File
@@ -0,0 +1,315 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
[DefaultEvent("Click")] // 增加特性事件
public partial class NaviButton2 : UserControl
{
public NaviButton2()
{
InitializeComponent();
// 设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
// 绑定 Resize 事件
this.Resize += NaviButton2_Resize;
// 绑定 Label 的点击事件
this.lbl_Title.Click += lbl_Title_Click;
}
private bool isSelected = false;
[Browsable(true)] // 是否可见
[Category("自定义属性")] // 类别
[Description("设置或显示导航按钮是否选中")]
public bool IsSelected
{
get { return isSelected; }
set
{
isSelected = value;
UpdataImage();
this.Invalidate(); // 刷新控件
}
}
private bool isLeft = true;
[Browsable(true)] // 是否可见
[Category("自定义属性")] // 类别
[Description("设置或显示导航按钮是否为左边")]
public bool IsLeft
{
get { return isLeft; }
set
{
isLeft = value;
UpdataImage();
this.Invalidate(); // 刷新控件
}
}
private string titleName = "导航按钮";
[Browsable(true)] // 是否可见
[Category("自定义属性")] // 类别
[Description("设置或显示导航按钮文本内容")]
public string TitleName
{
get { return titleName; }
set
{
titleName = value;
this.lbl_Title.Text = titleName;
this.lbl_Title.AutoSize = false; // 禁用 AutoSize
this.lbl_Title.Size = new Size(this.Width - 10, this.Height - 10); // 设置 Label 的大小
this.Invalidate(); // 刷新控件
}
}
private bool titleTextMultiLine = true;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或显示导航按钮文本是否支持多行显示")]
public bool TitleTextMultiLine
{
get { return titleTextMultiLine; }
set
{
titleTextMultiLine = value;
this.lbl_Title.AutoSize = false; // 禁用 AutoSize
this.lbl_Title.TextMultiLine = titleTextMultiLine; // 设置多行显示
this.Invalidate(); // 刷新控件
}
}
private Color titleForeColor = Color.Black;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或显示导航按钮文本的字体颜色")]
public Color TitleForeColor
{
get { return titleForeColor; }
set
{
titleForeColor = value;
this.lbl_Title.ForeColor = titleForeColor;
this.Invalidate(); // 刷新控件
}
}
private Font titleFont= new Font("Cambria", 10.5f, FontStyle.Bold);
[Browsable(true)]
[Category("自定义属性")]
[Description("设置或显示导航按钮文本的字体样式")]
public Font TitleFont
{
get { return titleFont; }
set
{
titleFont = value;
this.lbl_Title.Font = titleFont;
this.Invalidate(); // 刷新控件
}
}
/// <summary>
/// 统一更新背景
/// </summary>
private void UpdataImage()
{
if (this.isLeft)
{
this.BackgroundImage = isSelected ? Properties.Resources.LeftSelected3 : Properties.Resources.LeftUnSelected3;
}
else
{
this.BackgroundImage = isSelected ? Properties.Resources.RightSelected3 : Properties.Resources.RightUnSelected3;
}
}
[Browsable(true)] // 是否可见
[Category("自定义事件")] // 类别
[Description("设置或显示导航按钮文本内容")]
public new event EventHandler Click;
private void lbl_Title_Click(object sender, EventArgs e)
{
// 触发 Click 事件
this.Click?.Invoke(this, e);
}
private void NaviButton2_Resize(object sender, EventArgs e)
{
// 调整 Label 的大小和位置
this.lbl_Title.Size = new Size(this.Width - 10, this.Height - 10);
this.lbl_Title.Location = new Point(5, 5); // 根据需要调整位置
this.Invalidate(); // 刷新控件
}
}
//[DefaultEvent("Click")] // 增加特性事件
//public partial class NaviButton2 : UserControl
//{
// public NaviButton2()
// {
// InitializeComponent();
// // 设置控件样式,去除缓冲
// this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
// this.SetStyle(ControlStyles.DoubleBuffer, true);
// this.SetStyle(ControlStyles.ResizeRedraw, true);
// this.SetStyle(ControlStyles.Selectable, true);
// this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
// // 绑定 Resize 事件
// this.Resize += NaviButton2_Resize;
// }
// private bool isSelected = false;
// [Browsable(true)] // 是否可见
// [Category("自定义属性")] // 类别
// [Description("设置或显示导航按钮是否选中")]
// public bool IsSelected
// {
// get { return isSelected; }
// set
// {
// isSelected = value;
// UpdataImage();
// }
// }
// private bool isLeft = true;
// [Browsable(true)] // 是否可见
// [Category("自定义属性")] // 类别
// [Description("设置或显示导航按钮是否为左边")]
// public bool IsLeft
// {
// get { return isLeft; }
// set
// {
// isLeft = value;
// UpdataImage();
// }
// }
// private string titleName = "导航按钮";
// [Browsable(true)] // 是否可见
// [Category("自定义属性")] // 类别
// [Description("设置或显示导航按钮文本内容")]
// public string TitleName
// {
// get { return titleName; }
// set
// {
// titleName = value;
// this.lbl_Title.Text = titleName;
// this.lbl_Title.AutoSize = false; // 禁用 AutoSize
// this.lbl_Title.Size = new Size(this.Width - 10, this.Height - 10); // 设置 Label 的大小
// }
// }
// private float titleFontSize = 12f;
// [Browsable(true)]
// [Category("自定义属性")]
// [Description("设置或显示导航按钮文本的字体大小")]
// public float TitleFontSize
// {
// get { return titleFontSize; }
// set
// {
// titleFontSize = value;
// this.lbl_Title.Font = new Font(this.lbl_Title.Font.FontFamily, titleFontSize, this.lbl_Title.Font.Style);
// }
// }
// private bool textMultiLine = true;
// [Browsable(true)]
// [Category("自定义属性")]
// [Description("设置或显示导航按钮文本是否换行")]
// public bool TextMultiLine
// {
// get { return textMultiLine; }
// set
// {
// textMultiLine = value;
// this.lbl_Title.AutoSize = false; // 禁用 AutoSize
// this.lbl_Title.TextMultiLine = textMultiLine;
// }
// }
// private Color titleForeColor = Color.Black;
// [Browsable(true)]
// [Category("自定义属性")]
// [Description("设置或显示导航按钮文本的字体颜色")]
// public Color TitleForeColor
// {
// get { return titleForeColor; }
// set
// {
// titleForeColor = value;
// this.lbl_Title.ForeColor = titleForeColor;
// }
// }
// private FontStyle titleFontStyle = FontStyle.Regular;
// [Browsable(true)]
// [Category("自定义属性")]
// [Description("设置或显示导航按钮文本的字体样式")]
// public FontStyle TitleFontStyle
// {
// get { return titleFontStyle; }
// set
// {
// titleFontStyle = value;
// this.lbl_Title.Font = new Font(this.lbl_Title.Font.FontFamily, this.lbl_Title.Font.Size, titleFontStyle);
// }
// }
// /// <summary>
// /// 统一更新背景
// /// </summary>
// private void UpdataImage()
// {
// if (this.isLeft)
// {
// this.BackgroundImage = isSelected ? Properties.Resources.LeftSelected3 : Properties.Resources.LeftUnSelected3;
// }
// else
// {
// this.BackgroundImage = isSelected ? Properties.Resources.RightSelected3 : Properties.Resources.RightUnSelected3;
// }
// }
// [Browsable(true)] // 是否可见
// [Category("自定义事件")] // 类别
// [Description("设置或显示导航按钮文本内容")]
// public new EventHandler Click;
// private void lbl_Title_Click(object sender, EventArgs e)
// {
// this.Click?.Invoke(this, e);
// }
// private void NaviButton2_Resize(object sender, EventArgs e)
// {
// // 调整 Label 的大小和位置
// this.lbl_Title.Size = new Size(this.Width - 10, this.Height - 10);
// this.lbl_Title.Location = new Point(5, 5); // 根据需要调整位置
// }
//}
}
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+426
View File
@@ -0,0 +1,426 @@
namespace JinYuan.ControlLib
{
partial class NumKeyboard
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.btn_Enter = new System.Windows.Forms.Button();
this.button14 = new System.Windows.Forms.Button();
this.button13 = new System.Windows.Forms.Button();
this.btn_Esc = new System.Windows.Forms.Button();
this.button11 = new System.Windows.Forms.Button();
this.button10 = new System.Windows.Forms.Button();
this.button9 = new System.Windows.Forms.Button();
this.btn_Del = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
this.button6 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.btn_Minus = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.lbl_Result = new System.Windows.Forms.Label();
this.lbl_Max = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.lbl_Min = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.button1 = new System.Windows.Forms.Button();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 4;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.Controls.Add(this.btn_Enter, 2, 5);
this.tableLayoutPanel1.Controls.Add(this.button14, 1, 5);
this.tableLayoutPanel1.Controls.Add(this.button13, 0, 5);
this.tableLayoutPanel1.Controls.Add(this.btn_Esc, 3, 4);
this.tableLayoutPanel1.Controls.Add(this.button11, 2, 4);
this.tableLayoutPanel1.Controls.Add(this.button10, 1, 4);
this.tableLayoutPanel1.Controls.Add(this.button9, 0, 4);
this.tableLayoutPanel1.Controls.Add(this.btn_Del, 3, 3);
this.tableLayoutPanel1.Controls.Add(this.button7, 2, 3);
this.tableLayoutPanel1.Controls.Add(this.button6, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.button5, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.btn_Minus, 3, 2);
this.tableLayoutPanel1.Controls.Add(this.button3, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.button2, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.lbl_Result, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.lbl_Max, 3, 0);
this.tableLayoutPanel1.Controls.Add(this.label3, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.lbl_Min, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.button1, 0, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 6;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.66667F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(320, 276);
this.tableLayoutPanel1.TabIndex = 0;
//
// btn_Enter
//
this.tableLayoutPanel1.SetColumnSpan(this.btn_Enter, 2);
this.btn_Enter.Dock = System.Windows.Forms.DockStyle.Fill;
this.btn_Enter.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btn_Enter.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Enter.ForeColor = System.Drawing.Color.White;
this.btn_Enter.Location = new System.Drawing.Point(166, 236);
this.btn_Enter.Margin = new System.Windows.Forms.Padding(6);
this.btn_Enter.Name = "btn_Enter";
this.btn_Enter.Size = new System.Drawing.Size(148, 34);
this.btn_Enter.TabIndex = 19;
this.btn_Enter.Text = "Enter";
this.btn_Enter.UseVisualStyleBackColor = true;
this.btn_Enter.Click += new System.EventHandler(this.btn_Enter_Click);
//
// button14
//
this.button14.Dock = System.Windows.Forms.DockStyle.Fill;
this.button14.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button14.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button14.ForeColor = System.Drawing.Color.White;
this.button14.Location = new System.Drawing.Point(86, 236);
this.button14.Margin = new System.Windows.Forms.Padding(6);
this.button14.Name = "button14";
this.button14.Size = new System.Drawing.Size(68, 34);
this.button14.TabIndex = 18;
this.button14.Text = "0";
this.button14.UseVisualStyleBackColor = true;
this.button14.Click += new System.EventHandler(this.btn_Common_Click);
//
// button13
//
this.button13.Dock = System.Windows.Forms.DockStyle.Fill;
this.button13.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button13.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button13.ForeColor = System.Drawing.Color.White;
this.button13.Location = new System.Drawing.Point(6, 236);
this.button13.Margin = new System.Windows.Forms.Padding(6);
this.button13.Name = "button13";
this.button13.Size = new System.Drawing.Size(68, 34);
this.button13.TabIndex = 17;
this.button13.Text = ".";
this.button13.UseVisualStyleBackColor = true;
this.button13.Click += new System.EventHandler(this.btn_Common_Click);
//
// btn_Esc
//
this.btn_Esc.Dock = System.Windows.Forms.DockStyle.Fill;
this.btn_Esc.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btn_Esc.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Esc.ForeColor = System.Drawing.Color.White;
this.btn_Esc.Location = new System.Drawing.Point(246, 190);
this.btn_Esc.Margin = new System.Windows.Forms.Padding(6);
this.btn_Esc.Name = "btn_Esc";
this.btn_Esc.Size = new System.Drawing.Size(68, 34);
this.btn_Esc.TabIndex = 16;
this.btn_Esc.Text = "ESC";
this.btn_Esc.UseVisualStyleBackColor = true;
this.btn_Esc.Click += new System.EventHandler(this.btn_Esc_Click);
//
// button11
//
this.button11.Dock = System.Windows.Forms.DockStyle.Fill;
this.button11.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button11.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button11.ForeColor = System.Drawing.Color.White;
this.button11.Location = new System.Drawing.Point(166, 190);
this.button11.Margin = new System.Windows.Forms.Padding(6);
this.button11.Name = "button11";
this.button11.Size = new System.Drawing.Size(68, 34);
this.button11.TabIndex = 15;
this.button11.Text = "3";
this.button11.UseVisualStyleBackColor = true;
this.button11.Click += new System.EventHandler(this.btn_Common_Click);
//
// button10
//
this.button10.Dock = System.Windows.Forms.DockStyle.Fill;
this.button10.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button10.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button10.ForeColor = System.Drawing.Color.White;
this.button10.Location = new System.Drawing.Point(86, 190);
this.button10.Margin = new System.Windows.Forms.Padding(6);
this.button10.Name = "button10";
this.button10.Size = new System.Drawing.Size(68, 34);
this.button10.TabIndex = 14;
this.button10.Text = "2";
this.button10.UseVisualStyleBackColor = true;
this.button10.Click += new System.EventHandler(this.btn_Common_Click);
//
// button9
//
this.button9.Dock = System.Windows.Forms.DockStyle.Fill;
this.button9.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button9.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button9.ForeColor = System.Drawing.Color.White;
this.button9.Location = new System.Drawing.Point(6, 190);
this.button9.Margin = new System.Windows.Forms.Padding(6);
this.button9.Name = "button9";
this.button9.Size = new System.Drawing.Size(68, 34);
this.button9.TabIndex = 13;
this.button9.Text = "1";
this.button9.UseVisualStyleBackColor = true;
this.button9.Click += new System.EventHandler(this.btn_Common_Click);
//
// btn_Del
//
this.btn_Del.Dock = System.Windows.Forms.DockStyle.Fill;
this.btn_Del.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btn_Del.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Del.ForeColor = System.Drawing.Color.White;
this.btn_Del.Location = new System.Drawing.Point(246, 144);
this.btn_Del.Margin = new System.Windows.Forms.Padding(6);
this.btn_Del.Name = "btn_Del";
this.btn_Del.Size = new System.Drawing.Size(68, 34);
this.btn_Del.TabIndex = 12;
this.btn_Del.Text = "DEL";
this.btn_Del.UseVisualStyleBackColor = true;
this.btn_Del.Click += new System.EventHandler(this.btn_Del_Click);
//
// button7
//
this.button7.Dock = System.Windows.Forms.DockStyle.Fill;
this.button7.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button7.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button7.ForeColor = System.Drawing.Color.White;
this.button7.Location = new System.Drawing.Point(166, 144);
this.button7.Margin = new System.Windows.Forms.Padding(6);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(68, 34);
this.button7.TabIndex = 11;
this.button7.Text = "6";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.btn_Common_Click);
//
// button6
//
this.button6.Dock = System.Windows.Forms.DockStyle.Fill;
this.button6.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button6.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button6.ForeColor = System.Drawing.Color.White;
this.button6.Location = new System.Drawing.Point(86, 144);
this.button6.Margin = new System.Windows.Forms.Padding(6);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(68, 34);
this.button6.TabIndex = 10;
this.button6.Text = "5";
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.btn_Common_Click);
//
// button5
//
this.button5.Dock = System.Windows.Forms.DockStyle.Fill;
this.button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button5.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button5.ForeColor = System.Drawing.Color.White;
this.button5.Location = new System.Drawing.Point(6, 144);
this.button5.Margin = new System.Windows.Forms.Padding(6);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(68, 34);
this.button5.TabIndex = 9;
this.button5.Text = "4";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.btn_Common_Click);
//
// btn_Minus
//
this.btn_Minus.Dock = System.Windows.Forms.DockStyle.Fill;
this.btn_Minus.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btn_Minus.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btn_Minus.ForeColor = System.Drawing.Color.White;
this.btn_Minus.Location = new System.Drawing.Point(246, 98);
this.btn_Minus.Margin = new System.Windows.Forms.Padding(6);
this.btn_Minus.Name = "btn_Minus";
this.btn_Minus.Size = new System.Drawing.Size(68, 34);
this.btn_Minus.TabIndex = 8;
this.btn_Minus.Text = "-";
this.btn_Minus.UseVisualStyleBackColor = true;
this.btn_Minus.Click += new System.EventHandler(this.btn_Minus_Click);
//
// button3
//
this.button3.Dock = System.Windows.Forms.DockStyle.Fill;
this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button3.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button3.ForeColor = System.Drawing.Color.White;
this.button3.Location = new System.Drawing.Point(166, 98);
this.button3.Margin = new System.Windows.Forms.Padding(6);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(68, 34);
this.button3.TabIndex = 7;
this.button3.Text = "9";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.btn_Common_Click);
//
// button2
//
this.button2.Dock = System.Windows.Forms.DockStyle.Fill;
this.button2.FlatAppearance.MouseDownBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(64)))));
this.button2.FlatAppearance.MouseOverBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(3)))), ((int)(((byte)(27)))), ((int)(((byte)(78)))));
this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button2.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button2.ForeColor = System.Drawing.Color.White;
this.button2.Location = new System.Drawing.Point(86, 98);
this.button2.Margin = new System.Windows.Forms.Padding(6);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(68, 34);
this.button2.TabIndex = 6;
this.button2.Text = "8";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.btn_Common_Click);
//
// lbl_Result
//
this.lbl_Result.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tableLayoutPanel1.SetColumnSpan(this.lbl_Result, 4);
this.lbl_Result.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Result.Font = new System.Drawing.Font("微软雅黑", 12.5F, System.Drawing.FontStyle.Bold);
this.lbl_Result.ForeColor = System.Drawing.Color.White;
this.lbl_Result.Location = new System.Drawing.Point(3, 46);
this.lbl_Result.Name = "lbl_Result";
this.lbl_Result.Size = new System.Drawing.Size(314, 46);
this.lbl_Result.TabIndex = 4;
this.lbl_Result.Text = "0";
this.lbl_Result.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lbl_Result.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbl_Result_MouseDown);
this.lbl_Result.MouseMove += new System.Windows.Forms.MouseEventHandler(this.lbl_Result_MouseMove);
//
// lbl_Max
//
this.lbl_Max.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Max.Font = new System.Drawing.Font("微软雅黑", 11.5F, System.Drawing.FontStyle.Bold);
this.lbl_Max.ForeColor = System.Drawing.Color.White;
this.lbl_Max.Location = new System.Drawing.Point(243, 0);
this.lbl_Max.Name = "lbl_Max";
this.lbl_Max.Size = new System.Drawing.Size(74, 46);
this.lbl_Max.TabIndex = 3;
this.lbl_Max.Text = "0";
this.lbl_Max.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label3
//
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Font = new System.Drawing.Font("微软雅黑", 11.5F, System.Drawing.FontStyle.Bold);
this.label3.ForeColor = System.Drawing.Color.White;
this.label3.Location = new System.Drawing.Point(163, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(74, 46);
this.label3.TabIndex = 2;
this.label3.Text = "Max:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lbl_Min
//
this.lbl_Min.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbl_Min.Font = new System.Drawing.Font("微软雅黑", 11.5F, System.Drawing.FontStyle.Bold);
this.lbl_Min.ForeColor = System.Drawing.Color.White;
this.lbl_Min.Location = new System.Drawing.Point(83, 0);
this.lbl_Min.Name = "lbl_Min";
this.lbl_Min.Size = new System.Drawing.Size(74, 46);
this.lbl_Min.TabIndex = 1;
this.lbl_Min.Text = "0";
this.lbl_Min.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("微软雅黑", 11.5F, System.Drawing.FontStyle.Bold);
this.label1.ForeColor = System.Drawing.Color.White;
this.label1.Location = new System.Drawing.Point(3, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(74, 46);
this.label1.TabIndex = 0;
this.label1.Text = "Min:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// button1
//
this.button1.Dock = System.Windows.Forms.DockStyle.Fill;
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Font = new System.Drawing.Font("微软雅黑", 12.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.button1.ForeColor = System.Drawing.Color.White;
this.button1.Location = new System.Drawing.Point(6, 98);
this.button1.Margin = new System.Windows.Forms.Padding(6);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(68, 34);
this.button1.TabIndex = 5;
this.button1.Text = "7";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.btn_Common_Click);
//
// NumKeyboard
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(3)))), ((int)(((byte)(27)))), ((int)(((byte)(78)))));
this.Controls.Add(this.tableLayoutPanel1);
this.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.Name = "NumKeyboard";
this.Size = new System.Drawing.Size(320, 276);
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Button btn_Enter;
private System.Windows.Forms.Button button14;
private System.Windows.Forms.Button button13;
private System.Windows.Forms.Button btn_Esc;
private System.Windows.Forms.Button button11;
private System.Windows.Forms.Button button10;
private System.Windows.Forms.Button button9;
private System.Windows.Forms.Button btn_Del;
private System.Windows.Forms.Button button7;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button btn_Minus;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Label lbl_Result;
private System.Windows.Forms.Label lbl_Max;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label lbl_Min;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button button1;
}
}
+211
View File
@@ -0,0 +1,211 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class NumKeyboard : UserControl
{
public NumKeyboard()
{
InitializeComponent();
}
[Browsable(false)]
[Category("自定义属性")]
[Description("最终的结果值")]
public string ResultValue
{
get { return this.lbl_Result.Text; }
}
private string initialValue;
[Browsable(true)]
[Category("自定义属性")]
[Description("初始值")]
public string InitialValue
{
get { return initialValue; }
set
{
initialValue = value;
this.lbl_Result.Text = value;
}
}
private float minValue = 0.0f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置的最小值")]
public float MinValue
{
get { return minValue; }
set
{
minValue = value;
this.lbl_Min.Text = value.ToString();
}
}
private float maxValue = 0.0f;
[Browsable(true)]
[Category("自定义属性")]
[Description("设置的最大值")]
public float MaxValue
{
get { return maxValue; }
set
{
maxValue = value;
this.lbl_Max.Text = value.ToString();
}
}
[Browsable(false)]
[Category("自定义属性")]
[Description("关联控件")]
public Control RelateControl { get; set; }
[Browsable(true)]
[Category("自定义事件")]
[Description("Enter按下事件")]
public event EventHandler EnterClick;
[Browsable(true)]
[Category("自定义事件")]
[Description("ESC按下事件")]
public event EventHandler ESCClick;
private void btn_Enter_Click(object sender, EventArgs e)
{
string temp = this.lbl_Result.Text;
if (float.TryParse(temp, out float value))
{
if (value >= this.minValue && value <= this.maxValue)
{
EnterClick?.Invoke(this, e);
}
else
{
return;
}
}
else
{
return;
}
}
private void btn_Esc_Click(object sender, EventArgs e)
{
ESCClick?.Invoke(this, e);
}
private void btn_Common_Click(object sender, EventArgs e)
{
if (sender is Button button)
{
if (button.Text == ".")
{
//处理小数点
if (this.lbl_Result.Text.Contains('.'))
{
return;
}
else
{
this.lbl_Result.Text += button.Text;
}
}
else
{
string temp = this.lbl_Result.Text + button.Text;
if (float.TryParse(temp, out float value))
{
if (value >= this.minValue && value <= this.maxValue)
{
this.lbl_Result.Text = temp;
}
else
{
return;
}
}
else
{
return;
}
}
}
}
private void btn_Del_Click(object sender, EventArgs e)
{
if (this.lbl_Result.Text.Length == 0) return;
this.lbl_Result.Text = this.lbl_Result.Text.Substring(0, this.lbl_Result.Text.Length - 1);
}
private void btn_Minus_Click(object sender, EventArgs e)
{
string temp = this.lbl_Result.Text;
if (temp.StartsWith("-"))
{
temp = temp.Remove(0, 1);
}
else
{
temp = temp.Insert(0, "-");
}
if (float.TryParse(temp, out float value))
{
if (value >= this.minValue && value <= this.maxValue)
{
this.lbl_Result.Text = temp;
}
else
{
return;
}
}
else
{
return;
}
}
#region 无边框拖动
private Point mPoint;
private void lbl_Result_MouseDown(object sender, MouseEventArgs e)
{
mPoint = new Point(e.X, e.Y);
}
private void lbl_Result_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
}
}
#endregion
}
}
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class PanelEnhanced
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+62
View File
@@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class PanelEnhanced : Panel
{
public PanelEnhanced()
{
InitializeComponent();
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
protected override void OnPaintBackground(PaintEventArgs e)
{
//重载基类得背景擦除方法
//解决窗体刷新,放大和闪烁
return;
}
protected override void OnPaint(PaintEventArgs e)
{
//使用双缓冲
this.DoubleBuffered = true;
if (this.BackgroundImage!=null)
{
e.Graphics.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.DrawImage(this.BackgroundImage, new Rectangle
(0, 0, this.Width, this.Height), 0, 0, this.BackgroundImage.Width, this.BackgroundImage.Height, GraphicsUnit.Pixel);
}
base.OnPaint(e);
}
#region 减少闪烁
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
#endregion
}
}
+36
View File
@@ -0,0 +1,36 @@
namespace JinYuan.ControlLib
{
partial class PanelExt
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}
+140
View File
@@ -0,0 +1,140 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace JinYuan.ControlLib
{
public partial class PanelExt : Panel
{
public PanelExt()
{
InitializeComponent();
//设置控件样式,去除缓冲
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer,true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
private int topGap;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示上边间隔距离")]
public int TopGap
{
get { return topGap; }
set
{
topGap = value;
this.Invalidate();//点击后立即生效
}
}
private int bottomGap;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示下边间隔距离")]
public int BottomGap
{
get { return bottomGap; }
set
{
bottomGap = value;
this.Invalidate();//点击后立即生效
}
}
private int leftGap;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示左边间隔距离")]
public int LeftGap
{
get { return leftGap; }
set
{
leftGap = value;
this.Invalidate();//点击后立即生效
}
}
private int rightGap;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示右边间隔距离")]
public int RightGap
{
get { return rightGap; }
set
{
rightGap = value;
this.Invalidate();//点击后立即生效
}
}
private int bordeWidth=2;
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示边框的宽度")]
public int BordeWidth
{
get { return bordeWidth; }
set
{
bordeWidth = value;
this.Invalidate();//点击后立即生效
}
}
private Color bordeColor=Color.FromArgb(35,255,253);
[Browsable(true)]//是否可见
[Category("自定义属性")] //类别
[Description("设置或显示边框的颜色")]
public Color BordeColor
{
get { return bordeColor; }
set
{
bordeColor = value;
this.Invalidate();//点击后立即生效
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//准备画布
Graphics graphics = e.Graphics;
//准备笔
Pen pen = new Pen(bordeColor,bordeWidth);
//准备矩形参数
float x = leftGap + bordeWidth * 0.5f;
float y = topGap + bordeWidth * 0.5f;
float width = this.Width - leftGap - rightGap - bordeWidth;
float height = this.Height - topGap - bottomGap - bordeWidth;
//绘制矩形
graphics.DrawRectangle(pen, x, y, width, height);
}
#region 减少闪烁
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
#endregion
}
}
+45
View File
@@ -0,0 +1,45 @@
namespace JinYuan.ControlLib
{
partial class ProcessEllipse
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// ProcessEllipse
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(5)))), ((int)(((byte)(28)))), ((int)(((byte)(68)))));
this.Name = "ProcessEllipse";
this.ResumeLayout(false);
}
#endregion
}
}
+461
View File
@@ -0,0 +1,461 @@
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 JinYuan.ControlLib
{
public partial class ProcessEllipse : UserControl
{
public ProcessEllipse()
{
InitializeComponent();
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.UserPaint, true);
ForeColor = Color.White;
Font = new Font("Arial Unicode MS", 20);
}
#region 减少闪烁
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
#endregion
[Description("值改变事件"), Category("自定义")]
public event EventHandler ValueChanged;
private Color m_backEllipseColor = Color.FromArgb(22, 160, 133);
/// <summary>
/// 圆背景色
/// </summary>
[Description("圆背景色"), Category("自定义")]
public Color BackEllipseColor
{
get { return m_backEllipseColor; }
set
{
m_backEllipseColor = value;
Refresh();
}
}
private Color m_coreEllipseColor = Color.FromArgb(180, 180, 180);
/// <summary>
/// 内圆颜色,ShowType=Ring 有效
/// </summary>
[Description("内圆颜色,ShowType=Ring 有效"), Category("自定义")]
public Color CoreEllipseColor
{
get { return m_coreEllipseColor; }
set
{
m_coreEllipseColor = value;
Refresh();
}
}
private Color m_valueColor = Color.FromArgb(255, 77, 59);
[Description("值圆颜色"), Category("自定义")]
public Color ValueColor
{
get { return m_valueColor; }
set
{
m_valueColor = value;
Refresh();
}
}
private bool m_isShowCoreEllipseBorder = true;
/// <summary>
/// 内圆是否显示边框,ShowType=Ring 有效
/// </summary>
[Description("内圆是否显示边框,ShowType=Ring 有效"), Category("自定义")]
public bool IsShowCoreEllipseBorder
{
get { return m_isShowCoreEllipseBorder; }
set
{
m_isShowCoreEllipseBorder = value;
Refresh();
}
}
private ShowType m_showType = ShowType.PPM;
/// <summary>
/// 值文字类型
/// </summary>
[Description("显示类型"), Category("自定义")]
public ShowType ShowType
{
get { return m_showType; }
set
{
m_showType = value;
UpdataMaxValue();
Refresh();
}
}
private ValueType m_valueType = ValueType.Percent;
/// <summary>
/// 值文字类型
/// </summary>
[Description("值文字类型,Percent-百分比;Absolute-数值"), Category("自定义")]
public ValueType ValueType
{
get { return m_valueType; }
set
{
m_valueType = value;
Refresh();
}
}
private ValueFloatOrInt m_valueFloatOrInt = ValueFloatOrInt.Int;
/// <summary>
/// 值文字类型
/// </summary>
[Description("值类型"), Category("自定义")]
public ValueFloatOrInt ValueFloatOrInt
{
get { return m_valueFloatOrInt; }
set
{
m_valueFloatOrInt = value;
Refresh();
}
}
private int m_valueWidth = 30;
/// <summary>
/// 外圆值宽度
/// </summary>
[Description("外圆值宽度,ShowType=Ring 有效"), Category("自定义")]
public int ValueWidth
{
get { return m_valueWidth; }
set
{
if (value <= 0 || value > Math.Min(this.Width, this.Height))
return;
m_valueWidth = value;
Refresh();
}
}
private int m_valueMargin = 5;
/// <summary>
/// 外圆值间距
/// </summary>
[Description("外圆值间距"), Category("自定义")]
public int ValueMargin
{
get { return m_valueMargin; }
set
{
if (value < 0 || m_valueMargin >= m_valueWidth)
return;
m_valueMargin = value;
Refresh();
}
}
private int m_maxValue=100;
/// <summary>
/// 最大值
/// </summary>
[Description("最大值"), Category("自定义")]
public int MaxValue
{
get { return m_maxValue; }
set
{
//if (value > m_intValue || value > m_floatValue || value < 0)
// return;
m_maxValue = value;
Refresh();
}
}
private int m_intValue = 0;
/// <summary>
/// 当前值
/// </summary>
[Description("当前值整数,ValueFloatOrInt=Int 有效"), Category("自定义")]
public int IntValue
{
get { return m_intValue; }
set
{
if (m_maxValue < value || value < 0)
return;
m_intValue = value;
if (ValueChanged != null)
{
ValueChanged(this, null);
}
Refresh();
}
}
private float m_floatValue = 0.00f;
/// <summary>
/// 当前值
/// </summary>
[Description("当前值浮点数,ValueFloatOrInt=Float 有效"), Category("自定义")]
public float FloatValue
{
get { return m_floatValue; }
set
{
if (m_maxValue < value || value < 0)
return;
m_floatValue = value;
if (ValueChanged != null)
{
ValueChanged(this, null);
}
Refresh();
}
}
private Font m_font = new Font("Arial Unicode MS", 20);
[Description("文字字体"), Category("自定义")]
public override Font Font
{
get
{
return m_font;
}
set
{
m_font = value;
Refresh();
}
}
Color m_foreColor = Color.White;
[Description("文字颜色"), Category("自定义")]
public override Color ForeColor
{
get
{
return m_foreColor;
}
set
{
m_foreColor = value;
Refresh();
}
}
private ShowStyleType m_showStyleType = ShowStyleType.Ring;
[Description("显示样式"), Category("自定义")]
public ShowStyleType ShowStyleType
{
get { return m_showStyleType; }
set
{
m_showStyleType = value;
Refresh();
}
}
/// <summary>
/// 更新最大值
/// </summary>
private void UpdataMaxValue()
{
switch (m_showType)
{
case ShowType.PPM:
this.m_maxValue = 100;
break;
case ShowType.稼动率:
this.m_maxValue = 100;
break;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
var g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias; //使绘图质量最高,即消除锯齿
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.CompositingQuality = CompositingQuality.HighQuality;
int intWidth = Math.Min(this.Size.Width, this.Size.Height);
//底圆
g.FillEllipse(new SolidBrush(m_backEllipseColor), new Rectangle(new Point(0, 0), new Size(intWidth, intWidth)));
if (m_showStyleType == ShowStyleType.Ring)
{
//中心圆
int intCore = intWidth - m_valueWidth * 2;
g.FillEllipse(new SolidBrush(m_coreEllipseColor), new Rectangle(new Point(m_valueWidth, m_valueWidth), new Size(intCore, intCore)));
//中心圆边框
if (m_isShowCoreEllipseBorder)
{
g.DrawEllipse(new Pen(m_valueColor, 2), new Rectangle(new Point(m_valueWidth + 1, m_valueWidth + 1), new Size(intCore - 1, intCore - 1)));
}
if (m_valueFloatOrInt== ValueFloatOrInt.Int)
{
if (m_intValue >= 0 && m_maxValue > 0)
{
int fltPercent = (int)m_intValue / (int)m_maxValue;
if (fltPercent > 1)
{
fltPercent = 1;
}
g.DrawArc(new Pen(m_valueColor, m_valueWidth - m_valueMargin * 2), new RectangleF(new Point(m_valueWidth / 2 + m_valueMargin / 4, m_valueWidth / 2 + m_valueMargin / 4), new SizeF(intWidth - m_valueWidth - m_valueMargin / 2 + (m_valueMargin == 0 ? 0 : 1), intWidth - m_valueWidth - m_valueMargin / 2 + (m_valueMargin == 0 ? 0 : 1))), -90, fltPercent * 360);
string strValueText = m_valueType == ValueType.Percent ? fltPercent.ToString("0%") : m_intValue.ToString();
System.Drawing.SizeF _txtSize = g.MeasureString(strValueText, this.Font);
g.DrawString(strValueText, this.Font, new SolidBrush(this.ForeColor), new PointF((intWidth - _txtSize.Width) / 2 + 1, (intWidth - _txtSize.Height) / 2 + 1));
}
}
else
{
if (m_floatValue >= 0 && m_maxValue > 0)
{
float fltPercent = (float)m_floatValue / (float)m_maxValue;
if (fltPercent > 1f)
{
fltPercent = 1f;
}
g.DrawArc(new Pen(m_valueColor, m_valueWidth - m_valueMargin * 2), new RectangleF(new Point(m_valueWidth / 2 + m_valueMargin / 4, m_valueWidth / 2 + m_valueMargin / 4), new SizeF(intWidth - m_valueWidth - m_valueMargin / 2 + (m_valueMargin == 0 ? 0 : 1), intWidth - m_valueWidth - m_valueMargin / 2 + (m_valueMargin == 0 ? 0 : 1))), -90, fltPercent * 360);
string strValueText = m_valueType == ValueType.Percent ? fltPercent.ToString("0%") : m_floatValue.ToString("f2");
System.Drawing.SizeF _txtSize = g.MeasureString(strValueText, this.Font);
g.DrawString(strValueText, this.Font, new SolidBrush(this.ForeColor), new PointF((intWidth - _txtSize.Width) / 2 + 1, (intWidth - _txtSize.Height) / 2 + 1));
}
}
}
else
{
if (m_valueFloatOrInt == ValueFloatOrInt.Int)
{
if (m_intValue >= 0 && m_maxValue > 0)
{
int fltPercent = (int)m_intValue / (int)m_maxValue;
if (fltPercent > 1)
{
fltPercent = 1;
}
g.FillPie(new SolidBrush(m_valueColor), new Rectangle(m_valueMargin, m_valueMargin, intWidth - m_valueMargin * 2, intWidth - m_valueMargin * 2), -90, fltPercent * 360);
string strValueText = m_valueType == ValueType.Percent ? fltPercent.ToString("0%") : m_intValue.ToString();
System.Drawing.SizeF _txtSize = g.MeasureString(strValueText, this.Font);
g.DrawString(strValueText, this.Font, new SolidBrush(this.ForeColor), new PointF((intWidth - _txtSize.Width) / 2 + 1, (intWidth - _txtSize.Height) / 2 + 1));
}
}
else
{
if (m_floatValue >= 0 && m_maxValue > 0)
{
float fltPercent = (float)m_floatValue / (float)m_maxValue;
if (fltPercent > 1f)
{
fltPercent = 1f;
}
g.FillPie(new SolidBrush(m_valueColor), new Rectangle(m_valueMargin, m_valueMargin, intWidth - m_valueMargin * 2, intWidth - m_valueMargin * 2), -90, fltPercent * 360);
string strValueText = m_valueType == ValueType.Percent ? fltPercent.ToString("0%") : m_floatValue.ToString("f2");
System.Drawing.SizeF _txtSize = g.MeasureString(strValueText, this.Font);
g.DrawString(strValueText, this.Font, new SolidBrush(this.ForeColor), new PointF((intWidth - _txtSize.Width) / 2 + 1, (intWidth - _txtSize.Height) / 2 + 1));
}
}
}
}
}
public enum ShowType
{
/// <summary>
/// PPM
/// </summary>
PPM,
/// <summary>
/// 数值
/// </summary>
稼动率,
/// <summary>
///
/// </summary>
生产数
}
public enum ValueType
{
/// <summary>
/// 百分比
/// </summary>
Percent,
/// <summary>
/// 数值
/// </summary>
Absolute
}
public enum ValueFloatOrInt
{
/// <summary>
/// 整数
/// </summary>
Int,
/// <summary>
/// 浮点数
/// </summary>
Float
}
public enum ShowStyleType
{
/// <summary>
/// 圆环
/// </summary>
Ring,
/// <summary>
/// 扇形
/// </summary>
Sector
}
}
+120
View File
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("JinYuan.ControlLib")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JinYuan.ControlLib")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("1bb7ed33-d2cb-4cdd-ab39-f7f9ae948ca2")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
+433
View File
@@ -0,0 +1,433 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace JinYuan.ControlLib.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("JinYuan.ControlLib.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _2bg {
get {
object obj = ResourceManager.GetObject("2bg", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _4 {
get {
object obj = ResourceManager.GetObject("4", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _6 {
get {
object obj = ResourceManager.GetObject("6", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap _61 {
get {
object obj = ResourceManager.GetObject("61", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap bg2 {
get {
object obj = ResourceManager.GetObject("bg2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap big_arrow {
get {
object obj = ResourceManager.GetObject("big_arrow", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap big_arrow_l {
get {
object obj = ResourceManager.GetObject("big_arrow_l", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap big_box {
get {
object obj = ResourceManager.GetObject("big_box", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap big_box_l {
get {
object obj = ResourceManager.GetObject("big_box_l", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap big_box_s {
get {
object obj = ResourceManager.GetObject("big_box_s", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap big_box_super {
get {
object obj = ResourceManager.GetObject("big_box_super", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap caret_down {
get {
object obj = ResourceManager.GetObject("caret_down", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap caret_right {
get {
object obj = ResourceManager.GetObject("caret_right", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap Green {
get {
object obj = ResourceManager.GetObject("Green", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap LeftSelected {
get {
object obj = ResourceManager.GetObject("LeftSelected", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap LeftSelected3 {
get {
object obj = ResourceManager.GetObject("LeftSelected3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap LeftUnSelected {
get {
object obj = ResourceManager.GetObject("LeftUnSelected", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap LeftUnSelected2 {
get {
object obj = ResourceManager.GetObject("LeftUnSelected2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap LeftUnSelected3 {
get {
object obj = ResourceManager.GetObject("LeftUnSelected3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap loading {
get {
object obj = ResourceManager.GetObject("loading", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap Red {
get {
object obj = ResourceManager.GetObject("Red", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap RightSelected {
get {
object obj = ResourceManager.GetObject("RightSelected", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap RightSelected3 {
get {
object obj = ResourceManager.GetObject("RightSelected3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap RightUnSelected {
get {
object obj = ResourceManager.GetObject("RightUnSelected", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap RightUnSelected2 {
get {
object obj = ResourceManager.GetObject("RightUnSelected2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap RightUnSelected3 {
get {
object obj = ResourceManager.GetObject("RightUnSelected3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap Title {
get {
object obj = ResourceManager.GetObject("Title", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap TotalQty {
get {
object obj = ResourceManager.GetObject("TotalQty", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 开机时间 {
get {
object obj = ResourceManager.GetObject("开机时间", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 数字指标 {
get {
object obj = ResourceManager.GetObject("数字指标", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 星球地球科技蓝色转动动图压缩86_9 {
get {
object obj = ResourceManager.GetObject("星球地球科技蓝色转动动图压缩86.9", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 标题_03右 {
get {
object obj = ResourceManager.GetObject("标题_03右", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 标题_03左 {
get {
object obj = ResourceManager.GetObject("标题_03左", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 标题_04 {
get {
object obj = ResourceManager.GetObject("标题_04", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 组_178_拷贝 {
get {
object obj = ResourceManager.GetObject("组 178 拷贝", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 蓝色 {
get {
object obj = ResourceManager.GetObject("蓝色", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// 查找 System.Drawing.Bitmap 类型的本地化资源。
/// </summary>
internal static System.Drawing.Bitmap 运行时间 {
get {
object obj = ResourceManager.GetObject("运行时间", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}
@@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="2bg" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\2bg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="4" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\4.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="6" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\6.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="61" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\61.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="bg2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\bg2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="big_arrow" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\big_arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="big_arrow_l" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\big_arrow_l.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="big_box" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\big_box.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="big_box_l" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\big_box_l.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="big_box_s" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\big_box_s.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="big_box_super" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\big_box_super.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="caret_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\caret-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="caret_right" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\caret-right.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Green" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="LeftSelected" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\LeftSelected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="LeftSelected3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\LeftSelected3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="LeftUnSelected" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\LeftUnSelected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="LeftUnSelected2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\LeftUnSelected2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="LeftUnSelected3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\LeftUnSelected3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="loading" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\loading.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Red" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Red.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RightSelected" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\RightSelected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RightSelected3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\RightSelected3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RightUnSelected" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\RightUnSelected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RightUnSelected2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\常规按钮.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RightUnSelected3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\RightUnSelected3.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Title" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Title.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="TotalQty" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\TotalQty.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="开机时间" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\开机时间.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="数字指标" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\数字指标.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="星球地球科技蓝色转动动图压缩86.9" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\星球地球科技蓝色转动动图压缩86.9.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="标题_03右" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\标题_03右.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="标题_03左" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\标题_03.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="标题_04" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\标题_04.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="组 178 拷贝" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\组 178 拷贝.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="蓝色" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\蓝色.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="运行时间" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\运行时间.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Some files were not shown because too many files have changed in this diff Show More