+UIBarChart:新增UIBarChart控件
This commit is contained in:
parent
2569f8d3b1
commit
7608291778
BIN
Bin/SunnyUI.dll
BIN
Bin/SunnyUI.dll
Binary file not shown.
BIN
Bin/SunnyUI.pdb
BIN
Bin/SunnyUI.pdb
Binary file not shown.
Binary file not shown.
Binary file not shown.
153
SunnyUI.Demo/Charts/FBarChart.Designer.cs
generated
Normal file
153
SunnyUI.Demo/Charts/FBarChart.Designer.cs
generated
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
namespace Sunny.UI.Demo.Charts
|
||||||
|
{
|
||||||
|
partial class FBarChart
|
||||||
|
{
|
||||||
|
/// <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.BarChart = new Sunny.UI.UIBarChart();
|
||||||
|
this.uiLine1 = new Sunny.UI.UILine();
|
||||||
|
this.uiSymbolButton1 = new Sunny.UI.UISymbolButton();
|
||||||
|
this.uiImageButton3 = new Sunny.UI.UIImageButton();
|
||||||
|
this.uiImageButton2 = new Sunny.UI.UIImageButton();
|
||||||
|
this.uiImageButton1 = new Sunny.UI.UIImageButton();
|
||||||
|
this.PagePanel.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// PagePanel
|
||||||
|
//
|
||||||
|
this.PagePanel.Controls.Add(this.uiSymbolButton1);
|
||||||
|
this.PagePanel.Controls.Add(this.uiImageButton3);
|
||||||
|
this.PagePanel.Controls.Add(this.uiImageButton2);
|
||||||
|
this.PagePanel.Controls.Add(this.uiImageButton1);
|
||||||
|
this.PagePanel.Controls.Add(this.uiLine1);
|
||||||
|
this.PagePanel.Controls.Add(this.BarChart);
|
||||||
|
this.PagePanel.Size = new System.Drawing.Size(800, 528);
|
||||||
|
//
|
||||||
|
// BarChart
|
||||||
|
//
|
||||||
|
this.BarChart.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
|
||||||
|
this.BarChart.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||||
|
this.BarChart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
|
||||||
|
this.BarChart.Location = new System.Drawing.Point(30, 48);
|
||||||
|
this.BarChart.Name = "BarChart";
|
||||||
|
this.BarChart.Option = null;
|
||||||
|
this.BarChart.Size = new System.Drawing.Size(670, 400);
|
||||||
|
this.BarChart.TabIndex = 0;
|
||||||
|
this.BarChart.Text = "uiBarChart1";
|
||||||
|
//
|
||||||
|
// uiLine1
|
||||||
|
//
|
||||||
|
this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||||
|
this.uiLine1.Location = new System.Drawing.Point(30, 20);
|
||||||
|
this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16);
|
||||||
|
this.uiLine1.Name = "uiLine1";
|
||||||
|
this.uiLine1.Size = new System.Drawing.Size(670, 20);
|
||||||
|
this.uiLine1.TabIndex = 20;
|
||||||
|
this.uiLine1.Text = "UIBarChart";
|
||||||
|
this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
//
|
||||||
|
// uiSymbolButton1
|
||||||
|
//
|
||||||
|
this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
|
this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||||
|
this.uiSymbolButton1.Location = new System.Drawing.Point(348, 466);
|
||||||
|
this.uiSymbolButton1.Name = "uiSymbolButton1";
|
||||||
|
this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
|
this.uiSymbolButton1.Size = new System.Drawing.Size(100, 27);
|
||||||
|
this.uiSymbolButton1.Symbol = 61952;
|
||||||
|
this.uiSymbolButton1.TabIndex = 28;
|
||||||
|
this.uiSymbolButton1.Text = "数据";
|
||||||
|
this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click);
|
||||||
|
//
|
||||||
|
// uiImageButton3
|
||||||
|
//
|
||||||
|
this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
|
this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDarkStyle;
|
||||||
|
this.uiImageButton3.Location = new System.Drawing.Point(242, 466);
|
||||||
|
this.uiImageButton3.Name = "uiImageButton3";
|
||||||
|
this.uiImageButton3.Size = new System.Drawing.Size(100, 27);
|
||||||
|
this.uiImageButton3.TabIndex = 27;
|
||||||
|
this.uiImageButton3.TabStop = false;
|
||||||
|
this.uiImageButton3.Text = " Dark";
|
||||||
|
this.uiImageButton3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
this.uiImageButton3.Click += new System.EventHandler(this.uiImageButton3_Click);
|
||||||
|
//
|
||||||
|
// uiImageButton2
|
||||||
|
//
|
||||||
|
this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
|
this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.ChartPlainStyle;
|
||||||
|
this.uiImageButton2.Location = new System.Drawing.Point(136, 466);
|
||||||
|
this.uiImageButton2.Name = "uiImageButton2";
|
||||||
|
this.uiImageButton2.Size = new System.Drawing.Size(100, 27);
|
||||||
|
this.uiImageButton2.TabIndex = 26;
|
||||||
|
this.uiImageButton2.TabStop = false;
|
||||||
|
this.uiImageButton2.Text = " Plain";
|
||||||
|
this.uiImageButton2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
this.uiImageButton2.Click += new System.EventHandler(this.uiImageButton2_Click);
|
||||||
|
//
|
||||||
|
// uiImageButton1
|
||||||
|
//
|
||||||
|
this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
|
this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDefaultStyle;
|
||||||
|
this.uiImageButton1.Location = new System.Drawing.Point(30, 466);
|
||||||
|
this.uiImageButton1.Name = "uiImageButton1";
|
||||||
|
this.uiImageButton1.Size = new System.Drawing.Size(100, 27);
|
||||||
|
this.uiImageButton1.TabIndex = 25;
|
||||||
|
this.uiImageButton1.TabStop = false;
|
||||||
|
this.uiImageButton1.Text = " Default";
|
||||||
|
this.uiImageButton1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||||
|
this.uiImageButton1.Click += new System.EventHandler(this.uiImageButton1_Click);
|
||||||
|
//
|
||||||
|
// FBarChart
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(800, 563);
|
||||||
|
this.Name = "FBarChart";
|
||||||
|
this.Symbol = 61568;
|
||||||
|
this.Text = "BarChart";
|
||||||
|
this.PagePanel.ResumeLayout(false);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private UIBarChart BarChart;
|
||||||
|
private UILine uiLine1;
|
||||||
|
private UISymbolButton uiSymbolButton1;
|
||||||
|
private UIImageButton uiImageButton3;
|
||||||
|
private UIImageButton uiImageButton2;
|
||||||
|
private UIImageButton uiImageButton1;
|
||||||
|
}
|
||||||
|
}
|
67
SunnyUI.Demo/Charts/FBarChart.cs
Normal file
67
SunnyUI.Demo/Charts/FBarChart.cs
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
namespace Sunny.UI.Demo.Charts
|
||||||
|
{
|
||||||
|
public partial class FBarChart : UITitlePage
|
||||||
|
{
|
||||||
|
public FBarChart()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void uiSymbolButton1_Click(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
UIBarOption option = new UIBarOption();
|
||||||
|
option.Title = new UITitle();
|
||||||
|
option.Title.Text = "SunnyUI";
|
||||||
|
option.Title.SubText = "BarChart";
|
||||||
|
|
||||||
|
//设置Legend
|
||||||
|
option.Legend = new UILegend();
|
||||||
|
option.Legend.Orient = UIOrient.Horizontal;
|
||||||
|
option.Legend.Top = UITopAlignment.Top;
|
||||||
|
option.Legend.Left = UILeftAlignment.Left;
|
||||||
|
option.Legend.AddData("Bar1");
|
||||||
|
option.Legend.AddData("Bar2");
|
||||||
|
|
||||||
|
var series = new UIBarSeries();
|
||||||
|
series.Name = "Bar1";
|
||||||
|
series.AddData(11);
|
||||||
|
series.AddData(15);
|
||||||
|
series.AddData(12);
|
||||||
|
series.AddData(14);
|
||||||
|
series.AddData(13);
|
||||||
|
option.Series.Add(series);
|
||||||
|
|
||||||
|
series = new UIBarSeries();
|
||||||
|
series.Name = "Bar2";
|
||||||
|
series.AddData(22);
|
||||||
|
series.AddData(21);
|
||||||
|
series.AddData(25);
|
||||||
|
series.AddData(23);
|
||||||
|
series.AddData(24);
|
||||||
|
option.Series.Add(series);
|
||||||
|
|
||||||
|
option.XAxis.Data.Add("Mon");
|
||||||
|
option.XAxis.Data.Add("Tue");
|
||||||
|
option.XAxis.Data.Add("Wed");
|
||||||
|
option.XAxis.Data.Add("Thu");
|
||||||
|
option.XAxis.Data.Add("Fri");
|
||||||
|
|
||||||
|
BarChart.SetOption(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void uiImageButton1_Click(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
BarChart.ChartStyleType = UIChartStyleType.Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void uiImageButton2_Click(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
BarChart.ChartStyleType = UIChartStyleType.Plain;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void uiImageButton3_Click(object sender, System.EventArgs e)
|
||||||
|
{
|
||||||
|
BarChart.ChartStyleType = UIChartStyleType.Dark;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
120
SunnyUI.Demo/Charts/FBarChart.resx
Normal file
120
SunnyUI.Demo/Charts/FBarChart.resx
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
13
SunnyUI.Demo/Charts/FPieChart.Designer.cs
generated
13
SunnyUI.Demo/Charts/FPieChart.Designer.cs
generated
@ -68,10 +68,11 @@
|
|||||||
this.PieChart.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
|
this.PieChart.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244)))));
|
||||||
this.PieChart.Font = new System.Drawing.Font("微软雅黑", 12F);
|
this.PieChart.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||||
this.PieChart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
|
this.PieChart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(54)))), ((int)(((byte)(54)))), ((int)(((byte)(54)))));
|
||||||
this.PieChart.Location = new System.Drawing.Point(26, 46);
|
this.PieChart.Location = new System.Drawing.Point(30, 48);
|
||||||
this.PieChart.Name = "PieChart";
|
this.PieChart.Name = "PieChart";
|
||||||
|
this.PieChart.Option = null;
|
||||||
this.PieChart.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
|
this.PieChart.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
|
||||||
this.PieChart.Size = new System.Drawing.Size(687, 399);
|
this.PieChart.Size = new System.Drawing.Size(670, 400);
|
||||||
this.PieChart.TabIndex = 20;
|
this.PieChart.TabIndex = 20;
|
||||||
this.PieChart.Text = "uiPieChart1";
|
this.PieChart.Text = "uiPieChart1";
|
||||||
//
|
//
|
||||||
@ -79,7 +80,7 @@
|
|||||||
//
|
//
|
||||||
this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDefaultStyle;
|
this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDefaultStyle;
|
||||||
this.uiImageButton1.Location = new System.Drawing.Point(26, 470);
|
this.uiImageButton1.Location = new System.Drawing.Point(30, 466);
|
||||||
this.uiImageButton1.Name = "uiImageButton1";
|
this.uiImageButton1.Name = "uiImageButton1";
|
||||||
this.uiImageButton1.Size = new System.Drawing.Size(100, 27);
|
this.uiImageButton1.Size = new System.Drawing.Size(100, 27);
|
||||||
this.uiImageButton1.TabIndex = 21;
|
this.uiImageButton1.TabIndex = 21;
|
||||||
@ -92,7 +93,7 @@
|
|||||||
//
|
//
|
||||||
this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.ChartPlainStyle;
|
this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.ChartPlainStyle;
|
||||||
this.uiImageButton2.Location = new System.Drawing.Point(132, 470);
|
this.uiImageButton2.Location = new System.Drawing.Point(136, 466);
|
||||||
this.uiImageButton2.Name = "uiImageButton2";
|
this.uiImageButton2.Name = "uiImageButton2";
|
||||||
this.uiImageButton2.Size = new System.Drawing.Size(100, 27);
|
this.uiImageButton2.Size = new System.Drawing.Size(100, 27);
|
||||||
this.uiImageButton2.TabIndex = 22;
|
this.uiImageButton2.TabIndex = 22;
|
||||||
@ -105,7 +106,7 @@
|
|||||||
//
|
//
|
||||||
this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDarkStyle;
|
this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.ChartDarkStyle;
|
||||||
this.uiImageButton3.Location = new System.Drawing.Point(238, 470);
|
this.uiImageButton3.Location = new System.Drawing.Point(242, 466);
|
||||||
this.uiImageButton3.Name = "uiImageButton3";
|
this.uiImageButton3.Name = "uiImageButton3";
|
||||||
this.uiImageButton3.Size = new System.Drawing.Size(100, 27);
|
this.uiImageButton3.Size = new System.Drawing.Size(100, 27);
|
||||||
this.uiImageButton3.TabIndex = 23;
|
this.uiImageButton3.TabIndex = 23;
|
||||||
@ -118,7 +119,7 @@
|
|||||||
//
|
//
|
||||||
this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
|
this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||||
this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
|
this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F);
|
||||||
this.uiSymbolButton1.Location = new System.Drawing.Point(344, 470);
|
this.uiSymbolButton1.Location = new System.Drawing.Point(348, 466);
|
||||||
this.uiSymbolButton1.Name = "uiSymbolButton1";
|
this.uiSymbolButton1.Name = "uiSymbolButton1";
|
||||||
this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton1.Size = new System.Drawing.Size(100, 27);
|
this.uiSymbolButton1.Size = new System.Drawing.Size(100, 27);
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
namespace Sunny.UI.Demo.Controls
|
||||||
|
|
||||||
namespace Sunny.UI.Demo.Controls
|
|
||||||
{
|
{
|
||||||
public partial class FPieChart : UITitlePage
|
public partial class FPieChart : UITitlePage
|
||||||
{
|
{
|
||||||
@ -24,8 +22,6 @@ namespace Sunny.UI.Demo.Controls
|
|||||||
PieChart.ChartStyleType = UIChartStyleType.Dark;
|
PieChart.ChartStyleType = UIChartStyleType.Dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void uiSymbolButton1_Click(object sender, System.EventArgs e)
|
private void uiSymbolButton1_Click(object sender, System.EventArgs e)
|
||||||
{
|
{
|
||||||
var option = new UIPieOption();
|
var option = new UIPieOption();
|
||||||
@ -40,7 +36,7 @@ namespace Sunny.UI.Demo.Controls
|
|||||||
option.ToolTip = new UIPieToolTip();
|
option.ToolTip = new UIPieToolTip();
|
||||||
|
|
||||||
//设置Legend
|
//设置Legend
|
||||||
option.Legend = new UIPieLegend();
|
option.Legend = new UILegend();
|
||||||
option.Legend.Orient = UIOrient.Vertical;
|
option.Legend.Orient = UIOrient.Vertical;
|
||||||
option.Legend.Top = UITopAlignment.Top;
|
option.Legend.Top = UITopAlignment.Top;
|
||||||
option.Legend.Left = UILeftAlignment.Left;
|
option.Legend.Left = UILeftAlignment.Left;
|
||||||
|
@ -120,4 +120,7 @@
|
|||||||
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>17, 17</value>
|
<value>17, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<value>25</value>
|
||||||
|
</metadata>
|
||||||
</root>
|
</root>
|
22
SunnyUI.Demo/Controls/FButton.Designer.cs
generated
22
SunnyUI.Demo/Controls/FButton.Designer.cs
generated
@ -713,7 +713,7 @@
|
|||||||
this.uiSymbolButton13.Name = "uiSymbolButton13";
|
this.uiSymbolButton13.Name = "uiSymbolButton13";
|
||||||
this.uiSymbolButton13.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton13.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton13.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
this.uiSymbolButton13.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
||||||
this.uiSymbolButton13.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton13.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton13.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton13.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton13.Symbol = 61518;
|
this.uiSymbolButton13.Symbol = 61518;
|
||||||
@ -727,7 +727,7 @@
|
|||||||
this.uiSymbolButton14.Name = "uiSymbolButton14";
|
this.uiSymbolButton14.Name = "uiSymbolButton14";
|
||||||
this.uiSymbolButton14.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton14.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton14.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
this.uiSymbolButton14.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
||||||
this.uiSymbolButton14.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton14.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton14.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton14.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton14.Symbol = 61514;
|
this.uiSymbolButton14.Symbol = 61514;
|
||||||
@ -741,7 +741,7 @@
|
|||||||
this.uiSymbolButton15.Name = "uiSymbolButton15";
|
this.uiSymbolButton15.Name = "uiSymbolButton15";
|
||||||
this.uiSymbolButton15.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton15.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton15.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
this.uiSymbolButton15.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
||||||
this.uiSymbolButton15.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton15.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton15.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton15.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton15.Symbol = 61513;
|
this.uiSymbolButton15.Symbol = 61513;
|
||||||
@ -755,7 +755,7 @@
|
|||||||
this.uiSymbolButton16.Name = "uiSymbolButton16";
|
this.uiSymbolButton16.Name = "uiSymbolButton16";
|
||||||
this.uiSymbolButton16.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton16.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton16.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
this.uiSymbolButton16.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
||||||
this.uiSymbolButton16.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton16.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton16.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton16.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton16.Symbol = 61517;
|
this.uiSymbolButton16.Symbol = 61517;
|
||||||
@ -769,7 +769,7 @@
|
|||||||
this.uiSymbolButton17.Name = "uiSymbolButton17";
|
this.uiSymbolButton17.Name = "uiSymbolButton17";
|
||||||
this.uiSymbolButton17.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton17.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton17.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
this.uiSymbolButton17.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
||||||
this.uiSymbolButton17.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton17.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton17.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton17.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton17.Symbol = 61516;
|
this.uiSymbolButton17.Symbol = 61516;
|
||||||
@ -807,7 +807,7 @@
|
|||||||
this.uiSymbolButton20.Name = "uiSymbolButton20";
|
this.uiSymbolButton20.Name = "uiSymbolButton20";
|
||||||
this.uiSymbolButton20.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton20.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton20.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom)));
|
this.uiSymbolButton20.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom)));
|
||||||
this.uiSymbolButton20.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton20.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton20.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton20.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton20.Symbol = 61522;
|
this.uiSymbolButton20.Symbol = 61522;
|
||||||
@ -821,7 +821,7 @@
|
|||||||
this.uiSymbolButton21.Name = "uiSymbolButton21";
|
this.uiSymbolButton21.Name = "uiSymbolButton21";
|
||||||
this.uiSymbolButton21.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton21.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton21.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
this.uiSymbolButton21.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
||||||
this.uiSymbolButton21.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton21.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton21.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton21.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton21.Symbol = 61520;
|
this.uiSymbolButton21.Symbol = 61520;
|
||||||
@ -835,7 +835,7 @@
|
|||||||
this.uiSymbolButton22.Name = "uiSymbolButton22";
|
this.uiSymbolButton22.Name = "uiSymbolButton22";
|
||||||
this.uiSymbolButton22.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton22.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton22.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
this.uiSymbolButton22.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
||||||
this.uiSymbolButton22.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton22.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton22.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton22.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton22.Symbol = 61508;
|
this.uiSymbolButton22.Symbol = 61508;
|
||||||
@ -849,7 +849,7 @@
|
|||||||
this.uiSymbolButton23.Name = "uiSymbolButton23";
|
this.uiSymbolButton23.Name = "uiSymbolButton23";
|
||||||
this.uiSymbolButton23.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton23.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton23.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
this.uiSymbolButton23.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
|
||||||
this.uiSymbolButton23.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton23.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton23.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton23.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton23.Symbol = 61544;
|
this.uiSymbolButton23.Symbol = 61544;
|
||||||
@ -863,7 +863,7 @@
|
|||||||
this.uiSymbolButton24.Name = "uiSymbolButton24";
|
this.uiSymbolButton24.Name = "uiSymbolButton24";
|
||||||
this.uiSymbolButton24.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
this.uiSymbolButton24.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
|
||||||
this.uiSymbolButton24.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom)));
|
this.uiSymbolButton24.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom)));
|
||||||
this.uiSymbolButton24.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
this.uiSymbolButton24.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right)
|
||||||
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
|
||||||
this.uiSymbolButton24.Size = new System.Drawing.Size(46, 35);
|
this.uiSymbolButton24.Size = new System.Drawing.Size(46, 35);
|
||||||
this.uiSymbolButton24.Symbol = 61473;
|
this.uiSymbolButton24.Symbol = 61473;
|
||||||
@ -921,7 +921,7 @@
|
|||||||
this.uiImageButton1.ImagePress = global::Sunny.UI.Demo.Properties.Resources.dashboard0;
|
this.uiImageButton1.ImagePress = global::Sunny.UI.Demo.Properties.Resources.dashboard0;
|
||||||
this.uiImageButton1.Location = new System.Drawing.Point(395, 438);
|
this.uiImageButton1.Location = new System.Drawing.Point(395, 438);
|
||||||
this.uiImageButton1.Name = "uiImageButton1";
|
this.uiImageButton1.Name = "uiImageButton1";
|
||||||
this.uiImageButton1.Size = new System.Drawing.Size(92, 35);
|
this.uiImageButton1.Size = new System.Drawing.Size(94, 35);
|
||||||
this.uiImageButton1.TabIndex = 49;
|
this.uiImageButton1.TabIndex = 49;
|
||||||
this.uiImageButton1.TabStop = false;
|
this.uiImageButton1.TabStop = false;
|
||||||
this.uiImageButton1.Text = "Home";
|
this.uiImageButton1.Text = "Home";
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Sunny.UI.Demo.Forms;
|
using Sunny.UI.Demo.Forms;
|
||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using Sunny.UI.Demo.Charts;
|
||||||
|
|
||||||
namespace Sunny.UI.Demo
|
namespace Sunny.UI.Demo
|
||||||
{
|
{
|
||||||
@ -50,6 +51,7 @@ namespace Sunny.UI.Demo
|
|||||||
parent = Aside.CreateNode("Charts", 61950, 24, pageIndex);
|
parent = Aside.CreateNode("Charts", 61950, 24, pageIndex);
|
||||||
//直接关联(默认自动生成GUID)
|
//直接关联(默认自动生成GUID)
|
||||||
Aside.CreateChildNode(parent, 61952, 24, AddPage(new FPieChart()));
|
Aside.CreateChildNode(parent, 61952, 24, AddPage(new FPieChart()));
|
||||||
|
Aside.CreateChildNode(parent, 61568, 24, AddPage(new FBarChart()));
|
||||||
|
|
||||||
Header.SetNodeSymbol(Header.Nodes[3], 61502);
|
Header.SetNodeSymbol(Header.Nodes[3], 61502);
|
||||||
var styles = UIStyles.PopularStyles();
|
var styles = UIStyles.PopularStyles();
|
||||||
|
@ -46,6 +46,12 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Charts\FBarChart.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Charts\FBarChart.Designer.cs">
|
||||||
|
<DependentUpon>FBarChart.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Controls\FAvatar.cs">
|
<Compile Include="Controls\FAvatar.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@ -270,6 +276,9 @@
|
|||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<EmbeddedResource Include="Charts\FBarChart.resx">
|
||||||
|
<DependentUpon>FBarChart.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Controls\FAvatar.resx">
|
<EmbeddedResource Include="Controls\FAvatar.resx">
|
||||||
<DependentUpon>FAvatar.cs</DependentUpon>
|
<DependentUpon>FAvatar.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
|
@ -1,43 +1,119 @@
|
|||||||
using System.Collections.Concurrent;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using Sunny.UI.Charts;
|
using System.Linq;
|
||||||
|
|
||||||
namespace Sunny.UI
|
namespace Sunny.UI
|
||||||
{
|
{
|
||||||
[ToolboxItem(false)]
|
[ToolboxItem(true)]
|
||||||
public class UIBarChart : UIChart
|
public class UIBarChart : UIChart
|
||||||
{
|
{
|
||||||
|
private bool NeedDraw;
|
||||||
|
|
||||||
|
protected override void OnSizeChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnSizeChanged(e);
|
||||||
|
CalcData(BarOption);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void CalcData(UIOption option)
|
protected override void CalcData(UIOption option)
|
||||||
{
|
{
|
||||||
Bars.Clear();
|
Bars.Clear();
|
||||||
|
NeedDraw = false;
|
||||||
UIBarOption o = (UIBarOption)option;
|
UIBarOption o = (UIBarOption)option;
|
||||||
if (o == null || o.Series == null || o.Series.Count == 0) return;
|
if (o == null || o.Series == null || o.SeriesCount == 0) return;
|
||||||
|
|
||||||
DrawOrigin = new Point(PieOption.Grid.Left,Height - PieOption.Grid.Bottom);
|
DrawOrigin = new Point(BarOption.Grid.Left, Height - BarOption.Grid.Bottom);
|
||||||
DrawSize = new Size(Width- PieOption.Grid.Left- PieOption.Grid.Right,
|
DrawSize = new Size(Width - BarOption.Grid.Left - BarOption.Grid.Right,
|
||||||
Height -PieOption.Grid.Top-PieOption.Grid.Bottom);
|
Height - BarOption.Grid.Top - BarOption.Grid.Bottom);
|
||||||
|
|
||||||
if (DrawSize.Width<=0 || DrawSize.Height<=0) return;
|
if (DrawSize.Width <= 0 || DrawSize.Height <= 0) return;
|
||||||
if (o.XAxis.Data.Count==0) return;
|
if (o.XAxis.Data.Count == 0) return;
|
||||||
|
|
||||||
DrawBarWidth = DrawSize.Width / o.XAxis.Data.Count;
|
NeedDraw = true;
|
||||||
|
DrawBarWidth = DrawSize.Width * 1.0f / o.XAxis.Data.Count;
|
||||||
|
|
||||||
|
double min = Double.MaxValue;
|
||||||
|
double max = double.MinValue;
|
||||||
|
foreach (var series in o.Series)
|
||||||
|
{
|
||||||
|
min = Math.Min(min, series.Data.Min());
|
||||||
|
max = Math.Max(max, series.Data.Max());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool minZero = false;
|
||||||
|
bool maxZero = false;
|
||||||
|
if (min > 0 && max > 0 && !o.YAxis.Scale)
|
||||||
|
{
|
||||||
|
min = 0;
|
||||||
|
minZero = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (min < 0 && max < 0 && !o.YAxis.Scale)
|
||||||
|
{
|
||||||
|
max = 0;
|
||||||
|
maxZero = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIChartHelper.CalcDegreeScale(min, max, o.YAxis.SplitNumber,
|
||||||
|
out int start, out int end, out double interval);
|
||||||
|
|
||||||
|
YAxisStart = start;
|
||||||
|
YAxisEnd = end;
|
||||||
|
YAxisInterval = interval;
|
||||||
|
|
||||||
|
float x1 = 100.0f / ((o.XAxis.Data.Count * 2) + o.XAxis.Data.Count + 1);
|
||||||
|
x1 = DrawSize.Width * x1 / 100.0f / o.SeriesCount;
|
||||||
|
float x2 = x1 * 2;
|
||||||
|
|
||||||
|
for (int i = 0; i < o.SeriesCount; i++)
|
||||||
|
{
|
||||||
|
float barX = DrawOrigin.X;
|
||||||
|
var series = o.Series[i];
|
||||||
|
Bars.TryAdd(i, new List<BarInfo>());
|
||||||
|
|
||||||
|
for (int j = 0; j < series.Data.Count; j++)
|
||||||
|
{
|
||||||
|
if (minZero)
|
||||||
|
{
|
||||||
|
float h = (float)(DrawSize.Height * series.Data[j] / (end * interval));
|
||||||
|
Bars[i].Add(new BarInfo()
|
||||||
|
{
|
||||||
|
Rect = new RectangleF(
|
||||||
|
barX + x1 * (i + 1) + x2 * i,
|
||||||
|
DrawOrigin.Y - h,
|
||||||
|
x2, h)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (maxZero)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
barX += DrawBarWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Point DrawOrigin;
|
private Point DrawOrigin;
|
||||||
private Size DrawSize;
|
private Size DrawSize;
|
||||||
private int DrawBarWidth;
|
private float DrawBarWidth;
|
||||||
private readonly ConcurrentDictionary<int, BarInfo> Bars = new ConcurrentDictionary<int, BarInfo>();
|
private int YAxisStart;
|
||||||
|
private int YAxisEnd;
|
||||||
|
private double YAxisInterval;
|
||||||
|
private readonly ConcurrentDictionary<int, List<BarInfo>> Bars = new ConcurrentDictionary<int, List<BarInfo>>();
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
private UIBarOption PieOption
|
private UIBarOption BarOption
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
UIOption option = Option ?? EmptyOption;
|
UIOption option = Option ?? EmptyOption;
|
||||||
UIBarOption o = (UIBarOption)option;
|
return (UIBarOption)option;
|
||||||
return o;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,17 +123,34 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
UIBarOption option = new UIBarOption();
|
UIBarOption option = new UIBarOption();
|
||||||
option.Title = new UITitle();
|
option.Title = new UITitle();
|
||||||
option.Title = new UITitle();
|
|
||||||
option.Title.Text = "SunnyUI";
|
option.Title.Text = "SunnyUI";
|
||||||
option.Title.SubText = "BarChart";
|
option.Title.SubText = "BarChart";
|
||||||
|
|
||||||
|
//设置Legend
|
||||||
|
option.Legend = new UILegend();
|
||||||
|
option.Legend.Orient = UIOrient.Horizontal;
|
||||||
|
option.Legend.Top = UITopAlignment.Top;
|
||||||
|
option.Legend.Left = UILeftAlignment.Left;
|
||||||
|
option.Legend.AddData("Bar1");
|
||||||
|
option.Legend.AddData("Bar2");
|
||||||
|
|
||||||
var series = new UIBarSeries();
|
var series = new UIBarSeries();
|
||||||
series.Name = "柱状图";
|
series.Name = "Bar1";
|
||||||
series.AddData(1);
|
series.AddData(1);
|
||||||
series.AddData(5);
|
series.AddData(5);
|
||||||
series.AddData(2);
|
series.AddData(2);
|
||||||
series.AddData(4);
|
series.AddData(4);
|
||||||
series.AddData(3);
|
series.AddData(3);
|
||||||
|
option.Series.Add(series);
|
||||||
|
|
||||||
|
series = new UIBarSeries();
|
||||||
|
series.Name = "Bar2";
|
||||||
|
series.AddData(2);
|
||||||
|
series.AddData(1);
|
||||||
|
series.AddData(5);
|
||||||
|
series.AddData(3);
|
||||||
|
series.AddData(4);
|
||||||
|
option.Series.Add(series);
|
||||||
|
|
||||||
option.XAxis.Data.Add("Mon");
|
option.XAxis.Data.Add("Mon");
|
||||||
option.XAxis.Data.Add("Tue");
|
option.XAxis.Data.Add("Tue");
|
||||||
@ -65,25 +158,102 @@ namespace Sunny.UI
|
|||||||
option.XAxis.Data.Add("Thu");
|
option.XAxis.Data.Add("Thu");
|
||||||
option.XAxis.Data.Add("Fri");
|
option.XAxis.Data.Add("Fri");
|
||||||
|
|
||||||
option.Series.Add(series);
|
|
||||||
emptyOption = option;
|
emptyOption = option;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawTitle(Graphics g, UITitle title)
|
protected override void DrawOption(Graphics g)
|
||||||
{
|
{
|
||||||
|
if (BarOption == null) return;
|
||||||
|
if (!NeedDraw) return;
|
||||||
|
DrawAxis(g);
|
||||||
|
DrawTitle(g, BarOption.Title);
|
||||||
|
DrawSeries(g, BarOption.Series);
|
||||||
|
DrawLegend(g, BarOption.Legend);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawSeries(Graphics g, UIPieOption o, List<UIPieSeries> series)
|
private void DrawAxis(Graphics g)
|
||||||
{
|
{
|
||||||
|
g.DrawLine(ChartStyle.ForeColor, DrawOrigin, new Point(DrawOrigin.X + DrawSize.Width, DrawOrigin.Y));
|
||||||
|
g.DrawLine(ChartStyle.ForeColor, DrawOrigin, new Point(DrawOrigin.X, DrawOrigin.Y - DrawSize.Height));
|
||||||
|
|
||||||
|
if (BarOption.XAxis.AxisTick.Show)
|
||||||
|
{
|
||||||
|
float start;
|
||||||
|
|
||||||
|
if (BarOption.XAxis.AxisTick.AlignWithLabel)
|
||||||
|
{
|
||||||
|
start = DrawOrigin.X + DrawBarWidth / 2.0f;
|
||||||
|
for (int i = 0; i < BarOption.XAxis.Data.Count; i++)
|
||||||
|
{
|
||||||
|
g.DrawLine(ChartStyle.ForeColor, start, DrawOrigin.Y, start, DrawOrigin.Y + BarOption.XAxis.AxisTick.Length);
|
||||||
|
start += DrawBarWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
start = DrawOrigin.X;
|
||||||
|
for (int i = 0; i <= BarOption.XAxis.Data.Count; i++)
|
||||||
|
{
|
||||||
|
g.DrawLine(ChartStyle.ForeColor, start, DrawOrigin.Y, start, DrawOrigin.Y + BarOption.XAxis.AxisTick.Length);
|
||||||
|
start += DrawBarWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BarOption.XAxis.AxisLabel.Show)
|
||||||
|
{
|
||||||
|
float start = DrawOrigin.X + DrawBarWidth / 2.0f;
|
||||||
|
foreach (var data in BarOption.XAxis.Data)
|
||||||
|
{
|
||||||
|
SizeF sf = g.MeasureString(data, SubFont);
|
||||||
|
g.DrawString(data, SubFont, ChartStyle.ForeColor, start - sf.Width / 2.0f, DrawOrigin.Y + BarOption.XAxis.AxisTick.Length);
|
||||||
|
start += DrawBarWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BarOption.YAxis.AxisTick.Show)
|
||||||
|
{
|
||||||
|
float start = DrawOrigin.Y;
|
||||||
|
float DrawBarHeight = DrawSize.Height * 1.0f / (YAxisEnd - YAxisStart);
|
||||||
|
for (int i = YAxisStart; i <= YAxisEnd; i++)
|
||||||
|
{
|
||||||
|
g.DrawLine(ChartStyle.ForeColor, DrawOrigin.X, start, DrawOrigin.X - BarOption.YAxis.AxisTick.Length, start);
|
||||||
|
start -= DrawBarHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (BarOption.YAxis.AxisLabel.Show)
|
||||||
|
{
|
||||||
|
float start = DrawOrigin.Y;
|
||||||
|
float DrawBarHeight = DrawSize.Height * 1.0f / (YAxisEnd - YAxisStart);
|
||||||
|
int idx = 0;
|
||||||
|
for (int i = YAxisStart; i <= YAxisEnd; i++)
|
||||||
|
{
|
||||||
|
string label = BarOption.YAxis.AxisLabel.GetLabel(i * YAxisInterval, idx);
|
||||||
|
SizeF sf = g.MeasureString(label, SubFont);
|
||||||
|
g.DrawString(label, SubFont, ChartStyle.ForeColor, DrawOrigin.X - BarOption.YAxis.AxisTick.Length - sf.Width, start - sf.Height / 2.0f);
|
||||||
|
start -= DrawBarHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawLegend(Graphics g, UIPieLegend legend)
|
private void DrawSeries(Graphics g, List<UIBarSeries> series)
|
||||||
{
|
{
|
||||||
|
if (series == null || series.Count == 0) return;
|
||||||
|
|
||||||
|
for (int i = 0; i < Bars.Count; i++)
|
||||||
|
{
|
||||||
|
var bars = Bars[i];
|
||||||
|
foreach (var info in bars)
|
||||||
|
{
|
||||||
|
g.FillRectangle(ChartStyle.SeriesColor[i], info.Rect);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class BarInfo
|
internal class BarInfo
|
||||||
{
|
{
|
||||||
public Rectangle Rect { get; set; }
|
public RectangleF Rect { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,12 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Sunny.UI.Charts
|
namespace Sunny.UI
|
||||||
{
|
{
|
||||||
public class UIBarOption : UIOption, IDisposable
|
public class UIBarOption : UIOption, IDisposable
|
||||||
{
|
{
|
||||||
public UITitle Title;
|
|
||||||
|
|
||||||
public UICategoryAxis XAxis { get; set; } = new UICategoryAxis();
|
public UICategoryAxis XAxis { get; set; } = new UICategoryAxis();
|
||||||
|
|
||||||
public UIValueAxis YAxis { get; set; } = new UIValueAxis();
|
public UIValueAxis YAxis { get; set; } = new UIValueAxis();
|
||||||
@ -18,7 +16,6 @@ namespace Sunny.UI.Charts
|
|||||||
//public UIPieLegend Legend;
|
//public UIPieLegend Legend;
|
||||||
|
|
||||||
//public UIPieToolTip ToolTip;
|
//public UIPieToolTip ToolTip;
|
||||||
|
|
||||||
|
|
||||||
public void AddSeries(UIBarSeries series)
|
public void AddSeries(UIBarSeries series)
|
||||||
{
|
{
|
||||||
@ -50,6 +47,15 @@ namespace Sunny.UI.Charts
|
|||||||
/// 在类目轴中无效。
|
/// 在类目轴中无效。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int SplitNumber { get; set; } = 5;
|
public int SplitNumber { get; set; } = 5;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否是脱离 0 值比例。设置成 true 后坐标刻度不会强制包含零刻度。在双数值轴的散点图中比较有用。
|
||||||
|
/// </summary>
|
||||||
|
public bool Scale { get; set; }
|
||||||
|
|
||||||
|
public UIAxisTick AxisTick = new UIAxisTick();
|
||||||
|
|
||||||
|
public UIAxisLabel AxisLabel = new UIAxisLabel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UICategoryAxis : UIAxis
|
public class UICategoryAxis : UIAxis
|
||||||
@ -65,6 +71,64 @@ namespace Sunny.UI.Charts
|
|||||||
{
|
{
|
||||||
Data.Clear();
|
Data.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class UIAxisLabel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 是否显示刻度标签。
|
||||||
|
/// </summary>
|
||||||
|
public bool Show { get; set; } = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 坐标轴刻度的显示间隔,在类目轴中有效。默认同 axisLabel.interval 一样。
|
||||||
|
/// 默认会采用标签不重叠的策略间隔显示标签。
|
||||||
|
/// 可以设置成 0 强制显示所有标签。
|
||||||
|
/// 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。
|
||||||
|
/// </summary>
|
||||||
|
public int Interval { get; set; } = 0;
|
||||||
|
|
||||||
|
public delegate string DoFormatter(double value,int index);
|
||||||
|
|
||||||
|
public event DoFormatter Formatter;
|
||||||
|
|
||||||
|
public string GetLabel(double value, int index)
|
||||||
|
{
|
||||||
|
return Formatter != null ? Formatter?.Invoke(value, index) : value.ToString("F"+ DecimalCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 小数位个数,Formatter不为空时以Formatter为准
|
||||||
|
/// </summary>
|
||||||
|
public int DecimalCount { get; set; } = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class UIAxisTick
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 类目轴中在为 true 的时候有效,可以保证刻度线和标签对齐。
|
||||||
|
/// </summary>
|
||||||
|
public bool AlignWithLabel { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否显示坐标轴刻度。
|
||||||
|
/// </summary>
|
||||||
|
public bool Show { get; set; } = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 坐标轴刻度的长度。
|
||||||
|
/// </summary>
|
||||||
|
public int Length { get; set; } = 5;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 坐标轴刻度的显示间隔,在类目轴中有效。默认同 axisLabel.interval 一样。
|
||||||
|
/// 默认会采用标签不重叠的策略间隔显示标签。
|
||||||
|
/// 可以设置成 0 强制显示所有标签。
|
||||||
|
/// 如果设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此类推。
|
||||||
|
/// </summary>
|
||||||
|
public int Interval { get; set; } = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UIValueAxis : UIAxis
|
public class UIValueAxis : UIAxis
|
||||||
@ -80,7 +144,7 @@ namespace Sunny.UI.Charts
|
|||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public UISeriesType Type => UISeriesType.Bar;
|
public UISeriesType Type => UISeriesType.Bar;
|
||||||
|
|
||||||
public List<double> Data = new List<double>();
|
public List<double> Data = new List<double>();
|
||||||
|
|
||||||
public void AddData(double value)
|
public void AddData(double value)
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
* 2020-06-06: V2.2.5 增加文件说明
|
* 2020-06-06: V2.2.5 增加文件说明
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Drawing2D;
|
using System.Drawing.Drawing2D;
|
||||||
@ -54,7 +55,7 @@ namespace Sunny.UI
|
|||||||
tip.MouseEnter += Tip_MouseEnter;
|
tip.MouseEnter += Tip_MouseEnter;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Tip_MouseEnter(object sender, System.EventArgs e)
|
private void Tip_MouseEnter(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
tip.Visible = false;
|
tip.Visible = false;
|
||||||
}
|
}
|
||||||
@ -178,7 +179,7 @@ namespace Sunny.UI
|
|||||||
[DefaultValue(8)]
|
[DefaultValue(8)]
|
||||||
public int TextInterval { get; set; } = 8;
|
public int TextInterval { get; set; } = 8;
|
||||||
|
|
||||||
public Font subFont = UIFontColor.SubFont;
|
private Font subFont = UIFontColor.SubFont;
|
||||||
|
|
||||||
[DefaultValue(typeof(Font), "微软雅黑, 9pt")]
|
[DefaultValue(typeof(Font), "微软雅黑, 9pt")]
|
||||||
public Font SubFont
|
public Font SubFont
|
||||||
@ -203,5 +204,112 @@ namespace Sunny.UI
|
|||||||
Invalidate();
|
Invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void DrawTitle(Graphics g, UITitle title)
|
||||||
|
{
|
||||||
|
if (title == null) return;
|
||||||
|
SizeF sf = g.MeasureString(title.Text, Font);
|
||||||
|
float left = 0;
|
||||||
|
switch (title.Left)
|
||||||
|
{
|
||||||
|
case UILeftAlignment.Left: left = TextInterval; break;
|
||||||
|
case UILeftAlignment.Center: left = (Width - sf.Width) / 2.0f; break;
|
||||||
|
case UILeftAlignment.Right: left = Width - TextInterval - sf.Width; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
float top = 0;
|
||||||
|
switch (title.Top)
|
||||||
|
{
|
||||||
|
case UITopAlignment.Top: top = TextInterval; break;
|
||||||
|
case UITopAlignment.Center: top = (Height - sf.Height) / 2.0f; break;
|
||||||
|
case UITopAlignment.Bottom: top = Height - TextInterval - sf.Height; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g.DrawString(title.Text, Font, ChartStyle.ForeColor, left, top);
|
||||||
|
|
||||||
|
SizeF sfs = g.MeasureString(title.SubText, SubFont);
|
||||||
|
switch (title.Left)
|
||||||
|
{
|
||||||
|
case UILeftAlignment.Left: left = TextInterval; break;
|
||||||
|
case UILeftAlignment.Center: left = (Width - sfs.Width) / 2.0f; break;
|
||||||
|
case UILeftAlignment.Right: left = Width - TextInterval - sf.Width; break;
|
||||||
|
}
|
||||||
|
switch (title.Top)
|
||||||
|
{
|
||||||
|
case UITopAlignment.Top: top = top + sf.Height; break;
|
||||||
|
case UITopAlignment.Center: top = top + sf.Height; break;
|
||||||
|
case UITopAlignment.Bottom: top = top - sf.Height; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
g.DrawString(title.SubText, SubFont, ChartStyle.ForeColor, left, top);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void DrawLegend(Graphics g, UILegend legend)
|
||||||
|
{
|
||||||
|
if (legend == null) return;
|
||||||
|
|
||||||
|
float totalHeight = 0;
|
||||||
|
float totalWidth = 0;
|
||||||
|
float maxWidth = 0;
|
||||||
|
float oneHeight = 0;
|
||||||
|
|
||||||
|
foreach (var data in legend.Data)
|
||||||
|
{
|
||||||
|
SizeF sf = g.MeasureString(data, LegendFont);
|
||||||
|
totalHeight += sf.Height;
|
||||||
|
totalWidth += sf.Width;
|
||||||
|
totalWidth += 20;
|
||||||
|
|
||||||
|
maxWidth = Math.Max(sf.Width, maxWidth);
|
||||||
|
oneHeight = sf.Height;
|
||||||
|
}
|
||||||
|
|
||||||
|
float top = 0;
|
||||||
|
float left = 0;
|
||||||
|
|
||||||
|
if (legend.Orient == UIOrient.Horizontal)
|
||||||
|
{
|
||||||
|
if (legend.Left == UILeftAlignment.Left) left = TextInterval;
|
||||||
|
if (legend.Left == UILeftAlignment.Center) left = (Width - totalWidth) / 2.0f;
|
||||||
|
if (legend.Left == UILeftAlignment.Right) left = Width - totalWidth - TextInterval;
|
||||||
|
|
||||||
|
if (legend.Top == UITopAlignment.Top) top = TextInterval;
|
||||||
|
if (legend.Top == UITopAlignment.Center) top = (Height - oneHeight) / 2.0f;
|
||||||
|
if (legend.Top == UITopAlignment.Bottom) top = Height - oneHeight - TextInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (legend.Orient == UIOrient.Vertical)
|
||||||
|
{
|
||||||
|
if (legend.Left == UILeftAlignment.Left) left = TextInterval;
|
||||||
|
if (legend.Left == UILeftAlignment.Center) left = (Width - maxWidth) / 2.0f - 10;
|
||||||
|
if (legend.Left == UILeftAlignment.Right) left = Width - maxWidth - TextInterval - 20;
|
||||||
|
|
||||||
|
if (legend.Top == UITopAlignment.Top) top = TextInterval;
|
||||||
|
if (legend.Top == UITopAlignment.Center) top = (Height - totalHeight) / 2.0f;
|
||||||
|
if (legend.Top == UITopAlignment.Bottom) top = Height - totalHeight - TextInterval;
|
||||||
|
}
|
||||||
|
|
||||||
|
float startleft = left;
|
||||||
|
float starttop = top;
|
||||||
|
for (int i = 0; i < legend.DataCount; i++)
|
||||||
|
{
|
||||||
|
var data = legend.Data[i];
|
||||||
|
SizeF sf = g.MeasureString(data, LegendFont);
|
||||||
|
if (legend.Orient == UIOrient.Horizontal)
|
||||||
|
{
|
||||||
|
g.FillRoundRectangle(ChartStyle.SeriesColor[i % ChartStyle.ColorCount], (int)startleft, (int)top + 1, 18, (int)oneHeight - 2, 5);
|
||||||
|
g.DrawString(data, LegendFont, ChartStyle.ForeColor, startleft + 20, top);
|
||||||
|
startleft += 20;
|
||||||
|
startleft += sf.Width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (legend.Orient == UIOrient.Vertical)
|
||||||
|
{
|
||||||
|
g.FillRoundRectangle(ChartStyle.SeriesColor[i % ChartStyle.ColorCount], (int)left, (int)starttop + 1, 18, (int)oneHeight - 2, 5);
|
||||||
|
g.DrawString(data, LegendFont, ChartStyle.ForeColor, left + 20, starttop);
|
||||||
|
starttop += oneHeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,18 +20,39 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Sunny.UI
|
namespace Sunny.UI
|
||||||
{
|
{
|
||||||
public abstract class UIOption
|
public abstract class UIOption
|
||||||
{
|
{
|
||||||
|
public UITitle Title;
|
||||||
|
public UILegend Legend;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class UILegend
|
||||||
|
{
|
||||||
|
public UILeftAlignment Left { get; set; } = UILeftAlignment.Center;
|
||||||
|
|
||||||
|
public UITopAlignment Top { get; set; } = UITopAlignment.Top;
|
||||||
|
|
||||||
|
public UIOrient Orient { get; set; } = UIOrient.Vertical;
|
||||||
|
|
||||||
|
public readonly List<string> Data = new List<string>();
|
||||||
|
|
||||||
|
public int DataCount => Data.Count;
|
||||||
|
|
||||||
|
public void AddData(string data)
|
||||||
|
{
|
||||||
|
Data.Add(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UIChartGrid
|
public class UIChartGrid
|
||||||
{
|
{
|
||||||
public int Left { get; set; } = 80;
|
public int Left { get; set; } = 60;
|
||||||
public int Right { get; set; } = 80;
|
public int Right { get; set; } = 60;
|
||||||
public int Top { get; set; } = 40;
|
public int Top { get; set; } = 60;
|
||||||
public int Bottom { get; set; } = 40;
|
public int Bottom { get; set; } = 40;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,51 +54,18 @@ namespace Sunny.UI
|
|||||||
emptyOption = option;
|
emptyOption = option;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnSizeChanged(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnSizeChanged(e);
|
||||||
|
CalcData(PieOption);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void DrawOption(Graphics g)
|
protected override void DrawOption(Graphics g)
|
||||||
{
|
{
|
||||||
if (PieOption == null) return;
|
if (PieOption == null) return;
|
||||||
if (PieOption.Title != null) DrawTitle(g, PieOption.Title);
|
DrawTitle(g, PieOption.Title);
|
||||||
if (PieOption.Series.Count > 0) DrawSeries(g, PieOption.Series);
|
DrawSeries(g, PieOption.Series);
|
||||||
if (PieOption.Legend != null) DrawLegend(g, PieOption.Legend);
|
DrawLegend(g, PieOption.Legend);
|
||||||
}
|
|
||||||
|
|
||||||
private void DrawTitle(Graphics g, UITitle title)
|
|
||||||
{
|
|
||||||
if (title == null) return;
|
|
||||||
SizeF sf = g.MeasureString(title.Text, Font);
|
|
||||||
float left = 0;
|
|
||||||
switch (title.Left)
|
|
||||||
{
|
|
||||||
case UILeftAlignment.Left: left = TextInterval; break;
|
|
||||||
case UILeftAlignment.Center: left = (Width - sf.Width) / 2.0f; break;
|
|
||||||
case UILeftAlignment.Right: left = Width - TextInterval - sf.Width; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
float top = 0;
|
|
||||||
switch (title.Top)
|
|
||||||
{
|
|
||||||
case UITopAlignment.Top: top = TextInterval; break;
|
|
||||||
case UITopAlignment.Center: top = (Height - sf.Height) / 2.0f; break;
|
|
||||||
case UITopAlignment.Bottom: top = Height - TextInterval - sf.Height; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
g.DrawString(title.Text, Font, ChartStyle.ForeColor, left, top);
|
|
||||||
|
|
||||||
SizeF sfs = g.MeasureString(title.SubText, SubFont);
|
|
||||||
switch (title.Left)
|
|
||||||
{
|
|
||||||
case UILeftAlignment.Left: left = TextInterval; break;
|
|
||||||
case UILeftAlignment.Center: left = (Width - sfs.Width) / 2.0f; break;
|
|
||||||
case UILeftAlignment.Right: left = Width - TextInterval - sf.Width; break;
|
|
||||||
}
|
|
||||||
switch (title.Top)
|
|
||||||
{
|
|
||||||
case UITopAlignment.Top: top = top + sf.Height; break;
|
|
||||||
case UITopAlignment.Center: top = top + sf.Height; break;
|
|
||||||
case UITopAlignment.Bottom: top = top - sf.Height; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
g.DrawString(title.SubText, subFont, ChartStyle.ForeColor, left, top);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void CalcData(UIOption option)
|
protected override void CalcData(UIOption option)
|
||||||
@ -176,73 +143,7 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
private readonly ConcurrentDictionary<int, ConcurrentDictionary<int, Angle>> Angles = new ConcurrentDictionary<int, ConcurrentDictionary<int, Angle>>();
|
private readonly ConcurrentDictionary<int, ConcurrentDictionary<int, Angle>> Angles = new ConcurrentDictionary<int, ConcurrentDictionary<int, Angle>>();
|
||||||
|
|
||||||
private void DrawLegend(Graphics g, UIPieLegend legend)
|
|
||||||
{
|
|
||||||
if (legend == null) return;
|
|
||||||
|
|
||||||
float totalHeight = 0;
|
|
||||||
float totalWidth = 0;
|
|
||||||
float maxWidth = 0;
|
|
||||||
float oneHeight = 0;
|
|
||||||
|
|
||||||
foreach (var data in legend.Data)
|
|
||||||
{
|
|
||||||
SizeF sf = g.MeasureString(data, LegendFont);
|
|
||||||
totalHeight += sf.Height;
|
|
||||||
totalWidth += sf.Width;
|
|
||||||
totalWidth += 20;
|
|
||||||
|
|
||||||
maxWidth = Math.Max(sf.Width, maxWidth);
|
|
||||||
oneHeight = sf.Height;
|
|
||||||
}
|
|
||||||
|
|
||||||
float top = 0;
|
|
||||||
float left = 0;
|
|
||||||
|
|
||||||
if (legend.Orient == UIOrient.Horizontal)
|
|
||||||
{
|
|
||||||
if (legend.Left == UILeftAlignment.Left) left = TextInterval;
|
|
||||||
if (legend.Left == UILeftAlignment.Center) left = (Width - totalWidth) / 2.0f;
|
|
||||||
if (legend.Left == UILeftAlignment.Right) left = Width - totalWidth - TextInterval;
|
|
||||||
|
|
||||||
if (legend.Top == UITopAlignment.Top) top = TextInterval;
|
|
||||||
if (legend.Top == UITopAlignment.Center) top = (Height - oneHeight) / 2.0f;
|
|
||||||
if (legend.Top == UITopAlignment.Bottom) top = Height - oneHeight - TextInterval;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (legend.Orient == UIOrient.Vertical)
|
|
||||||
{
|
|
||||||
if (legend.Left == UILeftAlignment.Left) left = TextInterval;
|
|
||||||
if (legend.Left == UILeftAlignment.Center) left = (Width - maxWidth) / 2.0f - 10;
|
|
||||||
if (legend.Left == UILeftAlignment.Right) left = Width - maxWidth - TextInterval - 20;
|
|
||||||
|
|
||||||
if (legend.Top == UITopAlignment.Top) top = TextInterval;
|
|
||||||
if (legend.Top == UITopAlignment.Center) top = (Height - totalHeight) / 2.0f;
|
|
||||||
if (legend.Top == UITopAlignment.Bottom) top = Height - totalHeight - TextInterval;
|
|
||||||
}
|
|
||||||
|
|
||||||
float startleft = left;
|
|
||||||
float starttop = top;
|
|
||||||
for (int i = 0; i < legend.DataCount; i++)
|
|
||||||
{
|
|
||||||
var data = legend.Data[i];
|
|
||||||
SizeF sf = g.MeasureString(data, LegendFont);
|
|
||||||
if (legend.Orient == UIOrient.Horizontal)
|
|
||||||
{
|
|
||||||
g.FillRoundRectangle(ChartStyle.SeriesColor[i % ChartStyle.ColorCount], (int)startleft, (int)top + 1, 18, (int)oneHeight - 2, 5);
|
|
||||||
g.DrawString(data, LegendFont, ChartStyle.ForeColor, startleft + 20, top);
|
|
||||||
startleft += 20;
|
|
||||||
startleft += sf.Width;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (legend.Orient == UIOrient.Vertical)
|
|
||||||
{
|
|
||||||
g.FillRoundRectangle(ChartStyle.SeriesColor[i % ChartStyle.ColorCount], (int)left, (int)starttop + 1, 18, (int)oneHeight - 2, 5);
|
|
||||||
g.DrawString(data, LegendFont, ChartStyle.ForeColor, left + 20, starttop);
|
|
||||||
starttop += oneHeight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Browsable(false)]
|
[Browsable(false)]
|
||||||
private UIPieOption PieOption
|
private UIPieOption PieOption
|
||||||
|
@ -5,12 +5,8 @@ namespace Sunny.UI
|
|||||||
{
|
{
|
||||||
public class UIPieOption : UIOption, IDisposable
|
public class UIPieOption : UIOption, IDisposable
|
||||||
{
|
{
|
||||||
public UITitle Title;
|
|
||||||
|
|
||||||
public List<UIPieSeries> Series = new List<UIPieSeries>();
|
public List<UIPieSeries> Series = new List<UIPieSeries>();
|
||||||
|
|
||||||
public UIPieLegend Legend;
|
|
||||||
|
|
||||||
public UIPieToolTip ToolTip;
|
public UIPieToolTip ToolTip;
|
||||||
|
|
||||||
public void AddSeries(UIPieSeries series)
|
public void AddSeries(UIPieSeries series)
|
||||||
@ -34,12 +30,8 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
public class UIDoughnutPieOption : UIOption, IDisposable
|
public class UIDoughnutPieOption : UIOption, IDisposable
|
||||||
{
|
{
|
||||||
public UITitle Title;
|
|
||||||
|
|
||||||
public List<UIDoughnutPieSeries> Series = new List<UIDoughnutPieSeries>();
|
public List<UIDoughnutPieSeries> Series = new List<UIDoughnutPieSeries>();
|
||||||
|
|
||||||
public UIPieLegend Legend;
|
|
||||||
|
|
||||||
public UIPieToolTip ToolTip;
|
public UIPieToolTip ToolTip;
|
||||||
|
|
||||||
public void AddSeries(UIDoughnutPieSeries series)
|
public void AddSeries(UIDoughnutPieSeries series)
|
||||||
@ -68,24 +60,6 @@ namespace Sunny.UI
|
|||||||
public string ValueFormat { get; set; } = "F0";
|
public string ValueFormat { get; set; } = "F0";
|
||||||
}
|
}
|
||||||
|
|
||||||
public class UIPieLegend
|
|
||||||
{
|
|
||||||
public UILeftAlignment Left { get; set; } = UILeftAlignment.Center;
|
|
||||||
|
|
||||||
public UITopAlignment Top { get; set; } = UITopAlignment.Top;
|
|
||||||
|
|
||||||
public UIOrient Orient { get; set; } = UIOrient.Vertical;
|
|
||||||
|
|
||||||
public readonly List<string> Data = new List<string>();
|
|
||||||
|
|
||||||
public int DataCount => Data.Count;
|
|
||||||
|
|
||||||
public void AddData(string data)
|
|
||||||
{
|
|
||||||
Data.Add(data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class UIPieSeries : IDisposable
|
public class UIPieSeries : IDisposable
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
@ -47,6 +47,25 @@ namespace Sunny.UI
|
|||||||
Helper = new UITabControlHelper(this);
|
Helper = new UITabControlHelper(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
|
||||||
|
{
|
||||||
|
if (ForbidCtrlTab)
|
||||||
|
{
|
||||||
|
switch (keyData)
|
||||||
|
{
|
||||||
|
case (Keys.Tab | Keys.Control):
|
||||||
|
//组合键在调试时,不容易捕获;可以先按住Ctrl键(此时在断点处已经捕获),然后按下Tab键,都释放后,再进入断点处单步向下执行;
|
||||||
|
//此时会分两次进入断点,第一次(好像)是处理Ctrl键,第二次处理组合键
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return base.ProcessCmdKey(ref msg, keyData);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DefaultValue(true)]
|
||||||
|
public bool ForbidCtrlTab { get; set; } = true;
|
||||||
|
|
||||||
public void SelectPage(int pageIndex)
|
public void SelectPage(int pageIndex)
|
||||||
{
|
{
|
||||||
Helper.SelectPage(pageIndex);
|
Helper.SelectPage(pageIndex);
|
||||||
|
@ -35,7 +35,7 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
public readonly Guid Guid = Guid.NewGuid();
|
public readonly Guid Guid = Guid.NewGuid();
|
||||||
|
|
||||||
public UIStatusForm StatusForm;
|
private UIStatusForm statusForm;
|
||||||
|
|
||||||
public UIForm()
|
public UIForm()
|
||||||
{
|
{
|
||||||
@ -75,15 +75,12 @@ namespace Sunny.UI
|
|||||||
/// <param name="value">当前进度值</param>
|
/// <param name="value">当前进度值</param>
|
||||||
public void ShowStatus(string title, string desc, int max = 100, int value = 0)
|
public void ShowStatus(string title, string desc, int max = 100, int value = 0)
|
||||||
{
|
{
|
||||||
if (StatusForm == null)
|
|
||||||
{
|
|
||||||
StatusForm = new UIStatusForm();
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusForm.Style = Style;
|
StatusForm.Style = Style;
|
||||||
StatusForm.Show(title, desc, max, value);
|
StatusForm.Show(title, desc, max, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public UIStatusForm StatusForm => statusForm ?? (statusForm = new UIStatusForm());
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 隐藏进度窗口
|
/// 隐藏进度窗口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -100,6 +97,14 @@ namespace Sunny.UI
|
|||||||
StatusForm.StepIt();
|
StatusForm.StepIt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(null)]
|
||||||
|
[Browsable(false)]
|
||||||
|
public string StatusDescription
|
||||||
|
{
|
||||||
|
get => StatusForm?.Description;
|
||||||
|
set => StatusForm.Description = value;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnBackColorChanged(EventArgs e)
|
protected override void OnBackColorChanged(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnBackColorChanged(e);
|
base.OnBackColorChanged(e);
|
||||||
|
@ -85,5 +85,12 @@ namespace Sunny.UI
|
|||||||
processBar.Value = value;
|
processBar.Value = value;
|
||||||
Show();
|
Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string Description
|
||||||
|
{
|
||||||
|
get => labelDescription.Text;
|
||||||
|
set => labelDescription.Text = value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,9 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
protected UIStyle _style = UIStyle.Blue;
|
protected UIStyle _style = UIStyle.Blue;
|
||||||
|
|
||||||
public UIStatusForm StatusForm;
|
private UIStatusForm statusForm;
|
||||||
|
|
||||||
|
public UIStatusForm StatusForm => statusForm ?? (statusForm = new UIStatusForm());
|
||||||
|
|
||||||
public UIPage()
|
public UIPage()
|
||||||
{
|
{
|
||||||
@ -172,8 +174,6 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
public void ShowStatus(string title, string desc, int max = 100, int value = 0)
|
public void ShowStatus(string title, string desc, int max = 100, int value = 0)
|
||||||
{
|
{
|
||||||
if (StatusForm == null) StatusForm = new UIStatusForm();
|
|
||||||
|
|
||||||
StatusForm.Style = Style;
|
StatusForm.Style = Style;
|
||||||
StatusForm.Show(title, desc, max, value);
|
StatusForm.Show(title, desc, max, value);
|
||||||
}
|
}
|
||||||
@ -188,6 +188,14 @@ namespace Sunny.UI
|
|||||||
StatusForm.StepIt();
|
StatusForm.StepIt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DefaultValue(null)]
|
||||||
|
[Browsable(false)]
|
||||||
|
public string StatusDescription
|
||||||
|
{
|
||||||
|
get => StatusForm?.Description;
|
||||||
|
set => StatusForm.Description = value;
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnControlAdded(ControlEventArgs e)
|
protected override void OnControlAdded(ControlEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnControlAdded(e);
|
base.OnControlAdded(e);
|
||||||
|
@ -199,6 +199,26 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void DrawLine(this Graphics g, Color color, float x1, float y1, float x2, float y2, bool smooth = false)
|
||||||
|
{
|
||||||
|
using (Pen pen = new Pen(color))
|
||||||
|
{
|
||||||
|
g.Smooth(smooth);
|
||||||
|
g.DrawLine(pen, x1, y1, x2, y2);
|
||||||
|
g.Smooth(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void DrawLine(this Graphics g, Color color, PointF pt1, PointF pt2, bool smooth = false)
|
||||||
|
{
|
||||||
|
using (Pen pen = new Pen(color))
|
||||||
|
{
|
||||||
|
g.Smooth(smooth);
|
||||||
|
g.DrawLine(pen, pt1, pt2);
|
||||||
|
g.Smooth(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void DrawArc(this Graphics g, Color color, int x, int y, int width, int height, int startAngle, int sweepAngle, bool smooth = true)
|
public static void DrawArc(this Graphics g, Color color, int x, int y, int width, int height, int startAngle, int sweepAngle, bool smooth = true)
|
||||||
{
|
{
|
||||||
using (Pen pen = new Pen(color))
|
using (Pen pen = new Pen(color))
|
||||||
|
@ -36,6 +36,14 @@ namespace Sunny.UI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static class SystemEx
|
public static class SystemEx
|
||||||
{
|
{
|
||||||
|
public static void ConsoleWriteLine(this object obj, string preText = "")
|
||||||
|
{
|
||||||
|
if (preText != "")
|
||||||
|
Console.WriteLine(preText + ": " + obj);
|
||||||
|
else
|
||||||
|
Console.WriteLine(obj.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delays the specified ms.
|
/// Delays the specified ms.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -67,6 +75,7 @@ namespace Sunny.UI
|
|||||||
|
|
||||||
using (Process process = Process.Start(startInfo))
|
using (Process process = Process.Start(startInfo))
|
||||||
{
|
{
|
||||||
|
if (process == null) return string.Empty;
|
||||||
using (StreamReader reader = process.StandardOutput)
|
using (StreamReader reader = process.StandardOutput)
|
||||||
{
|
{
|
||||||
str = reader.ReadToEnd();
|
str = reader.ReadToEnd();
|
||||||
@ -81,41 +90,41 @@ namespace Sunny.UI
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Byte To KB
|
/// Byte To KB
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="bytevalue">Byte value</param>
|
/// <param name="byteValue">Byte value</param>
|
||||||
/// <returns>KB</returns>
|
/// <returns>KB</returns>
|
||||||
public static long ToKB(this long bytevalue)
|
public static long ToKB(this long byteValue)
|
||||||
{
|
{
|
||||||
return (long)(bytevalue / 1024.0);
|
return (long)(byteValue / 1024.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Byte To MB
|
/// Byte To MB
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="bytevalue">Byte value</param>
|
/// <param name="byteValue">Byte value</param>
|
||||||
/// <returns>MB</returns>
|
/// <returns>MB</returns>
|
||||||
public static long ToMB(this long bytevalue)
|
public static long ToMB(this long byteValue)
|
||||||
{
|
{
|
||||||
return (long)(bytevalue / 1024.0 / 1024.0);
|
return (long)(byteValue / 1024.0 / 1024.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Byte To GB
|
/// Byte To GB
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="bytevalue">Byte value</param>
|
/// <param name="byteValue">Byte value</param>
|
||||||
/// <returns>GB</returns>
|
/// <returns>GB</returns>
|
||||||
public static long ToGB(this long bytevalue)
|
public static long ToGB(this long byteValue)
|
||||||
{
|
{
|
||||||
return (long)(bytevalue / 1024.0 / 1024.0 / 1024.0);
|
return (long)(byteValue / 1024.0 / 1024.0 / 1024.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Byte To TB
|
/// Byte To TB
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="bytevalue">Byte value</param>
|
/// <param name="byteValue">Byte value</param>
|
||||||
/// <returns>TB</returns>
|
/// <returns>TB</returns>
|
||||||
public static long ToTB(this long bytevalue)
|
public static long ToTB(this long byteValue)
|
||||||
{
|
{
|
||||||
return (long)(bytevalue / 1024.0 / 1024.0 / 1024.0 / 1024.0);
|
return (long)(byteValue / 1024.0 / 1024.0 / 1024.0 / 1024.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -130,22 +139,22 @@ namespace Sunny.UI
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据文件名或者磁盘名获取磁盘信息
|
/// 根据文件名或者磁盘名获取磁盘信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="diskname">文件名或者磁盘名(取第一个字符)</param>
|
/// <param name="diskName">文件名或者磁盘名(取第一个字符)</param>
|
||||||
/// <returns>磁盘信息</returns>
|
/// <returns>磁盘信息</returns>
|
||||||
public static DriveInfo Disk(string diskname)
|
public static DriveInfo Disk(string diskName)
|
||||||
{
|
{
|
||||||
if (diskname.IsNullOrEmpty())
|
if (diskName.IsNullOrEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
diskname = (diskname.Left(1) + ":\\").ToUpper();
|
diskName = (diskName.Left(1) + ":\\").ToUpper();
|
||||||
DriveInfo[] diInfos = DriveInfo.GetDrives();
|
DriveInfo[] drives = DriveInfo.GetDrives();
|
||||||
for (int i = 0; i < diInfos.Count(); i++)
|
foreach (var drive in drives)
|
||||||
{
|
{
|
||||||
if (diInfos[i].Name.ToUpper() == diskname)
|
if (drive.Name.ToUpper() == diskName)
|
||||||
{
|
{
|
||||||
return diInfos[i];
|
return drive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,11 +164,11 @@ namespace Sunny.UI
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 根据文件名或者磁盘名判断磁盘是否存在
|
/// 根据文件名或者磁盘名判断磁盘是否存在
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="diskname">文件名或者磁盘名(取第一个字符)</param>
|
/// <param name="diskName">文件名或者磁盘名(取第一个字符)</param>
|
||||||
/// <returns>磁盘是否存在</returns>
|
/// <returns>磁盘是否存在</returns>
|
||||||
public static bool DiskExist(this string diskname)
|
public static bool DiskExist(this string diskName)
|
||||||
{
|
{
|
||||||
return Disk(diskname) != null;
|
return Disk(diskName) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -216,19 +225,21 @@ namespace Sunny.UI
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 将程序调至前台
|
/// 将程序调至前台
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="showstyle">显示风格</param>
|
/// <param name="showStyle">显示风格</param>
|
||||||
[EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted = true)]
|
[EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted = true)]
|
||||||
public static void BringToFront(int showstyle = SW_SHOW)
|
public static void BringToFront(int showStyle = SW_SHOW)
|
||||||
{
|
{
|
||||||
Process instance = RunningInstance();
|
Process instance = RunningInstance();
|
||||||
HandleRunningInstance(instance, showstyle);
|
HandleRunningInstance(instance, showStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
[EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted = true)]
|
[EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted = true)]
|
||||||
private static Process RunningInstance()
|
public static Process RunningInstance()
|
||||||
{
|
{
|
||||||
Process currentProcess = Process.GetCurrentProcess();
|
Process currentProcess = Process.GetCurrentProcess();
|
||||||
Process[] processes = Process.GetProcessesByName(currentProcess.ProcessName);
|
Process[] processes = Process.GetProcessesByName(currentProcess.ProcessName);
|
||||||
|
if (currentProcess.MainModule == null) return null;
|
||||||
|
|
||||||
//遍历与当前进程名称相同的进程列表
|
//遍历与当前进程名称相同的进程列表
|
||||||
return processes.Where(process => process.Id != currentProcess.Id).FirstOrDefault(
|
return processes.Where(process => process.Id != currentProcess.Id).FirstOrDefault(
|
||||||
process => string.Equals(
|
process => string.Equals(
|
||||||
@ -258,9 +269,9 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
|
|
||||||
[EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted = true)]
|
[EnvironmentPermissionAttribute(SecurityAction.LinkDemand, Unrestricted = true)]
|
||||||
private static void HandleRunningInstance(Process instance, int showstyle)
|
private static void HandleRunningInstance(Process instance, int showStyle)
|
||||||
{
|
{
|
||||||
ShowWindowAsync(instance.MainWindowHandle, showstyle); //调用api函数,正常显示窗口
|
ShowWindowAsync(instance.MainWindowHandle, showStyle); //调用api函数,正常显示窗口
|
||||||
SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端。
|
SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端。
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,10 +289,10 @@ namespace Sunny.UI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="frm">窗体</param>
|
/// <param name="frm">窗体</param>
|
||||||
/// <param name="monitor">显示器序号</param>
|
/// <param name="monitor">显示器序号</param>
|
||||||
/// <param name="showmax">最大化</param>
|
/// <param name="showMax">最大化</param>
|
||||||
/// <param name="frmleft">左边距离</param>
|
/// <param name="left">左边距离</param>
|
||||||
/// <param name="frmtop">顶部距离</param>
|
/// <param name="top">顶部距离</param>
|
||||||
public static void ShowOnMonitor(this Form frm, int monitor, bool showmax = true, int frmleft = 0, int frmtop = 0)
|
public static void ShowOnMonitor(this Form frm, int monitor, bool showMax = true, int left = 0, int top = 0)
|
||||||
{
|
{
|
||||||
Screen[] sc = Screen.AllScreens;
|
Screen[] sc = Screen.AllScreens;
|
||||||
if (monitor >= sc.Length)
|
if (monitor >= sc.Length)
|
||||||
@ -290,8 +301,8 @@ namespace Sunny.UI
|
|||||||
}
|
}
|
||||||
|
|
||||||
frm.StartPosition = FormStartPosition.Manual;
|
frm.StartPosition = FormStartPosition.Manual;
|
||||||
frm.Location = new Point(sc[monitor].Bounds.Left + frmleft, sc[monitor].Bounds.Top + frmtop);
|
frm.Location = new Point(sc[monitor].Bounds.Left + left, sc[monitor].Bounds.Top + top);
|
||||||
frm.WindowState = showmax ? FormWindowState.Maximized : FormWindowState.Normal;
|
frm.WindowState = showMax ? FormWindowState.Maximized : FormWindowState.Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
[DllImport("User32.dll")]
|
[DllImport("User32.dll")]
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
+ 增加; - 删除; * 修改
|
+ 增加; - 删除; * 修改
|
||||||
|
|
||||||
|
2020.06.15
|
||||||
|
+UIBarChart:新增UIBarChart控件
|
||||||
|
|
||||||
2020.06.14
|
2020.06.14
|
||||||
* 重构图表控件,准备开发UIBarChart
|
* 重构图表控件,准备开发UIBarChart
|
||||||
* UITextBox:增加EnterAsTab
|
* UITextBox:增加EnterAsTab
|
||||||
|
Loading…
x
Reference in New Issue
Block a user