diff --git a/Bin/SunnyUI.dll b/Bin/SunnyUI.dll index 8649e2f2..7f884325 100644 Binary files a/Bin/SunnyUI.dll and b/Bin/SunnyUI.dll differ diff --git a/Bin/SunnyUI.pdb b/Bin/SunnyUI.pdb index 42d73e2e..5511d5c3 100644 Binary files a/Bin/SunnyUI.pdb and b/Bin/SunnyUI.pdb differ diff --git a/SunnyUI.Demo/Bin/SunnyUI.Demo.exe b/SunnyUI.Demo/Bin/SunnyUI.Demo.exe index f8d78d1c..0fb5a993 100644 Binary files a/SunnyUI.Demo/Bin/SunnyUI.Demo.exe and b/SunnyUI.Demo/Bin/SunnyUI.Demo.exe differ diff --git a/SunnyUI.Demo/Bin/SunnyUI.dll b/SunnyUI.Demo/Bin/SunnyUI.dll index 8649e2f2..7f884325 100644 Binary files a/SunnyUI.Demo/Bin/SunnyUI.dll and b/SunnyUI.Demo/Bin/SunnyUI.dll differ diff --git a/SunnyUI.Demo/Charts/FPieChart.Designer.cs b/SunnyUI.Demo/Charts/FPieChart.Designer.cs index d6c45915..cf2952b7 100644 --- a/SunnyUI.Demo/Charts/FPieChart.Designer.cs +++ b/SunnyUI.Demo/Charts/FPieChart.Designer.cs @@ -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(); diff --git a/SunnyUI.Demo/Controls/FAvatar.Designer.cs b/SunnyUI.Demo/Controls/FAvatar.Designer.cs index a0fb8f8a..f4b0865a 100644 --- a/SunnyUI.Demo/Controls/FAvatar.Designer.cs +++ b/SunnyUI.Demo/Controls/FAvatar.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FButton.Designer.cs b/SunnyUI.Demo/Controls/FButton.Designer.cs index 25d023e0..8d0405e1 100644 --- a/SunnyUI.Demo/Controls/FButton.Designer.cs +++ b/SunnyUI.Demo/Controls/FButton.Designer.cs @@ -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(); diff --git a/SunnyUI.Demo/Controls/FCheckBox.Designer.cs b/SunnyUI.Demo/Controls/FCheckBox.Designer.cs index 97c9bc1a..243fcb3b 100644 --- a/SunnyUI.Demo/Controls/FCheckBox.Designer.cs +++ b/SunnyUI.Demo/Controls/FCheckBox.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FCombobox.Designer.cs b/SunnyUI.Demo/Controls/FCombobox.Designer.cs index d4dc6092..8079d6b3 100644 --- a/SunnyUI.Demo/Controls/FCombobox.Designer.cs +++ b/SunnyUI.Demo/Controls/FCombobox.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FContextMenuStrip.Designer.cs b/SunnyUI.Demo/Controls/FContextMenuStrip.Designer.cs index 39273d1f..4d08dee7 100644 --- a/SunnyUI.Demo/Controls/FContextMenuStrip.Designer.cs +++ b/SunnyUI.Demo/Controls/FContextMenuStrip.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FDataGridView.Designer.cs b/SunnyUI.Demo/Controls/FDataGridView.Designer.cs index e6dcd165..4097ef67 100644 --- a/SunnyUI.Demo/Controls/FDataGridView.Designer.cs +++ b/SunnyUI.Demo/Controls/FDataGridView.Designer.cs @@ -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(); diff --git a/SunnyUI.Demo/Controls/FLabel.Designer.cs b/SunnyUI.Demo/Controls/FLabel.Designer.cs index 65b4107f..3c8388b3 100644 --- a/SunnyUI.Demo/Controls/FLabel.Designer.cs +++ b/SunnyUI.Demo/Controls/FLabel.Designer.cs @@ -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(); diff --git a/SunnyUI.Demo/Controls/FLine.Designer.cs b/SunnyUI.Demo/Controls/FLine.Designer.cs index d99d99d9..17a31ff3 100644 --- a/SunnyUI.Demo/Controls/FLine.Designer.cs +++ b/SunnyUI.Demo/Controls/FLine.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FListBox.Designer.cs b/SunnyUI.Demo/Controls/FListBox.Designer.cs index 4e1a4cd2..26306f86 100644 --- a/SunnyUI.Demo/Controls/FListBox.Designer.cs +++ b/SunnyUI.Demo/Controls/FListBox.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FMeter.Designer.cs b/SunnyUI.Demo/Controls/FMeter.Designer.cs index 61d37998..1669af84 100644 --- a/SunnyUI.Demo/Controls/FMeter.Designer.cs +++ b/SunnyUI.Demo/Controls/FMeter.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FMeter.resx b/SunnyUI.Demo/Controls/FMeter.resx index 419784f3..ca7f12fe 100644 --- a/SunnyUI.Demo/Controls/FMeter.resx +++ b/SunnyUI.Demo/Controls/FMeter.resx @@ -474,348 +474,348 @@ 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 diff --git a/SunnyUI.Demo/Controls/FNavigation.Designer.cs b/SunnyUI.Demo/Controls/FNavigation.Designer.cs index bdeaa891..cd45f751 100644 --- a/SunnyUI.Demo/Controls/FNavigation.Designer.cs +++ b/SunnyUI.Demo/Controls/FNavigation.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FOther.Designer.cs b/SunnyUI.Demo/Controls/FOther.Designer.cs index 80f615e1..668f8dae 100644 --- a/SunnyUI.Demo/Controls/FOther.Designer.cs +++ b/SunnyUI.Demo/Controls/FOther.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FPanel.Designer.cs b/SunnyUI.Demo/Controls/FPanel.Designer.cs index 49d9dedc..09e48322 100644 --- a/SunnyUI.Demo/Controls/FPanel.Designer.cs +++ b/SunnyUI.Demo/Controls/FPanel.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FRadioButton.Designer.cs b/SunnyUI.Demo/Controls/FRadioButton.Designer.cs index 430adffb..a5ed2c4b 100644 --- a/SunnyUI.Demo/Controls/FRadioButton.Designer.cs +++ b/SunnyUI.Demo/Controls/FRadioButton.Designer.cs @@ -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(); diff --git a/SunnyUI.Demo/Controls/FTabControl.Designer.cs b/SunnyUI.Demo/Controls/FTabControl.Designer.cs index 13beef83..df3d6a53 100644 --- a/SunnyUI.Demo/Controls/FTabControl.Designer.cs +++ b/SunnyUI.Demo/Controls/FTabControl.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FTextBox.Designer.cs b/SunnyUI.Demo/Controls/FTextBox.Designer.cs index b15ac3c1..5e9de41d 100644 --- a/SunnyUI.Demo/Controls/FTextBox.Designer.cs +++ b/SunnyUI.Demo/Controls/FTextBox.Designer.cs @@ -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(); diff --git a/SunnyUI.Demo/Controls/FTransfer.Designer.cs b/SunnyUI.Demo/Controls/FTransfer.Designer.cs index f1811855..a7814f68 100644 --- a/SunnyUI.Demo/Controls/FTransfer.Designer.cs +++ b/SunnyUI.Demo/Controls/FTransfer.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Controls/FTreeView.Designer.cs b/SunnyUI.Demo/Controls/FTreeView.Designer.cs index 5d68a22d..5bce9046 100644 --- a/SunnyUI.Demo/Controls/FTreeView.Designer.cs +++ b/SunnyUI.Demo/Controls/FTreeView.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/FMain.cs b/SunnyUI.Demo/FMain.cs index 84897619..f429fb8a 100644 --- a/SunnyUI.Demo/FMain.cs +++ b/SunnyUI.Demo/FMain.cs @@ -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(); diff --git a/SunnyUI.Demo/Forms/FDialogs.Designer.cs b/SunnyUI.Demo/Forms/FDialogs.Designer.cs index f36d31ed..a71a3443 100644 --- a/SunnyUI.Demo/Forms/FDialogs.Designer.cs +++ b/SunnyUI.Demo/Forms/FDialogs.Designer.cs @@ -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 diff --git a/SunnyUI.Demo/Forms/FEditor.Designer.cs b/SunnyUI.Demo/Forms/FEditor.Designer.cs index a340378c..cc70ab43 100644 --- a/SunnyUI.Demo/Forms/FEditor.Designer.cs +++ b/SunnyUI.Demo/Forms/FEditor.Designer.cs @@ -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); diff --git a/SunnyUI.Demo/Forms/FFrames.Designer.cs b/SunnyUI.Demo/Forms/FFrames.Designer.cs index 5a010f16..95acadf9 100644 --- a/SunnyUI.Demo/Forms/FFrames.Designer.cs +++ b/SunnyUI.Demo/Forms/FFrames.Designer.cs @@ -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(); diff --git a/SunnyUI/Charts/UIChart.cs b/SunnyUI/Charts/UIChart.cs index 0cea7896..3fc57a3a 100644 --- a/SunnyUI/Charts/UIChart.cs +++ b/SunnyUI/Charts/UIChart.cs @@ -1,4 +1,25 @@ -using System.Collections.Generic; +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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; diff --git a/SunnyUI/Charts/UIOption.cs b/SunnyUI/Charts/UIOption.cs index 9120565f..89a8a2af 100644 --- a/SunnyUI/Charts/UIOption.cs +++ b/SunnyUI/Charts/UIOption.cs @@ -1,4 +1,25 @@ -using System; +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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; diff --git a/SunnyUI/Charts/UIPieChart.cs b/SunnyUI/Charts/UIPieChart.cs index 021da6ef..683dd7b1 100644 --- a/SunnyUI/Charts/UIPieChart.cs +++ b/SunnyUI/Charts/UIPieChart.cs @@ -1,4 +1,25 @@ -using System; +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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) diff --git a/SunnyUI/Controls/DropItem/UIDropControl.cs b/SunnyUI/Controls/DropItem/UIDropControl.cs index e2cacddb..350dce68 100644 --- a/SunnyUI/Controls/DropItem/UIDropControl.cs +++ b/SunnyUI/Controls/DropItem/UIDropControl.cs @@ -168,6 +168,7 @@ namespace Sunny.UI private void EditTextChanged(object s, EventArgs e) { Text = edit.Text; + Invalidate(); } protected override void OnFontChanged(EventArgs e) diff --git a/SunnyUI/Controls/UINavBar.cs b/SunnyUI/Controls/UINavBar.cs index f9a2d97d..c402e99a 100644 --- a/SunnyUI/Controls/UINavBar.cs +++ b/SunnyUI/Controls/UINavBar.cs @@ -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) diff --git a/SunnyUI/Controls/UINavMenu.cs b/SunnyUI/Controls/UINavMenu.cs index 493a2f35..659ee970 100644 --- a/SunnyUI/Controls/UINavMenu.cs +++ b/SunnyUI/Controls/UINavMenu.cs @@ -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 Items = new ConcurrentDictionary(); - - 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; - } - } } \ No newline at end of file diff --git a/SunnyUI/Controls/UINavMenuHelper.cs b/SunnyUI/Controls/UINavMenuHelper.cs new file mode 100644 index 00000000..e197a6c1 --- /dev/null +++ b/SunnyUI/Controls/UINavMenuHelper.cs @@ -0,0 +1,343 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@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 Items = new ConcurrentDictionary(); + + 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 PageItems = new ConcurrentDictionary(); + + 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; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIPanel.cs b/SunnyUI/Controls/UIPanel.cs index c86466ce..718bd34c 100644 --- a/SunnyUI/Controls/UIPanel.cs +++ b/SunnyUI/Controls/UIPanel.cs @@ -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 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("圆角显示位置")] diff --git a/SunnyUI/Controls/UITabControl.cs b/SunnyUI/Controls/UITabControl.cs index 82bca762..6ef0f1f7 100644 --- a/SunnyUI/Controls/UITabControl.cs +++ b/SunnyUI/Controls/UITabControl.cs @@ -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; } } diff --git a/SunnyUI/Controls/UITabControlMenu.cs b/SunnyUI/Controls/UITabControlMenu.cs index bee8ba10..2b80ec6a 100644 --- a/SunnyUI/Controls/UITabControlMenu.cs +++ b/SunnyUI/Controls/UITabControlMenu.cs @@ -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; - } - } - } - } } \ No newline at end of file diff --git a/SunnyUI/Forms/UIForm.cs b/SunnyUI/Forms/UIForm.cs index 8e401470..5efe4d37 100644 --- a/SunnyUI/Forms/UIForm.cs +++ b/SunnyUI/Forms/UIForm.cs @@ -118,6 +118,21 @@ namespace Sunny.UI } } + if (e.Control is Panel) + { + List 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; diff --git a/SunnyUI/Frames/UIMainFrame.cs b/SunnyUI/Frames/UIMainFrame.cs index bf7d2f63..4a7f4768 100644 --- a/SunnyUI/Frames/UIMainFrame.cs +++ b/SunnyUI/Frames/UIMainFrame.cs @@ -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); diff --git a/SunnyUI/Pages/UIPage.cs b/SunnyUI/Pages/UIPage.cs index 829904f2..3572ed40 100644 --- a/SunnyUI/Pages/UIPage.cs +++ b/SunnyUI/Pages/UIPage.cs @@ -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; + /// /// 边框颜色 /// @@ -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 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); } } } \ No newline at end of file diff --git a/SunnyUI/Pages/UITitlePage.Designer.cs b/SunnyUI/Pages/UITitlePage.Designer.cs index c741815b..72c9a077 100644 --- a/SunnyUI/Pages/UITitlePage.Designer.cs +++ b/SunnyUI/Pages/UITitlePage.Designer.cs @@ -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); diff --git a/SunnyUI/Pages/UITitlePage.cs b/SunnyUI/Pages/UITitlePage.cs index f4e74e2a..d0f27595 100644 --- a/SunnyUI/Pages/UITitlePage.cs +++ b/SunnyUI/Pages/UITitlePage.cs @@ -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(); + } + /// /// 填充颜色,当值为背景色或透明色或空值则不填充 /// @@ -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)); + } + } } } } \ No newline at end of file diff --git a/SunnyUI/Style/UIStyle.cs b/SunnyUI/Style/UIStyle.cs index 39abcb14..9576c538 100644 --- a/SunnyUI/Style/UIStyle.cs +++ b/SunnyUI/Style/UIStyle.cs @@ -724,7 +724,7 @@ namespace Sunny.UI /// 容器 /// 接口名称 /// 控件列表 - private static List GetUIStyleControls(this Control ctrl, string interfaceName) + public static List GetUIStyleControls(this Control ctrl, string interfaceName) { List values = new List(); diff --git a/SunnyUI/SunnyUI.csproj b/SunnyUI/SunnyUI.csproj index d2070fc4..9b437de7 100644 --- a/SunnyUI/SunnyUI.csproj +++ b/SunnyUI/SunnyUI.csproj @@ -104,6 +104,7 @@ Component + UserControl diff --git a/SunnyUI/Units/UTemplate.cs b/SunnyUI/Units/UTemplate.cs index 1ce14087..e282348d 100644 --- a/SunnyUI/Units/UTemplate.cs +++ b/SunnyUI/Units/UTemplate.cs @@ -27,7 +27,7 @@ namespace Sunny.UI /// /// 模版引擎 /// - public class Template + public class UITemplate { private string Content { get; set; } @@ -35,7 +35,7 @@ namespace Sunny.UI /// 模版引擎 /// /// - public Template(string content) + public UITemplate(string content) { Content = content; } @@ -46,7 +46,7 @@ namespace Sunny.UI /// /// /// - public Template Set(string key, string value) + public UITemplate Set(string key, string value) { Content = Content.Replace("{{" + key + "}}", value); return this; diff --git a/Updates.txt b/Updates.txt index d272f8f3..57c7606e 100644 --- a/Updates.txt +++ b/Updates.txt @@ -1,5 +1,8 @@ + ӣ - ɾ * ޸ +2020.06.08 +* ҳ֧ͨPageIndexPageGuid + 2020.06.08 * UINAVMenu޸һϢBug * UIPieChartToolTipãʾɫ