添加项目文件。
@@ -0,0 +1,63 @@
|
||||
using AntdUI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Text.RegularExpressions;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
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
|
||||
BD5r4T4h7uvLAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="lbl_Title4.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_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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
using JinYuan.ControlLib.UCHelper;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
using AntdUI;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,233 @@
|
||||
using AntdUI;
|
||||
using System;
|
||||
using System.Drawing;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
using AntdUI;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,442 @@
|
||||
using AntdUI;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
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,40 @@
|
||||
// ***********************************************************************
|
||||
// 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.
|
||||
// ***********************************************************************
|
||||
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,45 @@
|
||||
// ***********************************************************************
|
||||
// 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.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,38 @@
|
||||
// ***********************************************************************
|
||||
// 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.Runtime.InteropServices;
|
||||
|
||||
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,79 @@
|
||||
// ***********************************************************************
|
||||
// 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.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,36 @@
|
||||
// ***********************************************************************
|
||||
// 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;
|
||||
|
||||
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,19 @@
|
||||
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,87 @@
|
||||
// ***********************************************************************
|
||||
// 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.Collections.Generic;
|
||||
|
||||
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; }
|
||||
}
|
||||
}
|
||||
@@ -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,815 @@
|
||||
// ***********************************************************************
|
||||
// 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 JinYuan.ControlLib.UCHelper;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
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<IDataGridViewRow>.</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,332 @@
|
||||
// ***********************************************************************
|
||||
// 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 JinYuan.ControlLib.UCHelper;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
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,475 @@
|
||||
// ***********************************************************************
|
||||
// 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 JinYuan.ControlLib.UCHelper;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
|
||||
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>
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,341 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Runtime.InteropServices;
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,622 @@
|
||||
// ***********************************************************************
|
||||
// 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.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Runtime.InteropServices;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
// ***********************************************************************
|
||||
// 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.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
// ***********************************************************************
|
||||
// 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.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
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,705 @@
|
||||
<?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="HML, Version=8.0.0.6, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>Lib\HML.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="HML.ComplexityPropertys, Version=8.0.0.6, Culture=neutral, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>Lib\HML.ComplexityPropertys.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="StatusExt.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="StatusExt.Designer.cs">
|
||||
<DependentUpon>StatusExt.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="TButton.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="TButton.Designer.cs">
|
||||
<DependentUpon>TButton.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="TitleButton.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="TitleButton.Designer.cs">
|
||||
<DependentUpon>TitleButton.cs</DependentUpon>
|
||||
</Compile>
|
||||
<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="TButton.resx">
|
||||
<DependentUpon>TButton.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="TitleButton.resx">
|
||||
<DependentUpon>TitleButton.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,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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
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; //采用系统默认方式绘制项
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
using System.ComponentModel;
|
||||
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左;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using System.ComponentModel;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAkcAAAApCAYAAAA/Io30AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
||||
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/s6uL5TAAAACXBIWXMAAAsRAAALEQF/ZF+RAAAT10lEQVR4Xu2dB9geVZmGd9fe
|
||||
C9J7713pIihSbVziiljX1cWyAroiLi67uq7uirogvYYiRQFBOoiRIpAQUoAQSO8kpIf0hMDZ5/7+8yRv
|
||||
hvn/RBeSy933ua47Z7755nznzJmZ8z7/O/N9+as/RbuVuZG/7oHmtk3itn/TeN22fSRu+6fWrXuSSqVS
|
||||
qVQq9TKoGoxoRjAnrwrwOhqWFYxJXedt2P7VgWb9nuqy/WsCsX5b3WWkUqlUKpXqWW3xswGxNsbliN9r
|
||||
qwcvR92e6Gy72lQbpGF2ADOCMXmteF2FZZuVtp30zvM+275evLHCMp9B/TajE9t0vTdXWH6D4DNj2667
|
||||
jFQqlUqlUj2rLX5WVsUDdJescF1wkoM6ruf43V3d2DbbRmKbnbqrTTRWG6UjNilvEm8J8Jr1bQPEMusZ
|
||||
RLZ7m3hn5R3irYL1vE8bzboMICaI7dYS61TWFnwG63nfbbvuMlKpVCqVSvWsZuysEFOJrTH+E3eJ5YAH
|
||||
IAbHGB7r8pr1juXUj0kOGyx7h2Zdt812tM9ngD3HCr5htak2SMN0gg4xEJgamxTAtLxdNE0OsMw6BgIz
|
||||
s67YWGxSyw0ERodBZqA8SB4Q2uQ92mH7rcTWtdxMUJ/2+fzYdmegIJVKpVKpVM9yzKxEY+MY7thP3N2w
|
||||
lryO8d8mB1gmphPbMVR4AOI9dZzgsLliO9drtk19tqMdw2ubq2Vxv+7KKy8aE+wgHaAzGBEG5JtiJ7GF
|
||||
2LSue5eImRw6TMkOMKjrC7Y/X+wvdhbb13XUZ6BscqjnNhlE2thR9BZHin3EnnXd5gLThYly2x7guiep
|
||||
VCqVSqW6E/Gy4rgfExTEWOLwNmIHcaC4WxC/ie3E+JjgiKaK2M42JEXYfg9xjsBg2Tc4E0Tsjm3zHr6D
|
||||
9vkMkiMnCuo1kyqr3Ryxk3QAt2aDc6E4U3xcYJIYMAbOLtId9s6xHhOzi+gv7hMnCEwSJgeTxMBhhDBE
|
||||
Tt8xqBsJ3t9XFDFbnC4wSQcJ6jNgGCzaXsEg1V1JpVKpVCrVjRQvozHC2BCDMSbE4G0FpmY/8QNBHCYe
|
||||
7ya2FE5QELupa1NF7McbbCeI/8cL4j8+AN/AZzsxgmcgdrttDBefizegjQ8LfAf+gztJ+AUbK3zKajdH
|
||||
dJaO4tToJK6RzplTxXsFWRxudTEYdBiD5B3EITI4ZHwYFHOlOFpgfKjP53MwMEh8Bjtvp3mo4GCYR8WX
|
||||
xWFiL4FBWk9Qj8FdvU4ylUqlUqm/UBEvBUkFTIqNETGZ2IwpOlb0ETEOE/tJkLCdTQ51MUbEY+I3poj4
|
||||
fZmI8X93gelx3MYzxMQICQ/ef484RUTf4YSIM1ZrzBxhVjA97Cg7FDsJvxAMHBkeHB2DyiBRz6aKATpY
|
||||
xMGBB8TJYm+BO/UOA5kq1mGeMFHxoMAccZb4oKBfmDPaZrA62aO6K6lUKpVKpbqR4qXvFJH14S4MSQ2S
|
||||
Idzh4W4N8bYZg7mDg3nBxOARMEXOGOEXdhXcJSLON2M/n8vnkz0i3mOK8A2+S8VncncKf9H0HBgy4j3+
|
||||
gnrE+zVmjnB3uDUGotlRg7vjWSJSYewgMEjcUnP2pzlAppc4QJCCY4cxOT443N/EfDUPjHlYHCUwUrRN
|
||||
f3G/aY5SqVQqlVqJiJfCd4q4a4M5IWY/KNriLhwjMDncGcLQkPEhdmN4uFN0qWiL9/ABgXlyzCd7hLGi
|
||||
beL+d0SbzwD8BP1zvF9j5ohOs+PcIyTD09ZZc4Y4ROAEMUd0HgfJs0FHiLZBMveKTwvqMFgMMCk9ni1i
|
||||
fdvBMbPEtwSZJ99aS3OUSqVSqdRKRLwUJBWcDOGLV362qDuOE+8TmBmSGRgjzA3r/WxRdxwuMDkkT0ii
|
||||
OKGCf/CzRd3BozT4Efq5Rs2RB4vO0Km2zhp2ip1ryxwxGG2DZBhMBpXBjZkjBp/1bQfHcBA5mB6szByl
|
||||
UqlUKrUKIl4KkgokF0gykGwg6dAWbw1JC5IXJDFIZpDUILnBepIdbXHekCwhaULyhDr4BZIq+AeSLG3+
|
||||
wpCkwY+QtKG/a9Qc0XnSWJicts4CaTDMDOaG9BidZrBIm5E+I43WNkhA+o00HAOMMSI9x46TriNtR/qu
|
||||
7eAAaT/Sf/SPtn0PMs1RKpVKpVIrEfFSOHNEvOcxFR5X4bGVtrgLPO7CYy8xc+SYz2MyPC7TFu+BmN2W
|
||||
OaJtHs9pPoQd4fEefwlrjWaOMBvsMA9A8SBUs6M8MMWDU5gTDA076KfWcYIYHgYPk9McIB7U4oEtzBMO
|
||||
kkGKD3XxmQwED341DwwPiPGgmB/s4uDQNg+Urd6n11OpVCqV+guV4qWfOeILTZgc4j1fdOILT3zxqe2B
|
||||
bH/bHCNF7CfeA5kn1pHh4QtXbQ9k8wUtvqjFF7bwF5gcfANt88UuvuCF+Wp7IJt+2S+sMXPk3znyDuPW
|
||||
Yidxd35anffJ+GCK+Eoe9cge4e54nx2Kg8NX+3CPDBA7ynaYIuozSHwWA4ch4yuD8aDwlUIGjq8Yxp8B
|
||||
oG7nlppIc5RKpVKp1EpEvBT+jSPHbeI9j9Lwkzn8dA4/oRPjsLM/xG/u2lAPs0IsJiYTm/1tc366J8Z/
|
||||
7hRxZ4ikBv6C2G3PgOnBnFGf2M9PBkXfQTLEpop6a8wcYXToMDuPo6NzPFvEjzJheugkqTDvIINLZzEp
|
||||
Njlkj7hHyKDwbBE/BoUpYnBIwTljRNaH+rTJa9/O48emOBg8W8SPUGGKOCi4U9+Kc9ud3zgSdU9SqVQq
|
||||
lUp1pxoznT3y1/mdEOHZIJ4t4g4Od2v8oDbGhwwPMTgmRjBI+AW8Ae9Tnzs83CXyg9rEf99Sw1/QJp4B
|
||||
g0TbrMcb4BtIkHB3yg9qY8Z8l4rt18jvHGE03GHMCk6Nn+9mwOgc5gVj4p1jYKnjQbaxoh4OkZ8Nt9Nk
|
||||
4PgMBhUThbFhJ2ObGC62YXt+rtz3NxkwBo72barcdscYQSqVSqVSqZ5VY2bTIDlBgYkhi4PJIeODSeK/
|
||||
82IdcRgjhCFyYoTSiREMFvEbk8SzRJgk/hsxGxxiPLGeesR/t23fQH3aYHtMEl+8Yh2+w2124n7dlVde
|
||||
NCYYKDpMB9gBOoNbM7xmvY1N53ZWLQGTw46yHQPFIOIIKXnNAFCf7WyqgGU+EydqF8mAYLAoec2gRlPl
|
||||
tn2g656kUqlUKpXqTiFuNuM+MRYjQtzlVlf8D+C5k0QsbiYoICZViPfUZ3uSIpSYrmZixPHfbTv+0z7t
|
||||
GGI/nsJtdmJ/3ZVXXmqsOVB0gkwQHQKW2QEPSKeDwnV57UFiOwaKgQB2ms/gvTZj4zapx3YMBIMMGCqn
|
||||
79z2CqbIpFKpVCqV6lkt8ZOYSmwlxhKDibsxwQHxrhGxnLjtujGGE6/ZDlPDZwCxnPX2EM26bps4z3Z4
|
||||
ABPjP2104v9qE43VRmNn6UiEdbzn7Vwv7iSwLTvCAIJ3yu93V9cDZIMFrh/bjnWXkUqlUqlUqme1xU/h
|
||||
OEysJu5igmKSg+WYpGDbZl3HcGI321LH9fjM6ANi3dj2KnmA1SYaq7ijPRG3j/h973zklazbIZVKpVKp
|
||||
VM9qi58Bx2HMiM2K6SnJEevG+sbmpqe6zfrGdUzdk1QqlUqlUqmXQZiLVSCakZeYk5UQt/3f1G2ybLtU
|
||||
KpVKpVKpVCqVSqVSqVQqlUqlUqlUKpVKpVKpVCqVSqVSqVQqlUqlUqlUKpVKpVKpVCqVSqVSqVQqlUql
|
||||
UqlUKpVKpVKpVCqVSqVSqVQqlUqlUqlUKpVKpVKpVCqVSqVSqVQqlUqlUqlUKpVKpf6Paq2z+yZJkiRJ
|
||||
kiSV1pVJkiRJkiT/X+GfV1de0wOvbeF1lbgMrw+leUPljQ3eFHhz5S0N3ireFnh7Ld8h3hl4V2XtCsvr
|
||||
ivVq6eX1xQaVjSobVzYVmwU2F1uKrcTWge3FdmLHys5iJ7GL2K2yh3h3Za/AvmI/cYA4ULyvcrB4f+UQ
|
||||
cag4QhwpPiQ+XPmI+HjlGPG34ljxKfEZ8TnxBfFF8ffiS+LL4h/E1yvfECeIE8U3xXcq3xWniu9Vvl/5
|
||||
YeXH4j/F6eKn4mfiF+IscbY4V5wvzhMXi0vEZaKXuKJyjbhWXCduENfX8ibxW3GzuK1yp/iduEf8Xvyh
|
||||
cp/4o3iw0kf0DTwiHhUDxaDK4+LJyhDxlBgqng4MFyPFKDFajBXjKxMqE8UzYlJlsni2MjUwPTBDzBSz
|
||||
ArMrz1XmiHlibi3Ngsr8ysLAosDiUMKSBs9Xlv4ZvBBovva6CO3Ebb0uvm/cN/ezuQ9xHz0WLLP/fh3H
|
||||
Bxg3l3E8PdYe+3gcgGMEHLNpgSktcLx9LvgcGSc4R8bUZc4llilHCM4rL3O+cR4OrrDMOQqcr/3FgEo/
|
||||
wXnt85xz/wFxby25HnoLXyt3ibsF188tgmvqVsH1xXX2m8qvBNeir0muT1+vvn4vFBdUuL651s+scP3/
|
||||
XPxEMC/8h/hRLZk3/k38q/CcwvxySuWfxLcEc9A/Vr4mmKeOrzB/MY8xn/2d+Lz4rDhOMN8x731CMA8y
|
||||
Hx4tPiqYJ48SzJ3AMnMpc+oHBfOr51vPv+8V+1f2EczRewvmbM/je4rdK7sK5nvmfs//xALHhm3FNhXi
|
||||
BxBLgLjiGLNJxTHIMWnDCvGKuGWIY+uIGOdgrYBjIyUQMx03DXEVmvGWGBzjMsSY7VgecYx3vI8+INL0
|
||||
EKbpM6L3MPYpK+NVoYzLcd0qgTlq64iJO+Cda+4weFCgOXBxYOOA2ww1DZEPWjRFPrg+2D74Phmaxiia
|
||||
oWiIfMKx7JPRJ6eNESfuFsInNGbIJzknPSf/DsIXBCUXCRcLpogLh4vIpogLDGyKfAFijLhADxI2RMDF
|
||||
y4V8eC0xRhiij4WSyeCTAmPEJMFkgSmyMbIpAk80mCImIEwRnCS+LU4WTFaewE4T/yKY2Jjg/l0w4TH5
|
||||
YYgwRkyK/y1sijBDhkn0IsHEyiTLZHu5uEpcLZiQfy1sim4UnsApb6/cIZjcmezBpuj+CgHiYdE0Rg4o
|
||||
5rGKAxCmaJiwMWKZYOXghSHCGBHUKAly0RzZFNkY2RxR2hRhhmLpoGtiQMYUgYO4Swf6aACiMbI5apqi
|
||||
iA0H2IxEg+Jl053Z8fruaG4fie+zHI0QNPvqfvp13EdgHLwcDZLHq4nHFDzWjHt3RonjwzKlTZLNULP0
|
||||
cYdonCk5b3wO2RQZv+Yc5Jx06fOTc5Vz1ucw5gizb5Nkg+TrgWVKrhH+iACbI19PXFu3CQxS/KMEMEZc
|
||||
l1yfVwpMEtfupYLrmOuZP3owR1zv59TyDIE5igaJP6CYL4A/qJhHIBokwBwBf5wxH/EHm03SV8VXBPMW
|
||||
cxjGCJNkg/TpCnMgBol5EGyQKIH5kvkTg8RcephgfrVBAuZe5mHAIDEv84crczTzNfO25/Bokvjjlznf
|
||||
Jsn4D2bHCWKG4wexxCaJGAM2SsQfiGbJJsl/zNsoUTrGOeZFoxTNUptJMtEoxRgcYzPEuB3jOTjOx9gf
|
||||
/QC0eYboLdpo8yMRmyHTtm5VwAi5XNEcLXnhxQKLl3bHCy9hUYOFz7+UBWL+kuUlzFuydFk5d/HSTjlH
|
||||
ZeS5BrMWPV9mL+oqZy5cznRYsGQZU+d3MUU8O295OXne4g7PzF1cJtVywpwuxs9Z1GHcc4vK2MCoWQs7
|
||||
jBQjZi4sw2Yu6PD0jC6GTJ/f4UmYNr8MFo9PnbeMQVPmlQHPzu3wyKQ5pd/kuaWPyj7PdPHQxOfKAxO6
|
||||
uF/cO3526T2ui3vGzupw1+iZ5U5xh7hl5Ixyq7h5xIzyW3HTiOnlxuHTyw3Dppfrhk4r1z49rVz91NRy
|
||||
jfjlkKnlyiFTyhVPTimXDZ5SLheXPvFsuURc+NjkcoE4X5w7cFI5e8CkcpY4o/8z5eePTiw/7Tex/OSR
|
||||
ieW/+k4oP+ozofxY5Q8fHt/hBw+NL99/aFw57cFx5XsPjC2niu/eP7accv+YcvJ9Y8q37x1TTvrD6HJS
|
||||
79HlxN6jOnz1dyPL1+8ZWb6i8kt3jejwxTuHl8/fMbx8QXzmtmEdjhOfunVoObbyyVuGlk/c/HQ5Rnz0
|
||||
pqfKx8TRguUjbxhSjhCUh13/ZDn0ui4O+fXgTvl+lXDQrwaXA699ohx4zRNl/6sfL/uJfa9azj6VPa98
|
||||
rLxb7HHFoLK7oITdLh9Udr18YNnlsoFlZ7FTr4FlR+Fy+0sHlB16DeiU214yoGwDF/cvWwe2EltetJzN
|
||||
L3y0w2aBTcXGF/TrsNH5/comF3S9Zhk2DGxw3nLWP++RVtY7twsvrxtY55wu4nJk7XP6LqO79d0Rt2/W
|
||||
ietjfyLud3zd3DfwOLBMGccnwth5XOPYxrHf4qKu49EkHjOOY+fYVjjWPu5mu3ou+NwAzhnOn3hOcZ7t
|
||||
9cvHynsqLO99VReci5ynB1yzHM5fzuODhc/vD9TycJ37cJSuA/Oh3wwpH7mx61rx9cO1BFxf5rO3Dyuf
|
||||
E/FaZJnr83hdq1/TNcu1e4KuYZa/8ftRnWWub65zrnng+v/nOhec9sdxnfkBPGcwfwDzyemaW34mmGeY
|
||||
b84UzD1w3qDJHZibLn68a55ivuo1uAvmsqs0rxnmO+a66zX3MQcyFwLzInMkc+Vto2aW24XnUMq7x3TN
|
||||
rcyzzLmGOdjzMXPzw3WeZt7uW+fv/prLDfM6c/wTmuuB+R868aDGhqemLyhDFSuIG8Nr/CCWAHFl9OyF
|
||||
ZYygdNwhDjkmwUTFKuKVYxdxjJgWmVZjHyVx0GUnPooZlRg7HVNNjLuOw8RnQ5yOOJ4bYrxp+oCmVzBt
|
||||
vqLdf3T5E3sUL68qz/8ZLH2R8sXyP91+H9jQCZNaAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -0,0 +1,134 @@
|
||||
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; }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,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;
|
||||
}
|
||||
}
|
||||
@@ -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); // 根据需要调整位置
|
||||
// }
|
||||
//}
|
||||
}
|
||||
@@ -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,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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
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
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
using System.Drawing;
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,456 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -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,35 @@
|
||||
using System.Reflection;
|
||||
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")]
|
||||
@@ -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>
|
||||
|
After Width: | Height: | Size: 316 KiB |
|
After Width: | Height: | Size: 334 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 521 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 389 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 8.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 10 KiB |