* 页面框架支持通过PageIndex和PageGuid关联

This commit is contained in:
Sunny 2020-06-09 20:15:39 +08:00
parent 1dfc3f6317
commit c84fbd645d
47 changed files with 1075 additions and 651 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -134,6 +134,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(828, 552);
this.Name = "FPieChart";
this.Symbol = 61952;
this.Text = "PieChart";
this.PagePanel.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();

View File

@ -81,24 +81,20 @@
//
// uiAvatar3
//
this.uiAvatar3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
this.uiAvatar3.Font = new System.Drawing.Font("微软雅黑", 12F);
this.uiAvatar3.Icon = Sunny.UI.UIAvatar.UIIcon.Text;
this.uiAvatar3.Location = new System.Drawing.Point(174, 50);
this.uiAvatar3.Name = "uiAvatar3";
this.uiAvatar3.Size = new System.Drawing.Size(60, 60);
this.uiAvatar3.Style = Sunny.UI.UIStyle.Custom;
this.uiAvatar3.TabIndex = 2;
this.uiAvatar3.Text = "Avatar";
//
// uiAvatar4
//
this.uiAvatar4.Font = new System.Drawing.Font("微软雅黑", 12F);
this.uiAvatar4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(255)))));
this.uiAvatar4.Location = new System.Drawing.Point(362, 50);
this.uiAvatar4.Name = "uiAvatar4";
this.uiAvatar4.Size = new System.Drawing.Size(60, 60);
this.uiAvatar4.Style = Sunny.UI.UIStyle.Custom;
this.uiAvatar4.Symbol = 61715;
this.uiAvatar4.TabIndex = 3;
this.uiAvatar4.Text = "uiAvatar4";
@ -199,6 +195,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FAvatar";
this.Symbol = 61447;
this.Text = "Avatar";
this.Controls.SetChildIndex(this.PagePanel, 0);
this.PagePanel.ResumeLayout(false);

View File

@ -713,7 +713,7 @@
this.uiSymbolButton13.Name = "uiSymbolButton13";
this.uiSymbolButton13.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
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)));
this.uiSymbolButton13.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton13.Symbol = 61518;
@ -727,7 +727,7 @@
this.uiSymbolButton14.Name = "uiSymbolButton14";
this.uiSymbolButton14.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
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)));
this.uiSymbolButton14.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton14.Symbol = 61514;
@ -741,7 +741,7 @@
this.uiSymbolButton15.Name = "uiSymbolButton15";
this.uiSymbolButton15.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
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)));
this.uiSymbolButton15.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton15.Symbol = 61513;
@ -755,7 +755,7 @@
this.uiSymbolButton16.Name = "uiSymbolButton16";
this.uiSymbolButton16.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
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)));
this.uiSymbolButton16.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton16.Symbol = 61517;
@ -769,7 +769,7 @@
this.uiSymbolButton17.Name = "uiSymbolButton17";
this.uiSymbolButton17.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
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)));
this.uiSymbolButton17.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton17.Symbol = 61516;
@ -807,7 +807,7 @@
this.uiSymbolButton20.Name = "uiSymbolButton20";
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.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)));
this.uiSymbolButton20.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton20.Symbol = 61522;
@ -821,7 +821,7 @@
this.uiSymbolButton21.Name = "uiSymbolButton21";
this.uiSymbolButton21.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
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)));
this.uiSymbolButton21.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton21.Symbol = 61520;
@ -835,7 +835,7 @@
this.uiSymbolButton22.Name = "uiSymbolButton22";
this.uiSymbolButton22.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
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)));
this.uiSymbolButton22.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton22.Symbol = 61508;
@ -849,7 +849,7 @@
this.uiSymbolButton23.Name = "uiSymbolButton23";
this.uiSymbolButton23.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
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)));
this.uiSymbolButton23.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton23.Symbol = 61544;
@ -863,7 +863,7 @@
this.uiSymbolButton24.Name = "uiSymbolButton24";
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.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)));
this.uiSymbolButton24.Size = new System.Drawing.Size(46, 35);
this.uiSymbolButton24.Symbol = 61473;
@ -874,7 +874,6 @@
this.uiSwitch1.Active = true;
this.uiSwitch1.ActiveText = "On";
this.uiSwitch1.Font = new System.Drawing.Font("微软雅黑", 12F);
this.uiSwitch1.InActiveColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));
this.uiSwitch1.InActiveText = "Off";
this.uiSwitch1.Location = new System.Drawing.Point(30, 441);
this.uiSwitch1.Name = "uiSwitch1";
@ -896,7 +895,6 @@
// uiSwitch2
//
this.uiSwitch2.Font = new System.Drawing.Font("微软雅黑", 12F);
this.uiSwitch2.InActiveColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));
this.uiSwitch2.Location = new System.Drawing.Point(112, 441);
this.uiSwitch2.Name = "uiSwitch2";
this.uiSwitch2.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
@ -961,7 +959,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 534);
this.Name = "FButton";
this.PageIndex = 1001;
this.Symbol = 61640;
this.Text = "Button";
this.PagePanel.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit();

View File

