{"id":28470694,"url":"https://github.com/abdisamadmoh/csharp-chatui-winforms","last_synced_at":"2025-07-01T20:32:48.190Z","repository":{"id":44895090,"uuid":"212661898","full_name":"AbdisamadMoh/CSharp-ChatUI-Winforms","owner":"AbdisamadMoh","description":"Beautiful Chat components for C# Windows forms including Chat User, Chat Header, Chat Bubbles, TypingBox, SearchBox and BeautyForm","archived":false,"fork":false,"pushed_at":"2025-04-05T09:30:30.000Z","size":470,"stargazers_count":76,"open_issues_count":1,"forks_count":22,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-06-07T10:05:58.868Z","etag":null,"topics":["abdisamad","bubbles","chat","chatui","csharp","message","ui","winform"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AbdisamadMoh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-10-03T19:25:50.000Z","updated_at":"2025-05-31T12:39:22.000Z","dependencies_parsed_at":"2025-06-07T10:15:51.279Z","dependency_job_id":null,"html_url":"https://github.com/AbdisamadMoh/CSharp-ChatUI-Winforms","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AbdisamadMoh/CSharp-ChatUI-Winforms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbdisamadMoh%2FCSharp-ChatUI-Winforms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbdisamadMoh%2FCSharp-ChatUI-Winforms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbdisamadMoh%2FCSharp-ChatUI-Winforms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbdisamadMoh%2FCSharp-ChatUI-Winforms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AbdisamadMoh","download_url":"https://codeload.github.com/AbdisamadMoh/CSharp-ChatUI-Winforms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbdisamadMoh%2FCSharp-ChatUI-Winforms/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263033185,"owners_count":23403113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["abdisamad","bubbles","chat","chatui","csharp","message","ui","winform"],"created_at":"2025-06-07T10:05:40.097Z","updated_at":"2025-07-01T20:32:48.160Z","avatar_url":"https://github.com/AbdisamadMoh.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# C# ChatUI\n### Beautiful and responsive c# windform Chat bubble/chat speech.\nI was searching for a beautiful Chat bubble for C# winform, but the only one i could find was that of Telerik which was not free. So i decided to write one.\n\n#### Check SaaUI at \u003ca href=\"https://saabytes.com\"\u003ehttps://saabytes.com\u003c/a\u003e, it has chat bubble and alot more beautiful controls and is free for both personal and commercial use.\n## ScreenShots\n\n![Alt text](https://github.com/AbdisamadMoh/CSharp-ChatUI-Winforms/blob/master/Scr1.PNG?raw=true \"\")\n![Alt text](https://github.com/AbdisamadMoh/CSharp-ChatUI-Winforms/blob/master/Scr2.PNG?raw=true \"\")\n\n\n## Usage\n\nAll components in this project are responsive and u dont need to worry about when ur window or container resizes. They will also resize them with the same space percentage, and their look will be same.\n\n\n\n### Components\n##### \u003ca href=\"#BeautyForm\"\u003eBeautyForm\u003c/a\u003e\n##### \u003ca href=\"#ChatHeader\"\u003eChatHeader\u003c/a\u003e\n##### \u003ca href=\"#TypingBox\"\u003eTypingBox\u003c/a\u003e\n##### \u003ca href=\"#SearchBox\"\u003eSearchBox\u003c/a\u003e\n##### \u003ca href=\"#Users\"\u003eUsers\u003c/a\u003e\n##### \u003ca href=\"#Bubbles\"\u003eBubbles (2)\u003c/a\u003e\n\n### \u003cdiv id=\"BeautyForm\"\u003e BeautyForm\u003c/div\u003e\nA beautiful form with with round corners. See screenshots above.\n ``` C#\npublic partial class Form1 : chat.BeautyForm\n    {\n        public Form1()\n        {\n            InitializeComponent();\n        }\n```\n### \u003cdiv id=\"#ChatHeader\"\u003eChatHeader\u003c/div\u003e\nSee screenshots above, the uppermost part where user details is displayed. It has User profile image, title, status, call, video call, dot menu.\n\n ``` C#\nchat.ChatHeader chatHeader1 = new chat.ChatHeader();\n\nchatHeader1.UserTitle = \"Abdisamad Moh.\"; // Gets/Sets user title\nchatHeader1.UserStatusText = \"Typing...\"; // Gets/Sets User status text.\nchatHeader1.UserImage = Some_Image; // Gets/Sets User profile image\n\nchatHeader1.OnCallClick+= Double tab to complete. // Fires when user clicks  Call icon\nchatHeader1.OnVideoCallClick+= Double tab to complete. // Fires when user clicks Video Call icon\nchatHeader1.OnUserImageClick+= Double tab to complete. // Fires when user clicks  Profile Image\nchatHeader1.OnUserStatusTextClick+= Double tab to complete. // Fires when user clicks User status Text\nchatHeader1.OnUserTitleClick+= Double tab to complete. // Fires when user clicks User Title Text\nchatHeader1.OnMenuDotClick+= Double tab to complete. // Fires when user clicks Dot menu\n\n```\n\n### \u003cdiv id=\"#TypingBox\"\u003eTypingBox\u003c/div\u003e\nBeautiful User typing box with embedded Emoji icon, File attachment icon.\n\n ``` C#\n chat.TypingBox typingBox1 = new chat.TypingBox();\n\ntypingBox1.Value = \"Hi\"; //Gets/Sets text of the typingBox.\n\ntypingBox1.OnTypingTextChanged+= Double tab to complete. // Fires when user writes something into the typingBox. This fires per character.\ntypingBox1.OnHitEnter+= Double tab to complete. // Fires when user hits ENTER key while the typingBox is focused. This fires before newline is created in the typingBox. SHIFT+ENTER will also create newline without firing this event.\ntypingBox1.OnEmojiClicked+= Double tab to complete. // Fires when user clicks Emoji icon in the typingBox.\ntypingBox1.OnAttachmentClicked+= Double tab to complete. // Fires when user clicks File attachment icon in the typingBox.\n\n```\n\n### \u003cdiv id=\"#SearchBox\"\u003eSearchBox\u003c/div\u003e\nSee the screenshots above, that textbox with 'search watermark' and underlining line, That is  searchBox.\n\n ``` C#\nchat.SearchBox searchBox1 = new chat.SearchBox();\n\nsearchBox1.Value = \"Something\"; //Gets/Sets value in the searchBox.\nsearchBox1.TextColor =Color.GradientActiveCaption; //Gets/Sets text color and the bottom line color of the searchBox.\nsearchBox1.FocusedColor =  Color.WhiteSmoke; //Gets/Sets text color and the bottom line color of the searchBox when it is focused.\nsearchBox1.UnFocusedColor = Color.GradientActiveCaption; //Gets/Sets text color and the bottom line color of the searchBox when it is not focused.\n\nsearchBox1.OnSearchTextChanged+= Double tab to complete. // Fires when user writes something into the typingBox. This fires per character.\nsearchBox1.OnHitEnter+= Double tab to complete. // Fires when user hits ENTER key while the searchBox is focused. \n\n```\n\n### \u003cdiv id=\"#Users\"\u003eUsers\u003c/div\u003e\nBeautiful and customizable User control with Profile image, Username(Title name), user status text, user status mode.\nSee users on left side in the screenshots above.\n ``` C#\nchat.Users user1= new chat.Users();\n\nuser1.Username = \"Abdisamad Moh.\"; // Gets/Sets username or user title.\nuser1.UserStatus = Status.Online; //Option/Enum, Gets/Sets user status mode. Online, Away, Offline. U can add more if u want.\nuser1.StatusMessage = \"Online\"; //Gets/Sets status message\nuser1.UserImage = Some_Image;//Gets/Sets User profile image.\nuser1.ProfileImageCursor = Cursors.Hand; //Gets/Sets mouse cursor when user hovers mouse pointer over userImage.\n\nuser1.OnClick +=  Double tab to complete. // Fires when anywhere on the user is clicked Including Username, statusText and StatusMode. However they will be excluded if u give them their own event.\nuser1.OnUserTitleClick +=  Double tab to complete. // will fire when user clicks Username/Title. In this case, user1.OnClick will not be fired when user clicks on Username/Title.\nuser1.OnUserStatusClick +=  Double tab to complete. // will fire when user clicks user status text. In this case, user1.OnClick will not be fired when user clicks on user status text..\nuser1.OnUserStatusClick +=  Double tab to complete. // will fire when user clicks user status mode icon. In this case, user1.OnClick will not be fired when user clicks on user status mode icon.\nuser1.OnProfileImageClick +=  Double tab to complete. // will fire when user clicks user profile image. In this case, user1.OnClick will not be fired when user clicks on user profile image.\n\n//NOTE: Always use  'OnClick' event for this control instead of 'Click' event. 'OnClick' will take care of all other sub events. Double clicking this control on design time will generate 'Click' event instead of 'OnClick' event which is not recommended. In your Properties explorer find 'OnClick' event and double click to generate 'OnClick' event.\n\n```\n\n### \u003cdiv id=\"#Bubbles\"\u003eBubbles (2)\u003c/div\u003e\nSee screenshots, those chating messages are the speech bubble. in this Project there are two bubbles, 'MeBubble' and 'YouBubble'. Both have same properties and events but their usage is different. 'MeBubble' is for outgoing chats and 'YouBubble' is for incoming chats.\n\nIn this example i will use 'MeBubble'. Both works same way, have same properties and events. Only the name and the usage are different.\n\n ``` C#\nchat.MeBubble meBubble1 = new chat.MeBubble();\n\nmeBubble1.Body = \"This is a sample message text\"; //Gets/Sets message body.\nmeBubble1.MsgColor = Color.DodgerBlue; //Gets/Sets Message background color. \n//NOTE: 'BackColor' will change the whole control's background color while 'MsgColor' will only change the message Body part.\nmeBubble1.MsgTextColor = Color.White;//Gets/Sets message text color.\nmeBubble1.ChatImageCursor = Cursors.Default; //Gets/Sets mouse cursor when it hovers over Bubble profile image.\nmeBubble1.ChatTextCursor = Cursors.IBeam; //Gets/Sets mouse cursor when it hovers over chat body.\nmeBubble1.Status = MessageStatus.Delivered;//Option/Enum, Gets/Sets Message status. This is the tick option. Options:  Sending, Sent, Delivered, Read,  Error,  None, Custom. where None will hide the tick option and Custom will give u option to put what u want.\nmeBubble1.StatusImage = Some_Image; //Gets/Sets custom image for the message status option, that is the tick option.\nmeBubble1.Time = \"11:44 PM\"; //Gets/Sets time of the chat bubble.\nmeBubble1.TimeColor = Color.White; //Gets/Sets Text Color of the time.\nmeBubble1.UserImage = Some_Image; //Gets/Sets Image of the bubble profile image.\n\nmeBubble1.OnChatTextClick+= Double tab to complete. //Fires when user clicks message body part.\nmeBubble1.OnChatImageClick+= Double tab to complete. //Fires when user clicks the Profile picture of the bubble..\n\n\n```\n\n\n\n\n\n## MIT License\n\nCopyright (c) Abdisamad Moh\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice may(or not) be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdisamadmoh%2Fcsharp-chatui-winforms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabdisamadmoh%2Fcsharp-chatui-winforms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdisamadmoh%2Fcsharp-chatui-winforms/lists"}