diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..9cecc1d4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/SunnyUI.Demo/Controls/FAvatar.Designer.cs b/SunnyUI.Demo/Controls/FAvatar.Designer.cs new file mode 100644 index 00000000..a0fb8f8a --- /dev/null +++ b/SunnyUI.Demo/Controls/FAvatar.Designer.cs @@ -0,0 +1,228 @@ +namespace Sunny.UI.Demo +{ + partial class FAvatar + { + /// + /// 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.uiAvatar1 = new Sunny.UI.UIAvatar(); + this.uiAvatar2 = new Sunny.UI.UIAvatar(); + this.uiAvatar3 = new Sunny.UI.UIAvatar(); + this.uiAvatar4 = new Sunny.UI.UIAvatar(); + this.uiLabel1 = new Sunny.UI.UILabel(); + this.uiLabel2 = new Sunny.UI.UILabel(); + this.uiLabel3 = new Sunny.UI.UILabel(); + this.uiLabel4 = new Sunny.UI.UILabel(); + this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip(); + this.设置ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.更改密码ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.uiLine1 = new Sunny.UI.UILine(); + this.PagePanel.SuspendLayout(); + this.uiContextMenuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiLabel4); + this.PagePanel.Controls.Add(this.uiLabel3); + this.PagePanel.Controls.Add(this.uiLabel2); + this.PagePanel.Controls.Add(this.uiLabel1); + this.PagePanel.Controls.Add(this.uiAvatar4); + this.PagePanel.Controls.Add(this.uiAvatar3); + this.PagePanel.Controls.Add(this.uiAvatar2); + this.PagePanel.Controls.Add(this.uiAvatar1); + this.PagePanel.Text = ""; + // + // uiAvatar1 + // + this.uiAvatar1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiAvatar1.Location = new System.Drawing.Point(102, 50); + this.uiAvatar1.Name = "uiAvatar1"; + this.uiAvatar1.Size = new System.Drawing.Size(60, 60); + this.uiAvatar1.TabIndex = 0; + this.uiAvatar1.Text = "uiAvatar1"; + // + // uiAvatar2 + // + this.uiAvatar2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiAvatar2.Icon = Sunny.UI.UIAvatar.UIIcon.Image; + this.uiAvatar2.Image = global::Sunny.UI.Demo.Properties.Resources.SunnyUISmall; + this.uiAvatar2.Location = new System.Drawing.Point(30, 50); + this.uiAvatar2.Name = "uiAvatar2"; + this.uiAvatar2.Size = new System.Drawing.Size(60, 60); + this.uiAvatar2.TabIndex = 1; + this.uiAvatar2.Text = "uiAvatar2"; + // + // uiAvatar3 + // + this.uiAvatar3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); + this.uiAvatar3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiAvatar3.Icon = Sunny.UI.UIAvatar.UIIcon.Text; + this.uiAvatar3.Location = new System.Drawing.Point(174, 50); + this.uiAvatar3.Name = "uiAvatar3"; + this.uiAvatar3.Size = new System.Drawing.Size(60, 60); + this.uiAvatar3.Style = Sunny.UI.UIStyle.Custom; + this.uiAvatar3.TabIndex = 2; + this.uiAvatar3.Text = "Avatar"; + // + // uiAvatar4 + // + this.uiAvatar4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiAvatar4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(255))))); + this.uiAvatar4.Location = new System.Drawing.Point(362, 50); + this.uiAvatar4.Name = "uiAvatar4"; + this.uiAvatar4.Size = new System.Drawing.Size(60, 60); + this.uiAvatar4.Style = Sunny.UI.UIStyle.Custom; + this.uiAvatar4.Symbol = 61715; + this.uiAvatar4.TabIndex = 3; + this.uiAvatar4.Text = "uiAvatar4"; + this.uiAvatar4.Click += new System.EventHandler(this.uiAvatar4_Click); + // + // uiLabel1 + // + this.uiLabel1.AutoSize = true; + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel1.Location = new System.Drawing.Point(39, 117); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(42, 21); + this.uiLabel1.TabIndex = 4; + this.uiLabel1.Text = "图片"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel2 + // + this.uiLabel2.AutoSize = true; + this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel2.Location = new System.Drawing.Point(111, 117); + this.uiLabel2.Name = "uiLabel2"; + this.uiLabel2.Size = new System.Drawing.Size(42, 21); + this.uiLabel2.TabIndex = 5; + this.uiLabel2.Text = "图标"; + this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel3 + // + this.uiLabel3.AutoSize = true; + this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel3.Location = new System.Drawing.Point(183, 117); + this.uiLabel3.Name = "uiLabel3"; + this.uiLabel3.Size = new System.Drawing.Size(42, 21); + this.uiLabel3.TabIndex = 6; + this.uiLabel3.Text = "文字"; + this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel4 + // + this.uiLabel4.AutoSize = true; + this.uiLabel4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel4.Location = new System.Drawing.Point(355, 117); + this.uiLabel4.Name = "uiLabel4"; + this.uiLabel4.Size = new System.Drawing.Size(74, 21); + this.uiLabel4.TabIndex = 7; + this.uiLabel4.Text = "左键菜单"; + this.uiLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiContextMenuStrip1 + // + this.uiContextMenuStrip1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiContextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.设置ToolStripMenuItem, + this.更改密码ToolStripMenuItem, + this.toolStripMenuItem1, + this.退出ToolStripMenuItem}); + this.uiContextMenuStrip1.Name = "uiContextMenuStrip1"; + this.uiContextMenuStrip1.Size = new System.Drawing.Size(113, 88); + // + // 设置ToolStripMenuItem + // + this.设置ToolStripMenuItem.Name = "设置ToolStripMenuItem"; + this.设置ToolStripMenuItem.Size = new System.Drawing.Size(112, 26); + this.设置ToolStripMenuItem.Text = "设置"; + // + // 更改密码ToolStripMenuItem + // + this.更改密码ToolStripMenuItem.Name = "更改密码ToolStripMenuItem"; + this.更改密码ToolStripMenuItem.Size = new System.Drawing.Size(112, 26); + this.更改密码ToolStripMenuItem.Text = "密码"; + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(109, 6); + // + // 退出ToolStripMenuItem + // + this.退出ToolStripMenuItem.Name = "退出ToolStripMenuItem"; + this.退出ToolStripMenuItem.Size = new System.Drawing.Size(112, 26); + this.退出ToolStripMenuItem.Text = "退出"; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "UIAvatar"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FAvatar + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FAvatar"; + this.Text = "Avatar"; + this.Controls.SetChildIndex(this.PagePanel, 0); + this.PagePanel.ResumeLayout(false); + this.PagePanel.PerformLayout(); + this.uiContextMenuStrip1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UILabel uiLabel4; + private UILabel uiLabel3; + private UILabel uiLabel2; + private UILabel uiLabel1; + private UIAvatar uiAvatar4; + private UIAvatar uiAvatar3; + private UIAvatar uiAvatar2; + private UIAvatar uiAvatar1; + private UIContextMenuStrip uiContextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem 设置ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 更改密码ToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem; + private UILine uiLine1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FAvatar.cs b/SunnyUI.Demo/Controls/FAvatar.cs new file mode 100644 index 00000000..5e89019e --- /dev/null +++ b/SunnyUI.Demo/Controls/FAvatar.cs @@ -0,0 +1,17 @@ +using System; + +namespace Sunny.UI.Demo +{ + public partial class FAvatar : UITitlePage + { + public FAvatar() + { + InitializeComponent(); + } + + private void uiAvatar4_Click(object sender, EventArgs e) + { + uiContextMenuStrip1.Show(uiAvatar4, 0, uiAvatar4.Height); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FAvatar.resx b/SunnyUI.Demo/Controls/FAvatar.resx new file mode 100644 index 00000000..93ecf1d7 --- /dev/null +++ b/SunnyUI.Demo/Controls/FAvatar.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 + + + 17, 17 + + \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FButton.Designer.cs b/SunnyUI.Demo/Controls/FButton.Designer.cs new file mode 100644 index 00000000..25d023e0 --- /dev/null +++ b/SunnyUI.Demo/Controls/FButton.Designer.cs @@ -0,0 +1,1029 @@ +namespace Sunny.UI.Demo +{ + partial class FButton + { + /// + /// 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.uiButton1 = new Sunny.UI.UIButton(); + this.uiButton2 = new Sunny.UI.UIButton(); + this.uiButton3 = new Sunny.UI.UIButton(); + this.uiButton4 = new Sunny.UI.UIButton(); + this.uiButton5 = new Sunny.UI.UIButton(); + this.uiButton6 = new Sunny.UI.UIButton(); + this.uiButton7 = new Sunny.UI.UIButton(); + this.uiButton8 = new Sunny.UI.UIButton(); + this.uiButton9 = new Sunny.UI.UIButton(); + this.uiButton10 = new Sunny.UI.UIButton(); + this.uiButton11 = new Sunny.UI.UIButton(); + this.uiButton12 = new Sunny.UI.UIButton(); + this.uiButton13 = new Sunny.UI.UIButton(); + this.uiButton14 = new Sunny.UI.UIButton(); + this.uiButton15 = new Sunny.UI.UIButton(); + this.uiButton16 = new Sunny.UI.UIButton(); + this.uiButton17 = new Sunny.UI.UIButton(); + this.uiButton18 = new Sunny.UI.UIButton(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiSymbolButton1 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton2 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton3 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton4 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton5 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton6 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton7 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton8 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton9 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton10 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton11 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton12 = new Sunny.UI.UISymbolButton(); + this.uiLine3 = new Sunny.UI.UILine(); + this.uiSymbolButton13 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton14 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton15 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton16 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton17 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton18 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton19 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton20 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton21 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton22 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton23 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton24 = new Sunny.UI.UISymbolButton(); + this.uiSwitch1 = new Sunny.UI.UISwitch(); + this.uiLine4 = new Sunny.UI.UILine(); + this.uiSwitch2 = new Sunny.UI.UISwitch(); + this.uiLine5 = new Sunny.UI.UILine(); + this.uiImageButton1 = new Sunny.UI.UIImageButton(); + this.uiImageButton2 = new Sunny.UI.UIImageButton(); + this.uiImageButton3 = new Sunny.UI.UIImageButton(); + this.PagePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).BeginInit(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiImageButton3); + this.PagePanel.Controls.Add(this.uiImageButton2); + this.PagePanel.Controls.Add(this.uiImageButton1); + this.PagePanel.Controls.Add(this.uiLine5); + this.PagePanel.Controls.Add(this.uiSwitch2); + this.PagePanel.Controls.Add(this.uiLine4); + this.PagePanel.Controls.Add(this.uiSwitch1); + this.PagePanel.Controls.Add(this.uiSymbolButton24); + this.PagePanel.Controls.Add(this.uiSymbolButton23); + this.PagePanel.Controls.Add(this.uiSymbolButton22); + this.PagePanel.Controls.Add(this.uiSymbolButton19); + this.PagePanel.Controls.Add(this.uiSymbolButton20); + this.PagePanel.Controls.Add(this.uiSymbolButton21); + this.PagePanel.Controls.Add(this.uiSymbolButton13); + this.PagePanel.Controls.Add(this.uiSymbolButton14); + this.PagePanel.Controls.Add(this.uiSymbolButton15); + this.PagePanel.Controls.Add(this.uiSymbolButton16); + this.PagePanel.Controls.Add(this.uiSymbolButton17); + this.PagePanel.Controls.Add(this.uiSymbolButton18); + this.PagePanel.Controls.Add(this.uiLine3); + this.PagePanel.Controls.Add(this.uiSymbolButton7); + this.PagePanel.Controls.Add(this.uiSymbolButton8); + this.PagePanel.Controls.Add(this.uiSymbolButton9); + this.PagePanel.Controls.Add(this.uiSymbolButton10); + this.PagePanel.Controls.Add(this.uiSymbolButton11); + this.PagePanel.Controls.Add(this.uiSymbolButton12); + this.PagePanel.Controls.Add(this.uiSymbolButton6); + this.PagePanel.Controls.Add(this.uiSymbolButton5); + this.PagePanel.Controls.Add(this.uiSymbolButton3); + this.PagePanel.Controls.Add(this.uiSymbolButton4); + this.PagePanel.Controls.Add(this.uiSymbolButton2); + this.PagePanel.Controls.Add(this.uiSymbolButton1); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiButton13); + this.PagePanel.Controls.Add(this.uiButton14); + this.PagePanel.Controls.Add(this.uiButton15); + this.PagePanel.Controls.Add(this.uiButton16); + this.PagePanel.Controls.Add(this.uiButton17); + this.PagePanel.Controls.Add(this.uiButton18); + this.PagePanel.Controls.Add(this.uiButton7); + this.PagePanel.Controls.Add(this.uiButton8); + this.PagePanel.Controls.Add(this.uiButton9); + this.PagePanel.Controls.Add(this.uiButton10); + this.PagePanel.Controls.Add(this.uiButton11); + this.PagePanel.Controls.Add(this.uiButton12); + this.PagePanel.Controls.Add(this.uiButton4); + this.PagePanel.Controls.Add(this.uiButton5); + this.PagePanel.Controls.Add(this.uiButton6); + this.PagePanel.Controls.Add(this.uiButton3); + this.PagePanel.Controls.Add(this.uiButton2); + this.PagePanel.Controls.Add(this.uiButton1); + this.PagePanel.Size = new System.Drawing.Size(800, 499); + this.PagePanel.Text = ""; + // + // uiButton1 + // + this.uiButton1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton1.FillColor = System.Drawing.Color.White; + this.uiButton1.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiButton1.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiButton1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102))))); + this.uiButton1.ForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiButton1.ForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.uiButton1.Location = new System.Drawing.Point(30, 50); + this.uiButton1.Name = "uiButton1"; + this.uiButton1.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227))))); + this.uiButton1.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255))))); + this.uiButton1.Size = new System.Drawing.Size(100, 35); + this.uiButton1.Style = Sunny.UI.UIStyle.White; + this.uiButton1.StyleCustomMode = true; + this.uiButton1.TabIndex = 0; + this.uiButton1.Text = "White"; + // + // uiButton2 + // + this.uiButton2.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton2.Location = new System.Drawing.Point(144, 50); + this.uiButton2.Name = "uiButton2"; + this.uiButton2.Size = new System.Drawing.Size(100, 35); + this.uiButton2.StyleCustomMode = true; + this.uiButton2.TabIndex = 1; + this.uiButton2.Text = "Blue"; + // + // uiButton3 + // + this.uiButton3.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiButton3.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiButton3.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiButton3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton3.Location = new System.Drawing.Point(258, 50); + this.uiButton3.Name = "uiButton3"; + this.uiButton3.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiButton3.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiButton3.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiButton3.Size = new System.Drawing.Size(100, 35); + this.uiButton3.Style = Sunny.UI.UIStyle.Green; + this.uiButton3.StyleCustomMode = true; + this.uiButton3.TabIndex = 2; + this.uiButton3.Text = "Green"; + // + // uiButton4 + // + this.uiButton4.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton4.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiButton4.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiButton4.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiButton4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton4.Location = new System.Drawing.Point(600, 50); + this.uiButton4.Name = "uiButton4"; + this.uiButton4.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiButton4.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiButton4.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiButton4.Size = new System.Drawing.Size(100, 35); + this.uiButton4.Style = Sunny.UI.UIStyle.Red; + this.uiButton4.StyleCustomMode = true; + this.uiButton4.TabIndex = 5; + this.uiButton4.Text = "Red"; + // + // uiButton5 + // + this.uiButton5.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton5.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiButton5.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiButton5.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiButton5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton5.Location = new System.Drawing.Point(486, 50); + this.uiButton5.Name = "uiButton5"; + this.uiButton5.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiButton5.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiButton5.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiButton5.Size = new System.Drawing.Size(100, 35); + this.uiButton5.Style = Sunny.UI.UIStyle.Orange; + this.uiButton5.StyleCustomMode = true; + this.uiButton5.TabIndex = 4; + this.uiButton5.Text = "Orange"; + // + // uiButton6 + // + this.uiButton6.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton6.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.uiButton6.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165))))); + this.uiButton6.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129))))); + this.uiButton6.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton6.Location = new System.Drawing.Point(372, 50); + this.uiButton6.Name = "uiButton6"; + this.uiButton6.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.uiButton6.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165))))); + this.uiButton6.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129))))); + this.uiButton6.Size = new System.Drawing.Size(100, 35); + this.uiButton6.Style = Sunny.UI.UIStyle.Gray; + this.uiButton6.StyleCustomMode = true; + this.uiButton6.TabIndex = 3; + this.uiButton6.Text = "Gray"; + // + // uiButton7 + // + this.uiButton7.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton7.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(238)))), ((int)(((byte)(238))))); + this.uiButton7.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiButton7.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiButton7.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiButton7.Location = new System.Drawing.Point(600, 100); + this.uiButton7.Name = "uiButton7"; + this.uiButton7.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiButton7.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiButton7.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiButton7.Size = new System.Drawing.Size(100, 35); + this.uiButton7.Style = Sunny.UI.UIStyle.LightRed; + this.uiButton7.StyleCustomMode = true; + this.uiButton7.TabIndex = 11; + this.uiButton7.Text = "LightRed"; + // + // uiButton8 + // + this.uiButton8.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton8.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(245)))), ((int)(((byte)(233))))); + this.uiButton8.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiButton8.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiButton8.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiButton8.Location = new System.Drawing.Point(486, 100); + this.uiButton8.Name = "uiButton8"; + this.uiButton8.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiButton8.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiButton8.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiButton8.Size = new System.Drawing.Size(100, 35); + this.uiButton8.Style = Sunny.UI.UIStyle.LightOrange; + this.uiButton8.StyleCustomMode = true; + this.uiButton8.TabIndex = 10; + this.uiButton8.Text = "LightOrange"; + // + // uiButton9 + // + this.uiButton9.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton9.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(242)))), ((int)(((byte)(242)))), ((int)(((byte)(244))))); + this.uiButton9.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.uiButton9.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129))))); + this.uiButton9.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.uiButton9.Location = new System.Drawing.Point(372, 100); + this.uiButton9.Name = "uiButton9"; + this.uiButton9.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.uiButton9.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.uiButton9.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129))))); + this.uiButton9.Size = new System.Drawing.Size(100, 35); + this.uiButton9.Style = Sunny.UI.UIStyle.LightGray; + this.uiButton9.StyleCustomMode = true; + this.uiButton9.TabIndex = 9; + this.uiButton9.Text = "LightGray"; + // + // uiButton10 + // + this.uiButton10.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton10.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232))))); + this.uiButton10.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiButton10.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiButton10.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton10.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiButton10.Location = new System.Drawing.Point(258, 100); + this.uiButton10.Name = "uiButton10"; + this.uiButton10.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiButton10.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiButton10.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiButton10.Size = new System.Drawing.Size(100, 35); + this.uiButton10.Style = Sunny.UI.UIStyle.LightGreen; + this.uiButton10.StyleCustomMode = true; + this.uiButton10.TabIndex = 8; + this.uiButton10.Text = "LightGreen"; + // + // uiButton11 + // + this.uiButton11.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton11.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton11.Location = new System.Drawing.Point(144, 100); + this.uiButton11.Name = "uiButton11"; + this.uiButton11.Size = new System.Drawing.Size(100, 35); + this.uiButton11.StyleCustomMode = true; + this.uiButton11.TabIndex = 7; + this.uiButton11.Text = "LightBlue"; + // + // uiButton12 + // + this.uiButton12.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton12.FillColor = System.Drawing.Color.White; + this.uiButton12.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiButton12.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiButton12.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton12.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102))))); + this.uiButton12.ForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiButton12.ForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.uiButton12.Location = new System.Drawing.Point(30, 100); + this.uiButton12.Name = "uiButton12"; + this.uiButton12.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227))))); + this.uiButton12.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255))))); + this.uiButton12.Size = new System.Drawing.Size(100, 35); + this.uiButton12.Style = Sunny.UI.UIStyle.White; + this.uiButton12.StyleCustomMode = true; + this.uiButton12.TabIndex = 6; + this.uiButton12.Text = "White"; + // + // uiButton13 + // + this.uiButton13.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton13.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiButton13.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiButton13.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiButton13.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton13.Location = new System.Drawing.Point(600, 150); + this.uiButton13.Name = "uiButton13"; + this.uiButton13.Radius = 35; + this.uiButton13.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiButton13.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiButton13.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiButton13.Size = new System.Drawing.Size(100, 35); + this.uiButton13.Style = Sunny.UI.UIStyle.Red; + this.uiButton13.StyleCustomMode = true; + this.uiButton13.TabIndex = 17; + this.uiButton13.Text = "Red"; + // + // uiButton14 + // + this.uiButton14.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton14.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiButton14.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiButton14.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiButton14.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton14.Location = new System.Drawing.Point(486, 150); + this.uiButton14.Name = "uiButton14"; + this.uiButton14.Radius = 35; + this.uiButton14.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiButton14.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiButton14.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiButton14.Size = new System.Drawing.Size(100, 35); + this.uiButton14.Style = Sunny.UI.UIStyle.Orange; + this.uiButton14.StyleCustomMode = true; + this.uiButton14.TabIndex = 16; + this.uiButton14.Text = "Orange"; + // + // uiButton15 + // + this.uiButton15.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton15.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.uiButton15.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165))))); + this.uiButton15.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129))))); + this.uiButton15.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton15.Location = new System.Drawing.Point(372, 150); + this.uiButton15.Name = "uiButton15"; + this.uiButton15.Radius = 35; + this.uiButton15.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.uiButton15.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165))))); + this.uiButton15.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129))))); + this.uiButton15.Size = new System.Drawing.Size(100, 35); + this.uiButton15.Style = Sunny.UI.UIStyle.Gray; + this.uiButton15.StyleCustomMode = true; + this.uiButton15.TabIndex = 15; + this.uiButton15.Text = "Gray"; + // + // uiButton16 + // + this.uiButton16.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton16.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiButton16.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiButton16.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiButton16.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton16.Location = new System.Drawing.Point(258, 150); + this.uiButton16.Name = "uiButton16"; + this.uiButton16.Radius = 35; + this.uiButton16.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiButton16.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiButton16.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiButton16.Size = new System.Drawing.Size(100, 35); + this.uiButton16.Style = Sunny.UI.UIStyle.Green; + this.uiButton16.StyleCustomMode = true; + this.uiButton16.TabIndex = 14; + this.uiButton16.Text = "Green"; + // + // uiButton17 + // + this.uiButton17.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton17.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton17.Location = new System.Drawing.Point(144, 150); + this.uiButton17.Name = "uiButton17"; + this.uiButton17.Radius = 35; + this.uiButton17.Size = new System.Drawing.Size(100, 35); + this.uiButton17.StyleCustomMode = true; + this.uiButton17.TabIndex = 13; + this.uiButton17.Text = "Blue"; + // + // uiButton18 + // + this.uiButton18.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton18.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton18.Location = new System.Drawing.Point(30, 150); + this.uiButton18.Name = "uiButton18"; + this.uiButton18.Radius = 35; + this.uiButton18.Size = new System.Drawing.Size(100, 35); + this.uiButton18.TabIndex = 12; + this.uiButton18.Text = "Round"; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 18; + this.uiLine1.Text = "UIButton"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(30, 200); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(670, 16); + this.uiLine2.TabIndex = 19; + this.uiLine2.Text = "UISymbolButton"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiSymbolButton1 + // + this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton1.Location = new System.Drawing.Point(30, 230); + this.uiSymbolButton1.Name = "uiSymbolButton1"; + this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton1.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton1.StyleCustomMode = true; + this.uiSymbolButton1.TabIndex = 20; + this.uiSymbolButton1.Text = "OK"; + // + // uiSymbolButton2 + // + this.uiSymbolButton2.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton2.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton2.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton2.Location = new System.Drawing.Point(144, 230); + this.uiSymbolButton2.Name = "uiSymbolButton2"; + this.uiSymbolButton2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton2.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton2.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton2.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton2.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton2.Style = Sunny.UI.UIStyle.Red; + this.uiSymbolButton2.StyleCustomMode = true; + this.uiSymbolButton2.Symbol = 61453; + this.uiSymbolButton2.TabIndex = 21; + this.uiSymbolButton2.Text = "Cancel"; + // + // uiSymbolButton3 + // + this.uiSymbolButton3.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolButton3.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiSymbolButton3.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiSymbolButton3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton3.Location = new System.Drawing.Point(372, 230); + this.uiSymbolButton3.Name = "uiSymbolButton3"; + this.uiSymbolButton3.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton3.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolButton3.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiSymbolButton3.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiSymbolButton3.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton3.Style = Sunny.UI.UIStyle.Green; + this.uiSymbolButton3.StyleCustomMode = true; + this.uiSymbolButton3.Symbol = 61530; + this.uiSymbolButton3.TabIndex = 23; + this.uiSymbolButton3.Text = "Success"; + // + // uiSymbolButton4 + // + this.uiSymbolButton4.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton4.Location = new System.Drawing.Point(258, 230); + this.uiSymbolButton4.Name = "uiSymbolButton4"; + this.uiSymbolButton4.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton4.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton4.StyleCustomMode = true; + this.uiSymbolButton4.Symbol = 61529; + this.uiSymbolButton4.TabIndex = 22; + this.uiSymbolButton4.Text = "Query"; + // + // uiSymbolButton5 + // + this.uiSymbolButton5.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton5.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolButton5.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiSymbolButton5.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiSymbolButton5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton5.Location = new System.Drawing.Point(486, 230); + this.uiSymbolButton5.Name = "uiSymbolButton5"; + this.uiSymbolButton5.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton5.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolButton5.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiSymbolButton5.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiSymbolButton5.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton5.Style = Sunny.UI.UIStyle.Orange; + this.uiSymbolButton5.StyleCustomMode = true; + this.uiSymbolButton5.Symbol = 61553; + this.uiSymbolButton5.TabIndex = 24; + this.uiSymbolButton5.Text = "Warn"; + // + // uiSymbolButton6 + // + this.uiSymbolButton6.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton6.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton6.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton6.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton6.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton6.Location = new System.Drawing.Point(600, 230); + this.uiSymbolButton6.Name = "uiSymbolButton6"; + this.uiSymbolButton6.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton6.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton6.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton6.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton6.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton6.Style = Sunny.UI.UIStyle.Red; + this.uiSymbolButton6.StyleCustomMode = true; + this.uiSymbolButton6.Symbol = 61532; + this.uiSymbolButton6.TabIndex = 25; + this.uiSymbolButton6.Text = "Error"; + // + // uiSymbolButton7 + // + this.uiSymbolButton7.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton7.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton7.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton7.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton7.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton7.IsCircle = true; + this.uiSymbolButton7.Location = new System.Drawing.Point(235, 280); + this.uiSymbolButton7.Name = "uiSymbolButton7"; + this.uiSymbolButton7.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton7.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton7.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton7.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton7.Size = new System.Drawing.Size(35, 35); + this.uiSymbolButton7.Style = Sunny.UI.UIStyle.Red; + this.uiSymbolButton7.StyleCustomMode = true; + this.uiSymbolButton7.Symbol = 61809; + this.uiSymbolButton7.TabIndex = 31; + // + // uiSymbolButton8 + // + this.uiSymbolButton8.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton8.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolButton8.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiSymbolButton8.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiSymbolButton8.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton8.IsCircle = true; + this.uiSymbolButton8.Location = new System.Drawing.Point(194, 280); + this.uiSymbolButton8.Name = "uiSymbolButton8"; + this.uiSymbolButton8.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton8.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolButton8.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiSymbolButton8.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiSymbolButton8.Size = new System.Drawing.Size(35, 35); + this.uiSymbolButton8.Style = Sunny.UI.UIStyle.Orange; + this.uiSymbolButton8.StyleCustomMode = true; + this.uiSymbolButton8.Symbol = 61445; + this.uiSymbolButton8.TabIndex = 30; + // + // uiSymbolButton9 + // + this.uiSymbolButton9.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton9.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolButton9.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiSymbolButton9.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiSymbolButton9.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton9.IsCircle = true; + this.uiSymbolButton9.Location = new System.Drawing.Point(153, 280); + this.uiSymbolButton9.Name = "uiSymbolButton9"; + this.uiSymbolButton9.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton9.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolButton9.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiSymbolButton9.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiSymbolButton9.Size = new System.Drawing.Size(35, 35); + this.uiSymbolButton9.Style = Sunny.UI.UIStyle.Green; + this.uiSymbolButton9.StyleCustomMode = true; + this.uiSymbolButton9.Symbol = 57607; + this.uiSymbolButton9.TabIndex = 29; + // + // uiSymbolButton10 + // + this.uiSymbolButton10.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton10.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton10.IsCircle = true; + this.uiSymbolButton10.Location = new System.Drawing.Point(112, 280); + this.uiSymbolButton10.Name = "uiSymbolButton10"; + this.uiSymbolButton10.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton10.Size = new System.Drawing.Size(35, 35); + this.uiSymbolButton10.StyleCustomMode = true; + this.uiSymbolButton10.TabIndex = 28; + // + // uiSymbolButton11 + // + this.uiSymbolButton11.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton11.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton11.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton11.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton11.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton11.IsCircle = true; + this.uiSymbolButton11.Location = new System.Drawing.Point(71, 280); + this.uiSymbolButton11.Name = "uiSymbolButton11"; + this.uiSymbolButton11.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton11.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton11.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton11.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton11.Size = new System.Drawing.Size(35, 35); + this.uiSymbolButton11.Style = Sunny.UI.UIStyle.Red; + this.uiSymbolButton11.StyleCustomMode = true; + this.uiSymbolButton11.Symbol = 61508; + this.uiSymbolButton11.TabIndex = 27; + // + // uiSymbolButton12 + // + this.uiSymbolButton12.CircleRectWidth = 2; + this.uiSymbolButton12.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton12.FillColor = System.Drawing.Color.White; + this.uiSymbolButton12.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiSymbolButton12.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiSymbolButton12.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton12.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(96)))), ((int)(((byte)(98)))), ((int)(((byte)(102))))); + this.uiSymbolButton12.ForeHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiSymbolButton12.ForePressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.uiSymbolButton12.IsCircle = true; + this.uiSymbolButton12.Location = new System.Drawing.Point(30, 280); + this.uiSymbolButton12.Name = "uiSymbolButton12"; + this.uiSymbolButton12.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton12.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(219)))), ((int)(((byte)(227))))); + this.uiSymbolButton12.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(197)))), ((int)(((byte)(222)))), ((int)(((byte)(255))))); + this.uiSymbolButton12.Size = new System.Drawing.Size(35, 35); + this.uiSymbolButton12.Style = Sunny.UI.UIStyle.White; + this.uiSymbolButton12.StyleCustomMode = true; + this.uiSymbolButton12.Symbol = 61442; + this.uiSymbolButton12.TabIndex = 26; + // + // uiLine3 + // + this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine3.Location = new System.Drawing.Point(30, 330); + this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine3.Name = "uiLine3"; + this.uiLine3.Size = new System.Drawing.Size(670, 20); + this.uiLine3.TabIndex = 32; + this.uiLine3.Text = "UISymbolButton 按钮组"; + this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiSymbolButton13 + // + this.uiSymbolButton13.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton13.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton13.Location = new System.Drawing.Point(260, 360); + this.uiSymbolButton13.Name = "uiSymbolButton13"; + this.uiSymbolButton13.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton13.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiSymbolButton13.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton13.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton13.Symbol = 61518; + this.uiSymbolButton13.TabIndex = 38; + // + // uiSymbolButton14 + // + this.uiSymbolButton14.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton14.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton14.Location = new System.Drawing.Point(214, 360); + this.uiSymbolButton14.Name = "uiSymbolButton14"; + this.uiSymbolButton14.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton14.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiSymbolButton14.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton14.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton14.Symbol = 61514; + this.uiSymbolButton14.TabIndex = 37; + // + // uiSymbolButton15 + // + this.uiSymbolButton15.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton15.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton15.Location = new System.Drawing.Point(168, 360); + this.uiSymbolButton15.Name = "uiSymbolButton15"; + this.uiSymbolButton15.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton15.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiSymbolButton15.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton15.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton15.Symbol = 61513; + this.uiSymbolButton15.TabIndex = 36; + // + // uiSymbolButton16 + // + this.uiSymbolButton16.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton16.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton16.Location = new System.Drawing.Point(122, 360); + this.uiSymbolButton16.Name = "uiSymbolButton16"; + this.uiSymbolButton16.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton16.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiSymbolButton16.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton16.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton16.Symbol = 61517; + this.uiSymbolButton16.TabIndex = 35; + // + // uiSymbolButton17 + // + this.uiSymbolButton17.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton17.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton17.Location = new System.Drawing.Point(76, 360); + this.uiSymbolButton17.Name = "uiSymbolButton17"; + this.uiSymbolButton17.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton17.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiSymbolButton17.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton17.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton17.Symbol = 61516; + this.uiSymbolButton17.TabIndex = 34; + // + // uiSymbolButton18 + // + this.uiSymbolButton18.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton18.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton18.Location = new System.Drawing.Point(30, 360); + this.uiSymbolButton18.Name = "uiSymbolButton18"; + this.uiSymbolButton18.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton18.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.LeftTop | Sunny.UI.UICornerRadiusSides.LeftBottom))); + this.uiSymbolButton18.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton18.Symbol = 61515; + this.uiSymbolButton18.TabIndex = 33; + // + // uiSymbolButton19 + // + this.uiSymbolButton19.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton19.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton19.Location = new System.Drawing.Point(516, 360); + this.uiSymbolButton19.Name = "uiSymbolButton19"; + this.uiSymbolButton19.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton19.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.LeftTop | Sunny.UI.UICornerRadiusSides.LeftBottom))); + this.uiSymbolButton19.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton19.Symbol = 61543; + this.uiSymbolButton19.TabIndex = 41; + // + // uiSymbolButton20 + // + this.uiSymbolButton20.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton20.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton20.Location = new System.Drawing.Point(352, 360); + this.uiSymbolButton20.Name = "uiSymbolButton20"; + this.uiSymbolButton20.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton20.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom))); + this.uiSymbolButton20.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton20.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton20.Symbol = 61522; + this.uiSymbolButton20.TabIndex = 40; + // + // uiSymbolButton21 + // + this.uiSymbolButton21.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton21.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton21.Location = new System.Drawing.Point(306, 360); + this.uiSymbolButton21.Name = "uiSymbolButton21"; + this.uiSymbolButton21.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton21.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiSymbolButton21.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton21.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton21.Symbol = 61520; + this.uiSymbolButton21.TabIndex = 39; + // + // uiSymbolButton22 + // + this.uiSymbolButton22.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton22.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton22.Location = new System.Drawing.Point(562, 360); + this.uiSymbolButton22.Name = "uiSymbolButton22"; + this.uiSymbolButton22.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton22.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiSymbolButton22.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton22.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton22.Symbol = 61508; + this.uiSymbolButton22.TabIndex = 42; + // + // uiSymbolButton23 + // + this.uiSymbolButton23.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton23.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton23.Location = new System.Drawing.Point(608, 360); + this.uiSymbolButton23.Name = "uiSymbolButton23"; + this.uiSymbolButton23.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton23.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiSymbolButton23.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton23.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton23.Symbol = 61544; + this.uiSymbolButton23.TabIndex = 43; + // + // uiSymbolButton24 + // + this.uiSymbolButton24.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton24.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton24.Location = new System.Drawing.Point(654, 360); + this.uiSymbolButton24.Name = "uiSymbolButton24"; + this.uiSymbolButton24.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton24.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom))); + this.uiSymbolButton24.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.uiSymbolButton24.Size = new System.Drawing.Size(46, 35); + this.uiSymbolButton24.Symbol = 61473; + this.uiSymbolButton24.TabIndex = 44; + // + // uiSwitch1 + // + this.uiSwitch1.Active = true; + this.uiSwitch1.ActiveText = "On"; + this.uiSwitch1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSwitch1.InActiveColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(192))))); + this.uiSwitch1.InActiveText = "Off"; + this.uiSwitch1.Location = new System.Drawing.Point(30, 441); + this.uiSwitch1.Name = "uiSwitch1"; + this.uiSwitch1.Size = new System.Drawing.Size(75, 29); + this.uiSwitch1.TabIndex = 45; + this.uiSwitch1.Text = "uiSwitch1"; + // + // uiLine4 + // + this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine4.Location = new System.Drawing.Point(30, 412); + this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine4.Name = "uiLine4"; + this.uiLine4.Size = new System.Drawing.Size(312, 20); + this.uiLine4.TabIndex = 46; + this.uiLine4.Text = "UISwitch"; + this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiSwitch2 + // + this.uiSwitch2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSwitch2.InActiveColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(192))))); + this.uiSwitch2.Location = new System.Drawing.Point(112, 441); + this.uiSwitch2.Name = "uiSwitch2"; + this.uiSwitch2.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None; + this.uiSwitch2.Size = new System.Drawing.Size(75, 29); + this.uiSwitch2.TabIndex = 47; + this.uiSwitch2.Text = "uiSwitch2"; + // + // uiLine5 + // + this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine5.Location = new System.Drawing.Point(388, 412); + this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine5.Name = "uiLine5"; + this.uiLine5.Size = new System.Drawing.Size(312, 20); + this.uiLine5.TabIndex = 48; + this.uiLine5.Text = "UIImageButton"; + this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiImageButton1 + // + this.uiImageButton1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiImageButton1.Image = global::Sunny.UI.Demo.Properties.Resources.dashboard0; + this.uiImageButton1.ImageHover = global::Sunny.UI.Demo.Properties.Resources.dashboard; + this.uiImageButton1.ImagePress = global::Sunny.UI.Demo.Properties.Resources.dashboard0; + this.uiImageButton1.Location = new System.Drawing.Point(395, 438); + this.uiImageButton1.Name = "uiImageButton1"; + this.uiImageButton1.Size = new System.Drawing.Size(92, 35); + this.uiImageButton1.TabIndex = 49; + this.uiImageButton1.TabStop = false; + this.uiImageButton1.Text = "Home"; + this.uiImageButton1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // uiImageButton2 + // + this.uiImageButton2.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiImageButton2.Image = global::Sunny.UI.Demo.Properties.Resources.relationship0; + this.uiImageButton2.ImageHover = global::Sunny.UI.Demo.Properties.Resources.relationship; + this.uiImageButton2.ImagePress = global::Sunny.UI.Demo.Properties.Resources.relationship0; + this.uiImageButton2.Location = new System.Drawing.Point(495, 438); + this.uiImageButton2.Name = "uiImageButton2"; + this.uiImageButton2.Size = new System.Drawing.Size(43, 35); + this.uiImageButton2.TabIndex = 50; + this.uiImageButton2.TabStop = false; + this.uiImageButton2.Text = null; + // + // uiImageButton3 + // + this.uiImageButton3.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiImageButton3.Image = global::Sunny.UI.Demo.Properties.Resources.save0; + this.uiImageButton3.ImageHover = global::Sunny.UI.Demo.Properties.Resources.save; + this.uiImageButton3.ImagePress = global::Sunny.UI.Demo.Properties.Resources.save0; + this.uiImageButton3.Location = new System.Drawing.Point(546, 438); + this.uiImageButton3.Name = "uiImageButton3"; + this.uiImageButton3.Size = new System.Drawing.Size(43, 35); + this.uiImageButton3.TabIndex = 51; + this.uiImageButton3.TabStop = false; + this.uiImageButton3.Text = null; + // + // FButton + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 534); + this.Name = "FButton"; + this.PageIndex = 1001; + this.Text = "Button"; + this.PagePanel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.uiImageButton1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.uiImageButton2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.uiImageButton3)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private UIButton uiButton13; + private UIButton uiButton14; + private UIButton uiButton15; + private UIButton uiButton16; + private UIButton uiButton17; + private UIButton uiButton18; + private UIButton uiButton7; + private UIButton uiButton8; + private UIButton uiButton9; + private UIButton uiButton10; + private UIButton uiButton11; + private UIButton uiButton12; + private UIButton uiButton4; + private UIButton uiButton5; + private UIButton uiButton6; + private UIButton uiButton3; + private UIButton uiButton2; + private UIButton uiButton1; + private UILine uiLine1; + private UISymbolButton uiSymbolButton2; + private UISymbolButton uiSymbolButton1; + private UILine uiLine2; + private UISymbolButton uiSymbolButton3; + private UISymbolButton uiSymbolButton4; + private UISymbolButton uiSymbolButton6; + private UISymbolButton uiSymbolButton5; + private UISymbolButton uiSymbolButton7; + private UISymbolButton uiSymbolButton8; + private UISymbolButton uiSymbolButton9; + private UISymbolButton uiSymbolButton10; + private UISymbolButton uiSymbolButton11; + private UISymbolButton uiSymbolButton12; + private UISymbolButton uiSymbolButton19; + private UISymbolButton uiSymbolButton20; + private UISymbolButton uiSymbolButton21; + private UISymbolButton uiSymbolButton13; + private UISymbolButton uiSymbolButton14; + private UISymbolButton uiSymbolButton15; + private UISymbolButton uiSymbolButton16; + private UISymbolButton uiSymbolButton17; + private UISymbolButton uiSymbolButton18; + private UILine uiLine3; + private UISymbolButton uiSymbolButton24; + private UISymbolButton uiSymbolButton23; + private UISymbolButton uiSymbolButton22; + private UISwitch uiSwitch2; + private UILine uiLine4; + private UISwitch uiSwitch1; + private UILine uiLine5; + private UIImageButton uiImageButton3; + private UIImageButton uiImageButton2; + private UIImageButton uiImageButton1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FButton.cs b/SunnyUI.Demo/Controls/FButton.cs new file mode 100644 index 00000000..e75440d6 --- /dev/null +++ b/SunnyUI.Demo/Controls/FButton.cs @@ -0,0 +1,13 @@ +using System; +using System.Drawing; + +namespace Sunny.UI.Demo +{ + public partial class FButton : UITitlePage + { + public FButton() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FButton.resx b/SunnyUI.Demo/Controls/FButton.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FButton.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/SunnyUI.Demo/Controls/FCheckBox.Designer.cs b/SunnyUI.Demo/Controls/FCheckBox.Designer.cs new file mode 100644 index 00000000..97c9bc1a --- /dev/null +++ b/SunnyUI.Demo/Controls/FCheckBox.Designer.cs @@ -0,0 +1,153 @@ +namespace Sunny.UI.Demo +{ + partial class FCheckBox + { + /// + /// 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.uiCheckBox1 = new Sunny.UI.UICheckBox(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiCheckBox3 = new Sunny.UI.UICheckBox(); + this.uiCheckBox4 = new Sunny.UI.UICheckBox(); + this.uiCheckBox2 = new Sunny.UI.UICheckBox(); + this.uiCheckBoxGroup1 = new Sunny.UI.UICheckBoxGroup(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiCheckBoxGroup1); + this.PagePanel.Controls.Add(this.uiCheckBox2); + this.PagePanel.Controls.Add(this.uiCheckBox4); + this.PagePanel.Controls.Add(this.uiCheckBox3); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiCheckBox1); + this.PagePanel.Size = new System.Drawing.Size(800, 521); + // + // uiCheckBox1 + // + this.uiCheckBox1.Checked = true; + this.uiCheckBox1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiCheckBox1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiCheckBox1.Location = new System.Drawing.Point(30, 48); + this.uiCheckBox1.Name = "uiCheckBox1"; + this.uiCheckBox1.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiCheckBox1.Size = new System.Drawing.Size(150, 35); + this.uiCheckBox1.TabIndex = 0; + this.uiCheckBox1.Text = "uiCheckBox1"; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "UICheckBox"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiCheckBox3 + // + this.uiCheckBox3.Checked = true; + this.uiCheckBox3.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiCheckBox3.Enabled = false; + this.uiCheckBox3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiCheckBox3.Location = new System.Drawing.Point(354, 46); + this.uiCheckBox3.Name = "uiCheckBox3"; + this.uiCheckBox3.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiCheckBox3.Size = new System.Drawing.Size(150, 35); + this.uiCheckBox3.TabIndex = 21; + this.uiCheckBox3.Text = "uiCheckBox3"; + // + // uiCheckBox4 + // + this.uiCheckBox4.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiCheckBox4.Enabled = false; + this.uiCheckBox4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiCheckBox4.Location = new System.Drawing.Point(516, 46); + this.uiCheckBox4.Name = "uiCheckBox4"; + this.uiCheckBox4.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiCheckBox4.Size = new System.Drawing.Size(150, 35); + this.uiCheckBox4.TabIndex = 22; + this.uiCheckBox4.Text = "uiCheckBox4"; + // + // uiCheckBox2 + // + this.uiCheckBox2.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiCheckBox2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiCheckBox2.Location = new System.Drawing.Point(192, 48); + this.uiCheckBox2.Name = "uiCheckBox2"; + this.uiCheckBox2.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiCheckBox2.Size = new System.Drawing.Size(150, 35); + this.uiCheckBox2.TabIndex = 39; + this.uiCheckBox2.Text = "uiCheckBox2"; + // + // uiCheckBoxGroup1 + // + this.uiCheckBoxGroup1.ColumnCount = 2; + this.uiCheckBoxGroup1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiCheckBoxGroup1.Items.AddRange(new object[] { + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8"}); + this.uiCheckBoxGroup1.Location = new System.Drawing.Point(30, 91); + this.uiCheckBoxGroup1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiCheckBoxGroup1.Name = "uiCheckBoxGroup1"; + this.uiCheckBoxGroup1.Size = new System.Drawing.Size(670, 211); + this.uiCheckBoxGroup1.TabIndex = 41; + this.uiCheckBoxGroup1.Text = "UICheckBoxGroup"; + this.uiCheckBoxGroup1.ValueChanged += new Sunny.UI.UICheckBoxGroup.OnValueChanged(this.uiCheckBoxGroup1_ValueChanged); + // + // FCheckBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 556); + this.Name = "FCheckBox"; + this.PageIndex = 1002; + this.Text = "CheckBox"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UICheckBox uiCheckBox1; + private UILine uiLine1; + private UICheckBox uiCheckBox4; + private UICheckBox uiCheckBox3; + private UICheckBox uiCheckBox2; + private UICheckBoxGroup uiCheckBoxGroup1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FCheckBox.cs b/SunnyUI.Demo/Controls/FCheckBox.cs new file mode 100644 index 00000000..840ff7cb --- /dev/null +++ b/SunnyUI.Demo/Controls/FCheckBox.cs @@ -0,0 +1,31 @@ +using System.Text; +using System.Windows.Forms; + +namespace Sunny.UI.Demo +{ + public partial class FCheckBox : UITitlePage + { + public FCheckBox() + { + InitializeComponent(); + } + + private void uiRadioButtonGroup1_ValueChanged(object sender, int index, string text) + { + MessageBox.Show(index.ToString()); + } + + private void uiCheckBoxGroup1_ValueChanged(object sender, int index, string text, bool isChecked) + { + StringBuilder sb = new StringBuilder(); + sb.Append("SelectedIndexes: "); + foreach (var selectedIndex in uiCheckBoxGroup1.SelectedIndexes) + { + sb.Append(selectedIndex); + sb.Append(", "); + } + + this.ShowInfoDialog("SelectedIndex: " + index + ", SelectedText: " + text + "\n" + sb.ToString()); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FCheckBox.resx b/SunnyUI.Demo/Controls/FCheckBox.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FCheckBox.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/SunnyUI.Demo/Controls/FContextMenuStrip.Designer.cs b/SunnyUI.Demo/Controls/FContextMenuStrip.Designer.cs new file mode 100644 index 00000000..39273d1f --- /dev/null +++ b/SunnyUI.Demo/Controls/FContextMenuStrip.Designer.cs @@ -0,0 +1,103 @@ +namespace Sunny.UI.Demo +{ + partial class FContextMenuStrip + { + /// + /// 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.uiButton1 = new Sunny.UI.UIButton(); + this.uiButton2 = new Sunny.UI.UIButton(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiContextMenuStrip1 = new Sunny.UI.UIContextMenuStrip(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiButton2); + this.PagePanel.Controls.Add(this.uiButton1); + // + // uiButton1 + // + this.uiButton1.ContextMenuStrip = this.uiContextMenuStrip1; + this.uiButton1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton1.Location = new System.Drawing.Point(30, 57); + this.uiButton1.Name = "uiButton1"; + this.uiButton1.Size = new System.Drawing.Size(232, 35); + this.uiButton1.TabIndex = 0; + this.uiButton1.Text = "右键菜单"; + // + // uiButton2 + // + this.uiButton2.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiButton2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiButton2.Location = new System.Drawing.Point(294, 57); + this.uiButton2.Name = "uiButton2"; + this.uiButton2.Size = new System.Drawing.Size(232, 35); + this.uiButton2.TabIndex = 1; + this.uiButton2.Text = "左键菜单"; + this.uiButton2.Click += new System.EventHandler(this.uiButton2_Click); + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "UIContextMenuStrip"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiContextMenuStrip1 + // + this.uiContextMenuStrip1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiContextMenuStrip1.Name = "uiContextMenuStrip1"; + this.uiContextMenuStrip1.Size = new System.Drawing.Size(61, 4); + // + // FContextMenuStrip + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FContextMenuStrip"; + this.Text = "ContextMenuStrip"; + this.Controls.SetChildIndex(this.PagePanel, 0); + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UIButton uiButton1; + private UIButton uiButton2; + private UILine uiLine1; + private UIContextMenuStrip uiContextMenuStrip1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FContextMenuStrip.cs b/SunnyUI.Demo/Controls/FContextMenuStrip.cs new file mode 100644 index 00000000..b984f371 --- /dev/null +++ b/SunnyUI.Demo/Controls/FContextMenuStrip.cs @@ -0,0 +1,35 @@ +using System; +using System.Windows.Forms; + +namespace Sunny.UI.Demo +{ + public partial class FContextMenuStrip : UITitlePage + { + public FContextMenuStrip() + { + InitializeComponent(); + + var styles = UIStyles.PopularStyles(); + foreach (UIStyle style in styles) + { + ToolStripMenuItem item = new ToolStripMenuItem(style.DisplayText()) { Tag = style }; + item.Click += Item_Click; + uiContextMenuStrip1.Items.Add(item); + } + } + + private void Item_Click(object sender, EventArgs e) + { + ToolStripMenuItem item = (ToolStripMenuItem)sender; + if (item.Tag != null && item.Tag is UIStyle style) + { + this.Style = style; + } + } + + private void uiButton2_Click(object sender, System.EventArgs e) + { + uiButton2.ShowContextMenuStrip(uiContextMenuStrip1, 0, uiButton2.Height); + } + } +} diff --git a/SunnyUI.Demo/Controls/FContextMenuStrip.resx b/SunnyUI.Demo/Controls/FContextMenuStrip.resx new file mode 100644 index 00000000..93ecf1d7 --- /dev/null +++ b/SunnyUI.Demo/Controls/FContextMenuStrip.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 + + + 17, 17 + + \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FDataGridView.Designer.cs b/SunnyUI.Demo/Controls/FDataGridView.Designer.cs new file mode 100644 index 00000000..e6dcd165 --- /dev/null +++ b/SunnyUI.Demo/Controls/FDataGridView.Designer.cs @@ -0,0 +1,103 @@ +namespace Sunny.UI.Demo +{ + partial class FDataGridView + { + /// + /// 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(); + this.uiDataGridView1 = new Sunny.UI.UIDataGridView(); + this.PagePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.uiDataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiDataGridView1); + // + // uiDataGridView1 + // + this.uiDataGridView1.AllowUserToAddRows = false; + this.uiDataGridView1.AllowUserToResizeRows = false; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiDataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + this.uiDataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.uiDataGridView1.BackgroundColor = System.Drawing.Color.White; + this.uiDataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.uiDataGridView1.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None; + this.uiDataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 12F); + dataGridViewCellStyle2.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.uiDataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + this.uiDataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.uiDataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiDataGridView1.EnableHeadersVisualStyles = false; + this.uiDataGridView1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiDataGridView1.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiDataGridView1.Location = new System.Drawing.Point(0, 0); + this.uiDataGridView1.MultiSelect = false; + this.uiDataGridView1.Name = "uiDataGridView1"; + this.uiDataGridView1.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiDataGridView1.RowHeadersVisible = false; + dataGridViewCellStyle3.BackColor = System.Drawing.Color.White; + this.uiDataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle3; + this.uiDataGridView1.RowTemplate.Height = 29; + this.uiDataGridView1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.uiDataGridView1.SelectedIndex = -1; + this.uiDataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.uiDataGridView1.ShowRect = false; + this.uiDataGridView1.Size = new System.Drawing.Size(800, 415); + this.uiDataGridView1.Style = Sunny.UI.UIStyle.Custom; + this.uiDataGridView1.TabIndex = 0; + this.uiDataGridView1.TagString = null; + // + // FDataGridView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FDataGridView"; + this.PageIndex = 1006; + this.Text = "DataGridView"; + this.PagePanel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.uiDataGridView1)).EndInit(); + this.ResumeLayout(false); + + } + + + #endregion + + private UIDataGridView uiDataGridView1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FDataGridView.cs b/SunnyUI.Demo/Controls/FDataGridView.cs new file mode 100644 index 00000000..8349f8ea --- /dev/null +++ b/SunnyUI.Demo/Controls/FDataGridView.cs @@ -0,0 +1,55 @@ +using System.Collections.Generic; +using System.Windows.Forms; + +namespace Sunny.UI.Demo +{ + public partial class FDataGridView : UITitlePage + { + public FDataGridView() + { + InitializeComponent(); + + uiDataGridView1.AddColumn("Column1", "Column1", 100); + uiDataGridView1.AddColumn("Column2", "Column2").SetFixedMode(100); + uiDataGridView1.AddColumn("Column3", "Column3").SetFixedMode(100); + //uiDataGridView1.AddColumn("Column4", "Column4", 20); + + uiDataGridView1.ReadOnly = true; + } + + public override void Init() + { + base.Init(); + + List datas = new List(); + for (int i = 0; i < 200; i++) + { + Data data = new Data(); + data.Column1 = "Data" + i.ToString("D2"); + data.Column2 = i.Mod(2) == 0 ? "A" : "B"; + data.Column3 = "编辑"; + data.Column4 = i.Mod(4) == 0; + datas.Add(data); + } + + uiDataGridView1.DataSource = datas; + uiDataGridView1.SelectedIndex = 160; + } + + public class Data + { + public string Column1 { get; set; } + + public string Column2 { get; set; } + + public string Column3 { get; set; } + + public bool Column4 { get; set; } + + public override string ToString() + { + return Column1; + } + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FDataGridView.resx b/SunnyUI.Demo/Controls/FDataGridView.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FDataGridView.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/SunnyUI.Demo/Controls/FLabel.Designer.cs b/SunnyUI.Demo/Controls/FLabel.Designer.cs new file mode 100644 index 00000000..65b4107f --- /dev/null +++ b/SunnyUI.Demo/Controls/FLabel.Designer.cs @@ -0,0 +1,162 @@ +namespace Sunny.UI.Demo +{ + partial class FLabel + { + /// + /// 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.uiLabel1 = new Sunny.UI.UILabel(); + this.uiLinkLabel1 = new Sunny.UI.UILinkLabel(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiLine3 = new Sunny.UI.UILine(); + this.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel(); + this.uiSymbolLabel2 = new Sunny.UI.UISymbolLabel(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiSymbolLabel2); + this.PagePanel.Controls.Add(this.uiSymbolLabel1); + this.PagePanel.Controls.Add(this.uiLine3); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiLinkLabel1); + this.PagePanel.Controls.Add(this.uiLabel1); + // + // uiLabel1 + // + this.uiLabel1.AutoSize = true; + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel1.Location = new System.Drawing.Point(42, 55); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(102, 21); + this.uiLabel1.TabIndex = 0; + this.uiLabel1.Text = "Hello world!"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLinkLabel1 + // + this.uiLinkLabel1.ActiveLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiLinkLabel1.AutoSize = true; + this.uiLinkLabel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLinkLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiLinkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.AlwaysUnderline; + this.uiLinkLabel1.LinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiLinkLabel1.Location = new System.Drawing.Point(42, 127); + this.uiLinkLabel1.Name = "uiLinkLabel1"; + this.uiLinkLabel1.Size = new System.Drawing.Size(146, 21); + this.uiLinkLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiLinkLabel1.TabIndex = 1; + this.uiLinkLabel1.TabStop = true; + this.uiLinkLabel1.Text = "www.SunnyUI.net"; + this.uiLinkLabel1.VisitedLinkColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiLinkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.uiLinkLabel1_LinkClicked); + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "UILabel"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(30, 92); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(670, 20); + this.uiLine2.TabIndex = 20; + this.uiLine2.Text = "UILinkLabel"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine3 + // + this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine3.Location = new System.Drawing.Point(30, 173); + this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine3.Name = "uiLine3"; + this.uiLine3.Size = new System.Drawing.Size(670, 20); + this.uiLine3.TabIndex = 21; + this.uiLine3.Text = "UISymbolLabel"; + this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiSymbolLabel1 + // + this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiSymbolLabel1.Location = new System.Drawing.Point(42, 209); + this.uiSymbolLabel1.Name = "uiSymbolLabel1"; + this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolLabel1.Size = new System.Drawing.Size(91, 24); + this.uiSymbolLabel1.TabIndex = 22; + this.uiSymbolLabel1.Text = "OK"; + this.uiSymbolLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiSymbolLabel2 + // + this.uiSymbolLabel2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolLabel2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiSymbolLabel2.Location = new System.Drawing.Point(139, 209); + this.uiSymbolLabel2.Name = "uiSymbolLabel2"; + this.uiSymbolLabel2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolLabel2.Size = new System.Drawing.Size(91, 24); + this.uiSymbolLabel2.Symbol = 61453; + this.uiSymbolLabel2.TabIndex = 23; + this.uiSymbolLabel2.Text = "Cancel"; + this.uiSymbolLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FLabel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FLabel"; + this.StyleCustomMode = true; + this.Text = "Label"; + this.PagePanel.ResumeLayout(false); + this.PagePanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private UILabel uiLabel1; + private UILinkLabel uiLinkLabel1; + private UILine uiLine3; + private UILine uiLine2; + private UILine uiLine1; + private UISymbolLabel uiSymbolLabel1; + private UISymbolLabel uiSymbolLabel2; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FLabel.cs b/SunnyUI.Demo/Controls/FLabel.cs new file mode 100644 index 00000000..ce636100 --- /dev/null +++ b/SunnyUI.Demo/Controls/FLabel.cs @@ -0,0 +1,18 @@ +using System.Diagnostics; +using System.Windows.Forms; + +namespace Sunny.UI.Demo +{ + public partial class FLabel : UITitlePage + { + public FLabel() + { + InitializeComponent(); + } + + private void uiLinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Process.Start(uiLinkLabel1.Text); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FLabel.resx b/SunnyUI.Demo/Controls/FLabel.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FLabel.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/SunnyUI.Demo/Controls/FLine.Designer.cs b/SunnyUI.Demo/Controls/FLine.Designer.cs new file mode 100644 index 00000000..d99d99d9 --- /dev/null +++ b/SunnyUI.Demo/Controls/FLine.Designer.cs @@ -0,0 +1,216 @@ +namespace Sunny.UI.Demo +{ + partial class FLine + { + /// + /// 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.uiLine1 = new Sunny.UI.UILine(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiLine3 = new Sunny.UI.UILine(); + this.uiLine4 = new Sunny.UI.UILine(); + this.uiLine5 = new Sunny.UI.UILine(); + this.uiLine6 = new Sunny.UI.UILine(); + this.uiLine7 = new Sunny.UI.UILine(); + this.uiLine8 = new Sunny.UI.UILine(); + this.uiLine9 = new Sunny.UI.UILine(); + this.uiLine10 = new Sunny.UI.UILine(); + this.uiLine11 = new Sunny.UI.UILine(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine11); + this.PagePanel.Controls.Add(this.uiLine10); + this.PagePanel.Controls.Add(this.uiLine7); + this.PagePanel.Controls.Add(this.uiLine8); + this.PagePanel.Controls.Add(this.uiLine9); + this.PagePanel.Controls.Add(this.uiLine4); + this.PagePanel.Controls.Add(this.uiLine5); + this.PagePanel.Controls.Add(this.uiLine6); + this.PagePanel.Controls.Add(this.uiLine3); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Size = new System.Drawing.Size(800, 521); + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(443, 33); + this.uiLine1.TabIndex = 0; + this.uiLine1.Text = "文字左上 LineSize=1"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.TopLeft; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.LineSize = 2; + this.uiLine2.Location = new System.Drawing.Point(30, 58); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(443, 29); + this.uiLine2.TabIndex = 1; + this.uiLine2.Text = "文字左中 LineSize=2"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine3 + // + this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLine3.LineSize = 3; + this.uiLine3.Location = new System.Drawing.Point(30, 93); + this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine3.Name = "uiLine3"; + this.uiLine3.Size = new System.Drawing.Size(443, 51); + this.uiLine3.TabIndex = 2; + this.uiLine3.Text = "文字左下 LineSize=3"; + this.uiLine3.TextAlign = System.Drawing.ContentAlignment.BottomLeft; + // + // uiLine4 + // + this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLine4.LineSize = 3; + this.uiLine4.Location = new System.Drawing.Point(30, 245); + this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine4.Name = "uiLine4"; + this.uiLine4.Size = new System.Drawing.Size(443, 51); + this.uiLine4.TabIndex = 5; + this.uiLine4.Text = "文字中下"; + this.uiLine4.TextAlign = System.Drawing.ContentAlignment.BottomCenter; + // + // uiLine5 + // + this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine5.LineSize = 2; + this.uiLine5.Location = new System.Drawing.Point(30, 210); + this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine5.Name = "uiLine5"; + this.uiLine5.Size = new System.Drawing.Size(443, 29); + this.uiLine5.TabIndex = 4; + this.uiLine5.Text = "文字居中"; + // + // uiLine6 + // + this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLine6.Location = new System.Drawing.Point(30, 172); + this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine6.Name = "uiLine6"; + this.uiLine6.Size = new System.Drawing.Size(443, 33); + this.uiLine6.TabIndex = 3; + this.uiLine6.Text = "文字中上"; + this.uiLine6.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // uiLine7 + // + this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLine7.LineSize = 3; + this.uiLine7.Location = new System.Drawing.Point(30, 393); + this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine7.Name = "uiLine7"; + this.uiLine7.Size = new System.Drawing.Size(443, 51); + this.uiLine7.TabIndex = 8; + this.uiLine7.Text = "文字右下"; + this.uiLine7.TextAlign = System.Drawing.ContentAlignment.BottomRight; + // + // uiLine8 + // + this.uiLine8.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine8.LineSize = 2; + this.uiLine8.Location = new System.Drawing.Point(30, 358); + this.uiLine8.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine8.Name = "uiLine8"; + this.uiLine8.Size = new System.Drawing.Size(443, 29); + this.uiLine8.TabIndex = 7; + this.uiLine8.Text = "文字右中"; + this.uiLine8.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // uiLine9 + // + this.uiLine9.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLine9.Location = new System.Drawing.Point(30, 320); + this.uiLine9.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine9.Name = "uiLine9"; + this.uiLine9.Size = new System.Drawing.Size(443, 33); + this.uiLine9.TabIndex = 6; + this.uiLine9.Text = "文字右上"; + this.uiLine9.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // uiLine10 + // + this.uiLine10.Direction = Sunny.UI.UILine.LineDirection.Vertical; + this.uiLine10.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLine10.Location = new System.Drawing.Point(521, 32); + this.uiLine10.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine10.Name = "uiLine10"; + this.uiLine10.Size = new System.Drawing.Size(51, 388); + this.uiLine10.TabIndex = 11; + this.uiLine10.Text = "uiLine10"; + this.uiLine10.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine11 + // + this.uiLine11.Direction = Sunny.UI.UILine.LineDirection.Vertical; + this.uiLine11.Font = new System.Drawing.Font("微软雅黑", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLine11.LineSize = 2; + this.uiLine11.Location = new System.Drawing.Point(578, 32); + this.uiLine11.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine11.Name = "uiLine11"; + this.uiLine11.Size = new System.Drawing.Size(51, 388); + this.uiLine11.TabIndex = 12; + this.uiLine11.Text = "uiLine11"; + this.uiLine11.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FLine + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 556); + this.Name = "FLine"; + this.PageIndex = 1004; + this.Text = "Line"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UILine uiLine7; + private UILine uiLine8; + private UILine uiLine9; + private UILine uiLine4; + private UILine uiLine5; + private UILine uiLine6; + private UILine uiLine3; + private UILine uiLine2; + private UILine uiLine1; + private UILine uiLine10; + private UILine uiLine11; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FLine.cs b/SunnyUI.Demo/Controls/FLine.cs new file mode 100644 index 00000000..aedddd68 --- /dev/null +++ b/SunnyUI.Demo/Controls/FLine.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FLine : UITitlePage + { + public FLine() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FLine.resx b/SunnyUI.Demo/Controls/FLine.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FLine.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/SunnyUI.Demo/Controls/FListBox.Designer.cs b/SunnyUI.Demo/Controls/FListBox.Designer.cs new file mode 100644 index 00000000..4e1a4cd2 --- /dev/null +++ b/SunnyUI.Demo/Controls/FListBox.Designer.cs @@ -0,0 +1,149 @@ +namespace Sunny.UI.Demo +{ + partial class FListBox + { + /// + /// 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.uiImageListBox1 = new Sunny.UI.UIImageListBox(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiListBox1 = new Sunny.UI.UIListBox(); + this.uiCheckBox1 = new Sunny.UI.UICheckBox(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiCheckBox1); + this.PagePanel.Controls.Add(this.uiListBox1); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiImageListBox1); + this.PagePanel.Size = new System.Drawing.Size(800, 465); + // + // uiImageListBox1 + // + this.uiImageListBox1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiImageListBox1.ItemHeight = 80; + this.uiImageListBox1.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiImageListBox1.Location = new System.Drawing.Point(355, 48); + this.uiImageListBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiImageListBox1.Name = "uiImageListBox1"; + this.uiImageListBox1.Padding = new System.Windows.Forms.Padding(2); + this.uiImageListBox1.Size = new System.Drawing.Size(266, 343); + this.uiImageListBox1.TabIndex = 1; + this.uiImageListBox1.Text = "uiImageListBox1"; + this.uiImageListBox1.ItemDoubleClick += new System.EventHandler(this.uiImageListBox1_ItemDoubleClick); + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(33, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(266, 18); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "uiListBox"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(355, 20); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(266, 18); + this.uiLine2.TabIndex = 20; + this.uiLine2.Text = "uiImageListBox"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiListBox1 + // + this.uiListBox1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiListBox1.Items.AddRange(new object[] { + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18"}); + this.uiListBox1.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.uiListBox1.Location = new System.Drawing.Point(33, 48); + this.uiListBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiListBox1.Name = "uiListBox1"; + this.uiListBox1.Padding = new System.Windows.Forms.Padding(2); + this.uiListBox1.Size = new System.Drawing.Size(270, 343); + this.uiListBox1.TabIndex = 21; + this.uiListBox1.Text = "uiListBox1"; + this.uiListBox1.ItemDoubleClick += new System.EventHandler(this.uiListBox1_ItemDoubleClick); + // + // uiCheckBox1 + // + this.uiCheckBox1.Checked = true; + this.uiCheckBox1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiCheckBox1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiCheckBox1.Location = new System.Drawing.Point(355, 399); + this.uiCheckBox1.Name = "uiCheckBox1"; + this.uiCheckBox1.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiCheckBox1.Size = new System.Drawing.Size(266, 35); + this.uiCheckBox1.TabIndex = 22; + this.uiCheckBox1.Text = "ShowDescription"; + this.uiCheckBox1.ValueChanged += new Sunny.UI.UICheckBox.OnValueChanged(this.uiCheckBox1_ValueChanged); + // + // FListBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 500); + this.Name = "FListBox"; + this.Text = "ListBox"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private UIImageListBox uiImageListBox1; + private UILine uiLine2; + private UILine uiLine1; + private UIListBox uiListBox1; + private UICheckBox uiCheckBox1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FListBox.cs b/SunnyUI.Demo/Controls/FListBox.cs new file mode 100644 index 00000000..13d30f2c --- /dev/null +++ b/SunnyUI.Demo/Controls/FListBox.cs @@ -0,0 +1,45 @@ +using System.IO; + +namespace Sunny.UI.Demo +{ + public partial class FListBox : UITitlePage + { + public FListBox() + { + InitializeComponent(); + } + + public override void Init() + { + uiListBox1.Items.Clear(); + for (int i = 0; i < 20; i++) + { + uiListBox1.Items.Add(i); + } + + uiImageListBox1.Items.Clear(); + string[] files = System.IO.Directory.GetFiles(DirEx.CurrentDir() + "Team", + "*.png", SearchOption.TopDirectoryOnly); + foreach (string file in files) + { + uiImageListBox1.AddImage(file, file.FileInfo().Name); + } + } + + private void uiImageListBox1_ItemDoubleClick(object sender, System.EventArgs e) + { + this.ShowInfoDialog(uiImageListBox1.SelectedItem.ImagePath); + } + + private void uiCheckBox1_ValueChanged(object sender, bool value) + { + uiImageListBox1.ShowDescription = !uiImageListBox1.ShowDescription; + uiImageListBox1.ItemHeight = uiImageListBox1.ShowDescription ? 80 : 50; + } + + private void uiListBox1_ItemDoubleClick(object sender, System.EventArgs e) + { + this.ShowInfoDialog(uiListBox1.SelectedItem.ToString()); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FListBox.resx b/SunnyUI.Demo/Controls/FListBox.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FListBox.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/SunnyUI.Demo/Controls/FMeter.Designer.cs b/SunnyUI.Demo/Controls/FMeter.Designer.cs new file mode 100644 index 00000000..68d1d0b2 --- /dev/null +++ b/SunnyUI.Demo/Controls/FMeter.Designer.cs @@ -0,0 +1,192 @@ +namespace Sunny.UI.Demo +{ + partial class FMeter + { + /// + /// 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(FMeter)); + this.uiAnalogMeter1 = new Sunny.UI.UIAnalogMeter(); + this.uiLine9 = new Sunny.UI.UILine(); + this.uiLine7 = new Sunny.UI.UILine(); + this.uiLine6 = new Sunny.UI.UILine(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiLedStopwatch1 = new Sunny.UI.UILedStopwatch(); + this.uiLedDisplay1 = new Sunny.UI.UILedDisplay(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.uiRoundMeter2 = new Sunny.UI.UIRoundMeter(); + this.uiRoundMeter1 = new Sunny.UI.UIRoundMeter(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiAnalogMeter1); + this.PagePanel.Controls.Add(this.uiLine9); + this.PagePanel.Controls.Add(this.uiLine7); + this.PagePanel.Controls.Add(this.uiRoundMeter2); + this.PagePanel.Controls.Add(this.uiLine6); + this.PagePanel.Controls.Add(this.uiRoundMeter1); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiLedStopwatch1); + this.PagePanel.Controls.Add(this.uiLedDisplay1); + // + // uiAnalogMeter1 + // + this.uiAnalogMeter1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiAnalogMeter1.Location = new System.Drawing.Point(381, 146); + this.uiAnalogMeter1.MaxValue = 100D; + this.uiAnalogMeter1.MinValue = 0D; + this.uiAnalogMeter1.Name = "uiAnalogMeter1"; + this.uiAnalogMeter1.Renderer = null; + this.uiAnalogMeter1.Size = new System.Drawing.Size(140, 140); + this.uiAnalogMeter1.TabIndex = 52; + this.uiAnalogMeter1.Text = "uiAnalogMeter1"; + this.uiAnalogMeter1.Value = 0D; + // + // uiLine9 + // + this.uiLine9.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine9.Location = new System.Drawing.Point(381, 105); + this.uiLine9.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine9.Name = "uiLine9"; + this.uiLine9.Size = new System.Drawing.Size(319, 20); + this.uiLine9.TabIndex = 51; + this.uiLine9.Text = "UIAnalogMeter"; + this.uiLine9.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine7 + // + this.uiLine7.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine7.Location = new System.Drawing.Point(381, 20); + this.uiLine7.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine7.Name = "uiLine7"; + this.uiLine7.Size = new System.Drawing.Size(319, 20); + this.uiLine7.TabIndex = 50; + this.uiLine7.Text = "UILedStopwatch"; + this.uiLine7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine6 + // + this.uiLine6.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine6.Location = new System.Drawing.Point(30, 105); + this.uiLine6.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine6.Name = "uiLine6"; + this.uiLine6.Size = new System.Drawing.Size(319, 20); + this.uiLine6.TabIndex = 48; + this.uiLine6.Text = "UIRoundMeter"; + this.uiLine6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(319, 20); + this.uiLine1.TabIndex = 46; + this.uiLine1.Text = "UILedDisplay"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLedStopwatch1 + // + this.uiLedStopwatch1.Active = true; + this.uiLedStopwatch1.BackColor = System.Drawing.Color.Black; + this.uiLedStopwatch1.ForeColor = System.Drawing.Color.Lime; + this.uiLedStopwatch1.Location = new System.Drawing.Point(381, 52); + this.uiLedStopwatch1.Name = "uiLedStopwatch1"; + this.uiLedStopwatch1.Size = new System.Drawing.Size(190, 34); + this.uiLedStopwatch1.TabIndex = 45; + this.uiLedStopwatch1.Text = "01:18"; + // + // uiLedDisplay1 + // + this.uiLedDisplay1.BackColor = System.Drawing.Color.Black; + this.uiLedDisplay1.ForeColor = System.Drawing.Color.Lime; + this.uiLedDisplay1.Location = new System.Drawing.Point(30, 52); + this.uiLedDisplay1.Name = "uiLedDisplay1"; + this.uiLedDisplay1.Size = new System.Drawing.Size(190, 34); + this.uiLedDisplay1.TabIndex = 44; + this.uiLedDisplay1.Text = "999.9 Ω"; + // + // timer1 + // + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // uiRoundMeter2 + // + this.uiRoundMeter2.Angle = 0D; + this.uiRoundMeter2.AngleImage = ((System.Drawing.Image)(resources.GetObject("uiRoundMeter2.AngleImage"))); + this.uiRoundMeter2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("uiRoundMeter2.BackgroundImage"))); + this.uiRoundMeter2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.uiRoundMeter2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRoundMeter2.Location = new System.Drawing.Point(186, 141); + this.uiRoundMeter2.MeterType = Sunny.UI.UIRoundMeter.TMeterType.Wind; + this.uiRoundMeter2.Name = "uiRoundMeter2"; + this.uiRoundMeter2.Size = new System.Drawing.Size(140, 140); + this.uiRoundMeter2.TabIndex = 49; + this.uiRoundMeter2.Text = "uiRoundMeter2"; + // + // uiRoundMeter1 + // + this.uiRoundMeter1.Angle = 0D; + this.uiRoundMeter1.AngleImage = ((System.Drawing.Image)(resources.GetObject("uiRoundMeter1.AngleImage"))); + this.uiRoundMeter1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("uiRoundMeter1.BackgroundImage"))); + this.uiRoundMeter1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.uiRoundMeter1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRoundMeter1.Location = new System.Drawing.Point(30, 136); + this.uiRoundMeter1.Name = "uiRoundMeter1"; + this.uiRoundMeter1.Size = new System.Drawing.Size(150, 150); + this.uiRoundMeter1.TabIndex = 47; + this.uiRoundMeter1.Text = "uiRoundMeter1"; + // + // FMeter + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FMeter"; + this.Text = "Meter"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UIAnalogMeter uiAnalogMeter1; + private UILine uiLine9; + private UILine uiLine7; + private UIRoundMeter uiRoundMeter2; + private UILine uiLine6; + private UIRoundMeter uiRoundMeter1; + private UILine uiLine1; + private UILedStopwatch uiLedStopwatch1; + private UILedDisplay uiLedDisplay1; + private System.Windows.Forms.Timer timer1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FMeter.cs b/SunnyUI.Demo/Controls/FMeter.cs new file mode 100644 index 00000000..25a5b377 --- /dev/null +++ b/SunnyUI.Demo/Controls/FMeter.cs @@ -0,0 +1,27 @@ +namespace Sunny.UI.Demo +{ + public partial class FMeter : UITitlePage + { + public FMeter() + { + InitializeComponent(); + } + + private int value; + + public override void Init() + { + uiLedStopwatch1.Active = true; + value = 0; + timer1.ReStart(); + } + + private void timer1_Tick(object sender, System.EventArgs e) + { + value++; + uiRoundMeter1.Angle = value * 10; + uiRoundMeter2.Angle = value * 10; + uiAnalogMeter1.Value = value; + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FMeter.resx b/SunnyUI.Demo/Controls/FMeter.resx new file mode 100644 index 00000000..af441c40 --- /dev/null +++ b/SunnyUI.Demo/Controls/FMeter.resx @@ -0,0 +1,824 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + 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 + f+uvSxAXl/8PnMmNTepNpz0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAYAAACuwEE+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAxiSURBVHhe7Z0JdBRFAoYH5dQFOQQXcy2IBLkhIEcIESXx + iYGVS6N4rasg6q5KYEEQgafiiqysKAiichhFIoeA3CCYcIRAYgBXBVY5XQSPIEnIzHRX1f6VrjFBEkgk + gWTyf+99r4fOTHcdf1d3zfQwLkLIBSKlDIX3wTuVUn80qwkpGATlBvgXGMvAkEKRWwPrehMrd7IPPHy3 + yDn4oshMfUn+khJq/kzImbgTgwd4k0OUlVZXWTurKO/mGsq9scYA82dCzsS9KaSvd1uQstIDc/WmBCv3 + 5uD+5s+EnAkDQ4oFA0OKhTsJgUlmYEgRYWBIsXAnBTIwpOgwMKRYMDCkWJwVmB0IzDYGhhRCbmC2MzCk + iDAwpFi4tyIwKQwMKSIMDCkWDAwpFmcFZicCk8LAkEJwb0dgdvw2MAEMDCkY/VmStcMJixOYQASmBQND + Csa9BoFJNYH5HIFJbYDARDMwpGDcG4JH6KDk2VB5Ulp9ejolIsg8hRAH9+rgGHdi0I/WrvyBgakITXKj + lXJby2vMU0lF5/S6kC7e5MCDvlPRWaYFK++2FktUUqs65iWkouLeFHLD6W1BewoNS64BuaGxdoTNlulR + V5qXkopG9vrAAPfWgMSCQ/JbdWhCcIqKmKA2RlY2myAVhdwvrW0OWlxwOAozQP2YXNdtp0fFms2QioDa + GFLdsyVo6uEVgbLgYJzLAOVOa/Sj2h3TzGyO+DveLYFxxzfW9xQciKIYoLxpjQ+azRF/xrMlMDY7NfBU + /s7P89rzmP+5MK3xl2azxB+xtgff4k4OOJEXAMx80q9T1q6msJmydjc3tlLWntaOu1vmrdfP0c9Nb+y8 + VocmPTTFbJ74E97khmHetIBDVjpmOrua5IbC3t9f2YdHKXFihhI/Jyj5y1q4XsnsXUrmfOOYnYZ163L/ + Jn5aoMTx6co+FKfsvX1MiK5Xnj3tV5rdEH/Avb1mU+vzoHRrjwnJ0TEIyTsIyWInDJlblMzaqeTp3Y7Z + e6Bear8w6xGizBTnuSfX4LWLEJ5ZCNwIZe/rray9Me8opSqZXZLyivw2LsTa3SJRHHhEiWOvOiHJ2oEA + 7IVfwS+dUOSqg5I/LD59683z9GtyX/s1ApSMkWe++u67cV6RsfwNhKa22TUpT+ijHVYR3781RxwaqeSp + JJxiEJLs/8B0hCa1ZNSnr9wAfaFyMrdkCM+Rl6WU7bHvOhxxygnosGqwJRxpeY/tzczcl+XxHD7u8Rw9 + 5ngEHi4h9bac7ebk7P/Jsn44IIRYjn0Pg6EITVVTLFIWQQfVRkfdh06Lt207EW7Guk3493q4ppTdgP1t + gSl4vBH7nYOy9If8/Kksgg76EzonDp21EJ22HX5mOnK1WV4Mc/eFfSfpMuDx+yjTE5C3R5QVEJTK6JDW + WI5CB62Da+FS47JLpG//ujyrdGhQvmbwMlNscikwYWmPTpkMV8DFcCHWJ5QFdVngErgcTsA6huZSgYav + hLDciI6YBj+A8+FcrJ+jl5daXY58ZdFli4eTUebmpgrkYmHC0gnL8aZTZsE34Ywyqi6bLuO7KO8olL2V + qQq5GKDB28DhpiOmGF8t4+oy/htOR9kfh9eb6pDSBEdoMBp7GBp+EnwRvlDO1GWehDo8ChuYapHSAA1c + E4F5EMvRcIxZlkd9Zb8LVjPVIyUJgqJnRNHwKfi0WZZn9bvBT8IIU0VSkqBhW8NH4BCz9AeHwocgr2dK + EjRoXajfZr8f3uNPmlNsDKxpqksuFDRmZ9gP9vVDdb36IzhtTXXJhWBmRfra5TZ4q5/aC/XsCfmDXhcC + GlLfqtAODXkT7ObPop49YEs8rmKqT4oLGvBaNGAYlh300p/11RHL+qb6pDig8arCxmjAVrBFBVHPBENQ + b44yxQWNVgeN18SEplFF0NT1OljLNAMpCmg4/SZdfRgIr61g6jrXQxtcbpqDnA80VnXdaBVZtAHvBy4K + aCh9x78OjP7c6A8VUV13WA2P+c2D84FGugxW1Q1W0dVtYZqFnAt9ZFGOLoQQQgghhBBCCCGEEEIIIYQQ + QgghhPg1SiVcrtTGykp9UZUWxYSKfWO4E5idVaRMriXl5pr03DIwubciJlwu5cr6GGmupoUr5Tr9TYKK + fdtmXmDWXyPl6iAEJ5AWKg4q3ueL0Iy7TDeGlKtCEZomtCBXNFUqiT944UOpdVdJuay9lMvb0LNVaklb + KdfwNwt8SLm1BholTMpFnaX8qBPN76LOOjC4juHvZftwrmP0KWlOtJTxPWh+50VhdNFf1OeX2vKjL3yV + mn2HlO/dTvM7r7c+ZZtmIj70OVrKBTdLOTNWyrcGUO3MWKUWd8MIzC/mF4SeDUg59a9STruXal97SE+p + TfOQ36Knjs6R9cpjUk55xKdSrw1GkIb4s04d8+rstMG83pwdnQfMDNpJ+fw/pHzxyTN9OQ6N6IdOGu7U + LX9dX3gKS7TB0iamWUhhOKPMVAzHI5+T8rmReU4YLeXEcWhIrPc3xz9zZl1HoZ4z+3N0KSJKxbeVcuyz + SsWNl3IEGtRRqXH/FGL8y/7l2In56yjEsAlOgOZfZ5qDnA/9Fjgu+voJ8eirQjz+khBPTHR8+hUhxkwT + YvQb5V9fPZ6alFc/XdehU6ScFWWaghQV5xPasX8X4t6pQjw4Oc8n3hQibjbC8075dti7QjyG0OSv26A3 + pHzpYcyM+L9o/h6k/LCNc+QNQEhiX3e8B4085D0h/vZh+XbwPCHuxgjjq1e/GUIMx+loAS90LwQMz72E + uAuN2XuWEH1mOg7E0Tl4KU5Zyxz14/Kgr7wPLxGi/9t59emFEWfQdCnjw021yYUg5eRBSt06R6nIOULc + jLDcAnvjKL13jRAPrBPi/rXlQ13We1YJcfsHTj20EXMRmHelnB5jqksuFP3Bm5RjhgrReb4QYTgddcJw + 3hFGfYwjdYNtx26GiWXczUL0XY+wLxaiA0Ki69DufSG6vo8D4m5TVVJSOPe1PjNUqbYJQoRidGmBxtZG + rrDtmC22PXCHbffbbtt9k8uWA1KcsvVBYCKWo8zxutxKhaIeHedLORGjJ29dKBWc2yCefUiI5jhKr4Eh + C5RqjIZvs8q2b/3ctnvtsu3bd9v2bemXXl9Z9LJnqhCtPnHKGrIAZf9YqXYJUr4ywFSNlCZKTRooRHcc + qZVXCFH7IyHqLRSi8Rrb7ppmWdH7LOvmryyrx5dQLy+2er9QlyF6n2132iFEo9VOGWvDKijzbW9LOS3a + VIeUNs4bexPChYiZIoRrgxCVMNpUW4Qjd61SzXdaVuS3Xm/kIcsK/y/cb9SPS9Nf9+P19jhsWd2/se1m + KQgKwqLL5sL1lgsXvne+gMDz5/ouNkq5EJqFIVI+iYvhUMw8XJgxudAxV+L01BQjTYf9Xm/EUY+n8/+8 + 3vAjXm/Hg6Vr+BGPpzv21e2oZbXHyNIEp6HqGE1cCLMOSvuPpYx7QMpFDU0VyKXA+SLc4O5C9Jli265E + dM5KjDjLbLvBZ5bVBkd7eG5oPJ5u33s8XY85Aer4XUnobFdvU29bb7crwtJunxB1PkUZlqIsKxDsTUIM + el7KITfqb0iYYpNLiTPaLK6n1JQ7cCRj6u3aiA5DcKqsRnCScMR/m5PT42et293lB7c74oTHE3FcL3+P + ea/t8oNvuzqctl0vCfvEaFdppROUyLlSvhat1Cd1dBlNcUlZwRltpjdAJ/1ZiK4foONwfePCxXDdJNsO + SrGs1vvd7u4nMjO7ZJ08GX06O7vnKaXCT6LDM3JybkLHn8seGfq5WVk9M/Vr9RIjy3HLav61bTfEdL7W + Z3pfuBDHPqNnS/l6FMpRX8/sTPFIWUUHR6luOKofayvl6HFC1NXXEmttuyaCE7zLOVV1OOjxhB/3heDU + qcjskyejTmszMqJztL5/64BlZd2SqZ+LU9D3lhV2QIcPIcT0+QodFFyjBC5zbvzq21KpgVfxvZVyipT/ + qiGl60oph0cLEYcZSrsEjDyYuVRZhwvTPV5v2FGMIBk6EL7Q5A+MXqf/lpMT+bPX2/awDglej5FEn3q6 + zpfyubFSPhCuVMMrlJpd3eyWlHf0BSesqlRkdeeblrN6SzlsDKbmbwnRGqevqzHDqoUZTaVlOK0Y9eM6 + WK/fQwmLF+KOGRixRig1t6eU8xDCJtWUmonRjBezhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh + hBBCCCGEEEIIIYSQEsTl+j9+lZ6aPY1rJgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAYAAACuwEE+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAEIhSURBVHhe7Z0JmFTVtaiT9+67mW6SmzkmMUaNGhNnBWUW + QWSe6WZGEJlUcGJSZBAVcRaHRBNiHKC7GYWYGJOb5MbEmDibEKHHquqq6q6q7kZBQEXjfutfdXb1qVOn + qquabsBhf9/6ajp1zt5r/WfttcfziQ9zMmbJ/zF//ON/mBce+H9IfNu6/9pZve678fJ1pyXKS7rFKsrO + j1WWDo1VlgzhNV5RNtJP0o8p6cN/OYeeS85pz6/Xkms6l/84He5JAdm27j/rX3nkc/HAum/Gy0tPTVSV + 9EtUlo5KVJWOTlSWFXukqJWSfh49N9co6cc1uTZ5IC8fA3SYJe7shu2Pf16NVLn2R0kPUDamoaJ0nAsS + NXS8WjxGcMOIeGDT8MbajcMaajcPbY3E5L+cQ88l57Tn12vJNfXakgfyonmSvJFH8upk++N0MJMx6/5v + Y8WjX4iVbzimvnzt2Vp1VJZNaKgoG+tAInBsHKkGjjw+uCGyeRBS/9zPRsd+e8fU2o03XhbZsPzK6Lrl + 86Ily66Jrl26kNfQo4uu9RP3MfynTv7LOThX/XMPjbbn12vJNbm2AqTwlI0lb+SRvJJn8k4ZnOJ8nNor + 1daWfcbGIA2VZYMlBhmvkMidzZ3eEN08NFG/ZWAi/PiA2N8eHBN6dMnlwQfmLg4/OPeG8E/m3hCcM7Ek + OHb438NDh0aqhg3b8/ywEe9HhhebyPAikWITLRpr6sZNMnVjJyZF3vOd+5jIsJGG/3IOzsU5OTfX4Fqh + R6+7nGuTB/JCnhwvVExeNc+SdxsDRaNbP+sU7+PUVqm+auPXce0Em/aOVU9Ss35UQ3TLkETiV/3i/3x4 + ePjRxXPC91y+PHjjxXcGZ43dHBpdHKobM8HUTZxqYtMvMbtWP2T2PvOM2b9jh9kfCJh3amrM/ooKs7+y + 0rwjr2+99JLZ++enzb6//EWF93zHbxyjx8r/VOQcnItzcm6uUTdmogkVF4WCs4o3kwfyEl2zeA55I4+a + V8kzeU96xNJxda+t6UHZKKNT3I9Ta1Oseu03YlVlJ8fLS4bLHXmhxgZypzbWPj4skfhl/0T1+oGR1Quv + Cl134b2hy0avC4wtqtg2ccp7iasXmN2l68w7r21XY+978UWz56mnzK61a03TPfeYxJIlpv7SS01k/DgT + OreHCZ3X0wS7dzeV3/ue2f6f/2G2f/bTSZH3fMdvHMOxkTGj9b+JJYv1XJyTc3MNrvXO9u1md9k6k7hq + gSEvgaJRFaHLiteFllx4L3klz+Rdy+B4HcpGGSkrZXaK/3HKN2mQWF3agaZsvKJ0cjIuEW9Sv3VQ4xu/ + OT/y+IopoYUT7qmeNnRTaNy4QMOC68zuh9eYd/75T/NO+Q6z5ze/MTvvWWXiCxaY8IgRpuaMM0z5f3/R + 7PjcZ82OL3ze7PjSf5vyr37ZlH/9a6biW0eYiiO+mXz97pGm8pijTeXR30uKvOc7/d0R/lP+lS+bHZzv + C/9ldnz2M3rumjNO12vFF8zXa+/5zZMCzw7z9quvSt4eMw0LrzO1klfNs+Q9unnF1MY3nuxNmSibeh0p + K2Wm7OjAUcfHKVuK7ljz1VhlWadERclA7jpaGgSPCkp8a5/aVXMW1VzYd0P1uKEvbZs7/703fvoLNQhV + R+Ptt5v43KtNeORINTQeYseXBYxvfN1UHPmdFAAtioWlEPneUabi299SmABp+6c/pecKjxqpeWq843az + 9+mnNa/kedu8Be+FJo58pWZSv/WUibIlwZFAmdYVZRcdoAt04qjn42QTwWx9VelJoqwB8aqySSlQGrYO + aoht7RW47bJrq4b1eCo688K6nfc9YPY986zZ9/e/mZ2r7jZ106eZmrM7mu14ji9/yVQIIJVHfddUfv9Y + U3nsMenihSOX+IGRr8j/8UzlX/+qejM8EXkkr+R533N/N/uelfzf+4ChTJSNMlJWypwCJ6mLAegGHTnq + +minhu1rv6V9J059rqBIcNgY3dQndNulyyrO7/DnyNSp9bvWrjNvv/yKef2hh0zdjBkmdH7v5F391a+Y + yu9821Qde2yGZABzMKHxCFUeVRl5DfU5X8owXctCmSgbZaSslJmya4CMLmwrUHSErhy1ffQSzcmGqrLz + aGKqUnbQNN44Mt705AWRhxdfVdHllOfrp05t3PPEk+btV141jbfdasJDBpuqH5ygrr9SYMGoVeJJUpIP + MFa8cOQSHwBaLVRfTixUdcLxJjx0sJaNMlJWylzR9ZTn0QG60D4d0Q06Ul2Jzj5yTXHuFO2yp+rRgFbu + pNiWIXSCVQ7uviEwfHjD3qd+Z9564SXTsPx68Sa9BAAxstylKF3hOO77SXED80GBxooTUJNvPGbD9cvM + W8+/YCg7Oqgc2n2DdgyKbtCR6kp1VtLvI+NtqI9pCVhQ6JegSVl7w8wba7qcHgvc/+N333rpZZNYusTU + dOiQBOVIqpxjTNXxxyXFwpInNPmAUy0tqV3r15s3HntM4p/vy3d8n/ytYeXN+lu7wSMxF9UrZazpcJY2 + +9968WUTuO++d9EJukFH2ofjgIMO0aWj1g9fYjAuVlXSSwssdXLydf2o+md+Onl7l44v1c2c/tZbL74k + BnvUBLp0UteNIhUIcd0qFhg/cLJAg9FzQWN/C3brZmyKXXFF83/k/3uffVa/b4YIaQdwqK6cFl2gS2fz + xiOPqMepmzntLXSErrQJ7tIhOkW3jpo/HIk+Bbkr+qe8CoV+bc3o8E8WXhPo3nXX7k2bzJ4//tFEx40T + b5JUmAJx4g80ZkkBky80jrELETcwb//rX2m/7XMBw+c0aCw4+t4NVEuSAzhuFkR0ER07VnWze+NGg64i + 9867Dt2lwEGnotsPRb+N6PiTjeVl326oKB1km8rx6g0jYi//YnxoWvFjz/Xo8e99f/6zabjpxqQCaQ6L + 4at/eKJKChgvNF5w3NC4DO0VDOX3PeIGhhQZMyb1mwXGfTziBsD7WyGSOs/RPhChE4Gn4YYbzN6n/2Se + P/fcf4dmFD+GDtGlQiO6RcfoWrL5SUf9H6zEPBAG14jsFRZilYrSEfV//vFFgX69XmmQenrv735nIsOH + aeCn1cMPfyigIC5gPNBUHieASIzh9SSVrvetEQsM3fz/3rNHX+1vLQHj/f5AJBs45RLwh4cONXuefNIk + rrvOVIoO0SU61dgGaETX6PwDNweHmWcN28tOIFDTsRJpGsaqyoZFfn7d1eW9eu58ffVqs2vNGoWBOrvq + +ONN9UknmeofWWB8oMGrOJC0xkgt/ccCs2vDBvP6z3+u70O9e+tv2YBpL7EgeqGpoL9JdEKct/PBn5ny + XufuRKfoVqdzoGt0LrrHBo45Du9ERhOVpWcwjJ8oLx3dGN40PP7aY8PDt1y6LFQ8avfuTZtNw7KlpuKb + 3xBXK7EKYJwssJz0oyQwDjRVJwoseBWBST2Kj2LbUtzA8P79d981bwC1/OYHTGugzSbZzuUHjW2KNyxd + anZLyy1UVLQ7fMvsZfHyx4aja3SuuhcbHPbQqGepWnemjirvKClujD4+jKH90ILJq7aNH79v15q1JlI0 + Urvv1Vv86EdJOUHAOAhQ5BI3MHx+89e/Nv9++21Tc+aZBXuYtoYpAxpaU6LDyMgRZtejj5ltY8ftQ8fo + Gp2je2yALQ5baKg3odrC0hDdOjTx8i+KqmeMeKhu3Li3G2+73VSfdpoU+GhfxXilEKW3hYG8wISHD9fP + TXfdddCrJK9khUa8dKhXT/PGQw+ZetExukbnqnsHGvU0h2NMk6guOV4nNjmw1L/80KjgxSNKt106573Y + lVcW5EHyBaAtQLHiBQbZ9/zz5t1EQidRkdzHt4fkKk8uaOi3ev2++8y2WZe+h87RvYVGbSK2ccx0eKSm + ypIjtSeSmEVcYr1QHpxRVBqfNeud+NVX+yrAiirCUVQhABRybD7iB0zd9On6nU3u4w+FJHVFf096K4op + HDVnnmGa7rzDoPPg9KJSPI1WT2ITbIONHHMd2qT9LE7T2Qa4wVnFP49JxhtvvTWrZ2krg7fVefyAqZIm + PNMxbXIff6gkDRqXENPQeGi6/XZTP0OguXT0z7FFY4BAONnkDlc8+h3HbIcmMZ2QDiMypCPNr5VogBue + OnVX0x13mqpTTpLCJD1IWxm2vcQXGBHGdWxyf3+oJBswCNVT9emnm8ZbbjXhyZN3aSAs3kVHvB1oDlmP + MOMXqe7+mvWj6AugeRcaMfJ15rpWdzjLVHznO74F9n5XqNhztCWEtIaAhWmdab9J857vvSAdSvGDxUo5 + Mc05Z6unCQ4d9nr4ttnLsI127mErJmQdirEnHUgUarW7v6J0RPSnC+dV9+vXuPPOu0ygc+dkh5xPYdtS + Dnev1V6Sy8sgTNYKdulimm65zWCT6M+uma89ws4wArZzzHhwUmNF2Q/14jo2VDYy9od7ppV3P2vnzrtW + mdpBA5ND9XTh+xS2tfJRhcNPksD4STo0tX37mqaVtxhsg43cqzQP2tQIglydz6LD61IVvfyL8RW9ur2a + WLrUxC69JDkuxEirFMCvsG0l7X3+QuVwyE8aONJ64satnzbVJOYvMNgIWzmj3MXYEFs6Zm2fxERkadf3 + 1boQUl9bMzo0reiRFy6c/D6jqVCto6s09w4zg2YIrbeWRsLtCLh3RNwtzpQKuuzptT58wGmGJrFokXlh + /IT3Q1NHrElOjRDbiQ2xZbtNLpdGwicbKkt7OpOSdaYcczP+3qPHv5tW3a3TElBaeMRwnZ0W8/S/2KCy + ceVK/ex+7w04GfTjM/0g9v+tEoYcnMHLjOkSCJ8Zu2Ici/Gsk3l13p9ycvLVPcal41xyHqBywZISvzw4 + UghIlJvyuydyIV492c/ZJDxqlHp7gG+4eYXBVjqfhgBYbJicJ1zaE9s6Zm67xBxS7W9xWkX1z/50cvXJ + J+/aueoeE+rRPTlTTDIXu+pKbYK+t2uXtjBsYW2zlW52Pr/X1GTeqarS9xEpGGnP73+vn+nsI2W0WHJI + 8q5qFv1erq8j37wKIBi75tRTdNEZyz5qhww29RdPNfG5c01i8WLTsGKFaVxxk9l5111m5/33J+XOO+T7 + m3TOTmLRtSZ25RWmbtJEjQ/oLFOoAA+AnBl8LHFx561QYTiCRC+znw6Bwf2Z6Rj7w+EMqZs1M6kP8frB + rl2kbCskvyfvwna21YRN23x+cEXFrz+lyxwc70LEXXFu5+cS11xj6i+6SIfdNW5xAUNquP76jMJaYOhu + V6jkvQXEAsSiNFJ0/PjU/1sjCskPfmBqTjtNmprnmPDgIaZ+1iWmcfn1Zue990jT8zbNY+Laa0x83tUm + NmdOUkTR9dMvlvr/Ynk/K/U9+UwsXKgT02m27ly1yiSuW2TqBLrQBRcoiOqBpDpQ8VRbvuKTbwsMyd1T + ng0Y+9lPUtNRmb03cbyJXz7HVJx79nO21aRTIsS22Ngx94EnXQhPNcRyh9iWIbU3zropNHDA/sZbb0l5 + Fj9g6CW1rSUvMLt/+Uv9zDyYpnvv1feMDvPbGw8/rJ/5jy24W1IepAUJdhJI+vc3dTNnmqbbbhNvcZcC + Ert6rn5XL66/fsYMU8/7ma5XgNHPjnCclWnINPFMF+vCtPjVV5nG65fJue9U71R30WSpUnuZmtNPUyCI + I6qOk/zkgseTbzcw7umiBwSMCIvrGgTw4Pm99mNDXY0gNsW22Ngx94GlyGubvkJnj5JYvXFk/YsPF+84 + /bQY3f7BnuemweIGhoE7ko1DvMDs/PGP9XOwZ0+ze/NmneFGog+HqQUkd8HdovNoJI6oPu1UUy1VjMYb + Ijq3RgLPQPfuJjp2jGlYusQ03XO3Vimxyy9XA9fPEIMDhngOf+E3R9zQWAEwtwAR8Ey9yNTPmS1V102m + SeBhjXV42FAT6NBBAPd4HLf4QNPoAEMVTYpeeKF+3xpgkBQ0kodgt66mQYLgHaefGsOWduIVNsbWjtlb + n+KVJZ11ra9Q2JTY2i9QdMH6wKRJ78ZEOQS52YBJXHut1sGAQ6a9wBCfkJg7S/WEovEwxDP8R72Tq9BW + tE52rkX8UAM08kpdD2yRiROlylgud6kY7ZqF6klYZVh/icDgFl9Y3OICpwB46qZONXVSlQEMVR56YL03 + sRN5Vjj8wEEccKyH4Waj2t77v/+r37cWGCsKjeShTsKIwLix79aM7b+hKfGrfhpmsIOE2Noxe+sS4w52 + rAj3FXl48dxAzw5vavCEApwJym6xwFD32oIzt8QLDPEJiZYAYKGct8vL9X8EbHv/8peMAiNuYAguabkE + JHaIFBVp87HxjjtMXOIMAj419KWXOnJJ8yvAXOpIi/BYaFzvLTCznFc3PPY9XoeAev58Q9Udu+JyE+rf + V6FQj5OtqS6/W71xM73+4IP6PiRBdjZgsiWv7hD0h87i86VB0anTnsijS+dq1YSNxdYHNNbUWF7WUb2L + RNTx2o19q3qe/UJi7nzxAiOTsLQADM0+vAZVjBcYqiKSjV9QCC7YfrbTI72iE6Sda9HvE5DoP37llaZJ + jNKwbJkAABgisy9LymUWGB9w3PAU5HVc77PB4wZH4h4mvbOykVZZzVlnav5T/T1WBBhuAjcweE2miwJJ + NmCIc/iPV7y6U9H47xjtka+fPtNU9+r0Qjywsa/aWGyNzR3zF5YSr208gm1GIS/R9OSA0C2zlwf693uz + QZqf9E34VUeIGxgyiOEpMIUnWWAQEp6ERJXC5Gv72fbRuCXlXQRUOqSCffpo1dYkx8blujGBhaoy2apx + AeMGJwMgBHgEAjdEeQFkxYIkgHhBSoEzVfPVcMNybcazNJZyKCiuzkJWXWJskl3qQozHjWdnARZaJVEV + aXVnBWjEhuQn0Pu8N0O3zV6OjbG12lxs72CQf0pUrD3depdEeWn/qj5dn41fKQUdMshUKBx2Ag89is0S + u+oqLYQFxnoSG9S6gbFzTbS/QT67pxLUz56dOg5xw1J51JGmdugQPZ5mbUwgaAbFLXw3u9nbWHDckgGO + B5pWw+MSCw4xjgTeNOMTi68zkdGjm6snp5eZDlAvMLUDBuhnwCEVCkyaONAAEbtI1E+52FT17/ZsgpkH + jpfB9g4G+SXmuWg7nU66xBMDQitmrQz17r07Nm+ekqlwqGvzZEYEUEgWGMTCQnIDY72JDYxpDdgUHjJE + v1NQLCx4taOOMqF+/dT4eJeYvBIfxC4XQJAMaJAkODnhyQZOq+HxAQdRcKbpjcX4W92UycmOPprejqfx + AoOgNzw1qWAP47UV15ObvfqUUxTiQM9zd4dXXrYSW+uQgdi+oK3TdG/ZpHcpikW3nF8zotfvY9NnSb03 + QGCRJq374h5hSIDkBsZWRyQ3MLtKS/U7XvnMkIBNxD8KCl7Meha5G7nbQn0v0ICSpjJBswJjxYLTAjxZ + wUmDxwMO0ip4EA84Uk0BO16SVpwOVRD0CjR+wNAosOmAPYwTXKuX6d/PREePNzVFfX7fKLbG5tg+734Z + 9h5hvoSOM9RvHRRZdeWSQJ/eDbErrkxeyC8TjmBgPw+DEJiR3MAQp5Do2dXvjjtOP9PVTZe+gmJhEXDC + gweJd+lrAh07SLwyS7vpVRSaLOD4QoP4gOOGJ83jIO0AD95GroWnoW9IoRFDNt19t+rBDQxCTzjJC4x2 + X4hevULnqPv/KcGOiOiUHTLoCgj07NQQuXfeEmyO7WEgr31o6reXfC+5PKGsuLHx131qZozcGB09zkQn + TtCqyDcDLqFaIbO2s8kKbX++J7C13xGnkNzxCnENcGm158BSJULMUtu/v84mU2DE2AS6Guy2ATgZ8Fhw + DgY88n+tnsSL4GHiUvXv+9vf1JtavVh9oUPbIAh07JiCw08sMBlVEjGT42V4Hx45woT7DzHBWaM2YnNs + DwOw4GDhn3Qb9qq1Z8UqysazLWjdphUzq/v1+BeKDfQ6L/PC7SRaFVnPcuR3TK14FtYVBzp1SgJzdkeF + IC5xQFLaAhzEBx43OO0GD9BcahqXL5cbbVLSmATAxDRtsMDPFxhH8NzBHj1M3aRJpvr8Hv/C5tgeBmAh + 53b3b4TWfIlePwhjI+LaxVMe+PsFA96nUEwDyMfDtIXYuIVBzVqpY9mNkv4WheWccwSYs6VlJEHv1RaY + VoCTBzxpHqe94ZEqiTI13nCDtp6AJmNtuY+uWiWcy0IjXoZhlci4ceZv3c97v3bplAewvTIgLMCEg0dm + ileUHAtZ2rz658PDg5MG/7pu4oXqsiq+/W1fD9PWXsd6F2ABEDZSDol3U1g6CSyIvCdoJE5SaFoDjhse + X2CQLNVVW8HjBYgyzZ2ra89DF/QRaI5TaFLgtIG3UQEYl9CYCA0aKC3T4SZ44eBf687lwgAswISDR3ri + US2x1x49R4Pd2OODo6uvW1DdrVskJvVmoHs3NaLvxVsp2eDTqkiqIZQUKS4y4YEDkrB06WwCnaVKQgSa + uskXOsBYKQQcDzx5eZ0C4MkAyAcexAcg4hhaTsQxeNLq45PzeBQaDOzRWWuk0noXFzDBrl1NdMJEU921 + cyT60HULYECDX2ECNhxMmhNP2Giujrb2C6+YdV9tr74ayWtd18aexCvuIJdXuq4BJiigMPkHUWgccCKj + i3XTZJWc4CShSQPngLwOkgMeL0Bp4FjxgQex4Egzu+mWW0zdlCk6+s6cHlqNOpmqLSfXu6Ah5GC3q1Cn + 7ia84pL7YMBWS7DhYNKcWBWnLqi6bCQr5gKXFK2vk/Z5WAzjt76orcWColWRQKHPAeAZAMDSrWtSXOCw + BWt83lx14VnBSfM2zfD4g4MUCg7SDE8GQG5wsgLkA44EwbEr5khr6Gbtc6K5nZweKtD46O6AxAbY3z3S + RIYNMZH+g01IbA8DuiJEmMhYMcmze+gO1hHL6Oah4bXXX1HZuVMA2hn8anfv4qqKUA6Dm8wNBoygVIcq + FhoHHCYpYdhmaFzgpOARSDI8DlKA17Hg5AUPkqfn8YUHSUJD1aTjTpJHnQpKDEO15KO/A5bjBRgJftFp + 3fjxpvLMMwPhsuuv0McJMZYobKQ934npeTpfFxdU/8SAyI/nrgie3U17U9ss0MohOi6FdxFggudKE2/K + ZH2CCM29YA9eRXzA4TjmnSg0fuB4PU4Or5MGjx84BcOTw/P4weMHkHgaOvHog8LDsKWbn/4OWOiPES/D + LEFiw5rTOprIgwtWwAJMwEbaFE4edInrob5qCG0YFL5h+v21vfuZUP/+B8e7SDMaWFBKVKoi7XMBinPP + FVgQCw6vAg0i8NB6U2Dmz5NXEQuOBIwtguMLT1JiVwksSAocC4/7vUDhFl9o/EWBYTTdih9AAgyTvxhc + ZU879u9t68WBbiGoJvhF/6EuPUz4ppn3wwJMaKgijDi4JKcyEBHHgxtHxp++f0KwaMCTdeMnak+i38lb + K37wpYJdqUNDPc/VIBsYeK/A8KrQWHCsyDHn9xbFXqITphiIVHgsQGkexy2FQHRFStLh8YobIHnvA0lu + uUzE5Y0AZrYF5xKdbE7npXoCj/7aSnQoRoAhFAgPGWaqi/o+GX/6gQkwARupKQ925yhdclC7eWjdhpuu + rDznnLrYZbM1Qvc7OWKNn48HynaMehcHFurn6ITxGr9QLekDrc47Nxn4Ao0bHPU8Sa9DP038mmscYKzg + cQBHAEFygZMNnjRwkELh4bU18CAueCSOTCy5Tqd6+ukwl+RjGytqa4llmPIQnTTJVHboWFe36eYrYUJn + LdidrHQTQ+ZCUFdFHh8ceWTxkr+edc77DL/n4wJbypRCQc+t0KvvrVjP4gS72hknCgoCigRfdNapKDhJ + SYEDMA40tRf0UZcev1agWeiGBnF5HPU6jufJ8D4OOGnwCCRZ4WmOe9Jin1zxD+KOgfKKg0SkbMz32Xnf + fRJnnJBVx37f5yv6/xPl3BLHqB2mTTN/PeWM9yOPLV0CExrbCiO6X54C47S3G+o3D4o+unh58OyuOnOu + 0IxYGDK+t2D4CYOLxx5jwoMG6agpQCgwVloCRzxOpLg4CQhVkwrvfcApBB4/r+MLD9ISPMgBACTxDPOC + uUG8um0r0ZsaEVswySt4WgcTXbN4OUzABowoMES/2nRiYX352mHhZdPvre3TX7uqdTmHz8kLEYXIGRvy + FamOCHaJXZhvQ1yCW9TXfMCh+jpfvIwEiPHFi13QOOCkoMkCjsKTA5xWwpMGTgY8SAsAeaAhn4xot1er + VW0hNy/bnzHTINRDdL1s5r0woQv4hRFtKem6I6FHd5B65oEJNUUDn6ibMFFHTZnd5nfyQkWh8YJiRTJJ + z23scqojyWSfPklgLDT5gCPQEBSy+WJ80aJkTINk9TjtAE8GQM1ep1UAueFBLrvMNEnwy5RXr27dn1sr + 1h7sYhUuLjIRnpVZNOCJ+N8k8GUHK2FE1y0xuKTABDYNDz955/SK7p1fJdAiWm53YGx1JM3o6EUXCRAC + xwUXOND4gJMNHqoxeY2MHWOYRhqXADETmjzAccPjCw7igJMBD+KAkwEPUghAHngQie8ab75Z9DRFvYwF + pc2BOeKbOiwTnTjRVHQ759XwU3dOhw1lhIFINv/lQ2Ng47DoE7fOLj/7nHoyTZe0tl58Tt4aSQPFCsD8 + 4ATtoKJPRSEBGCtuaLzweMERT1Mrv9eJQlnznQZNa+Bp0esgAkmr4EFyAJQGDyLAiJdh3VXimoXNVTwN + h7YG5ltHqD6Zd1x+6qn10Sdunw0bMAIrn2C7B/lQ1Fi7cVjd1puvrjmz4zssvqInVfe29zl5ayQFiVsE + GFYtMoue4fzafn0VVJU0aPIERzwN54hJPMQaYl1k74UmA5xWwpMBkECSFSABJCc8SB7eR6rcxrvvNJVy + kzXrkRZo66FR748452P5jraUpJapOeKI/fWPr5yrTWsaRVVl531Cghm6f4v4MrrxpvnBMzoKydfo+IXu + ytDGBHsl0KWLtsiAAGNbSYMmDRwPPF5w8DT9+2lTlKUcbNGRFRzED5w0eFzgeOFxA5QGD+KAkwuerABl + 9z5Nd9yhNzM3W5ouDxQa5zzYnGW9eLTAqWea6Oab5ltgYOUTunDJArPhpoWB0wWYaxdqz5/uzJAlIwxK + klgrw2c7q52Vi3xmrTSJ1haf0wpn5ZijtWXEUgf6UzC0ihsaLzhp8PiAg+BpBg5Izsp3QWPFFxzED540 + r4PkAU8aQA40vvAgAkgBABHHpFaeunXpmg3JeXMl7+RyNzA6AHziD7QaDJwiwAgTFhhYkaDX2SdEPcyN + 1wROOUPvzipcncQwGNV9crewTobJxrxnGw2SBciuCbYTmdMKZ0UC3si4sTqfVCGxwBwIOBYePM2A/s2e + hirKA06bwuMFKB/P0xJAPvAwhZNlKWobty59gGH5Tub5r84Y8kkDhrhVbM/Nph5GmLDAwIoAk9xZkS9D + ZddfGziNGflzktWRUpy9L4YZ/iyc573d04WdGPhsV+nVnHqqfk4rnCOMjdRdfLGJjhmdBEQMrOIDTX7g + eOABGvE0BNV0rTOIp9BYyQeeNHAOEJ6CARJIPACxRjshMWY+wPBqv8slacCIzbE9DARO72BgohmYspGZ + wEgMgzsi+Em5vSzVEttQ2E2AWEgPPHbZK56HbcnssakMuQRgaC7yGBcFRYyrki84LXodeZWIn//rTgpi + cLYm09aGShvB0xJAbnjSRtUdyQZQGjzIVZK3a3U7k3YFRlpKLBKEhZaBOetsDa4qeJi4PUkWYFhoT8KL + sMjKPsmMXaWA561//CN1bOpcLmG2F5E/qwJo+6sAjH218ACMFyARX3Ds+z5WgKaXgsbaKgzBI46TVVQW + ARoJ/LOCY2WhW7J5H6DxfnbAQbweKDU1wwOPBUiu23jLSo010vTZVsCIlH/tq9oqC555dsvABM/qpNtn + lH/1K2kn8YPGBrZs1YGnsWuj7We2+bDHpp3LETwMA121xBzAwWK1QYMygfHzOAgex3nvC48Fh1ftFOyj + O0viQTWuWSLeJh9w8oIHYHi17wUOhUfeZwDj+my9ji9A8t7rfeT/bNSYDRjsZIHxi2FsI8QtGcCI7WEA + FloAZum1wY4CjGQsH2C4OMlmkJYTVZL9zLZk9ti0czmCh9GFWxL81px1lgSr55vw4MGmdogDDsBYzwMw + FiILjB9EAkxtv6QoKG6A8DZyDd09U0DFoIllS5PwLBZAtEXlgSYlVF0ugASSlOSCyVt1ucUNTkoAx12V + CShWAAhgVq3Ky8P4JRtzusUXGGEAFmCiZWAkcxXiltwnUfFAww4LJEi2sQw7MdhF9u45HBnnEtGgV7xS + MsCWz9Kco9MI4zLJOwWOhcbteRALjB84iIIjMY8Fx8Ij3oZlt5GxY7UPSOMaqqkUOCIaILuB8YoDDoIn + EjhahAfxAuP9nA2elCzQaZvtWiUBjDAQ7Ni5JWCkSurQWTNf8S1X0GvF08QmdiER3LLdGN+xUPzdujr9 + 3q6v9mbICsBEJozX5rUGccjR0ir74YkOOH2S0OQDjlvSoMkWLIu3EXhqhw7VlhqeIHH9smQ1BUAKjyPA + o1MlHcmAp8Dg2S3qgdwioPjCg8xXKNnytd2AIeg94gjNQxKYlmIYOYjJSBXfss1qV6YQj5dh0z6Sfc6z + 3WOXZEdWcwJDJxLrnuy1eEUAB49ztkTq0uKhGqmluvKCkwseNzh+8AANrSn5jc0YmUercLB3r0LjAScF + kEDSCngKB0ggcYtAw/UbJXZs11bSt7+tDATP9gXG1XG3/sZrgmedI5laZKokAxmZQhj4ckFjt/GwuzLY + HRlIdsZeLmBY9wQYGXC6wWFG+1lnmtB50trB26TAyeF13PB4wUHc8Ki3EW8m/9Fqas4c0YHAsgyPQ1Vl + 4TnIAKXBkxSW0bKdbC5g/PboySVp9pHzYnsYCHY4x8BEMzClIzKHBgQYnolcfdIPk7GFO1NWXFWT3VMX + xfLZxjVUS74ZcgtTG4YN1a1TfeG0YsERwGpOP123qlcQsoHjhsdCkw88jtfh/5Hx47UvIg2cQuDJAAdx + wdNKgOiD0dmQXn25bmLrYWjFsoeMV9isyR7rtQ82x/YwAAsZQwMZg48AIy6ZVot23rkz5RYng3YIwMYr + ZIZkhwy8GUo/x9G6/RjbeOQExor1QvI/NmZk4pVWV2ng5PA6+cIj4Oir/J9lF8w1VkCWSIvKgpMBjw9A + OT0PkhsgP2gabrzRRKdelK4vbiZH14gFJlvy7liFd7LnwubYHgbUwwgTFhgdfEyb3rD55qsDHTu/owf3 + PFd7/FKZ8ooDDHU/W2y5qeWzbo5jM5QNGClocopl74wt6PMSqkfxOtWnn5ZcmiLwZQWnUHis10Hkd6pO + 9v5VYxIYu8HxBcgDT6EAeeBBAIbt6SPDh6VX4Y4trDBWRGyYTWgluo9XPTrnwubYBAYCHTvtr398Rfr0 + howJVJ0711NHhocO0el6qUx5xUN1LskKjEigw1kmLArIWv3lK0cfpYvWOV9yioNAMBBQBJzBObxOPvBY + gMTzMFLMNvHaTU+ADCg0yQ8EHl+AXPC4AGI/YpYKp4ApwA7ZxK1HnaIptocBWICJtAlU6VM0b59e0aP7 + q0TjNHfL3cMDPuJ3cT/JCowUWtcjjRtnKtx3zIEIrlqUyEo+VgsGWduEwQcIGAoPrS0XQLng8UJjRcBh + vz3WUbGRNFvUN8Mj1RaSFZ48AMqAp1l4xgPbdaTK6/EurRG3/rA5toeBwPk9/wETaVM0/SaBx2axIHyW + Kf/Kl9NOliF5ZjYnMMd930SGDTM1p56cXxyTrwCgnk/uQJ5DIK0s1mtr34v1PhaebAC54fEDyKmyqCLq + LpykA6kEpmpcQCFYbg1AbnhcAFFNEJ+kqhBXy6i14rVN+Ve/rD34sUsuM9VFA5+M//XHE+PBDbSki6M7 + 1nzVd5lJZESRYe5oxvCAVw4UGBGe8hHq1VNHlQ+4WsomFh56k51F5zwaR+fN9CVGETiAx/b1AJAbnJbg + ARxaVxaeSRN1mStTXenPAAq2tW81QA5EDDqyZ04KmDz1n0sygfmKSSyUGmbkaBNeOu0+nkVul5kEAg99 + OmMhW/jhRctDPfvo08lojeS86/PIsGaIAnIuRCPy5iALoepgikPOVllbiQOPBtkEzNLaoo+HXbYYZ1KA + 8D7Aw2Aor4V4H+ChM1Be6TLQCWI83YQZcwKQzssRYPAW+QHUDA1PiqNlqOVoi9gF27iBwdZiI2xfKwzA + QqJ+y0DYgJHmlY/upbK/WLTkb916vd90x+2G/VnyaSnlEpupjO/sXSIG1O3JJJjUDrxcgLa1uOAhhtI9 + 5U4+KVl9deuaGuFWINwAeauwXPDQKSgAsfWaBswSH9Qx8HnlFcnBRGn5AIkCZCGyILngoXcXL0VflOY9 + D93nI2lNarE1Nsf2bJAIC5lLZT2L8SNly68Mdu5Z3yTBFWuTKr7x9WYFeyVHplsqEL+nWmHHHqMtG21e + 5wK0vQWAgAfvowB9X1dl2iqMpblMNNd+GoGF1oQC5IbIC5AbHjoG8T70HcmxeNUoHmjKFJ2lzxwUpjXo + IKZAQicdT+sFnp0/+YmJFMlNJTcaVbefPr3f5SOpG1cEW2Nztkur7NmzDha0Se1ejE9yb/dRx3YfYwY/ + xbOOWb5a/uUvpSvVJX4ZKETYMcDe5fTj8MyjdotjChXydZR4O1t94fkEbGIgrcYEIjZn1H1rWK3gDC0w + yk5VlAGRBckLkOOB+Mx/FaIxo6UFNsHwzEm2+6DHufG2W/UJdOVHfNNXl60RIHOXGVtjcx5xFBw7+ElY + yNjug+TdUCi4fNp9dcXjtd5UL4DyXCe24peJQsUCw+4BKJd+lMMGGq84eXV7IQuRPs74lFM0HmNPYUDS + BXa0yiSoVpCAyIJkA2u3J7JVGCLe1gbSrEJkVqLqyUeHSKs9jKts2BqbY/vaG6Zm31CIllJqy7LEEwMi + 9121InzBILPzbgmyOnbIEoweeNCFpFyiKIOATjsMD1dgvAIwFiILEq8EpBJrqDeS+EwfNXjG6bqNqm7s + SO+2wuTERwIP5aZvJ4xHsqIg9TfRKZNNFY8pbOOF+G4Pg42xNTbH9jCQdcuyzE0Rl15R2atXgMXfNOP8 + O/DaChgn6BJFo1wUVX2Ws4gu45ofEPEBST+rzsQTODtXEuTr7pinnKwLB5nKwU2je/gJVAzP6AR5AakS + XXl055YD9TDaYSe2brp7lcH2MJB1U0RS2rar/3xkRGjmiE2JeRLHSB2aLY7xy0Chkhali2JRFj2ybPXq + vtaHQixIXqAQfsfbSrNWvZMjxHX6fM0WgDhgYIhfxNbYHNvDQNZtV0nejZ01jhkzUZ/3jEv1u+P9MlCo + aN+MPacoju1FccXMuDso/TKHk7hg0kFAPE2vXjk9y4EK18W22BhbY/Pg8ota3tjZu3V8+IEFC0MDB9Yx + fQGX6Ne89stAoZIGjAiZp/UBNLju1N33URIpM7taEBS3xbZxuYTrYVtsjK2xObZvcet4EoNL2lri4RSv + JB9O0bD4eh1gY98Qpd9dsAPIqBUvMPYaOlm7Z89k/e/+/aMgctPQ48xd76czpC10j6g3E9tiY2yNzbF9 + iw+nIOlApHbSUC39ql9g4YQHXpwy7X025NPmrreKaJPBLw8wiOsO01baBzkALlAoqw16/fR1IOKFjM/a + OhLbYuMXp1z8PjZPPf5GWMj5tPy0B2xFHx9WV3bjzNCwAf9642erdQGY7/yYAknneCvJzz7AiKC4Gmkt + sbl0rscef6hEvGn1aadJdTxAW4xe3bW1KDDMfxHbYmNsjc3zfsAWKeMRflMHb2xYsMgwy0xjiowqgsi+ + GYBCRf/r6p52C/TTtKQnlIHCDzU0eNXjj9O5OzSt6c/x09eBiNdG+llsim2xMbYu6BF+JO9DQmvvunxJ + YOzwhl1r1ianIGQb68FTuDN04ok6d4PpmjyjkDrZnVl+Sz0X8kc/MuwLrPvqybkYPdZNhvpeoIAyisyG + iXoNbxz1YRDgEMPVStxGD3HqpvzBD1RPjaLDBh8dsoad37OJdwNFr+gjncWm2DYwbngDti74IaGkjMcQ + D+/x+513rjI8bEs9ip/RXLAwM90+xNydGH21x7CeiSUqvLcrDd501jbZpSoMwOm5jzxSu85Vmdmu/0EV + YJEbgaEAxqTskAMbXLOs1Z3Yj4eZcFaH6DlXAhqO83oW+x26xKbYtmZEj99ja2xe0GOISRkPOr9+2srQ + 6NG7d69brxOMM/tH0nt9eYA5hdOF39IspE6m8CyntZvZAIvdDsQCYgGyi/xTKycBRKotPA4jxh8aTwMs + UtXqRC5goUzyHb+9/a9tqi82u0aH4eHDdd06j2i2e+5YYFjqY5eQuAUPxHFeARaqPB5BjE2xLTZu9YPO + SXQHO15mVKK8tH9Vn3OefeOhh6X5NTMZc6QZrBkYu3zWroS0Au0ku97aPi0fZdjnV6MMfrNLV+zsdgUE + RQINblvcqC6vzYinPjiCJ2F4gJsAWLR8jk6pkkne504zZ4Zkd2AAClK+DzpXr4IuyYPoEltiU2yLjbU7 + BZuL7R0M8k8N29d+Sxe5MZbQ9OSA0E0zlwcmTXzzzS1bdTGZ11g2U3gQkt2JygogscSBQvLZQsFnFu+z + iJ/ENAe7e5U+sk6OTbpPuQ5K/e53k3ekKFp7oD+AvcHaAjz9NBMa0F+D+kqGQVI34PdMTadOWn732i7E + Lh+xXjofYFK6c4vYDhtiS2yKbbExtsbm2N7BoLDUWF7W0XqZeGBj36ruZ72w65E1unWWXtjlZdyZpKAk + 7pBsgRfxDIl1TVRhdk02rpf/Z66cdFpSjtsmntEhhE7nJKEBJicvh62QR/pZunbRalpbQ/QxWT3iuaWs + lJnNmEjcPPYm80p+wDgexYpcq+roo9SG2BKbYlvrXbC5Y/7CUzyw7pvSvBqko9ixLUMiDy2aG+jf/829 + v/2djvW4gbEFRbgD8DA2sZ0ZILgLwpPySbhX4hviGAJlfZXPeBx7bMZdItfFpTNlAGjwNjRJtTfafdzh + IuRXWpcsqdF5L3jHU0/xeMdmWBC3DokHqcKBzP6OWGCIbbjJvMIxCqEnL8Que3/3O1M1bMgebIpt1cZi + a2zumL91KV5Z0lm9DAOTiV/1qxnRe33g5pXv7nzgJ8mI3mbEp9eX1Y+2qiHZLVkR4hOSDXBpKbFnHp6G + YM/uxolkAGNFrs9gJS0KFunrAi+5Yw+nnmHNi3iWUM/k8xC0B5d1RZ4qHU9gy5sSie+4gdzgEO/Z3/MC + xn0NEWzGRk+BlSvfrRnZe4PTq6stI2ztmL31SYcLyssG0DZn7VL9iz8v3tHp9NjeP/6vPgrY7WVSBfVI + dPz41J4xqU2GJD4h2cX8xDjsmWc/039j/58VGMSpimrOOEMnG7GKMrUptdcoB1MccGs6dtD+JVYS6KYD + /Ob2zFZc3sVPVIcCBgmI+C5XlaQ68+pNrovNsF2N2BBbYlNsi41zDgMUkmiTq4fZUVaM+6pdNu2m6MCB + +zFumpeRDHoDMyt0OnGH2I2HEG0mijexzWu8DZ9Jtg/BSoZrdQsGEHDo/Ko5u6POXouIkWhtkL+0OKE9 + Ra7BtWgeM7uOVQJ4FX1eo+2p9suHK3ZBAAEd2uazFdtfZb1HoGtX/ZwthvECgy6wGbbDhloViU2xbUH9 + Li0lpufFK0r6KIm4L2mn15zb+bk31q7VxeGp2EEKbpvPXoMjxCaI/WyrK7vbpt1NnEQwbI9DMu4WP3EM + gsvHSCxK4wkntX366Ow29TjZjNZa4VycU4TZc7VyY7DHDJs84ulSmyVlu6ZPVWS7GdwbGlih68HedC0F + vW6dYSNshc2wXWpfIGoOsW3aFMy2SDS1dN4vnXkSUdc/89PJgS5ddu3905+Si+mdAI6BLBIkuzNvYxZ3 + /4xtPtv+BryQTWywaI+zkhc0iGMc7moGLtlPht0XIkWjtA+HYFnv6lyGzCX2f8eKRxUoGOvC1euT/Lt1 + VXDUo9hjvf+34vIqbrG7kbrjOMR6GPt9fsB8T22DjbBVoGvnXdhO+9fElti01c3oXEny9Um2BrFehgtG + 7p133fM9e/57z//8Ljmi7FRPNJNJtI7oyuaOIYahSnK3lgiCSTYYpmeSxHH2GK/kDQ1iDStw6E6dEkPw + HAJ9PtOkifrIHWKLoDRv9WHi0nLRcmBsmqP8D+hOPkl/0wVuXTonl4QIfHoOgu3u3UwNc1ec/6Su684L + 3yO2e4BjswCDWO/LjYe3pjFA1Y2HsWNKFhh6yIn5vMLCOPV8UiZshK2wmcLieBdsKqf4pGPmtk21tWWf + iVeW9VUvAzSvrRkdmDn6kX8sWfL+7k2bktMfJIM0H9947DEtnE1E+tTLbqX4VV/ENWwS7T7OKwVB4ycY + TgzGOh+MrU3dYUMVAjwFD/uuu2iyPnuJXT7xTvymKx8FFqBh4nYzBD7XsMKcZfLrwOF+n0uIX/Acbh0C + kfuGs8BkS/sjEa2Kdm/caLBRcHrRGmymtmMIQGyJTR3ztk9qLC/7dqyyZIhcVIKl9aNiL/9ifMX5PV7d + vX6Dabr9tuQKA+euRjEa/GaZZmh7f93BHXest7/BT1TxfgYqVKw3cIsTk6TE7xi/c7nFKb9f3gsVrZ59 + dJjz/Cccr7+zgB/bYCNspQvrxXbYEFs6Zm3f1FhR9kOlVISZ5XV/uHtaea9eO/f+7n/0jmTrcVWqKM23 + MIeJKHRIS16iUHH1SbUVNF5J5tupAp3qrbk8R+sKSTYCoIMO22AjbGXtVl9VepJjzoOTmC9B76BCIxF3 + +IGFC6ITJuzc85undKxHoUF57aSwtpZmhWMExxBeEPIRFyztJRYK3+uLlH/tazpVggZGdML4ndjGtoqw + GbZzzHjwUv0rj3xO6sH+ttUULy8ZHr5+xsrA5Ve+SUYZJ9H9ZcQAfoX+oElLRlJpR4+aBrMNnH2uj87Z + ZHLPU781sRkz9oSXzliJbWyriA46bOeY8eAm5kzoWBMBVHDDiPi2R0eGZo9Z3XjTzW/pqLY0X3UXKyms + nxKQ1v52qEQN52ssMWQ75Fev1xKoCLCIrtH5m1u2mMYVK9+qvqToocQ/HhmlO0iJjdpkrOhAU1NlyZFK + cHnpaCYPx19aPTI4rbgkumTJ/t2PP65NWYXGUahVavI9d0zbBYdtJUyxYFCULni/0XZbDq94jzsQSZ4z + hzfxiMIiukbn6D44bVRJ/NXVI7EJtqFKwlaO2Q5tSlRtOE7d3Y6S4obo1qH1L/xsVGj6qHWBe+5/981f + /UqnIDTvl4cCvEo4fKBh2oUdnrDJ7nLulvbKr4JSYPyUrIbOMapr0Tm6xwbYApuod9ledoJjrkOfRKef + lOrpFJYmKDSxLUPIcGBacdm2JUveoz5lH7uKrzutJ59CHw7Q2CkXjNXQ24rYkWI7y81KW+e1NaCgywqB + Jdizh9nzm98adI3OFRYdJyopxibYRorQPp1zrU2s7rdrmpqhWV1UPaPooYYlS97e+4c/Gp4gm2py+yng + EENjp426N6mmH4lEr7X72LaUZNXjp48cIjpElyz22/v7P/AsyLfRNTp3w6Jri7w7Lxwuyb0QjgyzGC7+ + z4eHh+ZduCp60UX79v3pae09VWjoEPNTBHKIoMGzkNzAINrN7nr2k5W2yKd6Fj8d5BLRHTpEl/ueftrE + 58x5Cx2ja3SeBktLC9EOdUpCs+5MhYZAOLxpePy1x4aHb75kObPT33ruObPzJ/ebchb3u6dGeOUQQGOn + iTIW1tKanrYQhaXQakh0hu7QIbpEp+gWHaNrdJ6EZd2Zhz0sNrHbIkEWrScdPmfTaHkffWDhvO19er9O + j/BecfE6iTvXJogHG5oTT0xVSwyAMvDnnVrqlQPJY6FVEbpCZ+gOHaLL6E8XzkO3diKU6lx0rztefpAS + Oy7urF73XZ0SQY8wnXvStIv94e5pFf16vcpj6N565WV9Wki535ptlUMT0zAPxT0nmZmA2cbDWit59a24 + BB2hK3SG7tAhutQeXDrl6MGtLBmCzlO7XX7Qkuj6kwxw2YnkybGnDSMYBAtNG/3YC/37//udigpxrz9O + KsY3GG4ZmqRrd/os2BLM2QvuQGFjYJTJSqRsc06suK+V67qa16xBv484x6IjdIXOQjNGP4YO0aXt7kfH + 6BqdO+r/4CZ6FxN2GIECMmL62prRkVXzrgv26LFr3zN/NW//85+mfvo0U/GdbyWV5FVqFiOoAbx3q9// + rWQzpngQpgt4A159Brez7Jff3b8hev18pBCP4uQfXaATdIOO0JXOZ9EpCsk5LapT0e0h78Ft68T4Ray8 + tHcSmOQ8UgrN7K/KLh1fikmkv7+21rz5xK+Sy2FFcRlzcV29xc2GKDBodM7hNXyu5jOz7Ene+Tx6fb9r + tFYUkuSKB3SALtAJukFHOlPOguLoEJ0esrGhg5EYVtf5NNbbOAOXtYunrnity1nxf91663v7Q7U6t4a1 + TxhG5wznaoYXKs5whFu4DhsE6AI6Z8WlFTuD0E5sT/6nAI/RkkjZKCPnpsyUHR2gC3RSu3TqCnSksQo6 + E92hw4M+ReFQJeaQJqpK+mlc44DTEPvl4Njzq8dU9+++OTqxuPGtZ58z+2sChi3sQxecrysCdJ+9XE3x + A5TGO+9QMPb++c/JzZRHjjCvr16t39HtnvRmBXq0XCJloUy6IL9Pby0rZabs0UnFjdWDum9GJ+jGgpLU + WUm/dpmHezgn9h7hkXA6CZl5wjucZzbFn+gbXb1wXsU5pzwfmTWrad/Tz5h35W7bef99akBm/zN2kmuH + 8laLeI3XV/9Mm9TutHvrluSqA7//FCpUO5J3ysA5KdPO++417wZrzb4/P2MoM2WPrr52HrpAJ7q8R+ff + iq5EZ3nv2/JhTNwpLHPg7lFw1NtsGdIY3dQntPKSpRXndfxL7aWz4m9ulfpcgs9dZaWm/rLLdLkpbpz9 + ZXP25bRC6OsIFxepsLbJ75hChTxqXiXP5J0yUJb9gaB5c+uvTeyKOQnKSpkpu3bvowt0IrrRZT4fNa+S + LTERmQEycbcD4lVlk2wTPJH41cBGNjRaMXNx1eDuT0UvuaTujdUPS6thm3n7te1m57336lNA2Dhx++c+ + a3Z88QvaZa6L6woNhttS5Nrkgbzs+O8vat7II3klz+SdMlAWylQ5pOtvQ7cCypbzKbOWXXTg6GIAumn3 + ydofxMQj4mKVZZ0SFSUDdT23A05Dw9ZBjfGtfWrvnLOoZtIF60MTi1/Zdu3i93avKTP7q2vMvr//Tcd7 + 4ouuTT3EYfun/rMZIDxQW1dfbqGawYMAiFyTa5MH8sIT2ZruulPzSF7J87Zrl7xHGSgLZaJslDEFCmUX + HaALfWzexyl3ok+hobq0Ay2BeEXp5GRgvH4U+681vvFk7+jGFVMD88feE5w+dHNo8uRQw9IbzO6yDbo8 + 5d1QSJrG/2PYLIDH3oVHjNAlITu+8Hmz/TOfMjv+63NJkKR6YIUD8YRKtpaY04Kxx/Ef/ss5OJeeU87N + NbgW1+Ta5IG8KCRlGw15JK/B6cM2B+ZPuIcyUBbKpE1lrXZKJ1Nmyv6h61c5GAmlxarKTtaxErnrnBin + WGeRJX7ZP1G9fmDtg/PnBhdNuD80s3hDePToyrqLZ5nEomXmzS2/lKZpUNfmvL1tm/av7N600ex88AHT + cP0yE5t9ma7BZkMfVkPqJC8JRLd/6v8JBJ9Oiry3k5M4hmP5D//lHJyLc3JursG19gclJpFrk4e6i2ea + yLhxVaFLRm8kj+SVPJN3LYOUhTLpzglSRi3rx6AceKqv2vh1FovXvbamR0NF6bh4ZdkE9To14nUIDhNb + +8VfeWRE+NHFc2pXXX5D6PqpdwcuGrElUFQUrpswxcSmzDCJy+eaXY+uMW+9+KLe+e/W12mfy/5wrRg6 + LIYOmLdfesns++tfU9tl8J7v+E2PkWP5z7v19XoOzsU5OTfX4FpcM3BR0RbyoHl56JrLyRt51LzSl4I3 + kTJQFspE2SijU9yPU1slmpMMrskdeRquW4fxHa/Dmht9XAsPtYxsGhj760/G8giXyM8WLAk/cPXy2rtm + 31x72fjS2jEjnw+PGFm3Y3jR3ujI0SYyaqyJjhpjIkXjTN3YiaZu/IUikxyR9/Idv+kxcixPW90xfNRe + zsG59Jxybq6h11p7/RVcmzyQF/LkrAdSb0KetaqVMlCWj3QT+WAlZpCJsr8YK99wjAbJlaWjkndssglK + 8KjD/bWbh/KQy4bI5kENoY3aMRj9zZ0XRx+/eXZkw41XRUuWzo+uXbpQpWTJNaFHF13rJ/zWfNzS+fpf + OQfn0o41Obdeg2vJNbXvhABW8qJVDh5R8kheyTN5P2xnwX3YE0/aaNj++Od5JiFd5awXxki4ewceZ9wq + uUqTJRexwMZhjbUbhylQrRD+yzl0aY1rNaFeSyEpHeeA0pc86TM1JY9ZnwrycTo0iXkgGEUX2YmR9Clz + DEE4d7saNF2soQuV9PM4Xk2vxTWBV/JAXj6wc1M+ikkB+uMf/4OpiggPuqyr2XCUPna5vKSbdooRCyFV + ZdJqkaqtQryQS7Qqkd/scfxH/yvn4Fyc055fr/WhBuQTn/j/6VmIB2OGtuAAAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FNavigation.Designer.cs b/SunnyUI.Demo/Controls/FNavigation.Designer.cs new file mode 100644 index 00000000..8dd59d7d --- /dev/null +++ b/SunnyUI.Demo/Controls/FNavigation.Designer.cs @@ -0,0 +1,374 @@ +namespace Sunny.UI.Demo +{ + partial class FNavigation + { + /// + /// 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.TreeNode treeNode43 = new System.Windows.Forms.TreeNode("节点0"); + System.Windows.Forms.TreeNode treeNode44 = new System.Windows.Forms.TreeNode("节点1"); + System.Windows.Forms.TreeNode treeNode45 = new System.Windows.Forms.TreeNode("节点2"); + System.Windows.Forms.TreeNode treeNode46 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] { + treeNode43, + treeNode44, + treeNode45}); + System.Windows.Forms.TreeNode treeNode47 = new System.Windows.Forms.TreeNode("节点1"); + System.Windows.Forms.TreeNode treeNode48 = new System.Windows.Forms.TreeNode("节点2"); + System.Windows.Forms.TreeNode treeNode49 = new System.Windows.Forms.TreeNode("节点3"); + System.Windows.Forms.TreeNode treeNode50 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] { + treeNode46, + treeNode47, + treeNode48, + treeNode49}); + System.Windows.Forms.TreeNode treeNode51 = new System.Windows.Forms.TreeNode("节点4"); + System.Windows.Forms.TreeNode treeNode52 = new System.Windows.Forms.TreeNode("节点5"); + System.Windows.Forms.TreeNode treeNode53 = new System.Windows.Forms.TreeNode("节点6"); + System.Windows.Forms.TreeNode treeNode54 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] { + treeNode51, + treeNode52, + treeNode53}); + System.Windows.Forms.TreeNode treeNode55 = new System.Windows.Forms.TreeNode("节点7"); + System.Windows.Forms.TreeNode treeNode56 = new System.Windows.Forms.TreeNode("节点8"); + System.Windows.Forms.TreeNode treeNode57 = new System.Windows.Forms.TreeNode("节点2", new System.Windows.Forms.TreeNode[] { + treeNode55, + treeNode56}); + System.Windows.Forms.TreeNode treeNode58 = new System.Windows.Forms.TreeNode("节点9"); + System.Windows.Forms.TreeNode treeNode59 = new System.Windows.Forms.TreeNode("节点3", new System.Windows.Forms.TreeNode[] { + treeNode58}); + System.Windows.Forms.TreeNode treeNode22 = new System.Windows.Forms.TreeNode("节点14"); + System.Windows.Forms.TreeNode treeNode23 = new System.Windows.Forms.TreeNode("节点15"); + System.Windows.Forms.TreeNode treeNode24 = new System.Windows.Forms.TreeNode("节点16"); + System.Windows.Forms.TreeNode treeNode25 = new System.Windows.Forms.TreeNode("节点17"); + System.Windows.Forms.TreeNode treeNode26 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] { + treeNode22, + treeNode23, + treeNode24, + treeNode25}); + System.Windows.Forms.TreeNode treeNode27 = new System.Windows.Forms.TreeNode("节点18"); + System.Windows.Forms.TreeNode treeNode28 = new System.Windows.Forms.TreeNode("节点19"); + System.Windows.Forms.TreeNode treeNode29 = new System.Windows.Forms.TreeNode("节点20"); + System.Windows.Forms.TreeNode treeNode30 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] { + treeNode27, + treeNode28, + treeNode29}); + System.Windows.Forms.TreeNode treeNode31 = new System.Windows.Forms.TreeNode("节点2"); + System.Windows.Forms.TreeNode treeNode32 = new System.Windows.Forms.TreeNode("节点3"); + System.Windows.Forms.TreeNode treeNode33 = new System.Windows.Forms.TreeNode("节点4"); + System.Windows.Forms.TreeNode treeNode34 = new System.Windows.Forms.TreeNode("节点5"); + System.Windows.Forms.TreeNode treeNode35 = new System.Windows.Forms.TreeNode("节点6"); + System.Windows.Forms.TreeNode treeNode36 = new System.Windows.Forms.TreeNode("节点7"); + System.Windows.Forms.TreeNode treeNode37 = new System.Windows.Forms.TreeNode("节点8"); + System.Windows.Forms.TreeNode treeNode38 = new System.Windows.Forms.TreeNode("节点9"); + System.Windows.Forms.TreeNode treeNode39 = new System.Windows.Forms.TreeNode("节点10"); + System.Windows.Forms.TreeNode treeNode40 = new System.Windows.Forms.TreeNode("节点11"); + System.Windows.Forms.TreeNode treeNode41 = new System.Windows.Forms.TreeNode("节点12"); + System.Windows.Forms.TreeNode treeNode42 = new System.Windows.Forms.TreeNode("节点13"); + System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("节点14"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("节点15"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("节点16"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("节点17"); + System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3, + treeNode4}); + System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("节点18"); + System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("节点19"); + System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("节点20"); + System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] { + treeNode6, + treeNode7, + treeNode8}); + System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("节点2"); + System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("节点3"); + System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("节点4"); + System.Windows.Forms.TreeNode treeNode13 = new System.Windows.Forms.TreeNode("节点5"); + System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("节点6"); + System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("节点7"); + System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("节点8"); + System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("节点9"); + System.Windows.Forms.TreeNode treeNode18 = new System.Windows.Forms.TreeNode("节点10"); + System.Windows.Forms.TreeNode treeNode19 = new System.Windows.Forms.TreeNode("节点11"); + System.Windows.Forms.TreeNode treeNode20 = new System.Windows.Forms.TreeNode("节点12"); + System.Windows.Forms.TreeNode treeNode21 = new System.Windows.Forms.TreeNode("节点13"); + this.uiNavBar1 = new Sunny.UI.UINavBar(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiNavMenu1 = new Sunny.UI.UINavMenu(); + this.uiNavMenu2 = new Sunny.UI.UINavMenu(); + this.uiLine2 = new Sunny.UI.UILine(); + this.PagePanel.SuspendLayout(); + this.uiNavBar1.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiNavMenu2); + this.PagePanel.Controls.Add(this.uiNavMenu1); + this.PagePanel.Controls.Add(this.uiNavBar1); + this.PagePanel.Size = new System.Drawing.Size(800, 545); + // + // uiNavBar1 + // + this.uiNavBar1.Controls.Add(this.uiLine1); + this.uiNavBar1.Dock = System.Windows.Forms.DockStyle.Top; + this.uiNavBar1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiNavBar1.Location = new System.Drawing.Point(0, 0); + this.uiNavBar1.Name = "uiNavBar1"; + treeNode43.Name = "节点0"; + treeNode43.Text = "节点0"; + treeNode44.Name = "节点1"; + treeNode44.Text = "节点1"; + treeNode45.Name = "节点2"; + treeNode45.Text = "节点2"; + treeNode46.Name = "节点0"; + treeNode46.Text = "节点0"; + treeNode47.Name = "节点1"; + treeNode47.Text = "节点1"; + treeNode48.Name = "节点2"; + treeNode48.Text = "节点2"; + treeNode49.Name = "节点3"; + treeNode49.Text = "节点3"; + treeNode50.Name = "节点0"; + treeNode50.Text = "节点0"; + treeNode51.Name = "节点4"; + treeNode51.Text = "节点4"; + treeNode52.Name = "节点5"; + treeNode52.Text = "节点5"; + treeNode53.Name = "节点6"; + treeNode53.Text = "节点6"; + treeNode54.Name = "节点1"; + treeNode54.Text = "节点1"; + treeNode55.Name = "节点7"; + treeNode55.Text = "节点7"; + treeNode56.Name = "节点8"; + treeNode56.Text = "节点8"; + treeNode57.Name = "节点2"; + treeNode57.Text = "节点2"; + treeNode58.Name = "节点9"; + treeNode58.Text = "节点9"; + treeNode59.Name = "节点3"; + treeNode59.Text = "节点3"; + this.uiNavBar1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode50, + treeNode54, + treeNode57, + treeNode59}); + this.uiNavBar1.Size = new System.Drawing.Size(800, 110); + this.uiNavBar1.TabIndex = 0; + this.uiNavBar1.Text = "uiNavBar1"; + // + // uiLine1 + // + this.uiLine1.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.ForeColor = System.Drawing.Color.White; + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.Style = Sunny.UI.UIStyle.Custom; + this.uiLine1.StyleCustomMode = true; + this.uiLine1.TabIndex = 20; + this.uiLine1.Text = "UINavBar"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiNavMenu1 + // + this.uiNavMenu1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(56)))), ((int)(((byte)(56)))), ((int)(((byte)(56))))); + this.uiNavMenu1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.uiNavMenu1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.uiNavMenu1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiNavMenu1.ItemHeight = 50; + this.uiNavMenu1.Location = new System.Drawing.Point(30, 157); + this.uiNavMenu1.Name = "uiNavMenu1"; + treeNode22.Name = "节点14"; + treeNode22.Text = "节点14"; + treeNode23.Name = "节点15"; + treeNode23.Text = "节点15"; + treeNode24.Name = "节点16"; + treeNode24.Text = "节点16"; + treeNode25.Name = "节点17"; + treeNode25.Text = "节点17"; + treeNode26.Name = "节点0"; + treeNode26.Text = "节点0"; + treeNode27.Name = "节点18"; + treeNode27.Text = "节点18"; + treeNode28.Name = "节点19"; + treeNode28.Text = "节点19"; + treeNode29.Name = "节点20"; + treeNode29.Text = "节点20"; + treeNode30.Name = "节点1"; + treeNode30.Text = "节点1"; + treeNode31.Name = "节点2"; + treeNode31.Text = "节点2"; + treeNode32.Name = "节点3"; + treeNode32.Text = "节点3"; + treeNode33.Name = "节点4"; + treeNode33.Text = "节点4"; + treeNode34.Name = "节点5"; + treeNode34.Text = "节点5"; + treeNode35.Name = "节点6"; + treeNode35.Text = "节点6"; + treeNode36.Name = "节点7"; + treeNode36.Text = "节点7"; + treeNode37.Name = "节点8"; + treeNode37.Text = "节点8"; + treeNode38.Name = "节点9"; + treeNode38.Text = "节点9"; + treeNode39.Name = "节点10"; + treeNode39.Text = "节点10"; + treeNode40.Name = "节点11"; + treeNode40.Text = "节点11"; + treeNode41.Name = "节点12"; + treeNode41.Text = "节点12"; + treeNode42.Name = "节点13"; + treeNode42.Text = "节点13"; + this.uiNavMenu1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode26, + treeNode30, + treeNode31, + treeNode32, + treeNode33, + treeNode34, + treeNode35, + treeNode36, + treeNode37, + treeNode38, + treeNode39, + treeNode40, + treeNode41, + treeNode42}); + this.uiNavMenu1.Size = new System.Drawing.Size(253, 353); + this.uiNavMenu1.TabIndex = 1; + // + // uiNavMenu2 + // + this.uiNavMenu2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250))))); + this.uiNavMenu2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.uiNavMenu2.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.uiNavMenu2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(250)))), ((int)(((byte)(250)))), ((int)(((byte)(250))))); + this.uiNavMenu2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiNavMenu2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiNavMenu2.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(230)))), ((int)(((byte)(230))))); + this.uiNavMenu2.ItemHeight = 50; + this.uiNavMenu2.Location = new System.Drawing.Point(299, 157); + this.uiNavMenu2.MenuStyle = Sunny.UI.UIMenuStyle.White; + this.uiNavMenu2.Name = "uiNavMenu2"; + treeNode1.Name = "节点14"; + treeNode1.Text = "节点14"; + treeNode2.Name = "节点15"; + treeNode2.Text = "节点15"; + treeNode3.Name = "节点16"; + treeNode3.Text = "节点16"; + treeNode4.Name = "节点17"; + treeNode4.Text = "节点17"; + treeNode5.Name = "节点0"; + treeNode5.Text = "节点0"; + treeNode6.Name = "节点18"; + treeNode6.Text = "节点18"; + treeNode7.Name = "节点19"; + treeNode7.Text = "节点19"; + treeNode8.Name = "节点20"; + treeNode8.Text = "节点20"; + treeNode9.Name = "节点1"; + treeNode9.Text = "节点1"; + treeNode10.Name = "节点2"; + treeNode10.Text = "节点2"; + treeNode11.Name = "节点3"; + treeNode11.Text = "节点3"; + treeNode12.Name = "节点4"; + treeNode12.Text = "节点4"; + treeNode13.Name = "节点5"; + treeNode13.Text = "节点5"; + treeNode14.Name = "节点6"; + treeNode14.Text = "节点6"; + treeNode15.Name = "节点7"; + treeNode15.Text = "节点7"; + treeNode16.Name = "节点8"; + treeNode16.Text = "节点8"; + treeNode17.Name = "节点9"; + treeNode17.Text = "节点9"; + treeNode18.Name = "节点10"; + treeNode18.Text = "节点10"; + treeNode19.Name = "节点11"; + treeNode19.Text = "节点11"; + treeNode20.Name = "节点12"; + treeNode20.Text = "节点12"; + treeNode21.Name = "节点13"; + treeNode21.Text = "节点13"; + this.uiNavMenu2.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode5, + treeNode9, + treeNode10, + treeNode11, + treeNode12, + treeNode13, + treeNode14, + treeNode15, + treeNode16, + treeNode17, + treeNode18, + treeNode19, + treeNode20, + treeNode21}); + this.uiNavMenu2.SelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240))))); + this.uiNavMenu2.Size = new System.Drawing.Size(253, 353); + this.uiNavMenu2.TabIndex = 2; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(30, 125); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(670, 20); + this.uiLine2.TabIndex = 19; + this.uiLine2.Text = "UINavMenu"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FNavigation + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 580); + this.Name = "FNavigation"; + this.Text = "NavBar"; + this.PagePanel.ResumeLayout(false); + this.uiNavBar1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UINavBar uiNavBar1; + private UINavMenu uiNavMenu1; + private UINavMenu uiNavMenu2; + private UILine uiLine1; + private UILine uiLine2; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FNavigation.cs b/SunnyUI.Demo/Controls/FNavigation.cs new file mode 100644 index 00000000..bd71e968 --- /dev/null +++ b/SunnyUI.Demo/Controls/FNavigation.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FNavigation : UITitlePage + { + public FNavigation() + { + InitializeComponent(); + } + } +} diff --git a/SunnyUI.Demo/Controls/FNavigation.resx b/SunnyUI.Demo/Controls/FNavigation.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FNavigation.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/SunnyUI.Demo/Controls/FOther.Designer.cs b/SunnyUI.Demo/Controls/FOther.Designer.cs new file mode 100644 index 00000000..80f615e1 --- /dev/null +++ b/SunnyUI.Demo/Controls/FOther.Designer.cs @@ -0,0 +1,356 @@ +namespace Sunny.UI.Demo +{ + partial class FOther + { + /// + /// 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.uiLight1 = new Sunny.UI.UILight(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiLight2 = new Sunny.UI.UILight(); + this.uiLight3 = new Sunny.UI.UILight(); + this.uiProcessBar1 = new Sunny.UI.UIProcessBar(); + this.uiLine3 = new Sunny.UI.UILine(); + this.uiProgressIndicator1 = new Sunny.UI.UIProgressIndicator(); + this.uiLine4 = new Sunny.UI.UILine(); + this.uiTrackBar1 = new Sunny.UI.UITrackBar(); + this.uiLine5 = new Sunny.UI.UILine(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.uiScrollBar1 = new Sunny.UI.UIScrollBar(); + this.uiLight4 = new Sunny.UI.UILight(); + this.uiLedBulb1 = new Sunny.UI.UILedBulb(); + this.uiLine8 = new Sunny.UI.UILine(); + this.uiLedBulb2 = new Sunny.UI.UILedBulb(); + this.uiLedBulb3 = new Sunny.UI.UILedBulb(); + this.uiLedBulb4 = new Sunny.UI.UILedBulb(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiScrollBar2 = new Sunny.UI.UIScrollBar(); + this.uiScrollBar3 = new Sunny.UI.UIScrollBar(); + this.uiScrollBar4 = new Sunny.UI.UIScrollBar(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiScrollBar4); + this.PagePanel.Controls.Add(this.uiScrollBar3); + this.PagePanel.Controls.Add(this.uiScrollBar2); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiLedBulb4); + this.PagePanel.Controls.Add(this.uiLedBulb3); + this.PagePanel.Controls.Add(this.uiLedBulb2); + this.PagePanel.Controls.Add(this.uiLine8); + this.PagePanel.Controls.Add(this.uiLedBulb1); + this.PagePanel.Controls.Add(this.uiLight4); + this.PagePanel.Controls.Add(this.uiScrollBar1); + this.PagePanel.Controls.Add(this.uiLine5); + this.PagePanel.Controls.Add(this.uiTrackBar1); + this.PagePanel.Controls.Add(this.uiLine4); + this.PagePanel.Controls.Add(this.uiProgressIndicator1); + this.PagePanel.Controls.Add(this.uiLine3); + this.PagePanel.Controls.Add(this.uiProcessBar1); + this.PagePanel.Controls.Add(this.uiLight3); + this.PagePanel.Controls.Add(this.uiLight2); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiLight1); + this.PagePanel.Size = new System.Drawing.Size(800, 472); + // + // uiLight1 + // + this.uiLight1.CenterColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232))))); + this.uiLight1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLight1.Location = new System.Drawing.Point(30, 52); + this.uiLight1.Name = "uiLight1"; + this.uiLight1.Radius = 35; + this.uiLight1.Size = new System.Drawing.Size(35, 35); + this.uiLight1.TabIndex = 20; + this.uiLight1.Text = "uiLight1"; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(30, 20); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(319, 20); + this.uiLine2.TabIndex = 21; + this.uiLine2.Text = "UILight"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLight2 + // + this.uiLight2.CenterColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232))))); + this.uiLight2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLight2.Location = new System.Drawing.Point(114, 52); + this.uiLight2.Name = "uiLight2"; + this.uiLight2.Radius = 35; + this.uiLight2.Size = new System.Drawing.Size(35, 35); + this.uiLight2.State = Sunny.UI.UILightState.Off; + this.uiLight2.TabIndex = 22; + this.uiLight2.Text = "uiLight2"; + // + // uiLight3 + // + this.uiLight3.CenterColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232))))); + this.uiLight3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLight3.Location = new System.Drawing.Point(156, 52); + this.uiLight3.Name = "uiLight3"; + this.uiLight3.Radius = 35; + this.uiLight3.Size = new System.Drawing.Size(35, 35); + this.uiLight3.State = Sunny.UI.UILightState.Blink; + this.uiLight3.TabIndex = 23; + this.uiLight3.Text = "uiLight3"; + // + // uiProcessBar1 + // + this.uiProcessBar1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiProcessBar1.Location = new System.Drawing.Point(30, 136); + this.uiProcessBar1.MinimumSize = new System.Drawing.Size(70, 23); + this.uiProcessBar1.Name = "uiProcessBar1"; + this.uiProcessBar1.Size = new System.Drawing.Size(319, 29); + this.uiProcessBar1.TabIndex = 24; + this.uiProcessBar1.Text = "0.0%"; + // + // uiLine3 + // + this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine3.Location = new System.Drawing.Point(30, 103); + this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine3.Name = "uiLine3"; + this.uiLine3.Size = new System.Drawing.Size(319, 20); + this.uiLine3.TabIndex = 25; + this.uiLine3.Text = "UIProcessBar"; + this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiProgressIndicator1 + // + this.uiProgressIndicator1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiProgressIndicator1.Location = new System.Drawing.Point(30, 217); + this.uiProgressIndicator1.Name = "uiProgressIndicator1"; + this.uiProgressIndicator1.Size = new System.Drawing.Size(119, 132); + this.uiProgressIndicator1.TabIndex = 26; + this.uiProgressIndicator1.Text = "uiProgressIndicator1"; + // + // uiLine4 + // + this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine4.Location = new System.Drawing.Point(30, 182); + this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine4.Name = "uiLine4"; + this.uiLine4.Size = new System.Drawing.Size(319, 20); + this.uiLine4.TabIndex = 27; + this.uiLine4.Text = "UIProgressIndicator"; + this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiTrackBar1 + // + this.uiTrackBar1.DisableColor = System.Drawing.Color.Silver; + this.uiTrackBar1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTrackBar1.Location = new System.Drawing.Point(381, 136); + this.uiTrackBar1.Name = "uiTrackBar1"; + this.uiTrackBar1.Size = new System.Drawing.Size(158, 29); + this.uiTrackBar1.Style = Sunny.UI.UIStyle.Custom; + this.uiTrackBar1.TabIndex = 30; + this.uiTrackBar1.Text = "uiTrackBar1"; + // + // uiLine5 + // + this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine5.Location = new System.Drawing.Point(381, 101); + this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine5.Name = "uiLine5"; + this.uiLine5.Size = new System.Drawing.Size(319, 20); + this.uiLine5.TabIndex = 31; + this.uiLine5.Text = "UITrackBar"; + this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // timer1 + // + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // uiScrollBar1 + // + this.uiScrollBar1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiScrollBar1.Location = new System.Drawing.Point(381, 217); + this.uiScrollBar1.Name = "uiScrollBar1"; + this.uiScrollBar1.Size = new System.Drawing.Size(23, 163); + this.uiScrollBar1.TabIndex = 35; + this.uiScrollBar1.Text = "uiScrollBar1"; + // + // uiLight4 + // + this.uiLight4.CenterColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232))))); + this.uiLight4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLight4.Location = new System.Drawing.Point(72, 52); + this.uiLight4.Name = "uiLight4"; + this.uiLight4.OnColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiLight4.Radius = 35; + this.uiLight4.ShowLightLine = false; + this.uiLight4.Size = new System.Drawing.Size(35, 35); + this.uiLight4.TabIndex = 36; + this.uiLight4.Text = "uiLight4"; + // + // uiLedBulb1 + // + this.uiLedBulb1.Location = new System.Drawing.Point(381, 52); + this.uiLedBulb1.Name = "uiLedBulb1"; + this.uiLedBulb1.Size = new System.Drawing.Size(32, 32); + this.uiLedBulb1.TabIndex = 37; + this.uiLedBulb1.Text = "uiLedBulb1"; + // + // uiLine8 + // + this.uiLine8.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine8.Location = new System.Drawing.Point(381, 20); + this.uiLine8.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine8.Name = "uiLine8"; + this.uiLine8.Size = new System.Drawing.Size(319, 20); + this.uiLine8.TabIndex = 38; + this.uiLine8.Text = "UILedBulb"; + this.uiLine8.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLedBulb2 + // + this.uiLedBulb2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192))))); + this.uiLedBulb2.Location = new System.Drawing.Point(423, 52); + this.uiLedBulb2.Name = "uiLedBulb2"; + this.uiLedBulb2.Size = new System.Drawing.Size(32, 32); + this.uiLedBulb2.TabIndex = 39; + this.uiLedBulb2.Text = "uiLedBulb2"; + // + // uiLedBulb3 + // + this.uiLedBulb3.Location = new System.Drawing.Point(465, 52); + this.uiLedBulb3.Name = "uiLedBulb3"; + this.uiLedBulb3.On = false; + this.uiLedBulb3.Size = new System.Drawing.Size(32, 32); + this.uiLedBulb3.TabIndex = 40; + this.uiLedBulb3.Text = "uiLedBulb3"; + // + // uiLedBulb4 + // + this.uiLedBulb4.Blink = true; + this.uiLedBulb4.BlinkInterval = 500; + this.uiLedBulb4.Location = new System.Drawing.Point(507, 52); + this.uiLedBulb4.Name = "uiLedBulb4"; + this.uiLedBulb4.Size = new System.Drawing.Size(32, 32); + this.uiLedBulb4.TabIndex = 41; + this.uiLedBulb4.Text = "uiLedBulb4"; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(381, 182); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(319, 20); + this.uiLine1.TabIndex = 42; + this.uiLine1.Text = "UIScrollBar"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiScrollBar2 + // + this.uiScrollBar2.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(239)))), ((int)(((byte)(248)))), ((int)(((byte)(232))))); + this.uiScrollBar2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiScrollBar2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiScrollBar2.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiScrollBar2.Location = new System.Drawing.Point(423, 217); + this.uiScrollBar2.Name = "uiScrollBar2"; + this.uiScrollBar2.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiScrollBar2.Size = new System.Drawing.Size(23, 163); + this.uiScrollBar2.Style = Sunny.UI.UIStyle.Green; + this.uiScrollBar2.StyleCustomMode = true; + this.uiScrollBar2.TabIndex = 43; + this.uiScrollBar2.Text = "uiScrollBar2"; + // + // uiScrollBar3 + // + this.uiScrollBar3.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(245)))), ((int)(((byte)(233))))); + this.uiScrollBar3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiScrollBar3.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiScrollBar3.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiScrollBar3.Location = new System.Drawing.Point(465, 217); + this.uiScrollBar3.Name = "uiScrollBar3"; + this.uiScrollBar3.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiScrollBar3.Size = new System.Drawing.Size(23, 163); + this.uiScrollBar3.Style = Sunny.UI.UIStyle.Orange; + this.uiScrollBar3.StyleCustomMode = true; + this.uiScrollBar3.TabIndex = 44; + this.uiScrollBar3.Text = "uiScrollBar3"; + // + // uiScrollBar4 + // + this.uiScrollBar4.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(238)))), ((int)(((byte)(238))))); + this.uiScrollBar4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiScrollBar4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiScrollBar4.HoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiScrollBar4.Location = new System.Drawing.Point(507, 217); + this.uiScrollBar4.Name = "uiScrollBar4"; + this.uiScrollBar4.PressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiScrollBar4.Size = new System.Drawing.Size(23, 163); + this.uiScrollBar4.Style = Sunny.UI.UIStyle.Red; + this.uiScrollBar4.StyleCustomMode = true; + this.uiScrollBar4.TabIndex = 45; + this.uiScrollBar4.Text = "uiScrollBar4"; + // + // FOther + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 507); + this.Name = "FOther"; + this.Text = "Other"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private UILight uiLight3; + private UILight uiLight2; + private UILine uiLine2; + private UILight uiLight1; + private UITrackBar uiTrackBar1; + private UILine uiLine4; + private UIProgressIndicator uiProgressIndicator1; + private UILine uiLine3; + private UIProcessBar uiProcessBar1; + private UILine uiLine5; + private System.Windows.Forms.Timer timer1; + private UIScrollBar uiScrollBar1; + private UILight uiLight4; + private UILedBulb uiLedBulb2; + private UILine uiLine8; + private UILedBulb uiLedBulb1; + private UILedBulb uiLedBulb4; + private UILedBulb uiLedBulb3; + private UIScrollBar uiScrollBar2; + private UILine uiLine1; + private UIScrollBar uiScrollBar4; + private UIScrollBar uiScrollBar3; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FOther.cs b/SunnyUI.Demo/Controls/FOther.cs new file mode 100644 index 00000000..732ce8c5 --- /dev/null +++ b/SunnyUI.Demo/Controls/FOther.cs @@ -0,0 +1,26 @@ +namespace Sunny.UI.Demo +{ + public partial class FOther : UITitlePage + { + public FOther() + { + InitializeComponent(); + } + + private int value; + + public override void Init() + { + value = 0; + timer1.ReStart(); + } + + private void timer1_Tick(object sender, System.EventArgs e) + { + value++; + uiTrackBar1.Value = value; + uiProcessBar1.Value = value; + uiScrollBar1.Value = value; + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FOther.resx b/SunnyUI.Demo/Controls/FOther.resx new file mode 100644 index 00000000..1f666f26 --- /dev/null +++ b/SunnyUI.Demo/Controls/FOther.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 + + + 17, 17 + + \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FPanel.Designer.cs b/SunnyUI.Demo/Controls/FPanel.Designer.cs new file mode 100644 index 00000000..0007ddd7 --- /dev/null +++ b/SunnyUI.Demo/Controls/FPanel.Designer.cs @@ -0,0 +1,95 @@ +namespace Sunny.UI.Demo +{ + partial class FPanel + { + /// + /// 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.uiTitlePanel1 = new Sunny.UI.UITitlePanel(); + this.uiPanel1 = new Sunny.UI.UIPanel(); + this.uiGroupBox1 = new Sunny.UI.UIGroupBox(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiGroupBox1); + this.PagePanel.Controls.Add(this.uiPanel1); + this.PagePanel.Controls.Add(this.uiTitlePanel1); + this.PagePanel.Size = new System.Drawing.Size(800, 453); + // + // uiTitlePanel1 + // + this.uiTitlePanel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTitlePanel1.ForeColor = System.Drawing.Color.White; + this.uiTitlePanel1.Location = new System.Drawing.Point(30, 230); + this.uiTitlePanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiTitlePanel1.Name = "uiTitlePanel1"; + this.uiTitlePanel1.Padding = new System.Windows.Forms.Padding(1, 35, 1, 1); + this.uiTitlePanel1.Size = new System.Drawing.Size(270, 180); + this.uiTitlePanel1.Style = Sunny.UI.UIStyle.Custom; + this.uiTitlePanel1.TabIndex = 1; + this.uiTitlePanel1.Text = "uiTitlePanel1"; + // + // uiPanel1 + // + this.uiPanel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiPanel1.Location = new System.Drawing.Point(30, 20); + this.uiPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiPanel1.Name = "uiPanel1"; + this.uiPanel1.Size = new System.Drawing.Size(270, 180); + this.uiPanel1.TabIndex = 3; + this.uiPanel1.Text = "uiPanel1"; + // + // uiGroupBox1 + // + this.uiGroupBox1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiGroupBox1.Location = new System.Drawing.Point(331, 4); + this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox1.Name = "uiGroupBox1"; + this.uiGroupBox1.Size = new System.Drawing.Size(270, 196); + this.uiGroupBox1.TabIndex = 4; + this.uiGroupBox1.Text = "uiGroupBox1"; + // + // FPanel + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 488); + this.Name = "FPanel"; + this.PageIndex = 1005; + this.Text = "Panel"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private UITitlePanel uiTitlePanel1; + private UIPanel uiPanel1; + private UIGroupBox uiGroupBox1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FPanel.cs b/SunnyUI.Demo/Controls/FPanel.cs new file mode 100644 index 00000000..2bd51f66 --- /dev/null +++ b/SunnyUI.Demo/Controls/FPanel.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FPanel : UITitlePage + { + public FPanel() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FPanel.resx b/SunnyUI.Demo/Controls/FPanel.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FPanel.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/SunnyUI.Demo/Controls/FRadioButton.Designer.cs b/SunnyUI.Demo/Controls/FRadioButton.Designer.cs new file mode 100644 index 00000000..430adffb --- /dev/null +++ b/SunnyUI.Demo/Controls/FRadioButton.Designer.cs @@ -0,0 +1,350 @@ +namespace Sunny.UI.Demo +{ + partial class FRadioButton + { + /// + /// 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.uiRadioButton12 = new Sunny.UI.UIRadioButton(); + this.uiRadioButton13 = new Sunny.UI.UIRadioButton(); + this.uiLabel3 = new Sunny.UI.UILabel(); + this.uiRadioButton9 = new Sunny.UI.UIRadioButton(); + this.uiRadioButton10 = new Sunny.UI.UIRadioButton(); + this.uiRadioButton11 = new Sunny.UI.UIRadioButton(); + this.uiLabel2 = new Sunny.UI.UILabel(); + this.uiRadioButton5 = new Sunny.UI.UIRadioButton(); + this.uiRadioButton7 = new Sunny.UI.UIRadioButton(); + this.uiRadioButton8 = new Sunny.UI.UIRadioButton(); + this.uiLabel1 = new Sunny.UI.UILabel(); + this.uiRadioButton6 = new Sunny.UI.UIRadioButton(); + this.uiRadioButton3 = new Sunny.UI.UIRadioButton(); + this.uiRadioButton4 = new Sunny.UI.UIRadioButton(); + this.uiLine3 = new Sunny.UI.UILine(); + this.uiRadioButton2 = new Sunny.UI.UIRadioButton(); + this.uiRadioButton1 = new Sunny.UI.UIRadioButton(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiRadioButtonGroup1 = new Sunny.UI.UIRadioButtonGroup(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiRadioButtonGroup1); + this.PagePanel.Controls.Add(this.uiRadioButton12); + this.PagePanel.Controls.Add(this.uiRadioButton13); + this.PagePanel.Controls.Add(this.uiLabel3); + this.PagePanel.Controls.Add(this.uiRadioButton9); + this.PagePanel.Controls.Add(this.uiRadioButton10); + this.PagePanel.Controls.Add(this.uiRadioButton11); + this.PagePanel.Controls.Add(this.uiLabel2); + this.PagePanel.Controls.Add(this.uiRadioButton5); + this.PagePanel.Controls.Add(this.uiRadioButton7); + this.PagePanel.Controls.Add(this.uiRadioButton8); + this.PagePanel.Controls.Add(this.uiLabel1); + this.PagePanel.Controls.Add(this.uiRadioButton6); + this.PagePanel.Controls.Add(this.uiRadioButton3); + this.PagePanel.Controls.Add(this.uiRadioButton4); + this.PagePanel.Controls.Add(this.uiLine3); + this.PagePanel.Controls.Add(this.uiRadioButton2); + this.PagePanel.Controls.Add(this.uiRadioButton1); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Size = new System.Drawing.Size(800, 563); + // + // uiRadioButton12 + // + this.uiRadioButton12.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton12.Enabled = false; + this.uiRadioButton12.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton12.GroupIndex = 4; + this.uiRadioButton12.Location = new System.Drawing.Point(516, 48); + this.uiRadioButton12.Name = "uiRadioButton12"; + this.uiRadioButton12.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton12.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton12.TabIndex = 61; + this.uiRadioButton12.Text = "uiRadioButton12"; + // + // uiRadioButton13 + // + this.uiRadioButton13.Checked = true; + this.uiRadioButton13.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton13.Enabled = false; + this.uiRadioButton13.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton13.GroupIndex = 4; + this.uiRadioButton13.Location = new System.Drawing.Point(354, 48); + this.uiRadioButton13.Name = "uiRadioButton13"; + this.uiRadioButton13.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton13.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton13.TabIndex = 60; + this.uiRadioButton13.Text = "uiRadioButton13"; + // + // uiLabel3 + // + this.uiLabel3.AutoSize = true; + this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel3.Location = new System.Drawing.Point(49, 219); + this.uiLabel3.Name = "uiLabel3"; + this.uiLabel3.Size = new System.Drawing.Size(131, 21); + this.uiLabel3.TabIndex = 59; + this.uiLabel3.Text = "GroupIndex = 3"; + this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiRadioButton9 + // + this.uiRadioButton9.Checked = true; + this.uiRadioButton9.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton9.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton9.GroupIndex = 3; + this.uiRadioButton9.Location = new System.Drawing.Point(516, 212); + this.uiRadioButton9.Name = "uiRadioButton9"; + this.uiRadioButton9.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton9.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton9.TabIndex = 58; + this.uiRadioButton9.Text = "uiRadioButton33"; + // + // uiRadioButton10 + // + this.uiRadioButton10.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton10.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton10.GroupIndex = 3; + this.uiRadioButton10.Location = new System.Drawing.Point(354, 212); + this.uiRadioButton10.Name = "uiRadioButton10"; + this.uiRadioButton10.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton10.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton10.TabIndex = 57; + this.uiRadioButton10.Text = "uiRadioButton32"; + // + // uiRadioButton11 + // + this.uiRadioButton11.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton11.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton11.GroupIndex = 3; + this.uiRadioButton11.Location = new System.Drawing.Point(192, 212); + this.uiRadioButton11.Name = "uiRadioButton11"; + this.uiRadioButton11.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton11.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton11.TabIndex = 56; + this.uiRadioButton11.Text = "uiRadioButton31"; + // + // uiLabel2 + // + this.uiLabel2.AutoSize = true; + this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel2.Location = new System.Drawing.Point(49, 178); + this.uiLabel2.Name = "uiLabel2"; + this.uiLabel2.Size = new System.Drawing.Size(131, 21); + this.uiLabel2.TabIndex = 55; + this.uiLabel2.Text = "GroupIndex = 2"; + this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiRadioButton5 + // + this.uiRadioButton5.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton5.GroupIndex = 2; + this.uiRadioButton5.Location = new System.Drawing.Point(516, 171); + this.uiRadioButton5.Name = "uiRadioButton5"; + this.uiRadioButton5.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton5.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton5.TabIndex = 54; + this.uiRadioButton5.Text = "uiRadioButton23"; + // + // uiRadioButton7 + // + this.uiRadioButton7.Checked = true; + this.uiRadioButton7.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton7.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton7.GroupIndex = 2; + this.uiRadioButton7.Location = new System.Drawing.Point(354, 171); + this.uiRadioButton7.Name = "uiRadioButton7"; + this.uiRadioButton7.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton7.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton7.TabIndex = 53; + this.uiRadioButton7.Text = "uiRadioButton22"; + // + // uiRadioButton8 + // + this.uiRadioButton8.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton8.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton8.GroupIndex = 2; + this.uiRadioButton8.Location = new System.Drawing.Point(192, 171); + this.uiRadioButton8.Name = "uiRadioButton8"; + this.uiRadioButton8.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton8.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton8.TabIndex = 52; + this.uiRadioButton8.Text = "uiRadioButton21"; + // + // uiLabel1 + // + this.uiLabel1.AutoSize = true; + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel1.Location = new System.Drawing.Point(49, 137); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(131, 21); + this.uiLabel1.TabIndex = 51; + this.uiLabel1.Text = "GroupIndex = 1"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiRadioButton6 + // + this.uiRadioButton6.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton6.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton6.GroupIndex = 1; + this.uiRadioButton6.Location = new System.Drawing.Point(516, 130); + this.uiRadioButton6.Name = "uiRadioButton6"; + this.uiRadioButton6.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton6.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton6.TabIndex = 50; + this.uiRadioButton6.Text = "uiRadioButton13"; + // + // uiRadioButton3 + // + this.uiRadioButton3.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton3.GroupIndex = 1; + this.uiRadioButton3.Location = new System.Drawing.Point(354, 130); + this.uiRadioButton3.Name = "uiRadioButton3"; + this.uiRadioButton3.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton3.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton3.TabIndex = 49; + this.uiRadioButton3.Text = "uiRadioButton12"; + // + // uiRadioButton4 + // + this.uiRadioButton4.Checked = true; + this.uiRadioButton4.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton4.GroupIndex = 1; + this.uiRadioButton4.Location = new System.Drawing.Point(192, 130); + this.uiRadioButton4.Name = "uiRadioButton4"; + this.uiRadioButton4.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton4.Size = new System.Drawing.Size(156, 35); + this.uiRadioButton4.TabIndex = 48; + this.uiRadioButton4.Text = "uiRadioButton11"; + // + // uiLine3 + // + this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine3.Location = new System.Drawing.Point(30, 96); + this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine3.Name = "uiLine3"; + this.uiLine3.Size = new System.Drawing.Size(670, 20); + this.uiLine3.TabIndex = 47; + this.uiLine3.Text = "UIRadioButton 分组"; + this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiRadioButton2 + // + this.uiRadioButton2.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton2.Location = new System.Drawing.Point(192, 48); + this.uiRadioButton2.Name = "uiRadioButton2"; + this.uiRadioButton2.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton2.Size = new System.Drawing.Size(150, 35); + this.uiRadioButton2.TabIndex = 46; + this.uiRadioButton2.Text = "uiRadioButton2"; + // + // uiRadioButton1 + // + this.uiRadioButton1.Checked = true; + this.uiRadioButton1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiRadioButton1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButton1.Location = new System.Drawing.Point(30, 48); + this.uiRadioButton1.Name = "uiRadioButton1"; + this.uiRadioButton1.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiRadioButton1.Size = new System.Drawing.Size(150, 35); + this.uiRadioButton1.TabIndex = 45; + this.uiRadioButton1.Text = "uiRadioButton1"; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(30, 20); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(670, 20); + this.uiLine2.TabIndex = 44; + this.uiLine2.Text = "UIRadioButton"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiRadioButtonGroup1 + // + this.uiRadioButtonGroup1.ColumnCount = 3; + this.uiRadioButtonGroup1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiRadioButtonGroup1.Items.AddRange(new object[] { + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9"}); + this.uiRadioButtonGroup1.Location = new System.Drawing.Point(30, 253); + this.uiRadioButtonGroup1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiRadioButtonGroup1.Name = "uiRadioButtonGroup1"; + this.uiRadioButtonGroup1.Size = new System.Drawing.Size(670, 173); + this.uiRadioButtonGroup1.TabIndex = 63; + this.uiRadioButtonGroup1.Text = "UIRadioButtonGroup"; + this.uiRadioButtonGroup1.ValueChanged += new Sunny.UI.UIRadioButtonGroup.OnValueChanged(this.uiRadioButtonGroup1_ValueChanged); + // + // FRadioButton + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 598); + this.Name = "FRadioButton"; + this.Text = "RadioButton"; + this.PagePanel.ResumeLayout(false); + this.PagePanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private UIRadioButton uiRadioButton12; + private UIRadioButton uiRadioButton13; + private UILabel uiLabel3; + private UIRadioButton uiRadioButton9; + private UIRadioButton uiRadioButton10; + private UIRadioButton uiRadioButton11; + private UILabel uiLabel2; + private UIRadioButton uiRadioButton5; + private UIRadioButton uiRadioButton7; + private UIRadioButton uiRadioButton8; + private UILabel uiLabel1; + private UIRadioButton uiRadioButton6; + private UIRadioButton uiRadioButton3; + private UIRadioButton uiRadioButton4; + private UILine uiLine3; + private UIRadioButton uiRadioButton2; + private UIRadioButton uiRadioButton1; + private UILine uiLine2; + private UIRadioButtonGroup uiRadioButtonGroup1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FRadioButton.cs b/SunnyUI.Demo/Controls/FRadioButton.cs new file mode 100644 index 00000000..6a926c2a --- /dev/null +++ b/SunnyUI.Demo/Controls/FRadioButton.cs @@ -0,0 +1,15 @@ +namespace Sunny.UI.Demo +{ + public partial class FRadioButton : UITitlePage + { + public FRadioButton() + { + InitializeComponent(); + } + + private void uiRadioButtonGroup1_ValueChanged(object sender, int index, string text) + { + this.ShowInfoDialog("SelectedIndex: " + index + ", SelectedText: " + text); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FRadioButton.resx b/SunnyUI.Demo/Controls/FRadioButton.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FRadioButton.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/SunnyUI.Demo/Controls/FTabControl.Designer.cs b/SunnyUI.Demo/Controls/FTabControl.Designer.cs new file mode 100644 index 00000000..f03d7528 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTabControl.Designer.cs @@ -0,0 +1,214 @@ +namespace Sunny.UI.Demo +{ + partial class FTabControl + { + /// + /// 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.uiTabControl1 = new Sunny.UI.UITabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.uiLine1 = new Sunny.UI.UILine(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tabPage4 = new System.Windows.Forms.TabPage(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiTabControlMenu1 = new Sunny.UI.UITabControlMenu(); + this.tabPage5 = new System.Windows.Forms.TabPage(); + this.tabPage6 = new System.Windows.Forms.TabPage(); + this.tabPage7 = new System.Windows.Forms.TabPage(); + this.tabPage8 = new System.Windows.Forms.TabPage(); + this.PagePanel.SuspendLayout(); + this.uiTabControl1.SuspendLayout(); + this.uiTabControlMenu1.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiTabControlMenu1); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiTabControl1); + this.PagePanel.Size = new System.Drawing.Size(800, 619); + // + // uiTabControl1 + // + this.uiTabControl1.Controls.Add(this.tabPage1); + this.uiTabControl1.Controls.Add(this.tabPage2); + this.uiTabControl1.Controls.Add(this.tabPage3); + this.uiTabControl1.Controls.Add(this.tabPage4); + this.uiTabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.uiTabControl1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTabControl1.ItemSize = new System.Drawing.Size(150, 40); + this.uiTabControl1.Location = new System.Drawing.Point(30, 52); + this.uiTabControl1.Name = "uiTabControl1"; + this.uiTabControl1.SelectedIndex = 0; + this.uiTabControl1.Size = new System.Drawing.Size(670, 183); + this.uiTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.uiTabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255))))); + this.tabPage1.Location = new System.Drawing.Point(0, 40); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(670, 143); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "tabPage1"; + // + // tabPage2 + // + this.tabPage2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tabPage2.Location = new System.Drawing.Point(0, 40); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(670, 143); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "tabPage2"; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "UITabControl"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tabPage3 + // + this.tabPage3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); + this.tabPage3.Location = new System.Drawing.Point(0, 40); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(670, 143); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "tabPage3"; + // + // tabPage4 + // + this.tabPage4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); + this.tabPage4.Location = new System.Drawing.Point(0, 40); + this.tabPage4.Name = "tabPage4"; + this.tabPage4.Size = new System.Drawing.Size(670, 143); + this.tabPage4.TabIndex = 3; + this.tabPage4.Text = "tabPage4"; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(30, 253); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(670, 20); + this.uiLine2.TabIndex = 20; + this.uiLine2.Text = "UITabControlMenu"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiTabControlMenu1 + // + this.uiTabControlMenu1.Alignment = System.Windows.Forms.TabAlignment.Left; + this.uiTabControlMenu1.Controls.Add(this.tabPage5); + this.uiTabControlMenu1.Controls.Add(this.tabPage6); + this.uiTabControlMenu1.Controls.Add(this.tabPage7); + this.uiTabControlMenu1.Controls.Add(this.tabPage8); + this.uiTabControlMenu1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.uiTabControlMenu1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTabControlMenu1.ItemSize = new System.Drawing.Size(40, 200); + this.uiTabControlMenu1.Location = new System.Drawing.Point(30, 288); + this.uiTabControlMenu1.Multiline = true; + this.uiTabControlMenu1.Name = "uiTabControlMenu1"; + this.uiTabControlMenu1.SelectedIndex = 0; + this.uiTabControlMenu1.Size = new System.Drawing.Size(670, 239); + this.uiTabControlMenu1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.uiTabControlMenu1.TabIndex = 21; + this.uiTabControlMenu1.TextAlignment = System.Windows.Forms.HorizontalAlignment.Center; + // + // tabPage5 + // + this.tabPage5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(192)))), ((int)(((byte)(255))))); + this.tabPage5.Location = new System.Drawing.Point(201, 0); + this.tabPage5.Name = "tabPage5"; + this.tabPage5.Size = new System.Drawing.Size(469, 239); + this.tabPage5.TabIndex = 0; + this.tabPage5.Text = "tabPage5"; + // + // tabPage6 + // + this.tabPage6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.tabPage6.Location = new System.Drawing.Point(201, 0); + this.tabPage6.Name = "tabPage6"; + this.tabPage6.Size = new System.Drawing.Size(469, 239); + this.tabPage6.TabIndex = 1; + this.tabPage6.Text = "tabPage6"; + // + // tabPage7 + // + this.tabPage7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); + this.tabPage7.Location = new System.Drawing.Point(201, 0); + this.tabPage7.Name = "tabPage7"; + this.tabPage7.Size = new System.Drawing.Size(469, 239); + this.tabPage7.TabIndex = 2; + this.tabPage7.Text = "tabPage7"; + // + // tabPage8 + // + this.tabPage8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192))))); + this.tabPage8.Location = new System.Drawing.Point(201, 0); + this.tabPage8.Name = "tabPage8"; + this.tabPage8.Size = new System.Drawing.Size(469, 239); + this.tabPage8.TabIndex = 3; + this.tabPage8.Text = "tabPage8"; + // + // FTabControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 654); + this.Name = "FTabControl"; + this.Text = "TabControl"; + this.PagePanel.ResumeLayout(false); + this.uiTabControl1.ResumeLayout(false); + this.uiTabControlMenu1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UITabControl uiTabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private UITabControlMenu uiTabControlMenu1; + private System.Windows.Forms.TabPage tabPage5; + private System.Windows.Forms.TabPage tabPage6; + private UILine uiLine2; + private UILine uiLine1; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.TabPage tabPage4; + private System.Windows.Forms.TabPage tabPage7; + private System.Windows.Forms.TabPage tabPage8; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FTabControl.cs b/SunnyUI.Demo/Controls/FTabControl.cs new file mode 100644 index 00000000..b10c1d84 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTabControl.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FTabControl : UITitlePage + { + public FTabControl() + { + InitializeComponent(); + } + } +} diff --git a/SunnyUI.Demo/Controls/FTabControl.resx b/SunnyUI.Demo/Controls/FTabControl.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTabControl.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/SunnyUI.Demo/Controls/FTextBox.Designer.cs b/SunnyUI.Demo/Controls/FTextBox.Designer.cs new file mode 100644 index 00000000..7a445f81 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTextBox.Designer.cs @@ -0,0 +1,314 @@ +namespace Sunny.UI.Demo +{ + partial class FTextBox + { + /// + /// 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.uiIntegerUpDown1 = new Sunny.UI.UIIntegerUpDown(); + this.uiTextBox1 = new Sunny.UI.UITextBox(); + this.uiLabel1 = new Sunny.UI.UILabel(); + this.uiLabel2 = new Sunny.UI.UILabel(); + this.uiTextBox2 = new Sunny.UI.UITextBox(); + this.uiLabel3 = new Sunny.UI.UILabel(); + this.uiTextBox3 = new Sunny.UI.UITextBox(); + this.uiComboBox1 = new Sunny.UI.UIComboBox(); + this.uiComboBox2 = new Sunny.UI.UIComboBox(); + this._uiDatePicker1 = new Sunny.UI.UIDatePicker(); + this.uiDoubleUpDown1 = new Sunny.UI.UIDoubleUpDown(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiLine3 = new Sunny.UI.UILine(); + this.uiLine4 = new Sunny.UI.UILine(); + this.uiLine5 = new Sunny.UI.UILine(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine5); + this.PagePanel.Controls.Add(this.uiLine4); + this.PagePanel.Controls.Add(this.uiLine3); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiDoubleUpDown1); + this.PagePanel.Controls.Add(this._uiDatePicker1); + this.PagePanel.Controls.Add(this.uiComboBox2); + this.PagePanel.Controls.Add(this.uiComboBox1); + this.PagePanel.Controls.Add(this.uiLabel3); + this.PagePanel.Controls.Add(this.uiTextBox3); + this.PagePanel.Controls.Add(this.uiLabel2); + this.PagePanel.Controls.Add(this.uiTextBox2); + this.PagePanel.Controls.Add(this.uiLabel1); + this.PagePanel.Controls.Add(this.uiTextBox1); + this.PagePanel.Controls.Add(this.uiIntegerUpDown1); + this.PagePanel.Size = new System.Drawing.Size(800, 530); + // + // uiIntegerUpDown1 + // + this.uiIntegerUpDown1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiIntegerUpDown1.Location = new System.Drawing.Point(394, 212); + this.uiIntegerUpDown1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiIntegerUpDown1.Maximum = 100; + this.uiIntegerUpDown1.Minimum = -100; + this.uiIntegerUpDown1.MinimumSize = new System.Drawing.Size(100, 0); + this.uiIntegerUpDown1.Name = "uiIntegerUpDown1"; + this.uiIntegerUpDown1.Size = new System.Drawing.Size(150, 29); + this.uiIntegerUpDown1.TabIndex = 2; + this.uiIntegerUpDown1.Text = "_uiIntegerUpDown1"; + // + // uiTextBox1 + // + this.uiTextBox1.Cursor = System.Windows.Forms.Cursors.IBeam; + this.uiTextBox1.FillColor = System.Drawing.Color.White; + this.uiTextBox1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTextBox1.Location = new System.Drawing.Point(117, 54); + this.uiTextBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiTextBox1.Name = "uiTextBox1"; + this.uiTextBox1.Padding = new System.Windows.Forms.Padding(5); + this.uiTextBox1.Size = new System.Drawing.Size(221, 29); + this.uiTextBox1.TabIndex = 3; + this.uiTextBox1.Text = "uiTextBox1"; + // + // uiLabel1 + // + this.uiLabel1.AutoSize = true; + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel1.Location = new System.Drawing.Point(38, 58); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(55, 21); + this.uiLabel1.TabIndex = 4; + this.uiLabel1.Text = "String"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel2 + // + this.uiLabel2.AutoSize = true; + this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel2.Location = new System.Drawing.Point(38, 97); + this.uiLabel2.Name = "uiLabel2"; + this.uiLabel2.Size = new System.Drawing.Size(65, 21); + this.uiLabel2.TabIndex = 6; + this.uiLabel2.Text = "Integer"; + this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiTextBox2 + // + this.uiTextBox2.Cursor = System.Windows.Forms.Cursors.IBeam; + this.uiTextBox2.FillColor = System.Drawing.Color.White; + this.uiTextBox2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTextBox2.Location = new System.Drawing.Point(117, 93); + this.uiTextBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiTextBox2.Maximum = 9D; + this.uiTextBox2.Minimum = 0D; + this.uiTextBox2.Name = "uiTextBox2"; + this.uiTextBox2.Padding = new System.Windows.Forms.Padding(5); + this.uiTextBox2.Size = new System.Drawing.Size(221, 29); + this.uiTextBox2.TabIndex = 5; + this.uiTextBox2.Text = "0"; + this.uiTextBox2.Type = Sunny.UI.UITextBox.UIEditType.Integer; + // + // uiLabel3 + // + this.uiLabel3.AutoSize = true; + this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel3.Location = new System.Drawing.Point(38, 136); + this.uiLabel3.Name = "uiLabel3"; + this.uiLabel3.Size = new System.Drawing.Size(65, 21); + this.uiLabel3.TabIndex = 8; + this.uiLabel3.Text = "Double"; + this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiTextBox3 + // + this.uiTextBox3.Cursor = System.Windows.Forms.Cursors.IBeam; + this.uiTextBox3.FillColor = System.Drawing.Color.White; + this.uiTextBox3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTextBox3.Location = new System.Drawing.Point(117, 132); + this.uiTextBox3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiTextBox3.Name = "uiTextBox3"; + this.uiTextBox3.Padding = new System.Windows.Forms.Padding(5); + this.uiTextBox3.Size = new System.Drawing.Size(221, 29); + this.uiTextBox3.TabIndex = 7; + this.uiTextBox3.Text = "0.00"; + this.uiTextBox3.Type = Sunny.UI.UITextBox.UIEditType.Double; + // + // uiComboBox1 + // + this.uiComboBox1.FillColor = System.Drawing.Color.White; + this.uiComboBox1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiComboBox1.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6"}); + this.uiComboBox1.Location = new System.Drawing.Point(30, 212); + this.uiComboBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiComboBox1.MinimumSize = new System.Drawing.Size(63, 0); + this.uiComboBox1.Name = "uiComboBox1"; + this.uiComboBox1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 0); + this.uiComboBox1.Size = new System.Drawing.Size(150, 29); + this.uiComboBox1.TabIndex = 11; + this.uiComboBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiComboBox2 + // + this.uiComboBox2.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; + this.uiComboBox2.FillColor = System.Drawing.Color.White; + this.uiComboBox2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiComboBox2.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6"}); + this.uiComboBox2.Location = new System.Drawing.Point(188, 212); + this.uiComboBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiComboBox2.MinimumSize = new System.Drawing.Size(63, 0); + this.uiComboBox2.Name = "uiComboBox2"; + this.uiComboBox2.Padding = new System.Windows.Forms.Padding(0, 0, 30, 0); + this.uiComboBox2.Size = new System.Drawing.Size(150, 29); + this.uiComboBox2.TabIndex = 12; + this.uiComboBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // _uiDatePicker1 + // + this._uiDatePicker1.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; + this._uiDatePicker1.FillColor = System.Drawing.Color.White; + this._uiDatePicker1.Font = new System.Drawing.Font("微软雅黑", 12F); + this._uiDatePicker1.Location = new System.Drawing.Point(30, 294); + this._uiDatePicker1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this._uiDatePicker1.MinimumSize = new System.Drawing.Size(63, 0); + this._uiDatePicker1.Name = "_uiDatePicker1"; + this._uiDatePicker1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 0); + this._uiDatePicker1.Size = new System.Drawing.Size(150, 29); + this._uiDatePicker1.TabIndex = 13; + this._uiDatePicker1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this._uiDatePicker1.Value = new System.DateTime(2020, 4, 16, 0, 0, 0, 0); + // + // uiDoubleUpDown1 + // + this.uiDoubleUpDown1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiDoubleUpDown1.Location = new System.Drawing.Point(394, 294); + this.uiDoubleUpDown1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiDoubleUpDown1.MinimumSize = new System.Drawing.Size(100, 0); + this.uiDoubleUpDown1.Name = "uiDoubleUpDown1"; + this.uiDoubleUpDown1.Size = new System.Drawing.Size(150, 29); + this.uiDoubleUpDown1.TabIndex = 14; + this.uiDoubleUpDown1.Text = "uiDoubleUpDown1"; + this.uiDoubleUpDown1.Value = 0D; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 20; + this.uiLine1.Text = "UITextBox"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(30, 178); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(308, 20); + this.uiLine2.TabIndex = 21; + this.uiLine2.Text = "UICombobox"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine3 + // + this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine3.Location = new System.Drawing.Point(30, 260); + this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine3.Name = "uiLine3"; + this.uiLine3.Size = new System.Drawing.Size(306, 20); + this.uiLine3.TabIndex = 22; + this.uiLine3.Text = "UIDatePicker"; + this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine4 + // + this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine4.Location = new System.Drawing.Point(394, 178); + this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine4.Name = "uiLine4"; + this.uiLine4.Size = new System.Drawing.Size(306, 20); + this.uiLine4.TabIndex = 23; + this.uiLine4.Text = "UIIntegerUpDown"; + this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine5 + // + this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine5.Location = new System.Drawing.Point(394, 260); + this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine5.Name = "uiLine5"; + this.uiLine5.Size = new System.Drawing.Size(306, 20); + this.uiLine5.TabIndex = 24; + this.uiLine5.Text = "UIDoubleUpDown"; + this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FTextBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 565); + this.Name = "FTextBox"; + this.PageIndex = 1003; + this.Text = "TextBox"; + this.PagePanel.ResumeLayout(false); + this.PagePanel.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private UILabel uiLabel3; + private UITextBox uiTextBox3; + private UILabel uiLabel2; + private UITextBox uiTextBox2; + private UILabel uiLabel1; + private UITextBox uiTextBox1; + private UIIntegerUpDown uiIntegerUpDown1; + private UIDatePicker _uiDatePicker1; + private UIComboBox uiComboBox2; + private UIComboBox uiComboBox1; + private UIDoubleUpDown uiDoubleUpDown1; + private UILine uiLine4; + private UILine uiLine3; + private UILine uiLine2; + private UILine uiLine1; + private UILine uiLine5; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FTextBox.cs b/SunnyUI.Demo/Controls/FTextBox.cs new file mode 100644 index 00000000..1239a840 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTextBox.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace Sunny.UI.Demo +{ + public partial class FTextBox : UITitlePage + { + public FTextBox() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FTextBox.resx b/SunnyUI.Demo/Controls/FTextBox.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTextBox.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/SunnyUI.Demo/Controls/FTransfer.Designer.cs b/SunnyUI.Demo/Controls/FTransfer.Designer.cs new file mode 100644 index 00000000..f1811855 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTransfer.Designer.cs @@ -0,0 +1,100 @@ +namespace Sunny.UI.Demo +{ + partial class FTransfer + { + /// + /// 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.uiTransfer1 = new Sunny.UI.UITransfer(); + this.uiLine1 = new Sunny.UI.UILine(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiTransfer1); + // + // uiTransfer1 + // + this.uiTransfer1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTransfer1.ItemsLeft.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8"}); + this.uiTransfer1.ItemsRight.AddRange(new object[] { + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16"}); + this.uiTransfer1.Location = new System.Drawing.Point(30, 55); + this.uiTransfer1.Margin = new System.Windows.Forms.Padding(7, 9, 7, 9); + this.uiTransfer1.Name = "uiTransfer1"; + this.uiTransfer1.Padding = new System.Windows.Forms.Padding(1); + this.uiTransfer1.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.uiTransfer1.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None; + this.uiTransfer1.Size = new System.Drawing.Size(427, 370); + this.uiTransfer1.TabIndex = 3; + this.uiTransfer1.Text = "uiTransfer1"; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "UITransfer"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FTransfer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FTransfer"; + this.Text = "Transfer"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UITransfer uiTransfer1; + private UILine uiLine1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FTransfer.cs b/SunnyUI.Demo/Controls/FTransfer.cs new file mode 100644 index 00000000..5bf5e86a --- /dev/null +++ b/SunnyUI.Demo/Controls/FTransfer.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FTransfer : UITitlePage + { + public FTransfer() + { + InitializeComponent(); + } + } +} diff --git a/SunnyUI.Demo/Controls/FTransfer.resx b/SunnyUI.Demo/Controls/FTransfer.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTransfer.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/SunnyUI.Demo/Controls/FTreeView.Designer.cs b/SunnyUI.Demo/Controls/FTreeView.Designer.cs new file mode 100644 index 00000000..5d68a22d --- /dev/null +++ b/SunnyUI.Demo/Controls/FTreeView.Designer.cs @@ -0,0 +1,162 @@ +namespace Sunny.UI.Demo +{ + partial class FTreeView + { + /// + /// 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.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("节点8"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("节点9"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("节点10"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("节点11"); + System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("节点12"); + System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("节点13"); + System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3, + treeNode4, + treeNode5, + treeNode6}); + System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("节点14"); + System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("节点15"); + System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("节点16"); + System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] { + treeNode8, + treeNode9, + treeNode10}); + System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("节点2"); + System.Windows.Forms.TreeNode treeNode13 = new System.Windows.Forms.TreeNode("节点3"); + System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("节点4"); + System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("节点5"); + System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("节点6"); + System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("节点17"); + System.Windows.Forms.TreeNode treeNode18 = new System.Windows.Forms.TreeNode("节点18"); + System.Windows.Forms.TreeNode treeNode19 = new System.Windows.Forms.TreeNode("节点19"); + System.Windows.Forms.TreeNode treeNode20 = new System.Windows.Forms.TreeNode("节点7", new System.Windows.Forms.TreeNode[] { + treeNode17, + treeNode18, + treeNode19}); + this.uiTreeView1 = new Sunny.UI.UITreeView(); + this.uiLine1 = new Sunny.UI.UILine(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.uiTreeView1); + // + // uiTreeView1 + // + this.uiTreeView1.BackColor = System.Drawing.Color.White; + this.uiTreeView1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.uiTreeView1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawAll; + this.uiTreeView1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiTreeView1.ItemHeight = 28; + this.uiTreeView1.Location = new System.Drawing.Point(33, 54); + this.uiTreeView1.Name = "uiTreeView1"; + treeNode1.Name = "节点8"; + treeNode1.Text = "节点8"; + treeNode2.Name = "节点9"; + treeNode2.Text = "节点9"; + treeNode3.Name = "节点10"; + treeNode3.Text = "节点10"; + treeNode4.Name = "节点11"; + treeNode4.Text = "节点11"; + treeNode5.Name = "节点12"; + treeNode5.Text = "节点12"; + treeNode6.Name = "节点13"; + treeNode6.Text = "节点13"; + treeNode7.Name = "节点0"; + treeNode7.Text = "节点0"; + treeNode8.Name = "节点14"; + treeNode8.Text = "节点14"; + treeNode9.Name = "节点15"; + treeNode9.Text = "节点15"; + treeNode10.Name = "节点16"; + treeNode10.Text = "节点16"; + treeNode11.Name = "节点1"; + treeNode11.Text = "节点1"; + treeNode12.Name = "节点2"; + treeNode12.Text = "节点2"; + treeNode13.Name = "节点3"; + treeNode13.Text = "节点3"; + treeNode14.Name = "节点4"; + treeNode14.Text = "节点4"; + treeNode15.Name = "节点5"; + treeNode15.Text = "节点5"; + treeNode16.Name = "节点6"; + treeNode16.Text = "节点6"; + treeNode17.Name = "节点17"; + treeNode17.Text = "节点17"; + treeNode18.Name = "节点18"; + treeNode18.Text = "节点18"; + treeNode19.Name = "节点19"; + treeNode19.Text = "节点19"; + treeNode20.Name = "节点7"; + treeNode20.Text = "节点7"; + this.uiTreeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode7, + treeNode11, + treeNode12, + treeNode13, + treeNode14, + treeNode15, + treeNode16, + treeNode20}); + this.uiTreeView1.Size = new System.Drawing.Size(266, 313); + this.uiTreeView1.TabIndex = 0; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(33, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 16); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "UITreeView"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FTreeView + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FTreeView"; + this.Text = "TreeView"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UITreeView uiTreeView1; + private UILine uiLine1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Controls/FTreeView.cs b/SunnyUI.Demo/Controls/FTreeView.cs new file mode 100644 index 00000000..34496724 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTreeView.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FTreeView : UITitlePage + { + public FTreeView() + { + InitializeComponent(); + } + } +} diff --git a/SunnyUI.Demo/Controls/FTreeView.resx b/SunnyUI.Demo/Controls/FTreeView.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Controls/FTreeView.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/SunnyUI.Demo/FMain.Designer.cs b/SunnyUI.Demo/FMain.Designer.cs new file mode 100644 index 00000000..63e7ed49 --- /dev/null +++ b/SunnyUI.Demo/FMain.Designer.cs @@ -0,0 +1,111 @@ +namespace Sunny.UI.Demo +{ + partial class FMain + { + /// + /// 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.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("控件"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("窗体"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("主题"); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FMain)); + this.uiLogo1 = new Sunny.UI.UILogo(); + this.uiAvatar = new Sunny.UI.UIAvatar(); + this.StyleManager = new Sunny.UI.UIStyleManager(this.components); + this.Header.SuspendLayout(); + this.SuspendLayout(); + // + // Aside + // + this.Aside.ItemHeight = 36; + this.Aside.LineColor = System.Drawing.Color.Black; + this.Aside.Size = new System.Drawing.Size(250, 575); + // + // Header + // + this.Header.Controls.Add(this.uiAvatar); + this.Header.Controls.Add(this.uiLogo1); + treeNode1.Name = "节点0"; + treeNode1.Text = "控件"; + treeNode2.Name = "节点1"; + treeNode2.Text = "窗体"; + treeNode3.Name = "节点2"; + treeNode3.Text = "主题"; + this.Header.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3}); + this.Header.SelectedIndex = 0; + this.Header.Size = new System.Drawing.Size(1024, 110); + this.Header.MenuItemClick += new Sunny.UI.UINavBar.OnMenuItemClick(this.Header_MenuItemClick); + // + // Main + // + this.Main.Size = new System.Drawing.Size(774, 575); + // + // uiLogo1 + // + this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLogo1.Location = new System.Drawing.Point(20, 15); + this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.Name = "uiLogo1"; + this.uiLogo1.Size = new System.Drawing.Size(300, 80); + this.uiLogo1.Style = Sunny.UI.UIStyle.Custom; + this.uiLogo1.TabIndex = 3; + this.uiLogo1.Text = "uiLogo1"; + // + // uiAvatar + // + this.uiAvatar.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.uiAvatar.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiAvatar.Location = new System.Drawing.Point(943, 25); + this.uiAvatar.Name = "uiAvatar"; + this.uiAvatar.Size = new System.Drawing.Size(65, 61); + this.uiAvatar.TabIndex = 4; + this.uiAvatar.Text = "uiAvatar1"; + // + // FMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1024, 720); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FMain"; + this.Text = "SunnyUI.Net"; + this.Header.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UILogo uiLogo1; + private UIAvatar uiAvatar; + private UIStyleManager StyleManager; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/FMain.cs b/SunnyUI.Demo/FMain.cs new file mode 100644 index 00000000..fa7cb1d9 --- /dev/null +++ b/SunnyUI.Demo/FMain.cs @@ -0,0 +1,64 @@ +using Sunny.UI.Demo.Forms; +using System.Windows.Forms; + +namespace Sunny.UI.Demo +{ + public partial class FMain : UIHeaderAsideMainFrame + { + public FMain() + { + InitializeComponent(); + + int pageIndex = 1000; + Header.SetNodePageIndex(Header.Nodes[0], pageIndex); + TreeNode parent = Aside.CreateNode("Controls", pageIndex); + Aside.CreateChildNode(parent, AddPage(new FButton(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FLabel(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FCheckBox(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FRadioButton(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FTextBox(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FDataGridView(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FListBox(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FTreeView(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FNavigation(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FTabControl(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FLine(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FPanel(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FAvatar(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FContextMenuStrip(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FMeter(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FOther(), ++pageIndex)); + + pageIndex = 2000; + Header.SetNodePageIndex(Header.Nodes[1], pageIndex); + parent = Aside.CreateNode("Forms", pageIndex); + Aside.CreateChildNode(parent, AddPage(new FDialogs(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FEditor(), ++pageIndex)); + Aside.CreateChildNode(parent, AddPage(new FFrames(), ++pageIndex)); + + var styles = UIStyles.PopularStyles(); + foreach (UIStyle style in styles) + { + Header.CreateChildNode(Header.Nodes[2], style.DisplayText(), style.Value()); + } + + Aside.SelectFirst(); + } + + private void Header_MenuItemClick(string text, int menuIndex, int pageIndex) + { + switch (menuIndex) + { + case 0: + case 1: + Aside.SelectPage(pageIndex); + break; + + case 2: + UIStyle style = (UIStyle)pageIndex; + StyleManager.Style = style; + break; + } + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/FMain.resx b/SunnyUI.Demo/FMain.resx new file mode 100644 index 00000000..e046224e --- /dev/null +++ b/SunnyUI.Demo/FMain.resx @@ -0,0 +1,786 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAcAMDAAAAEACACoDgAAdgAAACAgAAABAAgAqAgAAB4PAAAQEAAAAQAIAGgFAADGFwAAQEAAAAEA + IAAoQgAALh0AADAwAAABACAAqCUAAFZfAAAgIAAAAQAgAKgQAAD+hAAAEBAAAAEAIABoBAAAppUAACgA + AAAwAAAAYAAAAAEACAAAAAAAAAkAAAAAAAAAAAAAAAEAAAABAAAAAAAAOsFnAEPDbQBLxnUAVMh6AGDI + egD+nT4A/p5BAP2gRQD8o0sA/KZTAPqpVQD4p1gA9qtbAPurXAD2rGAA+axiAPOuawDstW0A8rFlAPqx + ZwD3sWsA+7JrAOi6dgDvsngA87VyAPm1cwD2t3oA9Lp8APm7ewA8bPQAQG/0AERy9ABJdfQATXn1AFJ8 + 9QBby4MAZMyIAHPNiQB10I8AYs+QAGjRlgB505cAXNG5AHXUogBk070APKHlAHuT3ABVgPUAW4P0AF+J + 9QBlivUAao71AGyR9QBylPUAdZr1AHub9gBCpOUASafmAEyp5gBRqucAVK3oAFmu6ABcsekAYq/qAGOz + 6gBptOoAYbruAGy77ABxtewAfrfvAHO77AB7vO0AeqL0AATD/QAWx/0AJ8v7ADXO9wAzzPsAOs78ADzQ + /QBEztYATdDYAHrYxgBm1t0Ad9zfAEPO+wBMz/sAWM/5AEnS/ABS1PYAXtj3AFTU/ABa1fwAX9j8AGnA + 7wB0wO4AfcLuAGvJ9AB0xfEAe8bwAHPN9QB8zfQAY9j0AGXT+gBr0vkAY9j5AGva/QB63PYAftb5AHLb + +wB93PsAmJKPAJqUkQCdmJUAn5qZAKGalgChnJwApqGdAKujnACzppwAop+hAKaioACqpaIArqmlAKel + qACopqsAqqisALKpowC8raAAsayqAL6xpQC1sK0AvbOsAK6tswCzsbMAvbi2ALKyuQC4trkAvLm5ANu3 + lwDTt5wA2riZAOu3hQDtu4IA6rqMAPC3gQD1vYIA+b6DAPa+iwDku5QA472aAPC/kQDEsqIAyrakAM+4 + owDLuakAyLyzAMC8ugCDzo0AiNKXAJTQkwCW0psAndGZALDPmACj0ZcApNCYALLRmgCJ2agAltaiAJPb + qgCM3LYAm92xAKnWpADXyZEA2c6aAMDRnQDP0J4A0dGfAN3QnwDgwYMA7MGFAPbAhQD0w4kA+sGLAOHI + kADrypYA7saZAOXNnADtyJoA9caQAPrFkwDwy5cA88WYAPHKnAD8y5wA2cKtAMnWqQDT1KcAx8G+AMzD + uwDWwbAA6sWjAO3JpgDixKkA5MiuAO/NrADxzawA6NGjAODMugCDmd4AmKPJAJ2ozAC8vMQApq/RALa/ + 2wCPo+AAgL7uAIOi9gCNp/QAhKv0AI2p9ACGo/gAiqb4AI2o+ACSrPQAg7XxAIy09ACEufAAlbX2AJ2z + 9QCVvPQAnLv2AJmx+QCnt+YAobfyAKC5+ACH3c8AgsHuAIrG7wCPxfAAhszzAIrK8ACUxPEAm8P0AJLK + 8ACayPIAidT2AITW+ACA3/oAmNDyAMrGwwDMyMYAw8PJAMrJywD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADm4dvd4eHq1wD91YrV/f4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA4Dg0MjAxMTTS1IqGfnV7fIee/gAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAOneNjIxIiIiMDEv1Ip/e3Jze3uEivwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADp2jYzMSMh + IR8iMDEv04Z/eXFzcnV7goSK/AAAAAAAAAAAAAAAAAAAAAAAAAAAAOA2MCIgHx8fHh8fIzEv04l/eXFx + cXJwcnJ3gor8AAAAAAAAAAAAAAAAAAAAAAAA4DYxIh4eHh4eHh4hITEv1IZ/eXBxcHBwcHJye4KeAAAA + AAAAAAAAAAAAAAAAAADgNTEiHx4eHh4eHh4hIzEv04l/eXBwcHBwcHByc3qCngAAAAAAAAAAAAAAAAAA + AOA1MCAfHx4eHh4eHh4gIjAv04Z/eXBwcHFwcHBwcnJ1goj8AAAAAAAAAAAAAAAA7No0IiAfHh4eHh4e + Hh4hIjEv04l/eXBwcHBxcHBwcHB0e4THAAAAAAAAAAAAAAAAAOE3MSEhHx4eHh4eHh4hIzEv1IZ/eXBw + cHBwcHBxcnJygoTHAAAAAAAAAAAAAAAAAOxJNTEhHx4eHh4eHh4hIzEv04l/eXBwcHBwcXBwcHJ0goXI + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2LCAdLwBdW19lAAAAAAAAAAAAAAAAAAAAAAAAAAB0 + IBwaGhotAFxWVllcYwAAAAAAAAAAAAAAAAAAAAB3HBoaGhoaGi0AXFZWVlZWWWUAAAAAAAAAAAAAAAAA + ciAaGhkZGRoaLQBcVlZWVlZWW2EAAAAAAAAAAAAAAHEaGhoZGRkZGRotAFxWVlZWVlZWWWAAAAAAAAAA + AAB3IBoaGRkZGRkaGi0AXFZWVlZWVlZWW2MAAAAAAAAAAAB0HRsZGRkZGRkaLQBcVlZWVlZWVllcYQAA + AAAAAAAAAAAAKxoaGRkZGhwvAFxWVlZWVlZZXYEAAAAAAAAAADk1PgAAdyscGh0vAAAAgGBcWVZZX34A + ABcSAAAAAAB5MikyPHsAAHMqdwAAAAAAAIFZW2MAAG8RDQ0YAAAAADopKSkpKTp9AAAAAAAAAAAAAAAA + AG4PCwoKChIAAAAANikpKSkpKTUAAAAAAAAAAAAAAAAUDwoKCgoKDwAAAAApKSkoKCkpMgAAAAAAAAAA + AAAAAA8KCgoKCgoKAAAAACkpKSgoKSk5AAAAAAAAAAAAAAAAEgoKCgoKCgoAAAAAKSkoKCgoKTkAAAAA + AAAAAAAAAAASCgoKCgoKCgAAAAApKSgoKCgpNQAAAAAAAAAAAAAAABAKCgoKCgoKAAAAADIpKSgoKDI9 + AAAAAAAAAAAAAAAAABcPCgoKCgsAAAAAOSkpKSk1egAAAAAAAAAAAAAAAAAAAGwQCgoLEAAAAABAMik5 + egAAVUdKAAAAAAAAAAAJAyNrAABuEg8UAAAAAAA5PgAAAEtGQUFOAAAAAAAAJgIBAgdoAAAAF3AAAAAA + AAAAAE5FQUFBQUFBSVMAIgICAQEBAQIHZgAAAAAAAAAAAFJJQUFBQUFBQUFBTwAHAgEBAQEBAQEDJgAA + AAAAAAAAUUZBQUFBQUFBQUFPAAgBAQEBAQEBAQMnAAAAAAAAAAAAT0FBQUFBQUFBQU4ABwEBAQEBAQEB + IwAAAAAAAAAAAAAAT0VBQUFBQUFFTgAIAQEBAQEBAyIAAAAAAAAAAAAAAAAAT0VBQUFBQUFOAAcBAQEB + AQEmAAAAAAAAAAAAAAAAAAAAAExFQUFBQU4ACAEBAQMmaQAAAAAAAAAAAAAAAAAAAAAAAFNMRkVFTgAH + AwYiZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////////////4If//4CB//4AgH/8AIA/+ACAH/AAgA/4AIAP/gCAH+MD + gGfAx+GDwD/+A8A//APAP/wDwD/8A8A//APAP/wDwD/+A8B//wPBj/DD5wfgc/wAgB/wAIAP8ACAD/gA + gB/8AIA//gCAf/+AgP//wIP///2///////8oAAAAEAAAACAAAAABAAgAAAAAAAABAAAAAAAAAAAAAAAB + AAAAAQAAAAAAADnBZgA8wWcAPcJpAEPDbQBXyn0A/p0+AP6fQgD+oEQA/qJIAP6qWQD9tnIAO2v1ADxr + 9QA9bPUATXj1AFV/9gBhzIQAO6HlADyh5QBXgPUAWYL2AHqe9gBEpeYASKfmAFCq5wBesekAAcP+AATD + /gAIxP4AEcb+ABXH/gAjy/4AJcv+AC3N/gA2z/4AeMPvAH3D7wBr1/sAY9j9AGnY/ACYko8AmZOQAJyW + kwCdl5QAnpiVALi3ugDzvYgA9r6JAMO6sQDEvbcAwr26AIPVmgCK1ZoAltWdAPLBkwDMwbcAhaL2AJGt + 8wCTr/cAk634AMK+wACDwO4AhMnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAADkPFQAtLgAAAAAAAAAAPA4ODhAAKSkqMwAAAAAA + Ow4ODg4QACkpKSoyAAAAAAAWDg4OFAApKSkqOAAAAD4ZAAAUOgAAPSoyAC8vAAAYExMaAAAAAAAANwcG + CQAAExMTFwAAAAAAAAkGBgYAABMTExcAAAAAAAAJBgYGAAAXExM/AAAAAAAAAAoGCAAAJSUAJh4AAAAA + BBEAAAsAAAAAHhwcHCMAAgICAzYAAAAAKBwcHBwgAAIBAQI1AAAAAAAnHBwcIAABAQE0AAAAAAAAAAAi + HCAAAwUAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA+J8AAOCHAADAgwAA4IMAAJmJAACH4QAAh+EAAIfh + AACH8QAAk80AAOCDAADAgwAA4IcAAPifAAD//wAAKAAAAEAAAACAAAAAAQAgAAAAAAAAQgAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAD1s9QRAbvINRXDtFEly6RZOdOQWUXXgE1B03gp8jccPjJjAMI+Y + ukGPlbArjpGmGJSVoxaenaUTqKWmC6yopgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAERw9QJEcPUMQG/1GD5t9R88bPYuPGz2Vzxs9nQ8bPZ5PGz2ejxs + 9m4wZfw9lJ7EMLizsJKzrqzPqKOhp5yWlH2hm5l4ramncbWxsE61sa8kpKCdFqunpQuppaICAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKdPUBVHn1Ckp09RlIcvUoRHD2TEBv9ng8bPaHPGz2ljxs + 9r88bPbcPGz24Txs9uE8bPbPOGr5dnmJvjmim5aSnpiW5puWk+yZk5HinZeV4KOenNqkn5y3oJuYjaah + n3Ouq6hIsKyqJ7Csqhi8ubcJqKOhAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbfvUJU3n1HVV69URMdfZ3QnD2lj9u + 9rY+bfbbPGz26Dxs9u08bPb2PGz2/Txs9v88bPb/PGz26jhr+IZvgb08m5ONkpmTkO2Zk5D/mZOQ/5qU + kf+blZL8m5WS9JuWk+qfmZbXoZyZsqeioJSzr61zv7y7Prq2tBrEwb8HAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG6J9QZfgPUbWX31P053 + 9XxHc/WzQXD22T1t9u48bPb2PGz2/Dxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9uo4a/iGb4G8PJuT + jJKZk5DtmZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D+mpSR+5uVkvWfmZbtpKCd1qyoprCzsK1wtrKvKJ+a + mAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADdp + 9QVMdfYhVHr2ckt19rlCcPbdPm729Dxs9vw8bPb+PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPbqOGv4hm+BvDybk4ySmZOQ7ZmTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/puV + kvyfmpf0o56c1KWgnoeqpaM0ura0F7m2tAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAASnT1AkFv9Qo7a/YpP2/2f0Jv9t4/bvb5PW32/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz26jhr+IZvgbw8m5OMkpmTkO2Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mUkfiblpPkpaCevqunpW2ppaIko56cBgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAW331CGaD9iJTefZNQm/2jjxs9tU8bPb5PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9uo4a/iGb4G8PJuTjJKZk5DtmZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mpSR/52XlPahm5jOopyadZ+a + mCaempgHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUXf1B1Z69ihTefVxSnT2vkBu9uQ8bPb2PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPbqOGv4hm+B + vDybk4ySmZOQ7ZmTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D+mpSR9JyWlMuclpR1m5WTKJuWlAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX3/1B1t89ihQdvV1SHL1yUBv + 9fM9bPb+PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz26jhr+IZvgbw8m5OMkpmTkO2Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP6ZlJHzmZSSyZmUkXWZk5EonZiVBwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaof1Bm6I + 9iZZffZ1SnT1yT9u9fM8bPb9PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9uo4a/iGb4G8PJuTjJKZk5DtmZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/ZmTkPOZk5HJm5WTdZ2Y + liainJkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAGeE9hNef/ZnT3f2xkJw9vQ9bPb9PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPbqOGv4hm+BvDybk4ySmZOQ7ZmT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D9mZOQ85uVk8uemZZ1o5+bI6ukngQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEeB8QRNdfY0SHT2oEJw9u89bfb+PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz26jhr + +IZvgbw8m5OMkpmTkO2Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP6alJH0npiXzqeioHW4tLMcyL23BAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbgfQLSHP1bEBu9tE9bPb5PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9uo4a/iGb4G8PJuTjJKZk5DtmZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/puWk/akn53JsayrVrmu + pwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWH/1DVN5 + 9l1Jc/axQG/23T1t9vQ8bPb8PGz2/jxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPbqOGv4hm+BvDybk4ySmZOQ7ZmTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP6dl5T8o56b4q+qqHDBtq0TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AABEk+sBQ5LrBmSR8RBWhvIiUHz0QUlz9nxAbva0PGz22zxs9vM8bPb7PGz2/jxs9v88bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz26jhr+IZvgbw8m5OMkpmT + kO2Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/pqUkfqcl5TuoZya0qmlo5+4r6hJxq2aENegcAPXoG8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABEmOkBPp7nDTyi5jQ8ouZWPKHmPUqS7SFMgvIkQnP0RTtr9nw8bPazPm324j1t + 9vo8bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9uo4a/iGb4G8PJuTjJKZk5DtmZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D+mZSR+ZuVku2emJXPo56corGmnm7Eq5M84a6BM/esbjf/pl0g7qRkBwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP53nBTyi5jA8ouaJPKLmxjyi5qZBo+ZtRqDoPUeP + 7CNFf/AkQ3P0TEhz9plGcvbYP2728Txs9vs8bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb9PGz29Txs9uk8bPbQOGr5dnqJvzihmpSSnJeU7ZqUkf+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+alJH+nJeU956YltifmpiiqJ6Ybb+jjUHZpXUz9KJTTP+f + Q33/oUyQ/6NSVPCiXBPgoGQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZroAT6e5xQ8ouZhPKLmyzyi + 5vU8oubvPaLn1EOk56VLpuZtS6DoMk+O7xtcgfQ7U3n2c0Zy9q5AbvbcPW328Txs9vw8bPb/PGz2/zxs + 9v88bPb/PGz2/zxs9v49bfb1PWz24zxs9r08bPaPPGz2bzRn+j2Kl8MpsKunfaijoMufmZbcmpSR5pqU + kfWZk5D9mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+blZL6n5mX66ahnsurpKCIu6KOR9ei + dDPwolxN/Z9He/+eQa//nkDf/59F2v+iTpD5o1gx66FdBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+d + 5wU8oOY0PKLmmTyi5ug8oub+PKLm/jyi5vo+oubvQqTn0EGk5otDoOhCSJrqIU+K8CFPdPdDRnH2dkFu + 9q89bPbcPGz28Txs9vw8bPb/PGz2/zxs9vY9bfbkQ3D1wENw9Yg9bPZSO2v2Kk105RVTdt4Ku77MEsK/ + vj20sK5jpZ+db52YlYqdl5TAm5WS5JmTkPaZk5D/mZOQ/5mTkP+Zk5D/mZOQ/5qUkfuclpPtoZyZ1Kmk + opmzrapgza+UPOymZkP8ok96/6BHsP+fQtr/nkHy/54//P+eQvb/oEe6/6JOTPOhVgkAAAAAAAAAAAAA + AAAAAAAAAAAAAECf5wFIoucUSabmYD+j5sk8oub4PKLm/jyi5v88oub/PKLm/jyi5vY8oubbO6LmsDui + 5XZCn+g7SJnqHUuC8SJEb/ZBPm32dTxs9rI8bPbdPGz29D1t9vk9bfbWQW/1j0x09U5Ze/UnVXrtDVB2 + 5QMAAAAAAAAAAIOTyAKIlL8Ii5O1DZqbqhKoo6Enop2aTp6YlY6blZLWmpSR+ZmTkP+Zk5D/mZSR+5qV + ku2dmJXUo56aoaikpGHEq5Q76KdqMPeiT03+oUiX/6BF1/+eQvP/nj/7/54//v+eP///nj/7/55Czv+f + RmT2oE8W8KBTAQAAAAAAAAAAAAAAAAAAAABIpOcEWaroMk6n55lBpObnPKLm/Tyi5v88oub/PKLm/zyi + 5v88oub+PKLm/Dyi5vM8oubaPqLntEWk521RpOg0WZ3rHEh78h86avY9PW32fUFv9sVHcvbTSXL2gD9t + 9So+bvMKTHnsAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlJSjApuWlwqemJYqoJuYf52Y + ld6blZL5nZeU/KCal+qinZqzop6cY7ejkzjhpGgt+Z9HQv6eQYL/nj68/54/4v+eP/j/nj/+/54///+e + P///nj///54//f+eQef/nkWZ/qBIMvigTQQAAAAAAAAAAAAAAAAAAAAARKPmCE2n50ZDpOe3PqPn9jyi + 5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5vc/o+ffR6Xntkim52VCmOkhP4ntCkR7 + 8hxSePVXWXv2Zll89SNUe/QFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAqaKfBaWfnSCnoZ9/paCdxaein8SwqqaVvKucTd+kcjL7oU5G/59Bgv+eP8f/nj/n/54/+f+e + P///nj///54///+eP///nj///54///+eP///nkD2/55Bt/+eQ0b7n0cIAAAAAAAAAAAAAAAAAAAAADyi + 5gg8ouZGPKLmtzyi5vY8oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PaLm/j+j + 5vI/o+bIPKLmfzui5UNMm+ogaJDxFGSI8xJfhfMHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACqnpcFs6+tKLayr1y/sKRb17GQSPGucln9pFSD/6BHvf+e + QeP/nj/4/54///+eP///nj///54///+eP///nj///54///+eP///nj///54/9/+eP7z/nkBN/Z5DCgAA + AAAAAAAAAAAAAAAAAAA8ouYLPKLmUTyi5r48oub3PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi + 5v88oub/PKLm/zyi5v88oub9PKLm8zyi5t1Ao+aoSaXnUFei6RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMi5rAjNuaUR661zKPul + Vmb/ok21/6BG4v+eQfX/nkD+/54///+eP///nj///54///+eP///nj///54///+eP///nj///54///+e + P/r/nkLZ/55Fef6eQxYAAAAAAAAAAAAAAAAAAAAAPKLmGDyi5n88oubdPKLm+jyi5v88oub/PKLm/zyi + 5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub3P6Lmx0il52NEkusRAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA151lBP+dPjL/n0Oe/59D6/+eQP3/nj///54///+eP///nj///54///+eP///nj///54///+e + P///nj///54///+eP///nj/9/55B9v+eQ6v/nkEmAAAAAAAAAAAAAAAAAAAAADyi5iY8ouatPKLm+Dyi + 5v08oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PaLm9UCj + 5rVJpudGRJbqCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN6eYQT/nj8y/54/nv+eP+v/nj/9/54///+eP///nj///54///+e + P///nj///54///+eP///nj///54///+eP///nj///54///+eP///nj+4/54/KgAAAAAAAAAAAAAAAAAA + AAA8ouYqPKLmtzyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi + 5v88oub/PKLm/UGj5ulJpuecU6jnMUab6QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADin2AB855MHP+eP3D/nj/S/54/+/+e + P///nj///54///+eP///nj///54///+eP///nj///54///+eP///nj///54///+eP///nj///54/uP+e + PyoAAAAAAAAAAAAAAAAAAAAAPKLmKjyi5rc8oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi + 5v88oub/PKLm/zyi5v88oub/PKLm/zyi5vpAo+bPTKfna0qi5xpCnegBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPGf + UAv/nj9M/54/u/+eP/f/nj///54///+eP///nj///54///+eP///nj///54///+eP///nj///54///+e + P///nj///54///+eP7j/nj8qAAAAAAAAAAAAAAAAAAAAADyi5io8oua3PKLm/zyi5v88oub/PKLm/zyi + 5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub2PKLmuj2i5ko/oOYKAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD3oEsI/54/Rv+eP7f/nj/2/54///+eP///nj///54///+eP///nj///54///+e + P///nj///54///+eP///nj///54///+eP///nj+4/54/KgAAAAAAAAAAAAAAAAAAAAA8ouYqPKLmtzyi + 5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm9jyi + 5rg8ouZHPKLmCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9KBICP+eP0b/nj+3/54/9v+eP///nj///54///+e + P///nj///54///+eP///nj///54///+eP///nj///54///+eP///nj///54/uP+ePyoAAAAAAAAAAAAA + AAAAAAAAPKLmKjyi5rc8oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi + 5v88oub/PKLm/zyi5vc8oua7PqLmTDuk5wsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOyjSQv/n0NM/55Au/+e + P/f/nj///54///+eP///nj///54///+eP///nj///54///+eP///nj///54///+eP///nj///54///+e + P7j/nj8qAAAAAAAAAAAAAAAAAAAAADyi5io8oua3PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi + 5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub7PqLm0kak53BBpugcNajqAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGo + UAHtqFoc/6RVcP+gRtL/nkD7/54+//+eP///nj///54///+eP///nj///54///+eP///nj///54///+e + P///nj///54///+eP///nj+4/54/KgAAAAAAAAAAAAAAAAAAAAA8ouYqPaLmtzyi5v88oub/PKLm/zyi + 5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/T6i5utDpOefSabnMzSr + 6wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADHrFkD/6tuKv+lWYz/oUra/55B9v+eP/7/nj///54///+eP///nj///54///+e + P///nj///54///+eP///nj///54///+eP///nj///54/uP+ePyoAAAAAAAAAAAAAAAAAAAAAP6LmJUOk + 56s+oub2PKLm/Tyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/Tyi + 5vU8oubePaLmlUCj5jEtrO0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt65aAv+oZRv/o1VT/6BKkf+fRMj/nkHo/54/+P+e + P///nj///54///+eP///nj///54///+eP///nj///54///+eP///nj///55A//+fQbj/nkAqAAAAAAAA + AAAAAAAAAAAAAECj5hZFped5PqLm2Tyi5vo8oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub/PKLm/zyi + 5v88oub/PKLm/j6i5vQ+o+bNPKLmijui5ko8ouYYJ67uAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5rVoF2qdTEv+h + TS//n0Zc/55Bk/+eP8v/nj/r/54/+f+eP///nj///54///+eP///nj///54///+eP///nj///54//P+e + QvT/oEip/p5DJQAAAAAAAAAAAAAAAAAAAAA8ouYKPqLmTTyi5rw8oub2PKLm/zyi5v88oub/PKLm/zyi + 5v88oub/PKLm/zyi5v88oub/PaLm+D6j5uNEpOe9R6TmcDSo6i4Vt/UeDbz5JAi/+x0GwPwJAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEq/ + ZAlMvmQeTr5jLVm8YiVXvWQTw6ZJEv+dPi3/nj5X/55CpP+fQuP/n0H6/54///+eP///nj///54///+e + P///nj///54///+eP/r/nkLW/6FJc/2fRhQAAAAAAAAAAAAAAAAAAAAAO6LmCDyi5kY8oua3PKLm9jyi + 5v88oub/PKLm/zyi5v88oub/PKLm/zyi5v88oub5PKLm5z6i58hEpeeDTqfmRU6s6iAhu/caAcP+TADE + /5AAxP95AMT/LATB/QYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAFbCcAZCwmssO8JoeTrCZ6k6wmeSPcJqVFfBbCZZxngOpLBXDP+gSDv/oUyO/6BHz/+e + Quv/nkD7/54///+eP///nj///54///+eP///nj/2/54/uv+eQEr5n0MJAAAAAAAAAAAAAAAAAAAAADmi + 5gQ7ouYyPKLmmTyi5uc8oub9PKLm/zyi5v88oub/PKLm/jyi5vg8oubiO6LmvTyh5oI8pOhBP6nqHRq5 + 9hsAxP80AMT/awDE/7sAxP/pAMT/4ADE/5IAxP8rAsL9CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADvAZwk8wmgrQMNpkjzCaOI6wmf4OsJn7j3CadJFw22dUcRzW13I + fCu5uXUW9qVWIv+hTU3/oEeP/55CxP+eP+b/nj/4/54//f+eP///nj/+/55C9f+gRrX/ok1F86JJCAAA + AAAAAAAAAAAAAAAAAAA3pOcBOaPnFjyi5mQ8oubOPKLm+zyi5v88oub+PKLm+0Cj5vNDpOfYQqPmljel + 6Eowp+ojGbX0HQDE/zgAxP9oAMT/pgDE/9YAxP/vAMT//ADE//oAxP/hAMT/iQDE/zMCw/wPCMHzBAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOcF7BDrBbA84wmczOcJniDvCZ+E7wmf6OsJn/zrC + Z/86wmj6PMJp60XEbdJMxHCRTMJrOJaxWRHQplQR4qRLJf+dQVH/nj+P/54/wv+eQOr/nj/9/54//f+f + Q+T/oUyU+qRSMOukTAQAAAAAAAAAAAAAAAAAAAAAAAAAADek5wk8ouZLPKLmujyi5vY8oub8PKLm8kCj + 59tHpOexUafmekyq6DghtPIaA8L9MgDE/2UAxP+kAMT/1gDE/+4AxP/7AMT//wDE//8AxP//AMT/+gDE + /9oAxP+YAMT/WwDE/zAJw/UYE8PoDR3E4AQAAAAAAAAAADHDlQQxwooNNsJ4GDrCZzA6wmdaOsJnmDrC + Z9k6wmf6OsJn/zrCZ/86wmf/OsJn/zrCZ/88wmj6PsNp4zzCaJ84wmZfNMNpM2+5XhXGq1MU2KdLJfig + RFv/oEat/6BE5v+eQu7/n0LD/6BHXOikSxPapksBAAAAAAAAAAAAAAAAAAAAAAAAAAAzpukEOaPnMTyi + 5pA8oubaPKLm4D2i5q9HpOd7S6noRj2y7yUsu/UhC8L8QwDE/44AxP/SAMT/7gDE//oAxP//AMT//wDE + //8AxP//AMT//wDE//8AxP/4AMT/6ADE/8cBxP+XCcT/dxXF/1cgxf8qD8PhDx/DrwlGw2sgQsNrUz3C + aXc6wmeWOsJnxjrCZ+g6wmf4OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/o6wmfqOsJnzT/D + aZlMxG9jVch7M3nAcBbQr2Eb/KRTSP+iTYz/oEiq/6BGgv+eQDDjo0UFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAALqnrATWl6BM8ouZUPKLmkDyi5n48ouZFLa/vJSC59iILwfw9AMT/bwDE/6cAxP/dAMT/+QDE + //8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//4AxP/3AMT/6wPE/90HxP/BBcX/jADE + /0Ucw64ePcNlXT3CaLc7wmffOsJn6zrCZ/c6wmf+OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/jrCZ/g8wmjqQsNry03FcZtYxnhgeMF2KcGtWhL/o1gl/6RWQv+jVTHupE4PzadMAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0pukGPKLmIT2h5TIrq+wlE7n2IAe//DsAxP9wAMT/pwDE + /9IAxP/uAMT/+gDE//4AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE + //8AxP/9AMT/9wHE/9sAxP96HsOrNTvCY4o6wmfnOsJn/TrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/jzCaPhBw2rrRsNtxUTEbHpbvWQyg7hnF5W3 + ZgzDrVkGvq1XAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKztASmt7gQTuPYJB7/7IADE + /2gAxP+sAMT/1ADE/+8AxP/6AMT//gDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP/qAMT/hh/Cqjw7wmOSOsJn7TrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/O8Jn/jvC + Z/M7wmfUPcNon0LDa0ZYv2gLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAG7XzAgLC/UIAxP+zAMT/7ADE//wAxP/+AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT/6gDE/4Yfwqo8O8JjkjrC + Z+06wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf+OsJn/D3CaOFAw2pwV8BrEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAABq29AQCwv0oAMT/mwDE//AAxP/+AMT//wDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE + /+oAxP+GH8KqPDvCY5I6wmftOsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/jrCZ/Y9wmjJQcNrV1HAagsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsL+CwDE/2MAxP/HAMT/9QDE + //4AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP/qAMT/hh/Cqjw7wmOSOsJn7TrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zvCZ/g8wmjTPsNqeEvC + bBxbwW4EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATB + /AQAxP8kAMT/dQDE/8sAxP/zAMT//QDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT/6gDE/4Yfwqo8O8JjkjrCZ+06wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zzC + aP1DxG3sS8VynE/GdTFbv2oDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAcL9BgDE/ycAxP91AMT/yQDE//MAxP/9AMT//wDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE/+oAxP+GH8KqPDvC + Y5I6wmftOsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/zvCaP1Bw2vxUMV0v2HJgGBxy4oSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw/4HAMT/KADE/3UAxP/JAMT/8wDE + //4AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE + //8AxP/qAMT/hh/Cqjw7wmOSOsJn7TrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zvCaP1Aw2vxSsVxw1nGeWxwyociZsmDBQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADE + /wcAxP8oAMT/dQDE/8sAxP/0AMT//gDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP//AMT/6gDE/4Yfwqo8O8JjkjrCZ+06wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zzCaf1Dw23yTsVzw1TGdmxYxngjV8Z3BgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAMT/BwDE/ycAxP91AMT/zgDE//YAxP//AMT//wDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE/+oAxP+GH8KqPDvCY5I6wmftOsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/U/w2vgU8Z2tmHJ + f2dpyYIiVMV2BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD/////////////////////////gAB///////gAAA//////wAAAAf////+AAAAA + /////gAAAAB////8AAAAAB////AAAAAAD///4AAAAAAH///AAAAAAAP//4AAAAAAAf//AAAAAAAA//8A + AAAAAAB//gAAAAAAAD/+AAAAAAAAP/4AAAAAAAA/+AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAH4AAAAAAA + AAfgAAAAAAAAB8AAAAMAAAADwAAAD/AAAAPAAAA//AAAA8AAAH/+AAADwAAB//8AAAPAAAH//4AAA8AA + Af//gAADwAAB//+AAAPAAAH//8AAA8AAA///wAADwAAD///AAAPAAAP//8AAA8AAAf//gAADwAAB//+A + AAPAAAH//4AAA8AAAf//wAADwAAA//8AAAPAAAB//gAAA8AAAD/8AAADwAAAD/AAAAPgAAABgAAAA+AA + AAAAAAAH4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAA//AAAAAAAAD/8AAAAAAAAP/4AAAAAAAA//gAAAAAA + AH//AAAAAAAA//+AAAAAAAD//8AAAAAAAf//4AAAAAAD///wAAAAAAf///gAAAAAH////gAAAAA///// + AAAAAP////+AAAAB/////+AAAAf//////AAAH////////////////////////ygAAAAwAAAAYAAAAAEA + IAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ2/vBEhx + 6QlPdeILVXfbCll41gZ2iMULgI6+HISOtRiJj6sLkZSnCpybpAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQW70BUBu + 9A8+bfUaPWz0ND1s9FY/bfJgQG7wXDpq8zqVnsA8q6qxkqOhp5CZlplio5+gXK+rq0Srp6YYpaCeDKCb + mQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARnL1BVB3 + 9RRJc/U1RHD1VUBu9oY8bPaiPGz2vDxs9t48bPboPGz23zlq+JGBi7NPnpeUvZuVku6alJHpnpmW5aGc + mc2gm5iep6Ogd62ppkqzsK4osa2rDqCbmAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENw + 9QJTefQTVXr0OE529G9EcfauPm31zD1s9eY8bPb0O2v1+Dtr9f08bPb/O2v19Dhr9556hbBRmZKOv5iS + j/qZk5D/mZOQ/pmTkPqalZLxnZeU3qGcmcWtqqeZtbKwXq2opiKemJUBAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAQ3D0AUhy9RRUevVrSXT1r0Fv9dw9bPb1PGz1+ztr9f08bPb/O2v1/jtr9f48bPb/O2v19Dhr + 9556hbBRmZKNv5iSj/qZk5D/mJKP/piSj/6Zk5D+mZOQ/ZqUkfqemZbupJ+dzqikoYKppKIiqKOhCgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAEhy9QFKdPUOQW71Lj1t9oA/bvbqPW32/Dxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz29Dlr9596hbBRmpOOv5mTkPqZk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/JqV + ku6kn526p6OgXqCbmRiemJYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAARHD0AVN49RJZfPVYR3L1nz1s9to7a/X8O2v1/jtr9f48bPb/O2v1/jtr + 9f48bPb/O2v1/jtr9f48bPb/O2v19Dhr9556hbBRmZKNv5iSj/qZk5D/mJKP/piSj/6Zk5D/mJKP/pmT + kP+Yko/+mJKP/pmTkP+blZLznpiVwJ2YlmKclpQSnZiVAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFc/QBTHb0ElJ39VFIcvW/QG717jxs9vs7a/X+O2v1/jtr + 9f48bPb/O2v1/jtr9f48bPb/O2v1/jtr9f48bPb/O2v19Dhr9556hbBRmZKNv5iSj/qZk5D/mJKP/piS + j/6Zk5D/mJKP/pmTkP+Yko/+mJKP/pmTkP+Zk5D9mZOQ8pmUksGZlJFRnZaTEqCYlAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUffQUYID2X0t19cE9bfX3PGz2/jxs + 9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz29Dlr9596hbBRmpOOv5mT + kPqZk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/pmTkPeZk5HBnJaUYqOa + kxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWA8AFYe/Y7TXb1r0Fv + 9fE8bPb+O2v1/jxs9v87a/X+O2v1/jtr9f48bPb/O2v1/jtr9f48bPb/O2v1/jtr9f48bPb/O2v19Dhr + 9556hbBRmZKNv5iSj/qZk5D/mJKP/piSj/6Zk5D/mJKP/pmTkP+Yko/+mJKP/pmTkP+Yko/+mJKP/pmT + kP6Zk5DynJaUwKOem2GypJkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFGC + 8gZHcvV3QG723Txs9vw8bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs9v88bPb/PGz2/zxs + 9v88bPb/PGz29Dlr9596hbBRmpOOv5mTkPqZk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mTkP+Zk5D/mZOQ/5mT + kP+Zk5D/mZOQ/5mTkP+Zk5D+mpSS86Kdm8K0rKk3vKONBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAFWF8gpRevVfRnL1rD5t9dw8bPb1O2v1/Dxs9v47a/X+O2v1/jtr9f48bPb/O2v1/jtr + 9f48bPb/O2v1/jtr9f48bPb/O2v19Dhr9556hbBRmZKNv5iSj/qZk5D/mJKP/piSj/6Zk5D/mJKP/pmT + kP+Yko/+mJKP/pmTkP+Yko/+mJKP/pmTkP6Zk5D8m5aT9aOdm9m1rahRxaiOCQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABCk+oCQJbpEkuY6i1KkO0vS4DyQENy9HE7a/a1PGz14Dxs9vg7a/X+O2v1/jtr + 9f48bPb/O2v1/jtr9f48bPb/O2v1/jtr9f48bPb/O2v19Dhr9556hbBRmZKNv5iSj/qZk5D/mJKP/piS + j/6Zk5D/mJKP/pmTkP+Yko/+mJKP/pmTkP+Yko/+mJOQ/ZmTkPecl5TdpJ2Zs7Omm3rRrZA34qZ1Gtie + aQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAl+kMPKHmTTuh5Zw9oeZ/RZvpSEaM7S5Cd/JEQ3H1iERx + 9tM9bfX2O2v1/Ttr9f48bPb/O2v1/jtr9f48bPb/O2v1/jtr9f08bPb1O2v14jhq+JGBi7NPnZeSv5qU + kfqZk5D/mJKP/piSj/6Zk5D/mJKP/pmTkP+Yko/+mJKP/pmTkP+alJH8m5aT7J2Ylr+qnZV6w6OHTeGk + akb4olJu/aNUYO+hXB0AAAAAAAAAAAAAAAAAAAAAAAAAAEGZ6AE9n+YwPKLmoDyi5u48oubtP6Lmykel + 5pJJnek/UYzvLFN/9FRGcfafP2720Txs9u88bPb8PGz2/jxs9v88bPb7PW327z5t9dM8bPaXPmz0Zzxr + 8jqepL81r6uoj6OdmryalZLVmpSR75mTkPuZk5D/mZOQ/5mTkP+Zk5D+mZOQ/JyWk/OjnZvNrqWfksKk + ilHloWVN+KBOfP6eQrT/nkDl/6BIvfuiU1DmnlsDAAAAAAAAAAAAAAAAAAAAAEKd5wlBouZjPKLl0Duh + 5fo8oub+PKHl+T6i5uc+ouakQJ/nYkaW6zVKg/E2RXP0YT5s9Zw8bPbYO2v18jxs9fs9bPbaQ2/1oEx0 + 9GNJc+8pT3XiEFp51waXosYQoqW3LZ+epj6hnJpknZiVn5qUkdqZk5D8mJKP/pmTkP2ZlJHynZeU16Oe + nKW8qJZh16l9RvCkXWP9oEiy/p5C3v+eQPT+nT/8/p5C3v+gSHLyoFMLAAAAAAAAAAAAAAAAPp7mAU+l + 5yBJpuagPqLl7Tuh5f08oub/O6Hl/juh5fw7oubvO6Hl0T6h56BIn+hOUZbrKkl98TA7a/ZpPm31skNw + 9dlEcPWAQG70L0t37Q9Te+MCAAAAAAAAAAAAAAAAe4m6AoeOrgSXlaAPnZeWLp6ZloCblpPqm5WS+52X + lPGgm5iwqZ+XaMqjfkDuoVZL+p9Ghv6eQcP+nkDy/p0//P+eP/7+nT7+/p1A7v+eRKH4n0sh8J9RAQAA + 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 + 6gM6ouZQPKLmvTyi5uU+oua0R6XneUSt60MruPQrCMH8WADE/6cAxP/hAMT/9gDE//0AxP//AMT//wDE + //4AxP/pAMT/wADE/4kLxPxYGMT2MhTD3xAlw6MLPcJ2LTvCblc6wmeIOsJnvzrCZ+k6wmf+OsJn/zrC + Z/86wmf/OsJn/jrCZ/Y6wmfNOsJnmE7Balt5v24mtbJgIvSlUlP/oUmo/59Fpv+fQlDOp00GAAAAAAAA + AAAAAAAAAAAAAAAAAAA0pegdPKHlXzij52suquw3Hbf1MAzA+08AxP+UAMP+zgDE//QAw/7+AMP+/gDD + /v4AxP//AMP+/gDD/v4AxP/+AMP++wDD/vIDxP/fBMT+twDE/mUkw5s0PMJmlTvBZ906wmfyOcFm+znB + Zv46wmf/OcFm/jrCZ/85wWb+OcFm/jrCZ/85wWb9OsFn9D/CadxMxHChX8N0W5i1YiLhqFsm5qdXLeCm + URIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqrO0HLKrsFxyy8SEHv/tPAcL+igDD/sAAxP/qAMP++QDE + //4Aw/7+AMP+/gDD/v4AxP//AMP+/gDD/v4AxP//AMP+/gDD/v4AxP/9AMP+7gDD/pglwphNOsFkvDnB + Zvg6wmf/OcFm/jnBZv46wmf/OcFm/jrCZ/85wWb+OcFm/jrCZ/85wWb+OcFm/jrCZ/w+wmjuP8JpwUjA + ZnhnvGgljLVfB6evVgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH7LyAgm++iwAxP+vAMT/5wDE + //gAxP/+AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT/9ADE + /58mwphROsJlvzrCZ/o6wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrC + Z/86wmf+OsJn9jzCZ9lGwmpQdrliCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHLTyAQi+ + +hkAxP+jAMP+8ADD/v0AxP//AMP+/gDE//8Aw/7+AMP+/gDD/v4AxP//AMP+/gDD/v4AxP//AMP+/gDD + /v4AxP//AMP+9ADD/p4mwphROsFkvznBZvo6wmf/OcFm/jnBZv46wmf/OcFm/jrCZ/85wWb+OcFm/jrC + Z/85wWb+OcFm/jrCZ/86wWb+OsFn9DzCaMJJwWo4b7pkBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAy8+QUAxP9aAMP+vgDD/vIAxP/+AMP+/gDE//8Aw/7+AMP+/gDD/v4AxP//AMP+/gDD + /v4AxP//AMP+/gDD/v4AxP//AMP+9ADD/p4mwphROsFkvznBZvo6wmf/OcFm/jnBZv46wmf/OcFm/jrC + Z/85wWb+OcFm/jrCZ/85wWb+OcFm/jrCZ/87wmj6QcNr1EXEbm1bvmcMAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwPwYAMT/YgDE/8EAxP/3AMT//gDE//8AxP//AMT//wDE + //8AxP//AMT//wDE//8AxP//AMT//wDE//8AxP//AMT/9ADE/58mwphROsJlvzrCZ/o6wmf/OsJn/zrC + Z/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/86wmf/OsJn/zrCZ/5Dw2zpVMZ3nGXJgi8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwPwBAsH9EgDD/lEAxP/BAMP+8gDE + //4Aw/7+AMP+/gDD/v4AxP//AMP+/gDD/v4AxP//AMP+/gDD/v4AxP//AMP+9ADD/p4mwphROsFkvznB + Zvo6wmf/OcFm/jnBZv46wmf/OcFm/jrCZ/85wWb+OcFm/jrCZ/86wWf+O8Jo/EHDbOpPxXOYXsZ8OlDD + bwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAML9AQDD + /hIAxP9iAMP+wADE//MAw/7+AMP+/gDD/v4AxP//AMP+/gDD/v4AxP//AMP+/gDD/v4AxP//AMP+9ADD + /p4mwphROsFkvznBZvo6wmf/OcFm/jnBZv46wmf/OcFm/jrCZ/85wWb+OcFm/jrCZ/86wmf3RMNt4VTG + d6RZxnk6RsNtCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAADD/gEAw/4YAMT/XgDE/7oAxP/uAMT//ADE//8AxP//AMT//wDE//8AxP//AMT//wDE + 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 + AAAAAAAAAAAAAAAAAAAAAAAAQI3rAkyM7hBMffJiQnH0qDtr9eY7a/X4O2v1/jtr9f47a/X+O2v1/jtr + 9f47a/X+O2v1+zlr9rqEiaR1mJKO5piSj/6Yko/+mJKP/piSj/6Yko/+mJKP/piSj/2Yko/8m5WS66Sd + mcXDq5c1zJ92BgAAAAAAAAAAAAAAAAAAAAA/l+gYP53mYkOY6VpFiO5EQHHzfUFv9cw7a/X6O2v1/Ttr + 9f47a/X+O2v1/jtr9f07a/XyOWr2sIiNpnSalJDmmJKP/piSj/6Yko/+mJKP/piSj/6Yko/+mZOQ+ZuV + k9yrnZKMyaOAX+6lZFXpoGAmAAAAAAAAAAAAAAAAQJfoAj2g5WY7oeXcPKHl6kKj5bxHmulVTYrvRUV0 + 9Is+bfXGO2v18ztr9fw9bPXmQW71ukFu8WRHcegzoKW6P6Sho4ablpO7mZSR5piSj/6Yko/+mZOQ9p2X + lOCwopeYyqSDYvGgVX78nkS6/p5B4P2gTH/hnVwDAAAAAAAAAABGn+cQQ6PlqDuh5fM7oeX9O6Hl9zyh + 5cg/nueMSpHsQkd98Ew7a/WhP2312kFu9YVHc/E4UnreC19+0QN/jb8Ji4+uFZuXmzicl5SFmpSR9JuV + kvegmZWztZ+McOOjZVz1oE+S/Z5B4/6dP/f+nT/2/p5DrvCeUREAAAAAPZzmAUGh5iY9oubYO6Hl/Tuh + 5f47oeX+O6Hl/juh5fw/ouXYQKDmh0WP6zBVhPE0SoDsCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKaW + kAiyqaJpwKmWfOWlbGv7n0ib/p0+6v6dPvv+nT7+/p0+/v6dPv3+nT/b+J1HK+2dUAE8n+UCO6DlODuh + 5eM7oeX9O6Hl/juh5f47oeX+O6Hl/juh5fs7oeXnRKDmcUiQ6xQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMejgxTrpGJT/KBI0v6eQPL+nT79/p0+/v6dPv7+nT7+/p0+/f6dP+/8nUNO9Z1IBDyg + 5QY7oeVlO6Hl/Duh5f47oeX+O6Hl/juh5f47oeX+O6Hl/j2h5fNGouZjQpPpCwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA0JtoBvaeR0z+nT7r/p0+/v6dPv7+nT7+/p0+/v6dPv7+nT7+/p0+/v6d + Pmn7nUIGPKHlBzuh5Wk7oeX+O6Hl/juh5f47oeX+O6Hl/juh5f47oeX9PKHl4UKg5zg9l+kDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLn2UC755LK/6dPtr+nT79/p0+/v6dPv7+nT7+/p0+/v6d + Pv7+nT7+/p0+af2dPwY7oeUHO6HlaTuh5f47oeX+O6Hl/juh5f47oeX+O6Hl/juh5f07oeXbO6LnKzSh + 6gIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKmXALsoUsr/p0/2v6dPv3+nT7+/p0+/v6d + Pv7+nT7+/p0+/v6dPv7+nT5p/Z0/Bjuh5Qc7oeVpO6Hl/juh5f47oeX+O6Hl/juh5f47oeX+O6Hl/Tyh + 5es/pOdML6nrBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuqtbBfGmV0b+nkLl/p0+/f6d + Pv7+nT7+/p0+/v6dPv7+nT7+/p0+/v6dPmn6nkAGOaLmBD+i5U48oeXvO6Hl/Tuh5f47oeX+O6Hl/juh + 5f48oubvPKLmvzKn6kEkr+0JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYsV4Gw6tZIu2h + SXb9nT+2/p4/8f6eP/3+nT7+/p0+/v6dPv7+nT/4/p5CX/OfQgY2pOcBO6LlKzuh5ds7oeX8O6Hl/juh + 5f47oeX7PKHl60Ok5pc5q+tNDrr4Rgq9+TIbtusBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbrdvAVa8 + ZTRXvGJYgbVeMbqrUjj+nkSi/p5C5f6dPv3+nT7+/p0+/P6dP+P1n0Q55KJGAgAAAAA1pOcRO6Hlrjuh + 5fY8oub3P6Lm5Dmk540qq+xOE7r3TgLC/YkAw/7kAMP+1gHC/EYMvu4SFb7YAgAAAAAAAAAAN7+VAkO+ + eBI7wGhFO8Fn2DrBZvY+wmnPS8Rxi560YjHQp1BD955Cmv2eQNT+nj/2/p5Ew+ijTBwAAAAAAAAAAC+o + 6gM7oeV/O6Hl4D+i5rlFqOh5JrXyPwi++3AAw/7JAMP+7ADD/v0Aw/77AMP+vQHD/XcPw/E0FsLcEirC + nA83wXszOcFpdjnBZr06wWb7OsFm/jrBZ/s8wmjrRMBlll+8Y1Wrsl0y6KZPY/6fRb7+n0OByqhOCAAA + AAAAAAAAAAAAADGm6SYxpulOHLTzRAu++mcAw/6/AMP+7gDD/v4Aw/7+AMP+/gDD/v4Aw/79AMP++ALD + /t4Aw/6RLMKIXjrBZs85wWb4OcFm/TnBZv45wWb+OcFm/jnBZv45wWb7PMFn7EvDbqZvvGdTv61cI8yp + VBMAAAAAAAAAAAAAAAAAAAAAI6/vBBa29B0Bwv6iAMP+2wDD/vkAw/7+AMP+/gDD/v4Aw/7+AMP+/gDD + /v4Aw/7+AMP++gDD/rkswYZ0OcFm5TnBZv45wWb+OcFm/jnBZv45wWb+OcFm/jnBZv45wWb+O8Jn8T7B + Z8dhvGUulLJZAgAAAAAAAAAAAAAAAAAAAAAAAAAAErj2DADD/qYAw/7wAMP+/gDD/v4Aw/7+AMP+/gDD + /v4Aw/7+AMP+/gDD/v4Aw/77AMP+uizBhnU5wWXmOcFm/jnBZv45wWb+OcFm/jnBZv45wWb+OcFm/jnB + Zv47wWf2PsJpvGC8ZRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVt/UBAsL9SQDD/rYAw/76AMP+/gDD + /v4Aw/7+AMP+/gDD/v4Aw/7+AMP+/gDD/vsAw/67LMGGdTnBZuY5wWb+OcFm/jnBZv45wWb+OcFm/jnB + Zv45wWb+OcFm/kTDbdlWxnhnaLtjAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIvvoEAcL9LADD + /rYAw/7yAMP+/gDD/v4Aw/7+AMP+/gDD/v4Aw/7+AMP++wDD/roswYZ1OcFl5jnBZv45wWb+OcFm/jnB + Zv45wWb+OcFm/jvBZ/hEw23dU8V1XlHCbxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAACwfwEAMP+SgDD/rIAw/72AMP+/gDD/v4Aw/7+AMP+/gDD/v4Aw/77AMP+uyzBhnU5wWbmOcFm/jnB + Zv45wWb+OcFm/jnBZv46wWb9QsNrxV3HfXJKw28SR8BoAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAwv4CAMP+EgDD/nkAw/7EAMP+8QDD/voAw/7+AMP+/gDD/vsAw/66LMGGdTnB + ZeY5wWb+OcFm/jnBZvw5wWbxOcFmxT7CaYlFwm0hP8JpAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AACAAQAAwAMAAOAHAAD4HwAA + + + \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/FDialogs.Designer.cs b/SunnyUI.Demo/Forms/FDialogs.Designer.cs new file mode 100644 index 00000000..e34bc8ca --- /dev/null +++ b/SunnyUI.Demo/Forms/FDialogs.Designer.cs @@ -0,0 +1,438 @@ +namespace Sunny.UI.Demo +{ + partial class FDialogs + { + /// + /// 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.btnError = new Sunny.UI.UISymbolButton(); + this.btnWarn = new Sunny.UI.UISymbolButton(); + this.btnSuccess = new Sunny.UI.UISymbolButton(); + this.btnAsk = new Sunny.UI.UISymbolButton(); + this.btnAuto = new Sunny.UI.UISymbolButton(); + this.btnStatus2 = new Sunny.UI.UISymbolButton(); + this.btnInfo = new Sunny.UI.UISymbolButton(); + this.btnPasswordInput = new Sunny.UI.UISymbolButton(); + this.btnDoubleInput = new Sunny.UI.UISymbolButton(); + this.btnIntInput = new Sunny.UI.UISymbolButton(); + this.btnStringInput = new Sunny.UI.UISymbolButton(); + this.uiLine1 = new Sunny.UI.UILine(); + this.uiLine2 = new Sunny.UI.UILine(); + this.uiLine3 = new Sunny.UI.UILine(); + this.uiLine4 = new Sunny.UI.UILine(); + this.uiSymbolButton1 = new Sunny.UI.UISymbolButton(); + this.uiLine5 = new Sunny.UI.UILine(); + this.uiSymbolButton2 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton4 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton5 = new Sunny.UI.UISymbolButton(); + this.uiSymbolButton6 = new Sunny.UI.UISymbolButton(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine5); + this.PagePanel.Controls.Add(this.uiSymbolButton2); + this.PagePanel.Controls.Add(this.uiSymbolButton4); + this.PagePanel.Controls.Add(this.uiSymbolButton5); + this.PagePanel.Controls.Add(this.uiSymbolButton6); + this.PagePanel.Controls.Add(this.uiLine4); + this.PagePanel.Controls.Add(this.uiSymbolButton1); + this.PagePanel.Controls.Add(this.uiLine3); + this.PagePanel.Controls.Add(this.uiLine2); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.btnPasswordInput); + this.PagePanel.Controls.Add(this.btnDoubleInput); + this.PagePanel.Controls.Add(this.btnIntInput); + this.PagePanel.Controls.Add(this.btnStringInput); + this.PagePanel.Controls.Add(this.btnInfo); + this.PagePanel.Controls.Add(this.btnStatus2); + this.PagePanel.Controls.Add(this.btnAuto); + this.PagePanel.Controls.Add(this.btnError); + this.PagePanel.Controls.Add(this.btnWarn); + this.PagePanel.Controls.Add(this.btnSuccess); + this.PagePanel.Controls.Add(this.btnAsk); + this.PagePanel.Size = new System.Drawing.Size(800, 514); + // + // btnError + // + this.btnError.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnError.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.btnError.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.btnError.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.btnError.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnError.Location = new System.Drawing.Point(600, 53); + this.btnError.Name = "btnError"; + this.btnError.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnError.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.btnError.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.btnError.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.btnError.Size = new System.Drawing.Size(100, 35); + this.btnError.Style = Sunny.UI.UIStyle.Red; + this.btnError.StyleCustomMode = true; + this.btnError.Symbol = 61532; + this.btnError.TabIndex = 29; + this.btnError.Text = "Error"; + this.btnError.Click += new System.EventHandler(this.btnError_Click); + // + // btnWarn + // + this.btnWarn.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnWarn.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.btnWarn.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.btnWarn.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.btnWarn.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnWarn.Location = new System.Drawing.Point(486, 53); + this.btnWarn.Name = "btnWarn"; + this.btnWarn.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnWarn.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.btnWarn.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.btnWarn.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.btnWarn.Size = new System.Drawing.Size(100, 35); + this.btnWarn.Style = Sunny.UI.UIStyle.Orange; + this.btnWarn.StyleCustomMode = true; + this.btnWarn.Symbol = 61553; + this.btnWarn.TabIndex = 28; + this.btnWarn.Text = "Warn"; + this.btnWarn.Click += new System.EventHandler(this.btnWarn_Click); + // + // btnSuccess + // + this.btnSuccess.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSuccess.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.btnSuccess.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.btnSuccess.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.btnSuccess.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnSuccess.Location = new System.Drawing.Point(372, 53); + this.btnSuccess.Name = "btnSuccess"; + this.btnSuccess.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnSuccess.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.btnSuccess.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.btnSuccess.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.btnSuccess.Size = new System.Drawing.Size(100, 35); + this.btnSuccess.Style = Sunny.UI.UIStyle.Green; + this.btnSuccess.StyleCustomMode = true; + this.btnSuccess.Symbol = 61528; + this.btnSuccess.TabIndex = 27; + this.btnSuccess.Text = "Success"; + this.btnSuccess.Click += new System.EventHandler(this.btnSuccess_Click); + // + // btnAsk + // + this.btnAsk.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAsk.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnAsk.Location = new System.Drawing.Point(30, 53); + this.btnAsk.Name = "btnAsk"; + this.btnAsk.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnAsk.Size = new System.Drawing.Size(100, 35); + this.btnAsk.StyleCustomMode = true; + this.btnAsk.Symbol = 61529; + this.btnAsk.TabIndex = 26; + this.btnAsk.Text = "Query"; + this.btnAsk.Click += new System.EventHandler(this.btnAsk_Click); + // + // btnAuto + // + this.btnAuto.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAuto.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnAuto.Location = new System.Drawing.Point(144, 53); + this.btnAuto.Name = "btnAuto"; + this.btnAuto.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnAuto.Size = new System.Drawing.Size(100, 35); + this.btnAuto.Symbol = 61732; + this.btnAuto.TabIndex = 31; + this.btnAuto.Text = "Auto"; + this.btnAuto.Click += new System.EventHandler(this.btnAuto_Click); + // + // btnStatus2 + // + this.btnStatus2.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStatus2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnStatus2.Location = new System.Drawing.Point(30, 263); + this.btnStatus2.Name = "btnStatus2"; + this.btnStatus2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnStatus2.Size = new System.Drawing.Size(214, 35); + this.btnStatus2.Symbol = 57595; + this.btnStatus2.TabIndex = 36; + this.btnStatus2.Text = "进度提示框"; + this.btnStatus2.Click += new System.EventHandler(this.btnStatus2_Click); + // + // btnInfo + // + this.btnInfo.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnInfo.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.btnInfo.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165))))); + this.btnInfo.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129))))); + this.btnInfo.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnInfo.Location = new System.Drawing.Point(258, 53); + this.btnInfo.Name = "btnInfo"; + this.btnInfo.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnInfo.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(140)))), ((int)(((byte)(140)))), ((int)(((byte)(140))))); + this.btnInfo.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(158)))), ((int)(((byte)(160)))), ((int)(((byte)(165))))); + this.btnInfo.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(121)))), ((int)(((byte)(123)))), ((int)(((byte)(129))))); + this.btnInfo.Size = new System.Drawing.Size(100, 35); + this.btnInfo.Style = Sunny.UI.UIStyle.Gray; + this.btnInfo.StyleCustomMode = true; + this.btnInfo.Symbol = 61530; + this.btnInfo.TabIndex = 37; + this.btnInfo.Text = "Info"; + this.btnInfo.Click += new System.EventHandler(this.btnInfo_Click); + // + // btnPasswordInput + // + this.btnPasswordInput.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnPasswordInput.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnPasswordInput.Location = new System.Drawing.Point(30, 182); + this.btnPasswordInput.Name = "btnPasswordInput"; + this.btnPasswordInput.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnPasswordInput.Size = new System.Drawing.Size(214, 35); + this.btnPasswordInput.Symbol = 61545; + this.btnPasswordInput.TabIndex = 46; + this.btnPasswordInput.Text = "密码输入框"; + this.btnPasswordInput.Click += new System.EventHandler(this.btnPasswordInput_Click); + // + // btnDoubleInput + // + this.btnDoubleInput.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDoubleInput.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnDoubleInput.Location = new System.Drawing.Point(486, 134); + this.btnDoubleInput.Name = "btnDoubleInput"; + this.btnDoubleInput.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnDoubleInput.Size = new System.Drawing.Size(214, 35); + this.btnDoubleInput.Symbol = 62022; + this.btnDoubleInput.TabIndex = 45; + this.btnDoubleInput.Text = "浮点数输入框"; + this.btnDoubleInput.Click += new System.EventHandler(this.btnDoubleInput_Click); + // + // btnIntInput + // + this.btnIntInput.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnIntInput.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnIntInput.Location = new System.Drawing.Point(258, 134); + this.btnIntInput.Name = "btnIntInput"; + this.btnIntInput.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnIntInput.Size = new System.Drawing.Size(214, 35); + this.btnIntInput.Symbol = 62022; + this.btnIntInput.TabIndex = 44; + this.btnIntInput.Text = "整数输入框"; + this.btnIntInput.Click += new System.EventHandler(this.btnIntInput_Click); + // + // btnStringInput + // + this.btnStringInput.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnStringInput.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnStringInput.Location = new System.Drawing.Point(30, 134); + this.btnStringInput.Name = "btnStringInput"; + this.btnStringInput.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnStringInput.Size = new System.Drawing.Size(214, 35); + this.btnStringInput.Symbol = 62022; + this.btnStringInput.TabIndex = 43; + this.btnStringInput.Text = "字符串输入框"; + this.btnStringInput.Click += new System.EventHandler(this.btnStringInput_Click); + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 47; + this.uiLine1.Text = "UIMessageDialog"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine2 + // + this.uiLine2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine2.Location = new System.Drawing.Point(30, 101); + this.uiLine2.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine2.Name = "uiLine2"; + this.uiLine2.Size = new System.Drawing.Size(670, 20); + this.uiLine2.TabIndex = 48; + this.uiLine2.Text = "UIInputDialog"; + this.uiLine2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine3 + // + this.uiLine3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine3.Location = new System.Drawing.Point(30, 230); + this.uiLine3.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine3.Name = "uiLine3"; + this.uiLine3.Size = new System.Drawing.Size(670, 20); + this.uiLine3.TabIndex = 49; + this.uiLine3.Text = "UIStatusDialog"; + this.uiLine3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLine4 + // + this.uiLine4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine4.Location = new System.Drawing.Point(30, 314); + this.uiLine4.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine4.Name = "uiLine4"; + this.uiLine4.Size = new System.Drawing.Size(670, 20); + this.uiLine4.TabIndex = 51; + this.uiLine4.Text = "UISelectDialog"; + this.uiLine4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiSymbolButton1 + // + this.uiSymbolButton1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton1.Location = new System.Drawing.Point(30, 347); + this.uiSymbolButton1.Name = "uiSymbolButton1"; + this.uiSymbolButton1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton1.Size = new System.Drawing.Size(214, 35); + this.uiSymbolButton1.Symbol = 61655; + this.uiSymbolButton1.TabIndex = 50; + this.uiSymbolButton1.Text = "下拉选择框"; + this.uiSymbolButton1.Click += new System.EventHandler(this.uiSymbolButton1_Click); + // + // uiLine5 + // + this.uiLine5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine5.Location = new System.Drawing.Point(30, 397); + this.uiLine5.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine5.Name = "uiLine5"; + this.uiLine5.Size = new System.Drawing.Size(670, 20); + this.uiLine5.TabIndex = 58; + this.uiLine5.Text = "UINotifier"; + this.uiLine5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiSymbolButton2 + // + this.uiSymbolButton2.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton2.Location = new System.Drawing.Point(30, 430); + this.uiSymbolButton2.Name = "uiSymbolButton2"; + this.uiSymbolButton2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton2.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton2.StyleCustomMode = true; + this.uiSymbolButton2.Symbol = 61530; + this.uiSymbolButton2.TabIndex = 57; + this.uiSymbolButton2.Text = "Info"; + this.uiSymbolButton2.Click += new System.EventHandler(this.uiSymbolButton2_Click); + // + // uiSymbolButton4 + // + this.uiSymbolButton4.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton4.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton4.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton4.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton4.Location = new System.Drawing.Point(372, 430); + this.uiSymbolButton4.Name = "uiSymbolButton4"; + this.uiSymbolButton4.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton4.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(230)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.uiSymbolButton4.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(127)))), ((int)(((byte)(128))))); + this.uiSymbolButton4.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(202)))), ((int)(((byte)(87)))), ((int)(((byte)(89))))); + this.uiSymbolButton4.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton4.Style = Sunny.UI.UIStyle.Red; + this.uiSymbolButton4.StyleCustomMode = true; + this.uiSymbolButton4.Symbol = 61532; + this.uiSymbolButton4.TabIndex = 55; + this.uiSymbolButton4.Text = "Error"; + this.uiSymbolButton4.Click += new System.EventHandler(this.uiSymbolButton4_Click); + // + // uiSymbolButton5 + // + this.uiSymbolButton5.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton5.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolButton5.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiSymbolButton5.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiSymbolButton5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton5.Location = new System.Drawing.Point(258, 430); + this.uiSymbolButton5.Name = "uiSymbolButton5"; + this.uiSymbolButton5.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton5.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolButton5.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(223)))), ((int)(((byte)(174)))), ((int)(((byte)(86))))); + this.uiSymbolButton5.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(137)))), ((int)(((byte)(43))))); + this.uiSymbolButton5.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton5.Style = Sunny.UI.UIStyle.Orange; + this.uiSymbolButton5.StyleCustomMode = true; + this.uiSymbolButton5.Symbol = 61553; + this.uiSymbolButton5.TabIndex = 54; + this.uiSymbolButton5.Text = "Warn"; + this.uiSymbolButton5.Click += new System.EventHandler(this.uiSymbolButton5_Click); + // + // uiSymbolButton6 + // + this.uiSymbolButton6.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiSymbolButton6.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolButton6.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiSymbolButton6.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiSymbolButton6.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiSymbolButton6.Location = new System.Drawing.Point(144, 430); + this.uiSymbolButton6.Name = "uiSymbolButton6"; + this.uiSymbolButton6.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.uiSymbolButton6.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolButton6.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(136)))), ((int)(((byte)(202)))), ((int)(((byte)(81))))); + this.uiSymbolButton6.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(168)))), ((int)(((byte)(35))))); + this.uiSymbolButton6.Size = new System.Drawing.Size(100, 35); + this.uiSymbolButton6.Style = Sunny.UI.UIStyle.Green; + this.uiSymbolButton6.StyleCustomMode = true; + this.uiSymbolButton6.Symbol = 61528; + this.uiSymbolButton6.TabIndex = 53; + this.uiSymbolButton6.Text = "Success"; + this.uiSymbolButton6.Click += new System.EventHandler(this.uiSymbolButton6_Click); + // + // FDialogs + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 549); + this.Name = "FDialogs"; + this.PageIndex = 2001; + this.Text = "Dialogs"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolButton btnError; + private UISymbolButton btnWarn; + private UISymbolButton btnSuccess; + private UISymbolButton btnAsk; + private UISymbolButton btnAuto; + private UISymbolButton btnStatus2; + private UISymbolButton btnInfo; + private UISymbolButton btnPasswordInput; + private UISymbolButton btnDoubleInput; + private UISymbolButton btnIntInput; + private UISymbolButton btnStringInput; + private UILine uiLine3; + private UILine uiLine2; + private UILine uiLine1; + private UILine uiLine4; + private UISymbolButton uiSymbolButton1; + private UILine uiLine5; + private UISymbolButton uiSymbolButton2; + private UISymbolButton uiSymbolButton4; + private UISymbolButton uiSymbolButton5; + private UISymbolButton uiSymbolButton6; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/FDialogs.cs b/SunnyUI.Demo/Forms/FDialogs.cs new file mode 100644 index 00000000..92ac63a3 --- /dev/null +++ b/SunnyUI.Demo/Forms/FDialogs.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; + +namespace Sunny.UI.Demo +{ + public partial class FDialogs : UITitlePage + { + public FDialogs() + { + InitializeComponent(); + } + + private void btnAsk_Click(object sender, EventArgs e) + { + if (this.ShowAskDialog("确认信息提示框")) + { + this.ShowInfoDialog("您点击了确定按钮"); + } + else + { + this.ShowErrorDialog("您点击了取消按钮"); + } + } + + private void btnAuto_Click(object sender, EventArgs e) + { + this.ShowInfoDialog("跟随界面主题风格信息提示框", Style); + } + + private void btnSuccess_Click(object sender, EventArgs e) + { + this.ShowSuccessDialog("正确信息提示框"); + } + + private void btnWarn_Click(object sender, EventArgs e) + { + this.ShowWarningDialog("警告信息提示框"); + } + + private void btnError_Click(object sender, EventArgs e) + { + this.ShowErrorDialog("错误信息提示框"); + } + + private void btnStatus2_Click(object sender, EventArgs e) + { + ShowStatus("提示", "数据加载中......"); + for (int i = 0; i < 100; i++) + { + SystemEx.Delay(50); + StatusStepIt(); + } + } + + private void btnInfo_Click(object sender, EventArgs e) + { + this.ShowInfoDialog("默认信息提示框"); + } + + private void btnStringInput_Click(object sender, EventArgs e) + { + string value = "请输入字符串"; + if (this.InputStringDialog(ref value)) + { + this.ShowInfoDialog(value); + } + } + + private void btnIntInput_Click(object sender, EventArgs e) + { + int value = 0; + if (this.InputIntegerDialog(ref value)) + { + this.ShowInfoDialog(value.ToString()); + } + } + + private void btnDoubleInput_Click(object sender, EventArgs e) + { + double value = 0; + if (this.InputDoubleDialog(ref value)) + { + this.ShowInfoDialog(value.ToString("F2")); + } + } + + private void btnPasswordInput_Click(object sender, EventArgs e) + { + string value = ""; + if (this.InputPasswordDialog(ref value)) + { + this.ShowInfoDialog(value); + } + } + + private void uiSymbolButton1_Click(object sender, EventArgs e) + { + List items = new List() { "0", "1", "2", "3", "4" }; + int index = 2; + if (this.ShowSelectDialog(ref index, items)) + { + this.ShowInfoDialog(index.ToString()); + } + } + + private void uiSymbolButton2_Click(object sender, EventArgs e) + { + this.ShowInfoNotifier("Info"); + } + + private void uiSymbolButton6_Click(object sender, EventArgs e) + { + this.ShowSuccessNotifier("Success"); + } + + private void uiSymbolButton5_Click(object sender, EventArgs e) + { + this.ShowWarningNotifier("Warning"); + } + + private void uiSymbolButton4_Click(object sender, EventArgs e) + { + this.ShowErrorNotifier("Error"); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/FDialogs.resx b/SunnyUI.Demo/Forms/FDialogs.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/FDialogs.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/SunnyUI.Demo/Forms/FEdit.Designer.cs b/SunnyUI.Demo/Forms/FEdit.Designer.cs new file mode 100644 index 00000000..def2f599 --- /dev/null +++ b/SunnyUI.Demo/Forms/FEdit.Designer.cs @@ -0,0 +1,272 @@ +namespace Sunny.UI.Demo.Forms +{ + partial class FEdit + { + /// + /// 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.edtName = new Sunny.UI.UITextBox(); + this.uiLabel2 = new Sunny.UI.UILabel(); + this.uiLabel3 = new Sunny.UI.UILabel(); + this.rbMale = new Sunny.UI.UIRadioButton(); + this.rbFemale = new Sunny.UI.UIRadioButton(); + this.edtAge = new Sunny.UI.UITextBox(); + this.uiLabel4 = new Sunny.UI.UILabel(); + this.cbDepartment = new Sunny.UI.UIComboBox(); + this.uiLabel5 = new Sunny.UI.UILabel(); + this.uiLabel6 = new Sunny.UI.UILabel(); + this.edtDate = new Sunny.UI.UIDatePicker(); + this.edtAddress = new Sunny.UI.UITextBox(); + this.uiLabel1 = new Sunny.UI.UILabel(); + this.SuspendLayout(); + // + // pnlBtm + // + this.pnlBtm.Location = new System.Drawing.Point(1, 304); + this.pnlBtm.Size = new System.Drawing.Size(518, 55); + this.pnlBtm.TabIndex = 7; + // + // edtName + // + this.edtName.Cursor = System.Windows.Forms.Cursors.IBeam; + this.edtName.FillColor = System.Drawing.Color.White; + this.edtName.Font = new System.Drawing.Font("微软雅黑", 12F); + this.edtName.Location = new System.Drawing.Point(150, 55); + this.edtName.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.edtName.Name = "edtName"; + this.edtName.Padding = new System.Windows.Forms.Padding(5); + this.edtName.Size = new System.Drawing.Size(340, 29); + this.edtName.TabIndex = 0; + // + // uiLabel2 + // + this.uiLabel2.AutoSize = true; + this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel2.Location = new System.Drawing.Point(56, 59); + this.uiLabel2.Name = "uiLabel2"; + this.uiLabel2.Size = new System.Drawing.Size(42, 21); + this.uiLabel2.TabIndex = 4; + this.uiLabel2.Text = "姓名"; + this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel3 + // + this.uiLabel3.AutoSize = true; + this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel3.Location = new System.Drawing.Point(56, 99); + this.uiLabel3.Name = "uiLabel3"; + this.uiLabel3.Size = new System.Drawing.Size(42, 21); + this.uiLabel3.TabIndex = 6; + this.uiLabel3.Text = "性别"; + this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // rbMale + // + this.rbMale.Checked = true; + this.rbMale.Cursor = System.Windows.Forms.Cursors.Hand; + this.rbMale.Font = new System.Drawing.Font("微软雅黑", 12F); + this.rbMale.Location = new System.Drawing.Point(150, 95); + this.rbMale.Name = "rbMale"; + this.rbMale.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.rbMale.Size = new System.Drawing.Size(82, 29); + this.rbMale.TabIndex = 1; + this.rbMale.Text = "男"; + // + // rbFemale + // + this.rbFemale.Cursor = System.Windows.Forms.Cursors.Hand; + this.rbFemale.Font = new System.Drawing.Font("微软雅黑", 12F); + this.rbFemale.Location = new System.Drawing.Point(238, 95); + this.rbFemale.Name = "rbFemale"; + this.rbFemale.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.rbFemale.Size = new System.Drawing.Size(82, 29); + this.rbFemale.TabIndex = 2; + this.rbFemale.Text = "女"; + // + // edtAge + // + this.edtAge.Cursor = System.Windows.Forms.Cursors.IBeam; + this.edtAge.FillColor = System.Drawing.Color.White; + this.edtAge.Font = new System.Drawing.Font("微软雅黑", 12F); + this.edtAge.Location = new System.Drawing.Point(150, 135); + this.edtAge.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.edtAge.Name = "edtAge"; + this.edtAge.Padding = new System.Windows.Forms.Padding(5); + this.edtAge.Size = new System.Drawing.Size(170, 29); + this.edtAge.TabIndex = 3; + this.edtAge.Text = "0"; + this.edtAge.Type = Sunny.UI.UITextBox.UIEditType.Integer; + // + // uiLabel4 + // + this.uiLabel4.AutoSize = true; + this.uiLabel4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel4.Location = new System.Drawing.Point(56, 139); + this.uiLabel4.Name = "uiLabel4"; + this.uiLabel4.Size = new System.Drawing.Size(42, 21); + this.uiLabel4.TabIndex = 10; + this.uiLabel4.Text = "年龄"; + this.uiLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // cbDepartment + // + this.cbDepartment.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; + this.cbDepartment.FillColor = System.Drawing.Color.White; + this.cbDepartment.Font = new System.Drawing.Font("微软雅黑", 12F); + this.cbDepartment.Items.AddRange(new object[] { + "研发部", + "采购部", + "生产部", + "销售部", + "人事部", + "财务部", + "行政部", + "其他"}); + this.cbDepartment.Location = new System.Drawing.Point(150, 175); + this.cbDepartment.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.cbDepartment.MinimumSize = new System.Drawing.Size(63, 0); + this.cbDepartment.Name = "cbDepartment"; + this.cbDepartment.Padding = new System.Windows.Forms.Padding(0, 0, 30, 0); + this.cbDepartment.Size = new System.Drawing.Size(170, 29); + this.cbDepartment.TabIndex = 4; + this.cbDepartment.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel5 + // + this.uiLabel5.AutoSize = true; + this.uiLabel5.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel5.Location = new System.Drawing.Point(56, 179); + this.uiLabel5.Name = "uiLabel5"; + this.uiLabel5.Size = new System.Drawing.Size(42, 21); + this.uiLabel5.TabIndex = 12; + this.uiLabel5.Text = "部门"; + this.uiLabel5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel6 + // + this.uiLabel6.AutoSize = true; + this.uiLabel6.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel6.Location = new System.Drawing.Point(56, 219); + this.uiLabel6.Name = "uiLabel6"; + this.uiLabel6.Size = new System.Drawing.Size(42, 21); + this.uiLabel6.TabIndex = 13; + this.uiLabel6.Text = "生日"; + this.uiLabel6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // edtDate + // + this.edtDate.DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; + this.edtDate.FillColor = System.Drawing.Color.White; + this.edtDate.Font = new System.Drawing.Font("微软雅黑", 12F); + this.edtDate.Location = new System.Drawing.Point(150, 215); + this.edtDate.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.edtDate.MinimumSize = new System.Drawing.Size(63, 0); + this.edtDate.Name = "edtDate"; + this.edtDate.Padding = new System.Windows.Forms.Padding(0, 0, 30, 0); + this.edtDate.Size = new System.Drawing.Size(170, 29); + this.edtDate.TabIndex = 5; + this.edtDate.Text = "2020-05-08"; + this.edtDate.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.edtDate.Value = new System.DateTime(2020, 5, 8, 0, 0, 0, 0); + // + // edtAddress + // + this.edtAddress.Cursor = System.Windows.Forms.Cursors.IBeam; + this.edtAddress.FillColor = System.Drawing.Color.White; + this.edtAddress.Font = new System.Drawing.Font("微软雅黑", 12F); + this.edtAddress.Location = new System.Drawing.Point(150, 254); + this.edtAddress.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.edtAddress.Name = "edtAddress"; + this.edtAddress.Padding = new System.Windows.Forms.Padding(5); + this.edtAddress.Size = new System.Drawing.Size(340, 29); + this.edtAddress.TabIndex = 6; + // + // uiLabel1 + // + this.uiLabel1.AutoSize = true; + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLabel1.Location = new System.Drawing.Point(56, 258); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(42, 21); + this.uiLabel1.TabIndex = 15; + this.uiLabel1.Text = "住址"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FEdit + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(520, 362); + this.Controls.Add(this.edtAddress); + this.Controls.Add(this.uiLabel1); + this.Controls.Add(this.edtDate); + this.Controls.Add(this.uiLabel6); + this.Controls.Add(this.uiLabel5); + this.Controls.Add(this.cbDepartment); + this.Controls.Add(this.uiLabel4); + this.Controls.Add(this.edtAge); + this.Controls.Add(this.rbFemale); + this.Controls.Add(this.rbMale); + this.Controls.Add(this.uiLabel3); + this.Controls.Add(this.edtName); + this.Controls.Add(this.uiLabel2); + this.Name = "FEdit"; + this.Text = "UIEditFrom"; + this.Controls.SetChildIndex(this.pnlBtm, 0); + this.Controls.SetChildIndex(this.uiLabel2, 0); + this.Controls.SetChildIndex(this.edtName, 0); + this.Controls.SetChildIndex(this.uiLabel3, 0); + this.Controls.SetChildIndex(this.rbMale, 0); + this.Controls.SetChildIndex(this.rbFemale, 0); + this.Controls.SetChildIndex(this.edtAge, 0); + this.Controls.SetChildIndex(this.uiLabel4, 0); + this.Controls.SetChildIndex(this.cbDepartment, 0); + this.Controls.SetChildIndex(this.uiLabel5, 0); + this.Controls.SetChildIndex(this.uiLabel6, 0); + this.Controls.SetChildIndex(this.edtDate, 0); + this.Controls.SetChildIndex(this.uiLabel1, 0); + this.Controls.SetChildIndex(this.edtAddress, 0); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private UITextBox edtName; + private UILabel uiLabel2; + private UILabel uiLabel3; + private UIRadioButton rbMale; + private UIRadioButton rbFemale; + private UITextBox edtAge; + private UILabel uiLabel4; + private UIComboBox cbDepartment; + private UILabel uiLabel5; + private UILabel uiLabel6; + private UIDatePicker edtDate; + private UITextBox edtAddress; + private UILabel uiLabel1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/FEdit.cs b/SunnyUI.Demo/Forms/FEdit.cs new file mode 100644 index 00000000..da10ed1d --- /dev/null +++ b/SunnyUI.Demo/Forms/FEdit.cs @@ -0,0 +1,55 @@ +namespace Sunny.UI.Demo.Forms +{ + public partial class FEdit : UIEditForm + { + public FEdit() + { + InitializeComponent(); + } + + protected override bool CheckData() + { + return CheckEmpty(edtName, "请输入姓名") + && CheckEmpty(edtAge, "请输入年龄") + && CheckRange(edtAge, 18, 60, "输入年龄范围18~60") + && CheckEmpty(cbDepartment, "请选择部门") + && CheckEmpty(edtDate, "请选择生日"); + } + + private Person person; + + public Person Person + { + get + { + if (person == null) + { + person = new Person(); + } + + person.Name = edtName.Text; + person.Age = edtAge.IntValue; + person.Birthday = edtDate.Value; + person.Address = edtAddress.Text; + if (rbMale.Checked) + person.Sex = Sex.Male; + if (rbFemale.Checked) + person.Sex = Sex.Female; + person.Department = cbDepartment.Text; + return person; + } + + set + { + person = value; + edtName.Text = value.Name; + edtAge.IntValue = value.Age; + edtDate.Value = value.Birthday; + edtAddress.Text = value.Address; + cbDepartment.SelectedIndex = cbDepartment.Items.IndexOf(value.Department); + rbMale.Checked = value.Sex == Sex.Male; + rbFemale.Checked = value.Sex == Sex.Female; + } + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/FEdit.resx b/SunnyUI.Demo/Forms/FEdit.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/FEdit.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/SunnyUI.Demo/Forms/FEditor.Designer.cs b/SunnyUI.Demo/Forms/FEditor.Designer.cs new file mode 100644 index 00000000..a340378c --- /dev/null +++ b/SunnyUI.Demo/Forms/FEditor.Designer.cs @@ -0,0 +1,98 @@ +namespace Sunny.UI.Demo.Forms +{ + partial class FEditor + { + /// + /// 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.btnEdit = new Sunny.UI.UISymbolButton(); + this.uiLine1 = new Sunny.UI.UILine(); + this.btnAdd = new Sunny.UI.UISymbolButton(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.btnAdd); + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.btnEdit); + // + // btnEdit + // + this.btnEdit.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnEdit.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnEdit.Location = new System.Drawing.Point(152, 57); + this.btnEdit.Name = "btnEdit"; + this.btnEdit.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnEdit.Size = new System.Drawing.Size(100, 35); + this.btnEdit.Symbol = 61508; + this.btnEdit.TabIndex = 0; + this.btnEdit.Text = "编辑"; + this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click); + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 19; + this.uiLine1.Text = "UIEditForm"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // btnAdd + // + this.btnAdd.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAdd.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnAdd.Location = new System.Drawing.Point(30, 57); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.btnAdd.Size = new System.Drawing.Size(100, 35); + this.btnAdd.Symbol = 61543; + this.btnAdd.TabIndex = 20; + this.btnAdd.Text = "增加"; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // FEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FEditor"; + this.Text = "Editor"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolButton btnEdit; + private UILine uiLine1; + private UISymbolButton btnAdd; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/FEditor.cs b/SunnyUI.Demo/Forms/FEditor.cs new file mode 100644 index 00000000..3a7abc65 --- /dev/null +++ b/SunnyUI.Demo/Forms/FEditor.cs @@ -0,0 +1,70 @@ +using System; + +namespace Sunny.UI.Demo.Forms +{ + public partial class FEditor : UITitlePage + { + public FEditor() + { + InitializeComponent(); + } + + private void btnEdit_Click(object sender, System.EventArgs e) + { + Person person = new Person(); + person.Name = "SunnyUI"; + person.Sex = Sex.Male; + person.Age = 18; + person.Department = "研发部"; + person.Birthday = new DateTime(2002, 1, 1); + + FEdit frm = new FEdit(); + frm.Person = person; + frm.ShowDialog(); + if (frm.IsOK) + { + this.ShowSuccessDialog(frm.Person.ToString()); + } + + frm.Dispose(); + } + + private void btnAdd_Click(object sender, EventArgs e) + { + FEdit frm = new FEdit(); + frm.ShowDialog(); + if (frm.IsOK) + { + this.ShowSuccessDialog(frm.Person.ToString()); + } + + frm.Dispose(); + } + } + + public class Person + { + public string Name { get; set; } + + public int Age { get; set; } + + public Sex Sex { get; set; } + + public string Department { get; set; } + + public DateTime Birthday { get; set; } + + public string Address { get; set; } + + public override string ToString() + { + return Name + ", " + Age + ", " + Department; + } + } + + public enum Sex + { + Male, + Female + } +} diff --git a/SunnyUI.Demo/Forms/FEditor.resx b/SunnyUI.Demo/Forms/FEditor.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/FEditor.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/SunnyUI.Demo/Forms/FFrames.Designer.cs b/SunnyUI.Demo/Forms/FFrames.Designer.cs new file mode 100644 index 00000000..5a010f16 --- /dev/null +++ b/SunnyUI.Demo/Forms/FFrames.Designer.cs @@ -0,0 +1,203 @@ +namespace Sunny.UI.Demo +{ + partial class FFrames + { + /// + /// 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.uiLine1 = new Sunny.UI.UILine(); + this.btnAM = new Sunny.UI.UIImageButton(); + this.btnAHMF = new Sunny.UI.UIImageButton(); + this.btnHAMF = new Sunny.UI.UIImageButton(); + this.btnHAM = new Sunny.UI.UIImageButton(); + this.btnAHM = new Sunny.UI.UIImageButton(); + this.btnHMF = new Sunny.UI.UIImageButton(); + this.btnHM = new Sunny.UI.UIImageButton(); + this.PagePanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.btnAM)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnAHMF)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnHAMF)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnHAM)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnAHM)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnHMF)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnHM)).BeginInit(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiLine1); + this.PagePanel.Controls.Add(this.btnAM); + this.PagePanel.Controls.Add(this.btnAHMF); + this.PagePanel.Controls.Add(this.btnHAMF); + this.PagePanel.Controls.Add(this.btnHAM); + this.PagePanel.Controls.Add(this.btnAHM); + this.PagePanel.Controls.Add(this.btnHMF); + this.PagePanel.Controls.Add(this.btnHM); + this.PagePanel.Size = new System.Drawing.Size(892, 592); + this.PagePanel.Style = Sunny.UI.UIStyle.Blue; + // + // uiLine1 + // + this.uiLine1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLine1.Location = new System.Drawing.Point(30, 20); + this.uiLine1.MinimumSize = new System.Drawing.Size(16, 16); + this.uiLine1.Name = "uiLine1"; + this.uiLine1.Size = new System.Drawing.Size(670, 20); + this.uiLine1.TabIndex = 48; + this.uiLine1.Text = "UIMainFrame"; + this.uiLine1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // btnAM + // + this.btnAM.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAM.Image = global::Sunny.UI.Demo.Properties.Resources.AM; + this.btnAM.ImageHover = global::Sunny.UI.Demo.Properties.Resources.AM1; + this.btnAM.Location = new System.Drawing.Point(30, 381); + this.btnAM.Name = "btnAM"; + this.btnAM.Size = new System.Drawing.Size(160, 120); + this.btnAM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.btnAM.TabIndex = 7; + this.btnAM.TabStop = false; + this.btnAM.Text = null; + this.btnAM.Click += new System.EventHandler(this.btnAM_Click); + // + // btnAHMF + // + this.btnAHMF.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAHMF.Image = global::Sunny.UI.Demo.Properties.Resources.AHMF; + this.btnAHMF.ImageHover = global::Sunny.UI.Demo.Properties.Resources.AHMF1; + this.btnAHMF.Location = new System.Drawing.Point(430, 381); + this.btnAHMF.Name = "btnAHMF"; + this.btnAHMF.Size = new System.Drawing.Size(160, 120); + this.btnAHMF.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.btnAHMF.TabIndex = 6; + this.btnAHMF.TabStop = false; + this.btnAHMF.Text = null; + this.btnAHMF.Click += new System.EventHandler(this.btnAHMF_Click); + // + // btnHAMF + // + this.btnHAMF.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnHAMF.Image = global::Sunny.UI.Demo.Properties.Resources.HAMF; + this.btnHAMF.ImageHover = global::Sunny.UI.Demo.Properties.Resources.HAMF1; + this.btnHAMF.Location = new System.Drawing.Point(230, 221); + this.btnHAMF.Name = "btnHAMF"; + this.btnHAMF.Size = new System.Drawing.Size(160, 120); + this.btnHAMF.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.btnHAMF.TabIndex = 5; + this.btnHAMF.TabStop = false; + this.btnHAMF.Text = null; + this.btnHAMF.Click += new System.EventHandler(this.btnHAMF_Click); + // + // btnHAM + // + this.btnHAM.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnHAM.Image = global::Sunny.UI.Demo.Properties.Resources.HAM; + this.btnHAM.ImageHover = global::Sunny.UI.Demo.Properties.Resources.HAM1; + this.btnHAM.Location = new System.Drawing.Point(30, 221); + this.btnHAM.Name = "btnHAM"; + this.btnHAM.Size = new System.Drawing.Size(160, 120); + this.btnHAM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.btnHAM.TabIndex = 4; + this.btnHAM.TabStop = false; + this.btnHAM.Text = null; + this.btnHAM.Click += new System.EventHandler(this.btnHAM_Click); + // + // btnAHM + // + this.btnAHM.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAHM.Image = global::Sunny.UI.Demo.Properties.Resources.AHM; + this.btnAHM.ImageHover = global::Sunny.UI.Demo.Properties.Resources.AHM1; + this.btnAHM.Location = new System.Drawing.Point(230, 381); + this.btnAHM.Name = "btnAHM"; + this.btnAHM.Size = new System.Drawing.Size(160, 120); + this.btnAHM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.btnAHM.TabIndex = 3; + this.btnAHM.TabStop = false; + this.btnAHM.Text = null; + this.btnAHM.Click += new System.EventHandler(this.btnAHM_Click); + // + // btnHMF + // + this.btnHMF.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnHMF.Image = global::Sunny.UI.Demo.Properties.Resources.HMF; + this.btnHMF.ImageHover = global::Sunny.UI.Demo.Properties.Resources.HMF1; + this.btnHMF.Location = new System.Drawing.Point(230, 61); + this.btnHMF.Name = "btnHMF"; + this.btnHMF.Size = new System.Drawing.Size(160, 120); + this.btnHMF.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.btnHMF.TabIndex = 2; + this.btnHMF.TabStop = false; + this.btnHMF.Text = null; + this.btnHMF.Click += new System.EventHandler(this.btnHMF_Click); + // + // btnHM + // + this.btnHM.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnHM.Image = global::Sunny.UI.Demo.Properties.Resources.HM; + this.btnHM.ImageHover = global::Sunny.UI.Demo.Properties.Resources.HM1; + this.btnHM.Location = new System.Drawing.Point(30, 61); + this.btnHM.Name = "btnHM"; + this.btnHM.Size = new System.Drawing.Size(160, 120); + this.btnHM.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.btnHM.TabIndex = 1; + this.btnHM.TabStop = false; + this.btnHM.Text = null; + this.btnHM.TextAlign = System.Drawing.ContentAlignment.BottomCenter; + this.btnHM.Click += new System.EventHandler(this.btnHM_Click); + // + // FFrames + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(892, 627); + this.Name = "FFrames"; + this.Style = Sunny.UI.UIStyle.Blue; + this.Text = "Frames"; + this.PagePanel.ResumeLayout(false); + this.PagePanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.btnAM)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnAHMF)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnHAMF)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnHAM)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnAHM)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnHMF)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.btnHM)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + private UIImageButton btnHM; + private UIImageButton btnAM; + private UIImageButton btnAHMF; + private UIImageButton btnHAMF; + private UIImageButton btnHAM; + private UIImageButton btnAHM; + private UIImageButton btnHMF; + private UILine uiLine1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/FFrames.cs b/SunnyUI.Demo/Forms/FFrames.cs new file mode 100644 index 00000000..a4106f86 --- /dev/null +++ b/SunnyUI.Demo/Forms/FFrames.cs @@ -0,0 +1,54 @@ +using System.Windows.Forms; + +namespace Sunny.UI.Demo +{ + public partial class FFrames : UITitlePage + { + public FFrames() + { + InitializeComponent(); + } + + private void ShowFrame(UIMainFrame frame) + { + frame.WindowState = FormWindowState.Maximized; + frame.ShowDialog(); + frame.Dispose(); + } + + private void btnHM_Click(object sender, System.EventArgs e) + { + ShowFrame(new FHeaderMain()); + } + + private void btnHMF_Click(object sender, System.EventArgs e) + { + ShowFrame(new FHeaderMainFooter()); + } + + private void btnHAM_Click(object sender, System.EventArgs e) + { + ShowFrame(new FHeaderAsideMain()); + } + + private void btnHAMF_Click(object sender, System.EventArgs e) + { + ShowFrame(new FHeaderAsideMainFooter()); + } + + private void btnAM_Click(object sender, System.EventArgs e) + { + ShowFrame(new FAsideMain()); + } + + private void btnAHM_Click(object sender, System.EventArgs e) + { + ShowFrame(new FAsideHeaderMain()); + } + + private void btnAHMF_Click(object sender, System.EventArgs e) + { + ShowFrame(new FAsideHeaderMainFooter()); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/FFrames.resx b/SunnyUI.Demo/Forms/FFrames.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/FFrames.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/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.Designer.cs b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.Designer.cs new file mode 100644 index 00000000..0eaef188 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.Designer.cs @@ -0,0 +1,66 @@ +namespace Sunny.UI.Demo +{ + partial class FAsideHeaderMain + { + /// + /// 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(); + // + // Header + // + this.Header.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(76)))), ((int)(((byte)(76))))); + this.Header.ForeColor = System.Drawing.Color.White; + this.Header.Size = new System.Drawing.Size(774, 57); + this.Header.Style = Sunny.UI.UIStyle.Custom; + this.Header.StyleCustomMode = true; + // + // Aside + // + this.Aside.Size = new System.Drawing.Size(250, 685); + this.Aside.Style = Sunny.UI.UIStyle.Blue; + this.Aside.MenuItemClick += new Sunny.UI.UINavMenu.OnMenuItemClick(this.Aside_MenuItemClick); + // + // Main + // + this.Main.Size = new System.Drawing.Size(774, 628); + this.Main.Style = Sunny.UI.UIStyle.Blue; + // + // FAsideHeaderMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1024, 720); + this.Name = "FAsideHeaderMain"; + this.Style = Sunny.UI.UIStyle.Blue; + this.Text = "FAsideHeaderMain"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.cs b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.cs new file mode 100644 index 00000000..5c258516 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.cs @@ -0,0 +1,31 @@ +namespace Sunny.UI.Demo +{ + public partial class FAsideHeaderMain : UIAsideHeaderMainFrame + { + public FAsideHeaderMain() + { + InitializeComponent(); + + //设置关联 + Aside.TabControl = Main; + + //增加页面到Main + AddPage(new FPage1(), 1001); + AddPage(new FPage2(), 1002); + AddPage(new FPage3(), 1003); + + //设置Header节点索引 + Aside.CreateNode("Page1", 1001); + Aside.CreateNode("Page2", 1002); + Aside.CreateNode("Page3", 1003); + + //显示默认界面 + Aside.SelectFirst(); + } + + private void Aside_MenuItemClick(System.Windows.Forms.TreeNode node, NavMenuItem item, int pageIndex) + { + Header.Text = "PageIndex: " + pageIndex; + } + } +} diff --git a/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.resx b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMain.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/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.Designer.cs b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.Designer.cs new file mode 100644 index 00000000..e9ca9afa --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.Designer.cs @@ -0,0 +1,71 @@ +namespace Sunny.UI.Demo +{ + partial class FAsideHeaderMainFooter + { + /// + /// 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(); + // + // Footer + // + this.Footer.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.Footer.Location = new System.Drawing.Point(250, 664); + this.Footer.Size = new System.Drawing.Size(774, 56); + this.Footer.Style = Sunny.UI.UIStyle.Custom; + this.Footer.StyleCustomMode = true; + // + // Header + // + this.Header.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(76)))), ((int)(((byte)(76))))); + this.Header.ForeColor = System.Drawing.Color.White; + this.Header.Size = new System.Drawing.Size(774, 57); + this.Header.Style = Sunny.UI.UIStyle.Custom; + this.Header.StyleCustomMode = true; + // + // Aside + // + this.Aside.Size = new System.Drawing.Size(250, 685); + this.Aside.MenuItemClick += new Sunny.UI.UINavMenu.OnMenuItemClick(this.Aside_MenuItemClick); + // + // Main + // + this.Main.Size = new System.Drawing.Size(774, 572); + // + // FAsideHeaderMainFooter + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1024, 720); + this.Name = "FAsideHeaderMainFooter"; + this.Text = "FAsideHeaderMainFooter"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.cs b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.cs new file mode 100644 index 00000000..02ab2a7f --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.cs @@ -0,0 +1,31 @@ +namespace Sunny.UI.Demo +{ + public partial class FAsideHeaderMainFooter : UIAsideHeaderMainFooterFrame + { + public FAsideHeaderMainFooter() + { + InitializeComponent(); + + //设置关联 + Aside.TabControl = Main; + + //增加页面到Main + AddPage(new FPage1(), 1001); + AddPage(new FPage2(), 1002); + AddPage(new FPage3(), 1003); + + //设置Header节点索引 + Aside.CreateNode("Page1", 1001); + Aside.CreateNode("Page2", 1002); + Aside.CreateNode("Page3", 1003); + + //显示默认界面 + Aside.SelectFirst(); + } + + private void Aside_MenuItemClick(System.Windows.Forms.TreeNode node, NavMenuItem item, int pageIndex) + { + Footer.Text = Header.Text = "PageIndex: " + pageIndex; + } + } +} diff --git a/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.resx b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideHeaderMainFooter.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/SunnyUI.Demo/Forms/Frames/FAsideMain.Designer.cs b/SunnyUI.Demo/Forms/Frames/FAsideMain.Designer.cs new file mode 100644 index 00000000..ab4a3309 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideMain.Designer.cs @@ -0,0 +1,58 @@ +namespace Sunny.UI.Demo +{ + partial class FAsideMain + { + /// + /// 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(); + // + // Aside + // + this.Aside.LineColor = System.Drawing.Color.Black; + this.Aside.Size = new System.Drawing.Size(250, 685); + this.Aside.Style = Sunny.UI.UIStyle.Blue; + // + // Main + // + this.Main.Size = new System.Drawing.Size(774, 685); + this.Main.Style = Sunny.UI.UIStyle.Blue; + // + // FAsideMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1024, 720); + this.Name = "FAsideMain"; + this.Style = Sunny.UI.UIStyle.Blue; + this.Text = "FAsideMain"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Frames/FAsideMain.cs b/SunnyUI.Demo/Forms/Frames/FAsideMain.cs new file mode 100644 index 00000000..d4d1e496 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideMain.cs @@ -0,0 +1,26 @@ +namespace Sunny.UI.Demo +{ + public partial class FAsideMain : UIAsideMainFrame + { + public FAsideMain() + { + InitializeComponent(); + + //设置关联 + Aside.TabControl = Main; + + //增加页面到Main + AddPage(new FTitlePage1(), 1001); + AddPage(new FTitlePage2(), 1002); + AddPage(new FTitlePage3(), 1003); + + //设置Header节点索引 + Aside.CreateNode("Page1", 1001); + Aside.CreateNode("Page2", 1002); + Aside.CreateNode("Page3", 1003); + + //显示默认界面 + Aside.SelectFirst(); + } + } +} diff --git a/SunnyUI.Demo/Forms/Frames/FAsideMain.resx b/SunnyUI.Demo/Forms/Frames/FAsideMain.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FAsideMain.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/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.Designer.cs b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.Designer.cs new file mode 100644 index 00000000..ab9e25e9 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.Designer.cs @@ -0,0 +1,81 @@ +namespace Sunny.UI.Demo +{ + partial class FHeaderAsideMain + { + /// + /// 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.uiLogo1 = new Sunny.UI.UILogo(); + this.Header.SuspendLayout(); + this.SuspendLayout(); + // + // Aside + // + this.Aside.LineColor = System.Drawing.Color.Black; + this.Aside.Size = new System.Drawing.Size(250, 575); + this.Aside.Style = Sunny.UI.UIStyle.Blue; + // + // Header + // + this.Header.Controls.Add(this.uiLogo1); + this.Header.Size = new System.Drawing.Size(1024, 110); + this.Header.Style = Sunny.UI.UIStyle.Blue; + // + // Main + // + this.Main.Size = new System.Drawing.Size(774, 575); + this.Main.Style = Sunny.UI.UIStyle.Blue; + // + // uiLogo1 + // + this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLogo1.Location = new System.Drawing.Point(15, 15); + this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.Name = "uiLogo1"; + this.uiLogo1.Size = new System.Drawing.Size(300, 80); + this.uiLogo1.Style = Sunny.UI.UIStyle.Custom; + this.uiLogo1.TabIndex = 1; + this.uiLogo1.Text = "uiLogo1"; + // + // FHeaderAsideMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1024, 720); + this.Name = "FHeaderAsideMain"; + this.Style = Sunny.UI.UIStyle.Blue; + this.Text = "FHeaderAsideMain"; + this.Header.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UILogo uiLogo1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.cs b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.cs new file mode 100644 index 00000000..e0024758 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.cs @@ -0,0 +1,26 @@ +namespace Sunny.UI.Demo +{ + public partial class FHeaderAsideMain : UIHeaderAsideMainFrame + { + public FHeaderAsideMain() + { + InitializeComponent(); + + //设置关联 + Aside.TabControl = Main; + + //增加页面到Main + AddPage(new FTitlePage1(), 1001); + AddPage(new FTitlePage2(), 1002); + AddPage(new FTitlePage3(), 1003); + + //设置Header节点索引 + Aside.CreateNode("Page1", 1001); + Aside.CreateNode("Page2", 1002); + Aside.CreateNode("Page3", 1003); + + //显示默认界面 + Aside.SelectFirst(); + } + } +} diff --git a/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.resx b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMain.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/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.Designer.cs b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.Designer.cs new file mode 100644 index 00000000..61f23f55 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.Designer.cs @@ -0,0 +1,88 @@ +namespace Sunny.UI.Demo +{ + partial class FHeaderAsideMainFooter + { + /// + /// 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.uiLogo1 = new Sunny.UI.UILogo(); + this.Header.SuspendLayout(); + this.SuspendLayout(); + // + // Footer + // + this.Footer.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.Footer.Location = new System.Drawing.Point(250, 664); + this.Footer.Size = new System.Drawing.Size(774, 56); + this.Footer.Style = Sunny.UI.UIStyle.Custom; + this.Footer.StyleCustomMode = true; + // + // Aside + // + this.Aside.Size = new System.Drawing.Size(250, 575); + this.Aside.Style = Sunny.UI.UIStyle.Blue; + this.Aside.MenuItemClick += new Sunny.UI.UINavMenu.OnMenuItemClick(this.Aside_MenuItemClick); + // + // Header + // + this.Header.Controls.Add(this.uiLogo1); + this.Header.Size = new System.Drawing.Size(1024, 110); + this.Header.Style = Sunny.UI.UIStyle.Blue; + // + // Main + // + this.Main.Size = new System.Drawing.Size(774, 519); + this.Main.Style = Sunny.UI.UIStyle.Blue; + // + // uiLogo1 + // + this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLogo1.Location = new System.Drawing.Point(15, 15); + this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.Name = "uiLogo1"; + this.uiLogo1.Size = new System.Drawing.Size(300, 80); + this.uiLogo1.TabIndex = 2; + this.uiLogo1.Text = "uiLogo1"; + // + // FHeaderAsideMainFooter + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1024, 720); + this.Name = "FHeaderAsideMainFooter"; + this.Style = Sunny.UI.UIStyle.Blue; + this.Text = "FHeaderAsideMainFooter"; + this.Header.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UILogo uiLogo1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.cs b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.cs new file mode 100644 index 00000000..ccec642c --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.cs @@ -0,0 +1,31 @@ +namespace Sunny.UI.Demo +{ + public partial class FHeaderAsideMainFooter : UIHeaderAsideMainFooterFrame + { + public FHeaderAsideMainFooter() + { + InitializeComponent(); + + //设置关联 + Aside.TabControl = Main; + + //增加页面到Main + AddPage(new FTitlePage1(), 1001); + AddPage(new FTitlePage2(), 1002); + AddPage(new FTitlePage3(), 1003); + + //设置Header节点索引 + Aside.CreateNode("Page1", 1001); + Aside.CreateNode("Page2", 1002); + Aside.CreateNode("Page3", 1003); + + //显示默认界面 + Aside.SelectFirst(); + } + + private void Aside_MenuItemClick(System.Windows.Forms.TreeNode node, NavMenuItem item, int pageIndex) + { + Footer.Text = "PageIndex: " + pageIndex; + } + } +} diff --git a/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.resx b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderAsideMainFooter.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/SunnyUI.Demo/Forms/Frames/FHeaderMain.Designer.cs b/SunnyUI.Demo/Forms/Frames/FHeaderMain.Designer.cs new file mode 100644 index 00000000..434bb2fb --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderMain.Designer.cs @@ -0,0 +1,87 @@ +namespace Sunny.UI.Demo +{ + partial class FHeaderMain + { + /// + /// 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.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Page1"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Page2"); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Page3"); + this.uiLogo1 = new Sunny.UI.UILogo(); + this.Header.SuspendLayout(); + this.SuspendLayout(); + // + // Header + // + this.Header.Controls.Add(this.uiLogo1); + this.Header.Location = new System.Drawing.Point(0, 35); + treeNode1.Name = "节点0"; + treeNode1.Text = "Page1"; + treeNode2.Name = "节点1"; + treeNode2.Text = "Page2"; + treeNode3.Name = "节点2"; + treeNode3.Text = "Page3"; + this.Header.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode1, + treeNode2, + treeNode3}); + this.Header.Size = new System.Drawing.Size(1024, 110); + this.Header.TabControl = this.Main; + // + // Main + // + this.Main.Size = new System.Drawing.Size(1024, 575); + // + // uiLogo1 + // + this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLogo1.Location = new System.Drawing.Point(15, 15); + this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.Name = "uiLogo1"; + this.uiLogo1.Size = new System.Drawing.Size(300, 80); + this.uiLogo1.Style = Sunny.UI.UIStyle.Custom; + this.uiLogo1.TabIndex = 0; + this.uiLogo1.Text = "uiLogo1"; + // + // FHeaderMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1024, 720); + this.Name = "FHeaderMain"; + this.Text = "FHeaderMain"; + this.Header.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UILogo uiLogo1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Frames/FHeaderMain.cs b/SunnyUI.Demo/Forms/Frames/FHeaderMain.cs new file mode 100644 index 00000000..927e4a2f --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderMain.cs @@ -0,0 +1,26 @@ +namespace Sunny.UI.Demo +{ + public partial class FHeaderMain : UIHeaderMainFrame + { + public FHeaderMain() + { + InitializeComponent(); + + //设置关联 + Header.TabControl = Main; + + //增加页面到Main + AddPage(new FTitlePage1(), 1001); + AddPage(new FTitlePage2(), 1002); + AddPage(new FTitlePage3(), 1003); + + //设置Header节点索引 + Header.SetNodePageIndex(Header.Nodes[0], 1001); + Header.SetNodePageIndex(Header.Nodes[1], 1002); + Header.SetNodePageIndex(Header.Nodes[2], 1003); + + //显示默认界面 + Header.SelectedIndex = 0; + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Frames/FHeaderMain.resx b/SunnyUI.Demo/Forms/Frames/FHeaderMain.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderMain.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/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.Designer.cs b/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.Designer.cs new file mode 100644 index 00000000..e59c6989 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.Designer.cs @@ -0,0 +1,85 @@ +namespace Sunny.UI.Demo +{ + partial class FHeaderMainFooter + { + /// + /// 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.uiLogo1 = new Sunny.UI.UILogo(); + this.Header.SuspendLayout(); + this.SuspendLayout(); + // + // Footer + // + this.Footer.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.Footer.Location = new System.Drawing.Point(0, 664); + this.Footer.Size = new System.Drawing.Size(1024, 56); + this.Footer.Style = Sunny.UI.UIStyle.Custom; + this.Footer.StyleCustomMode = true; + this.Footer.Text = ""; + // + // Header + // + this.Header.Controls.Add(this.uiLogo1); + this.Header.Size = new System.Drawing.Size(1024, 110); + this.Header.Style = Sunny.UI.UIStyle.Blue; + this.Header.MenuItemClick += new Sunny.UI.UINavBar.OnMenuItemClick(this.Header_MenuItemClick); + // + // Main + // + this.Main.Size = new System.Drawing.Size(1024, 519); + this.Main.Style = Sunny.UI.UIStyle.Blue; + // + // uiLogo1 + // + this.uiLogo1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.uiLogo1.Location = new System.Drawing.Point(15, 15); + this.uiLogo1.MaximumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.MinimumSize = new System.Drawing.Size(300, 80); + this.uiLogo1.Name = "uiLogo1"; + this.uiLogo1.Size = new System.Drawing.Size(300, 80); + this.uiLogo1.Style = Sunny.UI.UIStyle.Custom; + this.uiLogo1.TabIndex = 1; + this.uiLogo1.Text = "uiLogo1"; + // + // FHeaderMainFooter + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1024, 720); + this.Name = "FHeaderMainFooter"; + this.Style = Sunny.UI.UIStyle.Blue; + this.Text = "FHeaderMainFooter"; + this.Header.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UILogo uiLogo1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.cs b/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.cs new file mode 100644 index 00000000..4e66a855 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.cs @@ -0,0 +1,31 @@ +namespace Sunny.UI.Demo +{ + public partial class FHeaderMainFooter : UIHeaderMainFooterFrame + { + public FHeaderMainFooter() + { + InitializeComponent(); + + //设置关联 + Header.TabControl = Main; + + //增加页面到Main + AddPage(new FTitlePage1(), 1001); + AddPage(new FTitlePage2(), 1002); + AddPage(new FTitlePage3(), 1003); + + //设置Header节点索引 + Header.CreateNode("Page1", 1001); + Header.CreateNode("Page2", 1002); + Header.CreateNode("Page3", 1003); + + //显示默认界面 + Header.SelectedIndex = 0; + } + + private void Header_MenuItemClick(string text, int menuIndex, int pageIndex) + { + Footer.Text = "PageIndex: " + pageIndex; + } + } +} diff --git a/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.resx b/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Frames/FHeaderMainFooter.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/SunnyUI.Demo/Forms/Pages/FPage1.Designer.cs b/SunnyUI.Demo/Forms/Pages/FPage1.Designer.cs new file mode 100644 index 00000000..71b009b3 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage1.Designer.cs @@ -0,0 +1,67 @@ +namespace Sunny.UI.Demo +{ + partial class FPage1 + { + /// + /// 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.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel(); + this.SuspendLayout(); + // + // uiSymbolLabel1 + // + this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0); + this.uiSymbolLabel1.Name = "uiSymbolLabel1"; + this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0); + this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 450); + this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiSymbolLabel1.StyleCustomMode = true; + this.uiSymbolLabel1.Symbol = 61530; + this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiSymbolLabel1.SymbolSize = 64; + this.uiSymbolLabel1.TabIndex = 0; + this.uiSymbolLabel1.Text = "This is Page1"; + // + // FPage1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.uiSymbolLabel1); + this.Name = "FPage1"; + this.Text = "FPage1"; + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolLabel uiSymbolLabel1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FPage1.cs b/SunnyUI.Demo/Forms/Pages/FPage1.cs new file mode 100644 index 00000000..3ba5432d --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage1.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FPage1 : UIPage + { + public FPage1() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FPage1.resx b/SunnyUI.Demo/Forms/Pages/FPage1.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage1.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/SunnyUI.Demo/Forms/Pages/FPage2.Designer.cs b/SunnyUI.Demo/Forms/Pages/FPage2.Designer.cs new file mode 100644 index 00000000..3a66d1ba --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage2.Designer.cs @@ -0,0 +1,67 @@ +namespace Sunny.UI.Demo +{ + partial class FPage2 + { + /// + /// 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.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel(); + this.SuspendLayout(); + // + // uiSymbolLabel1 + // + this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0); + this.uiSymbolLabel1.Name = "uiSymbolLabel1"; + this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0); + this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 450); + this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiSymbolLabel1.StyleCustomMode = true; + this.uiSymbolLabel1.Symbol = 61528; + this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolLabel1.SymbolSize = 64; + this.uiSymbolLabel1.TabIndex = 1; + this.uiSymbolLabel1.Text = "This is Page2"; + // + // FPage2 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.uiSymbolLabel1); + this.Name = "FPage2"; + this.Text = "FPage2"; + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolLabel uiSymbolLabel1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FPage2.cs b/SunnyUI.Demo/Forms/Pages/FPage2.cs new file mode 100644 index 00000000..0934075c --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage2.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FPage2 : UIPage + { + public FPage2() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FPage2.resx b/SunnyUI.Demo/Forms/Pages/FPage2.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage2.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/SunnyUI.Demo/Forms/Pages/FPage3.Designer.cs b/SunnyUI.Demo/Forms/Pages/FPage3.Designer.cs new file mode 100644 index 00000000..eeef82a7 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage3.Designer.cs @@ -0,0 +1,67 @@ +namespace Sunny.UI.Demo +{ + partial class FPage3 + { + /// + /// 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.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel(); + this.SuspendLayout(); + // + // uiSymbolLabel1 + // + this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0); + this.uiSymbolLabel1.Name = "uiSymbolLabel1"; + this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0); + this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 450); + this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiSymbolLabel1.StyleCustomMode = true; + this.uiSymbolLabel1.Symbol = 61553; + this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolLabel1.SymbolSize = 64; + this.uiSymbolLabel1.TabIndex = 2; + this.uiSymbolLabel1.Text = "This is Page3"; + // + // FPage3 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.uiSymbolLabel1); + this.Name = "FPage3"; + this.Text = "FPage3"; + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolLabel uiSymbolLabel1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FPage3.cs b/SunnyUI.Demo/Forms/Pages/FPage3.cs new file mode 100644 index 00000000..37850407 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage3.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FPage3 : UIPage + { + public FPage3() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FPage3.resx b/SunnyUI.Demo/Forms/Pages/FPage3.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FPage3.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/SunnyUI.Demo/Forms/Pages/FTitlePage1.Designer.cs b/SunnyUI.Demo/Forms/Pages/FTitlePage1.Designer.cs new file mode 100644 index 00000000..c4aa8dc0 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage1.Designer.cs @@ -0,0 +1,72 @@ +namespace Sunny.UI.Demo +{ + partial class FTitlePage1 + { + /// + /// 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.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiSymbolLabel1); + // + // uiSymbolLabel1 + // + this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0); + this.uiSymbolLabel1.Name = "uiSymbolLabel1"; + this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0); + this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 415); + this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiSymbolLabel1.StyleCustomMode = true; + this.uiSymbolLabel1.Symbol = 61530; + this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.uiSymbolLabel1.SymbolSize = 64; + this.uiSymbolLabel1.TabIndex = 1; + this.uiSymbolLabel1.Text = "This is TitlePage1"; + // + // FTitlePage1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FTitlePage1"; + this.Text = "FTitlePage1"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolLabel uiSymbolLabel1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FTitlePage1.cs b/SunnyUI.Demo/Forms/Pages/FTitlePage1.cs new file mode 100644 index 00000000..fe23f9ce --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage1.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FTitlePage1 : UITitlePage + { + public FTitlePage1() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FTitlePage1.resx b/SunnyUI.Demo/Forms/Pages/FTitlePage1.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage1.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/SunnyUI.Demo/Forms/Pages/FTitlePage2.Designer.cs b/SunnyUI.Demo/Forms/Pages/FTitlePage2.Designer.cs new file mode 100644 index 00000000..07116113 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage2.Designer.cs @@ -0,0 +1,72 @@ +namespace Sunny.UI.Demo +{ + partial class FTitlePage2 + { + /// + /// 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.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiSymbolLabel1); + // + // uiSymbolLabel1 + // + this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0); + this.uiSymbolLabel1.Name = "uiSymbolLabel1"; + this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0); + this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 415); + this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiSymbolLabel1.StyleCustomMode = true; + this.uiSymbolLabel1.Symbol = 61528; + this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(110)))), ((int)(((byte)(190)))), ((int)(((byte)(40))))); + this.uiSymbolLabel1.SymbolSize = 64; + this.uiSymbolLabel1.TabIndex = 2; + this.uiSymbolLabel1.Text = "This is TitlePage2"; + // + // FTitlePage2 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FTitlePage2"; + this.Text = "FTitlePage2"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolLabel uiSymbolLabel1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FTitlePage2.cs b/SunnyUI.Demo/Forms/Pages/FTitlePage2.cs new file mode 100644 index 00000000..1d3a0d13 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage2.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FTitlePage2 : UITitlePage + { + public FTitlePage2() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FTitlePage2.resx b/SunnyUI.Demo/Forms/Pages/FTitlePage2.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage2.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/SunnyUI.Demo/Forms/Pages/FTitlePage3.Designer.cs b/SunnyUI.Demo/Forms/Pages/FTitlePage3.Designer.cs new file mode 100644 index 00000000..78e09e33 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage3.Designer.cs @@ -0,0 +1,72 @@ +namespace Sunny.UI.Demo +{ + partial class FTitlePage3 + { + /// + /// 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.uiSymbolLabel1 = new Sunny.UI.UISymbolLabel(); + this.PagePanel.SuspendLayout(); + this.SuspendLayout(); + // + // PagePanel + // + this.PagePanel.Controls.Add(this.uiSymbolLabel1); + // + // uiSymbolLabel1 + // + this.uiSymbolLabel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSymbolLabel1.Font = new System.Drawing.Font("微软雅黑", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiSymbolLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolLabel1.Location = new System.Drawing.Point(0, 0); + this.uiSymbolLabel1.Name = "uiSymbolLabel1"; + this.uiSymbolLabel1.Padding = new System.Windows.Forms.Padding(68, 0, 0, 0); + this.uiSymbolLabel1.Size = new System.Drawing.Size(800, 415); + this.uiSymbolLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiSymbolLabel1.StyleCustomMode = true; + this.uiSymbolLabel1.Symbol = 61553; + this.uiSymbolLabel1.SymbolColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(155)))), ((int)(((byte)(40))))); + this.uiSymbolLabel1.SymbolSize = 64; + this.uiSymbolLabel1.TabIndex = 3; + this.uiSymbolLabel1.Text = "This is TitlePage3"; + // + // FTitlePage3 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "FTitlePage3"; + this.Text = "FTitlePage3"; + this.PagePanel.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolLabel uiSymbolLabel1; + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FTitlePage3.cs b/SunnyUI.Demo/Forms/Pages/FTitlePage3.cs new file mode 100644 index 00000000..84bb26da --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage3.cs @@ -0,0 +1,10 @@ +namespace Sunny.UI.Demo +{ + public partial class FTitlePage3 : UITitlePage + { + public FTitlePage3() + { + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Forms/Pages/FTitlePage3.resx b/SunnyUI.Demo/Forms/Pages/FTitlePage3.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI.Demo/Forms/Pages/FTitlePage3.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/SunnyUI.Demo/Program.cs b/SunnyUI.Demo/Program.cs new file mode 100644 index 00000000..5b2bc4e0 --- /dev/null +++ b/SunnyUI.Demo/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Windows.Forms; + +namespace Sunny.UI.Demo +{ + internal static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + private static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FMain()); + } + } +} \ No newline at end of file diff --git a/SunnyUI.Demo/Properties/AssemblyInfo.cs b/SunnyUI.Demo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..054225ee --- /dev/null +++ b/SunnyUI.Demo/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("Sunny.UI.Demo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Sunny.UI.Demo")] +[assembly: AssemblyCopyright("Copyright © 2019")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("17f96b36-7cae-4692-8b1f-b802482ecd09")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 +//通过使用 "*",如下所示: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/SunnyUI.Demo/Properties/Resources.Designer.cs b/SunnyUI.Demo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..5a5d4a89 --- /dev/null +++ b/SunnyUI.Demo/Properties/Resources.Designer.cs @@ -0,0 +1,283 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace Sunny.UI.Demo.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("Sunny.UI.Demo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性 + /// 重写当前线程的 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 AHM { + get { + object obj = ResourceManager.GetObject("AHM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap AHM1 { + get { + object obj = ResourceManager.GetObject("AHM1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap AHMF { + get { + object obj = ResourceManager.GetObject("AHMF", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap AHMF1 { + get { + object obj = ResourceManager.GetObject("AHMF1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap AM { + get { + object obj = ResourceManager.GetObject("AM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap AM1 { + get { + object obj = ResourceManager.GetObject("AM1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap dashboard { + get { + object obj = ResourceManager.GetObject("dashboard", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap dashboard0 { + get { + object obj = ResourceManager.GetObject("dashboard0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap HAM { + get { + object obj = ResourceManager.GetObject("HAM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap HAM1 { + get { + object obj = ResourceManager.GetObject("HAM1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap HAMF { + get { + object obj = ResourceManager.GetObject("HAMF", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap HAMF1 { + get { + object obj = ResourceManager.GetObject("HAMF1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap HM { + get { + object obj = ResourceManager.GetObject("HM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap HM1 { + get { + object obj = ResourceManager.GetObject("HM1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap HMF { + get { + object obj = ResourceManager.GetObject("HMF", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap HMF1 { + get { + object obj = ResourceManager.GetObject("HMF1", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap relationship { + get { + object obj = ResourceManager.GetObject("relationship", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap relationship0 { + get { + object obj = ResourceManager.GetObject("relationship0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap save { + get { + object obj = ResourceManager.GetObject("save", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap save0 { + get { + object obj = ResourceManager.GetObject("save0", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap SunnyUI { + get { + object obj = ResourceManager.GetObject("SunnyUI", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap SunnyUISmall { + get { + object obj = ResourceManager.GetObject("SunnyUISmall", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/SunnyUI.Demo/Properties/Resources.resx b/SunnyUI.Demo/Properties/Resources.resx new file mode 100644 index 00000000..c8be9658 --- /dev/null +++ b/SunnyUI.Demo/Properties/Resources.resx @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\AHM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\AHM1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\AHMF.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\AHMF1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\AM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\AM1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\dashboard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\dashboard0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HAM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HAM1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HAMF.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HAMF1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HM1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HMF.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\HMF1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\relationship.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\relationship0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\save.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\save0.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SunnyUI.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\SunnyUISmall.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/SunnyUI.Demo/Properties/Settings.Designer.cs b/SunnyUI.Demo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..dc98ff7c --- /dev/null +++ b/SunnyUI.Demo/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace Sunny.UI.Demo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.5.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/SunnyUI.Demo/Properties/Settings.settings b/SunnyUI.Demo/Properties/Settings.settings new file mode 100644 index 00000000..292b6157 --- /dev/null +++ b/SunnyUI.Demo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SunnyUI.Demo/Resources/AHM.png b/SunnyUI.Demo/Resources/AHM.png new file mode 100644 index 00000000..b1f6cd7e Binary files /dev/null and b/SunnyUI.Demo/Resources/AHM.png differ diff --git a/SunnyUI.Demo/Resources/AHM1.png b/SunnyUI.Demo/Resources/AHM1.png new file mode 100644 index 00000000..9f23b541 Binary files /dev/null and b/SunnyUI.Demo/Resources/AHM1.png differ diff --git a/SunnyUI.Demo/Resources/AHMF.png b/SunnyUI.Demo/Resources/AHMF.png new file mode 100644 index 00000000..a6bed5f3 Binary files /dev/null and b/SunnyUI.Demo/Resources/AHMF.png differ diff --git a/SunnyUI.Demo/Resources/AHMF1.png b/SunnyUI.Demo/Resources/AHMF1.png new file mode 100644 index 00000000..c8163977 Binary files /dev/null and b/SunnyUI.Demo/Resources/AHMF1.png differ diff --git a/SunnyUI.Demo/Resources/AM.png b/SunnyUI.Demo/Resources/AM.png new file mode 100644 index 00000000..013a0ef7 Binary files /dev/null and b/SunnyUI.Demo/Resources/AM.png differ diff --git a/SunnyUI.Demo/Resources/AM1.png b/SunnyUI.Demo/Resources/AM1.png new file mode 100644 index 00000000..505bf960 Binary files /dev/null and b/SunnyUI.Demo/Resources/AM1.png differ diff --git a/SunnyUI.Demo/Resources/HAM.png b/SunnyUI.Demo/Resources/HAM.png new file mode 100644 index 00000000..5681c96c Binary files /dev/null and b/SunnyUI.Demo/Resources/HAM.png differ diff --git a/SunnyUI.Demo/Resources/HAM1.png b/SunnyUI.Demo/Resources/HAM1.png new file mode 100644 index 00000000..2aa822c6 Binary files /dev/null and b/SunnyUI.Demo/Resources/HAM1.png differ diff --git a/SunnyUI.Demo/Resources/HAMF.png b/SunnyUI.Demo/Resources/HAMF.png new file mode 100644 index 00000000..c09e7535 Binary files /dev/null and b/SunnyUI.Demo/Resources/HAMF.png differ diff --git a/SunnyUI.Demo/Resources/HAMF1.png b/SunnyUI.Demo/Resources/HAMF1.png new file mode 100644 index 00000000..22a9687f Binary files /dev/null and b/SunnyUI.Demo/Resources/HAMF1.png differ diff --git a/SunnyUI.Demo/Resources/HM.png b/SunnyUI.Demo/Resources/HM.png new file mode 100644 index 00000000..0285868b Binary files /dev/null and b/SunnyUI.Demo/Resources/HM.png differ diff --git a/SunnyUI.Demo/Resources/HM1.png b/SunnyUI.Demo/Resources/HM1.png new file mode 100644 index 00000000..e814a474 Binary files /dev/null and b/SunnyUI.Demo/Resources/HM1.png differ diff --git a/SunnyUI.Demo/Resources/HMF.png b/SunnyUI.Demo/Resources/HMF.png new file mode 100644 index 00000000..9420be7c Binary files /dev/null and b/SunnyUI.Demo/Resources/HMF.png differ diff --git a/SunnyUI.Demo/Resources/HMF1.png b/SunnyUI.Demo/Resources/HMF1.png new file mode 100644 index 00000000..054648ac Binary files /dev/null and b/SunnyUI.Demo/Resources/HMF1.png differ diff --git a/SunnyUI.Demo/Resources/SunnyUI.png b/SunnyUI.Demo/Resources/SunnyUI.png new file mode 100644 index 00000000..187c7fb3 Binary files /dev/null and b/SunnyUI.Demo/Resources/SunnyUI.png differ diff --git a/SunnyUI.Demo/Resources/SunnyUISmall.png b/SunnyUI.Demo/Resources/SunnyUISmall.png new file mode 100644 index 00000000..32b7d149 Binary files /dev/null and b/SunnyUI.Demo/Resources/SunnyUISmall.png differ diff --git a/SunnyUI.Demo/Resources/dashboard.png b/SunnyUI.Demo/Resources/dashboard.png new file mode 100644 index 00000000..98271cb0 Binary files /dev/null and b/SunnyUI.Demo/Resources/dashboard.png differ diff --git a/SunnyUI.Demo/Resources/dashboard0.png b/SunnyUI.Demo/Resources/dashboard0.png new file mode 100644 index 00000000..d8503bc2 Binary files /dev/null and b/SunnyUI.Demo/Resources/dashboard0.png differ diff --git a/SunnyUI.Demo/Resources/relationship.png b/SunnyUI.Demo/Resources/relationship.png new file mode 100644 index 00000000..cc4ddc6c Binary files /dev/null and b/SunnyUI.Demo/Resources/relationship.png differ diff --git a/SunnyUI.Demo/Resources/relationship0.png b/SunnyUI.Demo/Resources/relationship0.png new file mode 100644 index 00000000..c178c79e Binary files /dev/null and b/SunnyUI.Demo/Resources/relationship0.png differ diff --git a/SunnyUI.Demo/Resources/save.png b/SunnyUI.Demo/Resources/save.png new file mode 100644 index 00000000..b87ae17f Binary files /dev/null and b/SunnyUI.Demo/Resources/save.png differ diff --git a/SunnyUI.Demo/Resources/save0.png b/SunnyUI.Demo/Resources/save0.png new file mode 100644 index 00000000..445b1085 Binary files /dev/null and b/SunnyUI.Demo/Resources/save0.png differ diff --git a/SunnyUI.Demo/SunnyUI.Demo.csproj b/SunnyUI.Demo/SunnyUI.Demo.csproj new file mode 100644 index 00000000..e22f4576 --- /dev/null +++ b/SunnyUI.Demo/SunnyUI.Demo.csproj @@ -0,0 +1,418 @@ + + + + + Debug + AnyCPU + {17F96B36-7CAE-4692-8B1F-B802482ECD09} + WinExe + Sunny.UI.Demo + SunnyUI.Demo + v4.0 + 512 + true + + + AnyCPU + true + full + false + Bin\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + false + Bin\ + TRACE + prompt + 4 + + + SunnyUI.ico + + + + ..\Bin\SunnyUI.dll + + + + + + + + + + Form + + + FAvatar.cs + + + Form + + + FButton.cs + + + Form + + + FCheckBox.cs + + + Form + + + FDataGridView.cs + + + Form + + + FLabel.cs + + + Form + + + FLine.cs + + + Form + + + FMeter.cs + + + Form + + + FTextBox.cs + + + Form + + + FListBox.cs + + + Form + + + FContextMenuStrip.cs + + + Form + + + FEdit.cs + + + Form + + + FEditor.cs + + + Form + + + FAsideHeaderMainFooter.cs + + + Form + + + FAsideHeaderMain.cs + + + Form + + + FAsideMain.cs + + + Form + + + FHeaderAsideMainFooter.cs + + + Form + + + FHeaderAsideMain.cs + + + Form + + + FHeaderMain.cs + + + Form + + + FMain.cs + + + Form + + + FFrames.cs + + + Form + + + FDialogs.cs + + + Form + + + FNavigation.cs + + + Form + + + FPanel.cs + + + Form + + + FRadioButton.cs + + + Form + + + FTransfer.cs + + + Form + + + FTreeView.cs + + + Form + + + FOther.cs + + + Form + + + FTabControl.cs + + + Form + + + FHeaderMainFooter.cs + + + Form + + + FPage1.cs + + + Form + + + FPage2.cs + + + Form + + + FPage3.cs + + + Form + + + FTitlePage1.cs + + + Form + + + FTitlePage2.cs + + + Form + + + FTitlePage3.cs + + + + + FAvatar.cs + + + FButton.cs + + + FCheckBox.cs + + + FMeter.cs + + + FTabControl.cs + + + FTextBox.cs + + + FDataGridView.cs + + + FLabel.cs + + + FLine.cs + + + FListBox.cs + + + FContextMenuStrip.cs + + + FEdit.cs + + + FEditor.cs + + + FAsideHeaderMainFooter.cs + + + FAsideHeaderMain.cs + + + FAsideMain.cs + + + FHeaderAsideMainFooter.cs + + + FMain.cs + + + FFrames.cs + + + FDialogs.cs + + + FNavigation.cs + + + FPanel.cs + + + FRadioButton.cs + + + FTransfer.cs + + + FTreeView.cs + + + FOther.cs + + + FHeaderAsideMain.cs + + + FHeaderMain.cs + + + FHeaderMainFooter.cs + + + FPage1.cs + + + FPage2.cs + + + FPage3.cs + + + FTitlePage1.cs + + + FTitlePage2.cs + + + FTitlePage3.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SunnyUI.Demo/SunnyUI.ico b/SunnyUI.Demo/SunnyUI.ico new file mode 100644 index 00000000..0036969b Binary files /dev/null and b/SunnyUI.Demo/SunnyUI.ico differ diff --git a/SunnyUI.ico b/SunnyUI.ico new file mode 100644 index 00000000..0036969b Binary files /dev/null and b/SunnyUI.ico differ diff --git a/SunnyUI.sln b/SunnyUI.sln new file mode 100644 index 00000000..00447970 --- /dev/null +++ b/SunnyUI.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29201.188 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SunnyUI", "SunnyUI\SunnyUI.csproj", "{AB1CB247-E20B-4CBE-B269-570ADDD96C53}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SunnyUI.Demo", "SunnyUI.Demo\SunnyUI.Demo.csproj", "{17F96B36-7CAE-4692-8B1F-B802482ECD09}" + ProjectSection(ProjectDependencies) = postProject + {AB1CB247-E20B-4CBE-B269-570ADDD96C53} = {AB1CB247-E20B-4CBE-B269-570ADDD96C53} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AB1CB247-E20B-4CBE-B269-570ADDD96C53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB1CB247-E20B-4CBE-B269-570ADDD96C53}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB1CB247-E20B-4CBE-B269-570ADDD96C53}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB1CB247-E20B-4CBE-B269-570ADDD96C53}.Release|Any CPU.Build.0 = Release|Any CPU + {17F96B36-7CAE-4692-8B1F-B802482ECD09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {17F96B36-7CAE-4692-8B1F-B802482ECD09}.Debug|Any CPU.Build.0 = Debug|Any CPU + {17F96B36-7CAE-4692-8B1F-B802482ECD09}.Release|Any CPU.ActiveCfg = Release|Any CPU + {17F96B36-7CAE-4692-8B1F-B802482ECD09}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {F0698DDC-7858-40F2-8BCA-9DA655EBF385} + EndGlobalSection +EndGlobal diff --git a/SunnyUI/Controls/DropItem/UIComboBoxItem.Designer.cs b/SunnyUI/Controls/DropItem/UIComboBoxItem.Designer.cs new file mode 100644 index 00000000..3219bdd0 --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIComboBoxItem.Designer.cs @@ -0,0 +1,70 @@ +namespace Sunny.UI +{ + partial class UIComboBoxItem + { + /// + /// 必需的设计器变量。 + /// + 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.listBox = new Sunny.UI.UIListBox(); + this.SuspendLayout(); + // + // listBox + // + this.listBox.BackColor = System.Drawing.Color.Transparent; + this.listBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBox.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.listBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.listBox.ItemSelectBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.listBox.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.listBox.Location = new System.Drawing.Point(0, 0); + this.listBox.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.listBox.Name = "listBox"; + this.listBox.Padding = new System.Windows.Forms.Padding(2); + this.listBox.Radius = 0; + this.listBox.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.listBox.Size = new System.Drawing.Size(184, 210); + this.listBox.Style = Sunny.UI.UIStyle.Custom; + this.listBox.TabIndex = 3; + this.listBox.Text = null; + this.listBox.ItemClick += new System.EventHandler(this.ListBox_Click); + this.listBox.SelectedIndexChanged += new System.EventHandler(this.listBox_SelectedIndexChanged); + // + // UIComboBoxItem + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.listBox); + this.Name = "UIComboBoxItem"; + this.Size = new System.Drawing.Size(184, 210); + this.ResumeLayout(false); + + } + + #endregion + + private UIListBox listBox; + } +} diff --git a/SunnyUI/Controls/DropItem/UIComboBoxItem.cs b/SunnyUI/Controls/DropItem/UIComboBoxItem.cs new file mode 100644 index 00000000..382507a2 --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIComboBoxItem.cs @@ -0,0 +1,73 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIComboBoxItem.cs + * 文件说明: 组合框弹出窗体 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.Drawing; + +namespace Sunny.UI +{ + /// + /// 组合框弹出窗体 + /// + public partial class UIComboBoxItem : UIDropDownItem + { + /// + /// 构造函数 + /// + public UIComboBoxItem() + { + InitializeComponent(); + } + + /// + /// 列表框 + /// + public UIListBox ListBox => listBox; + + private void ListBox_Click(object sender, EventArgs e) + { + CloseParent(); + } + + /// + /// 设置边框颜色 + /// + /// 颜色 + public override void SetRectColor(Color color) + { + listBox.ItemSelectBackColor = color; + } + + /// + /// 设置填充颜色 + /// + /// 颜色 + public override void SetFillColor(Color color) + { + ListBox.ItemSelectForeColor = color; + } + + private void listBox_SelectedIndexChanged(object sender, EventArgs e) + { + DoValueChanged(this, ListBox.SelectedValue); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/DropItem/UIComboBoxItem.resx b/SunnyUI/Controls/DropItem/UIComboBoxItem.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIComboBoxItem.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/SunnyUI/Controls/DropItem/UIDateTimeItem.Designer.cs b/SunnyUI/Controls/DropItem/UIDateTimeItem.Designer.cs new file mode 100644 index 00000000..9cbd45be --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIDateTimeItem.Designer.cs @@ -0,0 +1,61 @@ +namespace Sunny.UI +{ + partial class UIDateTimeControl + { + /// + /// 必需的设计器变量。 + /// + 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.monthCalendar = new System.Windows.Forms.MonthCalendar(); + this.SuspendLayout(); + // + // monthCalendar + // + this.monthCalendar.ForeColor = System.Drawing.SystemColors.WindowText; + this.monthCalendar.Location = new System.Drawing.Point(0, 0); + this.monthCalendar.Margin = new System.Windows.Forms.Padding(15, 16, 15, 16); + this.monthCalendar.MaxSelectionCount = 1; + this.monthCalendar.Name = "monthCalendar"; + this.monthCalendar.TabIndex = 2; + this.monthCalendar.DateChanged += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar_DateChanged); + this.monthCalendar.DateSelected += new System.Windows.Forms.DateRangeEventHandler(this.monthCalendar_DateSelected); + // + // UIDateTimeControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.monthCalendar); + this.Margin = new System.Windows.Forms.Padding(7, 9, 7, 9); + this.Name = "UIDateTimeControl"; + this.Size = new System.Drawing.Size(220, 180); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.MonthCalendar monthCalendar; + } +} diff --git a/SunnyUI/Controls/DropItem/UIDateTimeItem.cs b/SunnyUI/Controls/DropItem/UIDateTimeItem.cs new file mode 100644 index 00000000..9929a5af --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIDateTimeItem.cs @@ -0,0 +1,54 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIDateTimeItem.cs + * 文件说明: 日期选择框弹出窗体 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 日期选择框弹出窗体 + /// + public partial class UIDateTimeControl : UIDropDownItem + { + /// + /// 构造函数 + /// + public UIDateTimeControl() + { + InitializeComponent(); + } + + private void monthCalendar_DateChanged(object sender, DateRangeEventArgs e) + { + } + + private void monthCalendar_DateSelected(object sender, DateRangeEventArgs e) + { + DoValueChanged(this, monthCalendar.SelectionStart); + CloseParent(); + } + + /// + /// 日期选择控件 + /// + public MonthCalendar MonthCalendar => monthCalendar; + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/DropItem/UIDropControl.Designer.cs b/SunnyUI/Controls/DropItem/UIDropControl.Designer.cs new file mode 100644 index 00000000..45a9fd3b --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIDropControl.Designer.cs @@ -0,0 +1,46 @@ +namespace Sunny.UI +{ + partial class UIDropControl + { + /// + /// 必需的设计器变量。 + /// + 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() + { + SuspendLayout(); + // + // UIDropControl + // + AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + MinimumSize = new System.Drawing.Size(63, 0); + Name = "UIDropControl"; + Size = new System.Drawing.Size(150, 29); + ResumeLayout(false); + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/DropItem/UIDropControl.cs b/SunnyUI/Controls/DropItem/UIDropControl.cs new file mode 100644 index 00000000..512356d9 --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIDropControl.cs @@ -0,0 +1,305 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIDropControl.cs + * 文件说明: 下拉框基类 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public enum UIDropDownStyle + { + DropDown, + DropDownList + } + + public enum UIDropItemPos + { + Top, + Bottom + } + + [ToolboxItem(false)] + public partial class UIDropControl : UIPanel + { + public UIDropControl() + { + InitializeComponent(); + + edit.Font = UIFontColor.Font; + edit.Left = 3; + edit.Top = 3; + edit.Text = String.Empty; + edit.ForeColor = UIFontColor.Primary; + edit.BorderStyle = BorderStyle.None; + edit.KeyDown += EditOnKeyDown; + edit.TextChanged += EditTextChanged; + edit.Invalidate(); + Controls.Add(edit); + + TextAlignment = ContentAlignment.MiddleLeft; + fillColor = Color.White; + edit.BackColor = Color.White; + } + + private UIDropDown itemForm; + + protected UIDropDown ItemForm + { + get + { + if (itemForm == null) + { + CreateInstance(); + + if (itemForm != null) + { + itemForm.ValueChanged += ItemForm_ValueChanged; + itemForm.VisibleChanged += ItemForm_VisibleChanged; + } + } + + return itemForm; + } + set => itemForm = value; + } + + private void ItemForm_VisibleChanged(object sender, EventArgs e) + { + dropSymbol = 61703; + + if (itemForm != null && itemForm.Visible) + { + dropSymbol = 61702; + } + + Invalidate(); + } + + protected virtual void CreateInstance() + { + } + + protected virtual void ItemForm_ValueChanged(object sender, object value) + { + } + + protected virtual int CalcItemFormHeight() + { + return 200; + } + + private UIDropDownStyle _dropDownStyle = UIDropDownStyle.DropDown; + + [DefaultValue(UIDropDownStyle.DropDown)] + public UIDropDownStyle DropDownStyle + { + get => _dropDownStyle; + set + { + if (_dropDownStyle != value) + { + _dropDownStyle = value; + edit.Visible = value == UIDropDownStyle.DropDown; + Invalidate(); + } + } + } + + [DefaultValue(UIDropItemPos.Bottom)] + public UIDropItemPos DropItemPos { get; set; } = UIDropItemPos.Bottom; + + public event EventHandler ButtonClick; + + private readonly TextBox edit = new TextBox(); + + protected override void OnTextChanged(EventArgs e) + { + base.OnTextChanged(e); + edit.Text = Text; + Invalidate(); + } + + private void EditTextChanged(object s, EventArgs e) + { + Text = edit.Text; + } + + protected override void OnFontChanged(EventArgs e) + { + base.OnFontChanged(e); + edit.Font = Font; + Invalidate(); + } + + protected override void OnSizeChanged(EventArgs e) + { + SizeChange(); + } + + private void SizeChange() + { + TextBox edt = new TextBox(); + edt.Font = edit.Font; + edt.Invalidate(); + Height = edt.Height; + edt.Dispose(); + + edit.Top = (Height - edit.Height) / 2; + edit.Left = 3; + edit.Width = Width - 30; + } + + protected override void OnPaintFore(Graphics g, GraphicsPath path) + { + SizeChange(); + + if (!edit.Visible) + { + base.OnPaintFore(g, path); + } + } + + private int dropSymbol = 61703; + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + Padding = new Padding(0, 0, 30, 0); + e.Graphics.FillRoundRectangle(GetFillColor(), new Rectangle(Width - 27, edit.Top, 25, edit.Height), Radius); + Color color = GetRectColor(); + SizeF sf = e.Graphics.GetFontImageSize(dropSymbol, 24); + e.Graphics.DrawFontImage(dropSymbol, 24, color, Width - 28 + (12 - sf.Width / 2.0f), (Height - sf.Height) / 2.0f); + } + + private void EditOnKeyDown(object Obj, KeyEventArgs e) + { + if (e.Control && e.KeyCode == Keys.A) + { + edit.SelectAll(); + e.SuppressKeyPress = true; + } + + if (e.Control && e.KeyCode == Keys.C) + { + edit.Copy(); + e.SuppressKeyPress = true; + } + + if (e.Control && e.KeyCode == Keys.V) + { + edit.Paste(); + e.SuppressKeyPress = true; + } + } + + protected override void OnGotFocus(EventArgs e) + { + base.OnGotFocus(e); + edit.Focus(); + } + + public void Clear() + { + edit.Clear(); + } + + [DefaultValue('\0')] + public char PasswordChar + { + get => edit.PasswordChar; + set => edit.PasswordChar = value; + } + + [DefaultValue(false)] + public bool ReadOnly + { + get => edit.ReadOnly; + set + { + edit.ReadOnly = value; + edit.BackColor = Color.White; + } + } + + [CategoryAttribute("文字"), Browsable(true)] + [DefaultValue("")] + public override string Text + { + get => edit.Text; + set => edit.Text = value; + } + + public bool IsEmpty => edit.Text == ""; + + protected override void OnMouseDown(MouseEventArgs e) + { + ActiveControl = edit; + } + + [DefaultValue(32767)] + public int MaxLength + { + get => edit.MaxLength; + set => edit.MaxLength = Math.Max(value, 1); + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + foreColor = uiColor.DropDownControlColor; + edit.BackColor = fillColor = Color.White; + Invalidate(); + } + + protected override void AfterSetFillColor(Color color) + { + base.AfterSetFillColor(color); + edit.BackColor = fillColor; + } + + protected override void AfterSetForeColor(Color color) + { + base.AfterSetForeColor(color); + edit.ForeColor = foreColor; + } + + protected override void OnClick(EventArgs e) + { + if (!ReadOnly) + { + if (ItemForm != null) + { + ItemForm.SetRectColor(rectColor); + ItemForm.SetFillColor(fillColor); + ItemForm.SetForeColor(foreColor); + } + + ButtonClick?.Invoke(this, e); + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/DropItem/UIDropControl.resx b/SunnyUI/Controls/DropItem/UIDropControl.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIDropControl.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/SunnyUI/Controls/DropItem/UIDropDown.cs b/SunnyUI/Controls/DropItem/UIDropDown.cs new file mode 100644 index 00000000..137d2e18 --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIDropDown.cs @@ -0,0 +1,324 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIDropDown.cs + * 文件说明: 下拉框弹出窗体控制类 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 下拉框弹出窗体控制类 + /// + [ToolboxItem(false)] + public sealed class UIDropDown : ToolStripDropDown + { + private IContainer components; + + /// + /// 析构函数 + /// + /// disposing + protected override void Dispose(bool disposing) + { + if (disposing) + { + components?.Dispose(); + + if (Item != null) + { + UIDropDownItem _content = Item; + Item = null; + _content.Dispose(); + } + } + + base.Dispose(disposing); + } + + private void InitializeComponent() + { + components = new Container(); + } + + private UIDropDownItem Item; + private Control OpenItem; + + /// + /// 数值切换事件 + /// + /// sender + /// 数值 + public delegate void OnValueChanged(object sender, object value); + + /// + /// 数值切换事件 + /// + public event OnValueChanged ValueChanged; + + private void DoValueChanged(object sender, object value) + { + ValueChanged?.Invoke(sender, value); + } + + /// + /// 构造函数 + /// + /// 下拉框弹出窗体基类 + public UIDropDown(UIDropDownItem item) + { + Item = item ?? throw new ArgumentNullException(nameof(item)); + Item.ValueChanged += DoValueChanged; + + InitializeComponent(); + AutoSize = false; + DoubleBuffered = true; + ResizeRedraw = true; + ToolStripControlHost _host = new ToolStripControlHost(item); + Padding = Margin = _host.Padding = _host.Margin = Padding.Empty; + item.MinimumSize = item.Size; + item.MaximumSize = item.Size; + Size = item.Size; + TabStop = item.TabStop = true; + item.Location = Point.Empty; + Items.Add(_host); + item.Disposed += (sender, e) => + { + item = null; + Dispose(true); + }; + + item.RegionChanged += (sender, e) => UpdateRegion(); + UpdateRegion(); + } + + private void UpdateRegion() + { + if (Region != null) + { + Region.Dispose(); + Region = null; + } + + if (Item.Region != null) + { + Region = Item.Region.Clone(); + } + } + + /// + /// 显示 + /// + /// Control + public void Show(Control control) + { + if (control == null) + { + throw new ArgumentNullException(nameof(control)); + } + + Show(control, control.ClientRectangle); + } + + /// + /// 显示 + /// + /// Control + /// 大小 + public void Show(Control control, Size size) + { + Size = size; + Show(control); + } + + /// + /// 显示 + /// + /// 区域 + public void Show(Rectangle area) + { + Point location = new Point(area.Left, area.Top + area.Height); + Rectangle screen = Screen.FromControl(this).WorkingArea; + if (location.X + Size.Width > (screen.Left + screen.Width)) + { + location.X = (screen.Left + screen.Width) - Size.Width; + } + + if (location.Y + Size.Height > (screen.Top + screen.Height)) + { + location.Y -= Size.Height + area.Height; + } + + Show(location, ToolStripDropDownDirection.BelowRight); + } + + /// + /// 显示 + /// + /// Control + /// 区域 + public void Show(Control control, Rectangle area) + { + if (control == null) + { + throw new ArgumentNullException(nameof(control)); + } + + SetOwnerItem(control); + + Point location = control.PointToScreen(new Point(area.Left, area.Top + area.Height)); + Rectangle screen = Screen.FromControl(control).WorkingArea; + if (location.X + Size.Width > (screen.Left + screen.Width)) + { + location.X = (screen.Left + screen.Width) - Size.Width; + } + + if (location.Y + Size.Height > (screen.Top + screen.Height)) + { + location.Y -= Size.Height + area.Height; + } + + location = control.PointToClient(location); + Show(control, location, ToolStripDropDownDirection.BelowRight); + } + + private void SetOwnerItem(Control control) + { + if (control == null) + { + return; + } + + if (control is UIDropDown ctrl) + { + OwnerItem = ctrl.Items[0]; + return; + } + else if (OpenItem == null) + { + OpenItem = control; + } + + if (control.Parent != null) + { + SetOwnerItem(control.Parent); + } + } + + /// + /// OnSizeChanged + /// + /// e + protected override void OnSizeChanged(EventArgs e) + { + if (Item != null) + { + Item.MinimumSize = Size; + Item.MaximumSize = Size; + Item.Size = Size; + Item.Location = Point.Empty; + } + + base.OnSizeChanged(e); + } + + /// + /// OnLayout + /// + /// e + protected override void OnLayout(LayoutEventArgs e) + { + Size suggestedSize = GetPreferredSize(Size.Empty); + if (AutoSize && suggestedSize != Size) + { + Size = suggestedSize; + } + + SetDisplayedItems(); + OnLayoutCompleted(EventArgs.Empty); + Invalidate(); + } + + /// + /// OnOpening + /// + /// e + protected override void OnOpening(CancelEventArgs e) + { + if (Item.IsDisposed || Item.Disposing) + { + e.Cancel = true; + return; + } + + UpdateRegion(); + base.OnOpening(e); + } + + /// + /// OnOpened + /// + /// e + protected override void OnOpened(EventArgs e) + { + Item.Focus(); + base.OnOpened(e); + } + + /// + /// OnClosed + /// + /// e + protected override void OnClosed(ToolStripDropDownClosedEventArgs e) + { + OpenItem = null; + base.OnClosed(e); + } + + /// + /// 设置边框颜色 + /// + /// 颜色 + public void SetRectColor(Color color) + { + Item?.SetRectColor(color); + } + + /// + /// 设置填充颜色 + /// + /// 颜色 + public void SetFillColor(Color color) + { + Item?.SetFillColor(color); + } + + /// + /// 设置字体颜色 + /// + /// 颜色 + public void SetForeColor(Color color) + { + Item?.SetForeColor(color); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/DropItem/UIDropDownItem.Designer.cs b/SunnyUI/Controls/DropItem/UIDropDownItem.Designer.cs new file mode 100644 index 00000000..8b0ba6f6 --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIDropDownItem.Designer.cs @@ -0,0 +1,43 @@ +namespace Sunny.UI +{ + partial class UIDropDownItem + { + /// + /// 必需的设计器变量。 + /// + 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(); + // + // UIDropDownItem + // + this.Name = "UIDropDownItem"; + this.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.ResumeLayout(false); + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/DropItem/UIDropDownItem.cs b/SunnyUI/Controls/DropItem/UIDropDownItem.cs new file mode 100644 index 00000000..145fd18d --- /dev/null +++ b/SunnyUI/Controls/DropItem/UIDropDownItem.cs @@ -0,0 +1,96 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIDropDownItem.cs + * 文件说明: 下拉框弹出窗体基类 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System.ComponentModel; +using System.Drawing; + +namespace Sunny.UI +{ + /// + /// 下拉框弹出窗体基类 + /// + [ToolboxItem(false)] + public partial class UIDropDownItem : UIPanel + { + /// + /// 构造函数 + /// + public UIDropDownItem() + { + InitializeComponent(); + } + + /// + /// 数值切换事件定义 + /// + /// sender + /// 数值 + public delegate void OnValueChanged(object sender, object value); + + /// + /// 数值切换事件 + /// + public event OnValueChanged ValueChanged; + + /// + /// 数值切换事件 + /// + /// sender + /// 数值 + protected void DoValueChanged(object sender, object value) + { + ValueChanged?.Invoke(sender, value); + } + + /// + /// 设置边框颜色 + /// + /// 颜色 + public virtual void SetRectColor(Color color) + { + } + + /// + /// 设置填充颜色 + /// + /// 颜色 + public virtual void SetFillColor(Color color) + { + } + + /// + /// 设置字体颜色 + /// + /// 颜色 + public virtual void SetForeColor(Color color) + { + } + + /// + /// 关闭弹出窗口 + /// + protected void CloseParent() + { + UIDropDown parent = (UIDropDown)Parent; + parent?.Close(); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/TypeEditor/UIDropEditor.cs b/SunnyUI/Controls/TypeEditor/UIDropEditor.cs new file mode 100644 index 00000000..7a72bf17 --- /dev/null +++ b/SunnyUI/Controls/TypeEditor/UIDropEditor.cs @@ -0,0 +1,104 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIDropEditor.cs + * 文件说明: 控件属性编辑面板基类 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing.Design; +using System.Security.Permissions; +using System.Windows.Forms; +using System.Windows.Forms.Design; + +namespace Sunny.UI +{ + /// + /// 提供设置的编辑器 属性。 + /// + [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] + public abstract class UIDropEditor : UITypeEditor + { + protected UIDropEditorUI EditorUI; + + public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) + { + if (provider != null) + { + IWindowsFormsEditorService service = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); + if (service != null) + { + if (EditorUI == null) + { + EditorUI = CreateUI(); + } + + EditorUI.Start(service, value); + service.DropDownControl(EditorUI); + if (EditorUI.Value != null) + { + value = EditorUI.Value; + } + + EditorUI.End(); + } + } + + return value; + } + + protected abstract UIDropEditorUI CreateUI(); + + public override UITypeEditorEditStyle GetEditStyle( + ITypeDescriptorContext context) + { + return UITypeEditorEditStyle.DropDown; + } + } + + public abstract class UIDropEditorUI : UserControl + { + private IWindowsFormsEditorService edSvc; + + protected object currentValue; + protected bool updateCurrentValue; + + public object Value => currentValue; + + public IWindowsFormsEditorService EditorService => edSvc; + + public void Start(IWindowsFormsEditorService editorService, object value) + { + edSvc = editorService; + currentValue = value; + InitValue(value); + updateCurrentValue = true; + } + + protected abstract void InitValue(object value); + + protected abstract void UpdateCurrentValue(); + + public void End() + { + edSvc = null; + currentValue = null; + updateCurrentValue = false; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/TypeEditor/UIRadiusSidesEditor.cs b/SunnyUI/Controls/TypeEditor/UIRadiusSidesEditor.cs new file mode 100644 index 00000000..280346e6 --- /dev/null +++ b/SunnyUI/Controls/TypeEditor/UIRadiusSidesEditor.cs @@ -0,0 +1,402 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIRadiusSidesEditor.cs + * 文件说明: 边框属性类 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Security.Permissions; +using System.Windows.Forms; +using System.Windows.Forms.Design; + +namespace Sunny.UI +{ + /// + /// 圆角位置 + /// + [ComVisible(true)] + [Editor(typeof(UIRadiusSidesEditor), typeof(System.Drawing.Design.UITypeEditor))] + [Flags] + public enum UICornerRadiusSides + { + /// + /// 四个角都有圆角。 + /// + All = 15, // 0x0000000F + + /// + /// 左下角有圆角 + /// + LeftBottom = 8, + + /// + /// 左上角有圆角 + /// + LeftTop = 1, + + /// + /// 右下角有圆角 + /// + RightBottom = 4, + + /// + /// 右上角有圆角 + /// + RightTop = 2, + + /// + /// 没有圆角 + /// + None = 0, + } + + /// + /// 提供设置的编辑器 属性。 + /// + [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)] + public class UIRadiusSidesEditor : UIDropEditor + { + /// + /// 创建窗体 + /// + /// 窗体 + protected override UIDropEditorUI CreateUI() + { + return new UICornerRadiusSidesUI(); + } + + /// + /// 属性窗体 + /// + public class UICornerRadiusSidesUI : UIDropEditorUI + { + private TableLayoutPanel tableLayoutPanel1; + private CheckBox allCheckBox; + private CheckBox noneCheckBox; + private CheckBox leftTopCheckBox; + private CheckBox rightTopCheckBox; + private CheckBox rightBottomCheckBox; + private CheckBox leftBottomCheckBox; + private Label splitterLabel; + private bool allChecked; + private bool noneChecked; + + /// + /// 构造函数 + /// + public UICornerRadiusSidesUI() + { + End(); + InitializeComponent(); + Size = PreferredSize; + } + + /// + /// 初始化数值 + /// + /// 数值 + protected override void InitValue(object value) + { + Console.WriteLine(value.ToString()); + UICornerRadiusSides sides = (UICornerRadiusSides)value; + ResetCheckBoxState(); + if ((sides & UICornerRadiusSides.All) == UICornerRadiusSides.All) + { + allCheckBox.Checked = true; + leftTopCheckBox.Checked = true; + rightTopCheckBox.Checked = true; + rightBottomCheckBox.Checked = true; + leftBottomCheckBox.Checked = true; + allCheckBox.Checked = true; + } + else + { + noneCheckBox.Checked = sides == UICornerRadiusSides.None; + leftTopCheckBox.Checked = (sides & UICornerRadiusSides.LeftTop) == UICornerRadiusSides.LeftTop; + rightTopCheckBox.Checked = (sides & UICornerRadiusSides.RightTop) == UICornerRadiusSides.RightTop; + rightBottomCheckBox.Checked = (sides & UICornerRadiusSides.RightBottom) == UICornerRadiusSides.RightBottom; + leftBottomCheckBox.Checked = (sides & UICornerRadiusSides.LeftBottom) == UICornerRadiusSides.LeftBottom; + } + } + + /// + /// 更新当前值 + /// + protected override void UpdateCurrentValue() + { + if (!updateCurrentValue) + return; + UICornerRadiusSides labelBorderSides = UICornerRadiusSides.None; + if (allCheckBox.Checked) + { + currentValue = labelBorderSides | UICornerRadiusSides.All; + allChecked = true; + noneChecked = false; + } + else + { + if (noneCheckBox.Checked) + labelBorderSides |= UICornerRadiusSides.None; + + if (leftTopCheckBox.Checked) + labelBorderSides |= UICornerRadiusSides.LeftTop; + + if (rightTopCheckBox.Checked) + labelBorderSides |= UICornerRadiusSides.RightTop; + + if (rightBottomCheckBox.Checked) + labelBorderSides |= UICornerRadiusSides.RightBottom; + + if (leftBottomCheckBox.Checked) + labelBorderSides |= UICornerRadiusSides.LeftBottom; + + if (labelBorderSides == UICornerRadiusSides.None) + { + allChecked = false; + noneChecked = true; + noneCheckBox.Checked = true; + } + + if (labelBorderSides == UICornerRadiusSides.All) + { + allChecked = true; + noneChecked = false; + allCheckBox.Checked = true; + } + + currentValue = labelBorderSides; + } + } + + /// + /// 激活 + /// + /// + protected override void OnGotFocus(EventArgs e) + { + base.OnGotFocus(e); + noneCheckBox.Focus(); + } + + private void InitializeComponent() + { + ComponentResourceManager componentResourceManager = new ComponentResourceManager(typeof(BorderSidesEditor)); + Height = 163; + tableLayoutPanel1 = new TableLayoutPanel(); + noneCheckBox = new CheckBox(); + allCheckBox = new CheckBox(); + leftTopCheckBox = new CheckBox(); + rightTopCheckBox = new CheckBox(); + leftBottomCheckBox = new CheckBox(); + rightBottomCheckBox = new CheckBox(); + splitterLabel = new Label(); + tableLayoutPanel1.SuspendLayout(); + SuspendLayout(); + componentResourceManager.ApplyResources(tableLayoutPanel1, "tableLayoutPanel1"); + tableLayoutPanel1.AutoSizeMode = AutoSizeMode.GrowAndShrink; + tableLayoutPanel1.BackColor = SystemColors.Window; + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle()); + tableLayoutPanel1.Controls.Add(noneCheckBox, 0, 0); + tableLayoutPanel1.Controls.Add(allCheckBox, 0, 2); + tableLayoutPanel1.Controls.Add(leftTopCheckBox, 0, 3); + tableLayoutPanel1.Controls.Add(rightTopCheckBox, 0, 4); + tableLayoutPanel1.Controls.Add(leftBottomCheckBox, 0, 5); + tableLayoutPanel1.Controls.Add(rightBottomCheckBox, 0, 6); + tableLayoutPanel1.Controls.Add(splitterLabel, 0, 1); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.RowStyles.Add(new RowStyle()); + tableLayoutPanel1.Margin = new Padding(0); + + noneCheckBox.Name = "noneCheckBox"; + noneCheckBox.Margin = new Padding(3, 3, 3, 1); + noneCheckBox.Text = "无(&N)"; + noneCheckBox.Height = 16; + + allCheckBox.Name = "allCheckBox"; + allCheckBox.Margin = new Padding(3, 3, 3, 1); + allCheckBox.Text = "全部(&A)"; + allCheckBox.Height = 16; + + leftTopCheckBox.Margin = new Padding(20, 1, 3, 1); + leftTopCheckBox.Name = "leftTopCheckBox"; + leftTopCheckBox.Text = "左上角(<)"; + leftTopCheckBox.Height = 16; + + rightTopCheckBox.Margin = new Padding(20, 1, 3, 1); + rightTopCheckBox.Name = "rightTopCheckBox"; + rightTopCheckBox.Text = "右上角(&RT)"; + rightTopCheckBox.Height = 16; + + leftBottomCheckBox.Margin = new Padding(20, 1, 3, 1); + leftBottomCheckBox.Name = "leftBottomCheckBox"; + leftBottomCheckBox.Text = "左下角(&LB)"; + leftBottomCheckBox.Height = 16; + + rightBottomCheckBox.Margin = new Padding(20, 1, 3, 1); + rightBottomCheckBox.Name = "rightBottomCheckBox"; + rightBottomCheckBox.Text = "右下角(&RB)"; + rightBottomCheckBox.Height = 16; + + splitterLabel.BackColor = SystemColors.ControlDark; + splitterLabel.Name = "splitterLabel"; + splitterLabel.Height = 1; + + Controls.Add(tableLayoutPanel1); + Padding = new Padding(1, 1, 1, 1); + AutoSizeMode = AutoSizeMode.GrowAndShrink; + AutoScaleMode = AutoScaleMode.Font; + AutoScaleDimensions = new SizeF(6f, 13f); + tableLayoutPanel1.ResumeLayout(false); + tableLayoutPanel1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + leftBottomCheckBox.CheckedChanged += leftBottomCheckBox_CheckedChanged; + rightBottomCheckBox.CheckedChanged += rightBottomCheckBox_CheckedChanged; + rightTopCheckBox.CheckedChanged += rightTopCheckBox_CheckedChanged; + leftTopCheckBox.CheckedChanged += leftTopBox_CheckedChanged; + noneCheckBox.CheckedChanged += noneCheckBox_CheckedChanged; + allCheckBox.CheckedChanged += allCheckBox_CheckedChanged; + noneCheckBox.Click += noneCheckBoxClicked; + allCheckBox.Click += allCheckBoxClicked; + } + + private void leftBottomCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (((CheckBox)sender).Checked) + noneCheckBox.Checked = false; + else if (allCheckBox.Checked) + allCheckBox.Checked = false; + UpdateCurrentValue(); + } + + private void rightBottomCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (((CheckBox)sender).Checked) + noneCheckBox.Checked = false; + else if (allCheckBox.Checked) + allCheckBox.Checked = false; + UpdateCurrentValue(); + } + + private void rightTopCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (((CheckBox)sender).Checked) + noneCheckBox.Checked = false; + else if (allCheckBox.Checked) + allCheckBox.Checked = false; + UpdateCurrentValue(); + } + + private void leftTopBox_CheckedChanged(object sender, EventArgs e) + { + if (((CheckBox)sender).Checked) + noneCheckBox.Checked = false; + else if (allCheckBox.Checked) + allCheckBox.Checked = false; + UpdateCurrentValue(); + } + + private void noneCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (((CheckBox)sender).Checked) + { + allCheckBox.Checked = false; + leftTopCheckBox.Checked = false; + rightTopCheckBox.Checked = false; + rightBottomCheckBox.Checked = false; + leftBottomCheckBox.Checked = false; + } + UpdateCurrentValue(); + } + + private void allCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (((CheckBox)sender).Checked) + { + noneCheckBox.Checked = false; + leftTopCheckBox.Checked = true; + rightTopCheckBox.Checked = true; + rightBottomCheckBox.Checked = true; + leftBottomCheckBox.Checked = true; + } + UpdateCurrentValue(); + } + + private void noneCheckBoxClicked(object sender, EventArgs e) + { + if (!noneChecked) + return; + noneCheckBox.Checked = true; + } + + private void allCheckBoxClicked(object sender, EventArgs e) + { + if (!allChecked) + return; + allCheckBox.Checked = true; + } + + private void ResetCheckBoxState() + { + allCheckBox.Checked = false; + noneCheckBox.Checked = false; + leftTopCheckBox.Checked = false; + rightTopCheckBox.Checked = false; + rightBottomCheckBox.Checked = false; + leftBottomCheckBox.Checked = false; + } + } + } + + /// + /// 圆角位置属性编辑器帮助类 + /// + public static class UICornerRadiusSidesHelper + { + /// + /// 获取圆角是否设置 + /// + /// 所有圆角 + /// 当前圆角 + /// 是否有当前圆角 + public static bool GetValue(this UICornerRadiusSides sides, UICornerRadiusSides side) + { + return (sides & side) == side; + } + + /// + /// 获取边框是否设置 + /// + /// 所有边框 + /// 当前边框 + /// 是否有当前边框 + public static bool GetValue(this ToolStripStatusLabelBorderSides sides, ToolStripStatusLabelBorderSides side) + { + return (sides & side) == side; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIAnalogMeter.cs b/SunnyUI/Controls/UIAnalogMeter.cs new file mode 100644 index 00000000..ea680ab9 --- /dev/null +++ b/SunnyUI/Controls/UIAnalogMeter.cs @@ -0,0 +1,421 @@ +/****************************************************************************** + * SunnyUI Դؼ⡢⡢չ⡢ҳ濪ܡ + * CopyRight (C) 2012-2020 ShenYongHua(). + * QQȺ56829229 QQ17612584 EMailSunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * ʹô˴룬뱣˵ + ****************************************************************************** + * ļ: UIAnalogMeter.cs + * ļ˵: DZ + * ļ: Luca Bonotto + * ԴЭ: CPOL + * õַ: https://www.codeproject.com/Articles/24945/Analog-Meter +******************************************************************************/ + +/* + * Creato da SharpDevelop. + * Utente: lucabonotto + * Data: 03/04/2008 + * Ora: 14.34 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +#pragma warning disable 1591 + +namespace Sunny.UI +{ + /// + /// Class for the analog meter control + /// + [ToolboxItem(true)] + public class UIAnalogMeter : UIControl + { + #region Enumerator + + public enum AnalogMeterStyle + { + Circular = 0, + }; + + #endregion Enumerator + + #region Properties variables + + private AnalogMeterStyle meterStyle; + private Color needleColor; + private Color scaleColor; + private bool viewGlass; + private double currValue; + private double minValue; + private double maxValue; + private int scaleDivisions; + private int scaleSubDivisions; + private LBAnalogMeterRenderer renderer; + + #endregion Properties variables + + #region Class variables + + protected PointF needleCenter; + protected RectangleF drawRect; + protected RectangleF glossyRect; + protected RectangleF needleCoverRect; + protected float startAngle; + protected float endAngle; + protected float drawRatio; + protected LBAnalogMeterRenderer defaultRenderer; + + #endregion Class variables + + #region Costructors + + public UIAnalogMeter() + { + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer | ControlStyles.DoubleBuffer, true); + base.DoubleBuffered = true; + + // Properties initialization + needleColor = Color.Yellow; + scaleColor = Color.White; + meterStyle = AnalogMeterStyle.Circular; + viewGlass = false; + startAngle = 135; + endAngle = 405; + minValue = 0; + maxValue = 100; + currValue = 0; + scaleDivisions = 11; + scaleSubDivisions = 4; + renderer = null; + + // Set the styles for drawing + SetStyle(ControlStyles.DoubleBuffer, true); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.UserPaint, true); + + // Create the default renderer + defaultRenderer = new LBDefaultAnalogMeterRenderer(); + defaultRenderer.AnalogMeter = this; + + Width = Height = 180; + } + + #endregion Costructors + + #region Properties + + [ + Category("Appearance"), + Description("Style of the control"), + DefaultValue(AnalogMeterStyle.Circular) + ] + public AnalogMeterStyle MeterStyle + { + get { return meterStyle; } + set + { + meterStyle = value; + Invalidate(); + } + } + + [ + Category("Appearance"), + Description("Color of the body of the control"), + DefaultValue(typeof(Color), "80, 160, 255") + ] + public Color BodyColor + { + get => fillColor; + set => SetFillColor(value); + } + + [ + Category("Appearance"), + Description("Color of the needle"), + DefaultValue(typeof(Color), "Yellow") + ] + public Color NeedleColor + { + get { return needleColor; } + set + { + needleColor = value; + Invalidate(); + } + } + + [ + Category("Appearance"), + Description("Show or hide the glass effect"), + DefaultValue(false) + ] + public bool ViewGlass + { + get { return viewGlass; } + set + { + viewGlass = value; + Invalidate(); + } + } + + [ + Category("Appearance"), + Description("Color of the scale of the control"), + DefaultValue(typeof(Color), "White") + ] + public Color ScaleColor + { + get { return scaleColor; } + set + { + scaleColor = value; + Invalidate(); + } + } + + [ + Category("Behavior"), + Description("Value of the data"), + DefaultValue(0) + ] + public double Value + { + get { return currValue; } + set + { + double val = value; + if (val > maxValue) + val = maxValue; + + if (val < minValue) + val = minValue; + + currValue = val; + Invalidate(); + } + } + + [ + Category("Behavior"), + Description("Minimum value of the data"), + DefaultValue(0) + ] + public double MinValue + { + get { return minValue; } + set + { + minValue = value; + Invalidate(); + } + } + + [ + Category("Behavior"), + Description("Maximum value of the data"), + DefaultValue(100) + ] + public double MaxValue + { + get { return maxValue; } + set + { + maxValue = value; + Invalidate(); + } + } + + [ + Category("Appearance"), + Description("Number of the scale divisions"), + DefaultValue(11) + ] + public int ScaleDivisions + { + get { return scaleDivisions; } + set + { + scaleDivisions = value; + CalculateDimensions(); + Invalidate(); + } + } + + [ + Category("Appearance"), + Description("Number of the scale subdivisions"), + DefaultValue(4) + ] + public int ScaleSubDivisions + { + get { return scaleSubDivisions; } + set + { + scaleSubDivisions = value; + CalculateDimensions(); + Invalidate(); + } + } + + [Browsable(false)] + public LBAnalogMeterRenderer Renderer + { + get { return renderer; } + set + { + renderer = value; + if (renderer != null) + renderer.AnalogMeter = this; + Invalidate(); + } + } + + #endregion Properties + + #region Public methods + + public float GetDrawRatio() + { + return drawRatio; + } + + public float GetStartAngle() + { + return startAngle; + } + + public float GetEndAngle() + { + return endAngle; + } + + public PointF GetNeedleCenter() + { + return needleCenter; + } + + #endregion Public methods + + #region Events delegates + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + + // Calculate dimensions + CalculateDimensions(); + Invalidate(); + } + + protected override void OnPaintBackground(PaintEventArgs e) + { + } + + protected override void OnPaint(PaintEventArgs e) + { + if (Width <= 0 || Height <= 0) return; + RectangleF _rc = new RectangleF(0, 0, Width, Height); + e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + + if (renderer == null) + { + defaultRenderer.DrawBackground(e.Graphics, _rc); + defaultRenderer.DrawBody(e.Graphics, drawRect); + defaultRenderer.DrawThresholds(e.Graphics, drawRect); + defaultRenderer.DrawDivisions(e.Graphics, drawRect); + defaultRenderer.DrawUM(e.Graphics, drawRect); + defaultRenderer.DrawValue(e.Graphics, drawRect); + defaultRenderer.DrawNeedle(e.Graphics, drawRect); + defaultRenderer.DrawNeedleCover(e.Graphics, needleCoverRect); + defaultRenderer.DrawGlass(e.Graphics, glossyRect); + } + else + { + if (Renderer.DrawBackground(e.Graphics, _rc) == false) + defaultRenderer.DrawBackground(e.Graphics, _rc); + if (Renderer.DrawBody(e.Graphics, drawRect) == false) + defaultRenderer.DrawBody(e.Graphics, drawRect); + if (Renderer.DrawThresholds(e.Graphics, drawRect) == false) + defaultRenderer.DrawThresholds(e.Graphics, drawRect); + if (Renderer.DrawDivisions(e.Graphics, drawRect) == false) + defaultRenderer.DrawDivisions(e.Graphics, drawRect); + if (Renderer.DrawUM(e.Graphics, drawRect) == false) + defaultRenderer.DrawUM(e.Graphics, drawRect); + if (Renderer.DrawValue(e.Graphics, drawRect) == false) + defaultRenderer.DrawValue(e.Graphics, drawRect); + if (Renderer.DrawNeedle(e.Graphics, drawRect) == false) + defaultRenderer.DrawNeedle(e.Graphics, drawRect); + if (Renderer.DrawNeedleCover(e.Graphics, needleCoverRect) == false) + defaultRenderer.DrawNeedleCover(e.Graphics, needleCoverRect); + if (Renderer.DrawGlass(e.Graphics, glossyRect) == false) + defaultRenderer.DrawGlass(e.Graphics, glossyRect); + } + } + + #endregion Events delegates + + #region Virtual functions + + protected virtual void CalculateDimensions() + { + // Rectangle + float x = 0; + float y = 0; + float w = Width; + float h = Height; + + // Calculate ratio + drawRatio = (Math.Min(w, h)) / 200; + if (drawRatio < 0.00000001) + drawRatio = 1; + + // Draw rectangle + drawRect.X = x; + drawRect.Y = y; + drawRect.Width = w - 2; + drawRect.Height = h - 2; + + if (w < h) + drawRect.Height = w; + else if (w > h) + drawRect.Width = h; + + if (drawRect.Width < 10) + drawRect.Width = 10; + if (drawRect.Height < 10) + drawRect.Height = 10; + + // Calculate needle center + needleCenter.X = drawRect.X + (drawRect.Width / 2); + needleCenter.Y = drawRect.Y + (drawRect.Height / 2); + + // Needle cover rect + needleCoverRect.X = needleCenter.X - (20 * drawRatio); + needleCoverRect.Y = needleCenter.Y - (20 * drawRatio); + needleCoverRect.Width = 40 * drawRatio; + needleCoverRect.Height = 40 * drawRatio; + + // Glass effect rect + glossyRect.X = drawRect.X + (20 * drawRatio); + glossyRect.Y = drawRect.Y + (10 * drawRatio); + glossyRect.Width = drawRect.Width - (40 * drawRatio); + glossyRect.Height = needleCenter.Y + (30 * drawRatio); + } + + #endregion Virtual functions + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIAnalogMeterRender.cs b/SunnyUI/Controls/UIAnalogMeterRender.cs new file mode 100644 index 00000000..68fe02c1 --- /dev/null +++ b/SunnyUI/Controls/UIAnalogMeterRender.cs @@ -0,0 +1,482 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIAnalogMeterRender.cs + * 文件说明: 仪表渲染类 + * 文件作者: Luca Bonotto + * 开源协议: CPOL + * 引用地址: https://www.codeproject.com/Articles/24945/Analog-Meter +******************************************************************************/ + +/* + * Creato da SharpDevelop. + * Utente: lucabonotto + * Data: 03/04/2008 + * Ora: 14.34 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ + +using System; +using System.Drawing; +using System.Drawing.Drawing2D; + +#pragma warning disable 1591 + +namespace Sunny.UI +{ + /// + /// Base class for the renderers of the analog meter + /// + public class LBAnalogMeterRenderer + { + #region Variables + + /// + /// Control to render + /// + private UIAnalogMeter meter; + + #endregion Variables + + #region Properies + + public UIAnalogMeter AnalogMeter + { + set { this.meter = value; } + get { return this.meter; } + } + + #endregion Properies + + #region Virtual method + + /// + /// Draw the background of the control + /// + /// + /// + /// + public virtual bool DrawBackground(Graphics gr, RectangleF rc) + { + return false; + } + + /// + /// Draw the body of the control + /// + /// + /// + /// + public virtual bool DrawBody(Graphics Gr, RectangleF rc) + { + return false; + } + + /// + /// Draw the scale of the control + /// + /// + /// + /// + public virtual bool DrawDivisions(Graphics Gr, RectangleF rc) + { + return false; + } + + /// + /// Draw the thresholds + /// + /// + /// + /// + public virtual bool DrawThresholds(Graphics gr, RectangleF rc) + { + return false; + } + + /// + /// Drawt the unit measure of the control + /// + /// + /// + /// + public virtual bool DrawUM(Graphics gr, RectangleF rc) + { + return false; + } + + /// + /// Draw the current value in numerical form + /// + /// + /// + /// + public virtual bool DrawValue(Graphics gr, RectangleF rc) + { + return false; + } + + /// + /// Draw the needle + /// + /// + /// + /// + public virtual bool DrawNeedle(Graphics Gr, RectangleF rc) + { + return false; + } + + /// + /// Draw the needle cover at the center + /// + /// + /// + /// + public virtual bool DrawNeedleCover(Graphics Gr, RectangleF rc) + { + return false; + } + + /// + /// Draw the glass effect + /// + /// + /// + /// + public virtual bool DrawGlass(Graphics Gr, RectangleF rc) + { + return false; + } + + #endregion Virtual method + } + + /// + /// Default renderer class for the analog meter + /// + public class LBDefaultAnalogMeterRenderer : LBAnalogMeterRenderer + { + public override bool DrawBackground(Graphics gr, RectangleF rc) + { + if (this.AnalogMeter == null) + return false; + + Color c = this.AnalogMeter.Parent.BackColor; + SolidBrush br = new SolidBrush(c); + Pen pen = new Pen(c); + + Rectangle _rcTmp = new Rectangle(0, 0, this.AnalogMeter.Width, this.AnalogMeter.Height); + gr.DrawRectangle(pen, _rcTmp); + gr.FillRectangle(br, rc); + + return true; + } + + public override bool DrawBody(Graphics Gr, RectangleF rc) + { + if (this.AnalogMeter == null) + return false; + + Color bodyColor = this.AnalogMeter.BodyColor; + Color cDark = LBColorManager.StepColor(bodyColor, 20); + + LinearGradientBrush br1 = new LinearGradientBrush(rc, + bodyColor, + cDark, + 45); + Gr.FillEllipse(br1, rc); + + float drawRatio = this.AnalogMeter.GetDrawRatio(); + + RectangleF _rc = rc; + _rc.X += 3 * drawRatio; + _rc.Y += 3 * drawRatio; + _rc.Width -= 6 * drawRatio; + _rc.Height -= 6 * drawRatio; + + LinearGradientBrush br2 = new LinearGradientBrush(_rc, + cDark, + bodyColor, + 45); + Gr.FillEllipse(br2, _rc); + + return true; + } + + public override bool DrawThresholds(Graphics gr, RectangleF rc) + { + return false; + } + + public override bool DrawDivisions(Graphics Gr, RectangleF rc) + { + if (this.AnalogMeter == null) + return false; + + PointF needleCenter = this.AnalogMeter.GetNeedleCenter(); + float startAngle = this.AnalogMeter.GetStartAngle(); + float endAngle = this.AnalogMeter.GetEndAngle(); + float scaleDivisions = this.AnalogMeter.ScaleDivisions; + float scaleSubDivisions = this.AnalogMeter.ScaleSubDivisions; + float drawRatio = this.AnalogMeter.GetDrawRatio(); + double minValue = this.AnalogMeter.MinValue; + double maxValue = this.AnalogMeter.MaxValue; + Color scaleColor = this.AnalogMeter.ScaleColor; + + float cx = needleCenter.X; + float cy = needleCenter.Y; + float w = rc.Width; + float h = rc.Height; + + float incr = LBMath.GetRadian((endAngle - startAngle) / ((scaleDivisions - 1) * (scaleSubDivisions + 1))); + float currentAngle = LBMath.GetRadian(startAngle); + float radius = (float)(w / 2 - (w * 0.08)); + float rulerValue = (float)minValue; + + Pen pen = new Pen(scaleColor, (2 * drawRatio)); + SolidBrush br = new SolidBrush(scaleColor); + + PointF ptStart = new PointF(0, 0); + PointF ptEnd = new PointF(0, 0); + int n = 0; + for (; n < scaleDivisions; n++) + { + //Draw Thick Line + ptStart.X = (float)(cx + radius * Math.Cos(currentAngle)); + ptStart.Y = (float)(cy + radius * Math.Sin(currentAngle)); + ptEnd.X = (float)(cx + (radius - w / 20) * Math.Cos(currentAngle)); + ptEnd.Y = (float)(cy + (radius - w / 20) * Math.Sin(currentAngle)); + Gr.DrawLine(pen, ptStart, ptEnd); + + //Draw Strings + Font font = new Font(this.AnalogMeter.Font.FontFamily, (float)(6F * drawRatio)); + + float tx = (float)(cx + (radius - (20 * drawRatio)) * Math.Cos(currentAngle)); + float ty = (float)(cy + (radius - (20 * drawRatio)) * Math.Sin(currentAngle)); + double val = Math.Round(rulerValue); + String str = String.Format("{0,0:D}", (int)val); + + SizeF size = Gr.MeasureString(str, font); + Gr.DrawString(str, + font, + br, + tx - (float)(size.Width * 0.5), + ty - (float)(size.Height * 0.5)); + + rulerValue += (float)((maxValue - minValue) / (scaleDivisions - 1)); + + if (n == scaleDivisions - 1) + break; + + if (scaleDivisions <= 0) + currentAngle += incr; + else + { + for (int j = 0; j <= scaleSubDivisions; j++) + { + currentAngle += incr; + ptStart.X = (float)(cx + radius * Math.Cos(currentAngle)); + ptStart.Y = (float)(cy + radius * Math.Sin(currentAngle)); + ptEnd.X = (float)(cx + (radius - w / 50) * Math.Cos(currentAngle)); + ptEnd.Y = (float)(cy + (radius - w / 50) * Math.Sin(currentAngle)); + Gr.DrawLine(pen, ptStart, ptEnd); + } + } + } + + return true; + } + + public override bool DrawUM(Graphics gr, RectangleF rc) + { + return false; + } + + public override bool DrawValue(Graphics gr, RectangleF rc) + { + return false; + } + + public override bool DrawNeedle(Graphics Gr, RectangleF rc) + { + if (this.AnalogMeter == null) + return false; + + float w, h; + w = rc.Width; + h = rc.Height; + + double minValue = this.AnalogMeter.MinValue; + double maxValue = this.AnalogMeter.MaxValue; + double currValue = this.AnalogMeter.Value; + float startAngle = this.AnalogMeter.GetStartAngle(); + float endAngle = this.AnalogMeter.GetEndAngle(); + PointF needleCenter = this.AnalogMeter.GetNeedleCenter(); + + float radius = (float)(w / 2 - (w * 0.12)); + float val = (float)(maxValue - minValue); + + val = (float)((100 * (currValue - minValue)) / val); + val = ((endAngle - startAngle) * val) / 100; + val += startAngle; + + float angle = LBMath.GetRadian(val); + + float cx = needleCenter.X; + float cy = needleCenter.Y; + + PointF ptStart = new PointF(0, 0); + PointF ptEnd = new PointF(0, 0); + + GraphicsPath pth1 = new GraphicsPath(); + + ptStart.X = cx; + ptStart.Y = cy; + angle = LBMath.GetRadian(val + 10); + ptEnd.X = (float)(cx + (w * .09F) * Math.Cos(angle)); + ptEnd.Y = (float)(cy + (w * .09F) * Math.Sin(angle)); + pth1.AddLine(ptStart, ptEnd); + + ptStart = ptEnd; + angle = LBMath.GetRadian(val); + ptEnd.X = (float)(cx + radius * Math.Cos(angle)); + ptEnd.Y = (float)(cy + radius * Math.Sin(angle)); + pth1.AddLine(ptStart, ptEnd); + + ptStart = ptEnd; + angle = LBMath.GetRadian(val - 10); + ptEnd.X = (float)(cx + (w * .09F) * Math.Cos(angle)); + ptEnd.Y = (float)(cy + (w * .09F) * Math.Sin(angle)); + pth1.AddLine(ptStart, ptEnd); + + pth1.CloseFigure(); + + SolidBrush br = new SolidBrush(this.AnalogMeter.NeedleColor); + Pen pen = new Pen(this.AnalogMeter.NeedleColor); + Gr.DrawPath(pen, pth1); + Gr.FillPath(br, pth1); + + return true; + } + + public override bool DrawNeedleCover(Graphics Gr, RectangleF rc) + { + if (this.AnalogMeter == null) + return false; + + Color clr = this.AnalogMeter.NeedleColor; + RectangleF _rc = rc; + float drawRatio = this.AnalogMeter.GetDrawRatio(); + + Color clr1 = Color.FromArgb(70, clr); + + _rc.Inflate(5 * drawRatio, 5 * drawRatio); + + SolidBrush brTransp = new SolidBrush(clr1); + Gr.FillEllipse(brTransp, _rc); + + clr1 = clr; + Color clr2 = LBColorManager.StepColor(clr, 75); + LinearGradientBrush br1 = new LinearGradientBrush(rc, + clr1, + clr2, + 45); + Gr.FillEllipse(br1, rc); + return true; + } + + public override bool DrawGlass(Graphics Gr, RectangleF rc) + { + if (this.AnalogMeter == null) + return false; + + if (this.AnalogMeter.ViewGlass == false) + return true; + + Color clr1 = Color.FromArgb(40, 200, 200, 200); + + Color clr2 = Color.FromArgb(0, 200, 200, 200); + LinearGradientBrush br1 = new LinearGradientBrush(rc, + clr1, + clr2, + 45); + Gr.FillEllipse(br1, rc); + + return true; + } + } + + /// + /// Manager for color + /// + public class LBColorManager : Object + { + public static double BlendColour(double fg, double bg, double alpha) + { + double result = bg + (alpha * (fg - bg)); + if (result < 0.0) + result = 0.0; + if (result > 255) + result = 255; + return result; + } + + public static Color StepColor(Color clr, int alpha) + { + if (alpha == 100) + return clr; + + byte a = clr.A; + byte r = clr.R; + byte g = clr.G; + byte b = clr.B; + float bg = 0; + + int _alpha = Math.Min(alpha, 200); + _alpha = Math.Max(alpha, 0); + double ialpha = ((double)(_alpha - 100.0)) / 100.0; + + if (ialpha > 100) + { + // blend with white + bg = 255.0F; + ialpha = 1.0F - ialpha; // 0 = transparent fg; 1 = opaque fg + } + else + { + // blend with black + bg = 0.0F; + ialpha = 1.0F + ialpha; // 0 = transparent fg; 1 = opaque fg + } + + r = (byte)(LBColorManager.BlendColour(r, bg, ialpha)); + g = (byte)(LBColorManager.BlendColour(g, bg, ialpha)); + b = (byte)(LBColorManager.BlendColour(b, bg, ialpha)); + + return Color.FromArgb(a, r, g, b); + } + } + + /// + /// Mathematic Functions + /// + public class LBMath : Object + { + public static float GetRadian(float val) + { + return (float)(val * Math.PI / 180); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIAvatar.cs b/SunnyUI/Controls/UIAvatar.cs new file mode 100644 index 00000000..368c78aa --- /dev/null +++ b/SunnyUI/Controls/UIAvatar.cs @@ -0,0 +1,284 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIAvatar.cs + * 文件说明: 头像 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 头像 + /// + [ToolboxItem(true)] + public sealed class UIAvatar : UIControl + { + /// + /// 头像图标类型 + /// + public enum UIIcon + { + /// + /// 图像 + /// + Image, + + /// + /// 符号 + /// + Symbol, + + /// + /// 文字 + /// + Text + } + + /// + /// 构造函数 + /// + public UIAvatar() + { + Width = Height = 60; + ShowText = false; + ShowRect = false; + + fillColor = UIStyles.Blue.AvatarFillColor; + foreColor = UIStyles.Blue.AvatarForeColor; + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "Silver")] + public Color FillColor + { + get => fillColor; + set => SetFillColor(value); + } + + /// + /// 字体颜色 + /// + [Description("前景颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + /// + /// 设置主题样式 + /// + /// 主题样式 + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + fillColor = uiColor.AvatarFillColor; + foreColor = uiColor.AvatarForeColor; + Invalidate(); + } + + private UIIcon icon = UIIcon.Symbol; + + /// + /// 显示方式:图像(Image)、符号(Symbol)、文字(Text) + /// + [DefaultValue(UIIcon.Symbol), Description("显示方式:图像(Image)、符号(Symbol)、文字(Text)")] + public UIIcon Icon + { + get => icon; + set + { + if (icon != value) + { + icon = value; + Invalidate(); + } + } + } + + private UIShape sharpType = UIShape.Circle; + + /// + /// 显示形状:圆形,正方形 + /// + [DefaultValue(UIShape.Circle), Description("显示形状:圆形,正方形")] + public UIShape Shape + { + get => sharpType; + set + { + if (sharpType != value) + { + sharpType = value; + Invalidate(); + } + } + } + + private Image image; + + /// + /// 图片 + /// + [DefaultValue(typeof(Image), "null")] + public Image Image + { + get => image; + set + { + if (image != value) + { + image = value; + Invalidate(); + } + } + } + + private int symbolSize = 45; + + /// + /// 图标大小 + /// + [DefaultValue(45)] + public int SymbolSize + { + get => symbolSize; + set + { + if (symbolSize != value) + { + symbolSize = Math.Max(value, 16); + symbolSize = Math.Min(value, 64); + Invalidate(); + } + } + } + + private int symbol = 61447; + + /// + /// 图标字符 + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Editor(typeof(UIImagePropertyEditor), typeof(UITypeEditor))] + [DefaultValue(61447)] + public int Symbol + { + get => symbol; + set + { + if (symbol != value) + { + symbol = value; + Invalidate(); + } + } + } + + /// + /// OnPaintFill + /// + /// g + /// path + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + int size = Math.Min(Width, Height) - 3; + Rectangle rect = new Rectangle(2, 2, size - 2, size - 2); + + switch (Shape) + { + case UIShape.Circle: + g.FillEllipse(fillColor, rect); + break; + + case UIShape.Square: + g.FillRoundRectangle(fillColor, rect, 5); + break; + } + } + + /// + /// OnPaint + /// + /// e + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + int size = Math.Min(Width, Height) - 3; + if (Icon == UIIcon.Image) + { + if (Image == null) + { + return; + } + + float sc1 = Image.Width * 1.0f / size; + float sc2 = Image.Height * 1.0f / size; + + Bitmap scaleImage = ((Bitmap)Image).ResizeImage((int)(Image.Width * 1.0 / Math.Min(sc1, sc2) + 0.5), + (int)(Image.Height * 1.0 / Math.Min(sc1, sc2) + 0.5)); + + Bitmap bmp = scaleImage.Split(size, Shape); + e.Graphics.DrawImage(bmp, 1, 1); + bmp.Dispose(); + scaleImage.Dispose(); + e.Graphics.SetHighQuality(); + + using (Pen pn = new Pen(BackColor, 2)) + { + if (Shape == UIShape.Circle) + { + e.Graphics.DrawEllipse(pn, 1, 1, size, size); + } + + if (Shape == UIShape.Square) + { + e.Graphics.DrawRoundRectangle(pn, 1, 1, size, size, 5); + } + } + + e.Graphics.SetDefaultQuality(); + } + + if (Icon == UIIcon.Symbol) + { + SizeF sf = e.Graphics.GetFontImageSize(Symbol, SymbolSize); + e.Graphics.DrawFontImage(Symbol, SymbolSize, foreColor, 2 + (size - 4 - sf.Width + 7) / 2.0f, 2 + (size - 4 - sf.Height + 2) / 2.0f); + } + + if (Icon == UIIcon.Text) + { + SizeF sf = e.Graphics.MeasureString(Text, Font); + e.Graphics.DrawString(Text, Font, foreColor, 2 + (size - 4 - sf.Width + 7) / 2.0f, 2 + (size - 4 - sf.Height + 2) / 2.0f); + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIButton.cs b/SunnyUI/Controls/UIButton.cs new file mode 100644 index 00000000..bad61f3a --- /dev/null +++ b/SunnyUI/Controls/UIButton.cs @@ -0,0 +1,295 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIButton.cs + * 文件说明: 按钮 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +// ReSharper disable All +#pragma warning disable 1591 + +namespace Sunny.UI +{ + [DefaultEvent("Click")] + [DefaultProperty("Text")] + [ToolboxItem(true)] + public class UIButton : UIControl + { + public UIButton() + { + TabStop = true; + Width = 100; + Height = 35; + Cursor = Cursors.Hand; + + foreHoverColor = UIStyles.Blue.ButtonForeHoverColor; + forePressColor = UIStyles.Blue.ButtonForePressColor; + + rectHoverColor = UIStyles.Blue.RectHoverColor; + rectPressColor = UIStyles.Blue.RectPressColor; + + fillHoverColor = UIStyles.Blue.ButtonFillHoverColor; + fillPressColor = UIStyles.Blue.ButtonFillPressColor; + } + + private bool showTips = false; + + [Description("是否显示角标"), Category("自定义")] + [DefaultValue(false)] + public bool ShowTips + { + get + { + return showTips; + } + set + { + if (showTips != value) + { + showTips = value; + Invalidate(); + } + } + } + + private string tipsText = ""; + + [Description("角标文字"), Category("自定义")] + [DefaultValue("")] + public string TipsText + { + get { return tipsText; } + set + { + if (tipsText != value) + { + tipsText = value; + if (ShowTips) + { + Invalidate(); + } + } + } + } + + private Font tipsFont = new Font("Microsoft Sans Serif", 9); + + [Description("角标文字字体"), Category("自定义")] + [DefaultValue(typeof(Font), "Microsoft Sans Serif, 9pt")] + public Font TipsFont + { + get { return tipsFont; } + set + { + if (!tipsFont.Equals(value)) + { + tipsFont = value; + Invalidate(); + } + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + if (Enabled && ShowTips && !string.IsNullOrEmpty(TipsText)) + { + e.Graphics.SetHighQuality(); + SizeF sf = e.Graphics.MeasureString(TipsText, TipsFont); + float sfMax = Math.Max(sf.Width, sf.Height); + float x = Width - 1 - 2 - sfMax; + float y = 1 + 1; + e.Graphics.FillEllipse(Brushes.Red, x, y, sfMax, sfMax); + e.Graphics.DrawString(TipsText, TipsFont, Brushes.White, x + sfMax / 2.0f - sf.Width / 2.0f, y + sfMax / 2.0f - sf.Height / 2.0f); + } + } + + private bool selected; + + /// + /// 是否选中 + /// + [DefaultValue(false)] + public bool Selected + { + get => selected; + set + { + if (selected != value) + { + selected = value; + Invalidate(); + } + } + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + fillHoverColor = uiColor.ButtonFillHoverColor; + rectHoverColor = uiColor.RectHoverColor; + foreHoverColor = uiColor.ButtonForeHoverColor; + + fillPressColor = uiColor.ButtonFillPressColor; + rectPressColor = uiColor.RectPressColor; + forePressColor = uiColor.ButtonForePressColor; + + Invalidate(); + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color FillColor + { + get => fillColor; + set => SetFillColor(value); + } + + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color RectColor + { + get => rectColor; + set => SetRectColor(value); + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "White")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + [DefaultValue(typeof(Color), "244, 244, 244")] + public Color FillDisableColor + { + get => fillDisableColor; + set => SetFillDisableColor(value); + } + + [DefaultValue(typeof(Color), "173, 178, 181")] + public Color RectDisableColor + { + get => rectDisableColor; + set => SetRectDisableColor(value); + } + + [DefaultValue(typeof(Color), "109, 109, 103")] + public Color ForeDisableColor + { + get => foreDisableColor; + set => SetForeDisableColor(value); + } + + [DefaultValue(typeof(Color), "111, 168, 255")] + public Color FillHoverColor + { + get => fillHoverColor; + set => SetFillHoveColor(value); + } + + [DefaultValue(typeof(Color), "74, 131, 229")] + public Color FillPressColor + { + get => fillPressColor; + set => SetFillPressColor(value); + } + + [DefaultValue(typeof(Color), "White")] + public Color ForeHoverColor + { + get => foreHoverColor; + set => SetForeHoveColor(value); + } + + [DefaultValue(typeof(Color), "White")] + public Color ForePressColor + { + get => forePressColor; + set => SetForePressColor(value); + } + + [DefaultValue(typeof(Color), "111, 168, 255")] + public Color RectHoverColor + { + get => rectHoverColor; + set => SetRectHoveColor(value); + } + + [DefaultValue(typeof(Color), "74, 131, 229")] + public Color RectPressColor + { + get => rectPressColor; + set => SetRectPressColor(value); + } + + [DefaultValue(typeof(Color), "64, 105, 225")] + public Color SelectedColor + { + get => selectedColor; + set => SetSelectedColor(value); + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + IsPress = true; + Invalidate(); + } + + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + IsPress = false; + Invalidate(); + } + + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + IsPress = false; + IsHover = false; + Invalidate(); + } + + protected override void OnMouseEnter(EventArgs e) + { + base.OnMouseEnter(e); + IsHover = true; + Invalidate(); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UICheckBox.cs b/SunnyUI/Controls/UICheckBox.cs new file mode 100644 index 00000000..132ac909 --- /dev/null +++ b/SunnyUI/Controls/UICheckBox.cs @@ -0,0 +1,183 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UICheckBox.cs + * 文件说明: 复选框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-16: V2.2.1 增加ReadOnly属性 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("ValueChanged")] + [DefaultProperty("Text")] + [ToolboxItem(true)] + public sealed class UICheckBox : UIControl + { + public UICheckBox() + { + Cursor = Cursors.Hand; + ShowRect = false; + Size = new Size(150, 29); + foreColor = UIStyles.Blue.CheckBoxForeColor; + fillColor = UIStyles.Blue.CheckBoxColor; + } + + public delegate void OnValueChanged(object sender, bool value); + + public event OnValueChanged ValueChanged; + + private int _imageSize = 16; + private int _imageInterval = 3; + + [DefaultValue(16)] + [Description("图标大小"), Category("自定义")] + public int ImageSize + { + get => _imageSize; + set + { + _imageSize = Math.Max(value, 16); + _imageSize = Math.Min(value, 64); + Invalidate(); + } + } + + [DefaultValue(false)] + public bool ReadOnly { get; set; } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + [DefaultValue(3)] + [Description("图标与文字之间间隔"), Category("自定义")] + public int ImageInterval + { + get => _imageInterval; + set + { + _imageInterval = Math.Max(1, value); + Invalidate(); + } + } + + private bool _checked; + + [Description("是否选中"), Category("自定义")] + [DefaultValue(false)] + public bool Checked + { + get => _checked; + set + { + _checked = value; + ValueChanged?.Invoke(this, _checked); + Invalidate(); + } + } + + protected override void OnPaintFore(Graphics g, GraphicsPath path) + { + //设置按钮标题位置 + Padding = new Padding(_imageSize + _imageInterval * 2, Padding.Top, Padding.Right, Padding.Bottom); + + //填充文字 + Color color = foreColor; + color = Enabled ? color : UIDisableColor.Fore; + + g.DrawString(Text, Font, color, Size, Padding, ContentAlignment.MiddleLeft); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + //图标 + float top = Padding.Top - 1 + (Height - Padding.Top - Padding.Bottom - ImageSize) / 2.0f; + float left = Text.IsValid() ? ImageInterval : (Width - ImageSize) / 2.0f; + + Color color = Enabled ? fillColor : foreDisableColor; + + if (Checked) + { + g.FillRoundRectangle(color, new Rectangle((int)left, (int)top, ImageSize, ImageSize), 1); + + color = BackColor.IsValid() ? BackColor : Color.White; + Point pt2 = new Point((int)(left + ImageSize * 2 / 5.0f), (int)(top + ImageSize * 3 / 4.0f) - (ImageSize.Div(10))); + Point pt1 = new Point((int)left + 2 + ImageSize.Div(10), pt2.Y - (pt2.X - 2 - ImageSize.Div(10) - (int)left)); + Point pt3 = new Point((int)left + ImageSize - 2 - ImageSize.Div(10), pt2.Y - (ImageSize - pt2.X - 2 - ImageSize.Div(10)) - (int)left); + + PointF[] CheckMarkLine = { pt1, pt2, pt3 }; + using (Pen pn = new Pen(color, 2)) + { + g.SetHighQuality(); + g.DrawLines(pn, CheckMarkLine); + g.SetDefaultQuality(); + } + } + else + { + using (Pen pn = new Pen(color, 2)) + { + g.DrawRoundRectangle(pn, new Rectangle((int)left + 1, (int)top + 1, ImageSize - 2, ImageSize - 2), 1); + } + } + } + + protected override void OnClick(EventArgs e) + { + base.OnClick(e); + if (!ReadOnly) + { + Checked = !Checked; + } + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + fillColor = uiColor.CheckBoxColor; + foreColor = uiColor.CheckBoxForeColor; + Invalidate(); + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color CheckBoxColor + { + get => fillColor; + set => SetFillColor(value); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UICheckBoxGroup.cs b/SunnyUI/Controls/UICheckBoxGroup.cs new file mode 100644 index 00000000..ddc18afc --- /dev/null +++ b/SunnyUI/Controls/UICheckBoxGroup.cs @@ -0,0 +1,255 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UICheckBoxGroup.cs + * 文件说明: 多选框组 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-04-19: V2.2.3 增加单元 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 多选框组 + /// + [DefaultProperty("Items")] + [DefaultEvent("ValueChanged")] + public class UICheckBoxGroup : UIGroupBox + { + /// + /// 值切换事件 + /// + /// sender + /// 索引 + /// 文字 + /// 是否选中 + public delegate void OnValueChanged(object sender, int index, string text, bool isChecked); + + /// + /// 值切换事件 + /// + public event OnValueChanged ValueChanged; + + /// + /// 析构事件 + /// + ~UICheckBoxGroup() + { + listbox?.Dispose(); + ClearBoxes(); + } + + private void ClearBoxes() + { + foreach (var box in boxes) + { + box.Hide(); + box.Dispose(); + } + + boxes.Clear(); + } + + private void Listbox_DrawItemEx(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e) + { + Invalidate(); + } + + [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 ListBox.ObjectCollection Items => ListBox.Items; + + private ListBoxEx listbox; + + private ListBoxEx ListBox + { + get + { + if (listbox == null) + { + listbox = new ListBoxEx(); + listbox.BeforeDrawItem += Listbox_DrawItemEx; + } + + return listbox; + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + if (Items.Count == 0) return; + if (Items.Count != boxes.Count) + { + ClearBoxes(); + + for (int i = 0; i < Items.Count; i++) + { + UICheckBox box = new UICheckBox + { + Font = Font, + Parent = this, + Tag = i, + Style = Style + }; + + box.ValueChanged += Box_ValueChanged; + boxes.Add(box); + } + } + + int startX = StartPos.X; + int startY = TitleTop + StartPos.Y; + for (int i = 0; i < Items.Count; i++) + { + boxes[i].Text = Items[i].ToString(); + + int rowIndex = i / ColumnCount; + int columnIndex = i % ColumnCount; + + boxes[i].Left = startX + ItemSize.Width * columnIndex + ColumnInterval * columnIndex; + boxes[i].Top = startY + ItemSize.Height * rowIndex + RowInterval * rowIndex; + boxes[i].Show(); + } + } + + private void Box_ValueChanged(object sender, bool value) + { + UICheckBox checkBox = (UICheckBox)sender; + ValueChanged?.Invoke(this, checkBox.Tag.ToString().ToInt(), checkBox.Text, checkBox.Checked); + } + + [Browsable(false)] + public List SelectedIndexes + { + get + { + List indexes = new List(); + + for (int i = 0; i < boxes.Count; i++) + { + if (boxes[i].Checked) + indexes.Add(i); + } + + return indexes; + } + } + + [Browsable(false)] + public List SelectedItems + { + get + { + List items = new List(); + + foreach (var checkBox in boxes) + { + if (checkBox.Checked) + items.Add(checkBox.Text); + } + + return items; + } + } + + private readonly List boxes = new List(); + + private int columnCount = 1; + + [DefaultValue(1)] + public int ColumnCount + { + get => columnCount; + set + { + columnCount = value; + Invalidate(); + } + } + + private Size _itemSize = new Size(150, 35); + + [DefaultValue(typeof(Size), "150, 35")] + public Size ItemSize + { + get => _itemSize; + set + { + _itemSize = value; + Invalidate(); + } + } + + private Point startPos = new Point(12, 12); + + [DefaultValue(typeof(Point), "12, 12")] + public Point StartPos + { + get => startPos; + set + { + startPos = value; + Invalidate(); + } + } + + public int columnInterval; + + [DefaultValue(0)] + public int ColumnInterval + { + get => columnInterval; + set + { + columnInterval = value; + Invalidate(); + } + } + + private int rowInterval; + + [DefaultValue(0)] + public int RowInterval + { + get => rowInterval; + set + { + rowInterval = value; + Invalidate(); + } + } + + protected override void OnFontChanged(EventArgs e) + { + base.OnFontChanged(e); + foreach (var box in boxes) + { + box.Font = Font; + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIComboBox.Designer.cs b/SunnyUI/Controls/UIComboBox.Designer.cs new file mode 100644 index 00000000..583f8faa --- /dev/null +++ b/SunnyUI/Controls/UIComboBox.Designer.cs @@ -0,0 +1,47 @@ +namespace Sunny.UI +{ + partial class UIComboBox + { + /// + /// 必需的设计器变量。 + /// + 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(); + // + // UIComboBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Name = "UIComboBox"; + this.ButtonClick += new System.EventHandler(this.UIComboBox_ButtonClick); + this.FontChanged += new System.EventHandler(this.UIComboBox_FontChanged); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UIComboBox.cs b/SunnyUI/Controls/UIComboBox.cs new file mode 100644 index 00000000..5892944e --- /dev/null +++ b/SunnyUI/Controls/UIComboBox.cs @@ -0,0 +1,151 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIComboBox.cs + * 文件说明: 组合框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultProperty("Items")] + [DefaultEvent("SelectedIndexChanged")] + [ToolboxItem(true)] + public sealed partial class UIComboBox : UIDropControl + { + public UIComboBox() + { + InitializeComponent(); + } + + public event EventHandler SelectedIndexChanged; + + protected override void ItemForm_ValueChanged(object sender, object value) + { + selectedItem = ListBox.SelectedItem; + selectedIndex = ListBox.SelectedIndex; + Text = ListBox.Text; + Invalidate(); + SelectedIndexChanged?.Invoke(this, null); + } + + private readonly UIComboBoxItem item = new UIComboBoxItem(); + + protected override void CreateInstance() + { + ItemForm = new UIDropDown(item); + } + + protected override int CalcItemFormHeight() + { + int interval = ItemForm.Height - ItemForm.ClientRectangle.Height; + return 4 + Math.Min(Items.Count, MaxDropDownItems) * ItemHeight + interval; + } + + private UIListBox ListBox + { + get => item.ListBox; + } + + [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 ListBox.ObjectCollection Items => ListBox?.Items; + + [DefaultValue(25)] + public int ItemHeight + { + get => ListBox.ItemHeight; + set => ListBox.ItemHeight = value; + } + + [DefaultValue(8)] + public int MaxDropDownItems { get; set; } = 8; + + private int selectedIndex = -1; + + [Browsable(false)] + [DefaultValue(-1)] + public int SelectedIndex + { + get => selectedIndex; + set + { + if (value.InRange(-1, ListBox.Items.Count - 1)) + { + ListBox.SelectedIndex = value; + selectedIndex = value; + + if (value >= 0) + { + Text = ListBox.Items[value].ToString(); + } + } + } + } + + private object selectedItem; + + [Browsable(false)] + [DefaultValue(null)] + public object SelectedItem + { + get => selectedItem; + set + { + if (value != null) + { + int idx = ListBox.Items.IndexOf(value); + SelectedIndex = idx; + selectedItem = idx >= 0 ? value : null; + } + } + } + + private void UIComboBox_ButtonClick(object sender, EventArgs e) + { + if (Items.Count == 0 || ItemForm.Visible) + { + return; + } + + ItemForm.Show(this, new Size(Width, CalcItemFormHeight())); + } + + private void UIComboBox_FontChanged(object sender, EventArgs e) + { + if (ItemForm != null) + { + ListBox.Font = Font; + } + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + ListBox.SetStyleColor(uiColor); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIComboBox.resx b/SunnyUI/Controls/UIComboBox.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UIComboBox.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/SunnyUI/Controls/UIContextMenuStrip.cs b/SunnyUI/Controls/UIContextMenuStrip.cs new file mode 100644 index 00000000..fe75b4ca --- /dev/null +++ b/SunnyUI/Controls/UIContextMenuStrip.cs @@ -0,0 +1,115 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIContextMenuStrip.cs + * 文件说明: 上下文菜单 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public sealed class UIContextMenuStrip : ContextMenuStrip, IStyleInterface + { + public ContextMenuColorTable ColorTable = new ContextMenuColorTable(); + + public UIContextMenuStrip() + { + Font = UIFontColor.Font; + RenderMode = ToolStripRenderMode.Professional; + Renderer = new ToolStripProfessionalRenderer(ColorTable); + Version = UIGlobal.Version; + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + [DefaultValue(null)] + public string TagString { get; set; } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + ColorTable.SetStyleColor(uiColor); + BackColor = uiColor.ContextMenuColor; + Invalidate(); + } + + public string Version { get; } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + public void CalcHeight() + { + if (Items.Count > 0 && !AutoSize) + { + int height = 0; + foreach (ToolStripItem item in Items) + { + height += item.Height; + } + + Height = height + 4; + } + } + } + + public class ContextMenuColorTable : ProfessionalColorTable + { + private UIBaseStyle StyleColor = UIStyles.Blue; + + public void SetStyleColor(UIBaseStyle color) + { + StyleColor = color; + } + + public override Color MenuItemSelected => StyleColor.MenuSelectedColor; + + public override Color MenuItemPressedGradientBegin => StyleColor.ButtonFillPressColor; + + public override Color MenuItemPressedGradientMiddle => StyleColor.ButtonFillPressColor; + + public override Color MenuItemPressedGradientEnd => StyleColor.ButtonFillPressColor; + + public override Color MenuBorder => StyleColor.RectColor; + + public override Color MenuItemBorder => StyleColor.PrimaryColor; + + public override Color ImageMarginGradientBegin => StyleColor.ContextMenuColor; + + public override Color ImageMarginGradientEnd => StyleColor.ContextMenuColor; + + public override Color ImageMarginGradientMiddle => StyleColor.ContextMenuColor; + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIControl.cs b/SunnyUI/Controls/UIControl.cs new file mode 100644 index 00000000..99e5abd8 --- /dev/null +++ b/SunnyUI/Controls/UIControl.cs @@ -0,0 +1,692 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIControl.cs + * 文件说明: 控件基类 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 控件基类 + /// + [ToolboxItem(false)] + public class UIControl : Control, IStyleInterface + { + /// + /// 构造函数 + /// + public UIControl() + { + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer | ControlStyles.DoubleBuffer, true); + base.DoubleBuffered = true; + UpdateStyles(); + + Version = UIGlobal.Version; + base.Font = UIFontColor.Font; + Size = new Size(100, 35); + } + + /// + /// Tag字符串 + /// + [DefaultValue(null)] + public string TagString { get; set; } + + /// + /// 自定义主题样式 + /// + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + /// + /// 是否在设计期 + /// + protected bool IsDesignMode + { + get + { + if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) + { + return true; + } + else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv") + { + return true; + } + + return false; + } + } + + private ToolStripStatusLabelBorderSides _rectSides = ToolStripStatusLabelBorderSides.All; + + /// + /// 边框显示位置 + /// + [DefaultValue(ToolStripStatusLabelBorderSides.All), Description("边框显示位置")] + public ToolStripStatusLabelBorderSides RectSides + { + get => _rectSides; + set + { + _rectSides = value; + OnRectSidesChange(); + Invalidate(); + } + } + + protected virtual void OnRadiusSidesChange() + { + } + + protected virtual void OnRectSidesChange() + { + } + + private UICornerRadiusSides _radiusSides = UICornerRadiusSides.All; + + /// + /// 圆角显示位置 + /// + [DefaultValue(UICornerRadiusSides.All), Description("圆角显示位置")] + public UICornerRadiusSides RadiusSides + { + get => _radiusSides; + set + { + _radiusSides = value; + OnRadiusSidesChange(); + Invalidate(); + } + } + + private int radius = 5; + + /// + /// 圆角角度 + /// + [Description("圆角角度"), Category("自定义")] + [DefaultValue(5)] + public int Radius + { + get => radius; + set + { + if (radius != value) + { + radius = Math.Max(0, value); + Invalidate(); + } + } + } + + private bool showText = true; + + /// + /// 是否显示文字 + /// + [Description("是否显示文字")] + [DefaultValue(true)] + protected bool ShowText + { + get => showText; + set + { + if (showText != value) + { + showText = value; + Invalidate(); + } + } + } + + private bool showRect = true; + + /// + /// 是否显示边框 + /// + protected bool ShowRect + { + get => showRect; + set + { + if (showRect != value) + { + showRect = value; + Invalidate(); + } + } + } + + /// + /// 版本 + /// + public string Version { get; } + + /// + /// 设置主题样式 + /// + /// 主题样式 + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + /// + /// 设置主题样式颜色 + /// + /// + public virtual void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + fillColor = uiColor.ButtonFillColor; + rectColor = uiColor.RectColor; + foreColor = uiColor.ButtonForeColor; + + fillDisableColor = uiColor.FillDisableColor; + rectDisableColor = uiColor.RectDisableColor; + foreDisableColor = uiColor.ForeDisableColor; + + fillPressColor = fillHoverColor = fillColor; + rectPressColor = rectHoverColor = rectColor; + forePressColor = foreHoverColor = foreColor; + + selectedColor = uiColor.ButtonSelectedColor; + + Invalidate(); + } + + private UIStyle _style = UIStyle.Blue; + + /// + /// 主题样式 + /// + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + /// + /// 是否鼠标移上 + /// + [Browsable(false)] + public bool IsHover; + + /// + /// 是否鼠标按下 + /// + [Browsable(false)] + public bool IsPress; + + private ContentAlignment textAlign = ContentAlignment.MiddleCenter; + + /// + /// 文字对齐方向 + /// + [Description("文字对齐方向")] + [DefaultValue(ContentAlignment.MiddleCenter)] + public ContentAlignment TextAlign + { + get => textAlign; + set + { + if (textAlign != value) + { + textAlign = value; + Invalidate(); + } + } + } + + /// + /// OnPaint + /// + /// e + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + if (!Visible || Width <= 0 || Height <= 0) return; + + Rectangle rect = new Rectangle(0, 0, Width - 1, Height - 1); + GraphicsPath path = rect.CreateRoundedRectanglePath(radius, RadiusSides); + + //填充背景色 + if (fillColor.IsValid()) + { + OnPaintFill(e.Graphics, path); + } + + //填充边框色 + if (ShowRect) + { + OnPaintRect(e.Graphics, path); + } + + //填充文字 + if (ShowText) + { + OnPaintFore(e.Graphics, path); + } + + path.Dispose(); + } + + /// + /// 获取边框颜色 + /// + /// 颜色 + protected Color GetRectColor() + { + //边框 + Color color = rectColor; + if (IsHover) + color = rectHoverColor; + if (IsPress) + color = rectPressColor; + return Enabled ? color : rectDisableColor; + } + + /// + /// 获取字体颜色 + /// + /// 颜色 + protected Color GetForeColor() + { + //文字 + Color color = foreColor; + if (IsHover) + color = foreHoverColor; + if (IsPress) + color = forePressColor; + return Enabled ? color : foreDisableColor; + } + + /// + /// 获取填充颜色 + /// + /// 颜色 + protected Color GetFillColor() + { + //填充 + Color color = fillColor; + if (IsHover) + color = fillHoverColor; + if (IsPress) + color = fillPressColor; + return Enabled ? color : fillDisableColor; + } + + /// + /// 绘制填充 + /// + /// GDI绘图图面 + /// 路径 + protected virtual void OnPaintFill(Graphics g, GraphicsPath path) + { + Color color = GetFillColor(); + g.FillPath(color, path); + } + + private void PaintRectDisableSides(Graphics g) + { + //IsRadius为False时,显示左侧边线 + bool ShowRectLeft = RectSides.GetValue(ToolStripStatusLabelBorderSides.Left); + //IsRadius为False时,显示上侧边线 + bool ShowRectTop = RectSides.GetValue(ToolStripStatusLabelBorderSides.Top); + //IsRadius为False时,显示右侧边线 + bool ShowRectRight = RectSides.GetValue(ToolStripStatusLabelBorderSides.Right); + //IsRadius为False时,显示下侧边线 + bool ShowRectBottom = RectSides.GetValue(ToolStripStatusLabelBorderSides.Bottom); + + //IsRadius为True时,显示左上圆角 + bool RadiusLeftTop = RadiusSides.GetValue(UICornerRadiusSides.LeftTop); + //IsRadius为True时,显示左下圆角 + bool RadiusLeftBottom = RadiusSides.GetValue(UICornerRadiusSides.LeftBottom); + //IsRadius为True时,显示右上圆角 + bool RadiusRightTop = RadiusSides.GetValue(UICornerRadiusSides.RightTop); + //IsRadius为True时,显示右下圆角 + bool RadiusRightBottom = RadiusSides.GetValue(UICornerRadiusSides.RightBottom); + + var ShowRadius = RadiusSides > 0; + using (Pen pen = new Pen(GetFillColor())) + using (Pen penR = new Pen(GetRectColor())) + { + if (!ShowRadius || (!RadiusLeftBottom && !RadiusLeftTop)) + { + g.DrawLine(penR, 0, 0, 0, Height - 1); + } + + if (!ShowRadius || (!RadiusRightTop && !RadiusLeftTop)) + { + g.DrawLine(penR, 0, 0, Width - 1, 0); + } + + if (!ShowRadius || (!RadiusRightTop && !RadiusRightBottom)) + { + g.DrawLine(penR, Width - 1, 0, Width - 1, Height - 1); + } + + if (!ShowRadius || (!RadiusLeftBottom && !RadiusRightBottom)) + { + g.DrawLine(penR, 0, Height - 1, Width - 1, Height - 1); + } + + if (!ShowRectLeft) + { + if (!ShowRadius || (!RadiusLeftBottom && !RadiusLeftTop)) + { + g.DrawLine(pen, 0, 1, 0, Height - 2); + } + } + + if (!ShowRectTop) + { + if (!ShowRadius || (!RadiusRightTop && !RadiusLeftTop)) + { + g.DrawLine(pen, 1, 0, Width - 2, 0); + } + } + + if (!ShowRectRight) + { + if (!ShowRadius || (!RadiusRightTop && !RadiusRightBottom)) + { + g.DrawLine(pen, Width - 1, 1, Width - 1, Height - 2); + } + } + + if (!ShowRectBottom) + { + if (!ShowRadius || (!RadiusLeftBottom && !RadiusRightBottom)) + { + g.DrawLine(pen, 1, Height - 1, Width - 2, Height - 1); + } + } + + if (!ShowRectLeft && !ShowRectTop) + { + if (!ShowRadius || (!RadiusLeftBottom && !RadiusLeftTop)) + g.DrawLine(pen, 0, 0, 0, 1); + } + + if (!ShowRectRight && !ShowRectTop) + { + if (!ShowRadius || (!RadiusLeftBottom && !RadiusLeftTop)) + g.DrawLine(pen, Width - 1, 0, Width - 1, 1); + } + + if (!ShowRectLeft && !ShowRectBottom) + { + if (!ShowRadius || (!RadiusLeftBottom && !RadiusLeftTop)) + g.DrawLine(pen, 0, Height - 1, 0, Height - 2); + } + + if (!ShowRectRight && !ShowRectBottom) + { + if (!ShowRadius || (!RadiusLeftBottom && !RadiusLeftTop)) + g.DrawLine(pen, Width - 1, Height - 1, Width - 1, Height - 2); + } + } + } + + /// + /// 绘制边框 + /// + /// GDI绘图图面 + /// 路径 + protected virtual void OnPaintRect(Graphics g, GraphicsPath path) + { + Color color = GetRectColor(); + g.DrawPath(color, path); + PaintRectDisableSides(g); + } + + /// + /// 绘制字体 + /// + /// GDI绘图图面 + /// 路径 + protected virtual void OnPaintFore(Graphics g, GraphicsPath path) + { + Color color = GetForeColor(); + g.DrawString(Text, Font, color, Size, Padding, TextAlign); + } + + /// + /// 选中颜色 + /// + protected Color selectedColor = UIStyles.Blue.ButtonSelectedColor; + + /// + /// 边框颜色 + /// + protected Color rectColor = UIStyles.Blue.RectColor; + + /// + /// 填充颜色 + /// + protected Color fillColor = UIStyles.Blue.ButtonFillColor; + + /// + /// 字体颜色 + /// + protected Color foreColor = UIStyles.Blue.ButtonForeColor; + + /// + /// 字体鼠标移上颜色 + /// + protected Color foreHoverColor; + + /// + /// 字体鼠标按下颜色 + /// + protected Color forePressColor; + + /// + /// 字体不可用颜色 + /// + protected Color foreDisableColor = UIStyles.Blue.ForeDisableColor; + + /// + /// 边框鼠标移上颜色 + /// + protected Color rectHoverColor; + + /// + /// 边框鼠标按下颜色 + /// + protected Color rectPressColor; + + /// + /// 边框不可用颜色 + /// + protected Color rectDisableColor = UIStyles.Blue.RectDisableColor; + + /// + /// 填充鼠标移上颜色 + /// + protected Color fillHoverColor; + + /// + /// 填充鼠标按下颜色 + /// + protected Color fillPressColor; + + /// + /// 填充不可用颜色 + /// + protected Color fillDisableColor = UIStyles.Blue.FillDisableColor; + + /// + /// 设置选中颜色 + /// + /// 颜色 + protected void SetSelectedColor(Color value) + { + if (selectedColor != value) + { + selectedColor = value; + Invalidate(); + } + } + + /// + /// 设置填充鼠标移上颜色 + /// + /// 颜色 + protected void SetFillHoveColor(Color color) + { + fillHoverColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设置填充鼠标按下颜色 + /// + /// 颜色 + protected void SetFillPressColor(Color color) + { + fillPressColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设置填充不可用颜色 + /// + /// 颜色 + protected void SetFillDisableColor(Color color) + { + fillDisableColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设备边框鼠标移上颜色 + /// + /// 颜色 + protected void SetRectHoveColor(Color color) + { + rectHoverColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设置边框鼠标按下颜色 + /// + /// 颜色 + protected void SetRectPressColor(Color color) + { + rectPressColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设置边框不可用颜色 + /// + /// 颜色 + protected void SetRectDisableColor(Color color) + { + rectDisableColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设置字体鼠标移上颜色 + /// + /// 颜色 + protected void SetForeHoveColor(Color color) + { + foreHoverColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设置字体鼠标按下颜色 + /// + /// 颜色 + protected void SetForePressColor(Color color) + { + forePressColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设置字体不可用颜色 + /// + /// 颜色 + protected void SetForeDisableColor(Color color) + { + foreDisableColor = color; + _style = UIStyle.Custom; + } + + /// + /// 设置边框颜色 + /// + /// 颜色 + protected void SetRectColor(Color value) + { + if (rectColor != value) + { + rectColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + /// + /// 设置填充颜色 + /// + /// 颜色 + protected void SetFillColor(Color value) + { + if (fillColor != value) + { + fillColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + /// + /// 设置字体颜色 + /// + /// 颜色 + protected void SetForeColor(Color value) + { + if (foreColor != value) + { + foreColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIDataGridView.cs b/SunnyUI/Controls/UIDataGridView.cs new file mode 100644 index 00000000..24ff2a10 --- /dev/null +++ b/SunnyUI/Controls/UIDataGridView.cs @@ -0,0 +1,445 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIGrid.cs + * 文件说明: 表格 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 功能增强、美化 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public sealed class UIDataGridView : DataGridView, IStyleInterface + { + private readonly UIScrollBar Bar = new UIScrollBar(); + + public UIDataGridView() + { + BackgroundColor = UIColor.White; + GridColor = UIColor.Blue; + Font = UIFontColor.Font; + ScrollBars = ScrollBars.Vertical; + DoubleBuffered = true; + Bar.Parent = this; + Bar.Visible = false; + Bar.FillColor = UIColor.LightBlue; + Bar.ForeColor = UIColor.Blue; + Bar.StyleCustomMode = true; + Bar.ValueChanged += Bar_ValueChanged; + SetBarPosition(); + + //列占满行 + AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + + //支持自定义标题行风格 + EnableHeadersVisualStyles = false; + + //标题行风格 + ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single; + ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + ColumnHeadersDefaultCellStyle.BackColor = UIColor.Blue; + ColumnHeadersDefaultCellStyle.ForeColor = UIColor.White; + ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.True; + + //标题行行高,与OnColumnAdded事件配合 + ColumnHeadersHeight = 32; + + //数据行行高 + RowTemplate.Height = 29; + RowTemplate.MinimumHeight = 29; + AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None; + + //行选 + SelectionMode = DataGridViewSelectionMode.FullRowSelect; + + //禁止调整数据行行高 + AllowUserToResizeRows = false; + + //允许调整标题行行宽 + AllowUserToResizeColumns = true; + + //不显示数据行标题 + RowHeadersVisible = false; + + //禁止行多选 + MultiSelect = false; + + //自动生成行 + AutoGenerateColumns = true; + + //禁用最后一行空白,自动新增行 + AllowUserToAddRows = false; + + //禁止只读 + ReadOnly = false; + + //不显示表格线 + CellBorderStyle = DataGridViewCellBorderStyle.None; + + StripeEvenColor = UIColor.White; + StripeOddColor = UIColor.LightBlue; + + VerticalScrollBar.ValueChanged += VerticalScrollBar_ValueChanged; + } + + private void VerticalScrollBar_ValueChanged(object sender, EventArgs e) + { + Bar.Value = FirstDisplayedScrollingRowIndex; + } + + private void Bar_ValueChanged(object sender, EventArgs e) + { + FirstDisplayedScrollingRowIndex = Bar.Value; + } + + public void SetScrollInfo() + { + if (Bar == null) + { + return; + } + + if (VerticalScrollBar.Visible) + { + SetBarPosition(); + Bar.Maximum = RowCount - 1; + Bar.Value = FirstDisplayedScrollingRowIndex; + Bar.Visible = true; + } + else + { + Bar.Visible = false; + } + } + + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + if (Bar.Visible) + { + if (e.Delta > 10) + { + Bar.SetValue(Bar.Value - Bar.Maximum / 20); + } + else if (e.Delta < -10) + { + Bar.SetValue(Bar.Value + Bar.Maximum / 20); + } + } + } + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + SetScrollInfo(); + SetBarPosition(); + } + + private void SetBarPosition() + { + Bar.Left = Width - ScrollBarInfo.VerticalScrollBarWidth() - 2; + Bar.Top = 0; + Bar.Width = ScrollBarInfo.VerticalScrollBarWidth() + 1; + Bar.Height = Height; + Bar.BringToFront(); + } + + protected override void OnColumnAdded(DataGridViewColumnEventArgs e) + { + base.OnColumnAdded(e); + + //设置可调整标题行行高 + if (ColumnHeadersHeightSizeMode == DataGridViewColumnHeadersHeightSizeMode.AutoSize) + { + ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + } + } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + [DefaultValue(typeof(Color), "White")] + public Color StripeEvenColor + { + get => RowsDefaultCellStyle.BackColor; + set + { + RowsDefaultCellStyle.BackColor = value; + Invalidate(); + } + } + + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color StripeOddColor + { + get => AlternatingRowsDefaultCellStyle.BackColor; + set + { + AlternatingRowsDefaultCellStyle.BackColor = value; + Invalidate(); + } + } + + public void SetStyle(UIStyle style) + { + if (!style.Equals(UIStyle.Custom)) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + } + + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + //标题行颜色 + ColumnHeadersDefaultCellStyle.BackColor = uiColor.TitleColor; + ColumnHeadersDefaultCellStyle.ForeColor = uiColor.TitleForeColor; + + //数据行选中颜色 + DefaultCellStyle.SelectionBackColor = uiColor.GridSelectedColor; + DefaultCellStyle.SelectionForeColor = uiColor.GridSelectedForeColor; + + GridColor = RectColor = uiColor.RectColor; + RowsDefaultCellStyle.BackColor = UIColor.White; + AlternatingRowsDefaultCellStyle.BackColor = UIColor.LightBlue; + + StripeEvenColor = uiColor.GridStripeEvenColor; + StripeOddColor = uiColor.GridStripeOddColor; + + Bar.FillColor = uiColor.GridStripeOddColor; + Bar.ForeColor = uiColor.PrimaryColor; + + Invalidate(); + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + public string Version => UIGlobal.Version; + + public string TagString { get; set; } + + /// + /// 重新设置边框 + /// + /// 当前的Windows消息 + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + + if (ShowRect) + { + if (m.Msg == 0xf || m.Msg == 0x133) + { + Color color = RectColor; + color = Enabled ? color : UIDisableColor.Fill; + ControlEx.ResetBorderColor(m, this, 1, color); + } + } + } + + /// + /// 是否显示边框 + /// + [Description("是否显示边框"), Category("自定义")] + [DefaultValue(true)] + public bool ShowRect + { + get => BorderStyle == BorderStyle.FixedSingle; + set + { + BorderStyle = value ? BorderStyle.FixedSingle : BorderStyle.None; + Invalidate(); + } + } + + /// + /// 是否显示表格线 + /// + [Description("是否显示表格线"), Category("自定义")] + [DefaultValue(false)] + public bool ShowGridLine + { + get => CellBorderStyle == DataGridViewCellBorderStyle.Single; + set => CellBorderStyle = value ? DataGridViewCellBorderStyle.Single : DataGridViewCellBorderStyle.None; + } + + private Color _rectColor = UIColor.Blue; + + [Category("Appearance"), Description("The border color used to paint the control.")] + public Color RectColor + { + get => _rectColor; + set + { + if (_rectColor != value) + { + _rectColor = value; + Invalidate(); + } + } + } + + private int selectedIndex = -1; + + [Browsable(false)] + public int SelectedIndex + { + get => selectedIndex; + set + { + if (Rows.Count == 0) + { + selectedIndex = -1; + return; + } + + if (value >= 0 && value < Rows.Count) + { + Rows[value].Selected = true; + selectedIndex = value; + FirstDisplayedScrollingRowIndex = value; + SelectIndexChange?.Invoke(this, value); + } + else + { + selectedIndex = -1; + } + } + } + + protected override void OnDataSourceChanged(EventArgs e) + { + base.OnDataSourceChanged(e); + SetScrollInfo(); + selectedIndex = -1; + } + + public delegate void OnSelectIndexChange(object sender, int index); + + public event OnSelectIndexChange SelectIndexChange; + + protected override void OnCellClick(DataGridViewCellEventArgs e) + { + base.OnCellClick(e); + + if (e.RowIndex >= 0 && selectedIndex != e.RowIndex) + { + selectedIndex = e.RowIndex; + SelectIndexChange?.Invoke(this, e.RowIndex); + } + } + + protected override void OnAllowUserToAddRowsChanged(EventArgs e) + { + base.OnAllowUserToAddRowsChanged(e); + SetScrollInfo(); + } + + protected override void OnGridColorChanged(EventArgs e) + { + base.OnGridColorChanged(e); + _style = UIStyle.Custom; + } + + protected override void OnDefaultCellStyleChanged(EventArgs e) + { + base.OnDefaultCellStyleChanged(e); + _style = UIStyle.Custom; + } + + protected override void OnColumnDefaultCellStyleChanged(DataGridViewColumnEventArgs e) + { + base.OnColumnDefaultCellStyleChanged(e); + _style = UIStyle.Custom; + } + + public DataGridViewColumn AddColumn(string columnName, string dataPropertyName, int fillWeight = 100, DataGridViewContentAlignment alignment = DataGridViewContentAlignment.MiddleCenter, bool readOnly = true) + { + DataGridViewColumn column = new DataGridViewTextBoxColumn(); + column.HeaderText = columnName; + column.DataPropertyName = dataPropertyName; + column.Name = columnName; + column.ReadOnly = readOnly; + column.FillWeight = fillWeight; + column.SortMode = DataGridViewColumnSortMode.NotSortable; + column.DefaultCellStyle.Alignment = alignment; + Columns.Add(column); + return column; + } + + public DataGridViewColumn AddCheckBoxColumn(string columnName, string dataPropertyName, int fillWeight = 100, bool readOnly = true) + { + DataGridViewColumn column = new DataGridViewCheckBoxColumn(); + column.HeaderText = columnName; + column.DataPropertyName = dataPropertyName; + column.Name = columnName; + column.ReadOnly = readOnly; + column.FillWeight = fillWeight; + column.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + Columns.Add(column); + return column; + } + + public void ClearRows() + { + if (DataSource != null) + { + DataSource = null; + } + + Rows.Clear(); + } + + public void ClearColumns() + { + Columns.Clear(); + } + + public void ClearAll() + { + ClearRows(); + ClearColumns(); + } + + public void AddRow(params object[] values) + { + Rows.Add(values); + } + } + + public static class UIDataGridViewHelper + { + public static DataGridViewColumn SetFixedMode(this DataGridViewColumn column, int width) + { + column.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; + column.Width = width; + return column; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIDatePicker.Designer.cs b/SunnyUI/Controls/UIDatePicker.Designer.cs new file mode 100644 index 00000000..4d269cee --- /dev/null +++ b/SunnyUI/Controls/UIDatePicker.Designer.cs @@ -0,0 +1,48 @@ +namespace Sunny.UI +{ + partial class UIDatePicker + { + /// + /// 必需的设计器变量。 + /// + 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() + { + SuspendLayout(); + // + // UIDatePicker + // + AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + DropDownStyle = Sunny.UI.UIDropDownStyle.DropDownList; + Name = "UIDatePicker"; + Padding = new System.Windows.Forms.Padding(0, 0, 30, 0); + ButtonClick += new System.EventHandler(UIDatetimePicker_ButtonClick); + ResumeLayout(false); + PerformLayout(); + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UIDatePicker.cs b/SunnyUI/Controls/UIDatePicker.cs new file mode 100644 index 00000000..4727ec6b --- /dev/null +++ b/SunnyUI/Controls/UIDatePicker.cs @@ -0,0 +1,93 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIDatePicker.cs + * 文件说明: 日期选择框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [ToolboxItem(true)] + public sealed partial class UIDatePicker : UIDropControl + { + public delegate void OnDateTimeChanged(object sender, DateTime value); + + public UIDatePicker() + { + InitializeComponent(); + Value = DateTime.Now; + } + + public event OnDateTimeChanged ValueChanged; + + protected override void ItemForm_ValueChanged(object sender, object value) + { + Value = (DateTime)value; + Text = Value.ToString(dateFormat); + Invalidate(); + ValueChanged?.Invoke(this, Value); + } + + private readonly UIDateTimeControl item = new UIDateTimeControl(); + + protected override void CreateInstance() + { + ItemForm = new UIDropDown(item); + } + + private MonthCalendar MonthCalendar + { + get + { + return item.MonthCalendar; + } + } + + public DateTime Value + { + get => MonthCalendar.SelectionStart.Date; + set + { + Text = value.ToString(dateFormat); + MonthCalendar.SelectionStart = value; + } + } + + private void UIDatetimePicker_ButtonClick(object sender, EventArgs e) + { + ItemForm.Show(this); + } + + private string dateFormat = "yyyy-MM-dd"; + + [Description("日期格式化掩码"), Category("自定义")] + [DefaultValue("yyyy-MM-dd")] + public string DateFormat + { + get => dateFormat; + set + { + dateFormat = value; + Text = Value.ToString(dateFormat); + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIDatePicker.resx b/SunnyUI/Controls/UIDatePicker.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UIDatePicker.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/SunnyUI/Controls/UIDoubleUpDown.cs b/SunnyUI/Controls/UIDoubleUpDown.cs new file mode 100644 index 00000000..49bcf2bb --- /dev/null +++ b/SunnyUI/Controls/UIDoubleUpDown.cs @@ -0,0 +1,165 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIDoubleUpDown.cs + * 文件说明: 数字上下选择框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; + +namespace Sunny.UI +{ + [DefaultEvent("ValueChanged")] + [DefaultProperty("Value")] + public sealed partial class UIDoubleUpDown : UIPanel + { + public delegate void OnValueChanged(object sender, double value); + + public UIDoubleUpDown() + { + InitializeComponent(); + ShowText = false; + } + + public event OnValueChanged ValueChanged; + + private double _value = 0; + + [DefaultValue(0)] + public double Value + { + get => _value; + set + { + value = CheckMaxMin(value); + _value = value; + pnlValue.Text = _value.ToString("F" + Decimal); + ValueChanged?.Invoke(this, _value); + } + } + + [DefaultValue(1)] + public int Decimal { get; set; } = 1; + + private double step = 0.1; + + [DefaultValue(0.1)] + public double Step + { + get => step; + set + { + step = Math.Abs(value); + } + } + + private void btnAdd_Click(object sender, EventArgs e) + { + Value += Step; + } + + private void btnDec_Click(object sender, EventArgs e) + { + Value -= Step; + } + + private double _maximum = double.MaxValue; + private double _minimum = double.MinValue; + + [DefaultValue(double.MaxValue)] + public double Maximum + { + get => _maximum; + set + { + _maximum = value; + if (_maximum < _minimum) + _minimum = _maximum; + + Value = CheckMaxMin(Value); + Invalidate(); + } + } + + [DefaultValue(double.MinValue)] + public double Minimum + { + get => _minimum; + set + { + _minimum = value; + if (_minimum > _maximum) + _maximum = _minimum; + + Value = CheckMaxMin(Value); + Invalidate(); + } + } + + private double CheckMaxMin(double value) + { + if (hasMaximum) + { + if (value > _maximum) + value = _maximum; + } + + if (hasMinimum) + { + if (value < _minimum) + value = _minimum; + } + + return value; + } + + private bool hasMaximum; + private bool hasMinimum; + + [DefaultValue(false)] + public bool HasMaximum + { + get => hasMaximum; + set + { + if (hasMaximum != value) + { + hasMaximum = value; + Value = CheckMaxMin(Value); + Invalidate(); + } + } + } + + [DefaultValue(false)] + public bool HasMinimum + { + get => hasMinimum; + set + { + if (hasMinimum != value) + { + hasMinimum = value; + Value = CheckMaxMin(Value); + Invalidate(); + } + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIDoubleUpDown.designer.cs b/SunnyUI/Controls/UIDoubleUpDown.designer.cs new file mode 100644 index 00000000..8ec47a58 --- /dev/null +++ b/SunnyUI/Controls/UIDoubleUpDown.designer.cs @@ -0,0 +1,140 @@ +namespace Sunny.UI +{ + partial class UIDoubleUpDown + { + /// + /// 必需的设计器变量。 + /// + 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.btnDec = new Sunny.UI.UISymbolButton(); + this.btnAdd = new Sunny.UI.UISymbolButton(); + this.pnlValue = new Sunny.UI.UIPanel(); + this.SuspendLayout(); + // + // btnDec + // + this.btnDec.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDec.Dock = System.Windows.Forms.DockStyle.Left; + this.btnDec.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.btnDec.FillDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.btnDec.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(111)))), ((int)(((byte)(168)))), ((int)(((byte)(255))))); + this.btnDec.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.btnDec.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnDec.ForeColor = System.Drawing.Color.White; + this.btnDec.ForeDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(103))))); + this.btnDec.ForeHoverColor = System.Drawing.Color.White; + this.btnDec.ForePressColor = System.Drawing.Color.White; + this.btnDec.ImageInterval = 1; + this.btnDec.Location = new System.Drawing.Point(0, 0); + this.btnDec.Margin = new System.Windows.Forms.Padding(0); + this.btnDec.Name = "btnDec"; + this.btnDec.Padding = new System.Windows.Forms.Padding(26, 0, 0, 0); + this.btnDec.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.LeftTop | Sunny.UI.UICornerRadiusSides.LeftBottom))); + this.btnDec.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.btnDec.RectDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.btnDec.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(111)))), ((int)(((byte)(168)))), ((int)(((byte)(255))))); + this.btnDec.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.btnDec.Size = new System.Drawing.Size(29, 29); + this.btnDec.Style = Sunny.UI.UIStyle.Blue; + this.btnDec.Symbol = 61544; + this.btnDec.TabIndex = 0; + this.btnDec.Text = null; + this.btnDec.TipsFont = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this.btnDec.TipsText = null; + this.btnDec.Click += new System.EventHandler(this.btnDec_Click); + // + // btnAdd + // + this.btnAdd.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAdd.Dock = System.Windows.Forms.DockStyle.Right; + this.btnAdd.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.btnAdd.FillDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.btnAdd.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(111)))), ((int)(((byte)(168)))), ((int)(((byte)(255))))); + this.btnAdd.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.btnAdd.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnAdd.ForeColor = System.Drawing.Color.White; + this.btnAdd.ForeDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(103))))); + this.btnAdd.ForeHoverColor = System.Drawing.Color.White; + this.btnAdd.ForePressColor = System.Drawing.Color.White; + this.btnAdd.ImageInterval = 1; + this.btnAdd.Location = new System.Drawing.Point(87, 0); + this.btnAdd.Margin = new System.Windows.Forms.Padding(0); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Padding = new System.Windows.Forms.Padding(26, 0, 0, 0); + this.btnAdd.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom))); + this.btnAdd.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.btnAdd.RectDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.btnAdd.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(111)))), ((int)(((byte)(168)))), ((int)(((byte)(255))))); + this.btnAdd.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.btnAdd.Size = new System.Drawing.Size(29, 29); + this.btnAdd.Style = Sunny.UI.UIStyle.Blue; + this.btnAdd.Symbol = 61543; + this.btnAdd.TabIndex = 1; + this.btnAdd.Text = null; + this.btnAdd.TipsFont = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this.btnAdd.TipsText = null; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // pnlValue + // + this.pnlValue.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlValue.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.pnlValue.FillDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.pnlValue.Font = new System.Drawing.Font("微软雅黑", 12F); + this.pnlValue.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.pnlValue.ForeDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(103))))); + this.pnlValue.Location = new System.Drawing.Point(29, 0); + this.pnlValue.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.pnlValue.Name = "pnlValue"; + this.pnlValue.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.pnlValue.RectDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.pnlValue.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.pnlValue.RadiusSides = UICornerRadiusSides.None; + this.pnlValue.Size = new System.Drawing.Size(58, 29); + this.pnlValue.Style = Sunny.UI.UIStyle.Blue; + this.pnlValue.TabIndex = 2; + this.pnlValue.Text = "0"; + // + // UIIntegerUpDown + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.pnlValue); + this.Controls.Add(this.btnAdd); + this.Controls.Add(this.btnDec); + this.MinimumSize = new System.Drawing.Size(100, 0); + this.Name = "UIIntegerUpDown"; + this.Size = new System.Drawing.Size(116, 29); + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolButton btnDec; + private UISymbolButton btnAdd; + private UIPanel pnlValue; + } +} diff --git a/SunnyUI/Controls/UIDoubleUpDown.resx b/SunnyUI/Controls/UIDoubleUpDown.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UIDoubleUpDown.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/SunnyUI/Controls/UIEdit.cs b/SunnyUI/Controls/UIEdit.cs new file mode 100644 index 00000000..d571d254 --- /dev/null +++ b/SunnyUI/Controls/UIEdit.cs @@ -0,0 +1,496 @@ +using System; +using System.ComponentModel; +using System.Globalization; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [ToolboxItem(false)] + public sealed class UIEdit : TextBox + { + private bool canEmpty; + private int decLength = 2; + private bool hasMaxValue; + private bool hasMinValue; + private string mask = "0.00"; + private double maxValue = double.MaxValue; + private double minValue = double.MinValue; + private UITextBox.UIEditType _uiEditType = UITextBox.UIEditType.String; + + public UIEdit() + { + //设置为单选边框 + BorderStyle = BorderStyle.FixedSingle; + Font = UIFontColor.Font; + ForeColor = UIFontColor.Primary; + Width = 150; + MaxLength = 255; + } + + protected override void OnKeyDown(KeyEventArgs e) + { + if (e.KeyData == Keys.Enter || e.KeyData == Keys.Down) + { + if (e.KeyData == Keys.Enter) + { + EnterKeyPress?.Invoke(this, e); + } + + if (EnterAsTab) + { + SendKeys.Send("{tab}"); + } + + e.Handled = true; + } + + if (e.KeyData == Keys.Up) + { + if (EnterAsTab) + { + SendKeys.Send("+{TAB}"); + } + + e.Handled = true; + } + + base.OnKeyDown(e); + + EditOnKeyDown(e); + } + + public bool EnterAsTab { get; set; } + + public event EventHandler EnterKeyPress; + + private void EditOnKeyDown(KeyEventArgs e) + { + if (e.Control && e.KeyCode == Keys.A) + { + SelectAll(); + e.SuppressKeyPress = true; + } + + if (e.Control && e.KeyCode == Keys.C) + { + Copy(); + e.SuppressKeyPress = true; + } + + if (e.Control && e.KeyCode == Keys.V) + { + Paste(); + e.SuppressKeyPress = true; + } + } + + [ + DefaultValue(typeof(bool), "false"), + Category("Appearance"), + Description("整型、浮点型可以为空") + ] + public bool CanEmpty + { + get => canEmpty; + set + { + if (canEmpty != value) + { + canEmpty = value; + Invalidate(); + } + } + } + + [ + DefaultValue(UITextBox.UIEditType.String), + Category("Appearance"), + Description("设置编辑框输入内容属性") + ] + public UITextBox.UIEditType Type + { + get => _uiEditType; + set + { + if (_uiEditType == value) return; + _uiEditType = value; + + switch (_uiEditType) + { + case UITextBox.UIEditType.Double: + Text = mask; + break; + + case UITextBox.UIEditType.Integer: + Text = @"0"; + break; + + case UITextBox.UIEditType.String: + Text = ""; + break; + } + + CheckMaxMin(); + if (DesignMode) + Invalidate(); + } + } + + [DefaultValue(2)] + public int DecLength + { + get => decLength; + set + { + if (decLength != value) + { + decLength = value; + if (decLength < 0) + { + decLength = 0; + } + + if (_uiEditType == UITextBox.UIEditType.Double) + { + mask = DecimalToMask(decLength); + Text = mask; + Invalidate(); + } + } + } + } + + [DefaultValue(false)] + public bool HasMaxValue + { + get => hasMaxValue; + set + { + if (hasMaxValue != value) + { + hasMaxValue = value; + CheckMaxMin(); + Invalidate(); + } + } + } + + [DefaultValue(false)] + public bool HasMinValue + { + get => hasMinValue; + set + { + if (hasMinValue != value) + { + hasMinValue = value; + CheckMaxMin(); + Invalidate(); + } + } + } + + [DefaultValue(0)] + public double DoubleValue + { + get + { + if (Text == "" && CanEmpty) return 0; + return Text.ToDouble(); + } + set + { + if (_uiEditType == UITextBox.UIEditType.Double) + { + if (Text != value.ToString(CultureInfo.InvariantCulture)) + { + CheckMaxMin(); + Text = value.ToString("f" + decLength); + } + } + } + } + + [DefaultValue(0)] + public int IntValue + { + get + { + if (Text == "" && CanEmpty) return 0; + return Text.ToInt(); + } + set + { + if (_uiEditType != UITextBox.UIEditType.Integer) return; + if (Text == value.ToString()) return; + CheckMaxMin(); + Text = value.ToString(); + } + } + + [DefaultValue(int.MaxValue)] + public double MaxValue + { + get => maxValue; + set + { + maxValue = value; + if (maxValue < minValue) + minValue = maxValue; + CheckMaxMin(); + Invalidate(); + } + } + + [DefaultValue(int.MinValue)] + public double MinValue + { + get => minValue; + set + { + minValue = value; + if (minValue > maxValue) + maxValue = minValue; + CheckMaxMin(); + Invalidate(); + } + } + + private string DecimalToMask(int iDecimal) + { + if (iDecimal == 0) + return "0"; + var str = "0."; + for (int i = 1; i <= iDecimal; i++) + str = str + "0"; + return str; + } + + private int SubCharCount(string str, char subChar) + { + string[] IDList = str.Split(subChar); + return IDList.Length - 1; + } + + private bool StringIndexIsChar(string str, int idx, char inChar) + { + if (str == "") + return false; + if (idx >= str.Length) + return false; + char[] cl = str.ToCharArray(); + return cl[idx] == inChar; + } + + private bool IsValidChar(string str, char KeyChar, int pos) + { + bool b; + if (_uiEditType == UITextBox.UIEditType.Integer) + { + b = char.IsDigit(KeyChar); + if (b) + { + if ((str.IndexOf('+') >= 0) | (str.IndexOf('-') >= 0)) + { + if ((pos == 1) & (SelectionLength > 0)) + return true; + + b = pos > 1; + } + return b; + } + + b = KeyChar.Equals('+'); + if (b) + { + if (str == "") return true; + if (pos != 1) return false; + b = ((str.IndexOf('+') == -1) & (str.IndexOf('-') == -1)) | (SelectionLength > 0); + return b; + } + + b = KeyChar.Equals('-'); + if (b) + { + if (str == "") return true; + if (pos != 1) return false; + b = ((str.IndexOf('+') == -1) & (str.IndexOf('-') == -1)) | (SelectionLength > 0); + return b; + } + + return false; + } + + if (_uiEditType == UITextBox.UIEditType.Double) + { + b = char.IsDigit(KeyChar); + if (b) + { + if ((str.IndexOf('+') >= 0) | (str.IndexOf('-') >= 0)) + { + if ((pos == 1) & (SelectionLength > 0)) + return true; + + b = pos > 1; + } + return b; + } + + b = KeyChar.Equals('.'); + if (b) + { + if (str == "") return true; + if (SubCharCount(str, KeyChar) != 0) return false; + if ((str.IndexOf('+') >= 0) | (str.IndexOf('-') >= 0)) + { + if ((pos == 1) & (SelectionLength > 0)) + return true; + + b = pos > 1; + } + return b; + } + + b = KeyChar.Equals('+'); + if (b) + { + if (str == "") return true; + if (pos != 1) return false; + b = ((str.IndexOf('+') == -1) & (str.IndexOf('-') == -1)) | (SelectionLength > 0); + return b; + } + + b = KeyChar.Equals('-'); + if (b) + { + if (str == "") return true; + if (pos != 1) return false; + b = ((str.IndexOf('+') == -1) & (str.IndexOf('-') == -1)) | (SelectionLength > 0); + return b; + } + + return false; + } + + return true; + } + + public void CheckMaxMin() + { + if (_uiEditType == UITextBox.UIEditType.Integer) + { + if (Text == "" && CanEmpty) return; + + if (!int.TryParse(Text, out var a)) + Text = @"0"; + + if (hasMaxValue) + { + var m = (int)Math.Floor(maxValue); + if (a > m) + a = m; + } + if (hasMinValue) + { + var m = (int)Math.Ceiling(minValue); + if (a < m) + a = m; + } + + Text = a.ToString(); + } + + if (_uiEditType == UITextBox.UIEditType.Double) + { + if (Text == "" && CanEmpty) return; + + if (!double.TryParse(Text, out var a)) + Text = a.ToString("f" + decLength); + + if (hasMaxValue) + { + if (a > maxValue) + a = maxValue; + } + + if (hasMinValue) + { + if (a < minValue) + a = minValue; + } + + Text = a.ToString("f" + decLength); + } + } + + protected override void OnKeyPress(KeyPressEventArgs e) + { + //以下代码 取消按下回车或esc的“叮”声 + if (e.KeyChar == Convert.ToChar(13) || e.KeyChar == Convert.ToChar(27)) + { + e.Handled = true; + } + else if (e.KeyChar == 8) + { + } + else if (!(IsValidChar(Text, e.KeyChar, SelectionStart + 1) & (e.KeyChar >= 32))) + { + e.Handled = true; + } + + base.OnKeyPress(e); + } + + /// + /// 在得到焦点时修改文体框的背景色 + /// + /// + protected override void OnGotFocus(EventArgs e) + { + base.OnGotFocus(e); + SelectionStart = Text.Length; + SelectionLength = 0; + } + + protected override void OnLeave(EventArgs e) + { + base.OnLeave(e); + + //如果为整形,为空时自动为0 + if (_uiEditType == UITextBox.UIEditType.Integer) + { + if (Text == "" && CanEmpty) return; + + if (Text == "") + Text = "0"; + + if (!Text.IsInt()) + Text = "0"; + } + + //如果为浮点,检查.前后是否为空,为空加0 + if (_uiEditType == UITextBox.UIEditType.Double) + { + if (Text == "" && CanEmpty) return; + + if (StringIndexIsChar(Text, 0, '.')) + Text = @"0" + Text; + + if (StringIndexIsChar(Text, Text.Length - 1, '.')) + Text = Text + @"0"; + + if (StringIndexIsChar(Text, 0, '+') || StringIndexIsChar(Text, 0, '+')) + if (StringIndexIsChar(Text, 1, '.')) + Text = Text.Insert(1, @"0"); + + if (!double.TryParse(Text, out var doubleValue)) + Text = mask; + + Text = doubleValue.ToString("f" + decLength); + } + + CheckMaxMin(); + Invalidate(); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIGlobal.cs b/SunnyUI/Controls/UIGlobal.cs new file mode 100644 index 00000000..bd5d0542 --- /dev/null +++ b/SunnyUI/Controls/UIGlobal.cs @@ -0,0 +1,122 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIGlobal.cs + * 文件说明: 全局参数类 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using Sunny.UI.Properties; +using System.Collections.Generic; +using System.Reflection; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 全局参数类 + /// + public static class UIGlobal + { + /// + /// 版本 + /// + public static string Version = Resources.Name + " " + Resources.Version; + + public static bool IsCustom(this UIStyle style) + { + return style.Equals(UIStyle.Custom); + } + + public static bool IsValid(this UIStyle style) + { + return !style.IsCustom(); + } + + public static bool IsCustom(this UIBaseStyle style) + { + return style.Name.IsCustom(); + } + + public static bool IsValid(this UIBaseStyle style) + { + return !style.IsCustom(); + } + + public static void SetChildUIStyle(Control ctrl, UIStyle style) + { + List controls = ctrl.GetUIStyleControls("IStyleInterface"); + foreach (var control in controls) + { + if (control is IStyleInterface item) + { + if (!item.StyleCustomMode) + { + item.Style = style; + } + } + } + + FieldInfo[] fieldInfo = ctrl.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance); + foreach (var info in fieldInfo) + { + if (info.FieldType.Name == "UIContextMenuStrip") + { + UIContextMenuStrip context = (UIContextMenuStrip)info.GetValue(ctrl); + if (context != null && !context.StyleCustomMode) + { + context.SetStyle(style); + } + } + } + } + + /// + /// 查找包含接口名称的控件列表 + /// + /// 容器 + /// 接口名称 + /// 控件列表 + private static List GetUIStyleControls(this Control ctrl, string interfaceName) + { + List values = new List(); + + foreach (Control obj in ctrl.Controls) + { + if (obj.GetType().GetInterface(interfaceName) != null) + { + values.Add(obj); + } + + if (obj is UIPage) continue; + if (obj is UIPanel) continue; + + if (obj.Controls.Count > 0) + { + values.AddRange(obj.GetUIStyleControls(interfaceName)); + } + } + + return values; + } + + public static void ReStart(this Timer timer) + { + timer.Stop(); + timer.Start(); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIGrid.cs b/SunnyUI/Controls/UIGrid.cs new file mode 100644 index 00000000..40174041 --- /dev/null +++ b/SunnyUI/Controls/UIGrid.cs @@ -0,0 +1,1062 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIGrid.cs + * 文件说明: 表格 + * 当前版本: V2.2 + * 创建日期: 2020-04-15 + * + * 2020-04-11: V2.2.2 增加UIGrid + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +#pragma warning disable 1591 +// ReSharper disable All + +namespace Sunny.UI +{ + [DefaultEvent("CellValueChanged")] + [DefaultProperty("Columns")] + [ToolboxItem(false)] + public sealed class UIGrid : UIPanel + { + private UIRowsLayout RowsLayout; + private UIPanel Header; + private UIPanel Footer; + private UIScrollBar ScrollBar; + private UIPanel Cover; + + public UIGrid() + { + InitializeComponent(); + RowsLayout.DoubleBuffered(); + Header.DoubleBuffered(); + Footer.DoubleBuffered(); + ScrollBar.DoubleBuffered(); + + ShowFooter = false; + RowsLayout.AutoScroll = true; + RowsLayout.MouseWheel += RowContainer_MouseWheel; + + StripeEvenColor = UIColor.White; + StripeOddColor = UIStyles.Blue.PlainColor; + RowSelectedColor = UIStyles.Blue.GridSelectedColor; + + HeaderFillColor = UIStyles.Blue.TitleColor; + HeaderForeColor = UIStyles.Blue.TitleForeColor; + + columns.OnAppend += Columns_Changed; + columns.OnDelete += Columns_Changed; + RowsLayout.HorizontalScroll.Visible = false;//水平的显示 + RowsLayout.HorizontalScroll.Enabled = false; + + showWidth = Width; + } + + private bool showLine; + + [DefaultValue(false)] + public bool ShowLine + { + get => showLine; + set + { + if (showLine != value) + { + showLine = value; + foreach (var row in Rows) + { + row.RectSides = showLine + ? ToolStripStatusLabelBorderSides.Bottom + : ToolStripStatusLabelBorderSides.None; + } + } + } + } + + private Color lineColor = Color.FromArgb(233, 236, 244); + + [DefaultValue(typeof(Color), "233, 236, 244")] + public Color LineColor + { + get => lineColor; + set + { + lineColor = value; + foreach (var row in Rows) + { + row.Invalidate(); + } + } + } + + private void Columns_Changed(object sender, UIGridColumn item, int index) + { + if (!columnAdding) + { + ClearRows(); + InitHeaderFooter(); + } + } + + private int showWidth; + + private int ShowWidth + { + get => showWidth; + set + { + showWidth = value; + InitHeaderFooter(); + } + } + + private void CalcCellBounds() + { + if (ColumnCount == 0) return; + int fixedWidth = 0; + int fillWeight = 0; + foreach (var column in Columns) + { + if (column.SizeMode == UIGridColumnSizeMode.Fixed) + fixedWidth += column.Width; + if (column.SizeMode == UIGridColumnSizeMode.Fill) + fillWeight += column.FillWeight; + } + + int existWidth = ShowWidth - fixedWidth; + int left = 0; + foreach (var column in Columns) + { + int width = 0; + if (column.SizeMode == UIGridColumnSizeMode.Fixed) + width = column.Width; + if (column.SizeMode == UIGridColumnSizeMode.Fill) + width += column.FillWeight * existWidth / fillWeight; + + if (width <= 0) + column.Bounds = new Rectangle(left + 1, 1, 10, RowHeight - 3); + else + column.Bounds = new Rectangle(left + 1, 1, width - 2, RowHeight - 3); + + left += width; + } + } + + public delegate void UIGridCellValueChanged(object sender, UIGridColumn column, UIGridRow row, object data, object value); + + public event UIGridCellValueChanged CellValueChanged; + + public event UIGridCellValueChanged CellButtonClick; + + public event UIGridCellValueChanged CellLinkClick; + + public event UIGridCellValueChanged CellDoubleClick; + + public void GridCellValueChange(object sender, UIGridColumn column, UIGridRow row, object data, object value) + { + CellValueChanged?.Invoke(this, column, row, data, value); + } + + public void GridCellButtonClick(object sender, UIGridColumn column, UIGridRow row, object data, object value) + { + CellButtonClick?.Invoke(this, column, row, data, value); + } + + public void GridCellLinkClick(object sender, UIGridColumn column, UIGridRow row, object data, object value) + { + CellLinkClick?.Invoke(this, column, row, data, value); + } + + public void GridCellDoubleClick(object sender, UIGridColumn column, UIGridRow row, object data, object value) + { + CellDoubleClick?.Invoke(sender, column, row, data, value); + } + + private void RowsLayout_SizeChanged(object sender, EventArgs e) + { + CalcCellBounds(); + ScrollBar.Top = RowsLayout.Top; + ScrollBar.Height = RowsLayout.Height; + Cover.Location = RowsLayout.Location; + Cover.Size = RowsLayout.Size; + + int height = Rows.Count * RowHeight; + ShowWidth = height > RowsLayout.Height ? Width - ScrollBarInfo.VerticalScrollBarWidth() - 2 : Width - 2; + if (Rows.Count > 0) + { + flicker.FreezePainting(RowsLayout, true); + + foreach (var row in Rows) + { + if (row.Width != ShowWidth) + { + row.Width = ShowWidth; + } + } + + flicker.FreezePainting(RowsLayout, false); + } + } + + /// + /// 显示斑马条纹 + /// + [Description("显示斑马条纹")] + [DefaultValue(true)] + public bool Stripe { get; set; } = true; + + [DefaultValue(typeof(Color), "White")] + public Color StripeEvenColor { get; set; } + + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color StripeOddColor { get; set; } + + [DefaultValue(typeof(Color), "155, 200, 255")] + public Color RowSelectedColor { get; set; } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + StripeEvenColor = uiColor.GridStripeEvenColor; + StripeOddColor = uiColor.GridStripeOddColor; + RowSelectedColor = uiColor.GridSelectedColor; + + HeaderFillColor = uiColor.TitleColor; + HeaderForeColor = uiColor.TitleForeColor; + Header.RectColor = uiColor.RectColor; + + RowsLayout.RectColor = uiColor.RectColor; + Footer.RectColor = uiColor.RectColor; + + LineColor = uiColor.GridLineColor; + + ScrollBar.SetStyleColor(uiColor); + + flicker.FreezePainting(RowsLayout, true); + + foreach (var row in Rows) + { + row.SetStyleColor(uiColor); + } + + flicker.FreezePainting(RowsLayout, false); + } + + private ListEx columns = new ListEx(); + + [TypeConverter(typeof(System.ComponentModel.CollectionConverter))]//指定编辑器特性 + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]//设定序列化特性 + public ListEx Columns + { + get { return columns; } + set + { + ClearRows(); + columns = value; + columns.OnAppend += Columns_Changed; + columns.OnDelete += Columns_Changed; + InitHeaderFooter(); + } + } + + public UIGridColumn GetColumnByGuid(string guid) + { + if (columns == null) return null; + foreach (var column in Columns) + { + if (column.Guid.Equals(guid)) + return column; + } + + return null; + } + + public UIGridColumn GetColumnByName(string name) + { + if (columns == null) return null; + foreach (var column in Columns) + { + if (column.Name.Equals(name)) + return column; + } + + return null; + } + + public UIGridColumn GetColumnByHeaderText(string headerText) + { + if (columns == null) return null; + foreach (var column in Columns) + { + if (column.HeaderText.Equals(headerText)) + return column; + } + + return null; + } + + public UIGridColumn GetColumnByDataPropertyName(string dataPropertyName) + { + if (columns == null) return null; + foreach (var column in Columns) + { + if (column.DataPropertyName.Equals(dataPropertyName)) + return column; + } + + return null; + } + + public UIGridColumn this[int index] + { + get + { + if (columns == null || columns.Count == 0) return null; + if (index < 0 || index >= ColumnCount) return null; + return columns[index]; + } + } + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + SetScrollInfo(); + } + + [Browsable(false)] + public int ColumnCount => Columns == null ? 0 : Columns.Count; + + private void SetScrollInfo() + { + if (ScrollBar == null) + { + return; + } + + var si = ScrollBarInfo.GetInfo(RowsLayout.Handle); + + if (si.ScrollMax > 0) + { + ScrollBar.Maximum = si.ScrollMax; + ShowScrollBar = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0; + ScrollBar.Value = si.nPos; + } + else + { + ShowScrollBar = false; + } + + ScrollBar.Top = RowsLayout.Top; + ScrollBar.Height = RowsLayout.Height; + ScrollBar.Width = ScrollBarInfo.VerticalScrollBarWidth() + 1; + ScrollBar.Left = Width - ScrollBar.Width; + } + + private void RowContainer_MouseWheel(object sender, MouseEventArgs e) + { + base.OnMouseWheel(e); + if (ShowScrollBar) + { + var si = ScrollBarInfo.GetInfo(Handle); + if (e.Delta > 10) + { + if (si.nPos > 0) + { + ScrollBarInfo.ScrollUp(Handle); + } + } + else if (e.Delta < -10) + { + if (si.nPos < si.ScrollMax) + { + ScrollBarInfo.ScrollDown(Handle); + } + } + } + + SetScrollInfo(); + } + + [DefaultValue(false)] + [Browsable(false)] + public bool ShowScrollBar + { + get => ScrollBar.Visible; + set + { + ScrollBar.Visible = value; + ScrollBar.BringToFront(); + } + } + + [DefaultValue(false)] + public bool ShowFooter + { + get => Footer.Visible; + set => Footer.Visible = value; + } + + [DefaultValue(true)] + public bool ShowHeader + { + get => Header.Visible; + set => Header.Visible = value; + } + + [DefaultValue(typeof(Color), "64, 158, 255")] + public Color HeaderFillColor + { + get => Header.FillColor; + set + { + Header.FillColor = value; + Header.Invalidate(); + } + } + + [DefaultValue(typeof(Color), "White")] + public Color HeaderForeColor + { + get => Header.ForeColor; + set + { + Header.ForeColor = value; + Header.Invalidate(); + } + } + + [DefaultValue(typeof(Color), "32, 32, 32")] + public Color FooterForeColor + { + get => Footer.ForeColor; + set + { + Footer.ForeColor = value; + Footer.Invalidate(); + } + } + + [DefaultValue(typeof(Color), "White")] + public Color FooterFillColor + { + get => Footer.FillColor; + set + { + Footer.FillColor = value; + Footer.Invalidate(); + } + } + + [DefaultValue(35)] + public int HeaderHeight + { + get => Header.Height; + set + { + Header.Height = value; + } + } + + /// + /// 类型为Image时图片列表 + /// + [DefaultValue(null)] + public ImageList ImageList { get; set; } + + public UIGridColumn AddColumn(UIGridColumn column) + { + Columns.Add(column); + if (!columnAdding) + { + InitHeaderFooter(); + } + + return column; + } + + public void BeginAddColumn() + { + columnAdding = true; + } + + private bool columnAdding; + + public void EndAddColumn() + { + columnAdding = false; + InitHeaderFooter(); + } + + public void InitHeaderFooter() + { + CalcCellBounds(); + Header.Invalidate(); + Footer.Invalidate(); + } + + public UIGridColumn AddColumn(string name, string headerText, string dataPropertyName, UIGridColumnType columnType = UIGridColumnType.Label, UIGridColumnSizeMode sizeMode = UIGridColumnSizeMode.Fill, int fillWeight = 100) + { + return AddColumn(new UIGridColumn(name, headerText, dataPropertyName, columnType, sizeMode, fillWeight)); + } + + private AvoidControlFlicker flicker = new AvoidControlFlicker(); + + private string noData = UILocalize.GridNoData; + + public string NoData + { + get => noData; + set + { + noData = value; + if (dataSource == null) + { + Cover.Text = value; + } + } + } + + public string DataLoading { get; set; } = UILocalize.GridDataLoading; + + public void BeginUpdate() + { + flicker.FreezePainting(RowsLayout, true); + Cover.Text = DataLoading; + Application.DoEvents(); + } + + public void EndUpdate() + { + flicker.FreezePainting(RowsLayout, false); + Application.DoEvents(); + SetScrollInfo(); + Cover.Visible = false; + Cover.SendToBack(); + } + + private void InitLayoutPanel(TableLayoutPanel layout) + { + layout.ColumnCount = ColumnCount; + layout.ColumnStyles.Clear(); + foreach (var column in Columns) + { + SizeType sizeType = column.SizeMode == UIGridColumnSizeMode.Fixed + ? SizeType.Absolute + : SizeType.Percent; + int width = column.SizeMode == UIGridColumnSizeMode.Fixed ? column.Width : column.FillWeight; + layout.ColumnStyles.Add(new ColumnStyle(sizeType, width)); + } + } + + private void HeaderCell_Click(object sender, EventArgs e) + { + if (!RowsLayout.Focused) + RowsLayout.Focus(); + } + + public void UpdateFooterText(UIGridColumn column, string footerText) + { + Footer.Invalidate(); + } + + [DefaultValue(32)] + public int RowHeight { get; set; } = 32; + + private object dataSource; + + [Browsable(false)] + [DefaultValue(null)] + public object DataSource + { + get { return dataSource; } + set + { + if (value != null) + { + if (!(value is DataTable || value.GetType().IsList())) + { + throw new Exception(UILocalize.GridDataSourceException); + } + } + + dataSource = value; + if (dataSource != null) + { + LoadDataSource(); + SelectedFirst(); + } + } + } + + public void ClearRows() + { + DataSource = null; + foreach (var row in Rows) + { + row.Dispose(); + } + + Rows.Clear(); + + Cover.Location = RowsLayout.Location; + Cover.Size = RowsLayout.Size; + Cover.BringToFront(); + Cover.Visible = true; + } + + public void ClearColumns() + { + Columns.Clear(); + ClearRows(); + } + + public void SelectedFirst() + { + if (Rows.Count > 0) + { + SelectedRow = Rows[0]; + } + } + + private UIGridRow selectedRow; + + [Browsable(false)] + [DefaultValue(null)] + public UIGridRow SelectedRow + { + get => selectedRow; + set + { + if (Rows.Count == 0) + { + selectedRow = null; + return; + } + + if (value == null) + { + selectedRow = null; + return; + } + + if (selectedRow == value) + { + return; + } + + if (selectedRow != null) + { + selectedRow.Selected = false; + } + + selectedRow = value; + selectedRow.Selected = true; + flicker.FreezePainting(RowsLayout, true); + RowsLayout.ScrollControlIntoView(value); + flicker.FreezePainting(RowsLayout, false); + } + } + + [Browsable(false)] + [DefaultValue(-1)] + public int SelectedRowIndex + { + get => selectedRow == null ? -1 : selectedRow.RowIndex; + set + { + if (Rows.Count > 0 && value >= 0 && value < Rows.Count) + { + SelectedRow = Rows[value]; + } + } + } + + public List SelectedRows => GetSelectedRows(); + + private List GetSelectedRows() + { + return null; + } + + [Browsable(false)] + private int DataCount + { + get + { + int count = 0; + if (dataSource == null) + { + return count; + } + + if (dataSource is DataTable) + { + count = (dataSource as DataTable).Rows.Count; + } + + if (dataSource.GetType().IsList()) + { + count = (dataSource as IList).Count; + } + + return count; + } + } + + private void LoadDataSource() + { + if (IsDesignMode) + { + return; + } + + if (DataCount == 0) + { + return; + } + + BeginUpdate(); + + if (Rows.Count > DataCount) + { + for (int i = DataCount; i < Rows.Count; i++) + { + Rows[i].Dispose(); + } + + Rows.RemoveRange(DataCount, Rows.Count - DataCount); + } + + int height = DataCount * RowHeight; + ShowWidth = height > RowsLayout.Height ? Width - ScrollBarInfo.VerticalScrollBarWidth() - 2 : Width - 2; + + for (int dataIndex = 0; dataIndex < DataCount; dataIndex++) + { + object data = null; + + if (dataSource is DataTable) + { + data = (dataSource as DataTable).Rows[dataIndex]; + } + if (dataSource.GetType().IsList()) + { + data = (dataSource as IList)[dataIndex]; + } + + if (dataIndex < Rows.Count) + { + Rows[dataIndex].RowIndex = dataIndex; + Rows[dataIndex].Data = data; + Rows[dataIndex].Width = ShowWidth; + } + else + { + UIGridRow row = new UIGridRow(this); + row.Data = data; + row.RowIndex = dataIndex; + row.Left = 1; + row.Top = dataIndex * RowHeight; + row.Height = RowHeight; + RowsLayout.Controls.Add(row); + row.Width = ShowWidth; + Rows.Add(row); + } + } + + EndUpdate(); + } + + private void ScrollBar_ValueChanged(object sender, EventArgs e) + { + if (RowsLayout != null) + { + flicker.FreezePainting(RowsLayout, true); + ScrollBarInfo.SetScrollValue(RowsLayout.Handle, ScrollBar.Value); + flicker.FreezePainting(RowsLayout, false); + } + } + + public readonly List Rows = new List(); + + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if (keyData == Keys.Up) + { + Prev(); + } + else if (keyData == Keys.Down) + { + Next(); + } + else if (keyData == Keys.Home) + { + First(); + } + else if (keyData == Keys.End) + { + Last(); + } + + return base.ProcessCmdKey(ref msg, keyData); + } + + private void Last() + { + if (Rows.Count > 0) + { + SelectedRow = Rows[Rows.Count - 1]; + } + } + + private void First() + { + if (Rows.Count > 0) + { + SelectedRow = Rows[0]; + } + } + + private void Next() + { + if (Rows.Count > 0) + { + if (SelectedRow != null && SelectedRow.RowIndex < Rows.Count - 1) + SelectedRow = Rows[SelectedRow.RowIndex + 1]; + } + } + + private void Prev() + { + if (Rows.Count > 0) + { + if (SelectedRow != null && SelectedRow.RowIndex > 0) + SelectedRow = Rows[SelectedRow.RowIndex - 1]; + } + } + + #region InitializeComponent + + private void InitializeComponent() + { + this.ScrollBar = new Sunny.UI.UIScrollBar(); + this.RowsLayout = new Sunny.UI.UIRowsLayout(); + this.Footer = new Sunny.UI.UIPanel(); + this.Header = new Sunny.UI.UIPanel(); + this.Cover = new Sunny.UI.UIPanel(); + this.SuspendLayout(); + // + // ScrollBar + // + this.ScrollBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.ScrollBar.BackColor = System.Drawing.Color.Transparent; + this.ScrollBar.Font = new System.Drawing.Font("微软雅黑", 12F); + this.ScrollBar.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.ScrollBar.Location = new System.Drawing.Point(780, 37); + this.ScrollBar.Name = "ScrollBar"; + this.ScrollBar.Size = new System.Drawing.Size(19, 406); + this.ScrollBar.Style = Sunny.UI.UIStyle.Custom; + this.ScrollBar.StyleCustomMode = true; + this.ScrollBar.TabIndex = 18; + this.ScrollBar.ValueChanged += new System.EventHandler(this.ScrollBar_ValueChanged); + this.ScrollBar.Click += new System.EventHandler(this.HeaderCell_Click); + // + // RowsLayout + // + this.RowsLayout.BackColor = System.Drawing.Color.Transparent; + this.RowsLayout.Dock = System.Windows.Forms.DockStyle.Fill; + this.RowsLayout.FillColor = System.Drawing.Color.White; + this.RowsLayout.Font = new System.Drawing.Font("微软雅黑", 12F); + this.RowsLayout.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.RowsLayout.Location = new System.Drawing.Point(0, 35); + this.RowsLayout.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.RowsLayout.Name = "RowsLayout"; + this.RowsLayout.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.RowsLayout.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.RowsLayout.Size = new System.Drawing.Size(800, 410); + this.RowsLayout.Style = Sunny.UI.UIStyle.Custom; + this.RowsLayout.StyleCustomMode = true; + this.RowsLayout.TabIndex = 13; + this.RowsLayout.Text = null; + this.RowsLayout.SizeChanged += new System.EventHandler(this.RowsLayout_SizeChanged); + // + // Footer + // + this.Footer.BackColor = System.Drawing.Color.Transparent; + this.Footer.Dock = System.Windows.Forms.DockStyle.Bottom; + this.Footer.FillColor = System.Drawing.Color.White; + this.Footer.Font = new System.Drawing.Font("微软雅黑", 12F); + this.Footer.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.Footer.Location = new System.Drawing.Point(0, 445); + this.Footer.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.Footer.Name = "Footer"; + this.Footer.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.Footer.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.Footer.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.Footer.Size = new System.Drawing.Size(800, 35); + this.Footer.Style = Sunny.UI.UIStyle.Custom; + this.Footer.StyleCustomMode = true; + this.Footer.TabIndex = 11; + this.Footer.Text = null; + this.Footer.PaintOther += new System.Windows.Forms.PaintEventHandler(this.Footer_Paint); + this.Footer.Click += new System.EventHandler(this.HeaderCell_Click); + // + // Header + // + this.Header.BackColor = System.Drawing.Color.Transparent; + this.Header.Dock = System.Windows.Forms.DockStyle.Top; + this.Header.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.Header.Font = new System.Drawing.Font("微软雅黑", 12F); + this.Header.ForeColor = System.Drawing.Color.White; + this.Header.Location = new System.Drawing.Point(0, 0); + this.Header.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.Header.Name = "Header"; + this.Header.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.Header.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.Header.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)(((System.Windows.Forms.ToolStripStatusLabelBorderSides.Left | System.Windows.Forms.ToolStripStatusLabelBorderSides.Top) + | System.Windows.Forms.ToolStripStatusLabelBorderSides.Right))); + this.Header.Size = new System.Drawing.Size(800, 35); + this.Header.Style = Sunny.UI.UIStyle.Custom; + this.Header.StyleCustomMode = true; + this.Header.TabIndex = 12; + this.Header.Text = null; + this.Header.PaintOther += new System.Windows.Forms.PaintEventHandler(this.Header_Paint); + this.Header.Click += new System.EventHandler(this.HeaderCell_Click); + // + // Cover + // + this.Cover.FillColor = System.Drawing.Color.White; + this.Cover.Font = new System.Drawing.Font("微软雅黑", 12F); + this.Cover.Location = new System.Drawing.Point(0, 35); + this.Cover.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.Cover.Name = "Cover"; + this.Cover.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.Cover.Size = new System.Drawing.Size(800, 410); + this.Cover.Style = Sunny.UI.UIStyle.Custom; + this.Cover.StyleCustomMode = true; + this.Cover.TabIndex = 20; + this.Cover.Text = "[ 无数据 ]"; + // + // UIGrid + // + this.Controls.Add(this.Cover); + this.Controls.Add(this.ScrollBar); + this.Controls.Add(this.RowsLayout); + this.Controls.Add(this.Footer); + this.Controls.Add(this.Header); + this.Name = "UIGrid"; + this.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.Size = new System.Drawing.Size(800, 480); + this.ResumeLayout(false); + } + + #endregion InitializeComponent + + private void Header_Paint(object sender, PaintEventArgs e) + { + if (ColumnCount == 0) return; + + foreach (var column in Columns) + { + if (column.HeaderText.IsNullOrEmpty()) continue; + + SizeF sf = e.Graphics.MeasureString(column.HeaderText, Font); + if (column.HeaderTextAlignment == StringAlignment.Near) + e.Graphics.DrawString(column.HeaderText, Font, HeaderForeColor, column.Bounds.X, (HeaderHeight - sf.Height) / 2.0f); + if (column.HeaderTextAlignment == StringAlignment.Center) + e.Graphics.DrawString(column.HeaderText, Font, HeaderForeColor, column.Bounds.X + (column.Bounds.Width - sf.Width) / 2.0f, (HeaderHeight - sf.Height) / 2.0f); + if (column.HeaderTextAlignment == StringAlignment.Far) + e.Graphics.DrawString(column.HeaderText, Font, HeaderForeColor, column.Bounds.Right - sf.Width - 1, (HeaderHeight - sf.Height) / 2.0f); + } + } + + private void Footer_Paint(object sender, PaintEventArgs e) + { + if (ColumnCount == 0) return; + + foreach (var column in Columns) + { + if (column.FooterText.IsNullOrEmpty()) continue; + + SizeF sf = e.Graphics.MeasureString(column.FooterText, Font); + if (column.FooterTextAlignment == StringAlignment.Near) + e.Graphics.DrawString(column.FooterText, Font, FooterForeColor, column.Bounds.X, (HeaderHeight - sf.Height) / 2.0f); + if (column.FooterTextAlignment == StringAlignment.Center) + e.Graphics.DrawString(column.FooterText, Font, FooterForeColor, column.Bounds.X + (column.Bounds.Width - sf.Width) / 2.0f, (HeaderHeight - sf.Height) / 2.0f); + if (column.FooterTextAlignment == StringAlignment.Far) + e.Graphics.DrawString(column.FooterText, Font, FooterForeColor, column.Bounds.Right - sf.Width - 1, (HeaderHeight - sf.Height) / 2.0f); + } + } + } + + [ToolboxItem(false)] + public sealed class UIRowsLayout : UIPanel + { + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + ScrollBarInfo.ShowScrollBar(Handle, 0, false);//0:horizontal,1:vertical,3:both + } + } + + public class AvoidControlFlicker + { + [DllImport("User32.dll", CharSet = CharSet.Auto, EntryPoint = "SendMessageA")] + public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); + + private int _paintFrozen; + + public void FreezePainting(Control control, bool isToFreeze) + { + if (control == null) + { + return; + } + + if (isToFreeze && control.IsHandleCreated && control.Visible) + { + if (0 == _paintFrozen++) + { + SendMessage(control.Handle, 0x000B, 0, 0); + } + } + + if (!isToFreeze) + { + if (0 == _paintFrozen) + { + return; + } + + if (0 == --_paintFrozen) + { + SendMessage(control.Handle, 0x000B, 1, 0); + control.Invalidate(true); + } + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIGrid.resx b/SunnyUI/Controls/UIGrid.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UIGrid.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/SunnyUI/Controls/UIGridColumn.cs b/SunnyUI/Controls/UIGridColumn.cs new file mode 100644 index 00000000..4760e46d --- /dev/null +++ b/SunnyUI/Controls/UIGridColumn.cs @@ -0,0 +1,203 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIGridColumn.cs + * 文件说明: 表格列定义类 + * 当前版本: V2.2 + * 创建日期: 2020-04-15 + * + * 2020-04-11: V2.2.2 增加UIGrid +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; + +#pragma warning disable 1591 + +namespace Sunny.UI +{ + public enum UIGridColumnType + { + Label, + Button, + CheckBox, + Combobox, + Image, + LinkLabel, + TextBox, + IntTextBox, + DoubleTextBox + } + + public enum UIGridColumnSizeMode + { + Fill, + Fixed + } + + public delegate string UIGridColumnFormat(object obj); + + [Serializable] + public sealed class UIGridColumn : IStyleInterface + { + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 标题名称 + /// + public string HeaderText { get; set; } + + /// + /// 标题名称 + /// + public string FooterText { get; set; } + + /// + /// 标题对齐方式 + /// + [DefaultValue(StringAlignment.Center)] + public StringAlignment HeaderTextAlignment { get; set; } = StringAlignment.Center; + + /// + /// 页脚对齐方式 + /// + [DefaultValue(StringAlignment.Center)] + public StringAlignment FooterTextAlignment { get; set; } = StringAlignment.Center; + + /// + /// Fill模式,自动填充时所占比率 + /// + [DefaultValue(100)] + public int FillWeight { get; set; } + + /// + /// 列类型 + /// + [DefaultValue(UIGridColumnType.Label)] + public UIGridColumnType ColumnType { get; set; } + + /// + /// 列宽度类型 + /// + [DefaultValue(UIGridColumnSizeMode.Fill)] + public UIGridColumnSizeMode SizeMode { get; set; } = UIGridColumnSizeMode.Fill; + + /// + /// 绑定数据名称 + /// + public string DataPropertyName { get; set; } + + /// + /// Fixed模式,固定宽度 + /// + [DefaultValue(100)] + public int Width { get; set; } = 100; + + /// + /// 文字对齐方式 + /// + [DefaultValue(StringAlignment.Center)] + public StringAlignment TextAlignment { get; set; } = StringAlignment.Center; + + public event UIGridColumnFormat OnDataFormat; + + /// + /// 类型为按钮时按钮标题 + /// + public string ButtonText { get; set; } = "Edit"; + + [DefaultValue(true)] + public bool ReadOnly { get; set; } = true; + + private List ComboboxItems = new List(); + + public List GetComboboxItems() + { + return ComboboxItems; + } + + public UIGridColumn() + { + } + + public UIGridColumn(string name, string headerText, string dataPropertyName, + UIGridColumnType columnType = UIGridColumnType.Label, + UIGridColumnSizeMode sizeMode = UIGridColumnSizeMode.Fill, int size = 100) + { + Name = name; + HeaderText = headerText; + DataPropertyName = dataPropertyName; + ColumnType = columnType; + SizeMode = sizeMode; + if (sizeMode == UIGridColumnSizeMode.Fill) + FillWeight = size; + else + Width = size; + } + + public UIGridColumn SetComboboxItems(List objects) + { + ComboboxItems.Clear(); + foreach (object obj in objects) + { + ComboboxItems.Add(obj); + } + + return this; + } + + public string DoFormat(object obj) + { + if (obj == null) + { + return string.Empty; + } + + if (OnDataFormat == null) + { + return obj.ToString(); + } + + try + { + return OnDataFormat?.Invoke(obj); + } + catch + { + return obj.ToString(); + } + } + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style { get; set; } = UIStyle.Blue; + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + public string Version { get; } = UIGlobal.Version; + + public string TagString { get; set; } + + public Rectangle Bounds { get; set; } + + [DefaultValue(2)] + public int TextBoxDecimals { get; set; } = 2; + + public string Guid { get; private set; } = RandomEx.RandomLong().ToString(); + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIGridRow.cs b/SunnyUI/Controls/UIGridRow.cs new file mode 100644 index 00000000..f1180751 --- /dev/null +++ b/SunnyUI/Controls/UIGridRow.cs @@ -0,0 +1,604 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIGridColumn.cs + * 文件说明: 表格行定义类 + * 当前版本: V2.2 + * 创建日期: 2020-04-15 + * + * 2020-04-11: V2.2.2 增加UIGrid + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Windows.Forms; + +#pragma warning disable 1591 + +// ReSharper disable All + +namespace Sunny.UI +{ + [ToolboxItem(false)] + public sealed partial class UIGridRow : UIPanel + { + public UIGrid Grid { get; } + + private object data; + public readonly List Cells = new List(); + + private bool selected; + + public UIGridRow(UIGrid grid) + { + InitializeComponent(); + this.DoubleBuffered(); + + Grid = grid; + AddCells(); + Height = grid.RowHeight; + RadiusSides = UICornerRadiusSides.None; + RectSides = ToolStripStatusLabelBorderSides.None; + MouseEnter += Control_MouseEnter; + MouseLeave += Control_MouseLeave; + } + + private UIGridRowState state = UIGridRowState.None; + + public UIGridRowState State + { + get => state; + set + { + state = value; + FillColor = GetRowColor(); + } + } + + public bool Selected + { + get => selected; + set + { + selected = value; + if (State == UIGridRowState.None) + { + FillColor = GetRowColor(); + } + } + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + FillColor = GetRowColor(); + + foreach (var cell in Cells) + { + if (cell is IStyleInterface inCell) + { + inCell.Style = uiColor.Name; + } + } + } + + public object Data + { + get => data; + set + { + data = value; + UpdateData(); + } + } + + private void ClearCells() + { + foreach (Control control in Cells) + { + control.Visible = false; + control.Dispose(); + } + + Cells.Clear(); + } + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + foreach (var cell in Cells) + { + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + cell.Bounds = column.Bounds; + } + } + + private Point MousePoint; + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + MousePoint = e.Location; + } + + protected override void OnDoubleClick(EventArgs e) + { + base.OnDoubleClick(e); + + UIGridColumn SelectedColumn = null; + foreach (var column in Grid.Columns) + { + if (MousePoint.X >= column.Bounds.Left && MousePoint.Y <= column.Bounds.Right) + { + SelectedColumn = column; + break; + } + } + + if (SelectedColumn != null) + { + if (!ExistDataPropertyName(SelectedColumn.DataPropertyName)) + { + return; + } + + object value = GetValue(SelectedColumn); + if (value != null) + { + Grid.GridCellDoubleClick(Grid, SelectedColumn, this, data, value); + } + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + foreach (var column in Grid.Columns) + { + if (column.ColumnType == UIGridColumnType.Label) + { + if (!ExistDataPropertyName(column.DataPropertyName)) + { + continue; + } + + object value = GetValue(column); + string showText = column.DoFormat(value); + + Color color = UIStyles.GetStyleColor(column.Style).PanelForeColor; + SizeF sf = e.Graphics.MeasureString(showText, Font); + if (column.TextAlignment == StringAlignment.Near) + e.Graphics.DrawString(showText, Font, color, column.Bounds.X, 1 + (column.Bounds.Height - sf.Height) / 2.0f); + if (column.TextAlignment == StringAlignment.Center) + e.Graphics.DrawString(showText, Font, color, column.Bounds.X + (column.Bounds.Width - sf.Width) / 2.0f, 1 + (column.Bounds.Height - sf.Height) / 2.0f); + if (column.TextAlignment == StringAlignment.Far) + e.Graphics.DrawString(showText, Font, color, column.Bounds.Right - sf.Width - 1, 1 + (column.Bounds.Height - sf.Height) / 2.0f); + } + } + + if (Grid.ShowLine) + { + e.Graphics.DrawLine(Grid.LineColor, 0, Height - 1, Width, Height - 1); + } + } + + private object GetValue(UIGridColumn column) + { + object value = null; + if (data is DataRow) + { + DataRow row = data as DataRow; + value = row[column.DataPropertyName]; + } + else + { + var cell = data.GetType().GetProperty(column.DataPropertyName); + if (cell != null) + { + value = cell.GetValue(data, null); + } + } + + return value; + } + + private bool ExistDataPropertyName(string dataPropertyName) + { + if (dataPropertyName.IsNullOrEmpty()) return false; + + if (data is DataRow) + { + DataRow row = data as DataRow; + return row.Table.Columns.Contains(dataPropertyName) && row[dataPropertyName] != null && + row[dataPropertyName].ToString() != ""; + } + else + { + var cell = data.GetType().GetProperty(dataPropertyName); + return cell != null; + } + } + + private bool IsUpdateData; + + private void UpdateData() + { + IsUpdateData = true; + foreach (var cell in Cells) + { + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + + if (!ExistDataPropertyName(column.DataPropertyName) || column.ColumnType == UIGridColumnType.Label) + { + continue; + } + + object value = GetValue(column); + string showText = column.DoFormat(value); + + switch (column.ColumnType) + { + case UIGridColumnType.CheckBox: + UICheckBox checkBox = (UICheckBox)cell; + if (value is int intValue) + { + checkBox.Checked = intValue == 1; + } + + if (value is bool boolValue) + { + checkBox.Checked = boolValue; + } + + break; + + case UIGridColumnType.Combobox: + UIComboBox comboBox = (UIComboBox)cell; + List items = column.GetComboboxItems(); + for (int itemIndex = 0; itemIndex < items.Count; itemIndex++) + { + if (value.ToString().Equals(items[itemIndex].ToString())) + { + comboBox.SelectedIndex = itemIndex; + } + } + + break; + + case UIGridColumnType.Image: + PictureBox picture = (PictureBox)cell; + if (value is int imageIndex) + { + if (Grid.ImageList != null && imageIndex >= 0 && + imageIndex < Grid.ImageList.Images.Count) + { + picture.Image = Grid.ImageList.Images[imageIndex]; + } + } + + break; + + case UIGridColumnType.LinkLabel: + UILinkLabel linkLabel = (UILinkLabel)cell; + linkLabel.Text = showText; + + break; + + case UIGridColumnType.TextBox: + UITextBox textBox = (UITextBox)cell; + cell.Text = showText; + break; + + case UIGridColumnType.IntTextBox: + UITextBox intTextBox = (UITextBox)cell; + intTextBox.IntValue = showText.ToInt(); + + break; + + case UIGridColumnType.DoubleTextBox: + UITextBox doubleTextBox = (UITextBox)cell; + doubleTextBox.DoubleValue = showText.ToDouble(); + + break; + } + } + + IsUpdateData = false; + } + + private void AddCells() + { + if (Grid.ColumnCount == 0) + { + return; + } + + foreach (var column in Grid.Columns) + { + switch (column.ColumnType) + { + case UIGridColumnType.Button: + UIButton button = new UIButton(); + button.Style = column.Style; + button.StyleCustomMode = column.StyleCustomMode; + button.Text = column.ButtonText; + button.BackColor = Color.Transparent; + button.Click += Button_Click; + AddControl(button, column); + break; + + case UIGridColumnType.CheckBox: + UICheckBox checkBox = new UICheckBox(); + checkBox.Style = column.Style; + checkBox.StyleCustomMode = column.StyleCustomMode; + checkBox.BackColor = Color.Transparent; + checkBox.ReadOnly = column.ReadOnly; + checkBox.ValueChanged += CheckBox_ValueChanged; + AddControl(checkBox, column); + break; + + case UIGridColumnType.Combobox: + UIComboBox comboBox = new UIComboBox(); + comboBox.Style = column.Style; + comboBox.StyleCustomMode = column.StyleCustomMode; + comboBox.BackColor = Color.Transparent; + comboBox.DropDownStyle = UIDropDownStyle.DropDownList; + + List items = column.GetComboboxItems(); + foreach (object item in items) + { + comboBox.Items.Add(item); + } + + comboBox.SelectedIndexChanged += ComboBox_SelectedIndexChanged; + AddControl(comboBox, column); + break; + + case UIGridColumnType.Image: + PictureBox picture = new PictureBox(); + picture.BackColor = Color.Transparent; + picture.SizeMode = PictureBoxSizeMode.CenterImage; + AddControl(picture, column); + break; + + case UIGridColumnType.LinkLabel: + UILinkLabel linkLabel = new UILinkLabel(); + linkLabel.Style = column.Style; + linkLabel.StyleCustomMode = column.StyleCustomMode; + linkLabel.BackColor = Color.Transparent; + if (column.TextAlignment == StringAlignment.Near) + linkLabel.TextAlign = ContentAlignment.MiddleLeft; + if (column.TextAlignment == StringAlignment.Center) + linkLabel.TextAlign = ContentAlignment.MiddleCenter; + if (column.TextAlignment == StringAlignment.Far) + linkLabel.TextAlign = ContentAlignment.MiddleRight; + + linkLabel.LinkClicked += LinkLabel_LinkClicked; + AddControl(linkLabel, column); + break; + + case UIGridColumnType.TextBox: + UITextBox textBox = new UITextBox(); + textBox.Style = column.Style; + textBox.StyleCustomMode = column.StyleCustomMode; + textBox.BackColor = Color.Transparent; + textBox.ReadOnly = column.ReadOnly; + textBox.MouseLeave += TextBox_MouseLeave; + AddControl(textBox, column); + break; + + case UIGridColumnType.IntTextBox: + UITextBox intTextBox = new UITextBox(); + intTextBox.Style = column.Style; + intTextBox.StyleCustomMode = column.StyleCustomMode; + intTextBox.Type = UITextBox.UIEditType.Integer; + intTextBox.BackColor = Color.Transparent; + intTextBox.ReadOnly = column.ReadOnly; + intTextBox.MouseLeave += IntTextBox_MouseLeave; + AddControl(intTextBox, column); + break; + + case UIGridColumnType.DoubleTextBox: + UITextBox doubleTextBox = new UITextBox(); + doubleTextBox.Style = column.Style; + doubleTextBox.StyleCustomMode = column.StyleCustomMode; + doubleTextBox.Type = UITextBox.UIEditType.Double; + doubleTextBox.BackColor = Color.Transparent; + doubleTextBox.ReadOnly = column.ReadOnly; + doubleTextBox.MouseLeave += DoubleTextBox_MouseLeave; + doubleTextBox.DecLength = column.TextBoxDecimals; + AddControl(doubleTextBox, column); + break; + } + } + } + + private void CheckBox_ValueChanged(object sender, bool value) + { + if (IsUpdateData) return; + + UICheckBox cell = (UICheckBox)sender; + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + Grid.GridCellValueChange(Grid, column, this, data, cell.Checked); + } + + private void ComboBox_SelectedIndexChanged(object sender, System.EventArgs e) + { + if (IsUpdateData) return; + + UIComboBox cell = (UIComboBox)sender; + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + Grid.GridCellValueChange(Grid, column, this, data, cell.SelectedItem); + } + + private void TextBox_MouseLeave(object sender, System.EventArgs e) + { + if (IsUpdateData) return; + + UITextBox cell = (UITextBox)sender; + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + Grid.GridCellValueChange(Grid, column, this, data, cell.Text); + } + + private void IntTextBox_MouseLeave(object sender, System.EventArgs e) + { + if (IsUpdateData) return; + + UITextBox cell = (UITextBox)sender; + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + Grid.GridCellValueChange(Grid, column, this, data, cell.IntValue); + } + + private void DoubleTextBox_MouseLeave(object sender, System.EventArgs e) + { + if (IsUpdateData) return; + + UITextBox cell = (UITextBox)sender; + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + Grid.GridCellValueChange(Grid, column, this, data, cell.DoubleValue); + } + + private void LinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + UILinkLabel cell = (UILinkLabel)sender; + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + Grid.GridCellLinkClick(Grid, column, this, data, cell.Text); + } + + private void Button_Click(object sender, System.EventArgs e) + { + UIButton cell = (UIButton)sender; + UIGridColumn column = Grid.GetColumnByGuid(cell.Tag.ToString()); + Grid.GridCellButtonClick(Grid, column, this, data, cell.Text); + } + + private void Label_Click(object sender, System.EventArgs e) + { + Control ctrl = ((Control)sender).Parent; + while (ctrl != null) + { + if (ctrl is UIRowsLayout panel) + { + if (!panel.Focused) + panel.Focus(); + break; + } + + ctrl = ctrl.Parent; + } + + Grid.SelectedRow = this; + } + + private void AddControl(Control control, UIGridColumn column) + { + Cells.Add(control); + control.Parent = this; + control.Bounds = column.Bounds; + control.Margin = new Padding(1); + control.Tag = column.Guid; + control.Click += Label_Click; + control.MouseEnter += Control_MouseEnter; + control.MouseLeave += Control_MouseLeave; + } + + private void Control_MouseLeave(object sender, System.EventArgs e) + { + FillColor = GetRowColor(); + } + + private void Control_MouseEnter(object sender, System.EventArgs e) + { + if (State == UIGridRowState.None) + { + FillColor = Grid.RowSelectedColor; + } + } + + private int rowIndex; + + public int RowIndex + { + get => rowIndex; + set + { + rowIndex = value; + FillColor = GetRowColor(); + } + } + + private Color GetRowColor() + { + switch (State) + { + case UIGridRowState.Info: + return UIStyles.Gray.GridSelectedColor; + + case UIGridRowState.Success: + return UIStyles.Green.GridSelectedColor; + + case UIGridRowState.Warning: + return UIStyles.Orange.GridSelectedColor; + + case UIGridRowState.Error: + return UIStyles.Red.GridSelectedColor; + + case UIGridRowState.None: + default: + if (Selected) + { + return Grid.RowSelectedColor; + } + + if (Grid.Stripe) + { + return rowIndex.IsEven() ? Grid.StripeEvenColor : Grid.StripeOddColor; + } + else + { + return Color.White; + } + } + } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // UIGridRow + // + this.Name = "UIGridRow"; + this.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None; + this.Size = new System.Drawing.Size(543, 32); + this.Click += new System.EventHandler(this.Label_Click); + this.ResumeLayout(false); + } + } + + public enum UIGridRowState + { + None, + Info, + Success, + Warning, + Error + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIGridRow.resx b/SunnyUI/Controls/UIGridRow.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UIGridRow.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/SunnyUI/Controls/UIGroupBox.Designer.cs b/SunnyUI/Controls/UIGroupBox.Designer.cs new file mode 100644 index 00000000..a8d31c3c --- /dev/null +++ b/SunnyUI/Controls/UIGroupBox.Designer.cs @@ -0,0 +1,42 @@ +namespace Sunny.UI +{ + partial class UIGroupBox + { + /// + /// 必需的设计器变量。 + /// + 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() + { + SuspendLayout(); + // + // UIGroupBox + // + Name = "UIGroupBox"; + ResumeLayout(false); + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UIGroupBox.cs b/SunnyUI/Controls/UIGroupBox.cs new file mode 100644 index 00000000..41b60f2d --- /dev/null +++ b/SunnyUI/Controls/UIGroupBox.cs @@ -0,0 +1,119 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIGroupBox.cs + * 文件说明: 组框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public partial class UIGroupBox : UIPanel + { + public UIGroupBox() + { + InitializeComponent(); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + g.Clear(FillColor); + } + + protected override void OnPaintRect(Graphics g, GraphicsPath path) + { + //IsRadius为True时,显示左上圆角 + bool RadiusLeftTop = RadiusSides.GetValue(UICornerRadiusSides.LeftTop); + //IsRadius为True时,显示左下圆角 + bool RadiusLeftBottom = RadiusSides.GetValue(UICornerRadiusSides.LeftBottom); + //IsRadius为True时,显示右上圆角 + bool RadiusRightTop = RadiusSides.GetValue(UICornerRadiusSides.RightTop); + //IsRadius为True时,显示右下圆角 + bool RadiusRightBottom = RadiusSides.GetValue(UICornerRadiusSides.RightBottom); + path = new Rectangle(0, TitleTop, Width - 1, Height - _titleTop - 1).CreateRoundedRectanglePath(Radius, RadiusLeftTop, RadiusRightTop, RadiusRightBottom, RadiusLeftBottom); + base.OnPaintRect(g, path); + } + + protected override void OnPaintFore(Graphics g, GraphicsPath path) + { + SizeF sf = g.MeasureString(Text, Font); + + float left = TitleInterval; + if (TitleAlignment == HorizontalAlignment.Right) + left = Width - TitleInterval - sf.Width; + if (TitleAlignment == HorizontalAlignment.Center) + left = (Width - sf.Width) / 2.0f; + + float top = TitleTop - sf.Height / 2.0f; + g.FillRectangle(FillColor, left - 2, top, sf.Width + 2, sf.Height); + g.DrawString(Text, Font, ForeColor, left, top); + } + + private int _titleTop = 16; + + [DefaultValue(16)] + public int TitleTop + { + get => _titleTop; + set + { + if (_titleTop != value) + { + _titleTop = value; + Invalidate(); + } + } + } + + private int _titleInterval = 10; + + [DefaultValue(10)] + public int TitleInterval + { + get => _titleInterval; + set + { + if (_titleInterval != value) + { + _titleInterval = value; + Invalidate(); + } + } + } + + public HorizontalAlignment titleAlignment = HorizontalAlignment.Left; + + [DefaultValue(HorizontalAlignment.Left)] + public HorizontalAlignment TitleAlignment + { + get => titleAlignment; + set + { + if (titleAlignment != value) + { + titleAlignment = value; + Invalidate(); + } + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIImageButton.cs b/SunnyUI/Controls/UIImageButton.cs new file mode 100644 index 00000000..0f5dfc62 --- /dev/null +++ b/SunnyUI/Controls/UIImageButton.cs @@ -0,0 +1,399 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIImageButton.cs + * 文件说明: 图像按钮 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 图像按钮 + /// + public sealed class UIImageButton : PictureBox + { + /// + /// 必需的设计器变量。 + /// + private IContainer components; + + private bool IsPress; + private bool IsHover; + + private Image imageDisabled; + private Image imagePress; + private Image imageHover; + private Image imageSelected; + private bool selected; + private string text; + private ContentAlignment textAlign = ContentAlignment.MiddleCenter; + private Font font = UIFontColor.Font; + private Color foreColor = UIFontColor.Primary; + + [Category("外观")] + [Description("按钮文字")] + [Browsable(true)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public override string Text + { + get => text; + set + { + if (text != value) + { + text = value; + Invalidate(); + } + } + } + + [DefaultValue(ContentAlignment.MiddleCenter)] + public ContentAlignment TextAlign + { + get => textAlign; + set + { + textAlign = value; + Invalidate(); + } + } + + [Category("外观")] + [Description("文字字体")] + [Browsable(true)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public override Font Font + { + get => font; + set + { + font = value; + Invalidate(); + } + } + + [Category("外观")] + [Description("文字颜色")] + [Browsable(true)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set + { + foreColor = value; + Invalidate(); + } + } + + [Browsable(false)] + [DefaultValue(typeof(Image), "null")] + public new Image InitialImage { get; set; } + + [Browsable(false)] + [DefaultValue(typeof(Image), "null")] + public new Image ErrorImage { get; set; } + + /// + /// 构造函数 + /// + public UIImageButton() + { + InitializeComponent(); + SetDefaultControlStyles(); + SuspendLayout(); + BorderStyle = BorderStyle.None; + ResumeLayout(false); + Width = 100; + Height = 35; + Version = UIGlobal.Version; + Cursor = Cursors.Hand; + } + + public string Version { get; } + + /// + /// 鼠标移上图片 + /// + [DefaultValue(typeof(Image), "null")] + public Image ImageHover + { + get => imageHover; + + set + { + imageHover = value; + Invalidate(); + } + } + + /// + /// 鼠标按下图片 + /// + [DefaultValue(typeof(Image), "null")] + public Image ImagePress + { + get => imagePress; + + set + { + imagePress = value; + Invalidate(); + } + } + + /// + /// 不可用时图片 + /// + [DefaultValue(typeof(Image), "null")] + public Image ImageDisabled + { + get => imageDisabled; + set + { + imageDisabled = value; + Invalidate(); + } + } + + /// + /// 不可用时图片 + /// + [DefaultValue(typeof(Image), "null")] + public Image ImageSelected + { + get => imageSelected; + set + { + imageSelected = value; + Invalidate(); + } + } + + /// + /// 是否选中 + /// + [DefaultValue(typeof(bool), "false")] + public bool Selected + { + get => selected; + + set + { + if (selected != value) + { + selected = value; + Invalidate(); + } + } + } + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing) + { + components?.Dispose(); + } + + base.Dispose(disposing); + } + + private void SetDefaultControlStyles() + { + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.DoubleBuffer, true); + + UpdateStyles(); + } + + /// + /// 鼠标按下 + /// + /// e + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + IsPress = true; + Invalidate(); + } + + /// + /// 鼠标弹起 + /// + /// e + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + IsPress = false; + Invalidate(); + } + + /// + /// 鼠标进入 + /// + /// e + protected override void OnMouseEnter(EventArgs e) + { + base.OnMouseEnter(e); + + if (!DesignMode) + { + Cursor = Cursors.Hand; + } + + IsHover = true; + Invalidate(); + } + + /// + /// 鼠标离开 + /// + /// e + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + IsHover = false; + IsPress = false; + Invalidate(); + } + + /// + /// 绘制按钮 + /// + /// pe + protected override void OnPaint(PaintEventArgs pe) + { + Image img = Image; + + if (!Enabled) + { + img = imageDisabled; + } + else + { + if (IsPress) + { + img = imagePress; + } + else if (IsHover) + { + img = imageHover; + } + + if (Selected) + { + img = imageSelected; + } + } + + if (img == null) + { + img = Image; + } + + if (img != null) + { + if (SizeMode == PictureBoxSizeMode.Normal) + pe.Graphics.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height)); + + if (SizeMode == PictureBoxSizeMode.StretchImage) + pe.Graphics.DrawImage(img, new Rectangle(0, 0, Width, Height)); + + if (SizeMode == PictureBoxSizeMode.AutoSize) + { + Width = img.Width; + Height = img.Height; + pe.Graphics.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height)); + } + + if (SizeMode == PictureBoxSizeMode.Zoom) + pe.Graphics.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height)); + + if (SizeMode == PictureBoxSizeMode.CenterImage) + pe.Graphics.DrawImage(img, new Rectangle((Width - img.Width) / 2, (Height - img.Height) / 2, img.Width, img.Height)); + } + else + { + base.OnPaint(pe); + } + + SizeF sf = pe.Graphics.MeasureString(Text, Font); + switch (TextAlign) + { + case ContentAlignment.TopLeft: + pe.Graphics.DrawString(text, Font, ForeColor, Padding.Left, Padding.Top); + break; + + case ContentAlignment.TopCenter: + pe.Graphics.DrawString(text, Font, ForeColor, (Width - sf.Width) / 2, Padding.Top); + break; + + case ContentAlignment.TopRight: + pe.Graphics.DrawString(text, Font, ForeColor, Width - Padding.Right - sf.Width, Padding.Top); + break; + + case ContentAlignment.MiddleLeft: + pe.Graphics.DrawString(text, Font, ForeColor, Padding.Left, (Height - sf.Height) / 2); + break; + + case ContentAlignment.MiddleCenter: + pe.Graphics.DrawString(text, Font, ForeColor, (Width - sf.Width) / 2, (Height - sf.Height) / 2); + break; + + case ContentAlignment.MiddleRight: + pe.Graphics.DrawString(text, Font, ForeColor, Width - Padding.Right - sf.Width, (Height - sf.Height) / 2); + break; + + case ContentAlignment.BottomLeft: + pe.Graphics.DrawString(text, Font, ForeColor, Padding.Left, Height - Padding.Bottom - sf.Height); + break; + + case ContentAlignment.BottomCenter: + pe.Graphics.DrawString(text, Font, ForeColor, (Width - sf.Width) / 2, Height - Padding.Bottom - sf.Height); + break; + + case ContentAlignment.BottomRight: + pe.Graphics.DrawString(text, Font, ForeColor, Width - Padding.Right - sf.Width, Height - Padding.Bottom - sf.Height); + break; + } + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new Container(); + } + + #endregion 组件设计器生成的代码 + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIImageListBox.Designer.cs b/SunnyUI/Controls/UIImageListBox.Designer.cs new file mode 100644 index 00000000..661e49fa --- /dev/null +++ b/SunnyUI/Controls/UIImageListBox.Designer.cs @@ -0,0 +1,37 @@ +namespace Sunny.UI +{ + partial class UIImageListBox + { + /// + /// 必需的设计器变量。 + /// + 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() + { + components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UIImageListBox.cs b/SunnyUI/Controls/UIImageListBox.cs new file mode 100644 index 00000000..f8ac9901 --- /dev/null +++ b/SunnyUI/Controls/UIImageListBox.cs @@ -0,0 +1,563 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIImageListBox.cs + * 文件说明: 图片列表框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Drawing.Drawing2D; +using System.IO; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("ItemClick")] + public sealed partial class UIImageListBox : UIPanel + { + private readonly ImageListBox listbox = new ImageListBox(); + private readonly UIPanel panel = new UIPanel(); + private readonly UIScrollBar bar = new UIScrollBar(); + + public UIImageListBox() + { + InitializeComponent(); + ShowText = false; + + Padding = new Padding(2); + + panel.Radius = 0; + panel.RadiusSides = UICornerRadiusSides.None; + panel.RectSides = ToolStripStatusLabelBorderSides.None; + panel.Parent = this; + panel.Width = 0; + panel.Dock = DockStyle.Right; + panel.Show(); + + bar.ValueChanged += Bar_ValueChanged; + bar.Parent = panel; + bar.Dock = DockStyle.Fill; + bar.Style = UIStyle.Custom; + bar.Show(); + + listbox.Parent = this; + listbox.Dock = DockStyle.Fill; + listbox.Show(); + listbox.panel = panel; + listbox.Bar = bar; + + panel.SendToBack(); + + listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged; + listbox.SelectedValueChanged += Listbox_SelectedValueChanged; + listbox.Click += Listbox_Click; + listbox.DoubleClick += Listbox_DoubleClick; + listbox.BeforeDrawItem += Listbox_BeforeDrawItem; + } + + private void Listbox_BeforeDrawItem(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e) + { + if (Items.Count != LastCount) + { + listbox.SetScrollInfo(); + LastCount = Items.Count; + ItemsCountChange?.Invoke(this, null); + } + } + + private void Listbox_DoubleClick(object sender, EventArgs e) + { + if (SelectedItem != null) + ItemDoubleClick?.Invoke(sender, e); + } + + private void Listbox_Click(object sender, EventArgs e) + { + if (SelectedItem != null) + ItemClick?.Invoke(sender, e); + } + + [Browsable(false)] + public int Count => Items.Count; + + public event EventHandler ItemClick; + + public event EventHandler ItemDoubleClick; + + public event EventHandler ItemsCountChange; + + public event EventHandler SelectedIndexChanged; + + public event EventHandler SelectedValueChanged; + + private void Listbox_SelectedValueChanged(object sender, EventArgs e) + { + SelectedValueChanged?.Invoke(sender, e); + Text = listbox.SelectedItem?.ToString(); + } + + private void Listbox_SelectedIndexChanged(object sender, EventArgs e) + { + SelectedIndexChanged?.Invoke(sender, e); + } + + [DefaultValue(100)] + public int ItemHeight + { + get => listbox.ItemHeight; + set => listbox.ItemHeight = value; + } + + [DefaultValue(4)] + public int ImageInterval + { + get => listbox.ImageInterval; + set => listbox.ImageInterval = value; + } + + [DefaultValue(true)] + public bool ShowDescription + { + get => listbox.ShowDescription; + set => listbox.ShowDescription = value; + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + if (panel != null) + { + panel.FillColor = Color.White; + } + + if (bar != null) + { + bar.ForeColor = uiColor.PrimaryColor; + bar.HoverColor = uiColor.ButtonFillHoverColor; + bar.PressColor = uiColor.ButtonFillPressColor; + bar.FillColor = Color.White; + } + + listbox?.SetStyleColor(uiColor); + } + + private int LastCount; + + private void Bar_ValueChanged(object sender, EventArgs e) + { + if (listbox != null) + { + ScrollBarInfo.SetScrollValue(listbox.Handle, bar.Value); + } + } + + protected override void OnRadiusChanged(int value) + { + base.OnRadiusChanged(value); + Padding = new Padding(Math.Max(2, value / 2)); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + g.Clear(Color.White); + } + + [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)] + [Browsable(false)] + public ListBox.ObjectCollection Items => listbox.Items; + + /// + /// 增加图片 + /// + /// 图片对象 + public void AddImage(ImageListItem record) + { + Items.Add(record); + } + + /// + /// 增加图片 + /// + /// 图片路径 + /// 图片描述 + public void AddImage(string imagePath, string description = "") + { + AddImage(new ImageListItem(imagePath, description)); + } + + public void SelectedFirst() + { + listbox.SelectedFirst(); + } + + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color ItemSelectBackColor + { + get => listbox.ItemSelectBackColor; + set => listbox.ItemSelectBackColor = value; + } + + [DefaultValue(typeof(Color), "White")] + public Color ItemSelectForeColor + { + get => listbox.ItemSelectForeColor; + set => listbox.ItemSelectForeColor = value; + } + + [Browsable(false)] + [DefaultValue(-1)] + public int SelectedIndex + { + get => listbox.SelectedIndex; + set => listbox.SelectedIndex = value; + } + + [Browsable(false)] + [DefaultValue(null)] + public ImageListItem SelectedItem + { + get => listbox.SelectedItem as ImageListItem; + set => listbox.SelectedItem = value; + } + + [Browsable(false)] + [DefaultValue(null)] + public object SelectedValue + { + get => listbox.SelectedValue; + set => listbox.SelectedValue = value; + } + + private sealed class ImageListBox : ListBox, IStyleInterface + { + private UIScrollBar bar; + + [DefaultValue(null)] + public string TagString { get; set; } + + public UIPanel panel { get; set; } + + public UIScrollBar Bar + { + get => bar; + set + { + bar = value; + SetScrollInfo(); + } + } + + public ImageListBox() + { + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.DoubleBuffer, true); + UpdateStyles(); + + BorderStyle = BorderStyle.None; + ForeColor = UIFontColor.Primary; + IntegralHeight = false; + ItemHeight = 100; + DrawMode = DrawMode.OwnerDrawFixed; + Version = UIGlobal.Version; + SetScrollInfo(); + } + + protected override void OnSizeChanged(EventArgs e) + { + if (!PanelVisible) + { + SetScrollInfo(); + } + } + + public void SetScrollInfo() + { + if (Bar == null || panel == null) + { + return; + } + + PanelVisible = true; + var si = ScrollBarInfo.GetInfo(Handle); + if (si.ScrollMax > 0) + { + Bar.Maximum = si.ScrollMax; + panel.Width = (si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0) ? SystemInformation.VerticalScrollBarWidth + 2 : 0; + panel.SendToBack(); + Bar.Value = si.nPos; + } + else + { + panel.Width = 0; + } + + PanelVisible = false; + } + + private bool PanelVisible; + + protected override void OnMeasureItem(MeasureItemEventArgs e) + { + e.ItemHeight = e.ItemHeight + ItemHeight; + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + public string Version { get; } + + private UIStyle _style = UIStyle.Blue; + private Color _itemSelectBackColor = UIColor.Blue; + private Color _itemSelectForeColor = Color.White; + private int imageInterval = 4; + private bool showDescription = true; + + [Browsable(false)] + public int Count => Items.Count; + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + //隐藏滚动条 + ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both + } + + public void SelectedFirst() + { + if (Count > 0 && SelectedIndex < 0) + { + SelectedIndex = 0; + } + } + + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + + if (panel.Width > 0) + { + var si = ScrollBarInfo.GetInfo(Handle); + if (e.Delta > 10) + { + if (si.nPos > 0) + { + ScrollBarInfo.ScrollUp(Handle); + } + } + else if (e.Delta < -10) + { + if (si.nPos < si.ScrollMax) + { + ScrollBarInfo.ScrollDown(Handle); + } + } + } + + SetScrollInfo(); + } + + [DefaultValue(4)] + public int ImageInterval + { + get => imageInterval; + set + { + if (imageInterval != value) + { + imageInterval = value; + Invalidate(); + } + } + } + + [DefaultValue(true)] + public bool ShowDescription + { + get => showDescription; + set + { + if (showDescription != value) + { + showDescription = value; + Invalidate(); + } + } + } + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + ItemSelectBackColor = uiColor.ListItemSelectBackColor; + ItemSelectForeColor = uiColor.ListItemSelectForeColor; + + Invalidate(); + } + + [Category("Appearance"), Description("The border color used to paint the control.")] + public Color ItemSelectBackColor + { + get => _itemSelectBackColor; + set + { + if (_itemSelectBackColor != value) + { + _itemSelectBackColor = value; + _style = UIStyle.Custom; + if (DesignMode) + Invalidate(); + } + } + } + + [Category("Appearance"), Description("The border color used to paint the control.")] + public Color ItemSelectForeColor + { + get => _itemSelectForeColor; + set + { + if (_itemSelectForeColor != value) + { + _itemSelectForeColor = value; + _style = UIStyle.Custom; + if (DesignMode) + Invalidate(); + } + } + } + + /// + /// 增加图片 + /// + /// 图片对象 + public void AddImage(ImageListItem record) + { + Items.Add(record); + } + + /// + /// 增加图片 + /// + /// 图片路径 + /// 图片描述 + public void AddImage(string imagePath, string description = "") + { + AddImage(new ImageListItem(imagePath, description)); + } + + public delegate void OnBeforeDrawItem(object sender, ObjectCollection items, DrawItemEventArgs e); + + public event OnBeforeDrawItem BeforeDrawItem; + + protected override void OnDrawItem(DrawItemEventArgs e) + { + base.OnDrawItem(e); + BeforeDrawItem?.Invoke(this, Items, e); + if (Items.Count == 0) + { + return; + } + + e.DrawBackground(); + if (e.Index < 0 || e.Index >= Items.Count) + { + return; + } + + Color backColor = (e.State & DrawItemState.Selected) == DrawItemState.Selected ? ItemSelectBackColor : BackColor; + Color foreColor = (e.State & DrawItemState.Selected) == DrawItemState.Selected ? ItemSelectForeColor : ForeColor; + Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height - 1); + + e.Graphics.FillRectangle(BackColor, e.Bounds); + e.Graphics.FillRoundRectangle(backColor, rect, 5); + + Graphics g = e.Graphics; + Matrix oldTransform = g.Transform; + Matrix newTransform = oldTransform.Clone(); + newTransform.Translate(e.Bounds.X, e.Bounds.Y); + g.Transform = newTransform; + ImageListItem item = (ImageListItem)Items[e.Index]; + SizeF sf = g.MeasureString("ImageListBox", Font); + int thumbnailSize = ShowDescription ? ((int)(ItemHeight - ImageInterval - sf.Height)) : (ItemHeight - ImageInterval * 2); + + if (File.Exists(item.ImagePath)) + { + Image image = new Bitmap(item.ImagePath); + + if (image.Width <= thumbnailSize && image.Height <= thumbnailSize) + { + g.DrawImage(image, new Rectangle(ImageInterval, ImageInterval, image.Width, image.Height)); + } + else + { + float scale = thumbnailSize * 1.0f / image.Height; + g.DrawImage(image, new Rectangle(ImageInterval, ImageInterval, (int)(image.Width * scale), (int)(image.Height * scale))); + } + + image.Dispose(); + } + + if (ShowDescription && !string.IsNullOrEmpty(item.Description)) + { + g.DrawString(item.Description, e.Font, foreColor, new Point(ImageInterval, thumbnailSize + ImageInterval)); + } + + g.Transform = oldTransform; + } + } + + public class ImageListItem + { + public string ImagePath { get; set; } + + public string Description { get; set; } + + public ImageListItem(string imagePath, string description = "") + { + ImagePath = imagePath; + Description = description; + } + + public override string ToString() + { + return ImagePath; + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIIntegerUpDown.cs b/SunnyUI/Controls/UIIntegerUpDown.cs new file mode 100644 index 00000000..e921cbc3 --- /dev/null +++ b/SunnyUI/Controls/UIIntegerUpDown.cs @@ -0,0 +1,159 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIIntegerUpDown.cs + * 文件说明: 数字上下选择框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; + +namespace Sunny.UI +{ + [DefaultEvent("ValueChanged")] + [DefaultProperty("Value")] + public sealed partial class UIIntegerUpDown : UIPanel + { + public delegate void OnValueChanged(object sender, int value); + + public UIIntegerUpDown() + { + InitializeComponent(); + ShowText = false; + } + + public event OnValueChanged ValueChanged; + + private int _value; + + [DefaultValue(0)] + public int Value + { + get => _value; + set + { + value = CheckMaxMin(value); + _value = value; + pnlValue.Text = _value.ToString(); + ValueChanged?.Invoke(this, _value); + } + } + + private int step = 1; + + [DefaultValue(1)] + public int Step + { + get => step; + set { step = Math.Max(1, value); } + } + + private void btnAdd_Click(object sender, EventArgs e) + { + Value += Step; + } + + private void btnDec_Click(object sender, EventArgs e) + { + Value -= Step; + } + + private int _maximum = int.MaxValue; + private int _minimum = int.MinValue; + + [DefaultValue(int.MaxValue)] + public int Maximum + { + get => _maximum; + set + { + _maximum = value; + if (_maximum < _minimum) + _minimum = _maximum; + + Value = CheckMaxMin(Value); + Invalidate(); + } + } + + [DefaultValue(int.MinValue)] + public int Minimum + { + get => _minimum; + set + { + _minimum = value; + if (_minimum > _maximum) + _maximum = _minimum; + + Value = CheckMaxMin(Value); + Invalidate(); + } + } + + private int CheckMaxMin(int value) + { + if (hasMaximum) + { + if (value > _maximum) + value = _maximum; + } + + if (hasMinimum) + { + if (value < _minimum) + value = _minimum; + } + + return value; + } + + private bool hasMaximum; + private bool hasMinimum; + + [DefaultValue(false)] + public bool HasMaximum + { + get => hasMaximum; + set + { + if (hasMaximum != value) + { + hasMaximum = value; + Value = CheckMaxMin(Value); + Invalidate(); + } + } + } + + [DefaultValue(false)] + public bool HasMinimum + { + get => hasMinimum; + set + { + if (hasMinimum != value) + { + hasMinimum = value; + Value = CheckMaxMin(Value); + Invalidate(); + } + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIIntegerUpDown.designer.cs b/SunnyUI/Controls/UIIntegerUpDown.designer.cs new file mode 100644 index 00000000..87b4b819 --- /dev/null +++ b/SunnyUI/Controls/UIIntegerUpDown.designer.cs @@ -0,0 +1,140 @@ +namespace Sunny.UI +{ + partial class UIIntegerUpDown + { + /// + /// 必需的设计器变量。 + /// + 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.btnDec = new Sunny.UI.UISymbolButton(); + this.btnAdd = new Sunny.UI.UISymbolButton(); + this.pnlValue = new Sunny.UI.UIPanel(); + this.SuspendLayout(); + // + // btnDec + // + this.btnDec.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDec.Dock = System.Windows.Forms.DockStyle.Left; + this.btnDec.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.btnDec.FillDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.btnDec.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(111)))), ((int)(((byte)(168)))), ((int)(((byte)(255))))); + this.btnDec.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.btnDec.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnDec.ForeColor = System.Drawing.Color.White; + this.btnDec.ForeDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(103))))); + this.btnDec.ForeHoverColor = System.Drawing.Color.White; + this.btnDec.ForePressColor = System.Drawing.Color.White; + this.btnDec.ImageInterval = 1; + this.btnDec.Location = new System.Drawing.Point(0, 0); + this.btnDec.Margin = new System.Windows.Forms.Padding(0); + this.btnDec.Name = "btnDec"; + this.btnDec.Padding = new System.Windows.Forms.Padding(26, 0, 0, 0); + this.btnDec.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.LeftTop | Sunny.UI.UICornerRadiusSides.LeftBottom))); + this.btnDec.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.btnDec.RectDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.btnDec.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(111)))), ((int)(((byte)(168)))), ((int)(((byte)(255))))); + this.btnDec.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.btnDec.Size = new System.Drawing.Size(29, 29); + this.btnDec.Style = Sunny.UI.UIStyle.Blue; + this.btnDec.Symbol = 61544; + this.btnDec.TabIndex = 0; + this.btnDec.Text = null; + this.btnDec.TipsFont = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this.btnDec.TipsText = null; + this.btnDec.Click += new System.EventHandler(this.btnDec_Click); + // + // btnAdd + // + this.btnAdd.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAdd.Dock = System.Windows.Forms.DockStyle.Right; + this.btnAdd.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.btnAdd.FillDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.btnAdd.FillHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(111)))), ((int)(((byte)(168)))), ((int)(((byte)(255))))); + this.btnAdd.FillPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.btnAdd.Font = new System.Drawing.Font("微软雅黑", 12F); + this.btnAdd.ForeColor = System.Drawing.Color.White; + this.btnAdd.ForeDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(103))))); + this.btnAdd.ForeHoverColor = System.Drawing.Color.White; + this.btnAdd.ForePressColor = System.Drawing.Color.White; + this.btnAdd.ImageInterval = 1; + this.btnAdd.Location = new System.Drawing.Point(87, 0); + this.btnAdd.Margin = new System.Windows.Forms.Padding(0); + this.btnAdd.Name = "btnAdd"; + this.btnAdd.Padding = new System.Windows.Forms.Padding(26, 0, 0, 0); + this.btnAdd.RadiusSides = ((Sunny.UI.UICornerRadiusSides)((Sunny.UI.UICornerRadiusSides.RightTop | Sunny.UI.UICornerRadiusSides.RightBottom))); + this.btnAdd.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.btnAdd.RectDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.btnAdd.RectHoverColor = System.Drawing.Color.FromArgb(((int)(((byte)(111)))), ((int)(((byte)(168)))), ((int)(((byte)(255))))); + this.btnAdd.RectPressColor = System.Drawing.Color.FromArgb(((int)(((byte)(74)))), ((int)(((byte)(131)))), ((int)(((byte)(229))))); + this.btnAdd.Size = new System.Drawing.Size(29, 29); + this.btnAdd.Style = Sunny.UI.UIStyle.Blue; + this.btnAdd.Symbol = 61543; + this.btnAdd.TabIndex = 1; + this.btnAdd.Text = null; + this.btnAdd.TipsFont = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this.btnAdd.TipsText = null; + this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); + // + // pnlValue + // + this.pnlValue.Dock = System.Windows.Forms.DockStyle.Fill; + this.pnlValue.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.pnlValue.FillDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(244)))), ((int)(((byte)(244))))); + this.pnlValue.Font = new System.Drawing.Font("微软雅黑", 12F); + this.pnlValue.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(32)))), ((int)(((byte)(32)))), ((int)(((byte)(32))))); + this.pnlValue.ForeDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(103))))); + this.pnlValue.Location = new System.Drawing.Point(29, 0); + this.pnlValue.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.pnlValue.Name = "pnlValue"; + this.pnlValue.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.pnlValue.RectDisableColor = System.Drawing.Color.FromArgb(((int)(((byte)(173)))), ((int)(((byte)(178)))), ((int)(((byte)(181))))); + this.pnlValue.RectSides = ((System.Windows.Forms.ToolStripStatusLabelBorderSides)((System.Windows.Forms.ToolStripStatusLabelBorderSides.Top | System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom))); + this.pnlValue.RadiusSides = UICornerRadiusSides.None; + this.pnlValue.Size = new System.Drawing.Size(58, 29); + this.pnlValue.Style = Sunny.UI.UIStyle.Blue; + this.pnlValue.TabIndex = 2; + this.pnlValue.Text = "0"; + // + // UIIntegerUpDown + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.pnlValue); + this.Controls.Add(this.btnAdd); + this.Controls.Add(this.btnDec); + this.MinimumSize = new System.Drawing.Size(100, 0); + this.Name = "UIIntegerUpDown"; + this.Size = new System.Drawing.Size(116, 29); + this.ResumeLayout(false); + + } + + #endregion + + private UISymbolButton btnDec; + private UISymbolButton btnAdd; + private UIPanel pnlValue; + } +} diff --git a/SunnyUI/Controls/UIIntegerUpDown.resx b/SunnyUI/Controls/UIIntegerUpDown.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UIIntegerUpDown.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/SunnyUI/Controls/UILabel.cs b/SunnyUI/Controls/UILabel.cs new file mode 100644 index 00000000..30730e75 --- /dev/null +++ b/SunnyUI/Controls/UILabel.cs @@ -0,0 +1,383 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UILabel.cs + * 文件说明: 标签 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-23: V2.2.4 增加UISymbolLabel + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public class UILabel : Label, IStyleInterface + { + public UILabel() + { + base.Font = UIFontColor.Font; + Version = UIGlobal.Version; + base.TextAlign = ContentAlignment.MiddleLeft; + ForeColorChanged += UILabel_ForeColorChanged; + } + + private void UILabel_ForeColorChanged(object sender, EventArgs e) + { + _style = UIStyle.Custom; + } + + private Color foreColor = UIStyles.Blue.LabelForeColor; + + [DefaultValue(null)] + public string TagString { get; set; } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set + { + foreColor = value; + Invalidate(); + } + } + + public string Version { get; } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + ForeColor = uiColor.LabelForeColor; + Invalidate(); + } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + protected override void OnForeColorChanged(EventArgs e) + { + base.OnForeColorChanged(e); + _style = UIStyle.Custom; + } + } + + [ToolboxItem(true)] + [DefaultEvent("Click")] + [DefaultProperty("Text")] + public sealed class UISymbolLabel : UIControl + { + private int _symbolSize = 24; + private int _imageInterval = 2; + + private Color symbolColor = UIFontColor.Primary; + + public UISymbolLabel() + { + ShowRect = false; + foreColor = UIFontColor.Primary; + symbolColor = UIFontColor.Primary; + Width = 170; + Height = 35; + } + + private bool autoSize; + + [Browsable(true)] + public override bool AutoSize + { + get => autoSize; + set + { + autoSize = value; + Invalidate(); + } + } + + [Description("图标颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public Color SymbolColor + { + get => symbolColor; + set + { + symbolColor = value; + Invalidate(); + } + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + [DefaultValue(24)] + public int SymbolSize + { + get => _symbolSize; + set + { + _symbolSize = Math.Max(value, 16); + _symbolSize = Math.Min(value, 64); + Invalidate(); + } + } + + [DefaultValue(2)] + public int ImageInterval + { + get => _imageInterval; + set + { + _imageInterval = Math.Max(0, value); + Invalidate(); + } + } + + private bool _isCircle; + + [DefaultValue(false)] + public bool IsCircle + { + get => _isCircle; + set + { + _isCircle = value; + if (value) + { + Text = ""; + } + else + { + Invalidate(); + } + } + } + + private int _symbol = FontAwesomeIcons.fa_check; + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Editor(typeof(UIImagePropertyEditor), typeof(UITypeEditor))] + [DefaultValue(61452)] + public int Symbol + { + get => _symbol; + set + { + _symbol = value; + Invalidate(); + } + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + g.FillRectangle(BackColor, Bounds); + } + + private int circleRectWidth = 1; + + [DefaultValue(1)] + public int CircleRectWidth + { + get => circleRectWidth; + set + { + circleRectWidth = value; + Invalidate(); + } + } + + protected override void OnPaintRect(Graphics g, GraphicsPath path) + { + if (IsCircle) + { + int size = Math.Min(Width, Height) - 2 - CircleRectWidth; + using (Pen pn = new Pen(GetRectColor(), CircleRectWidth)) + { + g.SetHighQuality(); + g.DrawEllipse(pn, (Width - size) / 2.0f, (Height - size) / 2.0f, size, size); + g.SetDefaultQuality(); + } + } + else + { + base.OnPaintRect(g, path); + } + } + + protected override void OnPaintFore(Graphics g, GraphicsPath path) + { + Padding = new Padding(_symbolSize + _imageInterval * 2, Padding.Top, Padding.Right, Padding.Bottom); + //填充文字 + g.DrawString(Text, Font, foreColor, Size, Padding, TextAlign); + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + symbolColor = foreColor = uiColor.LabelForeColor; + } + + protected override void OnPaint(PaintEventArgs e) + { + //重绘父类 + base.OnPaint(e); + + //字体图标 + Font font = FontImageHelper.GetFont(Symbol, SymbolSize); + if (font == null) + { + return; + } + + float left = 0; + float top = 0; + SizeF ImageSize = e.Graphics.GetFontImageSize(Symbol, SymbolSize); + SizeF TextSize = e.Graphics.MeasureString(Text, Font); + + if (autoSize) + { + Width = (int)(SymbolSize + ImageInterval * 3 + TextSize.Width); + Height = (int)Math.Max(SymbolSize, TextSize.Height); + } + + if (TextAlign == ContentAlignment.TopCenter || TextAlign == ContentAlignment.TopLeft || TextAlign == ContentAlignment.TopRight) + { + top = Padding.Top; + } + + if (TextAlign == ContentAlignment.MiddleCenter || TextAlign == ContentAlignment.MiddleLeft || TextAlign == ContentAlignment.MiddleRight) + { + top = Padding.Top + (Height - Padding.Top - Padding.Bottom - ImageSize.Height) / 2.0f; + } + + if (TextAlign == ContentAlignment.BottomCenter || TextAlign == ContentAlignment.BottomLeft || TextAlign == ContentAlignment.BottomRight) + { + top = Height - Padding.Bottom - ImageSize.Height; + } + + if (TextAlign == ContentAlignment.TopCenter || TextAlign == ContentAlignment.MiddleCenter || TextAlign == ContentAlignment.BottomCenter) + { + left = Padding.Left + (Width - TextSize.Width - Padding.Left - Padding.Right) / 2.0f; + left = left - ImageInterval - ImageSize.Width; + } + + if (TextAlign == ContentAlignment.TopLeft || TextAlign == ContentAlignment.MiddleLeft || TextAlign == ContentAlignment.BottomLeft) + { + left = ImageInterval; + } + + if (TextAlign == ContentAlignment.TopRight || TextAlign == ContentAlignment.MiddleRight || TextAlign == ContentAlignment.BottomRight) + { + left = Width - Padding.Right - TextSize.Width - ImageInterval - ImageSize.Width; + } + + if (Text.IsNullOrEmpty()) + e.Graphics.DrawString(char.ConvertFromUtf32(Symbol), font, symbolColor, ImageInterval + (Width - ImageSize.Width) / 2.0f, (Height - ImageSize.Height) / 2.0f); + else + e.Graphics.DrawString(char.ConvertFromUtf32(Symbol), font, symbolColor, left, top); + } + } + + public sealed class UILinkLabel : LinkLabel, IStyleInterface + { + public UILinkLabel() + { + Font = UIFontColor.Font; + LinkBehavior = LinkBehavior.AlwaysUnderline; + Version = UIGlobal.Version; + + ActiveLinkColor = UIColor.Orange; + VisitedLinkColor = UIColor.Red; + LinkColor = UIColor.Blue; + } + + private void UILabel_ForeColorChanged(object sender, EventArgs e) + { + _style = UIStyle.Custom; + } + + [DefaultValue(null)] + public string TagString { get; set; } + + public string Version { get; } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + ForeColor = uiColor.LabelForeColor; + LinkColor = uiColor.LabelForeColor; + Invalidate(); + } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + protected override void OnForeColorChanged(EventArgs e) + { + base.OnForeColorChanged(e); + _style = UIStyle.Custom; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UILedBulb.cs b/SunnyUI/Controls/UILedBulb.cs new file mode 100644 index 00000000..dff1507f --- /dev/null +++ b/SunnyUI/Controls/UILedBulb.cs @@ -0,0 +1,203 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UILedBulb.cs + * 文件说明: LED灯 + * 文件作者: Steve Marsh + * 开源协议: CPOL + * 引用地址: https://www.codeproject.com/Articles/114122/A-Simple-Vector-Based-LED-User-Control +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +#pragma warning disable 1591 + +namespace Sunny.UI +{ + /// + /// The LEDBulb is a .Net control for Windows Forms that emulates an + /// LED light with two states On and Off. The purpose of the control is to + /// provide a sleek looking representation of an LED light that is sizable, + /// has a transparent background and can be set to different colors. + /// + public class UILedBulb : Control + { + #region Public and Private Members + + private Color _color; + private bool _on = true; + private readonly Color _reflectionColor = Color.FromArgb(180, 255, 255, 255); + private readonly Color[] _surroundColor = new Color[] { Color.FromArgb(0, 255, 255, 255) }; + private readonly Timer _timer = new Timer(); + + /// + /// Gets or Sets the color of the LED light + /// + [DefaultValue(typeof(Color), "192, 255, 192")] + public Color Color + { + get { return _color; } + set + { + _color = value; + DarkColor = ControlPaint.Dark(_color); + DarkDarkColor = ControlPaint.DarkDark(_color); + Invalidate(); // Redraw the control + } + } + + /// + /// Dark shade of the LED color used for gradient + /// + [Browsable(false)] + public Color DarkColor { get; protected set; } + + /// + /// Very dark shade of the LED color used for gradient + /// + [Browsable(false)] + public Color DarkDarkColor { get; protected set; } + + /// + /// Gets or Sets whether the light is turned on + /// + [DefaultValue(true)] + public bool On + { + get { return _on; } + set + { + _on = value; + Invalidate(); + } + } + + #endregion Public and Private Members + + #region Constructor + + public UILedBulb() + { + SetStyle(ControlStyles.DoubleBuffer + | ControlStyles.AllPaintingInWmPaint + | ControlStyles.ResizeRedraw + | ControlStyles.UserPaint + | ControlStyles.SupportsTransparentBackColor, true); + + Width = Height = 32; + Color = Color.FromArgb(192, 255, 192); + _timer.Tick += (sender, e) => { On = !On; }; + } + + #endregion Constructor + + #region Methods + + /// + /// Handles the Paint event for this UserControl + /// + protected override void OnPaint(PaintEventArgs e) + { + // Create an offscreen graphics object for double buffering + Bitmap offScreenBmp = new Bitmap(ClientRectangle.Width, ClientRectangle.Height); + using (var g = Graphics.FromImage(offScreenBmp)) + { + g.SmoothingMode = SmoothingMode.HighQuality; + // Draw the control + drawControl(g, On); + // Draw the image to the screen + e.Graphics.DrawImageUnscaled(offScreenBmp, 0, 0); + } + } + + /// + /// Renders the control to an image + /// + private void drawControl(Graphics g, bool on) + { + // Is the bulb on or off + Color lightColor = (on) ? Color : Color.FromArgb(150, DarkColor); + Color darkColor = (on) ? DarkColor : DarkDarkColor; + + // Calculate the dimensions of the bulb + int width = Width - (Padding.Left + Padding.Right); + int height = Height - (Padding.Top + Padding.Bottom); + // Diameter is the lesser of width and height + int diameter = Math.Min(width, height); + // Subtract 1 pixel so ellipse doesn't get cut off + diameter = Math.Max(diameter - 1, 1); + + // Draw the background ellipse + var rectangle = new Rectangle(Padding.Left, Padding.Top, diameter, diameter); + g.FillEllipse(new SolidBrush(darkColor), rectangle); + + // Draw the glow gradient + var path = new GraphicsPath(); + path.AddEllipse(rectangle); + var pathBrush = new PathGradientBrush(path); + pathBrush.CenterColor = lightColor; + pathBrush.SurroundColors = new[] { Color.FromArgb(0, lightColor) }; + g.FillEllipse(pathBrush, rectangle); + + // Draw the white reflection gradient + var offset = Convert.ToInt32(diameter * .15F); + var diameter1 = Convert.ToInt32(rectangle.Width * .8F); + var whiteRect = new Rectangle(rectangle.X - offset, rectangle.Y - offset, diameter1, diameter1); + var path1 = new GraphicsPath(); + path1.AddEllipse(whiteRect); + var pathBrush1 = new PathGradientBrush(path); + pathBrush1.CenterColor = _reflectionColor; + pathBrush1.SurroundColors = _surroundColor; + g.FillEllipse(pathBrush1, whiteRect); + + // Draw the border + g.SetClip(ClientRectangle); + if (On) g.DrawEllipse(new Pen(Color.FromArgb(85, Color.Black), 1F), rectangle); + } + + private int blinkInterval = 1000; + + [DefaultValue(1000)] + public int BlinkInterval + { + get => blinkInterval; + set + { + blinkInterval = Math.Max(100, value); + bool isBlink = Blink; + if (isBlink) _timer.Stop(); + _timer.Interval = blinkInterval; + _timer.Enabled = isBlink; + } + } + + [DefaultValue(false)] + public bool Blink + { + get => _timer.Enabled; + set + { + On = true; + _timer.Stop(); + _timer.Interval = BlinkInterval; + _timer.Enabled = value; + } + } + + #endregion Methods + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UILedDisplay.cs b/SunnyUI/Controls/UILedDisplay.cs new file mode 100644 index 00000000..4edd509b --- /dev/null +++ b/SunnyUI/Controls/UILedDisplay.cs @@ -0,0 +1,519 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UILedDisplay.cs + * 文件说明: LED 显示器 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// LED显示屏 + /// + public class UILedDisplay : Control + { + #region 组件设计器生成的代码 + + /// + /// 必需的设计器变量。 + /// + private readonly IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing) + { + components?.Dispose(); + } + + base.Dispose(disposing); + } + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + SuspendLayout(); + ResumeLayout(false); + } + + #endregion 组件设计器生成的代码 + + /// + /// 构造函数 + /// + public UILedDisplay() + { + InitializeComponent(); + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.OptimizedDoubleBuffer, true);// 双缓冲 + SetStyle(ControlStyles.DoubleBuffer, true); + SetStyle(ControlStyles.SupportsTransparentBackColor, true); + UpdateStyles(); + + base.BackColor = Color.Black; + base.ForeColor = Color.Lime; + CalcSize(); + Version = UIGlobal.Version; + } + + public string Version { get; } + + private Color borderColor = Color.Black; + private Color borderInColor = Color.Silver; + private Color ledBackColor = Color.FromArgb(0, 0x33, 0); + + /// + /// 边框颜色 + /// + [Description("边框颜色")] + [DefaultValue(typeof(Color), "0, 0, 0")] + public Color BorderColor + { + get => borderColor; + set + { + borderColor = value; + Invalidate(); + } + } + + /// + /// 内线颜色 + /// + [Description("内线颜色")] + [DefaultValue(typeof(Color), "0xC0, 0xC0, 0xC0")] + public Color BorderInColor + { + get => borderInColor; + set + { + borderInColor = value; + Invalidate(); + } + } + + /// + /// LED背景色 + /// + [Description("LED背景色")] + [DefaultValue(typeof(Color), "0, 0x33, 0")] + public Color LedBackColor + { + get => ledBackColor; + set + { + ledBackColor = value; + Invalidate(); + } + } + + private int borderWidth = 1; + private int borderInWidth = 1; + private int intervalH = 2; + private int intervalV = 5; + private int intervalIn = 1; + private int intervalOn = 2; + private int charCount = 10; + + /// + /// 边框宽度 + /// + [DefaultValue(1), Description("边框宽度")] + public int BorderWidth + { + get => borderWidth; + set + { + if (borderWidth != value) + { + borderWidth = value; + CalcSize(); + Invalidate(); + } + } + } + + /// + /// 内线宽度 + /// + [DefaultValue(1), Description("内线宽度")] + public int BorderInWidth + { + get => borderInWidth; + set + { + if (borderInWidth != value) + { + borderInWidth = value; + CalcSize(); + Invalidate(); + } + } + } + + /// + /// 左右边距 + /// + [DefaultValue(2), Description("左右边距")] + public int IntervalH + { + get => intervalH; + set + { + if (intervalH != value) + { + intervalH = value; + CalcSize(); + Invalidate(); + } + } + } + + /// + /// 上下边距 + /// + [DefaultValue(5), Description("上下边距")] + public int IntervalV + { + get => intervalV; + set + { + if (intervalV != value) + { + intervalV = value; + CalcSize(); + Invalidate(); + } + } + } + + /// + /// LED亮块间距 + /// + [DefaultValue(1), Description("LED亮块间距")] + public int IntervalIn + { + get => intervalIn; + set + { + if (intervalIn != value) + { + intervalIn = value; + CalcSize(); + Invalidate(); + } + } + } + + /// + /// LED亮块大小 + /// + [DefaultValue(2), Description("LED亮块大小")] + public int IntervalOn + { + get => intervalOn; + set + { + if (intervalOn != value) + { + intervalOn = value; + CalcSize(); + Invalidate(); + } + } + } + + /// + /// 显示字符个数 + /// + [DefaultValue(10), Description("显示字符个数")] + public int CharCount + { + get => charCount; + set + { + if (charCount != value) + { + charCount = value; + CalcSize(); + Invalidate(); + } + } + } + + /// + /// 计算大小 + /// + public void CalcSize() + { + Width = BorderWidth * 2 + BorderInWidth * 2 + IntervalH * 2 + CharCount * IntervalOn * 5 + + CharCount * IntervalIn * 4 + (CharCount + 1) * IntervalOn + CharCount * 2 * IntervalIn; + Height = BorderWidth * 2 + BorderInWidth * 2 + IntervalV * 2 + IntervalOn * 7 + IntervalIn * 6; + } + + /// + /// 重绘 + /// + /// e + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + int w = Width; + int h = Height; + + //背景 + e.Graphics.FillRectangle(BackColor, 0, 0, w, h); + //外边框 + e.Graphics.FillRectangle(BorderColor, 0, 0, w, BorderWidth); + e.Graphics.FillRectangle(BorderColor, 0, h - BorderWidth, w, BorderWidth); + e.Graphics.FillRectangle(BorderColor, 0, 0, BorderWidth, h); + e.Graphics.FillRectangle(BorderColor, w - BorderWidth, 0, BorderWidth, h); + //内边框 + e.Graphics.FillRectangle(BorderInColor, BorderWidth, BorderWidth, w - BorderWidth * 2, BorderInWidth); + e.Graphics.FillRectangle(BorderInColor, BorderWidth, BorderWidth, BorderInWidth, h - BorderWidth * 2); + e.Graphics.FillRectangle(BorderInColor, BorderWidth, h - BorderWidth - BorderInWidth, w - BorderWidth * 2, BorderInWidth); + e.Graphics.FillRectangle(BorderInColor, w - BorderWidth - BorderInWidth, BorderWidth, BorderInWidth, h - BorderWidth * 2); + + int wc = CharCount * 5 + CharCount + 1; + int hc = 7; + for (int i = 0; i < wc; i++) + { + for (int j = 0; j < hc; j++) + { + e.Graphics.FillRectangle( + LedBackColor, + BorderWidth + BorderInWidth + IntervalH + (IntervalOn + IntervalIn) * i, + BorderWidth + BorderInWidth + IntervalV + (IntervalOn + IntervalIn) * j, + IntervalOn, + IntervalOn); + } + } + + string str = Text.PadLeft(CharCount, ' '); + str = str.Substring(0, CharCount); + int idx = 0; + foreach (char c in str) + { + int charStart = BorderWidth + BorderInWidth + IntervalH + IntervalOn + IntervalIn + + (IntervalOn + IntervalIn) * 6 * idx; + byte[] bts = DotMasks.ContainsKey(c) ? DotMasks[c] : DotMasks[' ']; + for (int i = 0; i < 5; i++) + { + byte bt = bts[i]; + int btStart = charStart + (IntervalOn + IntervalIn) * i; + BitArray array = new BitArray(new[] { bt }); + for (int j = 0; j < 7; j++) + { + bool bon = array[7 - j]; + if (bon) + { + e.Graphics.FillRectangle( + ForeColor, + btStart, + BorderWidth + BorderInWidth + IntervalV + (IntervalOn + IntervalIn) * j, + IntervalOn, + IntervalOn); + } + } + } + + idx++; + } + } + + /// + /// 文字改变 + /// + /// e + protected override void OnTextChanged(EventArgs e) + { + base.OnTextChanged(e); + CalcSize(); + Invalidate(); + } + + /// + /// 增加LED字符 + /// + /// 字符 + /// 显示 + public void Add(char key, byte[] bytes) + { + if (!DotMasks.ContainsKey(key)) + { + DotMasks.Add(key, bytes); + } + } + + private readonly Dictionary DotMasks = new Dictionary + { + [' '] = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00 }, + ['!'] = new byte[] { 0x00, 0x00, 0xFA, 0x00, 0x00 }, + ['\"'] = new byte[] { 0x00, 0xC0, 0x00, 0xC0, 0x00 }, + ['#'] = new byte[] { 0x28, 0x7C, 0x28, 0x7C, 0x28 }, + ['$'] = new byte[] { 0x24, 0x54, 0xFE, 0x54, 0x48 }, + ['%'] = new byte[] { 0x64, 0x68, 0x10, 0x2C, 0x4C }, + ['&'] = new byte[] { 0x6C, 0x92, 0xAA, 0x44, 0x0A }, + ['\''] = new byte[] { 0x00, 0x20, 0xC0, 0x00, 0x00 }, + ['('] = new byte[] { 0x00, 0x00, 0x7C, 0x82, 0x00 }, + [')'] = new byte[] { 0x00, 0x82, 0x7C, 0x00, 0x00 }, + ['*'] = new byte[] { 0x54, 0x38, 0xFE, 0x38, 0x54 }, + ['+'] = new byte[] { 0x10, 0x10, 0x7C, 0x10, 0x10 }, + [','] = new byte[] { 0x00, 0x02, 0x04, 0x00, 0x00 }, + ['-'] = new byte[] { 0x10, 0x10, 0x10, 0x10, 0x10 }, + ['.'] = new byte[] { 0x00, 0x00, 0x02, 0x00, 0x00 }, + ['/'] = new byte[] { 0x04, 0x08, 0x10, 0x20, 0x40 }, + ['0'] = new byte[] { 0x7C, 0x8A, 0x92, 0xA2, 0x7C }, + ['1'] = new byte[] { 0x00, 0x42, 0xFE, 0x02, 0x00 }, + ['2'] = new byte[] { 0x46, 0x8A, 0x92, 0x92, 0x62 }, + ['3'] = new byte[] { 0x44, 0x92, 0x92, 0x92, 0x6C }, + ['4'] = new byte[] { 0xF0, 0x10, 0x10, 0x10, 0xFE }, + ['5'] = new byte[] { 0xF4, 0x92, 0x92, 0x92, 0x8C }, + ['6'] = new byte[] { 0x7C, 0x92, 0x92, 0x92, 0x4C }, + ['7'] = new byte[] { 0xC0, 0x80, 0x8E, 0x90, 0xE0 }, + ['8'] = new byte[] { 0x6C, 0x92, 0x92, 0x92, 0x6C }, + ['9'] = new byte[] { 0x64, 0x92, 0x92, 0x92, 0x7C }, + [':'] = new byte[] { 0x00, 0x00, 0x24, 0x00, 0x00 }, + [';'] = new byte[] { 0x00, 0x02, 0x24, 0x00, 0x00 }, + ['<'] = new byte[] { 0x10, 0x28, 0x44, 0x82, 0x00 }, + ['='] = new byte[] { 0x28, 0x28, 0x28, 0x28, 0x28 }, + ['>'] = new byte[] { 0x00, 0x82, 0x44, 0x28, 0x10 }, + ['?'] = new byte[] { 0x40, 0x80, 0x9A, 0x90, 0x60 }, + ['@'] = new byte[] { 0x7C, 0x92, 0xAA, 0xBA, 0x70 }, + ['A'] = new byte[] { 0x7E, 0x90, 0x90, 0x90, 0x7E }, + ['B'] = new byte[] { 0xFE, 0x92, 0x92, 0x92, 0x6C }, + ['C'] = new byte[] { 0x7C, 0x82, 0x82, 0x82, 0x44 }, + ['D'] = new byte[] { 0xFE, 0x82, 0x82, 0x82, 0x7C }, + ['E'] = new byte[] { 0xFE, 0x92, 0x92, 0x92, 0x82 }, + ['F'] = new byte[] { 0xFE, 0x90, 0x90, 0x90, 0x80 }, + ['G'] = new byte[] { 0x7C, 0x82, 0x92, 0x92, 0x5C }, + ['H'] = new byte[] { 0xFE, 0x10, 0x10, 0x10, 0xFE }, + ['I'] = new byte[] { 0x82, 0x82, 0xFE, 0x82, 0x82 }, + ['J'] = new byte[] { 0x04, 0x02, 0x02, 0x02, 0xFC }, + ['K'] = new byte[] { 0xFE, 0x10, 0x28, 0x44, 0x82 }, + ['L'] = new byte[] { 0xFE, 0x02, 0x02, 0x02, 0x02 }, + ['M'] = new byte[] { 0xFE, 0x40, 0x20, 0x40, 0xFE }, + ['N'] = new byte[] { 0xFE, 0x20, 0x10, 0x08, 0xFE }, + ['O'] = new byte[] { 0x7C, 0x82, 0x82, 0x82, 0x7C }, + ['P'] = new byte[] { 0xFE, 0x90, 0x90, 0x90, 0x60 }, + ['Q'] = new byte[] { 0x7C, 0x82, 0x82, 0x86, 0x7E }, + ['R'] = new byte[] { 0xFE, 0x90, 0x90, 0x90, 0x6E }, + ['S'] = new byte[] { 0x64, 0x92, 0x92, 0x92, 0x4C }, + ['T'] = new byte[] { 0x80, 0x80, 0xFE, 0x80, 0x80 }, + ['U'] = new byte[] { 0xFC, 0x02, 0x02, 0x02, 0xFC }, + ['V'] = new byte[] { 0xE0, 0x18, 0x06, 0x18, 0xE0 }, + ['W'] = new byte[] { 0xFC, 0x02, 0x0C, 0x02, 0xFC }, + ['X'] = new byte[] { 0xC6, 0x28, 0x10, 0x28, 0xC6 }, + ['Y'] = new byte[] { 0xC0, 0x20, 0x1E, 0x20, 0xC0 }, + ['Z'] = new byte[] { 0x86, 0x8A, 0x92, 0xA2, 0xC2 }, + ['['] = new byte[] { 0x00, 0xFE, 0x82, 0x82, 0x00 }, + ['\\'] = new byte[] { 0x40, 0x20, 0x10, 0x08, 0x04 }, + [']'] = new byte[] { 0x00, 0x82, 0x82, 0xFE, 0x00 }, + ['^'] = new byte[] { 0x20, 0x40, 0x80, 0x40, 0x20 }, + ['_'] = new byte[] { 0x02, 0x02, 0x02, 0x02, 0x02 }, + ['`'] = new byte[] { 0x00, 0x00, 0xC0, 0x20, 0x00 }, + ['°'] = new byte[] { 0x00, 0x00, 0x40, 0xA0, 0x40 }, + ['a'] = new byte[] { 0x04, 0x2A, 0x2A, 0x2A, 0x1E }, + ['b'] = new byte[] { 0xFE, 0x22, 0x22, 0x22, 0x1C }, + ['c'] = new byte[] { 0x1C, 0x22, 0x22, 0x22, 0x14 }, + ['d'] = new byte[] { 0x1C, 0x22, 0x22, 0x22, 0xFE }, + ['e'] = new byte[] { 0x1C, 0x2A, 0x2A, 0x2A, 0x18 }, + ['f'] = new byte[] { 0x10, 0x7E, 0x90, 0x90, 0x40 }, + ['g'] = new byte[] { 0x10, 0x2A, 0x2A, 0x2A, 0x1C }, + ['h'] = new byte[] { 0xFE, 0x20, 0x20, 0x20, 0x1E }, + ['i'] = new byte[] { 0x00, 0x22, 0xBE, 0x02, 0x00 }, + ['j'] = new byte[] { 0x00, 0x02, 0xBC, 0x00, 0x00 }, + ['k'] = new byte[] { 0xFE, 0x08, 0x08, 0x14, 0x22 }, + ['l'] = new byte[] { 0x00, 0x82, 0xFE, 0x02, 0x00 }, + ['m'] = new byte[] { 0x3E, 0x20, 0x3E, 0x20, 0x1E }, + ['n'] = new byte[] { 0x3E, 0x20, 0x20, 0x20, 0x1E }, + ['o'] = new byte[] { 0x1C, 0x22, 0x22, 0x22, 0x1C }, + ['p'] = new byte[] { 0x3E, 0x28, 0x28, 0x28, 0x10 }, + ['q'] = new byte[] { 0x10, 0x28, 0x28, 0x28, 0x3E }, + ['r'] = new byte[] { 0x3E, 0x20, 0x20, 0x20, 0x10 }, + ['s'] = new byte[] { 0x12, 0x2A, 0x2A, 0x2A, 0x24 }, + ['t'] = new byte[] { 0x20, 0xFC, 0x22, 0x22, 0x00 }, + ['u'] = new byte[] { 0x3C, 0x02, 0x02, 0x02, 0x3E }, + ['v'] = new byte[] { 0x38, 0x04, 0x02, 0x04, 0x38 }, + ['w'] = new byte[] { 0x3C, 0x02, 0x0C, 0x02, 0x3C }, + ['x'] = new byte[] { 0x22, 0x14, 0x08, 0x14, 0x22 }, + ['y'] = new byte[] { 0x22, 0x14, 0x08, 0x10, 0x20 }, + ['z'] = new byte[] { 0x22, 0x26, 0x2A, 0x32, 0x22 }, + ['{'] = new byte[] { 0x00, 0x10, 0x6C, 0x82, 0x00 }, + ['|'] = new byte[] { 0x00, 0x00, 0xFE, 0x00, 0x00 }, + ['}'] = new byte[] { 0x00, 0x82, 0x6C, 0x10, 0x00 }, + ['~'] = new byte[] { 0x40, 0x80, 0x40, 0x20, 0x40 }, + ['Κ'] = new byte[] { 0xFE, 0x10, 0x28, 0x44, 0x82 }, + ['Χ'] = new byte[] { 0xC6, 0x28, 0x10, 0x28, 0xC6 }, + ['Υ'] = new byte[] { 0xC0, 0x20, 0x1E, 0x20, 0xC0 }, + ['Μ'] = new byte[] { 0xFE, 0x40, 0x20, 0x40, 0xFE }, + ['Γ'] = new byte[] { 0xFE, 0x80, 0x80, 0x80, 0x80 }, + ['Ν'] = new byte[] { 0xFE, 0x20, 0x10, 0x08, 0xFE }, + ['Ξ'] = new byte[] { 0x82, 0x92, 0x92, 0x92, 0x82 }, + ['Ο'] = new byte[] { 0x7C, 0x82, 0x82, 0x82, 0x7C }, + ['Θ'] = new byte[] { 0x7C, 0x92, 0x92, 0x92, 0x7C }, + ['Π'] = new byte[] { 0xFE, 0x80, 0x80, 0x80, 0xFE }, + ['Ρ'] = new byte[] { 0xFE, 0x90, 0x90, 0x90, 0x60 }, + ['Ω'] = new byte[] { 0x7A, 0x8E, 0x80, 0x8E, 0x7A }, + ['Ψ'] = new byte[] { 0xF0, 0x08, 0xFE, 0x08, 0xF0 }, + ['Ι'] = new byte[] { 0x82, 0x82, 0xFE, 0x82, 0x82 }, + ['∞'] = new byte[] { 0x38, 0x44, 0x38, 0x44, 0x38 }, + ['Α'] = new byte[] { 0x7E, 0x90, 0x90, 0x90, 0x7E }, + ['Δ'] = new byte[] { 0x0E, 0x32, 0xC2, 0x32, 0x0E }, + ['Λ'] = new byte[] { 0x0E, 0x30, 0xC0, 0x30, 0x0E }, + ['Ε'] = new byte[] { 0xFE, 0x92, 0x92, 0x92, 0x82 }, + ['Η'] = new byte[] { 0xFE, 0x10, 0x10, 0x10, 0xFE }, + ['Φ'] = new byte[] { 0x38, 0x44, 0xFE, 0x44, 0x38 }, + ['Β'] = new byte[] { 0xFE, 0x92, 0x92, 0x92, 0x6C }, + ['Τ'] = new byte[] { 0x80, 0x80, 0xFE, 0x80, 0x80 }, + ['Ζ'] = new byte[] { 0x86, 0x8A, 0x92, 0xA2, 0xC2 }, + ['Σ'] = new byte[] { 0xC6, 0xAA, 0x92, 0x82, 0x82 }, + [':'] = new byte[] { 0x00, 0x00, 0x24, 0x00, 0x00 }, + }; + + /// + /// 禁用该属性 + /// + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("禁用该属性!", true)] + [DefaultValue(typeof(Image), "null")] + public new Image BackgroundImage => null; + + /// + /// 禁用该属性 + /// + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("禁用该属性!", true)] + [DefaultValue(ImageLayout.Tile)] + public new ImageLayout BackgroundImageLayout => ImageLayout.Tile; + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UILedStopwatch.cs b/SunnyUI/Controls/UILedStopwatch.cs new file mode 100644 index 00000000..6f3741f2 --- /dev/null +++ b/SunnyUI/Controls/UILedStopwatch.cs @@ -0,0 +1,140 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UILedStopwatch.cs + * 文件说明: LED 时钟 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; + +namespace Sunny.UI +{ + /// + /// LED计时器 + /// + [DefaultEvent("Click")] + [DefaultProperty("TimerTick")] + public sealed class UILedStopwatch : UILedDisplay + { + private readonly System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); + + /// + /// 当定时器启动后,每隔1秒触发一次 + /// + public event EventHandler TimerTick; + + /// + /// 构造函数 + /// + public UILedStopwatch() + { + timer.Interval = 50; + timer.Tick += Timer_Tick; + } + + public enum TimeShowType + { + mmss, + mmssfff, + hhmmss + } + + [DefaultValue(TimeShowType.mmss)] + public TimeShowType ShowType { get; set; } = TimeShowType.mmss; + + private void Timer_Tick(object sender, EventArgs e) + { + TimeSpan = DateTime.Now - StartTime; + string text = ""; + switch (ShowType) + { + case TimeShowType.mmss: + text = TimeSpan.Minutes.ToString("D2") + ":" + TimeSpan.Seconds.ToString("D2"); + break; + + case TimeShowType.mmssfff: + text = TimeSpan.Minutes.ToString("D2") + ":" + TimeSpan.Seconds.ToString("D2") + "." + TimeSpan.Milliseconds.ToString("D3"); + break; + + case TimeShowType.hhmmss: + text = TimeSpan.Hours.ToString("D2") + ":" + TimeSpan.Minutes.ToString("D2") + ":" + TimeSpan.Seconds.ToString("D2"); + break; + } + + if (text != Text) + { + Text = text; + TimerTick?.Invoke(this, null); + } + } + + /// + /// OnCreateControl + /// + protected override void OnCreateControl() + { + Text = "00:00"; + } + + /// + /// 计时 + /// + public TimeSpan TimeSpan { get; private set; } + + private DateTime StartTime; + + /// + /// 开始 + /// + public void Start() + { + Text = "00:00"; + StartTime = DateTime.Now; + timer.Start(); + } + + /// + /// 停止 + /// + public void Stop() + { + timer.Stop(); + } + + /// + /// 是否开始工作 + /// + public bool IsWorking => timer.Enabled; + + private bool _active; + + [DefaultValue(false)] + public bool Active + { + get => _active; + set + { + _active = value; + if (_active) + Start(); + else + Stop(); + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UILight.cs b/SunnyUI/Controls/UILight.cs new file mode 100644 index 00000000..2fb8e743 --- /dev/null +++ b/SunnyUI/Controls/UILight.cs @@ -0,0 +1,227 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UILight.cs + * 文件说明: 提示灯 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public enum UILightState + { + On, + Off, + Blink + } + + [ToolboxItem(true)] + public sealed class UILight : UIControl + { + private Timer timer; + + public UILight() + { + ShowRect = false; + ShowText = false; + Radius = Width = Height = 35; + } + + private int interval = 500; + + [DefaultValue(500)] + public int Interval + { + get => interval; + set + { + interval = Math.Max(100, value); + interval = Math.Min(interval, 10000); + if (timer != null) + { + bool isRun = timer.Enabled; + timer.Stop(); + timer.Interval = interval; + if (isRun) + { + timer.Start(); + } + } + } + } + + private UILightState state = UILightState.On; + + [DefaultValue(UILightState.On)] + public UILightState State + { + get => state; + set + { + state = value; + timer?.Stop(); + + if (state == UILightState.On) + { + showColor = onColor; + } + + if (state == UILightState.Off) + { + showColor = offColor; + } + + if (state == UILightState.Blink) + { + if (timer == null) + { + timer = new Timer { Interval = interval }; + timer.Tick += Timer_Tick; + } + + blinkState = true; + showColor = onColor; + timer.Start(); + } + + Invalidate(); + } + } + + private Color showColor = UIColor.Green; + private bool blinkState; + + private void Timer_Tick(object sender, EventArgs e) + { + blinkState = !blinkState; + showColor = blinkState ? onColor : offColor; + Invalidate(); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + if (Width != Height) + { + Width = Height; + } + + Color color; + if (State == UILightState.On) + color = OnColor; + else if (State == UILightState.Off) + color = OffColor; + else + color = showColor; + + GraphicsPath CirclePath = new GraphicsPath(); + CirclePath.AddEllipse(2, 2, Width - 4, Height - 4); + g.Smooth(); + + if (ShowCenterColor) + { + Color[] surroundColor = new Color[] { color }; + PathGradientBrush gradientBrush = new PathGradientBrush(path); + gradientBrush.CenterColor = centerColor; + gradientBrush.SurroundColors = surroundColor; + g.FillPath(gradientBrush, CirclePath); + gradientBrush.Dispose(); + } + else + { + g.FillPath(color, CirclePath); + } + + CirclePath.Dispose(); + + if (ShowLightLine) + { + int size = (Width - 4) / 5; + g.DrawArc(centerColor, size, size, Width - size * 2, Height - size * 2, 45, -155); + } + } + + private bool showCenterColor = true; + + [DefaultValue(true)] + public bool ShowCenterColor + { + get => showCenterColor; + set + { + showCenterColor = value; + Invalidate(); + } + } + + private bool showLightLine = true; + + [DefaultValue(true)] + public bool ShowLightLine + { + get => showLightLine; + set + { + showLightLine = value; + Invalidate(); + } + } + + private Color onColor = UIColor.Green; + + [DefaultValue(typeof(Color), "110, 190, 40")] + public Color OnColor + { + get => onColor; + set + { + onColor = value; + Invalidate(); + } + } + + private Color centerColor = UIColor.LightGreen; + + [DefaultValue(typeof(Color), "110, 190, 40")] + public Color CenterColor + { + get => centerColor; + set + { + centerColor = value; + Invalidate(); + } + } + + private Color offColor = UIColor.Gray; + + [DefaultValue(typeof(Color), "140, 140, 140")] + public Color OffColor + { + get => offColor; + set + { + offColor = value; + Invalidate(); + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UILine.cs b/SunnyUI/Controls/UILine.cs new file mode 100644 index 00000000..2d85743d --- /dev/null +++ b/SunnyUI/Controls/UILine.cs @@ -0,0 +1,212 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UILine.cs + * 文件说明: 分割线 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; + +namespace Sunny.UI +{ + [ToolboxItem(true)] + public sealed class UILine : UIControl + { + public UILine() + { + Size = new Size(360, 29); + MinimumSize = new Size(16, 16); + ShowRect = false; + foreColor = UIStyles.Blue.LineForeColor; + fillColor = UIStyles.Blue.PlainColor; + } + + public enum LineDirection + { + /// + /// 水平的 + /// + Horizontal, + + /// + /// 竖直的 + /// + Vertical + } + + private LineDirection direction = LineDirection.Horizontal; + + [DefaultValue(LineDirection.Horizontal)] + public LineDirection Direction + { + get => direction; + set + { + direction = value; + Invalidate(); + } + } + + private int lineSize = 1; + + [Description("线宽")] + [DefaultValue(1)] + public int LineSize + { + get => lineSize; + set + { + lineSize = Math.Max(1, value); + Invalidate(); + } + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + fillColor = uiColor.PlainColor; + rectColor = uiColor.RectColor; + foreColor = uiColor.LineForeColor; + Invalidate(); + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + g.Clear(fillColor); + if (Direction == LineDirection.Horizontal) + { + int top = (Height - lineSize) / 2; + g.FillRectangle(rectColor, Padding.Left, top, Width - Padding.Left - Padding.Right, lineSize); + g.DrawLine(Color.FromArgb(50, fillColor), Padding.Left, top + lineSize, Width - Padding.Right - 1, top + lineSize); + } + else + { + int left = (Width - lineSize) / 2; + g.FillRectangle(rectColor, left, Padding.Top, lineSize, Height - Padding.Top - Padding.Bottom); + g.DrawLine(Color.FromArgb(50, fillColor), left + lineSize, Padding.Top, left + lineSize, Height - Padding.Bottom - 1); + } + } + + private int textInterval = 10; + + [DefaultValue(10)] + public int TextInterval + { + get => textInterval; + set + { + textInterval = value; + Invalidate(); + } + } + + protected override void OnPaintFore(Graphics g, GraphicsPath path) + { + SizeF sf = g.MeasureString(Text, Font); + + if (Direction == LineDirection.Horizontal) + { + switch (TextAlign) + { + case ContentAlignment.BottomLeft: + g.DrawString(Text, Font, foreColor, TextInterval + 2, (Height + lineSize) / 2.0f); + break; + + case ContentAlignment.MiddleLeft: + g.FillRectangle(fillColor, TextInterval, 0, sf.Width + 3, Height); + g.DrawString(Text, Font, foreColor, TextInterval + 2, (Height - sf.Height) / 2); + break; + + case ContentAlignment.TopLeft: + g.DrawString(Text, Font, foreColor, TextInterval + 2, (Height - lineSize) / 2.0f - sf.Height); + break; + + case ContentAlignment.BottomCenter: + g.DrawString(Text, Font, foreColor, (Width - sf.Width) / 2, (Height + lineSize) / 2.0f); + break; + + case ContentAlignment.MiddleCenter: + g.FillRectangle(fillColor, (Width - sf.Width) / 2 - 2, 0, sf.Width + 3, Height); + g.DrawString(Text, Font, foreColor, (Width - sf.Width) / 2, (Height - sf.Height) / 2); + break; + + case ContentAlignment.TopCenter: + g.DrawString(Text, Font, foreColor, (Width - sf.Width) / 2, (Height - lineSize) / 2.0f - sf.Height); + break; + + case ContentAlignment.BottomRight: + g.DrawString(Text, Font, foreColor, Width - sf.Width - TextInterval - 2, (Height + lineSize) / 2.0f); + break; + + case ContentAlignment.MiddleRight: + g.FillRectangle(fillColor, Width - sf.Width - TextInterval - 4, 0, sf.Width + 3, Height); + g.DrawString(Text, Font, foreColor, Width - sf.Width - TextInterval - 2, (Height - sf.Height) / 2); + break; + + case ContentAlignment.TopRight: + g.DrawString(Text, Font, foreColor, Width - sf.Width - TextInterval - 2, (Height - lineSize) / 2.0f - sf.Height); + break; + } + } + + // if (Direction == LineDirection.Vertical) + // { + // StringFormat format = new StringFormat(); + // format.FormatFlags = StringFormatFlags.DirectionVertical; + // g.DrawString(Text, Font, Brushes.Black, 15, 5, format); + // } + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color FillColor + { + get => fillColor; + set => SetFillColor(value); + } + + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color LineColor + { + get => rectColor; + set => SetRectColor(value); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIListBox.Designer.cs b/SunnyUI/Controls/UIListBox.Designer.cs new file mode 100644 index 00000000..d5f95a57 --- /dev/null +++ b/SunnyUI/Controls/UIListBox.Designer.cs @@ -0,0 +1,38 @@ +namespace Sunny.UI +{ + partial class UIListBox + { + /// + /// 必需的设计器变量。 + /// + 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() + { + components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UIListBox.cs b/SunnyUI/Controls/UIListBox.cs new file mode 100644 index 00000000..f0dcf99f --- /dev/null +++ b/SunnyUI/Controls/UIListBox.cs @@ -0,0 +1,458 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIListBox.cs + * 文件说明: 列表框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("ItemClick")] + [DefaultProperty("Items")] + public sealed partial class UIListBox : UIPanel + { + private readonly ListBoxEx listbox = new ListBoxEx(); + private readonly UIPanel panel = new UIPanel(); + private readonly UIScrollBar bar = new UIScrollBar(); + + public UIListBox() + { + InitializeComponent(); + ShowText = false; + Padding = new Padding(2); + + panel.Radius = 0; + panel.RadiusSides = UICornerRadiusSides.None; + panel.RectSides = ToolStripStatusLabelBorderSides.None; + panel.Parent = this; + panel.Width = 0; + panel.Dock = DockStyle.Right; + panel.Show(); + + bar.ValueChanged += Bar_ValueChanged; + bar.Parent = panel; + bar.Dock = DockStyle.Fill; + bar.Style = UIStyle.Custom; + bar.Show(); + + listbox.Parent = this; + listbox.Dock = DockStyle.Fill; + listbox.Show(); + listbox.panel = panel; + listbox.Bar = bar; + + panel.SendToBack(); + + listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged; + listbox.SelectedValueChanged += Listbox_SelectedValueChanged; + listbox.Click += Listbox_Click; + listbox.DoubleClick += Listbox_DoubleClick; + listbox.BeforeDrawItem += Listbox_BeforeDrawItem; + } + + private void Listbox_BeforeDrawItem(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e) + { + if (Items.Count != LastCount) + { + listbox.SetScrollInfo(); + LastCount = Items.Count; + ItemsCountChange?.Invoke(this, null); + } + } + + private void Listbox_DoubleClick(object sender, EventArgs e) + { + if (SelectedItem != null) + ItemDoubleClick?.Invoke(sender, e); + } + + private void Listbox_Click(object sender, EventArgs e) + { + if (SelectedItem != null) + ItemClick?.Invoke(sender, e); + } + + public event EventHandler ItemClick; + + public event EventHandler ItemDoubleClick; + + public event EventHandler ItemsCountChange; + + public event EventHandler SelectedIndexChanged; + + public event EventHandler SelectedValueChanged; + + private void Listbox_SelectedValueChanged(object sender, EventArgs e) + { + SelectedValueChanged?.Invoke(sender, e); + Text = listbox.SelectedItem?.ToString(); + } + + private void Listbox_SelectedIndexChanged(object sender, EventArgs e) + { + SelectedIndexChanged?.Invoke(sender, e); + } + + [DefaultValue(25)] + public int ItemHeight + { + get => listbox.ItemHeight; + set => listbox.ItemHeight = value; + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + if (bar != null) + { + bar.ForeColor = uiColor.PrimaryColor; + bar.HoverColor = uiColor.ButtonFillHoverColor; + bar.PressColor = uiColor.ButtonFillPressColor; + bar.FillColor = Color.White; + } + + if (panel != null) + { + panel.FillColor = Color.White; + } + + listbox?.SetStyleColor(uiColor); + } + + private int LastCount; + + private void Bar_ValueChanged(object sender, EventArgs e) + { + if (listbox != null) + { + ScrollBarInfo.SetScrollValue(listbox.Handle, bar.Value); + } + } + + protected override void OnRadiusChanged(int value) + { + base.OnRadiusChanged(value); + Padding = new Padding(Math.Max(2, value / 2)); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + g.Clear(Color.White); + } + + [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 ListBox.ObjectCollection Items => listbox.Items; + + [Browsable(false)] + public int Count => Items.Count; + + public void SelectedFirst() + { + listbox.SelectedFirst(); + } + + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color ItemSelectBackColor + { + get => listbox.ItemSelectBackColor; + set => listbox.ItemSelectBackColor = value; + } + + [DefaultValue(typeof(Color), "White")] + public Color ItemSelectForeColor + { + get => listbox.ItemSelectForeColor; + set => listbox.ItemSelectForeColor = value; + } + + [Browsable(false)] + [DefaultValue(-1)] + public int SelectedIndex + { + get => listbox.SelectedIndex; + set => listbox.SelectedIndex = value; + } + + [Browsable(false)] + [DefaultValue(null)] + public object SelectedItem + { + get => listbox.SelectedItem; + set => listbox.SelectedItem = value; + } + + [Browsable(false)] + [DefaultValue(null)] + public object SelectedValue + { + get => listbox.SelectedValue; + set => listbox.SelectedValue = value; + } + } + + /// + /// ListBox + /// + [ToolboxItem(false)] + public sealed class ListBoxEx : ListBox, IStyleInterface + { + private UIScrollBar bar; + + public UIPanel panel { get; set; } + + [DefaultValue(null)] + public string TagString { get; set; } + + public UIScrollBar Bar + { + get => bar; + set + { + bar = value; + SetScrollInfo(); + } + } + + public int Count => Items.Count; + + public ListBoxEx() + { + InitializeComponent(); + + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.DoubleBuffer, true); + UpdateStyles(); + + BorderStyle = BorderStyle.None; + ForeColor = UIFontColor.Primary; + IntegralHeight = false; + Version = UIGlobal.Version; + SetScrollInfo(); + } + + protected override void OnSizeChanged(EventArgs e) + { + if (!PanelVisible) + { + SetScrollInfo(); + } + } + + public void SetScrollInfo() + { + if (Bar == null || panel == null) + { + return; + } + + PanelVisible = true; + var si = ScrollBarInfo.GetInfo(Handle); + if (si.ScrollMax > 0) + { + Bar.Maximum = si.ScrollMax; + panel.Width = (si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0) ? SystemInformation.VerticalScrollBarWidth + 2 : 0; + panel.SendToBack(); + Bar.Value = si.nPos; + } + else + { + panel.Width = 0; + } + + PanelVisible = false; + } + + private bool PanelVisible; + + public string Version { get; } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + SuspendLayout(); + // + // UIListBox + // + BorderStyle = BorderStyle.FixedSingle; + DrawMode = DrawMode.OwnerDrawFixed; + Font = UIFontColor.Font; + IntegralHeight = false; + ItemHeight = 25; + Size = new Size(150, 200); + ResumeLayout(false); + } + + #endregion 组件设计器生成的代码 + + private UIStyle _style = UIStyle.Blue; + private Color _itemSelectBackColor = UIColor.Blue; + private Color _itemSelectForeColor = Color.White; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + //隐藏滚动条 + ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both + } + + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + if (panel.Width > 0) + { + var si = ScrollBarInfo.GetInfo(Handle); + if (e.Delta > 10) + { + if (si.nPos > 0) + { + ScrollBarInfo.ScrollUp(Handle); + } + } + else if (e.Delta < -10) + { + if (si.nPos < si.ScrollMax) + { + ScrollBarInfo.ScrollDown(Handle); + } + } + } + + SetScrollInfo(); + } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + ItemSelectBackColor = uiColor.ListItemSelectBackColor; + ItemSelectForeColor = uiColor.ListItemSelectForeColor; + Invalidate(); + } + + [Category("Appearance"), Description("The border color used to paint the control.")] + public Color ItemSelectBackColor + { + get => _itemSelectBackColor; + set + { + if (_itemSelectBackColor != value) + { + _itemSelectBackColor = value; + _style = UIStyle.Custom; + if (DesignMode) + Invalidate(); + } + } + } + + [Category("Appearance"), Description("The border color used to paint the control.")] + public Color ItemSelectForeColor + { + get => _itemSelectForeColor; + set + { + if (_itemSelectForeColor != value) + { + _itemSelectForeColor = value; + _style = UIStyle.Custom; + if (DesignMode) + Invalidate(); + } + } + } + + public delegate void OnBeforeDrawItem(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e); + + public event OnBeforeDrawItem BeforeDrawItem; + + protected override void OnDrawItem(DrawItemEventArgs e) + { + base.OnDrawItem(e); + BeforeDrawItem?.Invoke(this, Items, e); + if (Items.Count == 0) + { + return; + } + + e.DrawBackground(); + + if (e.Index < 0 || e.Index >= Items.Count) + { + return; + } + + StringFormat sStringFormat = new StringFormat(); + sStringFormat.LineAlignment = StringAlignment.Center; + + Color backColor = (e.State & DrawItemState.Selected) == DrawItemState.Selected ? ItemSelectBackColor : BackColor; + Color foreColor = (e.State & DrawItemState.Selected) == DrawItemState.Selected ? ItemSelectForeColor : ForeColor; + + Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width - 1, e.Bounds.Height - 1); + e.Graphics.FillRectangle(BackColor, e.Bounds); + e.Graphics.FillRoundRectangle(backColor, rect, 5); + e.Graphics.DrawString(Items[e.Index].ToString(), e.Font, foreColor, e.Bounds, sStringFormat); + } + + protected override void OnMeasureItem(MeasureItemEventArgs e) + { + base.OnMeasureItem(e); + e.ItemHeight = e.ItemHeight + ItemHeight; + } + + public void SelectedFirst() + { + if (Items.Count > 0 && SelectedIndex < 0) + { + SelectedIndex = 0; + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIListBox.resx b/SunnyUI/Controls/UIListBox.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UIListBox.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/SunnyUI/Controls/UILogo.cs b/SunnyUI/Controls/UILogo.cs new file mode 100644 index 00000000..db69ef81 --- /dev/null +++ b/SunnyUI/Controls/UILogo.cs @@ -0,0 +1,179 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UILogo.cs + * 文件说明: SunnyUI LOGO + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Imaging; +using System.Windows.Forms; + +#pragma warning disable 1591 + +namespace Sunny.UI +{ + [ToolboxItem(false)] + public sealed class UILogo : UIControl + { + [ToolboxItem(true)] + public UILogo() + { + ShowText = ShowRect = false; + Width = 300; + Height = 80; + + MinimumSize = MaximumSize = new Size(300, 80); + + ForeColor = UIFontColor.Primary; + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + Graphics g = e.Graphics; + g.Clear(BackColor); + g.SetHighQuality(); + int x = 9; + int y = 9; + int n1 = 66; + int n3 = -20; + + g.FillPie(new SolidBrush(UIColor.Blue), x, y, n1, n1, -30, 60); + g.FillPie(new SolidBrush(UIColor.Gray), x, y, n1, n1, 30, 60); + g.FillPie(new SolidBrush(UIColor.Red), x, y, n1, n1, 90, 60); + g.FillPie(new SolidBrush(UIColor.Orange), x, y, n1, n1, 150, 60); + g.FillPie(new SolidBrush(Color.FromArgb(255, 196, 0)), x, y, n1, n1, 210, 60); + g.FillPie(new SolidBrush(UIColor.Green), x, y, n1, n1, 270, 60); + + g.FillEllipse(BackColor, x - n3, y - n3, n1 + n3 * 2, n1 + n3 * 2); + g.SetHighQuality(); + int len = 60; + x = x + 34; + y = y + 34; + g.DrawLine(new Pen(BackColor, 2), x, y, x - len, y - len / 2 - 4); + g.DrawLine(new Pen(BackColor, 2), x, y, x - len, y + len / 2 + 4); + + g.DrawLine(new Pen(BackColor, 2), x, y, x + len, y - len / 2 - 4); + g.DrawLine(new Pen(BackColor, 2), x, y, x + len, y + len / 2 + 4); + g.SetDefaultQuality(); + + g.DrawLine(new Pen(BackColor, 2), x, y, x, y - 60); + g.DrawLine(new Pen(BackColor, 2), x, y, x, y + 60); + + //S + DrawVerticalLine(g, ForeColor, 88, 22, 6, 17, true); + DrawVerticalLine(g, ForeColor, 109, 22, 6, 10, true); + DrawVerticalLine(g, ForeColor, 109, 37, 6, 22); + DrawVerticalLine(g, ForeColor, 88, 46, 6, 13); + DarwHorizontalLine(g, ForeColor, 94, 22, 15, 2, -3, true); + DarwHorizontalLine(g, ForeColor, 94, 37, 15, 2, -3, true); + DarwHorizontalLine(g, ForeColor, 94, 57, 15, 2, -2); + //u + DrawVerticalLine(g, ForeColor, 123, 33, 6, 26); + DrawVerticalLine(g, ForeColor, 142, 33, 6, 26); + DarwHorizontalLine(g, ForeColor, 129, 57, 13, 2, -2); + //n + DrawVerticalLine(g, ForeColor, 156, 33, 6, 26); + DrawVerticalLine(g, ForeColor, 175, 33, 6, 26); + DarwHorizontalLine(g, ForeColor, 162, 33, 13, 2, -3, true); + //n + DrawVerticalLine(g, ForeColor, 189, 33, 6, 26); + DrawVerticalLine(g, ForeColor, 208, 33, 6, 26); + DarwHorizontalLine(g, ForeColor, 195, 33, 13, 2, -3, true); + //y + DrawVerticalLine(g, ForeColor, 222, 33, 6, 26, true); + DrawVerticalLine(g, ForeColor, 241, 33, 6, 41); + DarwHorizontalLine(g, ForeColor, 228, 57, 13, 2, -2, true); + DrawVerticalLine(g, ForeColor, 222, 64, 6, 10); + DarwHorizontalLine(g, ForeColor, 228, 72, 13, 2, -2); + //U + DrawVerticalLine(g, FillColor, 255, 22, 6, 37); + DrawVerticalLine(g, FillColor, 274, 22, 6, 37); + DarwHorizontalLine(g, FillColor, 261, 57, 13, 2, -2); + //I + DrawVerticalLine(g, FillColor, 288, 22, 6, 37); + } + + public void SaveLogo(string fileName) + { + this.SaveToImage(fileName, ImageFormat.Png); + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + foreColor = UIFontColor.Primary; + fillColor = uiColor.MenuSelectedColor; + Invalidate(); + } + + /// + /// 画垂直线 + /// + private void DrawVerticalLine(Graphics g, Color color, int left, int top, int width, int height, bool showBottomShadow = false) + { + g.FillRectangle(color, left, top, width, height); + g.DrawLine(Color.FromArgb(60, color), left - 1, top - 1, left - 1 + width, top - 1); + g.DrawLine(color, left - 1, top, left + 1, top); + g.DrawLine(Color.FromArgb(60, color), left - 2, top - 1, left - 2, top); + g.DrawLine(Color.FromArgb(60, color), left - 1, top + 1, left - 1, top + height - 1); + g.DrawLine(Color.FromArgb(130, color), left + width, top, left + width, top + height - 1); + if (showBottomShadow) + { + g.DrawLine(Color.FromArgb(130, color), left, top + height, left + width, top + height); + } + } + + /// + /// 画水平线 + /// + private void DarwHorizontalLine(Graphics g, Color color, int left, int top, int width, int height, int interval = 0, bool showBottomShadow = false) + { + g.FillRectangle(color, left, top, width, height); + g.DrawLine(Color.FromArgb(60, color), left, top - 1, left + width + interval, top - 1); + if (showBottomShadow) + g.DrawLine(Color.FromArgb(130, color), left + 1, top + height, left + width, top + height); + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color FillColor + { + get => fillColor; + set => SetFillColor(value); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UINavBar.Designer.cs b/SunnyUI/Controls/UINavBar.Designer.cs new file mode 100644 index 00000000..251254ce --- /dev/null +++ b/SunnyUI/Controls/UINavBar.Designer.cs @@ -0,0 +1,36 @@ +namespace Sunny.UI +{ + partial class UINavBar + { + /// + /// 必需的设计器变量。 + /// + 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() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UINavBar.cs b/SunnyUI/Controls/UINavBar.cs new file mode 100644 index 00000000..2cd79786 --- /dev/null +++ b/SunnyUI/Controls/UINavBar.cs @@ -0,0 +1,481 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UINavBar.cs + * 文件说明: 导航栏 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("MenuItemClick")] + [DefaultProperty("Nodes")] + public sealed partial class UINavBar : ScrollableControl, IStyleInterface + { + public readonly UINavMenu Menu = new UINavMenu(); + + private readonly UIContextMenuStrip NavBarMenu = new UIContextMenuStrip(); + + public UINavBar() + { + InitializeComponent(); + + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.DoubleBuffer, true); + SetStyle(ControlStyles.ResizeRedraw, true); + SetStyle(ControlStyles.Selectable, true); + SetStyle(ControlStyles.SupportsTransparentBackColor, true); + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.OptimizedDoubleBuffer, true); + DoubleBuffered = true; + UpdateStyles(); + Font = UIFontColor.Font; + + NavBarMenu.VisibleChanged += NavBarMenu_VisibleChanged; + Dock = DockStyle.Top; + Width = 500; + Height = 110; + Version = UIGlobal.Version; + } + + [DefaultValue(null)] + public TabControl TabControl { get; set; } + + public void SetNodeItem(TreeNode node, NavMenuItem item) + { + MenuHelper.Add(node, item); + } + + public void SetNodePageIndex(TreeNode node, int pageIndex) + { + MenuHelper.SetPageIndex(node, pageIndex); + } + + [DefaultValue(null)] + public string TagString { get; set; } + + private UIMenuStyle _menuStyle = UIMenuStyle.Black; + + [DefaultValue(UIMenuStyle.Black)] + public UIMenuStyle MenuStyle + { + get => _menuStyle; + set + { + if (value != UIMenuStyle.Custom) + { + SetMenuStyle(UIStyles.MenuColors[value]); + } + + _menuStyle = value; + } + } + + private Color foreColor = Color.Silver; + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "Silver")] + public override Color ForeColor + { + get => foreColor; + set + { + foreColor = value; + _menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + + protected override void OnBackColorChanged(EventArgs e) + { + base.OnBackColorChanged(e); + _menuStyle = UIMenuStyle.Custom; + } + + private Color backColor = Color.FromArgb(56, 56, 56); + + public override Color BackColor + { + get => backColor; + set + { + backColor = value; + _menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + + private void SetMenuStyle(UIMenuColor uiColor) + { + foreColor = uiColor.UnSelectedForeColor; + backColor = uiColor.BackColor; + menuHoverColor = uiColor.HoverColor; + Invalidate(); + } + + private Color menuHoverColor = Color.FromArgb(76, 76, 76); + + [DefaultValue(typeof(Color), "76, 76, 76")] + public Color MenuHoverColor + { + get => menuHoverColor; + set + { + menuHoverColor = value; + _menuStyle = UIMenuStyle.Custom; + } + } + + private Color selectedHighColor = UIColor.Blue; + + /// + /// 边框颜色 + /// + [Description("选中Tab页高亮"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color SelectedHighColor + + { + get => selectedHighColor; + set + { + selectedHighColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + private void NavBarMenu_VisibleChanged(object sender, EventArgs e) + { + Invalidate(); + } + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + [MergableProperty(false)] + public TreeNodeCollection Nodes => Menu.Nodes; + + [DefaultValue(null)] + public ImageList ImageList + { + get => Menu.ImageList; + set => Menu.ImageList = value; + } + + [DefaultValue(null)] + public ImageList DropMenuImageList + { + get => NavBarMenu.ImageList; + set => NavBarMenu.ImageList = value; + } + + private StringAlignment nodeAlignment = StringAlignment.Far; + + [DefaultValue(StringAlignment.Far)] + public StringAlignment NodeAlignment + { + get => nodeAlignment; + set + { + nodeAlignment = value; + Invalidate(); + } + } + + private int NodeX; + private int NodeY; + private int ActiveIndex = -1; + + private int selectedIndex = -1; + + private readonly NavMenuHelper MenuHelper = new NavMenuHelper(); + + [DefaultValue(-1)] + public int SelectedIndex + { + get => selectedIndex; + set + { + if (Nodes.Count > 0 && value >= 0 && value < Nodes.Count) + { + selectedIndex = value; + + if (Nodes[value].Nodes.Count == 0) + { + MenuItemClick?.Invoke(Nodes[SelectedIndex].Text, selectedIndex, MenuHelper.GetPageIndex(Nodes[SelectedIndex])); + TabControl?.SelectPage(MenuHelper.GetPageIndex(Nodes[SelectedIndex])); + } + + Invalidate(); + } + } + } + + private Color selectedForeColor = UIColor.Blue; + + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color SelectedForeColor + { + get => selectedForeColor; + set + { + if (selectedForeColor != value) + { + selectedForeColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + e.Graphics.Clear(BackColor); + NodeX = 0; + NodeY = Height - NodeSize.Height; + + switch (NodeAlignment) + { + case StringAlignment.Near: + NodeX = NodeInterval; + break; + + case StringAlignment.Center: + NodeX = (Width - Nodes.Count * NodeSize.Width) * 2; + break; + + case StringAlignment.Far: + NodeX = Width - Nodes.Count * NodeSize.Width - NodeInterval; + break; + } + + for (int i = 0; i < Nodes.Count; i++) + { + Rectangle rect = new Rectangle(NodeX + i * NodeSize.Width, NodeY, NodeSize.Width, NodeSize.Height); + + SizeF sf = e.Graphics.MeasureString(Nodes[i].Text, Font); + Color textColor = ForeColor; + + if (i == ActiveIndex) + { + e.Graphics.FillRectangle(MenuHoverColor, rect); + textColor = SelectedForeColor; + } + + if (i == SelectedIndex) + { + if (!NavBarMenu.Visible) + { + e.Graphics.FillRectangle(new SolidBrush(SelectedHighColor), rect.X, Height - 4, rect.Width, 4); + } + + textColor = SelectedForeColor; + } + + e.Graphics.DrawString(Nodes[i].Text, Font, new SolidBrush(textColor), NodeX + i * NodeSize.Width + (NodeSize.Width - sf.Width) / 2.0f, NodeY + (NodeSize.Height - sf.Height) / 2); + if (Nodes[i].Nodes.Count > 0) + { + SizeF imageSize = e.Graphics.GetFontImageSize(61703, 24); + if (i != SelectedIndex) + { + e.Graphics.DrawFontImage(61703, 24, textColor, NodeX + i * NodeSize.Width + rect.Width - 24, rect.Top + (rect.Height - imageSize.Height) / 2); + } + else + { + e.Graphics.DrawFontImage(NavBarMenu.Visible ? 61702 : 61703, 24, textColor, NodeX + i * NodeSize.Width + rect.Width - 24, rect.Top + (rect.Height - imageSize.Height) / 2); + } + } + } + } + + private int _nodeInterval = 100; + + [DefaultValue(100)] + public int NodeInterval + { + get => _nodeInterval; + set + { + if (_nodeInterval != value) + { + _nodeInterval = value; + Invalidate(); + } + } + } + + private Size nodeSize = new Size(130, 45); + + [DefaultValue(typeof(Size), "130, 45")] + public Size NodeSize + { + get => nodeSize; + set + { + if (nodeSize != value) + { + nodeSize = value; + Invalidate(); + } + } + } + + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + ActiveIndex = -1; + Invalidate(); + } + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + + if (e.X < NodeX || e.X > NodeX + Nodes.Count * NodeSize.Width || e.Y < NodeY) + { + if (ActiveIndex != -1) + { + ActiveIndex = -1; + Invalidate(); + } + + return; + } + + int index = (e.X - NodeX) / NodeSize.Width; + if (ActiveIndex != index) + { + ActiveIndex = index; + Invalidate(); + } + } + + private int NodeMenuLeft(int index) + { + return NodeX + index * NodeSize.Width; + } + + protected override void OnMouseClick(MouseEventArgs e) + { + base.OnMouseClick(e); + + if (ActiveIndex == -1) return; + SelectedIndex = ActiveIndex; + Invalidate(); + + if (Nodes[selectedIndex].Nodes.Count == 0) + { + return; + } + + NavBarMenu.Style = Style; + NavBarMenu.Items.Clear(); + foreach (TreeNode node in Nodes[SelectedIndex].Nodes) + { + ToolStripMenuItem item = new ToolStripMenuItem(node.Text) { Tag = node.Tag }; + item.Click += Item_Click; + NavBarMenu.Items.Add(item); + + if (node.Nodes.Count > 0) + { + AddMenu(item, node); + } + } + + if (NavBarMenu.Width < NodeSize.Width) + { + NavBarMenu.AutoSize = false; + NavBarMenu.Width = NodeSize.Width; + } + + foreach (ToolStripItem item in NavBarMenu.Items) + { + item.AutoSize = false; + item.Width = NavBarMenu.Width - 1; + item.Height = 30; + } + + NavBarMenu.CalcHeight(); + NavBarMenu.Show(this, NodeMenuLeft(SelectedIndex), Height); + } + + private void Item_Click(object sender, EventArgs e) + { + ToolStripMenuItem item = (ToolStripMenuItem)sender; + if (item.Tag != null && item.Tag is NavMenuItem mi) + { + TabControl?.SelectPage(mi.PageIndex); + MenuItemClick?.Invoke(item.Text, selectedIndex, mi.PageIndex); + } + } + + public delegate void OnMenuItemClick(string text, int menuIndex, int pageIndex); + + public event OnMenuItemClick MenuItemClick; + + private void AddMenu(ToolStripMenuItem item, TreeNode node) + { + foreach (TreeNode childNode in node.Nodes) + { + ToolStripMenuItem childItem = new ToolStripMenuItem(childNode.Text) { Tag = childNode.Tag }; + item.DropDownItems.Add(childItem); + + if (childNode.Nodes.Count > 0) + { + AddMenu(childItem, childNode); + } + } + } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + selectedForeColor = selectedHighColor = uiColor.MenuSelectedColor; + Invalidate(); + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + public string Version { get; } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UINavMenu.cs b/SunnyUI/Controls/UINavMenu.cs new file mode 100644 index 00000000..d964baad --- /dev/null +++ b/SunnyUI/Controls/UINavMenu.cs @@ -0,0 +1,822 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UINavMenu.cs + * 文件说明: 导航菜单 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.Collections.Concurrent; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("MenuItemClick")] + [DefaultProperty("Nodes")] + public sealed class UINavMenu : TreeView, IStyleInterface + { + public delegate void OnMenuItemClick(TreeNode node, NavMenuItem item, int pageIndex); + + public event OnMenuItemClick MenuItemClick; + + private readonly UIScrollBar Bar = new UIScrollBar(); + + public UINavMenu() + { + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.SupportsTransparentBackColor | ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer, true); + BorderStyle = BorderStyle.None; + //HideSelection = false; + DrawMode = TreeViewDrawMode.OwnerDrawAll; + //FullRowSelect = true; + //ShowLines = false; + //ShowPlusMinus = false; + //ShowRootLines = false; + + DoubleBuffered = true; + Font = UIFontColor.Font; + //CheckBoxes = false; + ItemHeight = 50; + BackColor = Color.FromArgb(56, 56, 56); + + Bar.ValueChanged += Bar_ValueChanged; + Bar.Dock = DockStyle.Right; + Bar.Visible = false; + Bar.Style = UIStyle.Custom; + Bar.StyleCustomMode = true; + Bar.FillColor = fillColor; + + Bar.ForeColor = Color.Silver; + Bar.HoverColor = Color.Silver; + Bar.PressColor = Color.Silver; + + Controls.Add(Bar); + Version = UIGlobal.Version; + SetScrollInfo(); + } + + [DefaultValue(null)] + public string TagString { get; set; } + + private Color fillColor = Color.FromArgb(56, 56, 56); + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("背景颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "56, 56, 56")] + public Color FillColor + { + get => fillColor; + set + { + if (fillColor != value) + { + fillColor = value; + menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + } + + private Color foreColor = Color.Silver; + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("背景颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "Silver")] + public override Color ForeColor + { + get => foreColor; + set + { + if (foreColor != value) + { + foreColor = value; + menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + } + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + SetScrollInfo(); + } + + private void Bar_ValueChanged(object sender, EventArgs e) + { + ScrollBarInfo.SetScrollValue(Handle, Bar.Value); + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + [DefaultValue(null)] + public TabControl TabControl { get; set; } + + private Color selectedColor = Color.FromArgb(36, 36, 36); + + private bool showTips; + + [Description("是否显示角标"), Category("自定义")] + [DefaultValue(false)] + public bool ShowTips + { + get => showTips; + set + { + if (showTips != value) + { + showTips = value; + Invalidate(); + } + } + } + + private Font tipsFont = new Font("Microsoft Sans Serif", 9); + + [Description("角标文字字体"), Category("自定义")] + [DefaultValue(typeof(Font), "Microsoft Sans Serif, 9pt")] + public Font TipsFont + { + get => tipsFont; + set + { + if (!tipsFont.Equals(value)) + { + tipsFont = value; + Invalidate(); + } + } + } + + [DefaultValue(typeof(Color), "36, 36, 36")] + public Color SelectedColor + { + get => selectedColor; + set + { + if (selectedColor != value) + { + selectedColor = value; + menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + } + + private Color selectedHighColor = UIColor.Blue; + + /// + /// 边框颜色 + /// + [Description("选中Tab页高亮"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color SelectedHighColor + + { + get => selectedHighColor; + set + { + selectedHighColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + private Color hoverColor = Color.FromArgb(76, 76, 76); + + [DefaultValue(typeof(Color), "76, 76, 76")] + public Color HoverColor + { + get => hoverColor; + set + { + hoverColor = value; + menuStyle = UIMenuStyle.Custom; + } + } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + selectedForeColor = selectedHighColor = uiColor.MenuSelectedColor; + Invalidate(); + } + + private UIMenuStyle menuStyle = UIMenuStyle.Black; + + [DefaultValue(UIMenuStyle.Black)] + public UIMenuStyle MenuStyle + { + get => menuStyle; + set + { + if (value != UIMenuStyle.Custom) + { + SetMenuStyle(UIStyles.MenuColors[value]); + } + + menuStyle = value; + } + } + + private void SetMenuStyle(UIMenuColor uiColor) + { + BackColor = uiColor.BackColor; + fillColor = uiColor.BackColor; + selectedColor = uiColor.SelectedColor; + foreColor = uiColor.UnSelectedForeColor; + hoverColor = uiColor.HoverColor; + + if (Bar != null) + { + Bar.FillColor = uiColor.BackColor; + Bar.ForeColor = uiColor.UnSelectedForeColor; + Bar.HoverColor = uiColor.UnSelectedForeColor; + Bar.PressColor = uiColor.UnSelectedForeColor; + } + + Invalidate(); + } + + private Color selectedForeColor = UIColor.Blue; + + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color SelectedForeColor + { + get => selectedForeColor; + set + { + if (selectedForeColor != value) + { + selectedForeColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + } + + private bool ScrollBarVisible; + + private TreeNode CurrentNode; + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + TreeNode node = GetNodeAt(e.Location); + if (node == null || CurrentNode == node) + { + return; + } + + Graphics g = CreateGraphics(); + if (CurrentNode != null) + { + OnDrawNode(new DrawTreeNodeEventArgs(g, CurrentNode, new Rectangle(0, CurrentNode.Bounds.Y, Width, CurrentNode.Bounds.Height), TreeNodeStates.Default)); + } + + CurrentNode = node; + OnDrawNode(new DrawTreeNodeEventArgs(g, CurrentNode, new Rectangle(0, CurrentNode.Bounds.Y, Width, CurrentNode.Bounds.Height), TreeNodeStates.Hot)); + g.Dispose(); + } + + protected override void OnMouseLeave(EventArgs e) + { + Graphics g = CreateGraphics(); + if (CurrentNode != null) + { + OnDrawNode(new DrawTreeNodeEventArgs(g, CurrentNode, new Rectangle(0, CurrentNode.Bounds.Y, Width, CurrentNode.Bounds.Height), TreeNodeStates.Default)); + CurrentNode = null; + } + + g.Dispose(); + } + + private bool checkBoxes; + + [Browsable(false)] + public new bool CheckBoxes + { + get => checkBoxes; + set => checkBoxes = false; + } + + private readonly NavMenuHelper MenuHelper = new NavMenuHelper(); + + public void SetNodeItem(TreeNode node, NavMenuItem item) + { + MenuHelper.Add(node, item); + } + + public void SetNodePageIndex(TreeNode node, int pageIndex) + { + MenuHelper.SetPageIndex(node, pageIndex); + } + + protected override void OnDrawNode(DrawTreeNodeEventArgs e) + { + if (BorderStyle != BorderStyle.None) + { + BorderStyle = BorderStyle.None; + } + + SetScrollInfo(); + CheckBoxes = false; + + if (e.Node == null || (e.Node.Bounds.Width <= 0 && e.Node.Bounds.Height <= 0 && e.Node.Bounds.X <= 0 && e.Node.Bounds.Y <= 0)) + { + e.DrawDefault = true; + } + else + { + int drawLeft = e.Node.Level * 16 + 16 + 4; + int imageLeft = drawLeft; + bool haveImage = false; + + if (MenuHelper.GetSymbol(e.Node) > 0) + { + haveImage = true; + drawLeft += MenuHelper.GetSymbolSize(e.Node) + 6; + } + else + { + if (ImageList != null && ImageList.Images.Count > 0 && e.Node.ImageIndex >= 0 && e.Node.ImageIndex < ImageList.Images.Count) + { + haveImage = true; + drawLeft += ImageList.ImageSize.Width + 6; + } + } + + SizeF sf = e.Graphics.MeasureString(e.Node.Text, Font); + if (e.Node == SelectedNode) + { + e.Graphics.FillRectangle((e.State & TreeNodeStates.Hot) != 0 ? HoverColor : SelectedColor, + new Rectangle(new Point(0, e.Node.Bounds.Y), new Size(Width, e.Node.Bounds.Height))); + + e.Graphics.DrawString(e.Node.Text, Font, SelectedForeColor, drawLeft, e.Bounds.Y + (ItemHeight - sf.Height) / 2.0f); + e.Graphics.FillRectangle(SelectedHighColor, new Rectangle(0, e.Bounds.Y, 4, e.Bounds.Height)); + } + else if (e.Node == CurrentNode && (e.State & TreeNodeStates.Hot) != 0) + { + e.Graphics.FillRectangle(HoverColor, new Rectangle(new Point(0, e.Node.Bounds.Y), new Size(Width, e.Node.Bounds.Height))); + e.Graphics.DrawString(e.Node.Text, Font, ForeColor, drawLeft, e.Bounds.Y + (ItemHeight - sf.Height) / 2.0f); + } + else + { + e.Graphics.FillRectangle(fillColor, new Rectangle(new Point(0, e.Node.Bounds.Y), new Size(Width, e.Node.Bounds.Height))); + e.Graphics.DrawString(e.Node.Text, Font, ForeColor, drawLeft, e.Bounds.Y + (ItemHeight - sf.Height) / 2.0f); + } + + if (haveImage) + { + if (MenuHelper.GetSymbol(e.Node) > 0) + { + SizeF fiSize = e.Graphics.GetFontImageSize(MenuHelper.GetSymbol(e.Node), MenuHelper.GetSymbolSize(e.Node)); + e.Graphics.DrawFontImage(MenuHelper.GetSymbol(e.Node), MenuHelper.GetSymbolSize(e.Node), Color.White, imageLeft + (MenuHelper.GetSymbolSize(e.Node) - fiSize.Width) / 2.0f, e.Bounds.Y + (e.Bounds.Height - fiSize.Height) / 2); + } + else + { + if (e.Selected() && e.Node.SelectedImageIndex >= 0 && e.Node.SelectedImageIndex < ImageList.Images.Count) + e.Graphics.DrawImage(ImageList.Images[e.Node.SelectedImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); + else + e.Graphics.DrawImage(ImageList.Images[e.Node.ImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); + } + } + + if (e.Node.Nodes.Count > 0) + { + e.Graphics.DrawFontImage(e.Node.IsExpanded ? 61702 : 61703, 24, ForeColor, Width - (Bar.Visible ? 50 : 30), e.Bounds.Y + (ItemHeight - 24) / 2); + } + + if (ShowTips && MenuHelper.GetTipsText(e.Node).IsValid()) + { + SizeF tipsSize = e.Graphics.MeasureString(MenuHelper.GetTipsText(e.Node), TipsFont); + float sfMax = Math.Max(tipsSize.Width, tipsSize.Height) + 1; + float tipsLeft = Width - (ScrollBarVisible ? 50 : 30) - 6 - sfMax; + float tipsTop = e.Bounds.Y + (ItemHeight - sfMax) / 2; + + e.Graphics.FillEllipse(Brushes.Red, tipsLeft, tipsTop, sfMax, sfMax); + e.Graphics.DrawString(MenuHelper.GetTipsText(e.Node), TipsFont, Brushes.White, tipsLeft + sfMax / 2.0f - tipsSize.Width / 2.0f, tipsTop + sfMax / 2.0f - tipsSize.Height / 2.0f); + } + } + } + + [Description("展开节点后选中第一个子节点"), DefaultValue(true)] + public bool ExpandSelectFirst { get; set; } = true; + + public string Version { get; } + + protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) + { + base.OnNodeMouseClick(e); + + if (e.Node != null && e.Node.Nodes.Count > 0) + { + if (e.Node.IsExpanded) + { + e.Node.Collapse(); + } + else + { + e.Node.Expand(); + } + + if (SelectedNode != null && SelectedNode == e.Node && e.Node.IsExpanded && ExpandSelectFirst && e.Node.Nodes.Count > 0) + { + SelectedNode = e.Node.Nodes[0]; + } + else + { + SelectedNode = e.Node; + } + } + else + { + SelectedNode = e.Node; + } + + ShowSelectedNode(); + } + + public void SelectFirst() + { + if (Nodes.Count > 0) + { + if (Nodes[0].Nodes.Count > 0 && ExpandSelectFirst) + { + Nodes[0].Expand(); + SelectedNode = Nodes[0].Nodes[0]; + } + else + { + SelectedNode = Nodes[0]; + } + + Nodes[0].EnsureVisible(); + } + + ShowSelectedNode(); + } + + public void SelectPage(int pageIndex) + { + AllNodes.Clear(); + GetAllNodes(Nodes); + if (AllNodes.ContainsKey(pageIndex)) + { + SelectedNode = AllNodes[pageIndex]; + ShowSelectedNode(); + } + } + + private readonly ConcurrentDictionary AllNodes = new ConcurrentDictionary(); + + private void GetAllNodes(TreeNodeCollection nodes) + { + foreach (TreeNode node in nodes) + { + if (MenuHelper.GetPageIndex(node) >= 0) + { + AllNodes.AddOrUpdate(MenuHelper.GetPageIndex(node), node); + } + + GetAllNodes(node.Nodes); + } + } + + private void ShowSelectedNode() + { + int index = MenuHelper.GetPageIndex(SelectedNode); + TabControl?.SelectPage(index); + MenuItemClick?.Invoke(SelectedNode, MenuHelper[SelectedNode], index); + } + + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + + if (e.Delta > 10) + { + ScrollBarInfo.ScrollUp(Handle); + } + else if (e.Delta < -10) + { + ScrollBarInfo.ScrollDown(Handle); + } + + SetScrollInfo(); + } + + public void SetScrollInfo() + { + if (Nodes.Count == 0) + { + Bar.Visible = false; + return; + } + + var si = ScrollBarInfo.GetInfo(Handle); + Bar.Maximum = si.ScrollMax; + Bar.Visible = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0; + Bar.Value = si.nPos; + Bar.BringToFront(); + + if (ScrollBarVisible != Bar.Visible) + { + ScrollBarVisible = Bar.Visible; + Invalidate(); + } + } + + protected override void OnAfterSelect(TreeViewEventArgs e) + { + base.OnAfterSelect(e); + + if (e.Node != null && ExpandSelectFirst && e.Node.Nodes.Count > 0) + { + e.Node.Expand(); + SelectedNode = e.Node.Nodes[0]; + } + else + { + SelectedNode = e.Node; + } + } + + protected override void OnAfterExpand(TreeViewEventArgs e) + { + base.OnAfterExpand(e); + SetScrollInfo(); + } + + protected override void OnAfterCollapse(TreeViewEventArgs e) + { + base.OnAfterCollapse(e); + SetScrollInfo(); + } + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + //隐藏滚动条 + ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both + } + } + + public static class TreeViewHelper + { + public static bool Selected(this DrawTreeNodeEventArgs e) + { + return e.State == TreeNodeStates.Selected || e.State == TreeNodeStates.Focused || + e.State == (TreeNodeStates.Focused | TreeNodeStates.Selected); + } + + public static TreeNode CreateNode(this UINavMenu navMenu, string text, int pageIndex) + { + return navMenu.CreateNode(new NavMenuItem(text, pageIndex)); + } + + public static TreeNode CreateNode(this UINavMenu navMenu, UIPage page) + { + return navMenu.CreateNode(new NavMenuItem(page.Text, page.PageIndex)); + } + + public static TreeNode CreateNode(this UINavMenu navMenu, NavMenuItem item) + { + TreeNode node = new TreeNode(item.Text); + navMenu.Nodes.Add(node); + navMenu.SetNodeItem(node, item); + return node; + } + + public static TreeNode CreateNode(this UINavBar navBar, string text, int pageIndex) + { + return navBar.CreateNode(new NavMenuItem(text, pageIndex)); + } + + public static TreeNode CreateNode(this UINavBar navBar, UIPage page) + { + return navBar.CreateNode(new NavMenuItem(page.Text, page.PageIndex)); + } + + public static TreeNode CreateNode(this UINavBar navBar, NavMenuItem item) + { + TreeNode node = new TreeNode(item.Text); + navBar.Nodes.Add(node); + navBar.SetNodeItem(node, item); + return node; + } + + public static TreeNode CreateChildNode(this UINavMenu navMenu, TreeNode parent, string text, int pageIndex) + { + return navMenu.CreateChildNode(parent, new NavMenuItem(text, pageIndex)); + } + + public static TreeNode CreateChildNode(this UINavMenu navMenu, TreeNode parent, UIPage page) + { + return navMenu.CreateChildNode(parent, new NavMenuItem(page.Text, page.PageIndex)); + } + + public static TreeNode CreateChildNode(this UINavMenu navMenu, TreeNode parent, NavMenuItem item) + { + TreeNode childNode = new TreeNode(item.Text); + parent.Nodes.Add(childNode); + navMenu.SetNodeItem(childNode, item); + return childNode; + } + + public static TreeNode CreateChildNode(this UINavBar navBar, TreeNode parent, string text, int pageIndex) + { + return navBar.CreateChildNode(parent, new NavMenuItem(text, pageIndex)); + } + + public static TreeNode CreateChildNode(this UINavBar navBar, TreeNode parent, UIPage page) + { + return navBar.CreateChildNode(parent, new NavMenuItem(page.Text, page.PageIndex)); + } + + public static TreeNode CreateChildNode(this UINavBar navBar, TreeNode parent, NavMenuItem item) + { + TreeNode childNode = new TreeNode(item.Text); + parent.Nodes.Add(childNode); + navBar.SetNodeItem(childNode, item); + return childNode; + } + } + + public class NavMenuHelper + { + public NavMenuItem this[TreeNode node] + { + get + { + if (node == null) return null; + + if (Items.ContainsKey(node)) + return Items[node]; + else + return null; + } + } + + private readonly ConcurrentDictionary Items = new ConcurrentDictionary(); + + public string GetTipsText(TreeNode node) + { + return this[node] == null ? string.Empty : Items[node].TipsText; + } + + public int GetSymbol(TreeNode node) + { + return this[node] == null ? 0 : Items[node].Symbol; + } + + public int GetSymbolSize(TreeNode node) + { + return this[node] == null ? 0 : Items[node].SymbolSize; + } + + public int GetPageIndex(TreeNode node) + { + return this[node] == null ? -1 : Items[node].PageIndex; + } + + public object GetTag(TreeNode node) + { + return this[node] == null ? null : Items[node].Tag; + } + + public void SetTipsText(TreeNode node, string tips) + { + if (node == null) return; + + CreateIfNotExist(node); + Items[node].TipsText = tips; + node.TreeView.Invalidate(); + } + + public void SetPageIndex(TreeNode node, int index) + { + if (node == null) return; + + CreateIfNotExist(node); + Items[node].PageIndex = index; + } + + public void SetSymbol(TreeNode node, int symbol, int symbolSize = 32) + { + if (node == null) return; + + CreateIfNotExist(node); + Items[node].Symbol = symbol; + Items[node].SymbolSize = symbolSize; + node.TreeView.Invalidate(); + } + + private void CreateIfNotExist(TreeNode node) + { + if (node == null) return; + + if (!Items.ContainsKey(node)) + { + NavMenuItem menuItem = new NavMenuItem(); + Items.TryAdd(node, menuItem); + } + } + + public void Add(TreeNode node, NavMenuItem item) + { + if (node == null || item == null) return; + + if (this[node] == null) + { + Items.TryAdd(node, item); + } + else + { + Items[node] = item; + } + + node.ImageIndex = item.ImageIndex; + node.SelectedImageIndex = item.SelectedImageIndex; + node.Tag = item; + } + } + + public class NavMenuItem + { + public string Text { get; set; } + + public int ImageIndex { get; set; } = -1; + + public int SelectedImageIndex { get; set; } = -1; + + public int Symbol { get; set; } + + public int SymbolSize { get; set; } = 24; + + public int PageIndex { get; set; } + + public string TipsText { get; set; } + + public bool Enabled { get; set; } = true; + + public object Tag { get; set; } + + public NavMenuItem() + { + } + + public NavMenuItem(UIPage page) + { + Text = page.Text; + PageIndex = page.PageIndex; + } + + public NavMenuItem(string text, int pageIndex) + { + PageIndex = pageIndex; + Text = text; + } + + public NavMenuItem(int pageIndex) + { + PageIndex = pageIndex; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIPanel.Designer.cs b/SunnyUI/Controls/UIPanel.Designer.cs new file mode 100644 index 00000000..81beb7be --- /dev/null +++ b/SunnyUI/Controls/UIPanel.Designer.cs @@ -0,0 +1,44 @@ +namespace Sunny.UI +{ + partial class UIPanel + { + /// + /// 必需的设计器变量。 + /// + 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() + { + SuspendLayout(); + // + // UIControlBase + // + Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + Name = "UIPanel"; + Size = new System.Drawing.Size(270, 180); + ResumeLayout(false); + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UIPanel.cs b/SunnyUI/Controls/UIPanel.cs new file mode 100644 index 00000000..6d904c0f --- /dev/null +++ b/SunnyUI/Controls/UIPanel.cs @@ -0,0 +1,560 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIPanel.cs + * 文件说明: 面板 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +// ReSharper disable All +#pragma warning disable 1591 + +namespace Sunny.UI +{ + [Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(System.ComponentModel.Design.IDesigner))] + [DefaultEvent("Click"), DefaultProperty("Text")] + public partial class UIPanel : UserControl, IStyleInterface + { + private int radius = 5; + protected Color rectColor = UIStyles.Blue.RectColor; + protected Color fillColor = UIStyles.Blue.PlainColor; + protected Color foreColor = UIStyles.Blue.PanelForeColor; + + public UIPanel() + { + InitializeComponent(); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + SetStyle(ControlStyles.DoubleBuffer, true); + SetStyle(ControlStyles.ResizeRedraw, true); + SetStyle(ControlStyles.Selectable, true); + SetStyle(ControlStyles.SupportsTransparentBackColor, true); + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.OptimizedDoubleBuffer, true); + base.DoubleBuffered = true; + UpdateStyles(); + + Version = UIGlobal.Version; + base.Font = UIFontColor.Font; + } + + [DefaultValue(null)] + public string TagString { get; set; } + + private string text; + + [Category("外观")] + [Description("按钮文字")] + [Browsable(true)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [DefaultValue("")] + public override string Text + { + get + { + return text; + } + set + { + if (text != value) + { + text = value; + Invalidate(); + } + } + } + + protected bool IsDesignMode + { + get + { + if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) + { + return true; + } + else if (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv") + { + return true; + } + + return false; + } + } + + private ToolStripStatusLabelBorderSides _rectSides = ToolStripStatusLabelBorderSides.All; + + [DefaultValue(ToolStripStatusLabelBorderSides.All), Description("边框显示位置")] + public ToolStripStatusLabelBorderSides RectSides + { + get => _rectSides; + set + { + _rectSides = value; + OnRectSidesChange(); + Invalidate(); + } + } + + protected virtual void OnRadiusSidesChange() + { + } + + protected virtual void OnRectSidesChange() + { + } + + private UICornerRadiusSides _radiusSides = UICornerRadiusSides.All; + + [DefaultValue(UICornerRadiusSides.All), Description("圆角显示位置")] + public UICornerRadiusSides RadiusSides + { + get => _radiusSides; + set + { + _radiusSides = value; + OnRadiusSidesChange(); + Invalidate(); + } + } + + /// + /// 是否显示圆角 + /// + [Description("是否显示圆角"), Category("自定义")] + protected bool ShowRadius => (int)RadiusSides > 0; + + //圆角角度 + [Description("圆角角度"), Category("自定义")] + [DefaultValue(5)] + public int Radius + { + get + { + return radius; + } + set + { + if (radius != value) + { + radius = Math.Max(0, value); + OnRadiusChanged(radius); + Invalidate(); + } + } + } + + /// + /// 是否显示边框 + /// + [Description("是否显示边框"), Category("自定义")] + [DefaultValue(true)] + protected bool ShowRect => (int)RectSides > 0; + + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color RectColor + { + get + { + return rectColor; + } + set + { + if (rectColor != value) + { + rectColor = value; + AfterSetRectColor(value); + RectColorChanged?.Invoke(this, null); + _style = UIStyle.Custom; + Invalidate(); + } + } + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色,当值为背景色或透明色或空值则不填充"), Category("自定义")] + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color FillColor + { + get + { + return fillColor; + } + set + { + if (fillColor != value) + { + fillColor = value; + AfterSetFillColor(value); + FillColorChanged?.Invoke(this, null); + _style = UIStyle.Custom; + Invalidate(); + } + } + } + + protected void SetFillDisableColor(Color color) + { + fillDisableColor = color; + _style = UIStyle.Custom; + } + + protected void SetRectDisableColor(Color color) + { + rectDisableColor = color; + _style = UIStyle.Custom; + } + + protected void SetForeDisableColor(Color color) + { + foreDisableColor = color; + _style = UIStyle.Custom; + } + + private bool showText = true; + + [Description("是否显示文字")] + [Browsable(false)] + protected bool ShowText + { + get => showText; + set + { + if (showText != value) + { + showText = value; + Invalidate(); + } + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + if (!Visible || Width <= 0 || Height <= 0) return; + + Rectangle rect = new Rectangle(0, 0, Width - 1, Height - 1); + GraphicsPath path = GDIEx.CreateRoundedRectanglePath(rect, radius, RadiusSides); + + //填充背景色 + if (fillColor.IsValid()) + { + OnPaintFill(e.Graphics, path); + } + + //填充边框色 + if (ShowRect) + { + OnPaintRect(e.Graphics, path); + } + + //填充文字 + if (ShowText) + { + OnPaintFore(e.Graphics, path); + } + + PaintOther?.Invoke(this, e); + + path.Dispose(); + } + + public event PaintEventHandler PaintOther; + + protected virtual void OnPaintFore(Graphics g, GraphicsPath path) + { + g.DrawString(Text, Font, Enabled ? foreColor : foreDisableColor, Size, Padding, TextAlignment); + } + + protected virtual void OnPaintRect(Graphics g, GraphicsPath path) + { + Color color = GetRectColor(); + + //IsRadius为False时,显示左侧边线 + bool ShowRectLeft = RectSides.GetValue(ToolStripStatusLabelBorderSides.Left); + //IsRadius为False时,显示上侧边线 + bool ShowRectTop = RectSides.GetValue(ToolStripStatusLabelBorderSides.Top); + //IsRadius为False时,显示右侧边线 + bool ShowRectRight = RectSides.GetValue(ToolStripStatusLabelBorderSides.Right); + //IsRadius为False时,显示下侧边线 + bool ShowRectBottom = RectSides.GetValue(ToolStripStatusLabelBorderSides.Bottom); + + //IsRadius为True时,显示左上圆角 + bool RadiusLeftTop = RadiusSides.GetValue(UICornerRadiusSides.LeftTop); + //IsRadius为True时,显示左下圆角 + bool RadiusLeftBottom = RadiusSides.GetValue(UICornerRadiusSides.LeftBottom); + //IsRadius为True时,显示右上圆角 + bool RadiusRightTop = RadiusSides.GetValue(UICornerRadiusSides.RightTop); + //IsRadius为True时,显示右下圆角 + bool RadiusRightBottom = RadiusSides.GetValue(UICornerRadiusSides.RightBottom); + + if (RadiusSides == UICornerRadiusSides.None) + g.DrawRectangle(new Pen(color), 0, 0, Width - 1, Height - 1); + else + g.DrawPath(color, path); + + using (Pen pen = new Pen(fillColor)) + using (Pen penR = new Pen(rectColor)) + { + if (!ShowRadius || (ShowRadius && !RadiusLeftBottom && !RadiusLeftTop)) + { + g.DrawLine(penR, 0, 0, 0, Height - 1); + } + + if (!ShowRadius || (ShowRadius && !RadiusRightTop && !RadiusLeftTop)) + { + g.DrawLine(penR, 0, 0, Width - 1, 0); + } + + if (!ShowRadius || (ShowRadius && !RadiusRightTop && !RadiusRightBottom)) + { + g.DrawLine(penR, Width - 1, 0, Width - 1, Height - 1); + } + + if (!ShowRectLeft) + { + if (!ShowRadius || (ShowRadius && !RadiusLeftBottom && !RadiusLeftTop)) + { + g.DrawLine(pen, 0, 1, 0, Height - 2); + } + } + + if (!ShowRadius || (ShowRadius && !RadiusLeftBottom && !RadiusRightBottom)) + { + g.DrawLine(penR, 0, Height - 1, Width - 1, Height - 1); + } + + if (!ShowRectTop) + { + if (!ShowRadius || (ShowRadius && !RadiusRightTop && !RadiusLeftTop)) + { + g.DrawLine(pen, 1, 0, Width - 2, 0); + } + } + + if (!ShowRectRight) + { + if (!ShowRadius || (ShowRadius && !RadiusRightTop && !RadiusRightBottom)) + { + g.DrawLine(pen, Width - 1, 1, Width - 1, Height - 2); + } + } + + if (!ShowRectBottom) + { + if (!ShowRadius || (ShowRadius && !RadiusLeftBottom && !RadiusRightBottom)) + { + g.DrawLine(pen, 1, Height - 1, Width - 2, Height - 1); + } + } + + if (!ShowRectLeft && !ShowRectTop) + { + if (!ShowRadius || (ShowRadius && !RadiusLeftBottom && !RadiusLeftTop)) + g.DrawLine(pen, 0, 0, 0, 1); + } + + if (!ShowRectRight && !ShowRectTop) + { + if (!ShowRadius || (ShowRadius && !RadiusLeftBottom && !RadiusLeftTop)) + g.DrawLine(pen, Width - 1, 0, Width - 1, 1); + } + + if (!ShowRectLeft && !ShowRectBottom) + { + if (!ShowRadius || (ShowRadius && !RadiusLeftBottom && !RadiusLeftTop)) + g.DrawLine(pen, 0, Height - 1, 0, Height - 2); + } + + if (!ShowRectRight && !ShowRectBottom) + { + if (!ShowRadius || (ShowRadius && !RadiusLeftBottom && !RadiusLeftTop)) + g.DrawLine(pen, Width - 1, Height - 1, Width - 1, Height - 2); + } + } + } + + protected virtual void OnPaintFill(Graphics g, GraphicsPath path) + { + Color color = GetFillColor(); + + if (RadiusSides == UICornerRadiusSides.None) + g.Clear(color); + else + g.FillPath(color, path); + } + + protected override void WndProc(ref Message m) + { + if (m.Msg != 20) + { + base.WndProc(ref m); + } + } + + protected virtual void AfterSetFillColor(Color color) + { + } + + protected virtual void AfterSetRectColor(Color color) + { + } + + protected virtual void AfterSetForeColor(Color color) + { + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + protected UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + public void SetStyle(UIStyle style) + { + UIGlobal.SetChildUIStyle(this, style); + + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public virtual void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + fillColor = uiColor.PlainColor; + rectColor = uiColor.RectColor; + foreColor = uiColor.PanelForeColor; + + fillDisableColor = uiColor.FillDisableColor; + rectDisableColor = uiColor.RectDisableColor; + foreDisableColor = uiColor.ForeDisableColor; + Invalidate(); + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set + { + foreColor = value; + AfterSetForeColor(value); + _style = UIStyle.Custom; + Invalidate(); + } + } + + [DefaultValue(typeof(Color), "244, 244, 244")] + public Color FillDisableColor + { + get => fillDisableColor; + set => SetFillDisableColor(value); + } + + [DefaultValue(typeof(Color), "173, 178, 181")] + public Color RectDisableColor + { + get => rectDisableColor; + set => SetRectDisableColor(value); + } + + [DefaultValue(typeof(Color), "109, 109, 103")] + public Color ForeDisableColor + { + get => foreDisableColor; + set => SetForeDisableColor(value); + } + + protected virtual void OnRadiusChanged(int value) + { + } + + protected Color foreDisableColor = Color.FromArgb(109, 109, 103); + protected Color rectDisableColor = Color.FromArgb(173, 178, 181); + protected Color fillDisableColor = Color.FromArgb(244, 244, 244); + + protected Color GetRectColor() + { + return Enabled ? rectColor : rectDisableColor; + } + + protected Color GetForeColor() + { + return Enabled ? foreColor : foreDisableColor; + } + + protected Color GetFillColor() + { + return Enabled ? fillColor : fillDisableColor; + } + + /// + /// 屏蔽原属性,获取或设置一个值,该值指示是否在 Windows 任务栏中显示窗体。 + /// + /// true if [show in taskbar]; otherwise, false. + [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("禁用该属性!", true)] + public new BorderStyle BorderStyle => BorderStyle.None; + + public event EventHandler FillColorChanged; + + public event EventHandler RectColorChanged; + + public string Version { get; } + + private ContentAlignment _textAlignment = ContentAlignment.MiddleCenter; + + /// + /// 文字对齐方向 + /// + [Description("文字对齐方向")] + [DefaultValue(ContentAlignment.MiddleCenter)] + public ContentAlignment TextAlignment + { + get => _textAlignment; + set + { + if (_textAlignment != value) + { + _textAlignment = value; + Invalidate(); + } + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIProcessBar.cs b/SunnyUI/Controls/UIProcessBar.cs new file mode 100644 index 00000000..67afb1fc --- /dev/null +++ b/SunnyUI/Controls/UIProcessBar.cs @@ -0,0 +1,199 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIProcessBar.cs + * 文件说明: 进度条 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-19: V2.2 增加数值变化事件 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [ToolboxItem(true)] + [DefaultEvent("ValueChanged")] + [DefaultProperty("Value")] + public sealed class UIProcessBar : UIControl + { + private int maximum = 100; + + public delegate void OnValueChanged(object sender, int value); + + public event OnValueChanged ValueChanged; + + public UIProcessBar() + { + MinimumSize = new Size(70, 23); + Size = new Size(300, 29); + ShowText = false; + + fillColor = UIColor.LightBlue; + foreColor = UIColor.Blue; + } + + [DefaultValue(100)] + public int Maximum + { + get => maximum; + set + { + maximum = value; + Invalidate(); + } + } + + private int posValue; + + [DefaultValue(0)] + public int Value + { + get => posValue; + set + { + posValue = Math.Max(value, 0); + posValue = Math.Min(posValue, maximum); + processWidth = (int)(posValue * Width * 1.0 / Maximum); + processText = (posValue * 100.0 / maximum).ToString("F1") + "%"; + ValueChanged?.Invoke(this, posValue); + Invalidate(); + } + } + + private int processWidth; + + private string processText = "0.0%"; + + private bool showValue = true; + + [DefaultValue(true)] + public bool ShowValue + { + get => showValue; + set + { + showValue = value; + Invalidate(); + } + } + + [DefaultValue(1)] + public int Step { get; set; } = 1; + + public void StepIt() + { + Value = Math.Min(Value + Step, Maximum); + } + + private Bitmap image; + private int imageRadius; + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + if (ShowValue) + { + e.Graphics.DrawString(processText, Font, foreColor, Size, Padding, TextAlign); + } + + if (image == null || image.Width != Width + 2 || image.Height != Height + 2 || imageRadius != Radius) + { + image?.Dispose(); + image = new Bitmap(Width + 2, Height + 2); + imageRadius = Radius; + } + + Graphics g = image.Graphics(); + g.Clear(Color.Transparent); + Rectangle rect = new Rectangle(0, 0, Width - 1, Height - 1); + + g.SetHighQuality(); + g.FillRoundRectangle(rectColor, rect, Radius); + g.DrawRoundRectangle(rectColor, rect, Radius); + if (ShowValue) + { + g.DrawString(processText, Font, fillColor, Size, Padding, TextAlign); + } + + g.Dispose(); + + rect = new Rectangle(0, 0, processWidth, image.Height - 1); + GraphicsPath path = rect.CreateRoundedRectanglePath(0, UICornerRadiusSides.None); + using (Bitmap img = image.Split(path)) + { + e.Graphics.DrawImage(img, 0, 0); + } + } + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + image?.Dispose(); + image = null; + processWidth = (int)(posValue * Width * 1.0 / Maximum); + Text = (posValue * 100.0 / maximum).ToString("F1") + "%"; + Invalidate(); + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + fillColor = uiColor.ProcessBarFillColor; + foreColor = uiColor.ProcessBarForeColor; + Invalidate(); + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color FillColor + { + get => fillColor; + set => SetFillColor(value); + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color RectColor + { + get => rectColor; + set => SetRectColor(value); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIProgressIndicator.cs b/SunnyUI/Controls/UIProgressIndicator.cs new file mode 100644 index 00000000..c390c852 --- /dev/null +++ b/SunnyUI/Controls/UIProgressIndicator.cs @@ -0,0 +1,150 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIProgressIndicator.cs + * 文件说明: 进度指示器 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [ToolboxItem(true)] + public sealed class UIProgressIndicator : UIControl + { + private readonly Timer timer = new Timer(); + + public UIProgressIndicator() + { + Width = Height = 100; + + timer.Interval = 200; + timer.Tick += timer_Tick; + timer.Start(); + + ShowText = false; + ShowRect = false; + + foreColor = UIColor.Blue; + } + + ~UIProgressIndicator() + { + timer.Stop(); + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + foreColor = uiColor.ProgressIndicatorColor; + ClearImage(); + Invalidate(); + } + + private int Index; + + private Image image; + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + int circleSize = Math.Min(Width, Height).Div(6); + + if (image == null) + { + image = new Bitmap(Width, Height); + Graphics ig = image.Graphics(); + for (int i = 0; i < 8; i++) + { + Point pt = GetPoint(i, circleSize); + ig.FillEllipse(Color.FromArgb(192, foreColor), pt.X, pt.Y, circleSize, circleSize); + } + + ig.Dispose(); + } + + g.DrawImage(image, 0, 0); + + int idx = Index.Mod(8); + g.FillEllipse(foreColor, GetPoint(idx, circleSize).X, GetPoint(idx, circleSize).Y, circleSize, circleSize); + + idx = (Index + 8 - 1).Mod(8); + g.FillEllipse(Color.FromArgb(224, foreColor), GetPoint(idx, circleSize).X, GetPoint(idx, circleSize).Y, circleSize, circleSize); + } + + private Point GetPoint(int index, int circleSize) + { + int len = Math.Min(Width, Height) / 2 - 2 - circleSize; + int lenX = (int)(len * 0.707); + int centerX = Width / 2 - circleSize / 2; + int centerY = Height / 2 - circleSize / 2; + + switch (index) + { + case 0: return new Point(centerX, centerY - len); + case 1: return new Point(centerX + lenX, centerY - lenX); + case 2: return new Point(centerX + len, centerY); + case 3: return new Point(centerX + lenX, centerY + lenX); + case 4: return new Point(centerX, centerY + len); + case 5: return new Point(centerX - lenX, centerY + lenX); + case 6: return new Point(centerX - len, centerY); + case 7: return new Point(centerX - lenX, centerY - lenX); + } + + return new Point(centerX, centerY); + } + + private void timer_Tick(object sender, EventArgs e) + { + Invalidate(); + Index++; + } + + private void ClearImage() + { + if (image != null) + { + image.Dispose(); + image = null; + } + } + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + ClearImage(); + Invalidate(); + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIRadioButton.cs b/SunnyUI/Controls/UIRadioButton.cs new file mode 100644 index 00000000..1a5660fe --- /dev/null +++ b/SunnyUI/Controls/UIRadioButton.cs @@ -0,0 +1,208 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIRadioButton.cs + * 文件说明: 单选框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-16: V2.2.1 增加ReadOnly属性 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("ValueChanged")] + [DefaultProperty("Text")] + [ToolboxItem(true)] + public sealed class UIRadioButton : UIControl + { + public delegate void OnValueChanged(object sender, bool value); + + public event OnValueChanged ValueChanged; + + public UIRadioButton() + { + Cursor = Cursors.Hand; + ShowRect = false; + Size = new Size(150, 29); + foreColor = UIStyles.Blue.CheckBoxForeColor; + fillColor = UIStyles.Blue.CheckBoxColor; + } + + [DefaultValue(false)] + public bool ReadOnly { get; set; } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + private int _imageSize = 16; + private int _imageInterval = 3; + + [DefaultValue(16)] + public int ImageSize + { + get => _imageSize; + set + { + _imageSize = Math.Max(value, 16); + _imageSize = Math.Min(value, 64); + Invalidate(); + } + } + + [DefaultValue(3)] + public int ImageInterval + { + get => _imageInterval; + set + { + _imageInterval = Math.Max(1, value); + Invalidate(); + } + } + + private bool _checked; + + [DefaultValue(false)] + public bool Checked + { + get => _checked; + set + { + _checked = value; + + if (value) + { + try + { + if (Parent == null) return; + List buttons = Parent.GetControls(); + foreach (var box in buttons) + { + if (box == this) continue; + if (box.GroupIndex != GroupIndex) continue; + if (box.Checked) box.Checked = false; + } + } + catch (Exception ex) + { + Console.WriteLine(@"UIRadioBox click error." + ex.Message); + } + } + + ValueChanged?.Invoke(this, _checked); + Invalidate(); + } + } + + protected override void OnPaintFore(Graphics g, GraphicsPath path) + { + //设置按钮标题位置 + Padding = new Padding(_imageSize + _imageInterval * 2, Padding.Top, Padding.Right, Padding.Bottom); + + //填充文字 + Color color = ForeColor; + color = Enabled ? color : UIDisableColor.Fore; + + g.DrawString(Text, Font, color, Size, Padding, ContentAlignment.MiddleLeft); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + //图标 + float top = Padding.Top - 1 + (Height - Padding.Top - Padding.Bottom - ImageSize) / 2.0f; + float left = Text.IsValid() ? ImageInterval : (Width - ImageSize) / 2.0f; + + Color color = Enabled ? fillColor : foreDisableColor; + if (Checked) + { + g.FillEllipse(color, left, top, ImageSize, ImageSize); + float pointSize = ImageSize - 4; + g.FillEllipse(BackColor.IsValid() ? BackColor : Color.White, + left + ImageSize / 2.0f - pointSize / 2.0f, + top + ImageSize / 2.0f - pointSize / 2.0f, + pointSize, pointSize); + + pointSize = ImageSize - 8; + g.FillEllipse(color, + left + ImageSize / 2.0f - pointSize / 2.0f, + top + ImageSize / 2.0f - pointSize / 2.0f, + pointSize, pointSize); + } + else + { + using (Pen pn = new Pen(color, 2)) + { + g.SetHighQuality(); + g.DrawEllipse(pn, left + 1, top + 1, ImageSize - 2, ImageSize - 2); + g.SetDefaultQuality(); + } + } + } + + protected override void OnEnabledChanged(EventArgs e) + { + base.OnEnabledChanged(e); + Invalidate(); + } + + protected override void OnClick(EventArgs e) + { + if (!ReadOnly) + { + Checked = true; + } + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + fillColor = uiColor.CheckBoxColor; + foreColor = uiColor.CheckBoxForeColor; + Invalidate(); + } + + [DefaultValue(0)] + public int GroupIndex { get; set; } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color RadioButtonColor + { + get => fillColor; + set => SetFillColor(value); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIRadioButtonGroup.cs b/SunnyUI/Controls/UIRadioButtonGroup.cs new file mode 100644 index 00000000..131db953 --- /dev/null +++ b/SunnyUI/Controls/UIRadioButtonGroup.cs @@ -0,0 +1,233 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UICheckBoxGroup.cs + * 文件说明: 单选框组 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-04-19: V2.2.3 增加单元 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultProperty("Items")] + [DefaultEvent("ValueChanged")] + public class UIRadioButtonGroup : UIGroupBox + { + public delegate void OnValueChanged(object sender, int index, string text); + + public event OnValueChanged ValueChanged; + + ~UIRadioButtonGroup() + { + listbox?.Dispose(); + ClearButtons(); + } + + private void ClearButtons() + { + foreach (var button in buttons) + { + button.Hide(); + button.Dispose(); + } + + buttons.Clear(); + } + + private void Listbox_DrawItemEx(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e) + { + Invalidate(); + } + + [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 ListBox.ObjectCollection Items => ListBox.Items; + + private ListBoxEx listbox; + + private ListBoxEx ListBox + { + get + { + if (listbox == null) + { + listbox = new ListBoxEx(); + listbox.BeforeDrawItem += Listbox_DrawItemEx; + } + + return listbox; + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + if (Items.Count == 0) return; + if (Items.Count != buttons.Count) + { + ClearButtons(); + + for (int i = 0; i < Items.Count; i++) + { + UIRadioButton button = new UIRadioButton + { + Font = Font, + Parent = this, + Tag = i, + Style = Style + }; + + button.ValueChanged += Button_ValueChanged; + buttons.Add(button); + } + } + + int startX = StartPos.X; + int startY = TitleTop + StartPos.Y; + for (int i = 0; i < Items.Count; i++) + { + buttons[i].Text = Items[i].ToString(); + + int rowIndex = i / ColumnCount; + int columnIndex = i % ColumnCount; + + buttons[i].Left = startX + ItemSize.Width * columnIndex + ColumnInterval * columnIndex; + buttons[i].Top = startY + ItemSize.Height * rowIndex + RowInterval * rowIndex; + buttons[i].Show(); + } + } + + private void Button_ValueChanged(object sender, bool value) + { + UIRadioButton button = (UIRadioButton)sender; + if (value) + { + SelectedIndex = button.Tag.ToString().ToInt(); + } + } + + [Browsable(false)] + [DefaultValue(-1)] + public int SelectedIndex + { + get => ListBox.SelectedIndex; + set + { + if (ListBox.Count == 0) + { + ListBox.SelectedIndex = -1; + return; + } + + if (SelectedIndex != value) + { + if (value >= 0 && value < buttons.Count) + { + ListBox.SelectedIndex = value; + buttons[value].Checked = true; + ValueChanged?.Invoke(this, value, buttons[value].Text); + } + } + } + } + + private readonly List buttons = new List(); + + private int columnCount = 1; + + [DefaultValue(1)] + public int ColumnCount + { + get => columnCount; + set + { + columnCount = value; + Invalidate(); + } + } + + private Size itemSize = new Size(150, 35); + + [DefaultValue(typeof(Size), "150, 35")] + public Size ItemSize + { + get => itemSize; + set + { + itemSize = value; + Invalidate(); + } + } + + private Point startPos = new Point(12, 12); + + [DefaultValue(typeof(Point), "12, 12")] + public Point StartPos + { + get => startPos; + set + { + startPos = value; + Invalidate(); + } + } + + public int columnInterval; + + [DefaultValue(0)] + public int ColumnInterval + { + get => columnInterval; + set + { + columnInterval = value; + Invalidate(); + } + } + + private int rowInterval; + + [DefaultValue(0)] + public int RowInterval + { + get => rowInterval; + set + { + rowInterval = value; + Invalidate(); + } + } + + protected override void OnFontChanged(EventArgs e) + { + base.OnFontChanged(e); + foreach (var button in buttons) + { + button.Font = Font; + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIRoundMeter.cs b/SunnyUI/Controls/UIRoundMeter.cs new file mode 100644 index 00000000..438198dd --- /dev/null +++ b/SunnyUI/Controls/UIRoundMeter.cs @@ -0,0 +1,271 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIRoundMeter.cs + * 文件说明: 圆形图表 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using Sunny.UI.Properties; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// UIRoundMeter + /// + [ToolboxItem(true)] + [DefaultProperty("Angle")] + public sealed class UIRoundMeter : UIControl + { + /// + /// Enum TMeterType + /// + public enum TMeterType + { + /// + /// The custom + /// + Custom, + + /// + /// The GPS + /// + Gps, + + /// + /// The wind + /// + Wind + } + + /// + /// Enum TRunType + /// + public enum TRunType + { + /// + /// The clock wise + /// + ClockWise, + + /// + /// The anti clock wise + /// + AntiClockWise + } + + private double _angle; + private Image _angleImage; + private Image _backImage; + + /// + /// 必需的设计器变量。 + /// + private IContainer components; + + private TMeterType _meterType; + private TRunType _runType; + + /// + /// 构造函数 + /// + public UIRoundMeter() + { + InitializeComponent(); + + MeterType = TMeterType.Gps; + _runType = TRunType.ClockWise; + + Width = 150; + Height = 150; + } + + /// + /// 旋转方式 + /// + [DefaultValue(TRunType.ClockWise)] + public TRunType RunType + { + get => _runType; + set + { + if (_runType == value) + { + return; + } + + _runType = value; + Invalidate(); + } + } + + [DefaultValue(TMeterType.Gps)] + public TMeterType MeterType + { + get => _meterType; + set + { + if (_meterType == value) + { + return; + } + + _meterType = value; + + if (value == TMeterType.Gps) + { + BackgroundImage = Resources.gps1; + AngleImage = Resources.gps_postion; + } + + if (value == TMeterType.Wind) + { + BackgroundImage = Resources.wind; + AngleImage = Resources.wind_postion; + } + + Invalidate(); + } + } + + /// + /// 背景图片 + /// + public new Image BackgroundImage + { + get => _backImage; + set + { + if (value == null) + { + _backImage = null; + Width = 150; + Height = 150; + } + else + { + _backImage = new Bitmap(value); + Width = _backImage.Width; + Height = _backImage.Height; + } + + Invalidate(); + } + } + + /// + /// 箭头图片 + /// + public Image AngleImage + { + get => _angleImage; + set + { + _angleImage = value == null ? null : new Bitmap(value); + Invalidate(); + } + } + + /// + /// 角度 + /// + [DefaultValue(0)] + public double Angle + { + get => _angle; + set + { + if (_angle.EqualsDouble(value)) + { + return; + } + + _angle = value; + Invalidate(); + } + } + + /// + /// BackgroundImageLayout + /// + [Browsable(false)] + public new ImageLayout BackgroundImageLayout { get; set; } + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing) + { + components?.Dispose(); + } + + base.Dispose(disposing); + } + + /// + /// 重绘 + /// + /// e + protected override void OnPaint(PaintEventArgs e) + { + if (_backImage != null) + { + e.Graphics.DrawImage(_backImage, Width / 2.0f - _backImage.Width / 2.0f, Height / 2.0f - _backImage.Height / 2.0f); + } + + if (_angleImage == null) + { + return; + } + + var rawImage = new Bitmap(_angleImage); + if (_runType == TRunType.ClockWise) + { + var bmp = rawImage.Rotate((float)_angle, Color.Transparent); + e.Graphics.DrawImage(bmp, Width / 2.0f - bmp.Width / 2.0f, Height / 2.0f - bmp.Height / 2.0f); + bmp.Dispose(); + } + + if (_runType == TRunType.AntiClockWise) + { + var bmp = rawImage.Rotate((float)(360 - _angle), Color.Transparent); + e.Graphics.DrawImage(bmp, Width / 2.0f - bmp.Width / 2.0f, Height / 2.0f - bmp.Height / 2.0f); + bmp.Dispose(); + } + + rawImage.Dispose(); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + components = new Container(); + } + + #endregion 组件设计器生成的代码 + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UIScrollBar.cs b/SunnyUI/Controls/UIScrollBar.cs new file mode 100644 index 00000000..b26e2d91 --- /dev/null +++ b/SunnyUI/Controls/UIScrollBar.cs @@ -0,0 +1,469 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIScrollBar.cs + * 文件说明: 滚动条 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("ValueChanged")] + [DefaultProperty("Value")] + [ToolboxItem(true)] + public sealed class UIScrollBar : UIControl + { + public UIScrollBar() + { + Maximum = 100; + up_state = value_state = down_state = DrawItemState.None; + timer.Interval = 150; + timer.Tick += TimerTick; + Width = SystemInformation.VerticalScrollBarWidth + 2; + Height = 300; + ShowText = false; + + fillColor = UIColor.LightBlue; + foreColor = UIColor.Blue; + fillHoverColor = Color.FromArgb(111, 168, 255); + fillPressColor = Color.FromArgb(74, 131, 229); + } + + private int scrollValue; + private int SmallChange = 1; + private int LargeChange = 10; + private int maximum; + private DrawItemState up_state, value_state, down_state; + private DrawItemState up_state1, value_state1, down_state1; + private bool dragMove; + private int dragOffset; + private int barHeight; + private double percentValue; + private readonly Timer timer = new Timer(); + private bool isScrollUp = true; + private bool largeChange = true; + + public event EventHandler ValueChanged; + + [DefaultValue(0)] + public int Value + { + get => scrollValue; + set + { + scrollValue = Math.Min(maximum, value); + scrollValue = Math.Max(scrollValue, 0); + Invalidate(); + } + } + + [DefaultValue(100)] + public int Maximum + { + get => maximum; + set + { + maximum = Math.Max(value, 1); + SmallChange = value / 50; + SmallChange = Math.Max(1, SmallChange); + + LargeChange = value / 10; + LargeChange = Math.Max(1, LargeChange); + CalcValueArea(); + Invalidate(); + } + } + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + CalcValueArea(); + } + + private void TimerTick(object sender, EventArgs e) + { + if (isScrollUp) + ScrollUp(largeChange); + else + ScrollDown(largeChange); + } + + private Rectangle GetUpRect() + { + var rect = new Rectangle(1, 1, Width - 2, 16); + return rect; + } + + private void CalcValueArea() + { + var centerHeight = GetValueClipRect().Height; + + barHeight = centerHeight / (maximum + 1); + barHeight = Math.Max(30, barHeight); + percentValue = ((double)centerHeight - barHeight) / maximum; + } + + private Rectangle GetValueRect() + { + return new Rectangle(Width / 2 - 3, ValueToPos(scrollValue), 6, barHeight); + } + + private int ValueToPos(int value) + { + return (int)(value * percentValue) + 17; + } + + private int PosToValue(int pos) + { + var value = (int)((pos - 17) / percentValue); + if (value < 0) + value = 0; + if (value > maximum) + value = maximum; + return value; + } + + private Rectangle GetDownRect() + { + var rect = new Rectangle(1, Height - 17, Width - 2, 16); + return rect; + } + + private Rectangle GetValueClipRect() + { + var clip = new Rectangle(1, 17, Width - 2, Height - 17 * 2); + return clip; + } + + protected override void OnPaint(PaintEventArgs e) + { + e.Graphics.Clear(fillColor); + DrawUpDownArrow(e.Graphics, up_state, GetUpRect(), true); + DrawUpDownArrow(e.Graphics, down_state, GetDownRect(), false); + DrawValueBar(e.Graphics, value_state); + } + + private void DrawValueBar(Graphics g, DrawItemState state) + { + var rect = GetValueRect(); + + Color clr = foreColor; + if ((state & DrawItemState.HotLight) == DrawItemState.HotLight) + { + clr = fillHoverColor; + } + + if ((state & DrawItemState.Selected) == DrawItemState.Selected) + { + clr = fillPressColor; + } + + if (dragMove) + { + rect = new Rectangle(rect.Left, MousePos - barHeight / 2, rect.Width, barHeight); + if (rect.Top < 17) + { + rect = new Rectangle(rect.Left, 17, rect.Width, barHeight); + } + + if (rect.Bottom > Height - 17) + { + rect = new Rectangle(rect.Left, Height - 17 - barHeight, rect.Width, barHeight); + } + } + + g.SetHighQuality(); + g.FillRoundRectangle(clr, rect, 5); + g.SetDefaultQuality(); + } + + private void DrawUpDownArrow(Graphics g, DrawItemState state, Rectangle rect, bool isUp) + { + Color clr_arrow = foreColor; + + if ((state & DrawItemState.HotLight) == DrawItemState.HotLight) + { + clr_arrow = fillHoverColor; + } + + if ((state & DrawItemState.Selected) == DrawItemState.Selected) + { + clr_arrow = fillPressColor; + } + + g.FillRectangle(fillColor, rect); + g.SetHighQuality(); + using (var pen = new Pen(clr_arrow, 2)) + { + Point pt1, pt2, pt3; + if (!isUp) + { + pt1 = new Point(Width / 2 - 4, Height - 16 / 2 - 4); + pt2 = new Point(Width / 2, Height - 16 / 2); + pt3 = new Point(Width / 2 + 4, Height - 16 / 2 - 4); + } + else + { + pt1 = new Point(Width / 2 - 4, 16 / 2 + 4 - 1); + pt2 = new Point(Width / 2, 16 / 2 - 1); + pt3 = new Point(Width / 2 + 4, 16 / 2 + 4 - 1); + } + + g.DrawLines(pen, new[] { pt1, pt2, pt3 }); + } + + g.SetDefaultQuality(); + } + + public void SetValue(int value) + { + if (value < 0) + { + value = 0; + } + + if (value > maximum) + { + value = maximum; + } + + scrollValue = value; + ValueChanged?.Invoke(this, null); + Invalidate(); + } + + public void ScrollUp(bool large) + { + SetValue(scrollValue - (large ? LargeChange : SmallChange)); + } + + public void ScrollDown(bool large) + { + SetValue(scrollValue + (large ? LargeChange : SmallChange)); + } + + private void StartScroll(bool up, bool large) + { + isScrollUp = up; + largeChange = large; + timer.Start(); + } + + private void StopScroll() + { + timer.Stop(); + } + + protected override void OnMouseDown(MouseEventArgs e) + { + if (e.Button != MouseButtons.Left) + { + return; + } + + up_state = value_state = down_state = DrawItemState.None; + IsPress = true; + var hit = HitState(e.X, e.Y); + switch (hit) + { + case 1: + if (Value > 0) + { + up_state = DrawItemState.Selected; + ScrollUp(false); + StartScroll(true, false); + } + break; + + case 2: + value_state = DrawItemState.Selected; + dragMove = true; + dragOffset = GetValueRect().Y - e.Y; + break; + + case 3: + if (Value < Maximum) + { + down_state = DrawItemState.Selected; + ScrollDown(false); + StartScroll(false, false); + } + break; + + case 4: + if (Value > 0) + { + ScrollUp(true); + if (IsPress) + { + StartScroll(true, true); + } + } + break; + + case 5: + if (Value < Maximum) + { + ScrollDown(false); + if (IsPress) + { + StartScroll(false, true); + } + } + break; + } + + if (StateChange()) + { + Invalidate(); + } + } + + protected override void OnMouseUp(MouseEventArgs e) + { + IsPress = false; + dragMove = false; + StopScroll(); + Invalidate(); + } + + private int MousePos; + + protected override void OnMouseMove(MouseEventArgs e) + { + MousePos = e.Y; + var hit = HitState(e.X, e.Y); + up_state = value_state = down_state = DrawItemState.None; + switch (hit) + { + case 1: + up_state = IsPress ? DrawItemState.Selected : DrawItemState.HotLight; + break; + + case 2: + value_state = IsPress ? DrawItemState.Selected : DrawItemState.HotLight; + break; + + case 3: + down_state = IsPress ? DrawItemState.Selected : DrawItemState.HotLight; + break; + } + + if (dragMove) + { + var value = PosToValue(e.Y + dragOffset); + SetValue(value); + return; + } + + if (StateChange()) + { + Invalidate(); + } + } + + protected override void OnMouseLeave(EventArgs e) + { + base.OnMouseLeave(e); + up_state = down_state = value_state = DrawItemState.None; + Invalidate(); + } + + private bool StateChange() + { + var change = up_state != up_state1 || down_state != down_state1 || value_state != value_state1; + up_state1 = up_state; + value_state1 = value_state; + down_state1 = down_state; + return change; + } + + private int HitState(int x, int y) + { + var rect_up = GetUpRect(); + var rect_down = GetDownRect(); + var rect_value = GetValueRect(); + var rect_value_up = new Rectangle(rect_up.Left, rect_up.Bottom, rect_up.Width, rect_value.Top - rect_up.Bottom); + var rect_value_down = new Rectangle(rect_value.Left, rect_value.Bottom, rect_value.Width, rect_down.Top - rect_value.Bottom); + if (rect_up.Contains(x, y)) + return 1; + else if (rect_down.Contains(x, y)) + return 3; + else if (rect_value.Contains(x, y)) + return 2; + else if (rect_value_up.Contains(x, y)) + return 4; + else if (rect_value_down.Contains(x, y)) + return 5; + else + return -1; + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + fillColor = uiColor.PlainColor; + foreColor = uiColor.ScrollBarForeColor; + fillHoverColor = uiColor.ButtonFillHoverColor; + fillPressColor = uiColor.ButtonFillPressColor; + Invalidate(); + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color FillColor + { + get => fillColor; + set => SetFillColor(value); + } + + [DefaultValue(typeof(Color), "111, 168, 255")] + public Color HoverColor + { + get => fillHoverColor; + set => SetFillHoveColor(value); + } + + [DefaultValue(typeof(Color), "74, 131, 229")] + public Color PressColor + { + get => fillPressColor; + set => SetFillPressColor(value); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UISwitch.cs b/SunnyUI/Controls/UISwitch.cs new file mode 100644 index 00000000..47365b0a --- /dev/null +++ b/SunnyUI/Controls/UISwitch.cs @@ -0,0 +1,174 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UISwitch.cs + * 文件说明: 开关 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; + +namespace Sunny.UI +{ + [DefaultEvent("ValueChanged")] + [DefaultProperty("ActiveValue")] + [ToolboxItem(true)] + public sealed class UISwitch : UIControl + { + public delegate void OnValueChanged(object sender, bool value); + + public UISwitch() + { + Height = 29; + Width = 75; + ShowText = false; + ShowRect = false; + foreColor = Color.White; + inActiveColor = Color.Silver; + fillColor = Color.White; + } + + public event OnValueChanged ValueChanged; + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "White")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + private bool activeValue; + + [DefaultValue(false)] + public bool Active + { + get => activeValue; + set + { + activeValue = value; + ValueChanged?.Invoke(this, value); + Invalidate(); + } + } + + private string activeText = "开"; + + [DefaultValue("开")] + public string ActiveText + { + get => activeText; + set + { + activeText = value; + Invalidate(); + } + } + + private string inActiveText = "关"; + + [DefaultValue("关")] + public string InActiveText + { + get => inActiveText; + set + { + inActiveText = value; + Invalidate(); + } + } + + private Color inActiveColor; + + [DefaultValue(typeof(Color), "Silver")] + public Color InActiveColor + { + get => inActiveColor; + set + { + inActiveColor = value; + Invalidate(); + } + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "White")] + public Color ButtonColor + { + get => fillColor; + set => SetFillColor(value); + } + + /// + /// 边框颜色 + /// + [Description("选中颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color ActiveColor + { + get => rectColor; + set => SetRectColor(value); + } + + protected override void OnClick(EventArgs e) + { + base.OnClick(e); + Active = !Active; + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + rectColor = uiColor.SwitchActiveColor; + fillColor = uiColor.SwitchFillColor; + inActiveColor = uiColor.SwitchInActiveColor; + Invalidate(); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + Width = (int)(Height * 2.6); + Rectangle rect = new Rectangle(0, 0, Width - 1, Height - 1); + g.FillRoundRectangle(Active ? ActiveColor : InActiveColor, rect, rect.Height); + + int width = Width - 3 - 1 - 3 - (rect.Height - 6); + if (!Active) + { + g.FillEllipse(fillColor.IsValid() ? fillColor : Color.White, 3, 3, rect.Height - 6, rect.Height - 6); + SizeF sf = g.MeasureString(InActiveText, Font); + g.DrawString(InActiveText, Font, fillColor.IsValid() ? fillColor : Color.White, 3 + rect.Height - 6 + (width - sf.Width) / 2, 3 + (rect.Height - 6 - sf.Height) / 2); + } + else + { + g.FillEllipse(fillColor.IsValid() ? fillColor : Color.White, Width - 3 - 1 - (rect.Height - 6), 3, rect.Height - 6, rect.Height - 6); + SizeF sf = g.MeasureString(ActiveText, Font); + g.DrawString(ActiveText, Font, fillColor.IsValid() ? fillColor : Color.White, 3 + (width - sf.Width) / 2, 3 + (rect.Height - 6 - sf.Height) / 2); + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UISymbolButton.cs b/SunnyUI/Controls/UISymbolButton.cs new file mode 100644 index 00000000..68b5ca05 --- /dev/null +++ b/SunnyUI/Controls/UISymbolButton.cs @@ -0,0 +1,203 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UISymbolButton.cs + * 文件说明: 字体图标按钮 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("Click")] + [DefaultProperty("Text")] + public sealed class UISymbolButton : UIButton + { + private int _symbolSize = 24; + private int _imageInterval = 2; + + [DefaultValue(24)] + public int SymbolSize + { + get => _symbolSize; + set + { + _symbolSize = Math.Max(value, 16); + _symbolSize = Math.Min(value, 64); + Invalidate(); + } + } + + [DefaultValue(2)] + public int ImageInterval + { + get => _imageInterval; + set + { + _imageInterval = Math.Max(0, value); + Invalidate(); + } + } + + private bool _isCircle; + + [DefaultValue(false)] + public bool IsCircle + { + get => _isCircle; + set + { + _isCircle = value; + if (value) + { + Text = ""; + } + else + { + Invalidate(); + } + } + } + + private int _symbol = FontAwesomeIcons.fa_check; + + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + [Editor(typeof(UIImagePropertyEditor), typeof(UITypeEditor))] + [DefaultValue(61452)] + public int Symbol + { + get => _symbol; + set + { + _symbol = value; + Invalidate(); + } + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + if (IsCircle) + { + int size = Math.Min(Width, Height) - 2 - CircleRectWidth; + g.FillEllipse(GetFillColor(), (Width - size) / 2.0f, (Height - size) / 2.0f, size, size); + } + else + { + base.OnPaintFill(g, path); + } + } + + private int circleRectWidth = 1; + + [DefaultValue(1)] + public int CircleRectWidth + { + get => circleRectWidth; + set + { + circleRectWidth = value; + Invalidate(); + } + } + + protected override void OnPaintRect(Graphics g, GraphicsPath path) + { + if (IsCircle) + { + int size = Math.Min(Width, Height) - 2 - CircleRectWidth; + using (Pen pn = new Pen(GetRectColor(), CircleRectWidth)) + { + g.SetHighQuality(); + g.DrawEllipse(pn, (Width - size) / 2.0f, (Height - size) / 2.0f, size, size); + g.SetDefaultQuality(); + } + } + else + { + base.OnPaintRect(g, path); + } + } + + protected override void OnPaintFore(Graphics g, GraphicsPath path) + { + Padding = new Padding(_symbolSize + _imageInterval * 2, Padding.Top, Padding.Right, Padding.Bottom); + //填充文字 + Color color = GetForeColor(); + g.DrawString(Text, Font, color, Size, Padding, TextAlign); + } + + protected override void OnPaint(PaintEventArgs e) + { + //重绘父类 + base.OnPaint(e); + + //字体图标 + Color color = GetForeColor(); + Font font = FontImageHelper.GetFont(Symbol, SymbolSize); + if (font == null) + { + return; + } + + float left = 0; + float top = 0; + SizeF ImageSize = e.Graphics.GetFontImageSize(Symbol, SymbolSize); + SizeF TextSize = e.Graphics.MeasureString(Text, Font); + + if (TextAlign == ContentAlignment.TopCenter || TextAlign == ContentAlignment.TopLeft || TextAlign == ContentAlignment.TopRight) + { + top = Padding.Top; + } + + if (TextAlign == ContentAlignment.MiddleCenter || TextAlign == ContentAlignment.MiddleLeft || TextAlign == ContentAlignment.MiddleRight) + { + top = Padding.Top + (Height - Padding.Top - Padding.Bottom - ImageSize.Height) / 2.0f; + } + + if (TextAlign == ContentAlignment.BottomCenter || TextAlign == ContentAlignment.BottomLeft || TextAlign == ContentAlignment.BottomRight) + { + top = Height - Padding.Bottom - ImageSize.Height; + } + + if (TextAlign == ContentAlignment.TopCenter || TextAlign == ContentAlignment.MiddleCenter || TextAlign == ContentAlignment.BottomCenter) + { + left = Padding.Left + (Width - TextSize.Width - Padding.Left - Padding.Right) / 2.0f; + left = left - ImageInterval - ImageSize.Width; + } + + if (TextAlign == ContentAlignment.TopLeft || TextAlign == ContentAlignment.MiddleLeft || TextAlign == ContentAlignment.BottomLeft) + { + left = ImageInterval; + } + + if (TextAlign == ContentAlignment.TopRight || TextAlign == ContentAlignment.MiddleRight || TextAlign == ContentAlignment.BottomRight) + { + left = Width - Padding.Right - TextSize.Width - ImageInterval - ImageSize.Width; + } + + if (Text.IsNullOrEmpty()) + e.Graphics.DrawString(char.ConvertFromUtf32(Symbol), font, color, ImageInterval + (Width - ImageSize.Width) / 2.0f, (Height - ImageSize.Height) / 2.0f); + else + e.Graphics.DrawString(char.ConvertFromUtf32(Symbol), font, color, left, top); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UITabControl.cs b/SunnyUI/Controls/UITabControl.cs new file mode 100644 index 00000000..9d5b2bc9 --- /dev/null +++ b/SunnyUI/Controls/UITabControl.cs @@ -0,0 +1,402 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UITabControl.cs + * 文件说明: 标签控件 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public sealed class UITabControl : TabControl, IStyleInterface + { + public UITabControl() + { + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer, true); + + ItemSize = new Size(150, 40); + DrawMode = TabDrawMode.OwnerDrawFixed; + Font = UIFontColor.Font; + AfterSetFillColor(FillColor); + Size = new Size(450, 270); + Version = UIGlobal.Version; + } + + public string Version { get; } + + private Color _fillColor = UIColor.LightBlue; + private Color tabBackColor = Color.FromArgb(56, 56, 56); + + [DefaultValue(null)] + public string TagString { get; set; } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + private HorizontalAlignment textAlignment = HorizontalAlignment.Center; + + [DefaultValue(HorizontalAlignment.Center)] + public HorizontalAlignment TextAlignment + { + get => textAlignment; + set + { + textAlignment = value; + Invalidate(); + } + } + + private bool tabVisible = true; + + [DefaultValue(true)] + public bool TabVisible + { + get => tabVisible; + set + { + tabVisible = value; + if (!tabVisible) + { + ItemSize = new Size(0, 1); + } + else + { + if (ItemSize == new Size(0, 1)) + { + ItemSize = new Size(150, 40); + } + } + + Invalidate(); + } + } + + /// + /// 当使用边框时填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("当使用边框时填充颜色,当值为背景色或透明色或空值则不填充"), Category("自定义")] + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color FillColor + { + get => _fillColor; + set + { + _fillColor = value; + AfterSetFillColor(value); + _style = UIStyle.Custom; + Invalidate(); + } + } + + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "56, 56, 56")] + public Color TabBackColor + { + get => tabBackColor; + set + { + tabBackColor = value; + _menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + + private Color tabSelectedColor = Color.FromArgb(36, 36, 36); + + /// + /// 边框颜色 + /// + [Description("选中Tab页背景色"), Category("自定义")] + [DefaultValue(typeof(Color), "36, 36, 36")] + public Color TabSelectedColor + { + get => tabSelectedColor; + set + { + tabSelectedColor = value; + _menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + + private Color tabSelectedForeColor = UIColor.Blue; + + /// + /// 边框颜色 + /// + [Description("选中Tab页字体色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color TabSelectedForeColor + { + get => tabSelectedForeColor; + set + { + tabSelectedForeColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + private Color tabUnSelectedForeColor = Color.Silver; + + /// + /// 边框颜色 + /// + [Description("未选中Tab页字体色"), Category("自定义")] + [DefaultValue(typeof(Color), "Silver")] + public Color TabUnSelectedForeColor + { + get => tabUnSelectedForeColor; + set + { + tabUnSelectedForeColor = value; + _menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + + private Color tabSelectedHighColor = UIColor.Blue; + + /// + /// 边框颜色 + /// + [Description("选中Tab页高亮"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color TabSelectedHighColor + + { + get => tabSelectedHighColor; + set + { + tabSelectedHighColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + public override Rectangle DisplayRectangle + { + get + { + Rectangle rect = base.DisplayRectangle; + if (tabVisible) + { + return new Rectangle(rect.Left - 4, rect.Top - 4, rect.Width + 8, rect.Height + 8); + } + else + { + return new Rectangle(rect.Left - 4, rect.Top - 5, rect.Width + 8, rect.Height + 9); + } + } + } + + private void AfterSetFillColor(Color color) + { + foreach (TabPage page in TabPages) + { + page.BackColor = color; + } + } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + tabSelectedForeColor = tabSelectedHighColor = uiColor.MenuSelectedColor; + _fillColor = uiColor.PlainColor; + Invalidate(); + } + + private UIMenuStyle _menuStyle = UIMenuStyle.Black; + + [DefaultValue(UIMenuStyle.Black)] + public UIMenuStyle MenuStyle + { + get => _menuStyle; + set + { + if (value != UIMenuStyle.Custom) + { + SetMenuStyle(UIStyles.MenuColors[value]); + } + + _menuStyle = value; + } + } + + private void SetMenuStyle(UIMenuColor uiColor) + { + tabBackColor = uiColor.BackColor; + tabSelectedColor = uiColor.SelectedColor; + tabUnSelectedForeColor = uiColor.UnSelectedForeColor; + Invalidate(); + } + + protected override void CreateHandle() + { + base.CreateHandle(); + DoubleBuffered = true; + SizeMode = TabSizeMode.Fixed; + Appearance = TabAppearance.Normal; + Alignment = TabAlignment.Top; + } + + protected override void OnControlAdded(ControlEventArgs e) + { + base.OnControlAdded(e); + if (e.Control is TabPage) + { + e.Control.BackColor = FillColor; + e.Control.Padding = new Padding(0); + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + // 绘制背景色 + e.Graphics.Clear(TabBackColor); + + if (!TabVisible) + { + return; + } + + for (int index = 0; index <= TabCount - 1; index++) + { + Rectangle TabRect = new Rectangle(GetTabRect(index).Location.X - 2, GetTabRect(index).Location.Y - 2, ItemSize.Width, ItemSize.Height); + + Bitmap bmp = new Bitmap(TabRect.Width, TabRect.Height); + Graphics g = Graphics.FromImage(bmp); + + SizeF sf = e.Graphics.MeasureString(TabPages[index].Text, Font); + int textLeft = ImageList?.ImageSize.Width ?? 0; + if (ImageList != null) textLeft += 4 + 4 + 6; + if (TextAlignment == HorizontalAlignment.Right) + textLeft = (int)(TabRect.Width - 4 - sf.Width); + if (TextAlignment == HorizontalAlignment.Center) + textLeft = textLeft + (int)((TabRect.Width - textLeft - sf.Width) / 2.0f); + + // 绘制标题 + g.Clear(TabBackColor); + if (index == SelectedIndex) + { + g.Clear(TabSelectedColor); + g.FillRectangle(TabSelectedHighColor, 0, bmp.Height - 4, bmp.Width, 4); + } + + g.DrawString(TabPages[index].Text, Font, index == SelectedIndex ? tabSelectedForeColor : TabUnSelectedForeColor, textLeft, TabRect.Top + 2 + (TabRect.Height - sf.Height) / 2.0f); + + // 绘制图标 + if (ImageList != null) + { + int imageIndex = TabPages[index].ImageIndex; + if (imageIndex >= 0 && imageIndex < ImageList.Images.Count) + { + g.DrawImage(ImageList.Images[imageIndex], 4 + 6, TabRect.Y + (TabRect.Height - ImageList.ImageSize.Height) / 2.0f, ImageList.ImageSize.Width, ImageList.ImageSize.Height); + } + } + + if (RightToLeftLayout && RightToLeft == RightToLeft.Yes) + { + bmp = bmp.HorizontalFlip(); + } + + e.Graphics.DrawImage(bmp, TabRect.Left, TabRect.Top); + bmp.Dispose(); + } + } + + public enum UITabPosition + { + Left, + Right + } + + [DefaultValue(UITabPosition.Left)] + public UITabPosition TabPosition + { + get => (RightToLeftLayout && RightToLeft == RightToLeft.Yes) + ? UITabPosition.Right + : UITabPosition.Left; + set + { + RightToLeftLayout = value == UITabPosition.Right; + RightToLeft = (value == UITabPosition.Right) ? RightToLeft.Yes : RightToLeft.No; + } + } + + protected override void OnSelectedIndexChanged(EventArgs e) + { + base.OnSelectedIndexChanged(e); + Init(SelectedIndex); + } + + public void Init(int index = 0) + { + if (index < 0 || index >= TabPages.Count) + { + return; + } + + if (SelectedIndex != index) + SelectedIndex = index; + + List pages = TabPages[SelectedIndex].GetControls(); + foreach (var page in pages) + { + page.Init(); + } + + List leftTabControls = TabPages[SelectedIndex].GetControls(); + foreach (var tabControl in leftTabControls) + { + tabControl.Init(); + } + + List topTabControls = TabPages[SelectedIndex].GetControls(); + foreach (var tabControl in topTabControls) + { + tabControl.Init(); + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UITabControlMenu.cs b/SunnyUI/Controls/UITabControlMenu.cs new file mode 100644 index 00000000..8f81ed6e --- /dev/null +++ b/SunnyUI/Controls/UITabControlMenu.cs @@ -0,0 +1,405 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UITabControlMenu.cs + * 文件说明: 标签菜单控件 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public sealed class UITabControlMenu : TabControl, IStyleInterface + { + public UITabControlMenu() + { + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer, true); + + ItemSize = new Size(40, 200); + DrawMode = TabDrawMode.OwnerDrawFixed; + Font = UIFontColor.Font; + AfterSetFillColor(FillColor); + Size = new Size(450, 270); + Version = UIGlobal.Version; + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + [DefaultValue(null)] + public string TagString { get; set; } + + public string Version { get; } + + private HorizontalAlignment textAlignment = HorizontalAlignment.Center; + + public HorizontalAlignment TextAlignment + { + get => textAlignment; + set + { + textAlignment = value; + Invalidate(); + } + } + + private Color _fillColor = UIColor.LightBlue; + private Color tabBackColor = Color.FromArgb(56, 56, 56); + + /// + /// 当使用边框时填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("当使用边框时填充颜色,当值为背景色或透明色或空值则不填充"), Category("自定义")] + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color FillColor + { + get => _fillColor; + set + { + _fillColor = value; + AfterSetFillColor(value); + _style = UIStyle.Custom; + Invalidate(); + } + } + + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "56, 56, 56")] + public Color TabBackColor + { + get => tabBackColor; + set + { + tabBackColor = value; + _menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + + private Color tabSelectedColor = Color.FromArgb(36, 36, 36); + + /// + /// 边框颜色 + /// + [Description("选中Tab页背景色"), Category("自定义")] + [DefaultValue(typeof(Color), "36, 36, 36")] + public Color TabSelectedColor + { + get => tabSelectedColor; + set + { + tabSelectedColor = value; + _menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + + private Color tabSelectedForeColor = UIColor.Blue; + + /// + /// 边框颜色 + /// + [Description("选中Tab页字体色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color TabSelectedForeColor + { + get => tabSelectedForeColor; + set + { + tabSelectedForeColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + private Color tabUnSelectedForeColor = Color.Silver; + + /// + /// 边框颜色 + /// + [Description("未选中Tab页字体色"), Category("自定义")] + [DefaultValue(typeof(Color), "Silver")] + public Color TabUnSelectedForeColor + { + get => tabUnSelectedForeColor; + set + { + tabUnSelectedForeColor = value; + _menuStyle = UIMenuStyle.Custom; + Invalidate(); + } + } + + private Color tabSelectedHighColor = UIColor.Blue; + + /// + /// 边框颜色 + /// + [Description("选中Tab页高亮"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color TabSelectedHighColor + + { + get => tabSelectedHighColor; + set + { + tabSelectedHighColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + public override Rectangle DisplayRectangle + { + get + { + Rectangle rect = base.DisplayRectangle; + return new Rectangle(rect.Left - 3, rect.Top - 4, rect.Width + 7, rect.Height + 8); + } + } + + private void AfterSetFillColor(Color color) + { + foreach (TabPage page in TabPages) + { + page.BackColor = color; + } + } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + tabSelectedForeColor = tabSelectedHighColor = uiColor.MenuSelectedColor; + _fillColor = uiColor.PlainColor; + Invalidate(); + } + + private UIMenuStyle _menuStyle = UIMenuStyle.Black; + + [DefaultValue(UIMenuStyle.Black)] + public UIMenuStyle MenuStyle + { + get => _menuStyle; + set + { + if (value != UIMenuStyle.Custom) + { + SetMenuStyle(UIStyles.MenuColors[value]); + } + + _menuStyle = value; + } + } + + private void SetMenuStyle(UIMenuColor uiColor) + { + TabBackColor = uiColor.BackColor; + TabSelectedColor = uiColor.SelectedColor; + TabUnSelectedForeColor = uiColor.UnSelectedForeColor; + } + + protected override void CreateHandle() + { + base.CreateHandle(); + DoubleBuffered = true; + SizeMode = TabSizeMode.Fixed; + Appearance = TabAppearance.Normal; + Alignment = TabAlignment.Left; + } + + protected override void OnControlAdded(ControlEventArgs e) + { + base.OnControlAdded(e); + if (e.Control is TabPage) + { + e.Control.BackColor = FillColor; + e.Control.Padding = new Padding(0); + } + } + + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + + // 绘制背景色 + e.Graphics.Clear(TabBackColor); + for (int index = 0; index <= TabCount - 1; index++) + { + Rectangle TabRect = new Rectangle(GetTabRect(index).Location.X - 2, GetTabRect(index).Location.Y - 2, ItemSize.Height + 4, ItemSize.Width); + SizeF sf = e.Graphics.MeasureString(TabPages[index].Text, Font); + int textLeft = 4 + 6 + 4 + (ImageList?.ImageSize.Width ?? 0); + if (TextAlignment == HorizontalAlignment.Right) + textLeft = (int)(TabRect.Width - 4 - sf.Width); + if (TextAlignment == HorizontalAlignment.Center) + textLeft = textLeft + (int)((TabRect.Width - textLeft - sf.Width) / 2.0f); + + if (index == SelectedIndex) + { + // 绘制Tab选中背景色 + e.Graphics.FillRectangle(TabSelectedColor, TabRect.X, TabRect.Y, TabRect.Width, TabRect.Height + 4); + + // 绘制Tab选中高亮 + e.Graphics.FillRectangle(TabSelectedHighColor, TabRect.X, TabRect.Y, 4, TabRect.Height + 3); + } + + // 绘制标题 + Color textColor = index == SelectedIndex ? tabSelectedForeColor : TabUnSelectedForeColor; + e.Graphics.DrawString(TabPages[index].Text, Font, textColor, textLeft, TabRect.Top + 2 + (TabRect.Height - sf.Height) / 2.0f); + + // 绘制图标 + if (ImageList != null) + { + int imageIndex = TabPages[index].ImageIndex; + if (imageIndex >= 0 && imageIndex < ImageList.Images.Count) + { + e.Graphics.DrawImage(ImageList.Images[imageIndex], TabRect.X + 4 + 6, TabRect.Y + 2 + (TabRect.Height - ImageList.ImageSize.Height) / 2.0f, ImageList.ImageSize.Width, ImageList.ImageSize.Height); + } + } + } + } + + protected override void OnSelectedIndexChanged(EventArgs e) + { + base.OnSelectedIndexChanged(e); + Init(SelectedIndex); + } + + public void Init(int index = 0) + { + if (index < 0 || index >= TabPages.Count) + { + return; + } + + if (SelectedIndex != index) + SelectedIndex = index; + + List pages = TabPages[SelectedIndex].GetControls(); + foreach (var page in pages) + { + page.Init(); + } + + List leftTabControls = TabPages[SelectedIndex].GetControls(); + foreach (var tabControl in leftTabControls) + { + tabControl.Init(); + } + + List topTabControls = TabPages[SelectedIndex].GetControls(); + foreach (var tabControl in topTabControls) + { + tabControl.Init(); + } + } + } + + public static class UITabControlHelper + { + public static void AddPage(this TabControl tabControl, UIPage page) + { + if (page.PageIndex < 0) return; + TabPage tagPage = tabControl.CreateTabIfNotExists(page.PageIndex); + tagPage.Controls.Add(page); + tagPage.Text = page.Text; + page.Show(); + } + + public static void AddPages(this TabControl tabControl, params UIPage[] pages) + { + foreach (var page in pages) + { + tabControl.AddPage(page); + } + } + + public static void AddPage(this TabControl tabControl, int index, UITabControlMenu page) + { + tabControl.CreateTabIfNotExists(index); + tabControl.TabPages[index].Controls.Add(page); + page.Dock = DockStyle.Fill; + } + + public static void AddPage(this TabControl tabControl, int index, UITabControl page) + { + tabControl.CreateTabIfNotExists(index); + tabControl.TabPages[index].Controls.Add(page); + page.Dock = DockStyle.Fill; + } + + private static TabPage CreateTabIfNotExists(this TabControl tabControl, int index) + { + if (index < 0) return null; + for (int i = 0; i < tabControl.TabPages.Count; i++) + { + if (tabControl.TabPages[i].Tag == null) + { + continue; + } + + if (tabControl.TabPages[i].Tag.ToString() == i.ToString()) + { + return tabControl.TabPages[i]; + } + } + + TabPage page = new TabPage(); + page.SuspendLayout(); + page.Tag = index; + page.Text = "TabPage" + tabControl.TabPages.Count; + tabControl.Controls.Add(page); + page.ResumeLayout(); + return page; + } + + public static void SelectPage(this TabControl tabControl, int pageIndex) + { + if (pageIndex < 0) return; + + for (int i = 0; i < tabControl.TabPages.Count; i++) + { + if (tabControl.TabPages[i].Tag != null && tabControl.TabPages[i].Tag.ToString() == pageIndex.ToString()) + { + tabControl.SelectedIndex = i; + } + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UITextBox.Designer.cs b/SunnyUI/Controls/UITextBox.Designer.cs new file mode 100644 index 00000000..d168a771 --- /dev/null +++ b/SunnyUI/Controls/UITextBox.Designer.cs @@ -0,0 +1,46 @@ +namespace Sunny.UI +{ + sealed partial class UITextBox + { + /// + /// 必需的设计器变量。 + /// + 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() + { + SuspendLayout(); + // + // UITextBox + // + AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + Cursor = System.Windows.Forms.Cursors.IBeam; + Name = "UITextBox"; + Padding = new System.Windows.Forms.Padding(5); + Size = new System.Drawing.Size(250, 29); + ResumeLayout(false); + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UITextBox.cs b/SunnyUI/Controls/UITextBox.cs new file mode 100644 index 00000000..5aee0f11 --- /dev/null +++ b/SunnyUI/Controls/UITextBox.cs @@ -0,0 +1,300 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UITextBox.cs + * 文件说明: 输入框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("TextChanged")] + [DefaultProperty("Text")] + public sealed partial class UITextBox : UIPanel + { + private readonly UIEdit edit = new UIEdit(); + + public UITextBox() + { + InitializeComponent(); + + Font = UIFontColor.Font; + + edit.Left = 3; + edit.Top = 3; + edit.Text = String.Empty; + edit.BorderStyle = BorderStyle.None; + edit.KeyDown += EditOnKeyDown; + edit.TextChanged += EditTextChanged; + edit.Invalidate(); + Controls.Add(edit); + fillColor = Color.White; + Width = 150; + } + + public void SelectAll() + { + edit.SelectAll(); + } + + protected override void OnTextChanged(EventArgs e) + { + base.OnTextChanged(e); + edit.Text = Text; + Invalidate(); + } + + public void CheckMaxMin() + { + edit.CheckMaxMin(); + } + + private void EditTextChanged(object s, EventArgs e) + { + Text = edit.Text; + } + + protected override void OnFontChanged(EventArgs e) + { + base.OnFontChanged(e); + edit.Font = Font; + Invalidate(); + } + + protected override void OnPaintFore(Graphics g, GraphicsPath path) + { + SizeChange(); + } + + protected override void OnSizeChanged(EventArgs e) + { + SizeChange(); + } + + private void SizeChange() + { + UIEdit edt = new UIEdit(); + edt.Font = edit.Font; + edt.Invalidate(); + Height = edt.Height; + edt.Dispose(); + + edit.Top = (Height - edit.Height) / 2; + edit.Left = 3; + edit.Width = Width - 6; + } + + private void EditOnKeyDown(object Obj, KeyEventArgs e) + { + if (e.Control && e.KeyCode == Keys.A) + { + edit.SelectAll(); + e.SuppressKeyPress = true; + } + + if (e.Control && e.KeyCode == Keys.C) + { + edit.Copy(); + e.SuppressKeyPress = true; + } + + if (e.Control && e.KeyCode == Keys.V) + { + edit.Paste(); + e.SuppressKeyPress = true; + } + } + + protected override void OnGotFocus(EventArgs e) + { + base.OnGotFocus(e); + edit.Focus(); + } + + public void Clear() + { + edit.Clear(); + } + + [DefaultValue('\0')] + public char PasswordChar + { + get => edit.PasswordChar; + set => edit.PasswordChar = value; + } + + [DefaultValue(false)] + public bool ReadOnly + { + get => edit.ReadOnly; + set + { + edit.ReadOnly = value; + edit.BackColor = Color.White; + } + } + + [Description("输入类型"), Category("自定义")] + [DefaultValue(UIEditType.String)] + public UIEditType Type + { + get => edit.Type; + set => edit.Type = value; + } + + /// + /// 当InputType为数字类型时,能输入的最大值 + /// + [Description("当InputType为数字类型时,能输入的最大值。")] + [DefaultValue(double.MaxValue)] + public double Maximum + { + get => edit.MaxValue; + set => edit.MaxValue = value; + } + + /// + /// 当InputType为数字类型时,能输入的最小值 + /// + [Description("当InputType为数字类型时,能输入的最小值。")] + [DefaultValue(double.MinValue)] + public double Minimum + { + get => edit.MinValue; + set => edit.MinValue = value; + } + + [DefaultValue(false)] + public bool HasMaximum + { + get => edit.HasMaxValue; + set => edit.HasMaxValue = value; + } + + [DefaultValue(false)] + public bool HasMinimum + { + get => edit.HasMinValue; + set => edit.HasMinValue = value; + } + + [DefaultValue(0.00)] + public double DoubleValue + { + get => edit.DoubleValue; + set => edit.DoubleValue = value; + } + + [DefaultValue(0)] + public int IntValue + { + get => edit.IntValue; + set => edit.IntValue = value; + } + + [CategoryAttribute("文字"), Browsable(true)] + [DefaultValue("")] + public override string Text + { + get => edit.Text; + set => edit.Text = value; + } + + /// + /// 当InputType为数字类型时,小数位数。 + /// + [Description("当InputType为数字类型时,小数位数。")] + [DefaultValue(2)] + public int DecLength + { + get => edit.DecLength; + set => edit.DecLength = Math.Max(value, 0); + } + + [DefaultValue(false)] + public bool CanEmpty + { + get => edit.CanEmpty; + set => edit.CanEmpty = value; + } + + public void Empty() + { + if (edit.CanEmpty) + edit.Text = ""; + } + + public bool IsEmpty => edit.Text == ""; + + protected override void OnMouseDown(MouseEventArgs e) + { + ActiveControl = edit; + } + + [DefaultValue(255)] + public int MaxLength + { + get => edit.MaxLength; + set => edit.MaxLength = Math.Max(value, 1); + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + edit.BackColor = fillColor = Color.White; + edit.ForeColor = foreColor = UIFontColor.Primary; + Invalidate(); + } + + protected override void AfterSetForeColor(Color color) + { + base.AfterSetForeColor(color); + edit.ForeColor = color; + } + + protected override void AfterSetFillColor(Color color) + { + base.AfterSetFillColor(color); + edit.BackColor = color; + } + + public enum UIEditType + { + /// + /// 字符串 + /// + String, + + /// + /// 整数 + /// + Integer, + + /// + /// 浮点数 + /// + Double + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UITextBox.resx b/SunnyUI/Controls/UITextBox.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UITextBox.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/SunnyUI/Controls/UITitlePanel.Designer.cs b/SunnyUI/Controls/UITitlePanel.Designer.cs new file mode 100644 index 00000000..412201da --- /dev/null +++ b/SunnyUI/Controls/UITitlePanel.Designer.cs @@ -0,0 +1,43 @@ +namespace Sunny.UI +{ + partial class UITitlePanel + { + /// + /// 必需的设计器变量。 + /// + 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() + { + SuspendLayout(); + // + // UITitlePanel + // + Name = "UITitlePanel"; + Padding = new System.Windows.Forms.Padding(1, 35, 1, 1); + ResumeLayout(false); + + } + + #endregion + } +} diff --git a/SunnyUI/Controls/UITitlePanel.cs b/SunnyUI/Controls/UITitlePanel.cs new file mode 100644 index 00000000..8d42b327 --- /dev/null +++ b/SunnyUI/Controls/UITitlePanel.cs @@ -0,0 +1,167 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UITitlePanel.cs + * 文件说明: 带标题面板 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * 2020-04-25: V2.2.4 更新主题配置类 +******************************************************************************/ + +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public partial class UITitlePanel : UIPanel + { + private int _titleHeight = 35; + + [Description("面板高度"), Category("自定义")] + [DefaultValue(35)] + public int TitleHeight + { + get => _titleHeight; + set + { + _titleHeight = value; + Padding = new Padding(1, value, 1, 1); + Invalidate(); + } + } + + public UITitlePanel() + { + InitializeComponent(); + ShowText = false; + foreColor = Color.White; + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + titleColor = uiColor.TitleColor; + foreColor = uiColor.TitleForeColor; + Invalidate(); + } + + private HorizontalAlignment textAlign = HorizontalAlignment.Center; + + /// + /// 文字对齐方向 + /// + [DefaultValue(HorizontalAlignment.Center)] + public HorizontalAlignment TextAlign + { + get => textAlign; + set + { + textAlign = value; + Invalidate(); + } + } + + private Color titleColor = UIColor.Blue; + + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color TitleColor + { + get => titleColor; + set + { + titleColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + base.OnPaintFill(g, path); + //IsRadius为True时,显示左上圆角 + bool RadiusLeftTop = RadiusSides.GetValue(UICornerRadiusSides.LeftTop); + //IsRadius为True时,显示右上圆角 + bool RadiusRightTop = RadiusSides.GetValue(UICornerRadiusSides.RightTop); + path = GetTitleFillPath(Radius, TitleHeight, RadiusLeftTop, RadiusRightTop); + + Color color = Enabled ? TitleColor : UIDisableColor.Fill; + g.FillPath(color, path); + + color = Enabled ? ForeColor : UIFontColor.Regular; + SizeF sf = g.MeasureString(Text, Font); + switch (TextAlign) + { + case HorizontalAlignment.Left: + g.DrawString(Text, Font, color, _titleInterval, (TitleHeight - sf.Height) / 2.0f); + break; + + case HorizontalAlignment.Center: + g.DrawString(Text, Font, color, (Width - sf.Width) / 2.0f, (TitleHeight - sf.Height) / 2.0f); + break; + + case HorizontalAlignment.Right: + g.DrawString(Text, Font, color, Width - _titleInterval - sf.Width, (TitleHeight - sf.Height) / 2.0f); + break; + } + } + + private int _titleInterval = 10; + + [DefaultValue(10)] + public int TitleInterval + { + get => _titleInterval; + set + { + _titleInterval = value; + Invalidate(); + } + } + + protected GraphicsPath GetTitleFillPath(int radius, int height, bool cornerLeftTop = true, bool cornerRightTop = true) + { + Rectangle rect = ClientRectangle; + GraphicsPath graphicsPath = new GraphicsPath(); + if (radius > 0 && ShowRadius) + { + if (cornerLeftTop) + graphicsPath.AddArc(0, 0, radius, radius, 180f, 90f); + else + graphicsPath.AddLine(new Point(0, 1), new Point(0, 0)); + + if (cornerRightTop) + graphicsPath.AddArc(rect.Width - radius - 1, 0, radius, radius, 270f, 90f); + else + graphicsPath.AddLine(new Point(rect.Width - 1 - 1, 0), new Point(rect.Width - 1, 0)); + + graphicsPath.AddLine(new Point(rect.Width - 1, radius), new Point(rect.Width - 1, height)); + graphicsPath.AddLine(new Point(radius, height), new Point(0, height)); + + graphicsPath.CloseFigure(); + } + else + { + Point[] points = new Point[] { new Point(0, 0), new Point(rect.Width - 1, 0), new Point(rect.Width - 1, height), new Point(0, height), new Point(0, 0), }; + graphicsPath = points.Path(); + } + + return graphicsPath; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UITrackBar.cs b/SunnyUI/Controls/UITrackBar.cs new file mode 100644 index 00000000..223f2196 --- /dev/null +++ b/SunnyUI/Controls/UITrackBar.cs @@ -0,0 +1,211 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UITrackBar.cs + * 文件说明: 进度指示条 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 + * +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + [DefaultEvent("ValueChanged")] + [DefaultProperty("Value")] + [ToolboxItem(true)] + public sealed class UITrackBar : UIControl + { + public event EventHandler ValueChanged; + + public UITrackBar() + { + Width = 150; + Height = 29; + + ShowText = false; + ShowRect = false; + fillColor = UIColor.LightBlue; + foreColor = UIColor.Blue; + rectColor = UIColor.Blue; + } + + private int _maximum = 100; + private int _minimum; + private int trackBarValue; + + [DefaultValue(false)] + public bool ReadOnly { get; set; } + + [DefaultValue(100)] + public int Maximum + { + get => _maximum; + set + { + _maximum = value; + if (_maximum <= _minimum) + _minimum = _maximum - 1; + + Invalidate(); + } + } + + [DefaultValue(0)] + public int Minimum + { + get => _minimum; + set + { + _minimum = value; + if (_minimum >= _maximum) + _maximum = _minimum + 1; + + Invalidate(); + } + } + + [DefaultValue(0)] + public int Value + { + get => trackBarValue; + set + { + int v = Math.Min(Math.Max(Minimum, value), Maximum); + if (trackBarValue != v) + { + trackBarValue = v; + Invalidate(); + } + + ValueChanged?.Invoke(this, null); + } + } + + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + rectDisableColor = uiColor.TrackDisableColor; + rectColor = uiColor.TrackBarRectColor; + fillColor = uiColor.TrackBarFillColor; + foreColor = uiColor.TrackBarForeColor; + Invalidate(); + } + + protected override void OnPaintFill(Graphics g, GraphicsPath path) + { + g.Clear(fillColor); + g.FillRoundRectangle(rectDisableColor, new Rectangle(5, Height / 2 - 3, Width - 1 - 10, 6), 6); + + int len = (int)((Value - Minimum) * 1.0 * (Width - 1 - 10) / (Maximum - Minimum)); + if (len > 0) + { + g.FillRoundRectangle(foreColor, new Rectangle(5, Height / 2 - 3, len, 6), 6); + } + + g.FillRoundRectangle(fillColor.IsValid() ? fillColor : Color.White, new Rectangle(len, Height / 2 - 10, 10, 20), 5); + + using (Pen pen = new Pen(rectColor, 2)) + { + g.SetHighQuality(); + g.DrawRoundRectangle(pen, new Rectangle(len + 1, Height / 2 - 9, 8, 18), 5); + g.SetDefaultQuality(); + } + } + + protected override void OnMouseClick(MouseEventArgs e) + { + base.OnMouseClick(e); + if (!ReadOnly) + { + int len = e.X - 5; + int value = (len * 1.0 * (Maximum - Minimum) / (Width - 1 - 10)).RoundEx() + Minimum; + Value = Math.Min(Math.Max(Minimum, value), Maximum); + } + } + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + if (IsPress && !ReadOnly) + { + int len = e.X - 5; + int value = (len * 1.0 * (Maximum - Minimum) / (Width - 1 - 10)).RoundEx() + Minimum; + Value = Math.Min(Math.Max(Minimum, value), Maximum); + } + } + + protected override void OnMouseDown(MouseEventArgs e) + { + base.OnMouseDown(e); + IsPress = true; + Invalidate(); + } + + protected override void OnMouseUp(MouseEventArgs e) + { + base.OnMouseUp(e); + IsPress = false; + Invalidate(); + } + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("填充颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "235, 243, 255")] + public Color FillColor + { + get => fillColor; + set => SetFillColor(value); + } + + /// + /// 字体颜色 + /// + [Description("字体颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public override Color ForeColor + { + get => foreColor; + set => SetForeColor(value); + } + + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color RectColor + { + get => rectColor; + set => SetRectColor(value); + } + + [DefaultValue(typeof(Color), "173, 178, 181")] + public Color DisableColor + { + get => rectDisableColor; + set => SetRectDisableColor(value); + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UITransfer.Designer.cs b/SunnyUI/Controls/UITransfer.Designer.cs new file mode 100644 index 00000000..39d31327 --- /dev/null +++ b/SunnyUI/Controls/UITransfer.Designer.cs @@ -0,0 +1,163 @@ +using System.Windows.Forms; + +namespace Sunny.UI +{ + partial class UITransfer + { + /// + /// 必需的设计器变量。 + /// + 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.b1 = new Sunny.UI.UISymbolButton(); + this.b2 = new Sunny.UI.UISymbolButton(); + this.b3 = new Sunny.UI.UISymbolButton(); + this.b4 = new Sunny.UI.UISymbolButton(); + this.l1 = new Sunny.UI.UIListBox(); + this.l2 = new Sunny.UI.UIListBox(); + this.SuspendLayout(); + // + // b1 + // + this.b1.BackColor = System.Drawing.Color.Transparent; + this.b1.Cursor = System.Windows.Forms.Cursors.Hand; + this.b1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.b1.Location = new System.Drawing.Point(228, 85); + this.b1.Margin = new System.Windows.Forms.Padding(0); + this.b1.Name = "b1"; + this.b1.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.b1.SelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.b1.Size = new System.Drawing.Size(44, 32); + this.b1.Symbol = 61697; + this.b1.TabIndex = 3; + this.b1.TipsText = null; + this.b1.Click += new System.EventHandler(this.b1_Click); + // + // b2 + // + this.b2.BackColor = System.Drawing.Color.Transparent; + this.b2.Cursor = System.Windows.Forms.Cursors.Hand; + this.b2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.b2.Location = new System.Drawing.Point(228, 135); + this.b2.Margin = new System.Windows.Forms.Padding(0); + this.b2.Name = "b2"; + this.b2.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.b2.SelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.b2.Size = new System.Drawing.Size(44, 32); + this.b2.Symbol = 61701; + this.b2.TabIndex = 4; + this.b2.TipsText = null; + this.b2.Click += new System.EventHandler(this.b2_Click); + // + // b3 + // + this.b3.BackColor = System.Drawing.Color.Transparent; + this.b3.Cursor = System.Windows.Forms.Cursors.Hand; + this.b3.Font = new System.Drawing.Font("微软雅黑", 12F); + this.b3.Location = new System.Drawing.Point(228, 183); + this.b3.Margin = new System.Windows.Forms.Padding(0); + this.b3.Name = "b3"; + this.b3.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.b3.SelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.b3.Size = new System.Drawing.Size(44, 32); + this.b3.Symbol = 61700; + this.b3.TabIndex = 5; + this.b3.TipsText = null; + this.b3.Click += new System.EventHandler(this.b3_Click); + // + // b4 + // + this.b4.BackColor = System.Drawing.Color.Transparent; + this.b4.Cursor = System.Windows.Forms.Cursors.Hand; + this.b4.Font = new System.Drawing.Font("微软雅黑", 12F); + this.b4.Location = new System.Drawing.Point(228, 233); + this.b4.Margin = new System.Windows.Forms.Padding(0); + this.b4.Name = "b4"; + this.b4.Padding = new System.Windows.Forms.Padding(28, 0, 0, 0); + this.b4.SelectedColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(158)))), ((int)(((byte)(255))))); + this.b4.Size = new System.Drawing.Size(44, 32); + this.b4.Symbol = 61696; + this.b4.TabIndex = 6; + this.b4.TipsText = null; + this.b4.Click += new System.EventHandler(this.b4_Click); + // + // l1 + // + this.l1.BackColor = System.Drawing.Color.Transparent; + this.l1.Dock = System.Windows.Forms.DockStyle.Left; + this.l1.Font = new System.Drawing.Font("微软雅黑", 12F); + this.l1.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.l1.Location = new System.Drawing.Point(1, 1); + this.l1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.l1.Name = "l1"; + this.l1.Padding = new System.Windows.Forms.Padding(2); + this.l1.Size = new System.Drawing.Size(210, 348); + this.l1.TabIndex = 7; + this.l1.Text = null; + this.l1.ItemDoubleClick += new System.EventHandler(this.l1_DoubleClick); + // + // l2 + // + this.l2.BackColor = System.Drawing.Color.Transparent; + this.l2.Dock = System.Windows.Forms.DockStyle.Right; + this.l2.Font = new System.Drawing.Font("微软雅黑", 12F); + this.l2.ItemSelectForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.l2.Location = new System.Drawing.Point(289, 1); + this.l2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.l2.Name = "l2"; + this.l2.Padding = new System.Windows.Forms.Padding(2); + this.l2.Size = new System.Drawing.Size(210, 348); + this.l2.TabIndex = 8; + this.l2.Text = null; + this.l2.ItemDoubleClick += new System.EventHandler(this.l2_DoubleClick); + // + // UITransfer + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.l2); + this.Controls.Add(this.l1); + this.Controls.Add(this.b4); + this.Controls.Add(this.b3); + this.Controls.Add(this.b2); + this.Controls.Add(this.b1); + this.Margin = new System.Windows.Forms.Padding(7, 9, 7, 9); + this.Name = "UITransfer"; + this.Padding = new System.Windows.Forms.Padding(1); + this.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.None; + this.Size = new System.Drawing.Size(500, 350); + this.ResumeLayout(false); + + } + + #endregion + private UISymbolButton b1; + private UISymbolButton b2; + private UISymbolButton b3; + private UISymbolButton b4; + private UIListBox l1; + private UIListBox l2; + } +} diff --git a/SunnyUI/Controls/UITransfer.cs b/SunnyUI/Controls/UITransfer.cs new file mode 100644 index 00000000..05de2e10 --- /dev/null +++ b/SunnyUI/Controls/UITransfer.cs @@ -0,0 +1,224 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UITransfer.cs + * 文件说明: 穿梭框 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing.Design; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 穿梭框 + /// + [DefaultProperty("ItemsLeft")] + public sealed partial class UITransfer : UIPanel + { + /// + /// 构造函数 + /// + public UITransfer() + { + InitializeComponent(); + ShowText = false; + } + + /// + /// 左侧列表 + /// + [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)] + [Description("左侧列表")] + public ListBox.ObjectCollection ItemsLeft => l1.Items; + + /// + /// 右侧列表 + /// + [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)] + [Description("右侧列表")] + public ListBox.ObjectCollection ItemsRight => l2.Items; + + private void b1_Click(object sender, EventArgs e) + { + foreach (object item in l1.Items) + { + l2.Items.Add(item); + } + + l1.Items.Clear(); + if (l2.Items.Count > 0) + { + l2.SelectedIndex = l2.Items.Count - 1; + } + } + + private void b2_Click(object sender, EventArgs e) + { + if (l1.Items.Count > 0 && l1.SelectedItem != null) + { + int idx = l1.SelectedIndex; + object item = l1.SelectedItem; + l2.Items.Add(item); + l1.Items.Remove(item); + + if (l2.Items.Count > 0) + { + l2.SelectedIndex = l2.Items.Count - 1; + } + + if (idx - 1 >= 0) + { + idx = idx - 1; + } + + if (l1.Items.Count > 0) + { + l1.SelectedIndex = idx; + } + } + } + + private void b3_Click(object sender, EventArgs e) + { + if (l2.Items.Count > 0 && l2.SelectedItem != null) + { + int idx = l2.SelectedIndex; + object item = l2.SelectedItem; + l1.Items.Add(item); + l2.Items.Remove(item); + + if (l1.Items.Count > 0) + { + l1.SelectedIndex = l1.Items.Count - 1; + } + + if (idx - 1 >= 0) + { + idx = idx - 1; + } + + if (l2.Items.Count > 0) + { + l2.SelectedIndex = idx; + } + } + } + + private void b4_Click(object sender, EventArgs e) + { + foreach (object item in l2.Items) + { + l1.Items.Add(item); + } + + l2.Items.Clear(); + if (l1.Items.Count > 0) + { + l1.SelectedIndex = l1.Items.Count - 1; + } + } + + private void l1_DoubleClick(object sender, EventArgs e) + { + b2_Click(null, null); + } + + private void l2_DoubleClick(object sender, EventArgs e) + { + b3_Click(null, null); + } + + /// + /// OnSizeChanged + /// + /// e + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + if (b1 == null || b2 == null) return; + if (b3 == null || b4 == null) return; + if (l1 == null || l2 == null) return; + + l1.Width = l2.Width = Width / 2 - 40; + b1.Left = b2.Left = b3.Left = b4.Left = (Width - b1.Width) / 2; + b2.Top = Height / 2 - 8 - b2.Height; + b1.Top = b2.Top - 16 - b1.Height; + b3.Top = b2.Bottom + 16; + b4.Top = b3.Bottom + 16; + } + + /// + /// 设置主题样式 + /// + /// + public override void SetStyleColor(UIBaseStyle uiColor) + { + base.SetStyleColor(uiColor); + if (uiColor.IsCustom()) return; + + if (l1 == null || l2 == null) return; + if (b1 == null || b2 == null || b3 == null || b4 == null) return; + + b1.SetStyleColor(uiColor); + b2.SetStyleColor(uiColor); + b3.SetStyleColor(uiColor); + b4.SetStyleColor(uiColor); + l1.SetStyleColor(uiColor); + l2.SetStyleColor(uiColor); + + l1.BackColor = fillColor; + l2.BackColor = fillColor; + + Invalidate(); + } + + /// + /// 圆角切换事件 + /// + /// 圆角值 + protected override void OnRadiusChanged(int value) + { + base.OnRadiusChanged(value); + if (l1 == null || l2 == null) return; + + l1.Radius = value; + l2.Radius = value; + } + + /// + /// OnPaint + /// + /// e + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + if (RadiusSides != UICornerRadiusSides.None) + RadiusSides = UICornerRadiusSides.None; + if (RectSides != ToolStripStatusLabelBorderSides.None) + RectSides = ToolStripStatusLabelBorderSides.None; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Controls/UITransfer.resx b/SunnyUI/Controls/UITransfer.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/SunnyUI/Controls/UITransfer.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/SunnyUI/Controls/UITreeView.cs b/SunnyUI/Controls/UITreeView.cs new file mode 100644 index 00000000..882516f4 --- /dev/null +++ b/SunnyUI/Controls/UITreeView.cs @@ -0,0 +1,574 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UITreeView.cs + * 文件说明: 树形列表 + * 当前版本: V2.2 + * 创建日期: 2020-05-05 + * + * 2020-05-05: V2.2.5 增加文件 +******************************************************************************/ + +using System; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Windows.Forms; + +namespace Sunny.UI +{ + public sealed class UITreeView : TreeView, IStyleInterface + { + private readonly UIScrollBar Bar = new UIScrollBar(); + + public UITreeView() + { + SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.SupportsTransparentBackColor | ControlStyles.ResizeRedraw | ControlStyles.OptimizedDoubleBuffer, true); + DrawMode = TreeViewDrawMode.OwnerDrawAll; + DoubleBuffered = true; + Font = UIFontColor.Font; + + ItemHeight = 28; + BackColor = Color.White; + + Bar.ValueChanged += Bar_ValueChanged; + Bar.Dock = DockStyle.Right; + Bar.Visible = false; + Bar.Style = UIStyle.Custom; + Bar.StyleCustomMode = true; + Bar.FillColor = fillColor; + + Bar.ForeColor = Color.Silver; + Bar.HoverColor = Color.Silver; + Bar.PressColor = Color.Silver; + + Controls.Add(Bar); + Version = UIGlobal.Version; + SetScrollInfo(); + } + + [DefaultValue(null)] + public string TagString { get; set; } + + private Color fillColor = Color.White; + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("背景颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "White")] + public Color FillColor + { + get => fillColor; + set + { + if (fillColor != value) + { + fillColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + } + + private Color foreColor = UIFontColor.Primary; + + /// + /// 填充颜色,当值为背景色或透明色或空值则不填充 + /// + [Description("背景颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "48, 48, 48")] + public override Color ForeColor + { + get => foreColor; + set + { + if (foreColor != value) + { + foreColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + } + + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + SetScrollInfo(); + } + + private void Bar_ValueChanged(object sender, EventArgs e) + { + ScrollBarInfo.SetScrollValue(Handle, Bar.Value); + } + + [DefaultValue(false)] + public bool StyleCustomMode { get; set; } + + private Color selectedColor = Color.FromArgb(80, 160, 255); + + private bool showTips; + + [Description("是否显示角标"), Category("自定义")] + [DefaultValue(false)] + public bool ShowTips + { + get => showTips; + set + { + if (showTips != value) + { + showTips = value; + Invalidate(); + } + } + } + + private Font tipsFont = new Font("Microsoft Sans Serif", 9); + + [Description("角标文字字体"), Category("自定义")] + [DefaultValue(typeof(Font), "Microsoft Sans Serif, 9pt")] + public Font TipsFont + { + get => tipsFont; + set + { + if (!tipsFont.Equals(value)) + { + tipsFont = value; + Invalidate(); + } + } + } + + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color SelectedColor + { + get => selectedColor; + set + { + if (selectedColor != value) + { + selectedColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + } + + private Color selectedHighColor = UIColor.White; + + /// + /// 边框颜色 + /// + [Description("选中Tab页高亮"), Category("自定义")] + [DefaultValue(typeof(Color), "White")] + public Color SelectedHighColor + + { + get => selectedHighColor; + set + { + selectedHighColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + private Color hoverColor = Color.FromArgb(155, 200, 255); + + [DefaultValue(typeof(Color), "155, 200, 255")] + public Color HoverColor + { + get => hoverColor; + set + { + hoverColor = value; + _style = UIStyle.Custom; + } + } + + private UIStyle _style = UIStyle.Blue; + + [DefaultValue(UIStyle.Blue)] + public UIStyle Style + { + get => _style; + set => SetStyle(value); + } + + private Color rectColor = UIStyles.Blue.RectColor; + + /// + /// 边框颜色 + /// + [Description("边框颜色"), Category("自定义")] + [DefaultValue(typeof(Color), "80, 160, 255")] + public Color RectColor + { + get => rectColor; + set => SetRectColor(value); + } + + /// + /// 设置边框颜色 + /// + /// 颜色 + private void SetRectColor(Color value) + { + if (rectColor != value) + { + rectColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + + public void SetStyle(UIStyle style) + { + SetStyleColor(UIStyles.GetStyleColor(style)); + _style = style; + } + + public void SetStyleColor(UIBaseStyle uiColor) + { + if (uiColor.IsCustom()) return; + + selectedForeColor = selectedHighColor = UIColor.White; + + rectColor = uiColor.RectColor; + fillColor = UIColor.White; + selectedColor = uiColor.TreeViewSelectedColor; + foreColor = UIFontColor.Primary; + hoverColor = uiColor.TreeViewHoverColor; + + if (Bar != null) + { + Bar.FillColor = UIColor.White; + Bar.ForeColor = uiColor.PrimaryColor; + Bar.HoverColor = uiColor.ButtonFillHoverColor; + Bar.PressColor = uiColor.ButtonFillPressColor; + } + + Invalidate(); + + Invalidate(); + } + + private Color selectedForeColor = UIColor.White; + + [DefaultValue(typeof(Color), "White")] + public Color SelectedForeColor + { + get => selectedForeColor; + set + { + if (selectedForeColor != value) + { + selectedForeColor = value; + _style = UIStyle.Custom; + Invalidate(); + } + } + } + + private bool ScrollBarVisible; + + private TreeNode CurrentNode; + + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + TreeNode node = GetNodeAt(e.Location); + if (node == null || CurrentNode == node) + { + return; + } + + Graphics g = CreateGraphics(); + if (CurrentNode != null) + { + OnDrawNode(new DrawTreeNodeEventArgs(g, CurrentNode, new Rectangle(0, CurrentNode.Bounds.Y, Width, CurrentNode.Bounds.Height), TreeNodeStates.Default)); + } + + CurrentNode = node; + OnDrawNode(new DrawTreeNodeEventArgs(g, CurrentNode, new Rectangle(0, CurrentNode.Bounds.Y, Width, CurrentNode.Bounds.Height), TreeNodeStates.Hot)); + g.Dispose(); + } + + protected override void OnMouseLeave(EventArgs e) + { + Graphics g = CreateGraphics(); + if (CurrentNode != null) + { + OnDrawNode(new DrawTreeNodeEventArgs(g, CurrentNode, new Rectangle(0, CurrentNode.Bounds.Y, Width, CurrentNode.Bounds.Height), TreeNodeStates.Default)); + CurrentNode = null; + } + + g.Dispose(); + } + + private bool checkBoxes; + + [Browsable(false)] + public new bool CheckBoxes + { + get => checkBoxes; + set => checkBoxes = false; + } + + private readonly NavMenuHelper MenuHelper = new NavMenuHelper(); + + protected override void OnDrawNode(DrawTreeNodeEventArgs e) + { + if (BorderStyle == BorderStyle.Fixed3D) + { + BorderStyle = BorderStyle.FixedSingle; + } + + SetScrollInfo(); + CheckBoxes = false; + + if (e.Node == null || (e.Node.Bounds.Width <= 0 && e.Node.Bounds.Height <= 0 && e.Node.Bounds.X <= 0 && e.Node.Bounds.Y <= 0)) + { + e.DrawDefault = true; + } + else + { + int drawLeft = (e.Node.Level + 1) * 19 + 3; + int imageLeft = drawLeft; + bool haveImage = false; + + if (MenuHelper.GetSymbol(e.Node) > 0) + { + haveImage = true; + drawLeft += MenuHelper.GetSymbolSize(e.Node) + 6; + } + else + { + if (ImageList != null && ImageList.Images.Count > 0 && e.Node.ImageIndex >= 0 && e.Node.ImageIndex < ImageList.Images.Count) + { + haveImage = true; + drawLeft += ImageList.ImageSize.Width + 6; + } + } + + SizeF sf = e.Graphics.MeasureString(e.Node.Text, Font); + if (e.Node == SelectedNode) + { + e.Graphics.FillRectangle((e.State & TreeNodeStates.Hot) != 0 ? HoverColor : SelectedColor, + new Rectangle(new Point(0, e.Node.Bounds.Y), new Size(Width, e.Node.Bounds.Height))); + + e.Graphics.DrawString(e.Node.Text, Font, SelectedForeColor, drawLeft, e.Bounds.Y + (ItemHeight - sf.Height) / 2.0f); + } + else if (e.Node == CurrentNode && (e.State & TreeNodeStates.Hot) != 0) + { + e.Graphics.FillRectangle(HoverColor, new Rectangle(new Point(0, e.Node.Bounds.Y), new Size(Width, e.Node.Bounds.Height))); + e.Graphics.DrawString(e.Node.Text, Font, ForeColor, drawLeft, e.Bounds.Y + (ItemHeight - sf.Height) / 2.0f); + } + else + { + e.Graphics.FillRectangle(fillColor, new Rectangle(new Point(0, e.Node.Bounds.Y), new Size(Width, e.Node.Bounds.Height))); + e.Graphics.DrawString(e.Node.Text, Font, ForeColor, drawLeft, e.Bounds.Y + (ItemHeight - sf.Height) / 2.0f); + } + + if (haveImage) + { + if (MenuHelper.GetSymbol(e.Node) > 0) + { + SizeF fiSize = e.Graphics.GetFontImageSize(MenuHelper.GetSymbol(e.Node), MenuHelper.GetSymbolSize(e.Node)); + e.Graphics.DrawFontImage(MenuHelper.GetSymbol(e.Node), MenuHelper.GetSymbolSize(e.Node), Color.White, + imageLeft + (MenuHelper.GetSymbolSize(e.Node) - fiSize.Width) / 2.0f, e.Bounds.Y + (e.Bounds.Height - fiSize.Height) / 2); + } + else + { + if (e.Selected() && e.Node.SelectedImageIndex >= 0 && e.Node.SelectedImageIndex < ImageList.Images.Count) + e.Graphics.DrawImage(ImageList.Images[e.Node.SelectedImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); + else + e.Graphics.DrawImage(ImageList.Images[e.Node.ImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); + } + } + + int lineY = e.Bounds.Y + e.Node.Bounds.Height / 2 - 1; + int lineX = 3 + e.Node.Level * 19 + 9; + + try + { + //绘制虚线 + Pen pn = new Pen(UIFontColor.Primary); + pn.DashStyle = DashStyle.Dot; + e.Graphics.DrawLine(pn, lineX, lineY, lineX + 10, lineY); + + if (e.Node.Level >= 1) + { + e.Graphics.DrawLine(pn, lineX, lineY, lineX, e.Bounds.Top); + if (e.Node.NextNode != null) + { + e.Graphics.DrawLine(pn, lineX, lineY, lineX, e.Node.Bounds.Bottom); + } + + TreeNode pNode = e.Node.Parent; + while (pNode != null) + { + lineX -= 19; + + if (pNode.Level == 0 && pNode.NextNode != null) + { + e.Graphics.DrawLine(pn, lineX, lineY, lineX, e.Node.Bounds.Top); + } + + if (pNode.NextNode != null) + { + e.Graphics.DrawLine(pn, lineX, lineY, lineX, e.Node.Bounds.Bottom); + } + + pNode = pNode.Parent; + } + } + else + { + if (e.Node.PrevNode != null) + { + e.Graphics.DrawLine(pn, lineX, lineY, lineX, e.Node.Bounds.Top); + } + + if (e.Node.NextNode != null) + { + e.Graphics.DrawLine(pn, lineX, lineY, lineX, e.Node.Bounds.Bottom); + } + } + + pn.Dispose(); + } + catch (Exception exception) + { + Console.WriteLine(exception); + } + + lineX = 3 + e.Node.Level * 19 + 9; + //绘制左侧+号 + if (e.Node.Nodes.Count > 0) + { + e.Graphics.FillRectangle(Color.White, new Rectangle(lineX - 4, lineY - 4, 8, 8)); + e.Graphics.DrawRectangle(UIFontColor.Primary, new Rectangle(lineX - 4, lineY - 4, 8, 8)); + e.Graphics.DrawLine(UIFontColor.Primary, lineX - 2, lineY, lineX + 2, lineY); + if (!e.Node.IsExpanded) + { + e.Graphics.DrawLine(UIFontColor.Primary, lineX, lineY - 2, lineX, lineY + 2); + } + } + + if (ShowTips && MenuHelper.GetTipsText(e.Node).IsValid()) + { + SizeF tipsSize = e.Graphics.MeasureString(MenuHelper.GetTipsText(e.Node), TipsFont); + float sfMax = Math.Max(tipsSize.Width, tipsSize.Height) + 1; + float tipsLeft = Width - (ScrollBarVisible ? 50 : 30) - 6 - sfMax; + float tipsTop = e.Bounds.Y + (ItemHeight - sfMax) / 2; + + e.Graphics.FillEllipse(Brushes.Red, tipsLeft, tipsTop, sfMax, sfMax); + e.Graphics.DrawString(MenuHelper.GetTipsText(e.Node), TipsFont, Brushes.White, tipsLeft + sfMax / 2.0f - tipsSize.Width / 2.0f, tipsTop + sfMax / 2.0f - tipsSize.Height / 2.0f); + } + } + } + + public string Version { get; } + + protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) + { + base.OnNodeMouseClick(e); + + if (e.Node != null && e.Node.Nodes.Count > 0) + { + if (e.X >= (e.Node.Level + 1) * 19 + 3) + { + if (e.Node.IsExpanded) + { + e.Node.Collapse(); + } + else + { + e.Node.Expand(); + } + } + } + + SelectedNode = e.Node; + } + + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + + if (e.Delta > 10) + { + ScrollBarInfo.ScrollUp(Handle); + } + else if (e.Delta < -10) + { + ScrollBarInfo.ScrollDown(Handle); + } + + SetScrollInfo(); + } + + public void SetScrollInfo() + { + if (Nodes.Count == 0) + { + Bar.Visible = false; + return; + } + + var si = ScrollBarInfo.GetInfo(Handle); + Bar.Maximum = si.ScrollMax; + Bar.Visible = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0; + Bar.Value = si.nPos; + Bar.BringToFront(); + + if (ScrollBarVisible != Bar.Visible) + { + ScrollBarVisible = Bar.Visible; + Invalidate(); + } + } + + protected override void OnAfterExpand(TreeViewEventArgs e) + { + base.OnAfterExpand(e); + SetScrollInfo(); + } + + protected override void OnAfterCollapse(TreeViewEventArgs e) + { + base.OnAfterCollapse(e); + SetScrollInfo(); + } + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + + //隐藏滚动条 + ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both + + if (m.Msg == 0xf || m.Msg == 0x133) + { + if (BorderStyle == BorderStyle.FixedSingle) + { + ControlEx.ResetBorderColor(m, this, 1, Enabled ? RectColor : UIStyles.Blue.RectDisableColor); + } + } + } + } +} \ No newline at end of file diff --git a/SunnyUI/Font/ElegantIcons.png b/SunnyUI/Font/ElegantIcons.png new file mode 100644 index 00000000..80a9dfab Binary files /dev/null and b/SunnyUI/Font/ElegantIcons.png differ diff --git a/SunnyUI/Font/ElegantIcons.ttf b/SunnyUI/Font/ElegantIcons.ttf new file mode 100644 index 00000000..12ff6800 Binary files /dev/null and b/SunnyUI/Font/ElegantIcons.ttf differ diff --git a/SunnyUI/Font/Font Awesome Icons.png b/SunnyUI/Font/Font Awesome Icons.png new file mode 100644 index 00000000..174bf0cf Binary files /dev/null and b/SunnyUI/Font/Font Awesome Icons.png differ diff --git a/SunnyUI/Font/FontAwesome.ttf b/SunnyUI/Font/FontAwesome.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/SunnyUI/Font/FontAwesome.ttf differ diff --git a/SunnyUI/Font/UIFontImage.cs b/SunnyUI/Font/UIFontImage.cs new file mode 100644 index 00000000..719f402a --- /dev/null +++ b/SunnyUI/Font/UIFontImage.cs @@ -0,0 +1,403 @@ +/****************************************************************************** + * SunnyUI Դؼ⡢⡢չ⡢ҳ濪ܡ + * CopyRight (C) 2012-2020 ShenYongHua(). + * QQȺ56829229 QQ17612584 EMailSunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * ʹô˴룬뱣˵ + ****************************************************************************** + * ļ: UFontImage.cs + * ļ˵: ͼƬ + * ǰ汾: V2.2 + * : 2020-01-01 + * + * 2020-01-01: V2.2.0 ļ˵ +******************************************************************************/ + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Drawing.Imaging; +using System.Drawing.Text; +using System.IO; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// ͼƬ + /// + public static class FontImageHelper + { + /// + /// AwesomeFont + /// + public static FontImages AwesomeFont; + + /// + /// ElegantFont + /// + public static FontImages ElegantFont; + + /// + /// 캯 + /// + static FontImageHelper() + { + string font = DirEx.CurrentDir() + "FontAwesome.ttf"; + CreateFontFile(font, "Sunny.UI.Font.FontAwesome.ttf"); + AwesomeFont = new FontImages(DirEx.CurrentDir() + "FontAwesome.ttf"); + + font = DirEx.CurrentDir() + "ElegantIcons.ttf"; + CreateFontFile(font, "Sunny.UI.Font.ElegantIcons.ttf"); + ElegantFont = new FontImages(DirEx.CurrentDir() + "ElegantIcons.ttf"); + } + + /// + /// ϵͳԴбļ + /// + /// ļ + /// Դ + private static void CreateFontFile(string file, string resource) + { + if (!File.Exists(file)) + { + Stream fontStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resource); + if (fontStream != null) + { + byte[] buffer = new byte[fontStream.Length]; + fontStream.Read(buffer, 0, (int)fontStream.Length); + fontStream.Close(); + + File.WriteAllBytes(file, buffer); + } + } + } + + /// + /// ȡС + /// + /// GDIͼ + /// ַ + /// С + /// С + public static SizeF GetFontImageSize(this Graphics graphics, int symbol, int symbolSize) + { + Font font = GetFont(symbol, symbolSize); + if (font == null) + { + return new SizeF(0, 0); + } + + Label Image = new Label(); + Image.AutoSize = true; + Image.Font = font; + Image.Text = char.ConvertFromUtf32(symbol); + Size ImageSize = Image.PreferredSize; + Image.Dispose(); + return ImageSize; + } + + /// + /// ͼƬ + /// + /// GDIͼ + /// ַ + /// С + /// ɫ + /// + /// + /// ƫ + /// ƫ + public static void DrawFontImage(this Graphics graphics, int symbol, int symbolSize, Color color, float left, float top, int xOffset = 0, int yOffSet = 0) + { + // + Font font = GetFont(symbol, symbolSize); + if (font == null) + { + return; + } + + string text = char.ConvertFromUtf32(symbol); + graphics.DrawString(text, font, color, left + xOffset, top + yOffSet); + } + + /// + /// ͼƬ + /// + /// GDIͼ + /// ַ + /// С + /// ɫ + /// + /// ƫ + /// ƫ + public static void DrawFontImage(this Graphics graphics, int symbol, int symbolSize, Color color, Rectangle rect, int xOffset = 0, int yOffSet = 0) + { + SizeF sf = graphics.GetFontImageSize(symbol, symbolSize); + graphics.DrawFontImage(symbol, symbolSize, color, rect.Left + (rect.Width - sf.Width) / 2.0f, + rect.Top + (rect.Height - sf.Height) / 2.0f, xOffset, yOffSet); + } + + /// + /// ͼƬ + /// + /// ַ + /// С + /// ɫ + /// ͼƬ + public static Image CreateImage(int symbol, int size, Color color) + { + Bitmap image = new Bitmap(size, size); + Graphics g = image.Graphics(); + SizeF ImageSize = g.GetFontImageSize(symbol, size); + Font font = GetFont(symbol, size); + g.DrawString(char.ConvertFromUtf32(symbol), font, color, (size - ImageSize.Width) / 2.0f, (size - ImageSize.Height) / 2.0f); + return image; + } + + /// + /// ȡ + /// + /// ַ + /// С + /// + public static Font GetFont(int symbol, int imageSize) + { + if (symbol > 0xF000) + return AwesomeFont.GetFont(symbol, imageSize); + else + return ElegantFont.GetFont(symbol, imageSize); + } + } + + /// + /// ͼͼƬ + /// + public class FontImages + { + private readonly PrivateFontCollection ImageFont; + private readonly Dictionary Fonts = new Dictionary(); + private const int MinFontSize = 8; + private const int MaxFontSize = 43; + + /// + /// С + /// + public int IconSize { get; set; } = 128; + + /// + /// ɫ + /// + public Color BackColor { get; set; } = Color.Transparent; + + /// + /// ǰɫ + /// + public Color ForeColor { get; set; } = Color.Black; + + /// + /// 캯 + /// + /// ļ + public FontImages(string filename) + { + if (File.Exists(filename)) + { + ImageFont = new PrivateFontCollection(); + ImageFont.AddFontFile(filename); + Loaded = true; + LoadDictionary(); + } + } + + /// + /// ɱ־ + /// + public bool Loaded { get; } + + private void LoadDictionary() + { + int size = MinFontSize; + for (int i = 0; i <= MaxFontSize - MinFontSize; i++) + { + Fonts.Add(size, GetFont(size)); + size += 1; + } + } + + /// + /// + /// + ~FontImages() + { + foreach (var font in Fonts.Values) + { + font.Dispose(); + } + + Fonts.Clear(); + } + + /// + /// ȡͼ + /// + /// + /// ͼС + /// ͼ + public Icon GetIcon(int iconText, int imageSize) + { + Bitmap image = GetImage(iconText, imageSize); + return image != null ? ToIcon(image, IconSize) : null; + } + + /// + /// ȡ + /// + /// ͼ + /// ͼС + /// + public Font GetFont(int iconText, int imageSize) + { + return Fonts[GetFontSize(iconText, imageSize)]; + } + + /// + /// ȡС + /// + /// ͼ + /// ͼС + /// С + public int GetFontSize(int iconText, int imageSize) + { + int size = MaxFontSize; + using (Bitmap bitmap = new Bitmap(48, 48)) + using (Graphics graphics = Graphics.FromImage(bitmap)) + { + for (int i = 0; i <= (MaxFontSize - MinFontSize); i++) + { + Font font = Fonts[size]; + SizeF sf = GetIconSize(iconText, graphics, font); + + if (sf.Width < imageSize && sf.Height < imageSize) + { + break; + } + + size -= 1; + } + } + + return size; + } + + /// + /// ȡͼƬ + /// + /// ͼ + /// ͼС + /// ͼƬ + public Bitmap GetImage(int iconText, int imageSize) + { + Font imageFont = Fonts[MinFontSize]; + SizeF textSize = new SizeF(imageSize, imageSize); + using (Bitmap bitmap = new Bitmap(48, 48)) + using (Graphics graphics = Graphics.FromImage(bitmap)) + { + int size = MaxFontSize; + for (int i = 0; i <= MaxFontSize - MinFontSize; i++) + { + Font font = Fonts[size]; + SizeF sf = GetIconSize(iconText, graphics, font); + + if (sf.Width < imageSize && sf.Height < imageSize) + { + imageFont = font; + textSize = sf; + break; + } + + size -= 1; + } + } + + Size iconSize = textSize.ToSize(); + Bitmap srcImage = new Bitmap(iconSize.Width, iconSize.Height); + using (Graphics graphics = Graphics.FromImage(srcImage)) + { + string s = char.ConvertFromUtf32(iconText); + graphics.TextRenderingHint = TextRenderingHint.AntiAlias; + graphics.InterpolationMode = InterpolationMode.HighQualityBilinear; + //graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; + //graphics.SmoothingMode = SmoothingMode.HighQuality; + graphics.DrawString(s, imageFont, ForeColor, new PointF(0.0f, 0.0f)); + } + + Bitmap result = new Bitmap(imageSize, imageSize); + using (Graphics graphics = Graphics.FromImage(result)) + { + graphics.DrawImage(srcImage, imageSize / 2.0f - textSize.Width / 2.0f, imageSize / 2.0f - textSize.Height / 2.0f); + } + + srcImage.Dispose(); + return result; + } + + private Size GetIconSize(int iconText, Graphics graphics, Font font) + { + string text = char.ConvertFromUtf32(iconText); + return graphics.MeasureString(text, font).ToSize(); + } + + private Icon ToIcon(Bitmap srcBitmap, int size) + { + if (srcBitmap == null) + { + throw new ArgumentNullException(nameof(srcBitmap)); + } + + Icon icon; + using (MemoryStream memoryStream = new MemoryStream()) + { + new Bitmap(srcBitmap, new Size(size, size)).Save(memoryStream, ImageFormat.Png); + Stream stream = new MemoryStream(); + BinaryWriter binaryWriter = new BinaryWriter(stream); + if (stream.Length <= 0L) + { + return null; + } + + binaryWriter.Write((byte)0); + binaryWriter.Write((byte)0); + binaryWriter.Write((short)1); + binaryWriter.Write((short)1); + binaryWriter.Write((byte)size); + binaryWriter.Write((byte)size); + binaryWriter.Write((byte)0); + binaryWriter.Write((byte)0); + binaryWriter.Write((short)0); + binaryWriter.Write((short)32); + binaryWriter.Write((int)memoryStream.Length); + binaryWriter.Write(22); + binaryWriter.Write(memoryStream.ToArray()); + binaryWriter.Flush(); + binaryWriter.Seek(0, SeekOrigin.Begin); + icon = new Icon(stream); + stream.Dispose(); + } + + return icon; + } + + private Font GetFont(float size) + { + return Loaded ? new Font(ImageFont.Families[0], size, FontStyle.Regular, GraphicsUnit.Point) : null; + } + } +} \ No newline at end of file diff --git a/SunnyUI/Font/UIFontImageDefine.cs b/SunnyUI/Font/UIFontImageDefine.cs new file mode 100644 index 00000000..108659f7 --- /dev/null +++ b/SunnyUI/Font/UIFontImageDefine.cs @@ -0,0 +1,1216 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UFontImageDefine.cs + * 文件说明: 字体图片定义类 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +#pragma warning disable 1591 + +namespace Sunny.UI +{ + public enum ImageFont + { + FontAwesome, + Elegant + } + + /// + /// FontAwesome.ttf V4.7 + /// + public static class FontAwesomeIcons + { + public const int fa_500px = 0xf26e; + + public const int fa_address_book = 0xf2b9; + public const int fa_address_book_o = 0xf2ba; + public const int fa_address_card = 0xf2bb; + public const int fa_address_card_o = 0xf2bc; + public const int fa_adjust = 0xf042; + public const int fa_adn = 0xf170; + public const int fa_align_center = 0xf037; + public const int fa_align_justify = 0xf039; + public const int fa_align_left = 0xf036; + public const int fa_align_right = 0xf038; + public const int fa_amazon = 0xf270; + public const int fa_ambulance = 0xf0f9; + public const int fa_american_sign_language_interpreting = 0xf2a3; + public const int fa_anchor = 0xf13d; + public const int fa_android = 0xf17b; + public const int fa_angellist = 0xf209; + public const int fa_angle_double_down = 0xf103; + public const int fa_angle_double_left = 0xf100; + public const int fa_angle_double_right = 0xf101; + public const int fa_angle_double_up = 0xf102; + public const int fa_angle_down = 0xf107; + public const int fa_angle_left = 0xf104; + public const int fa_angle_right = 0xf105; + public const int fa_angle_up = 0xf106; + public const int fa_apple = 0xf179; + public const int fa_archive = 0xf187; + public const int fa_area_chart = 0xf1fe; + public const int fa_arrow_circle_down = 0xf0ab; + public const int fa_arrow_circle_left = 0xf0a8; + public const int fa_arrow_circle_o_down = 0xf01a; + public const int fa_arrow_circle_o_left = 0xf190; + public const int fa_arrow_circle_o_right = 0xf18e; + public const int fa_arrow_circle_o_up = 0xf01b; + public const int fa_arrow_circle_right = 0xf0a9; + public const int fa_arrow_circle_up = 0xf0aa; + public const int fa_arrow_down = 0xf063; + public const int fa_arrow_left = 0xf060; + public const int fa_arrow_right = 0xf061; + public const int fa_arrow_up = 0xf062; + public const int fa_arrows = 0xf047; + public const int fa_arrows_alt = 0xf0b2; + public const int fa_arrows_h = 0xf07e; + public const int fa_arrows_v = 0xf07d; + public const int fa_asl_interpreting = 0xf2a3; + public const int fa_assistive_listening_systems = 0xf2a2; + public const int fa_asterisk = 0xf069; + public const int fa_at = 0xf1fa; + public const int fa_audio_description = 0xf29e; + public const int fa_automobile = 0xf1b9; + + public const int fa_backward = 0xf04a; + public const int fa_balance_scale = 0xf24e; + public const int fa_ban = 0xf05e; + public const int fa_bandcamp = 0xf2d5; + public const int fa_bank = 0xf19c; + public const int fa_bar_chart = 0xf080; + public const int fa_bar_chart_o = 0xf080; + public const int fa_barcode = 0xf02a; + public const int fa_bars = 0xf0c9; + public const int fa_bath = 0xf2cd; + public const int fa_bathtub = 0xf2cd; + public const int fa_battery = 0xf240; + public const int fa_battery_0 = 0xf244; + public const int fa_battery_1 = 0xf243; + public const int fa_battery_2 = 0xf242; + public const int fa_battery_3 = 0xf241; + public const int fa_battery_4 = 0xf240; + public const int fa_battery_empty = 0xf244; + public const int fa_battery_full = 0xf240; + public const int fa_battery_half = 0xf242; + public const int fa_battery_quarter = 0xf243; + public const int fa_battery_three_quarters = 0xf241; + public const int fa_bed = 0xf236; + public const int fa_beer = 0xf0fc; + public const int fa_behance = 0xf1b4; + public const int fa_behance_square = 0xf1b5; + public const int fa_bell = 0xf0f3; + public const int fa_bell_o = 0xf0a2; + public const int fa_bell_slash = 0xf1f6; + public const int fa_bell_slash_o = 0xf1f7; + public const int fa_bicycle = 0xf206; + public const int fa_binoculars = 0xf1e5; + public const int fa_birthday_cake = 0xf1fd; + public const int fa_bitbucket = 0xf171; + public const int fa_bitbucket_square = 0xf172; + public const int fa_bitcoin = 0xf15a; + public const int fa_black_tie = 0xf27e; + public const int fa_blind = 0xf29d; + public const int fa_bluetooth = 0xf293; + public const int fa_bluetooth_b = 0xf294; + public const int fa_bold = 0xf032; + public const int fa_bolt = 0xf0e7; + public const int fa_bomb = 0xf1e2; + public const int fa_book = 0xf02d; + public const int fa_bookmark = 0xf02e; + public const int fa_bookmark_o = 0xf097; + public const int fa_braille = 0xf2a1; + public const int fa_briefcase = 0xf0b1; + public const int fa_btc = 0xf15a; + public const int fa_bug = 0xf188; + public const int fa_building = 0xf1ad; + public const int fa_building_o = 0xf0f7; + public const int fa_bullhorn = 0xf0a1; + public const int fa_bullseye = 0xf140; + public const int fa_bus = 0xf207; + public const int fa_buysellads = 0xf20d; + + public const int fa_cab = 0xf1ba; + public const int fa_calculator = 0xf1ec; + public const int fa_calendar = 0xf073; + public const int fa_calendar_check_o = 0xf274; + public const int fa_calendar_minus_o = 0xf272; + public const int fa_calendar_o = 0xf133; + public const int fa_calendar_plus_o = 0xf271; + public const int fa_calendar_times_o = 0xf273; + public const int fa_camera = 0xf030; + public const int fa_camera_retro = 0xf083; + public const int fa_car = 0xf1b9; + public const int fa_caret_down = 0xf0d7; + public const int fa_caret_left = 0xf0d9; + public const int fa_caret_right = 0xf0da; + public const int fa_caret_square_o_down = 0xf150; + public const int fa_caret_square_o_left = 0xf191; + public const int fa_caret_square_o_right = 0xf152; + public const int fa_caret_square_o_up = 0xf151; + public const int fa_caret_up = 0xf0d8; + public const int fa_cart_arrow_down = 0xf218; + public const int fa_cart_plus = 0xf217; + public const int fa_cc = 0xf20a; + public const int fa_cc_amex = 0xf1f3; + public const int fa_cc_diners_club = 0xf24c; + public const int fa_cc_discover = 0xf1f2; + public const int fa_cc_jcb = 0xf24b; + public const int fa_cc_mastercard = 0xf1f1; + public const int fa_cc_paypal = 0xf1f4; + public const int fa_cc_stripe = 0xf1f5; + public const int fa_cc_visa = 0xf1f0; + public const int fa_certificate = 0xf0a3; + public const int fa_chain = 0xf0c1; + public const int fa_chain_broken = 0xf127; + public const int fa_check = 0xf00c; + public const int fa_check_circle = 0xf058; + public const int fa_check_circle_o = 0xf05d; + public const int fa_check_square = 0xf14a; + public const int fa_check_square_o = 0xf046; + public const int fa_chevron_circle_down = 0xf13a; + public const int fa_chevron_circle_left = 0xf137; + public const int fa_chevron_circle_right = 0xf138; + public const int fa_chevron_circle_up = 0xf139; + public const int fa_chevron_down = 0xf078; + public const int fa_chevron_left = 0xf053; + public const int fa_chevron_right = 0xf054; + public const int fa_chevron_up = 0xf077; + public const int fa_child = 0xf1ae; + public const int fa_chrome = 0xf268; + public const int fa_circle = 0xf111; + public const int fa_circle_o = 0xf10c; + public const int fa_circle_o_notch = 0xf1ce; + public const int fa_circle_thin = 0xf1db; + public const int fa_clipboard = 0xf0ea; + public const int fa_clock_o = 0xf017; + public const int fa_clone = 0xf24d; + public const int fa_close = 0xf00d; + public const int fa_cloud = 0xf0c2; + public const int fa_cloud_download = 0xf0ed; + public const int fa_cloud_upload = 0xf0ee; + public const int fa_cny = 0xf157; + public const int fa_code = 0xf121; + public const int fa_code_fork = 0xf126; + public const int fa_codepen = 0xf1cb; + public const int fa_codiepie = 0xf284; + public const int fa_coffee = 0xf0f4; + public const int fa_cog = 0xf013; + public const int fa_cogs = 0xf085; + public const int fa_columns = 0xf0db; + public const int fa_comment = 0xf075; + public const int fa_comment_o = 0xf0e5; + public const int fa_commenting = 0xf27a; + public const int fa_commenting_o = 0xf27b; + public const int fa_comments = 0xf086; + public const int fa_comments_o = 0xf0e6; + public const int fa_compass = 0xf14e; + public const int fa_compress = 0xf066; + public const int fa_connectdevelop = 0xf20e; + public const int fa_contao = 0xf26d; + public const int fa_copy = 0xf0c5; + public const int fa_copyright = 0xf1f9; + public const int fa_creative_commons = 0xf25e; + public const int fa_credit_card = 0xf09d; + public const int fa_credit_card_alt = 0xf283; + public const int fa_crop = 0xf125; + public const int fa_crosshairs = 0xf05b; + public const int fa_css3 = 0xf13c; + public const int fa_cube = 0xf1b2; + public const int fa_cubes = 0xf1b3; + public const int fa_cut = 0xf0c4; + public const int fa_cutlery = 0xf0f5; + + public const int fa_dashboard = 0xf0e4; + public const int fa_dashcube = 0xf210; + public const int fa_database = 0xf1c0; + public const int fa_deaf = 0xf2a4; + public const int fa_deafness = 0xf2a4; + public const int fa_dedent = 0xf03b; + public const int fa_delicious = 0xf1a5; + public const int fa_desktop = 0xf108; + public const int fa_deviantart = 0xf1bd; + public const int fa_diamond = 0xf219; + public const int fa_digg = 0xf1a6; + public const int fa_dollar = 0xf155; + public const int fa_dot_circle_o = 0xf192; + public const int fa_download = 0xf019; + public const int fa_dribbble = 0xf17d; + public const int fa_drivers_license = 0xf2c2; + public const int fa_drivers_license_o = 0xf2c3; + public const int fa_dropbox = 0xf16b; + public const int fa_drupal = 0xf1a9; + + public const int fa_edge = 0xf282; + public const int fa_edit = 0xf044; + public const int fa_eercast = 0xf2da; + public const int fa_eject = 0xf052; + public const int fa_ellipsis_h = 0xf141; + public const int fa_ellipsis_v = 0xf142; + public const int fa_empire = 0xf1d1; + public const int fa_envelope = 0xf0e0; + public const int fa_envelope_o = 0xf003; + public const int fa_envelope_open = 0xf2b6; + public const int fa_envelope_open_o = 0xf2b7; + public const int fa_envelope_square = 0xf199; + public const int fa_envira = 0xf299; + public const int fa_eraser = 0xf12d; + public const int fa_etsy = 0xf2d7; + public const int fa_eur = 0xf153; + public const int fa_euro = 0xf153; + public const int fa_exchange = 0xf0ec; + public const int fa_exclamation = 0xf12a; + public const int fa_exclamation_circle = 0xf06a; + public const int fa_exclamation_triangle = 0xf071; + public const int fa_expand = 0xf065; + public const int fa_expeditedssl = 0xf23e; + public const int fa_external_link = 0xf08e; + public const int fa_external_link_square = 0xf14c; + public const int fa_eye = 0xf06e; + public const int fa_eye_slash = 0xf070; + public const int fa_eyedropper = 0xf1fb; + + public const int fa_fa = 0xf2b4; + public const int fa_facebook = 0xf09a; + public const int fa_facebook_f = 0xf09a; + public const int fa_facebook_official = 0xf230; + public const int fa_facebook_square = 0xf082; + public const int fa_fast_backward = 0xf049; + public const int fa_fast_forward = 0xf050; + public const int fa_fax = 0xf1ac; + public const int fa_feed = 0xf09e; + public const int fa_female = 0xf182; + public const int fa_fighter_jet = 0xf0fb; + public const int fa_file = 0xf15b; + public const int fa_file_archive_o = 0xf1c6; + public const int fa_file_audio_o = 0xf1c7; + public const int fa_file_code_o = 0xf1c9; + public const int fa_file_excel_o = 0xf1c3; + public const int fa_file_image_o = 0xf1c5; + public const int fa_file_movie_o = 0xf1c8; + public const int fa_file_o = 0xf016; + public const int fa_file_pdf_o = 0xf1c1; + public const int fa_file_photo_o = 0xf1c5; + public const int fa_file_picture_o = 0xf1c5; + public const int fa_file_powerpoint_o = 0xf1c4; + public const int fa_file_sound_o = 0xf1c7; + public const int fa_file_text = 0xf15c; + public const int fa_file_text_o = 0xf0f6; + public const int fa_file_video_o = 0xf1c8; + public const int fa_file_word_o = 0xf1c2; + public const int fa_file_zip_o = 0xf1c6; + public const int fa_files_o = 0xf0c5; + public const int fa_film = 0xf008; + public const int fa_filter = 0xf0b0; + public const int fa_fire = 0xf06d; + public const int fa_fire_extinguisher = 0xf134; + public const int fa_firefox = 0xf269; + public const int fa_first_order = 0xf2b0; + public const int fa_flag = 0xf024; + public const int fa_flag_checkered = 0xf11e; + public const int fa_flag_o = 0xf11d; + public const int fa_flash = 0xf0e7; + public const int fa_flask = 0xf0c3; + public const int fa_flickr = 0xf16e; + public const int fa_floppy_o = 0xf0c7; + public const int fa_folder = 0xf07b; + public const int fa_folder_o = 0xf114; + public const int fa_folder_open = 0xf07c; + public const int fa_folder_open_o = 0xf115; + public const int fa_font = 0xf031; + public const int fa_font_awesome = 0xf2b4; + public const int fa_fonticons = 0xf280; + public const int fa_fort_awesome = 0xf286; + public const int fa_forumbee = 0xf211; + public const int fa_forward = 0xf04e; + public const int fa_foursquare = 0xf180; + public const int fa_free_code_camp = 0xf2c5; + public const int fa_frown_o = 0xf119; + public const int fa_futbol_o = 0xf1e3; + + public const int fa_gamepad = 0xf11b; + public const int fa_gavel = 0xf0e3; + public const int fa_gbp = 0xf154; + public const int fa_ge = 0xf1d1; + public const int fa_gear = 0xf013; + public const int fa_gears = 0xf085; + public const int fa_genderless = 0xf22d; + public const int fa_get_pocket = 0xf265; + public const int fa_gg = 0xf260; + public const int fa_gg_circle = 0xf261; + public const int fa_gift = 0xf06b; + public const int fa_git = 0xf1d3; + public const int fa_git_square = 0xf1d2; + public const int fa_github = 0xf09b; + public const int fa_github_alt = 0xf113; + public const int fa_github_square = 0xf092; + public const int fa_gitlab = 0xf296; + public const int fa_gittip = 0xf184; + public const int fa_glass = 0xf000; + public const int fa_glide = 0xf2a5; + public const int fa_glide_g = 0xf2a6; + public const int fa_globe = 0xf0ac; + public const int fa_google = 0xf1a0; + public const int fa_google_plus = 0xf0d5; + public const int fa_google_plus_circle = 0xf2b3; + public const int fa_google_plus_official = 0xf2b3; + public const int fa_google_plus_square = 0xf0d4; + public const int fa_google_wallet = 0xf1ee; + public const int fa_graduation_cap = 0xf19d; + public const int fa_gratipay = 0xf184; + public const int fa_grav = 0xf2d6; + public const int fa_group = 0xf0c0; + + public const int fa_h_square = 0xf0fd; + public const int fa_hacker_news = 0xf1d4; + public const int fa_hand_grab_o = 0xf255; + public const int fa_hand_lizard_o = 0xf258; + public const int fa_hand_o_down = 0xf0a7; + public const int fa_hand_o_left = 0xf0a5; + public const int fa_hand_o_right = 0xf0a4; + public const int fa_hand_o_up = 0xf0a6; + public const int fa_hand_paper_o = 0xf256; + public const int fa_hand_peace_o = 0xf25b; + public const int fa_hand_pointer_o = 0xf25a; + public const int fa_hand_rock_o = 0xf255; + public const int fa_hand_scissors_o = 0xf257; + public const int fa_hand_spock_o = 0xf259; + public const int fa_hand_stop_o = 0xf256; + public const int fa_handshake_o = 0xf2b5; + public const int fa_hard_of_hearing = 0xf2a4; + public const int fa_hashtag = 0xf292; + public const int fa_hdd_o = 0xf0a0; + public const int fa_header = 0xf1dc; + public const int fa_headphones = 0xf025; + public const int fa_heart = 0xf004; + public const int fa_heart_o = 0xf08a; + public const int fa_heartbeat = 0xf21e; + public const int fa_history = 0xf1da; + public const int fa_home = 0xf015; + public const int fa_hospital_o = 0xf0f8; + public const int fa_hotel = 0xf236; + public const int fa_hourglass = 0xf254; + public const int fa_hourglass_1 = 0xf251; + public const int fa_hourglass_2 = 0xf252; + public const int fa_hourglass_3 = 0xf253; + public const int fa_hourglass_end = 0xf253; + public const int fa_hourglass_half = 0xf252; + public const int fa_hourglass_o = 0xf250; + public const int fa_hourglass_start = 0xf251; + public const int fa_houzz = 0xf27c; + public const int fa_html5 = 0xf13b; + + public const int fa_i_cursor = 0xf246; + public const int fa_id_badge = 0xf2c1; + public const int fa_id_card = 0xf2c2; + public const int fa_id_card_o = 0xf2c3; + public const int fa_ils = 0xf20b; + public const int fa_image = 0xf03e; + public const int fa_imdb = 0xf2d8; + public const int fa_inbox = 0xf01c; + public const int fa_indent = 0xf03c; + public const int fa_industry = 0xf275; + public const int fa_info = 0xf129; + public const int fa_info_circle = 0xf05a; + public const int fa_inr = 0xf156; + public const int fa_instagram = 0xf16d; + public const int fa_institution = 0xf19c; + public const int fa_internet_explorer = 0xf26b; + public const int fa_intersex = 0xf224; + public const int fa_ioxhost = 0xf208; + public const int fa_italic = 0xf033; + + public const int fa_joomla = 0xf1aa; + public const int fa_jpy = 0xf157; + public const int fa_jsfiddle = 0xf1cc; + + public const int fa_key = 0xf084; + public const int fa_keyboard_o = 0xf11c; + public const int fa_krw = 0xf159; + + public const int fa_language = 0xf1ab; + public const int fa_laptop = 0xf109; + public const int fa_lastfm = 0xf202; + public const int fa_lastfm_square = 0xf203; + public const int fa_leaf = 0xf06c; + public const int fa_leanpub = 0xf212; + public const int fa_legal = 0xf0e3; + public const int fa_lemon_o = 0xf094; + public const int fa_level_down = 0xf149; + public const int fa_level_up = 0xf148; + public const int fa_life_bouy = 0xf1cd; + public const int fa_life_buoy = 0xf1cd; + public const int fa_life_ring = 0xf1cd; + public const int fa_life_saver = 0xf1cd; + public const int fa_lightbulb_o = 0xf0eb; + public const int fa_line_chart = 0xf201; + public const int fa_link = 0xf0c1; + public const int fa_linkedin = 0xf0e1; + public const int fa_linkedin_square = 0xf08c; + public const int fa_linode = 0xf2b8; + public const int fa_linux = 0xf17c; + public const int fa_list = 0xf03a; + public const int fa_list_alt = 0xf022; + public const int fa_list_ol = 0xf0cb; + public const int fa_list_ul = 0xf0ca; + public const int fa_location_arrow = 0xf124; + public const int fa_lock = 0xf023; + public const int fa_long_arrow_down = 0xf175; + public const int fa_long_arrow_left = 0xf177; + public const int fa_long_arrow_right = 0xf178; + public const int fa_long_arrow_up = 0xf176; + public const int fa_low_vision = 0xf2a8; + + public const int fa_magic = 0xf0d0; + public const int fa_magnet = 0xf076; + public const int fa_mail_forward = 0xf064; + public const int fa_mail_reply = 0xf112; + public const int fa_mail_reply_all = 0xf122; + public const int fa_male = 0xf183; + public const int fa_map = 0xf279; + public const int fa_map_marker = 0xf041; + public const int fa_map_o = 0xf278; + public const int fa_map_pin = 0xf276; + public const int fa_map_signs = 0xf277; + public const int fa_mars = 0xf222; + public const int fa_mars_double = 0xf227; + public const int fa_mars_stroke = 0xf229; + public const int fa_mars_stroke_h = 0xf22b; + public const int fa_mars_stroke_v = 0xf22a; + public const int fa_maxcdn = 0xf136; + public const int fa_meanpath = 0xf20c; + public const int fa_medium = 0xf23a; + public const int fa_medkit = 0xf0fa; + public const int fa_meetup = 0xf2e0; + public const int fa_meh_o = 0xf11a; + public const int fa_mercury = 0xf223; + public const int fa_microchip = 0xf2db; + public const int fa_microphone = 0xf130; + public const int fa_microphone_slash = 0xf131; + public const int fa_minus = 0xf068; + public const int fa_minus_circle = 0xf056; + public const int fa_minus_square = 0xf146; + public const int fa_minus_square_o = 0xf147; + public const int fa_mixcloud = 0xf289; + public const int fa_mobile = 0xf10b; + public const int fa_mobile_phone = 0xf10b; + public const int fa_modx = 0xf285; + public const int fa_money = 0xf0d6; + public const int fa_moon_o = 0xf186; + public const int fa_mortar_board = 0xf19d; + public const int fa_motorcycle = 0xf21c; + public const int fa_mouse_pointer = 0xf245; + public const int fa_music = 0xf001; + + public const int fa_navicon = 0xf0c9; + public const int fa_neuter = 0xf22c; + public const int fa_newspaper_o = 0xf1ea; + + public const int fa_object_group = 0xf247; + public const int fa_object_ungroup = 0xf248; + public const int fa_odnoklassniki = 0xf263; + public const int fa_odnoklassniki_square = 0xf264; + public const int fa_opencart = 0xf23d; + public const int fa_openid = 0xf19b; + public const int fa_opera = 0xf26a; + public const int fa_optin_monster = 0xf23c; + public const int fa_outdent = 0xf03b; + + public const int fa_pagelines = 0xf18c; + public const int fa_paint_brush = 0xf1fc; + public const int fa_paper_plane = 0xf1d8; + public const int fa_paper_plane_o = 0xf1d9; + public const int fa_paperclip = 0xf0c6; + public const int fa_paragraph = 0xf1dd; + public const int fa_paste = 0xf0ea; + public const int fa_pause = 0xf04c; + public const int fa_pause_circle = 0xf28b; + public const int fa_pause_circle_o = 0xf28c; + public const int fa_paw = 0xf1b0; + public const int fa_paypal = 0xf1ed; + public const int fa_pencil = 0xf040; + public const int fa_pencil_square = 0xf14b; + public const int fa_pencil_square_o = 0xf044; + public const int fa_percent = 0xf295; + public const int fa_phone = 0xf095; + public const int fa_phone_square = 0xf098; + public const int fa_photo = 0xf03e; + public const int fa_picture_o = 0xf03e; + public const int fa_pie_chart = 0xf200; + public const int fa_pied_piper = 0xf2ae; + public const int fa_pied_piper_alt = 0xf1a8; + public const int fa_pied_piper_pp = 0xf1a7; + public const int fa_pinterest = 0xf0d2; + public const int fa_pinterest_p = 0xf231; + public const int fa_pinterest_square = 0xf0d3; + public const int fa_plane = 0xf072; + public const int fa_play = 0xf04b; + public const int fa_play_circle = 0xf144; + public const int fa_play_circle_o = 0xf01d; + public const int fa_plug = 0xf1e6; + public const int fa_plus = 0xf067; + public const int fa_plus_circle = 0xf055; + public const int fa_plus_square = 0xf0fe; + public const int fa_plus_square_o = 0xf196; + public const int fa_podcast = 0xf2ce; + public const int fa_power_off = 0xf011; + public const int fa_print = 0xf02f; + public const int fa_product_hunt = 0xf288; + public const int fa_puzzle_piece = 0xf12e; + + public const int fa_qq = 0xf1d6; + public const int fa_qrcode = 0xf029; + public const int fa_question = 0xf128; + public const int fa_question_circle = 0xf059; + public const int fa_question_circle_o = 0xf29c; + public const int fa_quora = 0xf2c4; + public const int fa_quote_left = 0xf10d; + public const int fa_quote_right = 0xf10e; + + public const int fa_ra = 0xf1d0; + public const int fa_random = 0xf074; + public const int fa_ravelry = 0xf2d9; + public const int fa_rebel = 0xf1d0; + public const int fa_recycle = 0xf1b8; + public const int fa_reddit = 0xf1a1; + public const int fa_reddit_alien = 0xf281; + public const int fa_reddit_square = 0xf1a2; + public const int fa_refresh = 0xf021; + public const int fa_registered = 0xf25d; + public const int fa_remove = 0xf00d; + public const int fa_renren = 0xf18b; + public const int fa_reorder = 0xf0c9; + public const int fa_repeat = 0xf01e; + public const int fa_reply = 0xf112; + public const int fa_reply_all = 0xf122; + public const int fa_resistance = 0xf1d0; + public const int fa_retweet = 0xf079; + public const int fa_rmb = 0xf157; + public const int fa_road = 0xf018; + public const int fa_rocket = 0xf135; + public const int fa_rotate_left = 0xf0e2; + public const int fa_rotate_right = 0xf01e; + public const int fa_rouble = 0xf158; + public const int fa_rss = 0xf09e; + public const int fa_rss_square = 0xf143; + public const int fa_rub = 0xf158; + public const int fa_ruble = 0xf158; + public const int fa_rupee = 0xf156; + + public const int fa_s15 = 0xf2cd; + public const int fa_safari = 0xf267; + public const int fa_save = 0xf0c7; + public const int fa_scissors = 0xf0c4; + public const int fa_scribd = 0xf28a; + public const int fa_search = 0xf002; + public const int fa_search_minus = 0xf010; + public const int fa_search_plus = 0xf00e; + public const int fa_sellsy = 0xf213; + public const int fa_send = 0xf1d8; + public const int fa_send_o = 0xf1d9; + public const int fa_server = 0xf233; + public const int fa_share = 0xf064; + public const int fa_share_alt = 0xf1e0; + public const int fa_share_alt_square = 0xf1e1; + public const int fa_share_square = 0xf14d; + public const int fa_share_square_o = 0xf045; + public const int fa_shekel = 0xf20b; + public const int fa_sheqel = 0xf20b; + public const int fa_shield = 0xf132; + public const int fa_ship = 0xf21a; + public const int fa_shirtsinbulk = 0xf214; + public const int fa_shopping_bag = 0xf290; + public const int fa_shopping_basket = 0xf291; + public const int fa_shopping_cart = 0xf07a; + public const int fa_shower = 0xf2cc; + public const int fa_sign_in = 0xf090; + public const int fa_sign_language = 0xf2a7; + public const int fa_sign_out = 0xf08b; + public const int fa_signal = 0xf012; + public const int fa_signing = 0xf2a7; + public const int fa_simplybuilt = 0xf215; + public const int fa_sitemap = 0xf0e8; + public const int fa_skyatlas = 0xf216; + public const int fa_skype = 0xf17e; + public const int fa_slack = 0xf198; + public const int fa_sliders = 0xf1de; + public const int fa_slideshare = 0xf1e7; + public const int fa_smile_o = 0xf118; + public const int fa_snapchat = 0xf2ab; + public const int fa_snapchat_ghost = 0xf2ac; + public const int fa_snapchat_square = 0xf2ad; + public const int fa_snowflake_o = 0xf2dc; + public const int fa_soccer_ball_o = 0xf1e3; + public const int fa_sort = 0xf0dc; + public const int fa_sort_alpha_asc = 0xf15d; + public const int fa_sort_alpha_desc = 0xf15e; + public const int fa_sort_amount_asc = 0xf160; + public const int fa_sort_amount_desc = 0xf161; + public const int fa_sort_asc = 0xf0de; + public const int fa_sort_desc = 0xf0dd; + public const int fa_sort_down = 0xf0dd; + public const int fa_sort_numeric_asc = 0xf162; + public const int fa_sort_numeric_desc = 0xf163; + public const int fa_sort_up = 0xf0de; + public const int fa_soundcloud = 0xf1be; + public const int fa_space_shuttle = 0xf197; + public const int fa_spinner = 0xf110; + public const int fa_spoon = 0xf1b1; + public const int fa_spotify = 0xf1bc; + public const int fa_square = 0xf0c8; + public const int fa_square_o = 0xf096; + public const int fa_stack_exchange = 0xf18d; + public const int fa_stack_overflow = 0xf16c; + public const int fa_star = 0xf005; + public const int fa_star_half = 0xf089; + public const int fa_star_half_empty = 0xf123; + public const int fa_star_half_full = 0xf123; + public const int fa_star_half_o = 0xf123; + public const int fa_star_o = 0xf006; + public const int fa_steam = 0xf1b6; + public const int fa_steam_square = 0xf1b7; + public const int fa_step_backward = 0xf048; + public const int fa_step_forward = 0xf051; + public const int fa_stethoscope = 0xf0f1; + public const int fa_sticky_note = 0xf249; + public const int fa_sticky_note_o = 0xf24a; + public const int fa_stop = 0xf04d; + public const int fa_stop_circle = 0xf28d; + public const int fa_stop_circle_o = 0xf28e; + public const int fa_street_view = 0xf21d; + public const int fa_strikethrough = 0xf0cc; + public const int fa_stumbleupon = 0xf1a4; + public const int fa_stumbleupon_circle = 0xf1a3; + public const int fa_subscript = 0xf12c; + public const int fa_subway = 0xf239; + public const int fa_suitcase = 0xf0f2; + public const int fa_sun_o = 0xf185; + public const int fa_superpowers = 0xf2dd; + public const int fa_superscript = 0xf12b; + public const int fa_support = 0xf1cd; + + public const int fa_table = 0xf0ce; + public const int fa_tablet = 0xf10a; + public const int fa_tachometer = 0xf0e4; + public const int fa_tag = 0xf02b; + public const int fa_tags = 0xf02c; + public const int fa_tasks = 0xf0ae; + public const int fa_taxi = 0xf1ba; + public const int fa_telegram = 0xf2c6; + public const int fa_television = 0xf26c; + public const int fa_tencent_weibo = 0xf1d5; + public const int fa_terminal = 0xf120; + public const int fa_text_height = 0xf034; + public const int fa_text_width = 0xf035; + public const int fa_th = 0xf00a; + public const int fa_th_large = 0xf009; + public const int fa_th_list = 0xf00b; + public const int fa_themeisle = 0xf2b2; + public const int fa_thermometer = 0xf2c7; + public const int fa_thermometer_0 = 0xf2cb; + public const int fa_thermometer_1 = 0xf2ca; + public const int fa_thermometer_2 = 0xf2c9; + public const int fa_thermometer_3 = 0xf2c8; + public const int fa_thermometer_4 = 0xf2c7; + public const int fa_thermometer_empty = 0xf2cb; + public const int fa_thermometer_full = 0xf2c7; + public const int fa_thermometer_half = 0xf2c9; + public const int fa_thermometer_quarter = 0xf2ca; + public const int fa_thermometer_three_quarters = 0xf2c8; + public const int fa_thumb_tack = 0xf08d; + public const int fa_thumbs_down = 0xf165; + public const int fa_thumbs_o_down = 0xf088; + public const int fa_thumbs_o_up = 0xf087; + public const int fa_thumbs_up = 0xf164; + public const int fa_ticket = 0xf145; + public const int fa_times = 0xf00d; + public const int fa_times_circle = 0xf057; + public const int fa_times_circle_o = 0xf05c; + public const int fa_times_rectangle = 0xf2d3; + public const int fa_times_rectangle_o = 0xf2d4; + public const int fa_tint = 0xf043; + public const int fa_toggle_down = 0xf150; + public const int fa_toggle_left = 0xf191; + public const int fa_toggle_off = 0xf204; + public const int fa_toggle_on = 0xf205; + public const int fa_toggle_right = 0xf152; + public const int fa_toggle_up = 0xf151; + public const int fa_trademark = 0xf25c; + public const int fa_train = 0xf238; + public const int fa_transgender = 0xf224; + public const int fa_transgender_alt = 0xf225; + public const int fa_trash = 0xf1f8; + public const int fa_trash_o = 0xf014; + public const int fa_tree = 0xf1bb; + public const int fa_trello = 0xf181; + public const int fa_tripadvisor = 0xf262; + public const int fa_trophy = 0xf091; + public const int fa_truck = 0xf0d1; + public const int fa_try = 0xf195; + public const int fa_tty = 0xf1e4; + public const int fa_tumblr = 0xf173; + public const int fa_tumblr_square = 0xf174; + public const int fa_turkish_lira = 0xf195; + public const int fa_tv = 0xf26c; + public const int fa_twitch = 0xf1e8; + public const int fa_twitter = 0xf099; + public const int fa_twitter_square = 0xf081; + + public const int fa_umbrella = 0xf0e9; + public const int fa_underline = 0xf0cd; + public const int fa_undo = 0xf0e2; + public const int fa_universal_access = 0xf29a; + public const int fa_university = 0xf19c; + public const int fa_unlink = 0xf127; + public const int fa_unlock = 0xf09c; + public const int fa_unlock_alt = 0xf13e; + public const int fa_unsorted = 0xf0dc; + public const int fa_upload = 0xf093; + public const int fa_usb = 0xf287; + public const int fa_usd = 0xf155; + public const int fa_user = 0xf007; + public const int fa_user_circle = 0xf2bd; + public const int fa_user_circle_o = 0xf2be; + public const int fa_user_md = 0xf0f0; + public const int fa_user_o = 0xf2c0; + public const int fa_user_plus = 0xf234; + public const int fa_user_secret = 0xf21b; + public const int fa_user_times = 0xf235; + public const int fa_users = 0xf0c0; + + public const int fa_vcard = 0xf2bb; + public const int fa_vcard_o = 0xf2bc; + public const int fa_venus = 0xf221; + public const int fa_venus_double = 0xf226; + public const int fa_venus_mars = 0xf228; + public const int fa_viacoin = 0xf237; + public const int fa_viadeo = 0xf2a9; + public const int fa_viadeo_square = 0xf2aa; + public const int fa_video_camera = 0xf03d; + public const int fa_vimeo = 0xf27d; + public const int fa_vimeo_square = 0xf194; + public const int fa_vine = 0xf1ca; + public const int fa_vk = 0xf189; + public const int fa_volume_control_phone = 0xf2a0; + public const int fa_volume_down = 0xf027; + public const int fa_volume_off = 0xf026; + public const int fa_volume_up = 0xf028; + + public const int fa_warning = 0xf071; + public const int fa_wechat = 0xf1d7; + public const int fa_weibo = 0xf18a; + public const int fa_weixin = 0xf1d7; + public const int fa_whatsapp = 0xf232; + public const int fa_wheelchair = 0xf193; + public const int fa_wheelchair_alt = 0xf29b; + public const int fa_wifi = 0xf1eb; + public const int fa_wikipedia_w = 0xf266; + public const int fa_window_close = 0xf2d3; + public const int fa_window_close_o = 0xf2d4; + public const int fa_window_maximize = 0xf2d0; + public const int fa_window_minimize = 0xf2d1; + public const int fa_window_restore = 0xf2d2; + public const int fa_windows = 0xf17a; + public const int fa_won = 0xf159; + public const int fa_wordpress = 0xf19a; + public const int fa_wpbeginner = 0xf297; + public const int fa_wpexplorer = 0xf2de; + public const int fa_wpforms = 0xf298; + public const int fa_wrench = 0xf0ad; + + public const int fa_xing = 0xf168; + public const int fa_xing_square = 0xf169; + + public const int fa_y_combinator = 0xf23b; + public const int fa_y_combinator_square = 0xf1d4; + public const int fa_yahoo = 0xf19e; + public const int fa_yc = 0xf23b; + public const int fa_yc_square = 0xf1d4; + public const int fa_yelp = 0xf1e9; + public const int fa_yen = 0xf157; + public const int fa_yoast = 0xf2b1; + public const int fa_youtube = 0xf167; + public const int fa_youtube_play = 0xf16a; + public const int fa_youtube_square = 0xf166; + } + + /// + /// ElegantIcons.ttf V1.0 + /// + public static class FontElegantIcons + { + public const int arrow_up = 0x21; + public const int arrow_down = 0x22; + public const int arrow_left = 0x23; + public const int arrow_right = 0x24; + public const int arrow_left_up = 0x25; + public const int arrow_right_up = 0x26; + public const int arrow_right_down = 0x27; + public const int arrow_left_down = 0x28; + public const int arrow_up_down = 0x29; + public const int arrow_up_down_alt = 0x2a; + public const int arrow_left_right_alt = 0x2b; + public const int arrow_left_right = 0x2c; + public const int arrow_expand_alt2 = 0x2d; + public const int arrow_expand_alt = 0x2e; + public const int arrow_condense = 0x2f; + public const int arrow_expand = 0x30; + public const int arrow_move = 0x31; + public const int arrow_carrot_up = 0x32; + public const int arrow_carrot_down = 0x33; + public const int arrow_carrot_left = 0x34; + public const int arrow_carrot_right = 0x35; + public const int arrow_carrot_2up = 0x36; + public const int arrow_carrot_2down = 0x37; + public const int arrow_carrot_2left = 0x38; + public const int arrow_carrot_2right = 0x39; + public const int arrow_carrot_up_alt2 = 0x3a; + public const int arrow_carrot_down_alt2 = 0x3b; + public const int arrow_carrot_left_alt2 = 0x3c; + public const int arrow_carrot_right_alt2 = 0x3d; + public const int arrow_carrot_2up_alt2 = 0x3e; + public const int arrow_carrot_2down_alt2 = 0x3f; + public const int arrow_carrot_2left_alt2 = 0x40; + public const int arrow_carrot_2right_alt2 = 0x41; + public const int arrow_triangle_up = 0x42; + public const int arrow_triangle_down = 0x43; + public const int arrow_triangle_left = 0x44; + public const int arrow_triangle_right = 0x45; + public const int arrow_triangle_up_alt2 = 0x46; + public const int arrow_triangle_down_alt2 = 0x47; + public const int arrow_triangle_left_alt2 = 0x48; + public const int arrow_triangle_right_alt2 = 0x49; + public const int arrow_back = 0x4a; + public const int icon_minus_06 = 0x4b; + public const int icon_plus = 0x4c; + public const int icon_close = 0x4d; + public const int icon_check = 0x4e; + public const int icon_minus_alt2 = 0x4f; + public const int icon_plus_alt2 = 0x50; + public const int icon_close_alt2 = 0x51; + public const int icon_check_alt2 = 0x52; + public const int icon_zoom_out_alt = 0x53; + public const int icon_zoom_in_alt = 0x54; + public const int icon_search = 0x55; + public const int icon_box_empty = 0x56; + public const int icon_box_selected = 0x57; + public const int icon_minus_box = 0x58; + public const int icon_plus_box = 0x59; + public const int icon_box_checked = 0x5a; + public const int icon_circle_empty = 0x5b; + public const int icon_circle_slelected = 0x5c; + public const int icon_stop_alt2 = 0x5d; + public const int icon_stop = 0x5e; + public const int icon_pause_alt2 = 0x5f; + public const int icon_pause = 0x60; + public const int icon_menu = 0x61; + public const int icon_menu_square_alt2 = 0x62; + public const int icon_menu_circle_alt2 = 0x63; + public const int icon_ul = 0x64; + public const int icon_ol = 0x65; + public const int icon_adjust_horiz = 0x66; + public const int icon_adjust_vert = 0x67; + public const int icon_document_alt = 0x68; + public const int icon_documents_alt = 0x69; + public const int icon_pencil = 0x6a; + public const int icon_pencil_edit_alt = 0x6b; + public const int icon_pencil_edit = 0x6c; + public const int icon_folder_alt = 0x6d; + public const int icon_folder_open_alt = 0x6e; + public const int icon_folder_add_alt = 0x6f; + public const int icon_info_alt = 0x70; + public const int icon_error_oct_alt = 0x71; + public const int icon_error_circle_alt = 0x72; + public const int icon_error_triangle_alt = 0x73; + public const int icon_question_alt2 = 0x74; + public const int icon_question = 0x75; + public const int icon_comment_alt = 0x76; + public const int icon_chat_alt = 0x77; + public const int icon_vol_mute_alt = 0x78; + public const int icon_volume_low_alt = 0x79; + public const int icon_volume_high_alt = 0x7a; + public const int icon_quotations = 0x7b; + public const int icon_quotations_alt2 = 0x7c; + public const int icon_clock_alt = 0x7d; + public const int icon_lock_alt = 0x7e; + public const int icon_lock_open_alt = 0xe000; + public const int icon_key_alt = 0xe001; + public const int icon_cloud_alt = 0xe002; + public const int icon_cloud_upload_alt = 0xe003; + public const int icon_cloud_download_alt = 0xe004; + public const int icon_image = 0xe005; + public const int icon_images = 0xe006; + public const int icon_lightbulb_alt = 0xe007; + public const int icon_gift_alt = 0xe008; + public const int icon_house_alt = 0xe009; + public const int icon_genius = 0xe00a; + public const int icon_mobile = 0xe00b; + public const int icon_tablet = 0xe00c; + public const int icon_laptop = 0xe00d; + public const int icon_desktop = 0xe00e; + public const int icon_camera_alt = 0xe00f; + public const int icon_mail_alt = 0xe010; + public const int icon_cone_alt = 0xe011; + public const int icon_ribbon_alt = 0xe012; + public const int icon_bag_alt = 0xe013; + public const int icon_creditcard = 0xe014; + public const int icon_cart_alt = 0xe015; + public const int icon_paperclip = 0xe016; + public const int icon_tag_alt = 0xe017; + public const int icon_tags_alt = 0xe018; + public const int icon_trash_alt = 0xe019; + public const int icon_cursor_alt = 0xe01a; + public const int icon_mic_alt = 0xe01b; + public const int icon_compass_alt = 0xe01c; + public const int icon_pin_alt = 0xe01d; + public const int icon_pushpin_alt = 0xe01e; + public const int icon_map_alt = 0xe01f; + public const int icon_drawer_alt = 0xe020; + public const int icon_toolbox_alt = 0xe021; + public const int icon_book_alt = 0xe022; + public const int icon_calendar = 0xe023; + public const int icon_film = 0xe024; + public const int icon_table = 0xe025; + public const int icon_contacts_alt = 0xe026; + public const int icon_headphones = 0xe027; + public const int icon_lifesaver = 0xe028; + public const int icon_piechart = 0xe029; + public const int icon_refresh = 0xe02a; + public const int icon_link_alt = 0xe02b; + public const int icon_link = 0xe02c; + public const int icon_loading = 0xe02d; + public const int icon_blocked = 0xe02e; + public const int icon_archive_alt = 0xe02f; + public const int icon_heart_alt = 0xe030; + public const int icon_star_alt = 0xe031; + public const int icon_star_half_alt = 0xe032; + public const int icon_star = 0xe033; + public const int icon_star_half = 0xe034; + public const int icon_tools = 0xe035; + public const int icon_tool = 0xe036; + public const int icon_cog = 0xe037; + public const int icon_cogs = 0xe038; + public const int arrow_up_alt = 0xe039; + public const int arrow_down_alt = 0xe03a; + public const int arrow_left_alt = 0xe03b; + public const int arrow_right_alt = 0xe03c; + public const int arrow_left_up_alt = 0xe03d; + public const int arrow_right_up_alt = 0xe03e; + public const int arrow_right_down_alt = 0xe03f; + public const int arrow_left_down_alt = 0xe040; + public const int arrow_condense_alt = 0xe041; + public const int arrow_expand_alt3 = 0xe042; + public const int arrow_carrot_up_alt = 0xe043; + public const int arrow_carrot_down_alt = 0xe044; + public const int arrow_carrot_left_alt = 0xe045; + public const int arrow_carrot_right_alt = 0xe046; + public const int arrow_carrot_2up_alt = 0xe047; + public const int arrow_carrot_2dwnn_alt = 0xe048; + public const int arrow_carrot_2left_alt = 0xe049; + public const int arrow_carrot_2right_alt = 0xe04a; + public const int arrow_triangle_up_alt = 0xe04b; + public const int arrow_triangle_down_alt = 0xe04c; + public const int arrow_triangle_left_alt = 0xe04d; + public const int arrow_triangle_right_alt = 0xe04e; + public const int icon_minus_alt = 0xe04f; + public const int icon_plus_alt = 0xe050; + public const int icon_close_alt = 0xe051; + public const int icon_check_alt = 0xe052; + public const int icon_zoom_out = 0xe053; + public const int icon_zoom_in = 0xe054; + public const int icon_stop_alt = 0xe055; + public const int icon_menu_square_alt = 0xe056; + public const int icon_menu_circle_alt = 0xe057; + public const int icon_document = 0xe058; + public const int icon_documents = 0xe059; + public const int icon_pencil_alt = 0xe05a; + public const int icon_folder = 0xe05b; + public const int icon_folder_open = 0xe05c; + public const int icon_folder_add = 0xe05d; + public const int icon_folder_upload = 0xe05e; + public const int icon_folder_download = 0xe05f; + public const int icon_info = 0xe060; + public const int icon_error_circle = 0xe061; + public const int icon_error_oct = 0xe062; + public const int icon_error_triangle = 0xe063; + public const int icon_question_alt = 0xe064; + public const int icon_comment = 0xe065; + public const int icon_chat = 0xe066; + public const int icon_vol_mute = 0xe067; + public const int icon_volume_low = 0xe068; + public const int icon_volume_high = 0xe069; + public const int icon_quotations_alt = 0xe06a; + public const int icon_clock = 0xe06b; + public const int icon_lock = 0xe06c; + public const int icon_lock_open = 0xe06d; + public const int icon_key = 0xe06e; + public const int icon_cloud = 0xe06f; + public const int icon_cloud_upload = 0xe070; + public const int icon_cloud_download = 0xe071; + public const int icon_lightbulb = 0xe072; + public const int icon_gift = 0xe073; + public const int icon_house = 0xe074; + public const int icon_camera = 0xe075; + public const int icon_mail = 0xe076; + public const int icon_cone = 0xe077; + public const int icon_ribbon = 0xe078; + public const int icon_bag = 0xe079; + public const int icon_cart = 0xe07a; + public const int icon_tag = 0xe07b; + public const int icon_tags = 0xe07c; + public const int icon_trash = 0xe07d; + public const int icon_cursor = 0xe07e; + public const int icon_mic = 0xe07f; + public const int icon_compass = 0xe080; + public const int icon_pin = 0xe081; + public const int icon_pushpin = 0xe082; + public const int icon_map = 0xe083; + public const int icon_drawer = 0xe084; + public const int icon_toolbox = 0xe085; + public const int icon_book = 0xe086; + public const int icon_contacts = 0xe087; + public const int icon_archive = 0xe088; + public const int icon_heart = 0xe089; + public const int icon_profile = 0xe08a; + public const int icon_group = 0xe08b; + public const int icon_grid_2x2 = 0xe08c; + public const int icon_grid_3x3 = 0xe08d; + public const int icon_music = 0xe08e; + public const int icon_pause_alt = 0xe08f; + public const int icon_phone = 0xe090; + public const int icon_upload = 0xe091; + public const int icon_download = 0xe092; + public const int social_facebook = 0xe093; + public const int social_twitter = 0xe094; + public const int social_pinterest = 0xe095; + public const int social_googleplus = 0xe096; + public const int social_tumblr = 0xe097; + public const int social_tumbleupon = 0xe098; + public const int social_wordpress = 0xe099; + public const int social_instagram = 0xe09a; + public const int social_dribbble = 0xe09b; + public const int social_vimeo = 0xe09c; + public const int social_linkedin = 0xe09d; + public const int social_rss = 0xe09e; + public const int social_deviantart = 0xe09f; + public const int social_share = 0xe0a0; + public const int social_myspace = 0xe0a1; + public const int social_skype = 0xe0a2; + public const int social_youtube = 0xe0a3; + public const int social_picassa = 0xe0a4; + public const int social_googledrive = 0xe0a5; + public const int social_flickr = 0xe0a6; + public const int social_blogger = 0xe0a7; + public const int social_spotify = 0xe0a8; + public const int social_delicious = 0xe0a9; + public const int social_facebook_circle = 0xe0aa; + public const int social_twitter_circle = 0xe0ab; + public const int social_pinterest_circle = 0xe0ac; + public const int social_googleplus_circle = 0xe0ad; + public const int social_tumblr_circle = 0xe0ae; + public const int social_stumbleupon_circle = 0xe0af; + public const int social_wordpress_circle = 0xe0b0; + public const int social_instagram_circle = 0xe0b1; + public const int social_dribbble_circle = 0xe0b2; + public const int social_vimeo_circle = 0xe0b3; + public const int social_linkedin_circle = 0xe0b4; + public const int social_rss_circle = 0xe0b5; + public const int social_deviantart_circle = 0xe0b6; + public const int social_share_circle = 0xe0b7; + public const int social_myspace_circle = 0xe0b8; + public const int social_skype_circle = 0xe0b9; + public const int social_youtube_circle = 0xe0ba; + public const int social_picassa_circle = 0xe0bb; + public const int social_googledrive_alt2 = 0xe0bc; + public const int social_flickr_circle = 0xe0bd; + public const int social_blogger_circle = 0xe0be; + public const int social_spotify_circle = 0xe0bf; + public const int social_delicious_circle = 0xe0c0; + public const int social_facebook_square = 0xe0c1; + public const int social_twitter_square = 0xe0c2; + public const int social_pinterest_square = 0xe0c3; + public const int social_googleplus_square = 0xe0c4; + public const int social_tumblr_square = 0xe0c5; + public const int social_stumbleupon_square = 0xe0c6; + public const int social_wordpress_square = 0xe0c7; + public const int social_instagram_square = 0xe0c8; + public const int social_dribbble_square = 0xe0c9; + public const int social_vimeo_square = 0xe0ca; + public const int social_linkedin_square = 0xe0cb; + public const int social_rss_square = 0xe0cc; + public const int social_deviantart_square = 0xe0cd; + public const int social_share_square = 0xe0ce; + public const int social_myspace_square = 0xe0cf; + public const int social_skype_square = 0xe0d0; + public const int social_youtube_square = 0xe0d1; + public const int social_picassa_square = 0xe0d2; + public const int social_googledrive_square = 0xe0d3; + public const int social_flickr_square = 0xe0d4; + public const int social_blogger_square = 0xe0d5; + public const int social_spotify_square = 0xe0d6; + public const int social_delicious_square = 0xe0d7; + public const int icon_printer = 0xe103; + public const int icon_calulator = 0xe0ee; + public const int icon_building = 0xe0ef; + public const int icon_floppy = 0xe0e8; + public const int icon_drive = 0xe0ea; + public const int icon_search_2 = 0xe101; + public const int icon_id = 0xe107; + public const int icon_id_2 = 0xe108; + public const int icon_puzzle = 0xe102; + public const int icon_like = 0xe106; + public const int icon_dislike = 0xe0eb; + public const int icon_mug = 0xe105; + public const int icon_currency = 0xe0ed; + public const int icon_wallet = 0xe100; + public const int icon_pens = 0xe104; + public const int icon_easel = 0xe0e9; + public const int icon_flowchart = 0xe109; + public const int icon_datareport = 0xe0ec; + public const int icon_briefcase = 0xe0fe; + public const int icon_shield = 0xe0f6; + public const int icon_percent = 0xe0fb; + public const int icon_globe = 0xe0e2; + public const int icon_globe_2 = 0xe0e3; + public const int icon_target = 0xe0f5; + public const int icon_hourglass = 0xe0e1; + public const int icon_balance = 0xe0ff; + public const int icon_rook = 0xe0f8; + public const int icon_printer_alt = 0xe0fa; + public const int icon_calculator_alt = 0xe0e7; + public const int icon_building_alt = 0xe0fd; + public const int icon_floppy_alt = 0xe0e4; + public const int icon_drive_alt = 0xe0e5; + public const int icon_search_alt = 0xe0f7; + public const int icon_id_alt = 0xe0e0; + public const int icon_id_2_alt = 0xe0fc; + public const int icon_puzzle_alt = 0xe0f9; + public const int icon_like_alt = 0xe0dd; + public const int icon_dislike_alt = 0xe0f1; + public const int icon_mug_alt = 0xe0dc; + public const int icon_currency_alt = 0xe0f3; + public const int icon_wallet_alt = 0xe0d8; + public const int icon_pens_alt = 0xe0db; + public const int icon_easel_alt = 0xe0f0; + public const int icon_flowchart_alt = 0xe0df; + public const int icon_datareport_alt = 0xe0f2; + public const int icon_briefcase_alt = 0xe0f4; + public const int icon_shield_alt = 0xe0d9; + public const int icon_percent_alt = 0xe0da; + public const int icon_globe_alt = 0xe0de; + public const int icon_clipboard = 0xe0e6; + } +} \ No newline at end of file diff --git a/SunnyUI/Font/UIFontImages.cs b/SunnyUI/Font/UIFontImages.cs new file mode 100644 index 00000000..92ed35a5 --- /dev/null +++ b/SunnyUI/Font/UIFontImages.cs @@ -0,0 +1,312 @@ +/****************************************************************************** + * SunnyUI 开源控件库、工具类库、扩展类库、多页面开发框架。 + * CopyRight (C) 2012-2020 ShenYongHua(沈永华). + * QQ群:56829229 QQ:17612584 EMail:SunnyUI@qq.com + * + * Blog: https://www.cnblogs.com/yhuse + * Gitee: https://gitee.com/yhuse/SunnyUI + * GitHub: https://github.com/yhuse/SunnyUI + * + * SunnyUI.dll can be used for free under the GPL-3.0 license. + * If you use this code, please keep this note. + * 如果您使用此代码,请保留此说明。 + ****************************************************************************** + * 文件名称: UIFontImages.cs + * 文件说明: 字体图片属性窗体 + * 当前版本: V2.2 + * 创建日期: 2020-01-01 + * + * 2020-01-01: V2.2.0 增加文件说明 +******************************************************************************/ + +using System; +using System.Collections.Concurrent; +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Reflection; +using System.Windows.Forms; + +namespace Sunny.UI +{ + /// + /// 字体图标编辑器 + /// + public partial class UIFontImages : Form + { + private readonly ConcurrentQueue