@ -123,6 +123,7 @@
this.uiCheckBoxGroup1.Location = new System.Drawing.Point(30, 91);
this.uiCheckBoxGroup1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiCheckBoxGroup1.Name = "uiCheckBoxGroup1";
this.uiCheckBoxGroup1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
this.uiCheckBoxGroup1.Size = new System.Drawing.Size(670, 211);
this.uiCheckBoxGroup1.TabIndex = 41;
this.uiCheckBoxGroup1.Text = "UICheckBoxGroup";
@ -134,7 +135,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 556);
this.Name = "FCheckBox";
this.PageIndex = 1002;
this.Symbol = 61770;
this.Text = "CheckBox";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -227,6 +227,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FCombobox";
this.Symbol = 61776;
this.Text = "Combobox";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -29,9 +29,9 @@
private void InitializeComponent()
{
this.uiButton1 = new Sunny.UI.UIButton();
this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip();
this.uiButton2 = new Sunny.UI.UIButton();
this.uiLine1 = new Sunny.UI.UILine();
this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip();
this.PagePanel.SuspendLayout();
this.SuspendLayout();
//
@ -52,6 +52,12 @@
this.uiButton1.TabIndex = 0;
this.uiButton1.Text = "右键菜单";
//
// uiContextMenuStrip1
//
this.uiContextMenuStrip1.Font = new System.Drawing.Font("微软雅黑", 12F);
this.uiContextMenuStrip1.Name = "uiContextMenuStrip1";
this.uiContextMenuStrip1.Size = new System.Drawing.Size(61, 4);
//
// uiButton2
//
this.uiButton2.Cursor = System.Windows.Forms.Cursors.Hand;
@ -74,18 +80,13 @@
this.uiLine1.Text = "UIContextMenuStrip";
this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// uiContextMenuStrip1
//
this.uiContextMenuStrip1.Font = new System.Drawing.Font("微软雅黑", 12F);
this.uiContextMenuStrip1.Name = "uiContextMenuStrip1";
this.uiContextMenuStrip1.Size = new System.Drawing.Size(61, 4);
//
// FContextMenuStrip
//
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FContextMenuStrip";
this.Symbol = 62104;
this.Text = "ContextMenuStrip";
this.Controls.SetChildIndex(this.PagePanel, 0);
this.PagePanel.ResumeLayout(false);

View File

@ -31,6 +31,7 @@
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
this.uiDataGridView1 = new Sunny.UI.UIDataGridView();
this.PagePanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.uiDataGridView1)).BeginInit();
@ -60,6 +61,14 @@
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
this.uiDataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2;
this.uiDataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 12F);
dataGridViewCellStyle3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(155)))), ((int)(((byte)(200)))), ((int)(((byte)(255)))));
dataGridViewCellStyle3.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.uiDataGridView1.DefaultCellStyle = dataGridViewCellStyle3;
this.uiDataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.uiDataGridView1.EnableHeadersVisualStyles = false;
this.uiDataGridView1.Font = new System.Drawing.Font("微软雅黑", 12F);
@ -69,15 +78,14 @@
this.uiDataGridView1.Name = "uiDataGridView1";
this.uiDataGridView1.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255)))));
this.uiDataGridView1.RowHeadersVisible = false;
dataGridViewCellStyle3.BackColor = System.Drawing.Color.White;
this.uiDataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle3;
dataGridViewCellStyle4.BackColor = System.Drawing.Color.White;
this.uiDataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle4;
this.uiDataGridView1.RowTemplate.Height = 29;
this.uiDataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.uiDataGridView1.SelectedIndex = -1;
this.uiDataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
this.uiDataGridView1.ShowRect = false;
this.uiDataGridView1.Size = new System.Drawing.Size(800, 415);
this.uiDataGridView1.Style = Sunny.UI.UIStyle.Custom;
this.uiDataGridView1.TabIndex = 0;
this.uiDataGridView1.TagString = null;
//
@ -87,7 +95,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FDataGridView";
this.PageIndex = 1006;
this.Symbol = 61646;
this.Text = "DataGridView";
this.PagePanel.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.uiDataGridView1)).EndInit();

View File

@ -70,7 +70,6 @@
this.uiLinkLabel1.Location = new System.Drawing.Point(42, 127);
this.uiLinkLabel1.Name = "uiLinkLabel1";
this.uiLinkLabel1.Size = new System.Drawing.Size(146, 21);
this.uiLinkLabel1.Style = Sunny.UI.UIStyle.Custom;
this.uiLinkLabel1.TabIndex = 1;
this.uiLinkLabel1.TabStop = true;
this.uiLinkLabel1.Text = "www.SunnyUI.net";
@ -113,7 +112,6 @@
// uiSymbolLabel1
//
this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 12F);
this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiSymbolLabel1.Location = new System.Drawing.Point(42, 209);
this.uiSymbolLabel1.Name = "uiSymbolLabel1";
this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
@ -125,7 +123,6 @@
// uiSymbolLabel2
//
this.uiSymbolLabel2.Font = new System.Drawing.Font("微软雅黑", 12F);
this.uiSymbolLabel2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiSymbolLabel2.Location = new System.Drawing.Point(139, 209);
this.uiSymbolLabel2.Name = "uiSymbolLabel2";
this.uiSymbolLabel2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0);
@ -142,6 +139,7 @@
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FLabel";
this.StyleCustomMode = true;
this.Symbol = 61490;
this.Text = "Label";
this.PagePanel.ResumeLayout(false);
this.PagePanel.PerformLayout();

View File

@ -192,7 +192,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 556);
this.Name = "FLine";
this.PageIndex = 1004;
this.Symbol = 61544;
this.Text = "Line";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -133,6 +133,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 500);
this.Name = "FListBox";
this.Symbol = 61474;
this.Text = "ListBox";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -135,7 +135,7 @@
this.uiLedStopwatch1.Name = "uiLedStopwatch1";
this.uiLedStopwatch1.Size = new System.Drawing.Size(190, 34);
this.uiLedStopwatch1.TabIndex = 45;
this.uiLedStopwatch1.Text = "00:54";
this.uiLedStopwatch1.Text = "00:06";
//
// uiLedDisplay1
//
@ -253,6 +253,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FMeter";
this.Symbol = 61668;
this.Text = "Meter";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -474,348 +474,348 @@
<data name="uiRoundMeter1.AngleImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="uiRoundMeter1.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">

View File

@ -356,6 +356,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1107, 661);
this.Name = "FNavigation";
this.Symbol = 61912;
this.Text = "NavBar";
this.PagePanel.ResumeLayout(false);
this.uiNavBar1.ResumeLayout(false);

View File

