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=
+
+
+
+
+ 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
+
+
+
\ 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