@ -173,7 +173,6 @@
this.uiTrackBar1.Location = new System.Drawing.Point(381, 136);
this.uiTrackBar1.Name = "uiTrackBar1";
this.uiTrackBar1.Size = new System.Drawing.Size(158, 29);
this.uiTrackBar1.Style = Sunny.UI.UIStyle.Custom;
this.uiTrackBar1.TabIndex = 30;
this.uiTrackBar1.Text = "uiTrackBar1";
//
@ -323,6 +322,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 507);
this.Name = "FOther";
this.Symbol = 62173;
this.Text = "Other";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -80,7 +80,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 488);
this.Name = "FPanel";
this.PageIndex = 1005;
this.Symbol = 61590;
this.Text = "Panel";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -307,6 +307,7 @@
this.uiRadioButtonGroup1.Location = new System.Drawing.Point(30, 253);
this.uiRadioButtonGroup1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiRadioButtonGroup1.Name = "uiRadioButtonGroup1";
this.uiRadioButtonGroup1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0);
this.uiRadioButtonGroup1.Size = new System.Drawing.Size(670, 173);
this.uiRadioButtonGroup1.TabIndex = 63;
this.uiRadioButtonGroup1.Text = "UIRadioButtonGroup";
@ -318,6 +319,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 598);
this.Name = "FRadioButton";
this.Symbol = 61842;
this.Text = "RadioButton";
this.PagePanel.ResumeLayout(false);
this.PagePanel.PerformLayout();

View File

@ -224,6 +224,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 654);
this.Name = "FTabControl";
this.Symbol = 61716;
this.Text = "TabControl";
this.PagePanel.ResumeLayout(false);
this.uiTabControl1.ResumeLayout(false);

View File

@ -270,7 +270,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 565);
this.Name = "FTextBox";
this.PageIndex = 1003;
this.Symbol = 61962;
this.Text = "TextBox";
this.PagePanel.ResumeLayout(false);
this.PagePanel.PerformLayout();

View File

@ -86,6 +86,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FTransfer";
this.Symbol = 61516;
this.Text = "Transfer";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -148,6 +148,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FTreeView";
this.Symbol = 61499;
this.Text = "TreeView";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -1,6 +1,7 @@
using Sunny.UI.Demo.Forms;
using Sunny.UI.Demo.Controls;
using Sunny.UI.Demo.Forms;
using System;
using System.Windows.Forms;
using Sunny.UI.Demo.Controls;
namespace Sunny.UI.Demo
{
@ -14,6 +15,7 @@ namespace Sunny.UI.Demo
Header.SetNodePageIndex(Header.Nodes[0], pageIndex);
Header.SetNodeSymbol(Header.Nodes[0], 61451);
TreeNode parent = Aside.CreateNode("Controls", 61451, 24, pageIndex);
//通过设置PageIndex关联
Aside.CreateChildNode(parent, 61640, 24, AddPage(new FButton(), ++pageIndex));
Aside.CreateChildNode(parent, 61490, 24, AddPage(new FLabel(), ++pageIndex));
Aside.CreateChildNode(parent, 61770, 24, AddPage(new FCheckBox(), ++pageIndex));
@ -37,15 +39,17 @@ namespace Sunny.UI.Demo
Header.SetNodePageIndex(Header.Nodes[1], pageIndex);
Header.SetNodeSymbol(Header.Nodes[1], 61818);
parent = Aside.CreateNode("Forms", 61818, 24, pageIndex);
Aside.CreateChildNode(parent, 62160, 24, AddPage(new FDialogs(), ++pageIndex));
Aside.CreateChildNode(parent, 61508, 24, AddPage(new FEditor(), ++pageIndex));
Aside.CreateChildNode(parent, 61674, 24, AddPage(new FFrames(), ++pageIndex));
//通过设置GUID关联
Aside.CreateChildNode(parent, 62160, 24, AddPage(new FDialogs(), Guid.NewGuid()));
Aside.CreateChildNode(parent, 61508, 24, AddPage(new FEditor(), Guid.NewGuid()));
Aside.CreateChildNode(parent, 61674, 24, AddPage(new FFrames(), Guid.NewGuid()));
pageIndex = 3000;
Header.SetNodePageIndex(Header.Nodes[2], pageIndex);
Header.SetNodeSymbol(Header.Nodes[2], 61950);
parent = Aside.CreateNode("Forms", 61950, 24, pageIndex);
Aside.CreateChildNode(parent, 61952, 24, AddPage(new FPieChart(), ++pageIndex));
//直接关联默认自动生成GUID
Aside.CreateChildNode(parent, 61952, 24, AddPage(new FPieChart()));
Header.SetNodeSymbol(Header.Nodes[3], 61502);
var styles = UIStyles.PopularStyles();

View File

@ -530,11 +530,12 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 549);
this.Name = "FDialogs";
this.PageIndex = 2001;
this.Symbol = 62160;
this.Text = "Dialogs";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion

View File

@ -83,6 +83,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Name = "FEditor";
this.Symbol = 61508;
this.Text = "Editor";
this.PagePanel.ResumeLayout(false);
this.ResumeLayout(false);

View File

@ -57,7 +57,6 @@
this.PagePanel.Controls.Add(this.btnHMF);
this.PagePanel.Controls.Add(this.btnHM);
this.PagePanel.Size = new System.Drawing.Size(892, 592);
this.PagePanel.Style = Sunny.UI.UIStyle.Blue;
//
// uiLine1
//
@ -175,7 +174,7 @@
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(892, 627);
this.Name = "FFrames";
this.Style = Sunny.UI.UIStyle.Blue;
this.Symbol = 61674;
this.Text = "Frames";
this.PagePanel.ResumeLayout(false);
this.PagePanel.PerformLayout();

View File

@ -1,4 +1,25 @@
using System.Collections.Generic;
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2020 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@qq.com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UIChart.cs
* :
* : V2.2
* : 2020-06-06
*
* 2020-06-06: V2.2.5
******************************************************************************/
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;

View File

@ -1,4 +1,25 @@
using System;
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2020 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@qq.com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UIOption.cs
* :
* : V2.2
* : 2020-06-06
*
* 2020-06-06: V2.2.5
******************************************************************************/
using System;
using System.Collections.Generic;
using System.Drawing;
@ -25,7 +46,7 @@ namespace Sunny.UI
{
series?.Dispose();
}
Series.Clear();
}
@ -34,7 +55,7 @@ namespace Sunny.UI
public class UIToolTip
{
public string formatter { get; set; } = "{0}"+'\n'+"{1} : {2:f0} ({3:f2}%)";
public string formatter { get; set; } = "{{a}}" + '\n' + "{{b}} : {{c}} ({{d}}%)";
}
public class UILegend
@ -61,11 +82,11 @@ namespace Sunny.UI
Horizontal
}
public class UITitle
{
public string Text { get; set; } = "UIPieChart";
public class UITitle
{
public string Text { get; set; } = "UIPieChart";
public string SubText { get; set; } = "";
public string SubText { get; set; } = "";
public UILeftAlignment Left { get; set; } = UILeftAlignment.Center;

View File

@ -1,4 +1,25 @@
using System;
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2020 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@qq.com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UIPieChart.cs
* :
* : V2.2
* : 2020-06-06
*
* 2020-06-06: V2.2.5
******************************************************************************/
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
@ -76,6 +97,12 @@ namespace Sunny.UI
{
Angles.Clear();
if (o == null || o.Series == null || o.Series.Count == 0) return;
UITemplate template = null;
if (o.ToolTip != null)
{
template = new UITemplate(o.ToolTip.formatter);
}
for (int pieIndex = 0; pieIndex < o.Series.Count; pieIndex++)
{
@ -99,7 +126,14 @@ namespace Sunny.UI
{
try
{
text = string.Format(o.ToolTip.formatter, pie.Name, pie.Data[i].Name, pie.Data[i].Value, percent);
if (template != null)
{
template.Set("a", pie.Name);
template.Set("b", pie.Data[i].Name);
template.Set("c", pie.Data[i].Value.ToString("F" + DecimalNumber));
template.Set("d", percent.ToString("F2"));
text = template.Render();
}
}
catch
{
@ -240,12 +274,12 @@ namespace Sunny.UI
}
else if (az >= 90 && az < 180)
{
tip.Left = e.Location.X - tip.Width;
tip.Left = e.Location.X - tip.Width;
tip.Top = e.Location.Y - tip.Height - 2;
}
else if (az >= 180 && az < 270)
{
tip.Left = e.Location.X ;
tip.Left = e.Location.X;
tip.Top = e.Location.Y - tip.Height - 2;
}
else if (az >= 270 && az < 360)

View File

@ -168,6 +168,7 @@ namespace Sunny.UI
private void EditTextChanged(object s, EventArgs e)
{
Text = edit.Text;
Invalidate();
}
protected override void OnFontChanged(EventArgs e)

View File

@ -57,7 +57,7 @@ namespace Sunny.UI
}
[DefaultValue(null)]
public TabControl TabControl { get; set; }
public UITabControl TabControl { get; set; }
public void SetNodeItem(TreeNode node, NavMenuItem item)
{
@ -515,7 +515,7 @@ namespace Sunny.UI
public TreeNode CreateNode(UIPage page)
{
return CreateNode(new NavMenuItem(page.Text, page.PageIndex));
return CreateNode(new NavMenuItem(page));
}
public TreeNode CreateNode(NavMenuItem item)
@ -533,7 +533,7 @@ namespace Sunny.UI
public TreeNode CreateNode(UIPage page, int imageIndex)
{
return CreateNode(new NavMenuItem(page.Text, page.PageIndex), imageIndex);
return CreateNode(new NavMenuItem(page), imageIndex);
}
public TreeNode CreateNode(NavMenuItem item, int imageIndex)
@ -552,7 +552,7 @@ namespace Sunny.UI
public TreeNode CreateNode(UIPage page, int symbol, int symbolSize)
{
return CreateNode(new NavMenuItem(page.Text, page.PageIndex), symbol, symbolSize);
return CreateNode(new NavMenuItem(page), symbol, symbolSize);
}
public TreeNode CreateNode(NavMenuItem item, int symbol, int symbolSize)
@ -571,7 +571,7 @@ namespace Sunny.UI
public TreeNode CreateChildNode(TreeNode parent, UIPage page)
{
return CreateChildNode(parent, new NavMenuItem(page.Text, page.PageIndex));
return CreateChildNode(parent, new NavMenuItem(page));
}
public TreeNode CreateChildNode(TreeNode parent, NavMenuItem item)
@ -589,7 +589,7 @@ namespace Sunny.UI
public TreeNode CreateChildNode(TreeNode parent, int imageIndex, UIPage page)
{
return CreateChildNode(parent, imageIndex, new NavMenuItem(page.Text, page.PageIndex));
return CreateChildNode(parent, imageIndex, new NavMenuItem(page));
}
public TreeNode CreateChildNode(TreeNode parent, int imageIndex, NavMenuItem item)
@ -608,7 +608,7 @@ namespace Sunny.UI
public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, UIPage page)
{
return CreateChildNode(parent, symbol, symbolSize, new NavMenuItem(page.Text, page.PageIndex));
return CreateChildNode(parent, symbol, symbolSize, new NavMenuItem(page));
}
public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, NavMenuItem item)

View File

@ -60,7 +60,7 @@ namespace Sunny.UI
Bar.Style = UIStyle.Custom;
Bar.StyleCustomMode = true;
Bar.FillColor = fillColor;
Bar.ForeColor = Color.Silver;
Bar.HoverColor = Color.Silver;
Bar.PressColor = Color.Silver;
@ -130,7 +130,7 @@ namespace Sunny.UI
public bool StyleCustomMode { get; set; }
[DefaultValue(null)]
public TabControl TabControl { get; set; }
public UITabControl TabControl { get; set; }
private Color selectedColor = Color.FromArgb(36, 36, 36);
@ -537,9 +537,23 @@ namespace Sunny.UI
private void ShowSelectedNode()
{
int index = MenuHelper.GetPageIndex(SelectedNode);
TabControl?.SelectPage(index);
MenuItemClick?.Invoke(SelectedNode, MenuHelper[SelectedNode], index);
NavMenuItem item = MenuHelper[SelectedNode];
if (item != null)
{
if (item.PageGuid != Guid.Empty)
{
TabControl?.SelectPage(item.PageGuid);
}
else
{
if (item.PageIndex >= 0)
{
TabControl?.SelectPage(item.PageIndex);
}
}
}
MenuItemClick?.Invoke(SelectedNode, MenuHelper[SelectedNode], MenuHelper.GetPageIndex(SelectedNode));
}
protected override void OnMouseWheel(MouseEventArgs e)
@ -620,7 +634,7 @@ namespace Sunny.UI
public TreeNode CreateNode(UIPage page)
{
return CreateNode(new NavMenuItem(page.Text, page.PageIndex));
return CreateNode(new NavMenuItem(page));
}
public TreeNode CreateNode(NavMenuItem item)
@ -638,7 +652,7 @@ namespace Sunny.UI
public TreeNode CreateNode(UIPage page, int imageIndex)
{
return CreateNode(new NavMenuItem(page.Text, page.PageIndex), imageIndex);
return CreateNode(new NavMenuItem(page), imageIndex);
}
public TreeNode CreateNode(NavMenuItem item, int imageIndex)
@ -657,7 +671,7 @@ namespace Sunny.UI
public TreeNode CreateNode(UIPage page, int symbol, int symbolSize)
{
return CreateNode(new NavMenuItem(page.Text, page.PageIndex), symbol, symbolSize);
return CreateNode(new NavMenuItem(page), symbol, symbolSize);
}
public TreeNode CreateNode(NavMenuItem item, int symbol, int symbolSize)
@ -676,7 +690,7 @@ namespace Sunny.UI
public TreeNode CreateChildNode(TreeNode parent, UIPage page)
{
return CreateChildNode(parent, new NavMenuItem(page.Text, page.PageIndex));
return CreateChildNode(parent, new NavMenuItem(page));
}
public TreeNode CreateChildNode(TreeNode parent, NavMenuItem item)
@ -694,7 +708,7 @@ namespace Sunny.UI
public TreeNode CreateChildNode(TreeNode parent, int imageIndex, UIPage page)
{
return CreateChildNode(parent, imageIndex, new NavMenuItem(page.Text, page.PageIndex));
return CreateChildNode(parent, imageIndex, new NavMenuItem(page));
}
public TreeNode CreateChildNode(TreeNode parent, int imageIndex, NavMenuItem item)
@ -713,7 +727,7 @@ namespace Sunny.UI
public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, UIPage page)
{
return CreateChildNode(parent, symbol, symbolSize, new NavMenuItem(page.Text, page.PageIndex));
return CreateChildNode(parent, symbol, symbolSize, new NavMenuItem(page));
}
public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, NavMenuItem item)
@ -726,144 +740,5 @@ namespace Sunny.UI
}
}
public class NavMenuHelper
{
public NavMenuItem this[TreeNode node]
{
get
{
if (node == null) return null;
if (Items.ContainsKey(node))
return Items[node];
else
return null;
}
}
private readonly ConcurrentDictionary<TreeNode, NavMenuItem> Items = new ConcurrentDictionary<TreeNode, NavMenuItem>();
public string GetTipsText(TreeNode node)
{
return this[node] == null ? string.Empty : Items[node].TipsText;
}
public int GetSymbol(TreeNode node)
{
return this[node] == null ? 0 : Items[node].Symbol;
}
public int GetSymbolSize(TreeNode node)
{
return this[node] == null ? 0 : Items[node].SymbolSize;
}
public int GetPageIndex(TreeNode node)
{
return this[node] == null ? -1 : Items[node].PageIndex;
}
public object GetTag(TreeNode node)
{
return this[node] == null ? null : Items[node].Tag;
}
public void SetTipsText(TreeNode node, string tips)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].TipsText = tips;
node.TreeView.Invalidate();
}
public void SetPageIndex(TreeNode node, int index)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].PageIndex = index;
}
public void SetSymbol(TreeNode node, int symbol, int symbolSize = 32)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].Symbol = symbol;
Items[node].SymbolSize = symbolSize;
node.TreeView.Invalidate();
}
private void CreateIfNotExist(TreeNode node)
{
if (node == null) return;
if (!Items.ContainsKey(node))
{
NavMenuItem menuItem = new NavMenuItem();
Items.TryAdd(node, menuItem);
}
}
public void Add(TreeNode node, NavMenuItem item)
{
if (node == null || item == null) return;
if (this[node] == null)
{
Items.TryAdd(node, item);
}
else
{
Items[node] = item;
}
node.ImageIndex = item.ImageIndex;
node.SelectedImageIndex = item.SelectedImageIndex;
node.Tag = item;
}
}
public class NavMenuItem
{
public string Text { get; set; }
public int ImageIndex { get; set; } = -1;
public int SelectedImageIndex { get; set; } = -1;
public int Symbol { get; set; }
public int SymbolSize { get; set; } = 24;
public int PageIndex { get; set; }
public string TipsText { get; set; }
public bool Enabled { get; set; } = true;
public object Tag { get; set; }
public NavMenuItem()
{
}
public NavMenuItem(UIPage page)
{
Text = page.Text;
PageIndex = page.PageIndex;
}
public NavMenuItem(string text, int pageIndex)
{
PageIndex = pageIndex;
Text = text;
}
public NavMenuItem(int pageIndex)
{
PageIndex = pageIndex;
}
}
}

View File

@ -0,0 +1,343 @@
/******************************************************************************
* SunnyUI
* CopyRight (C) 2012-2020 ShenYongHua().
* QQ群56829229 QQ17612584 EMailSunnyUI@qq.com
*
* Blog: https://www.cnblogs.com/yhuse
* Gitee: https://gitee.com/yhuse/SunnyUI
* GitHub: https://github.com/yhuse/SunnyUI
*
* SunnyUI.dll can be used for free under the GPL-3.0 license.
* If you use this code, please keep this note.
* 使
******************************************************************************
* : UINavMenuHelper.cs
* :
* : V2.2
* : 2020-01-01
*
* 2020-01-01: V2.2.0
******************************************************************************/
using System;
using System.Collections.Concurrent;
using System.Windows.Forms;
namespace Sunny.UI
{
public class NavMenuHelper
{
public NavMenuItem this[TreeNode node]
{
get
{
if (node == null) return null;
if (Items.ContainsKey(node))
return Items[node];
else
return null;
}
}
private readonly ConcurrentDictionary<TreeNode, NavMenuItem> Items = new ConcurrentDictionary<TreeNode, NavMenuItem>();
public string GetTipsText(TreeNode node)
{
return this[node] == null ? string.Empty : Items[node].TipsText;
}
public Guid GetGuid(TreeNode node)
{
return this[node] == null ? Guid.Empty : Items[node].PageGuid;
}
public int GetSymbol(TreeNode node)
{
return this[node] == null ? 0 : Items[node].Symbol;
}
public int GetSymbolSize(TreeNode node)
{
return this[node] == null ? 0 : Items[node].SymbolSize;
}
public int GetPageIndex(TreeNode node)
{
return this[node] == null ? -1 : Items[node].PageIndex;
}
public object GetTag(TreeNode node)
{
return this[node] == null ? null : Items[node].Tag;
}
public void SetTipsText(TreeNode node, string tips)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].TipsText = tips;
node.TreeView.Invalidate();
}
public void SetPageIndex(TreeNode node, int index)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].PageIndex = index;
}
public void SetGuid(TreeNode node, Guid guid)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].PageGuid = guid;
}
public void SetSymbol(TreeNode node, int symbol, int symbolSize = 32)
{
if (node == null) return;
CreateIfNotExist(node);
Items[node].Symbol = symbol;
Items[node].SymbolSize = symbolSize;
node.TreeView.Invalidate();
}
private void CreateIfNotExist(TreeNode node)
{
if (node == null) return;
if (!Items.ContainsKey(node))
{
NavMenuItem menuItem = new NavMenuItem();
Items.TryAdd(node, menuItem);
}
}
public void Add(TreeNode node, NavMenuItem item)
{
if (node == null || item == null) return;
if (this[node] == null)
{
Items.TryAdd(node, item);
}
else
{
Items[node] = item;
}
node.ImageIndex = item.ImageIndex;
node.SelectedImageIndex = item.SelectedImageIndex;
node.Tag = item;
}
}
public class UITabControlHelper
{
private readonly ConcurrentDictionary<TabPage, NavMenuItem> PageItems = new ConcurrentDictionary<TabPage, NavMenuItem>();
private readonly UITabControl tabControl;
public UITabControlHelper(UITabControl ctrl)
{
tabControl = ctrl;
}
public UIPage AddPage(int pageIndex, UIPage page)
{
page.PageIndex = pageIndex;
return AddPage(page);
}
public UIPage AddPage(Guid pageGuid, UIPage page)
{
page.PageGuid = pageGuid;
return AddPage(page);
}
public UIPage AddPage(UIPage page)
{
if (page.PageGuid == Guid.Empty && page.PageIndex < 0)
{
page.PageGuid = Guid.NewGuid();
}
TabPage tabPage = CreateTabIfNotExists(new NavMenuItem(page));
page.TabPage = tabPage;
tabPage.Controls.Add(page);
tabPage.Text = page.Text;
page.Show();
return page;
}
public void AddPages(params UIPage[] pages)
{
foreach (var page in pages)
{
AddPage(page);
}
}
public void AddPage(int index, UITabControlMenu page)
{
TabPage tabPage = CreateTabIfNotExists(index);
tabPage.Controls.Add(page);
page.Dock = DockStyle.Fill;
page.Show();
}
public void AddPage(int index, UITabControl page)
{
TabPage tabPage = CreateTabIfNotExists(index);
tabPage.Controls.Add(page);
page.Dock = DockStyle.Fill;
page.Show();
}
public void AddPage(Guid guid, UITabControlMenu page)
{
TabPage tabPage = CreateTabIfNotExists(guid);
tabPage.Controls.Add(page);
page.Dock = DockStyle.Fill;
page.Show();
}
public void AddPage(Guid guid, UITabControl page)
{
TabPage tabPage = CreateTabIfNotExists(guid);
tabPage.Controls.Add(page);
page.Dock = DockStyle.Fill;
page.Show();
}
private TabPage CreateTabIfNotExists(NavMenuItem item)
{
if (item == null) return null;
if (item.PageIndex < 0 && item.PageGuid == Guid.Empty) return null;
for (int i = 0; i < tabControl.TabPages.Count; i++)
{
TabPage page = tabControl.TabPages[i];
if (!PageItems.ContainsKey(page))
{
if (page.Controls.Count == 0)
{
PageItems.TryAdd(page, item);
return page;
}
}
else
{
if (item.PageGuid != Guid.Empty)
{
if (PageItems[page].PageGuid == item.PageGuid) return page;
}
else
{
if (item.PageIndex >= 0 && PageItems[page].PageIndex == item.PageIndex) return page;
}
}
}
TabPage newPage = new TabPage();
newPage.SuspendLayout();
newPage.Text = "tabPage" + tabControl.TabPages.Count;
tabControl.Controls.Add(newPage);
PageItems.TryAdd(newPage, item);
newPage.ResumeLayout();
return newPage;
}
private TabPage CreateTabIfNotExists(int pageIndex)
{
return CreateTabIfNotExists(new NavMenuItem(pageIndex));
}
private TabPage CreateTabIfNotExists(Guid guid)
{
return CreateTabIfNotExists(new NavMenuItem(guid));
}
public void SelectPage(int pageIndex)
{
if (pageIndex < 0) return;
foreach (var item in PageItems)
{
if (item.Value.PageIndex == pageIndex)
{
tabControl.SelectTab(item.Key);
}
}
}
public void SelectPage(Guid guid)
{
if (guid == Guid.Empty) return;
foreach (var item in PageItems)
{
if (item.Value.PageGuid == guid)
{
tabControl.SelectTab(item.Key);
}
}
}
}
public class NavMenuItem
{
public string Text { get; set; }
public int ImageIndex { get; set; } = -1;
public int SelectedImageIndex { get; set; } = -1;
public int Symbol { get; set; }
public int SymbolSize { get; set; } = 24;
public int PageIndex { get; set; }
public string TipsText { get; set; }
public bool Enabled { get; set; } = true;
public object Tag { get; set; }
public Guid PageGuid { get; set; } = Guid.Empty;
public NavMenuItem()
{
}
public NavMenuItem(UIPage page)
{
Text = page.Text;
PageIndex = page.PageIndex;
PageGuid = page.PageGuid;
}
public NavMenuItem(string text, int pageIndex)
{
PageIndex = pageIndex;
Text = text;
}
public NavMenuItem(int pageIndex)
{
PageIndex = pageIndex;
}
public NavMenuItem(Guid guid)
{
PageGuid = guid;
}
}
}

View File

@ -21,6 +21,7 @@
******************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
@ -122,6 +123,34 @@ namespace Sunny.UI
{
}
protected override void OnControlAdded(ControlEventArgs e)
{
base.OnControlAdded(e);
if (e.Control is IStyleInterface ctrl)
{
if (!ctrl.StyleCustomMode)
{
ctrl.Style = Style;
}
}
if (e.Control is Panel)
{
List<Control> controls = e.Control.GetUIStyleControls("IStyleInterface");
foreach (var control in controls)
{
if (control is IStyleInterface item)
{
if (!item.StyleCustomMode)
{
item.Style = Style;
}
}
}
}
}
private UICornerRadiusSides _radiusSides = UICornerRadiusSides.All;
[DefaultValue(UICornerRadiusSides.All), Description("圆角显示位置")]

View File

@ -31,6 +31,8 @@ namespace Sunny.UI
{
public sealed class UITabControl : TabControl, IStyleInterface
{
private readonly UITabControlHelper Helper;
public UITabControl()
{
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer, true);
@ -41,8 +43,46 @@ namespace Sunny.UI
AfterSetFillColor(FillColor);
Size = new Size(450, 270);
Version = UIGlobal.Version;
Helper = new UITabControlHelper(this);
}
public void SelectPage(int pageIndex)
{
Helper.SelectPage(pageIndex);
}
public void SelectPage(Guid pageGuid)
{
Helper.SelectPage(pageGuid);
}
public void AddPage(UIPage page)
{
Helper.AddPage(page);
}
public void AddPage(int pageIndex, UITabControl page)
{
Helper.AddPage(pageIndex, page);
}
public void AddPage(int pageIndex, UITabControlMenu page)
{
Helper.AddPage(pageIndex, page);
}
public void AddPage(Guid guid, UITabControl page)
{
Helper.AddPage(guid, page);
}
public void AddPage(Guid guid, UITabControlMenu page)
{
Helper.AddPage(guid, page);
}
public string Version { get; }
private Color _fillColor = UIColor.LightBlue;
@ -571,7 +611,7 @@ namespace Sunny.UI
break;
case ArrowDirection.Right:
g.DrawFontImage(61701, 24, arrowColor, rect,1);
g.DrawFontImage(61701, 24, arrowColor, rect, 1);
break;
}
}

View File

@ -20,6 +20,7 @@
******************************************************************************/
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
@ -330,100 +331,4 @@ namespace Sunny.UI
}
}
}
public static class UITabControlHelper
{
public static UIPage AddPage(this TabControl tabControl, int pageIndex, UIPage page)
{
page.PageIndex = pageIndex;
return tabControl.AddPage(page);
}
public static UIPage AddPage(this TabControl tabControl, UIPage page)
{
if (page.PageIndex < 0)
{
page.PageIndex = RandomEx.RandomNumber(8).ToInt();
}
TabPage tagPage = tabControl.CreateTabIfNotExists(page.PageIndex);
tagPage.Controls.Add(page);
tagPage.Text = page.Text;
page.Show();
return page;
}
public static void AddPages(this TabControl tabControl, params UIPage[] pages)
{
foreach (var page in pages)
{
tabControl.AddPage(page);
}
}
public static void AddPage(this TabControl tabControl, int index, UITabControlMenu page)
{
tabControl.CreateTabIfNotExists(index);
tabControl.TabPages[index].Controls.Add(page);
page.Show();
page.Dock = DockStyle.Fill;
}
public static void AddPage(this TabControl tabControl, int index, UITabControl page)
{
tabControl.CreateTabIfNotExists(index);
tabControl.TabPages[index].Controls.Add(page);
page.Show();
page.Dock = DockStyle.Fill;
}
private static TabPage CreateTabIfNotExists(this TabControl tabControl, int index)
{
if (index < 0) return null;
for (int i = 0; i < tabControl.TabPages.Count; i++)
{
TabPage existPage = tabControl.TabPages[i];
if (existPage.Tag == null)
{
if (existPage.Controls.Count > 0)
{
continue;
}
else
{
existPage.Tag = index;
return existPage;
}
}
if (tabControl.TabPages[i].Tag.ToString() == index.ToString())
{
return tabControl.TabPages[i];
}
}
TabPage page = new TabPage();
page.SuspendLayout();
page.Tag = index;
page.Text = "tabPage" + tabControl.TabPages.Count;
tabControl.Controls.Add(page);
page.ResumeLayout();
return page;
}
public static void SelectPage(this TabControl tabControl, int pageIndex)
{
if (pageIndex < 0) return;
for (int i = 0; i < tabControl.TabPages.Count; i++)
{
if (tabControl.TabPages[i].Tag != null && tabControl.TabPages[i].Tag.ToString() == pageIndex.ToString())
{
tabControl.SelectedIndex = i;
}
}
}
}
}

View File

@ -118,6 +118,21 @@ namespace Sunny.UI
}
}
if (e.Control is Panel)
{
List<Control> controls = e.Control.GetUIStyleControls("IStyleInterface");
foreach (var control in controls)
{
if (control is IStyleInterface item)
{
if (!item.StyleCustomMode)
{
item.Style = Style;
}
}
}
}
if (ShowTitle && e.Control.Top < TitleHeight)
{
e.Control.Top = TitleHeight;
@ -595,7 +610,7 @@ namespace Sunny.UI
{
if (FormMoveMouseDown && !MousePosition.Equals(mouseOffset))
{
if (this.windowState == FormWindowState.Maximized)
if (windowState == FormWindowState.Maximized)
{
int MaximizedWidth = Width;
int LocationX = Left;
@ -1087,7 +1102,7 @@ namespace Sunny.UI
private void UIForm_Shown(object sender, EventArgs e)
{
SetStyle(UIStyles.Style);
//SetStyle(UIStyles.Style);
}
private FormWindowState windowState = FormWindowState.Normal;

View File

@ -19,6 +19,8 @@
* 2020-05-05: V2.2.5
******************************************************************************/
using System;
namespace Sunny.UI
{
public partial class UIMainFrame : UIForm
@ -37,6 +39,13 @@ namespace Sunny.UI
return page;
}
public UIPage AddPage(UIPage page, Guid guid)
{
page.PageGuid = guid;
MainContainer.AddPage(page);
return page;
}
public UIPage AddPage(UIPage page)
{
MainContainer.AddPage(page);

View File

@ -20,9 +20,11 @@
******************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Design;
using System.Windows.Forms;
namespace Sunny.UI
@ -57,10 +59,54 @@ namespace Sunny.UI
Version = UIGlobal.Version;
}
private int _symbolSize = 24;
[DefaultValue(24)]
public int SymbolSize
{
get => _symbolSize;
set
{
_symbolSize = Math.Max(value, 16);
_symbolSize = Math.Min(value, 64);
SymbolChange();
Invalidate();
}
}
private int _symbol;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
[Editor(typeof(UIImagePropertyEditor), typeof(UITypeEditor))]
[DefaultValue(0)]
public int Symbol
{
get => _symbol;
set
{
_symbol = value;
SymbolChange();
Invalidate();
}
}
protected virtual void SymbolChange()
{
}
[Browsable(false)] public Point ParentLocation { get; set; } = new Point(0, 0);
[Browsable(false)]
[DefaultValue(-1)]
public int PageIndex { get; set; } = -1;
[Browsable(false)]
public Guid PageGuid { get; set; } = Guid.Empty;
[Browsable(false), DefaultValue(null)]
public TabPage TabPage { get; set; } = null;
/// <summary>
/// 边框颜色
/// </summary>
@ -142,8 +188,27 @@ namespace Sunny.UI
base.OnControlAdded(e);
if (e.Control is IStyleInterface ctrl)
{
if (!ctrl.StyleCustomMode)
{
ctrl.Style = Style;
}
}
if (e.Control is Panel)
{
List<Control> controls = e.Control.GetUIStyleControls("IStyleInterface");
foreach (var control in controls)
{
if (control is IStyleInterface item)
{
if (!item.StyleCustomMode)
{
item.Style = Style;
}
}
}
}
}
public virtual void Init()
@ -220,7 +285,7 @@ namespace Sunny.UI
private void UIPage_Shown(object sender, EventArgs e)
{
SetStyle(UIStyles.Style);
//SetStyle(UIStyles.Style);
}
}
}

View File

@ -42,6 +42,8 @@
this.PageTitle.RadiusSides = Sunny.UI.UICornerRadiusSides.None;
this.PageTitle.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None;
this.PageTitle.Size = new System.Drawing.Size(800, 35);
this.PageTitle.Symbol = 0;
this.PageTitle.SymbolSize = 24;
this.PageTitle.TabIndex = 0;
this.PageTitle.Text = "UITitlePage";
this.PageTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@ -61,7 +63,6 @@
//
// UITitlePage
//
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.PagePanel);

View File

@ -21,6 +21,8 @@
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace Sunny.UI
{
@ -46,6 +48,16 @@ namespace Sunny.UI
}
}
protected override void SymbolChange()
{
base.SymbolChange();
int left = Symbol > 0 ? (6 * 2 + SymbolSize) : 6;
PageTitle.Padding = new Padding(left, 0, 0, 0);
PageTitle.Symbol = Symbol;
PageTitle.SymbolSize = SymbolSize;
PageTitle.Invalidate();
}
/// <summary>
/// 填充颜色,当值为背景色或透明色或空值则不填充
/// </summary>
@ -115,6 +127,37 @@ namespace Sunny.UI
FillColor = uiColor.PageTitleFillColor;
ForeColor = uiColor.PageTitleForeColor;
}
private int symbol = 0;
public int Symbol
{
get => symbol;
set
{
symbol = value;
Invalidate();
}
}
private int symbolSize = 24;
public int SymbolSize
{
get => symbolSize;
set
{
symbolSize = value;
Invalidate();
}
}
protected override void OnPaintFore(Graphics g, GraphicsPath path)
{
base.OnPaintFore(g, path);
if (Symbol > 0)
{
g.DrawFontImage(Symbol, SymbolSize, ForeColor, new Rectangle(6, 0, SymbolSize, Height));
}
}
}
}
}

View File

@ -724,7 +724,7 @@ namespace Sunny.UI
/// <param name="ctrl">容器</param>
/// <param name="interfaceName">接口名称</param>
/// <returns>控件列表</returns>
private static List<Control> GetUIStyleControls(this Control ctrl, string interfaceName)
public static List<Control> GetUIStyleControls(this Control ctrl, string interfaceName)
{
List<Control> values = new List<Control>();

View File

@ -104,6 +104,7 @@
<Compile Include="Charts\UIPieChart.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\UINavMenuHelper.cs" />
<Compile Include="Controls\UIRichTextBox.cs">
<SubType>UserControl</SubType>
</Compile>

View File

@ -27,7 +27,7 @@ namespace Sunny.UI
/// <summary>
/// 模版引擎
/// </summary>
public class Template
public class UITemplate
{
private string Content { get; set; }
@ -35,7 +35,7 @@ namespace Sunny.UI
/// 模版引擎
/// </summary>
/// <param name="content"></param>
public Template(string content)
public UITemplate(string content)
{
Content = content;
}
@ -46,7 +46,7 @@ namespace Sunny.UI
/// <param name="key"></param>
/// <param name="value"></param>
/// <returns></returns>
public Template Set(string key, string value)
public UITemplate Set(string key, string value)
{
Content = Content.Replace("{{" + key + "}}", value);
return this;

View File

@ -1,5 +1,8 @@
+ 增加; - 删除; * 修改
2020.06.08
* 页面框架支持通过PageIndex和PageGuid关联
2020.06.08
* UINAVMenu修改一处消息引起的Bug
* UIPieChart增加ToolTip设置显示配色调整