From 7ab260ae19aa94e2313bdfd016b56b65ea67025a Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Wed, 15 Jul 2026 14:36:43 +0530 Subject: [PATCH 01/11] Committing the Updated SkinManager UG --- WindowsForms/skins/Getting-Started.md | 50 +++++++++++++++++---------- WindowsForms/skins/Overview.md | 8 +++-- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/WindowsForms/skins/Getting-Started.md b/WindowsForms/skins/Getting-Started.md index dc69e2a4b..6f448620a 100644 --- a/WindowsForms/skins/Getting-Started.md +++ b/WindowsForms/skins/Getting-Started.md @@ -13,7 +13,9 @@ This section briefly describes how to create a new Windows Forms project in Visu ## Assembly deployment and theme assemblies -SkinManager presents in the `Syncfusion.Shared.Base` assembly. +SkinManager is present in the `Syncfusion.Shared.Base` assembly. + +N> Prerequisite: The corresponding Syncfusion WinForms assemblies (e.g., `Syncfusion.Shared.Base`, and the theme-specific assemblies listed below) must be referenced in the project. The Syncfusion WinForms Toolbox installer / Visual Studio extension must be installed for the SkinManager component to appear in the toolbox. @@ -74,13 +76,17 @@ SkinManager.LoadAssembly(GetType(Syncfusion.WinForms.Themes.Office2016Theme).Ass {% endtabs %} -## Adding skin manager component +## Adding SkinManager component ## Through designer 1) Create a new Windows Forms application in Visual Studio. -2) The `SkinManager` component can be added to designer by dragging it from the toolbox to the design view. +2) Open the target form in the designer. + +3) The `SkinManager` component can be added to the designer by dragging it from the toolbox to the design view. + +4) Select the `SkinManager` component on the form and use the `Controls` property in the Properties window to choose the control or form to which the theme should be applied. The following dependent assemblies will be added automatically: @@ -98,13 +104,13 @@ N> SkinManager does not support the custom themes ( themes generated using Theme ### Applying theme to the form -Skin manager supports to apply theme for all the control in the form or a container by applying theme to the form or container. So, you do not need to apply theme for each control. +SkinManager supports applying a theme for all controls in the form or a container by applying the theme to the form or container. So, you do not need to apply the theme for each control. ![WinForms Skin Manager apply theme to entire form](skin_images/winforms-skin-manager-apply-theme-to-the-entire-form.png) ## Through code -Theme for a control or form can be applied by settings `Controls` property of `SkinManager`. +Theme for a control or form can be applied by setting the `Controls` property of `SkinManager`. {% tabs %} @@ -132,7 +138,7 @@ skinManager1.Controls = treeViewAdv1 ### Applying theme to the form -Skin manager supports to apply theme for all the control in the form or a container by applying theme to the form or container. So, you do not need to apply theme for each control. +SkinManager supports applying a theme for all controls in the form or a container by applying the theme to the form or container. So, you do not need to apply the theme for each control. {% tabs %} @@ -156,27 +162,27 @@ skinManager1.VisualTheme = VisualTheme.Office2016Black ## Apply Themes to entire application -Skin manager allows to apply theme for all the controls and forms in an application by setting the [ApplicationVisualTheme](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.SkinManager.html#Syncfusion_Windows_Forms_SkinManager_ApplicationVisualTheme) property. It allows you to theme entire application using single `ApplicationVisualTheme` property. +SkinManager allows you to apply a theme to all controls and forms in an application by setting the [ApplicationVisualTheme](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.SkinManager.html#Syncfusion_Windows_Forms_SkinManager_ApplicationVisualTheme) property. It allows you to theme the entire application using a single `ApplicationVisualTheme` property. {% tabs %} {% highlight c# %} static void Main() { - SkinManager.ApplicationVisualTheme = "Office2019Colourful"; + SkinManager.ApplicationVisualTheme = "Office2019Colorful"; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } -{% endhighlight c# %} +{% endhighlight %} {% endtabs %} -N> Set the `ApplicationVisualTheme` property before main form is initialized. +N> Set the `ApplicationVisualTheme` property before the main form is initialized. ## Apply theme for individual control -Theme can be applied to individual component using skin manager or by setting the `ThemeName` property. You need to call the [LoadAssembly](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.SkinManager.html#Syncfusion_Windows_Forms_SkinManager_LoadAssembly_System_Reflection_Assembly_) method for required themes when applying using the `ThemeName` property also. +Theme can be applied to an individual control using SkinManager or by setting the `ThemeName` property. You need to call the [LoadAssembly](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.SkinManager.html#Syncfusion_Windows_Forms_SkinManager_LoadAssembly_System_Reflection_Assembly_) method for required themes when applying using the `ThemeName` property also. {% tabs %} @@ -198,13 +204,15 @@ Me.treeViewAdv1.ThemeName = "Office2019Colorful" ## Theme studio based themes -The Office2019Colorful and HighContrastBlack themes can be customized using the WinForms theme studio. Refer to the theme studio documentation to know how to create custom themes. +The Office2019Colorful and HighContrastBlack themes can be customized using the WinForms Theme Studio. Refer to the Theme Studio documentation to know how to create custom themes. -N> Appearance customization settings done in control level will not take effect when theme studio based theme is applied. So, for customization, refer to the Style section. +Use `Office2019Colorful` for a colorful, modern look and `HighContrastBlack` for high-contrast accessibility scenarios. + +N> Appearance customization settings done at the control level will not take effect when a Theme Studio based theme is applied. So, for customization, refer to the Style section. ### Change font for entire application -When using theme studio based themes, the font for entire application can be customized by setting the [CanOverrideFontFamily](https://help.syncfusion.com/cr/windowsforms/Syncfusion.WinForms.Theme.FontHelper.html#Syncfusion_WinForms_Theme_FontHelper_CanOverrideFontFamily) property to true. This property is used only in constructor. +When using Theme Studio based themes, the font for the entire application can be customized by setting the [CanOverrideFontFamily](https://help.syncfusion.com/cr/windowsforms/Syncfusion.WinForms.Theme.FontHelper.html#Syncfusion_WinForms_Theme_FontHelper_CanOverrideFontFamily) property to true. This property is used only in a constructor. {% tabs %} @@ -228,11 +236,11 @@ FontHelper.FontFamily = New FontFamily("Algerian") ### Styles -When using theme studio based themes, the appearance for each control or component can be customized using the `ThemeStyle` property. +When using Theme Studio based themes, the appearance for each control or component can be customized using the `ThemeStyle` property. N> If the control name starts with **Sf**, you can access appearance properties using the `Style` property, and for the remaining controls, use the `ThemeStyle` property. -For example, in the following code, different style of each control has been changed. +For example, in the following code, the style of each control has been changed. {% tabs %} @@ -262,9 +270,9 @@ Me.treeViewAdv1.ThemeStyle.TreeNodeAdvStyle.TextColor = System.Drawing.Color.Red ### Overriding user customization when applying theme -You can customize the appearance of control using the `Style` or `ThemeStyle` property when using theme studio based themes. Syncfusion control provides option whether theme can override style settings using the `CanOverrideStyle` property. +You can customize the appearance of a control using the `Style` or `ThemeStyle` property when using Theme Studio based themes. The Syncfusion control provides an option for whether the theme can override style settings using the `CanOverrideStyle` property. -For example, in the following code, TreeView fore color is customized, and theme is applied after that line. If you run the application, theme will not override the fore color settings since the default value of `CanOverrideStyle` is `false`. If you set the `CanOverrideStyle` property to `true` before setting the theme, then fore color setting will be overridden by theme. +For example, in the following code, the TreeView foreground color is customized, and the theme is applied after that line. If you run the application, the theme will not override the foreground color settings since the default value of `CanOverrideStyle` is `false`. If you set the `CanOverrideStyle` property to `true` before setting the theme, then the foreground color setting will be overridden by the theme. {% tabs %} @@ -287,3 +295,9 @@ Me.treeViewAdv1.ThemeStyle.TreeNodeAdvStyle.TextColor = System.Drawing.Color.Red {% endtabs %} ![WinForms Skin Manager shows Office2019 theme applied in control](skin_images/winforms-skin-manager-shows-office2019-theme.png) + +## Troubleshooting + +* **Theme not applied:** Ensure the `Syncfusion.Shared.Base` assembly and the required theme assembly are referenced in the project, and that the SkinManager is associated with the target control or form via the `Controls` property. +* **Missing theme assembly errors:** When using Office2016Theme, Office2019Theme, or HighContrastTheme, call `SkinManager.LoadAssembly` (see [Loading theme assemblies](#loading-theme-assemblies)) before setting `ApplicationVisualTheme` or `ThemeName`. +* **Custom styles overridden by theme:** Set `CanOverrideStyle = true` on the control before applying the theme if you want the theme to override control-level `Style` or `ThemeStyle` settings. \ No newline at end of file diff --git a/WindowsForms/skins/Overview.md b/WindowsForms/skins/Overview.md index 03468570c..7401c1b39 100644 --- a/WindowsForms/skins/Overview.md +++ b/WindowsForms/skins/Overview.md @@ -24,9 +24,9 @@ This feature enables you to easily apply uniform style for all the child control ## IT scenarios -When you create an application with multiple controls, you can apply uniform color for the entire form using this feature. +When you create an application with multiple Syncfusion controls, you can apply a uniform color for the entire form using the SkinManager component. -Properties and Methods Tables for Skin Manager +## Properties and Methods Tables for Skin Manager ### Properties @@ -74,3 +74,7 @@ NA
Void NA
+ +## Next Steps + +Refer to the [Getting Started](https://help.syncfusion.com/windowsforms/skins/getting-started) page to create a new project and apply themes using the SkinManager component. From 7be916b8d68e2d855e16eb9082972adac1304393 Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Wed, 15 Jul 2026 19:14:08 +0530 Subject: [PATCH 02/11] Committing the Updated UG content for listed documentation files --- WindowsForms/Add-Syncfusion-Controls.md | 12 +- ...atibility-with-the-NIST-MBARK-framework.md | 4 +- WindowsForms/Control-Dependencies.md | 2 +- WindowsForms/Deployment.md | 6 +- WindowsForms/Featured-Samples.md | 10 +- WindowsForms/HighDPI-support.md | 26 ++-- WindowsForms/Installation.md | 8 +- WindowsForms/Localization.md | 14 +- WindowsForms/Overview.md | 14 +- WindowsForms/System-Requirements.md | 8 +- WindowsForms/Touch-Support.md | 7 +- WindowsForms/arm-support.md | 2 +- WindowsForms/dotnet-core-compatibility.md | 14 +- .../dotnet-core-designtime-feature.md | 8 +- .../dotnet-framework-compatibility.md | 4 +- WindowsForms/right-to-left.md | 4 +- WindowsForms/skins/Getting-Started.md | 8 +- WindowsForms/theme-studio/theme-studio.md | 143 ++++++++++++++---- 18 files changed, 189 insertions(+), 105 deletions(-) diff --git a/WindowsForms/Add-Syncfusion-Controls.md b/WindowsForms/Add-Syncfusion-Controls.md index 82f95838a..00bd5246f 100644 --- a/WindowsForms/Add-Syncfusion-Controls.md +++ b/WindowsForms/Add-Syncfusion-Controls.md @@ -150,13 +150,13 @@ The following steps direct you to create the Syncfusion® Windows For ![Add-Syncfusion-Control_images5](Add-Syncfusion-Control_images\Syncfusion-Project-Template-Gallery-5.png) -4. Once the Project Configuration Wizard is done, the Syncfusion® Windows Forms project is created with required references and forms. +4. Once the Project Configuration Wizard is done, the Syncfusion® Windows Forms project is created with the required references and forms. ![Add-Syncfusion-Control_images6](Add-Syncfusion-Control_images\Syncfusion-Project-Template-Gallery-6.png) ![Add-Syncfusion-Control_images7](Add-Syncfusion-Control_images\Syncfusion-Project-Template-Gallery-7.png) -5. Then, Syncfusion® licensing registration required message box will be shown as follow, if you are installed the trial setup or NuGet packages since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Please navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) which is shown in the licensing message box to generate and register the Syncfusion® license key to your project. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2.aspx) post for understanding the licensing changes introduced in Essential Studio®. +5. Then, Syncfusion® licensing registration required message box will be shown as follow, if you have installed the trial setup or NuGet packages since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Please navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) which is shown in the licensing message box to generate and register the Syncfusion® license key to your project. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2.aspx) post for understanding the licensing changes introduced in Essential Studio®. ![Add-Syncfusion-Control_images8](Add-Syncfusion-Control_images\Syncfusion-Project-Template-Gallery-8.png) @@ -191,7 +191,7 @@ This is a combo box where you can choose the application’s platform. For now i #### Version -Syncfusion’s Installed Build Versions are listed for Syncfusion® Essential Studio® v13.1.0.21 and later, for the installed Windows Forms platform. +Syncfusion's Installed Build Versions are listed for Syncfusion® Essential Studio® v13.1.0.21 and later, for the installed Windows Forms platform. #### Template Gallery @@ -201,13 +201,13 @@ When Add button is clicked, then the selected item template is added to the proj ![Add-Syncfusion-Control_images5](Add-Syncfusion-Control_images\Syncfusion-Item-Template-Gallery-5.png) -5.Then, Syncfusion® licensing registration required message box will be shown as follow, if you are installed the trial setup or NuGet packages since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Please navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) which is shown in the licensing message box to generate and register the Syncfusion® license key to your project. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2.aspx) post for understanding the licensing changes introduced in Essential Studio®. +5. Then, Syncfusion® licensing registration required message box will be shown as follow, if you have installed the trial setup or NuGet packages since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Please navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) which is shown in the licensing message box to generate and register the Syncfusion® license key to your project. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2.aspx) post for understanding the licensing changes introduced in Essential Studio®. ![Add-Syncfusion-Control_images8](Add-Syncfusion-Control_images\Syncfusion-Project-Template-Gallery-8.png) ### Using Visual Studio Add new Item -Syncfusion® Project Template can be also add from the Visual Studio Item Template. Right-click on the Windows Forms Project Add ->New Item. You can refer to the following screenshot for more information. +Syncfusion® Project Template can also be added from the Visual Studio Item Template. Right-click on the Windows Forms Project Add ->New Item. You can refer to the following screenshot for more information. ![Add-Syncfusion-Control_images1](Add-Syncfusion-Control_images\Syncfusion-Add-New-Item-1.png) @@ -221,6 +221,6 @@ Syncfusion® Project Template can be also add from the Visual Studio ![Add-Syncfusion-Control_images4](Add-Syncfusion-Control_images\Syncfusion-Add-New-Item-4.png) -3. Then, Syncfusion® licensing registration required message box will be shown as follow, if you are installed the trial setup or NuGet packages since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Please navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) which is shown in the licensing message box to generate and register the Syncfusion® license key to your project. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2.aspx) post for understanding the licensing changes introduced in Essential Studio®. +3. Then, Syncfusion® licensing registration required message box will be shown as follow, if you have installed the trial setup or NuGet packages since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Please navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/overview#how-to-generate-syncfusion-license-key) which is shown in the licensing message box to generate and register the Syncfusion® license key to your project. Refer to this [blog](https://www.syncfusion.com/blogs/post/whats-new-in-2018-volume-2.aspx) post for understanding the licensing changes introduced in Essential Studio®. ![Add-Syncfusion-Control_images8](Add-Syncfusion-Control_images\Syncfusion-Project-Template-Gallery-8.png) diff --git a/WindowsForms/Compatibility-with-the-NIST-MBARK-framework.md b/WindowsForms/Compatibility-with-the-NIST-MBARK-framework.md index f7b090c33..4d8849e18 100644 --- a/WindowsForms/Compatibility-with-the-NIST-MBARK-framework.md +++ b/WindowsForms/Compatibility-with-the-NIST-MBARK-framework.md @@ -1,7 +1,7 @@ --- layout: post title: Syncfusion Component Compatibility with the NIST MBARK Framework -description: Syncfusion components has the Compatibility with the NIST MBARK Framework. It helps to develop a large database of face, fingerprint and iris images. +description: Syncfusion components have compatibility with the NIST MBARK Framework. It helps to develop a large database of face, fingerprint, and iris images. platform: WindowsForms control: Introduction documentation: ug @@ -12,4 +12,4 @@ documentation: ug # Compatibility with the NIST MBARK Framework Syncfusion components are compatible with the [NIST's MBARK](https://www.nist.gov/services-resources/software/multimodal-biometric-application-resource-kit-mbark) Framework applications. `NIST MBARK` is public domain source code that may be leveraged to develop the next generation of biometric and personal identity verification applications. `NIST MBARK` application is based on .NET 3.5 SP1 Framework and latest .NET Framework versions. Incorporating the `MBARK` libraries can yield a variety of enhancements critical for the success of any real-world system. -`NIST's MBARK` is originally envisioned as a tool to develop a large database of face, fingerprint and iris images for performance testing of biometric systems. `MBARK` has evolved into a standardized, flexible middle ware package that will enable organizations to plug in sensors from different manufacturers. \ No newline at end of file +`NIST's MBARK` is originally envisioned as a tool to develop a large database of face, fingerprint and iris images for performance testing of biometric systems. `MBARK` has evolved into a standardized, flexible middleware package that will enable organizations to plug in sensors from different manufacturers. \ No newline at end of file diff --git a/WindowsForms/Control-Dependencies.md b/WindowsForms/Control-Dependencies.md index 63149d5fe..e5932d59f 100644 --- a/WindowsForms/Control-Dependencies.md +++ b/WindowsForms/Control-Dependencies.md @@ -1150,7 +1150,7 @@ Syncfusion.GridExport.WinForms -## GridDataBoundGrid(Classic) +## GridDataBoundGrid (Classic) diff --git a/WindowsForms/Deployment.md b/WindowsForms/Deployment.md index 33baefc76..f76a7b67a 100644 --- a/WindowsForms/Deployment.md +++ b/WindowsForms/Deployment.md @@ -12,7 +12,7 @@ documentation: ug ## Copy Local -Copying assembly in local folder is supported by the Syncfusion assembly reference in the Solutions Explorer. It can be achieved by setting its Copy Local property of the reference to `True`. So, that the Syncfusion assemblies are copied to the Release/Bin, Debug/Bin folders. This deployment consists of copying the EXE, assembly and XML files to the client machines similar to that of manual copy. +Copying assemblies in the local folder is supported by the Syncfusion assembly reference in the Solutions Explorer. It can be achieved by setting its Copy Local property of the reference to `True`. So, that the Syncfusion assemblies are copied to the Release/Bin and Debug/Bin folders. This deployment consists of copying the EXE, the assembly, and the XML files to the client machines, similar to that of a manual copy. ![windows forms assembly installation and deployment](Installation-And-Deployment_images/Deployment_img1.jpg) @@ -23,7 +23,7 @@ Through Syncfusion installer, Syncfusion assemblies are installed in the GAC of ## Installed Location -The following table represents Assemblies/ Samples and its installed location +The following table summarizes the Assemblies/ Samples and their installed locations.
@@ -48,4 +48,4 @@ Samples
C:\Users\Public\Documents\Syncfusion\Windows\{{ site.releaseversion }}
-N> In above section, Latest Essential Studio version details has been provided. User can refer installed Essential Studio version instead of mentioned version. \ No newline at end of file +N> In the above section, the latest Essential Studio version details have been provided. The user can refer to the installed Essential Studio version instead of the mentioned version. \ No newline at end of file diff --git a/WindowsForms/Featured-Samples.md b/WindowsForms/Featured-Samples.md index c4aaf9468..7db9507f6 100644 --- a/WindowsForms/Featured-Samples.md +++ b/WindowsForms/Featured-Samples.md @@ -13,13 +13,13 @@ documentation: ug To explore the Syncfusion Windows Forms controls and components, open `Syncfusion Windows Forms Controls Panel` by searching it from start and open. -![Windows Formss Control Panel Search](featured-samples_images/winforms-control-panel-search.png) +![Windows Forms Control Panel Search](featured-samples_images/winforms-control-panel-search.png) -In another way, Open the control panel from the following installed location, +In another way, launch the control panel from the following installed location: C:\Program Files (x86)\Syncfusion\Essential Studio\{{ site.releaseversion }}\Infrastructure\Launcher\Syncfusion Windows Forms Control Panel.exe -N> In above section, Latest Essential Studio version details has been provided. User can refer installed Essential Studio version instead of mentioned version. +N> In the above section, the latest Essential Studio version details have been provided. The user can refer to the installed Essential Studio version instead of the mentioned version. ![Syncfusion Windows Forms Controls Panel](featured-samples_images/syncfusion-winforms-controls-panel.png) @@ -32,9 +32,9 @@ To explore the locally installed demos, click `Run Local Demos` which will open ## Offline samples -`Syncfusion Windows Forms Sample Browser` compile and launch the samples installed by Syncfusion installer. The samples are available in the following installed location where you can make changes and further exploration of controls. +`Syncfusion Windows Forms Sample Browser` compiles and launches the samples installed by the Syncfusion installer. The samples are available in the following installed location, where you can make changes and further explore the controls. -C:\Users\Public\Documents\Syncfusion\\Windows\{{ site.releaseversion }} +C:\Users\Public\Documents\Syncfusion\Windows\{{ site.releaseversion }} ## GitHub Demos diff --git a/WindowsForms/HighDPI-support.md b/WindowsForms/HighDPI-support.md index 250b2f69f..6a689db94 100644 --- a/WindowsForms/HighDPI-support.md +++ b/WindowsForms/HighDPI-support.md @@ -13,22 +13,22 @@ DPI stands for Dots Per Inch is the number of pixels or points rendered in one i ## DPI awareness -Desktop application fall into two categories based on the DPI awareness: +Desktop applications fall into two categories based on the DPI awareness: * Non-DPI aware application -* DPI aware application +* DPI-aware application ### Non-DPI aware application -Non-DPI aware applications always render at 96 DPI, scale it up to the actual DPI, and leave entire scaling to the operating system. It keeps your application layout intact at the cost of quality - blurred images and more. +Non-DPI aware applications always render at 96 DPI, scale it up to the actual DPI, and leave entire scaling to the operating system. It keeps your application layout intact at the cost of quality - blurred images and more. The operating system applies font scaling and bitmap stretching in this mode. Refer to the following DataGrid sample demo screenshot that runs under 192 DPI with blurred text and icons. ![windows forms High DPI support with default scaling](HighDPI_images/HighDPI_img1.jpeg) -### DPI aware application +### DPI-aware application -The applications render themselves based on the actual DPI of a screen and provide a much better visual experience. The controls or applications needs manual implementation, such DPI awareness by retrieving the current monitor DPI value, scaling its content, applying different icon sets, and more. +The applications render themselves based on the actual DPI of a screen and provide a much better visual experience. The controls or applications need manual implementation, such DPI awareness by retrieving the current monitor DPI value, scaling its content, applying different icon sets, and more. The following DataGrid sample demo screenshot runs under 192 DPI, you can see the better quality of text and icon. @@ -102,12 +102,12 @@ The application or control created in 96 DPI value must be properly changed base ## DPI scaling -The DPI scaling mechanism calculates the scaling difference between the system that form has been designed on and the running system. This DPI scaling will only trigger if your application declares to be DPI aware. Otherwise, the system will be rendered in the default DPI (96 DPI) sandbox and bitmap scaling of the OS will be used. +The DPI scaling mechanism calculates the scaling difference between the system that form has been designed on and the running system. This DPI scaling will only trigger if your application is declared to be DPI aware. Otherwise, the system will be rendered in the default DPI (96 DPI) sandbox and bitmap scaling of the OS will be used. -You have probably noticed the following two properties: +The following two properties are involved in DPI scaling: -* [AutoScaleDimensions](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.containercontrol.autoscaledimensions?view=netframework-4.7.2#System_Windows_Forms_ContainerControl_AutoScaleDimensions): The Visual Studio designer will serialize the dimensions of the unit used for comparison either font or DPI. When running the form with different DPI settings, its dimensions will be obtained and compared against the serialized dimensions. The scaling factor is computed based on that, then it is applied. -* [AutoScaleMode](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.containercontrol.autoscalemode?view=netframework-4.7.2#System_Windows_Forms_ContainerControl_AutoScaleMode): Indicates the method to calculate the scale factor. Depending on it, the scaling mechanism will calculate the scale factor according to the dimensions of the system font or system DPI. If the AutoScaleMode is set to `None`, the automatic scaling will be disabled. When the scale factor is calculated, the framework calls the scale method of form which basically recalculates the size and the location of child controls on it. Their scale method is also called as properly scale. +* [AutoScaleDimensions](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.containercontrol.autoscaledimensions?view=netframework-4.7.2#System_Windows_Forms_ContainerControl_AutoScaleDimensions): The Visual Studio designer will serialize the dimensions of the unit used for comparison either font or DPI. When running the form with different DPI settings, its dimensions will be obtained and compared against the serialized dimensions. The scaling factor is then computed and applied. +* [AutoScaleMode](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.containercontrol.autoscalemode?view=netframework-4.7.2#System_Windows_Forms_ContainerControl_AutoScaleMode): Indicates the method to calculate the scale factor. Based on this, the scaling mechanism will calculate the scale factor according to the dimensions of the system font or system DPI. When the AutoScaleMode is set to `None`, the automatic scaling will be disabled. When the scale factor is calculated, the framework calls the scale method of form which basically recalculates the size and the location of child controls on it. Their scale method is also called to properly scale them. {% tabs %} {% highlight c# %} @@ -138,7 +138,7 @@ To turn your desktop application into DPI-aware and add `app.manifest` file, fol {% capture codesnippet1 %} {% tabs %} -{% highlight xaml %} +{% highlight xml %} @@ -146,13 +146,13 @@ To turn your desktop application into DPI-aware and add `app.manifest` file, fol -{% endhighlight xaml %} +{% endhighlight %} {% endtabs %} {% endcapture %} {{ codesnippet1 | OrderList_Indent_Level_1 }} -5. Most of the Syncfusion controls support high DPI through manifest file. But, the following Syncfusion controls provides the high DPI support by adding both manifest file and enabling the [DpiAware](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.ScrollControl.html#Syncfusion_Windows_Forms_ScrollControl_DpiAware) property. +5. Most of the Syncfusion controls support high DPI through a manifest file. But the following Syncfusion control provides the high DPI support by adding both manifest file and enabling the [DpiAware](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.ScrollControl.html#Syncfusion_Windows_Forms_ScrollControl_DpiAware) property. * GridControl * GridGroupingControl @@ -213,7 +213,7 @@ The steps below illustrate the setting of image for a ButtonAdv using ImageListA 1. Drag and drop the ImageListAdv from the toolbox to the designer. -2. Add the required images to the [`Images`](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.Tools.ImageListAdv.html#Syncfusion_Windows_Forms_Tools_ImageListAdv_Images) collection of the ImageListAdv. These images will act as default images that will be displayed at all scaling when no DPI images are set. +2. Add the required images to the [`Images`](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.Tools.ImageListAdv.html#Syncfusion_Windows_Forms_Tools_ImageListAdv_Images) collection of the ImageListAdv. These images act as default images that will be displayed at all scaling when no DPI images are set. ![Images collection editor](HighDPI_images/ImageListAdv_Properties.png) diff --git a/WindowsForms/Installation.md b/WindowsForms/Installation.md index 36ef4739d..414a865cb 100644 --- a/WindowsForms/Installation.md +++ b/WindowsForms/Installation.md @@ -21,7 +21,7 @@ The following procedure illustrates how to manually install Essential Studio for 5. Click Next. Then, Select the Installation and Samples Folder window opens. 6. To install it in the displayed default location, click “Install”. 7. Select the “Run Dashboard” check box to launch the Dashboard after installing. -8. Click "Finish". Essential Studio is installed in system and the Syncfusion Essential Studio [Dashboard](http://help.syncfusion.com/ug/common/documents/dashboard.htm#) is launched automatically. +8. Click "Finish". Essential Studio is installed on the system and the Syncfusion Essential Studio [Dashboard](https://help.syncfusion.com/common/essential-studio/dashboard) is launched automatically. ## Command Line installation @@ -30,10 +30,10 @@ Follow the given steps to install through Command Line in Silent mode. 1. Double-click the “Syncfusion Essential Studio” Setup file. The Self-Extractor wizard opens and extracts the package automatically. 2. The SyncfusionEssentialStudio_({{ site.releaseversion }}).exe file is extracted into the Temp folder. -3. Run %temp%. The Temp folder opens. The SyncfusionEssentialStudio_({{ site.releaseversion }}).exe file is available in one of the folders. +3. Run `%temp%` to open the Temp folder. The SyncfusionEssentialStudio_({{ site.releaseversion }}).exe file is available in one of the folders. 4. Copy the SyncfusionEssentialStudio_({{ site.releaseversion }}).exe file in local drive. Example: D:\temp 5. Cancel the wizard. -6. Open Command Prompt in administrator mode and pass the following arguments for corresponding version. +6. Open Command Prompt in administrator mode and pass the following arguments for the corresponding version. {% tabs %} @@ -45,5 +45,5 @@ Follow the given steps to install through Command Line in Silent mode. {% endtabs %} -N> In above section, Latest Essential Studio version details has been provided. User can refer installed Essential Studio version instead of mentioned version. +N> In the above section, the latest Essential Studio version details have been provided. The user can refer to the installed Essential Studio version instead of the mentioned version. diff --git a/WindowsForms/Localization.md b/WindowsForms/Localization.md index 777c060a2..1ac04a65b 100644 --- a/WindowsForms/Localization.md +++ b/WindowsForms/Localization.md @@ -1,7 +1,7 @@ --- layout: post title: Localization in Windows Forms | Syncfusion® -description: Learn about Localization support in Syncfusion® WF UI Contorls using .RESX files and also explains editing default strings of WF controls. +description: Learn about Localization support in Syncfusion® WF UI Controls using .RESX files and also explains editing default strings of WF controls. platform: windowsforms control: Localization documentation: ug @@ -10,9 +10,9 @@ documentation: ug # Localization of Syncfusion® WF Controls -Localization is the process of making application multilingual by formatting the content according to the cultures. This involves configuring the application for a specific language. Culture is the combination of language and location. For example, `en-US` is the culture for English spoken in United States; `en-GB` is the culture for English spoken in Great Britain. +Localization is the process of making an application multilingual by formatting the content according to the cultures. This involves configuring the application for a specific language. Culture is the combination of language and location. For example, `en-US` is the culture for English spoken in the United States; `en-GB` is the culture for English spoken in Great Britain. -Syncfusion® components support localization and have their own neutral resources. These resources can be localized as per the customer requirement and they can be localized in three ways are, +Syncfusion® components support localization and have their own neutral resources. These resources can be localized as per the customer requirement in three ways, * Using [ILocalizationProvider](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.ILocalizationProvider.html) * Using Satellite Assemblies @@ -217,7 +217,7 @@ N> In above section, Latest Essential Studio® version details has be 2. Inside the NeutralResources folder, there are four resource files corresponding to the Tools package. These resources contain the string representations for the English culture, both default and neutral. -3. Microsoft Visual Studio.NET ships with a tool called Resource Editor (ResEditor) that can be used to localize the string resources. It provides a graphical interface that allows to construct resource files containing bitmaps, icons, and strings. +3. Microsoft Visual Studio.NET ships with a tool called Resource Editor (ResEditor) that can be used to localize the string resources. It provides a graphical interface that allows you to construct resource files containing bitmaps, icons, and strings. 4. Compile the source code by using the build.bat command in the Microsoft Visual Studio 2008 Command prompt. The following figure shows how the Resource Editor looks when it first opens. @@ -237,7 +237,7 @@ N> In above section, Latest Essential Studio® version details has be 9. Click File -> Save As and select the culture to be localized. In this case, German-Germany. Now, a new resource file with the name `Syncfusion.Windows.Forms.Tools.XPMenus.CustomizationPanel.de-DE.resources` is added to the source path. -10. Repeat the process for other resources and save it. Now, in the Visual Studio.NET Command Prompt, enter the following command and press Enter. Make sure that sf.public snk file is available from the Localization folder. +10. Repeat the process for other resources and save it. Now, in the Visual Studio.NET Command Prompt, enter the following command and press Enter. Make sure that the sf.publicsnk file is available from the Localization folder. For **Tools.Windows** @@ -286,7 +286,7 @@ sn –Vr Syncfusion.Tools.Windows.resources.dll {% endcapture %} {{ codesnippet7 | OrderList_Indent_Level_1 }} -13. Drop this assembly into an appropriate sub-directory under .EXE’s directory (bin\Debug), based on the naming conventions enforced in .NET. and it can placed in the `de-DE` sub-directory when this assembly contains resources from the German (Germany) culture. +13. Drop this assembly into an appropriate subdirectory under the .EXE’s directory (bin\Debug), based on the naming conventions enforced in .NET, and it can be placed in the `de-DE` subdirectory when this assembly contains resources from the German (Germany) culture. 14. Finally, application can refer German resources during runtime by using the following code example. To change the UI culture of the current thread, add this code in the Forms constructor before the `InitializeComponent()`. @@ -309,7 +309,7 @@ Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("de {% endcapture %} {{ codesnippet8 | OrderList_Indent_Level_1 }} -15. Now, Run the application that contains the Syncfusion® Toolbar and Menu controls and open the Customization dialog. The dialog appears in German as shown in the following figure: +15. Now, run the application that contains the Syncfusion® Toolbar and Menu controls and open the Customization dialog. The dialog appears in German as shown in the following figure: ![Windows Form Localization Customization dialog German culture](Localization_images/WindowsForm-Localization-CustomizationDialog.png) diff --git a/WindowsForms/Overview.md b/WindowsForms/Overview.md index e34d0343e..6f1a97586 100644 --- a/WindowsForms/Overview.md +++ b/WindowsForms/Overview.md @@ -11,13 +11,13 @@ documentation: ug # Welcome to Syncfusion® Essential® Windows Forms -Syncfusion® Essential Studio® for Windows Forms is a comprehensive collection of over 100+ Essential® Windows Forms controls like Grids, Charts, Diagram, Scheduler and Tools for building powerful line-of-business applications faster. Syncfusion® Windows Forms controls provides unparalleled performance, stunning built-in themes, touch-friendly UI, localization and seamless integration with Visual Studio. +Syncfusion® Essential Studio® for Windows Forms is a comprehensive collection of over 100 Essential® Windows Forms controls like Grids, Charts, Diagram, Scheduler, and Tools for building powerful line-of-business applications faster. Syncfusion® Windows Forms controls provide unparalleled performance, stunning built-in themes, touch-friendly UI, localization and seamless integration with Visual Studio. ## How to best read this user guide -* The best way to get started is to read the “Getting Started” section of the documentation for the component you need. The “Getting Started” guide gives information needed before writing the code. All the other information can be referred when required. -* Now, that you are familiar with the basics of using the component, the next step is to start integrating the component into your application. A good starting point is to refer to the code examples in the sample browser that contains hundreds of code samples. It is very likely that you can find a code example that resembles your intended usage scenario. -* After you have integrated the component into your application by using one of the sample code examples as a starting point, that you would need additional information on specific features and API. The best option is to search the specific topic by using the search box available at the top of the user guide. +* The best way to get started is to read the “Getting Started” section of the documentation for the component you need. The “Getting Started” guide gives information needed before writing the code. All the other information can be referred to when required. +* Now that you are familiar with the basics of using the component, the next step is to start integrating the component into your application. A good starting point is to refer to the code examples in the sample browser that contains hundreds of code samples. It is very likely that you can find a code example that resembles your intended usage scenario. +* After you have integrated the component into your application by using one of the sample code examples as a starting point, you may need additional information on specific features and API. The best option is to search the specific topic by using the search box available at the top of the user guide. * Another valuable resource is the API reference that provides detailed information on the object hierarchy as well as the settings available on every object. ## Controls list @@ -246,7 +246,7 @@ background-color:transparent!important; Metro Form - MISCELLEANEOUS + MISCELLANEOUS BannerTextProvider @@ -345,10 +345,10 @@ Refer [licensing](https://help.syncfusion.com/common/essential-studio/licensing/ The [Knowledge Base](https://support.syncfusion.com/kb/desktop/category/82) section contains responses to most of the common questions that other customers have asked in the past, so this would be a good place to search for topics that are not covered in the User Guide. -Similar to the [Knowledge Base](https://support.syncfusion.com/kb/desktop/category/82), the [Forum](https://www.syncfusion.com/forums/windowsforms) section also contains responses to questions that other customers has asked us in the past. +Similar to the [Knowledge Base](https://support.syncfusion.com/kb/desktop/category/82), the [Forum](https://www.syncfusion.com/forums/windowsforms) section also contains responses to questions that other customers have asked us in the past. ## Support and feedback If you are unable to find the information that you are looking for in the self-help resources mentioned above then you contact us by creating a [support ticket](https://internalsupport.bolddesk.com/agent/tickets/create). -Don’t see what you need? Please request it in our [feedback portal](https://www.syncfusion.com/feedback/winforms). +Don’t see what you need? Please request it in our [Feedback portal](https://www.syncfusion.com/feedback/winforms). diff --git a/WindowsForms/System-Requirements.md b/WindowsForms/System-Requirements.md index cee27831d..bd1581a93 100644 --- a/WindowsForms/System-Requirements.md +++ b/WindowsForms/System-Requirements.md @@ -27,13 +27,13 @@ This section describes the system requirements to use Syncfusion® Wi ### Hardware Environment * Processor: x86 or x64 -* RAM : 512 MB (minimum), 1 GB (recommended) -* Hard disk: up to 4 GB of space may be required. However, even if you install in a different drive, 400 MB of free space is required in the boot drive. +* RAM: 512 MB (minimum), 1 GB (recommended) +* Hard disk: up to 4 GB of space may be required. However, even if you install in a different drive, 400 MB of free space is required in the system drive. ### Development Environment * Microsoft Visual Studio 2015/2017/2019/2022 * .NET Framework 4.6.2 -* Lower Syncfusion® .NET frameworks can be used in applications because they are compatible with .NET 4.7, .NET 4.7.1, .NET 4.7.2, and .NET 4.8. For example, in the application, the Syncfusion® 4.6.2 .NET framework assembly can be referred to as 4.7 or higher target versions. -* .NET 8.0, .NET 9.0. +* Earlier Syncfusion® .NET frameworks can be used in applications because they are compatible with .NET 4.7, .NET 4.7.1, .NET 4.7.2, and .NET 4.8. For example, in the application, the Syncfusion® 4.6.2 .NET framework assembly can be referred to as 4.7 or higher target versions. +* .NET 8.0, .NET 9.0, .NET 10.0. diff --git a/WindowsForms/Touch-Support.md b/WindowsForms/Touch-Support.md index e2f834bf3..b24e601a1 100644 --- a/WindowsForms/Touch-Support.md +++ b/WindowsForms/Touch-Support.md @@ -11,7 +11,8 @@ documentation: ug ## Gesture -Gestures determine whether a finger or stylus has moved over a control. Syncfusion® WinForms controls support the following touch gestures: Tap, Swipe, Pinch, and Hold.
+Gestures detect whether a finger or stylus has moved over a control. Syncfusion® WinForms controls support the following touch gestures: Tap, Swipe, Pinch, and Hold. + This table shows the gesture mappings for each control. @@ -30,7 +31,7 @@ Grids
Cell Grid Selection, Scrolling - -Click and select +Click and Select Right-Click
@@ -187,7 +188,7 @@ Context Menu
-TabbedMdI Manager +TabbedMDI Manager TabMove - Click diff --git a/WindowsForms/arm-support.md b/WindowsForms/arm-support.md index 2a3e02dd5..91e6f7a80 100644 --- a/WindowsForms/arm-support.md +++ b/WindowsForms/arm-support.md @@ -9,7 +9,7 @@ documentation: ug # ARM support in Windows Forms Controls -The Syncfusion WinForms components are compatible with ARM64 devices. You can build the application with our components. The following components/features are alone yet to be supported for ARM64 device compatibility. Based on the feasibility, we will provide the support for the below components/features soon, +The Syncfusion WinForms components are compatible with ARM64 devices. You can build the application with our components. The following components/features are not yet supported for ARM64 device compatibility. Based on the feasibility, we will provide support for the below components/features soon, * PDF library: HTML to PDF conversion * PDF library: OCR Processing diff --git a/WindowsForms/dotnet-core-compatibility.md b/WindowsForms/dotnet-core-compatibility.md index 0238ee74e..5df46b056 100644 --- a/WindowsForms/dotnet-core-compatibility.md +++ b/WindowsForms/dotnet-core-compatibility.md @@ -9,13 +9,13 @@ documentation: ug # WinForms Applications using .NET Core and Syncfusion® WinForms Controls -Syncfusion® Essential Studio® for Windows Forms suits .NET core assemblies for building Windows Forms .NET Core applications using Syncfusion® Controls. This section explains how to create the project in .NET Core application and using Syncfusion® Windows Forms controls. +Syncfusion® Essential Studio® for Windows Forms provides .NET Core assemblies for building Windows Forms .NET Core applications using Syncfusion® Controls. This section explains how to create the project in a .NET Core application and using Syncfusion® Windows Forms controls. -N> All Syncfusion® Windows Forms controls supports .NET Core Framework except the controls labeled as `classic`. +N> All Syncfusion® Windows Forms controls support .NET Core Framework except the controls labeled as `classic`. ## Create a .NET Core project -**Step 1**: Open Visual Studio, go to **File > New > Project...** and you can now see **Create a new project** dialog. Here, select **Windows Forms App (.NET Core)** template and click **Next**. +**Step 1**: Open Visual Studio, go to **File > New > Project...** and the following **Create a new project** dialog appears. Here, select **Windows Forms App (.NET Core)** template and click **Next**. NETcore showing create the project @@ -25,7 +25,7 @@ N> All Syncfusion® Windows Forms controls supports .NET Core Framewo **Step 3**: In the Additional information window, select .NET 6.0 (Long-term support) for the Framework setting, and then click **Create**. -NETcore showing the Framework setting selected version +NETcore showing the Framework setting — selected version **Step 4**: Finally, Windows Forms (.NET Core) sample project is created. @@ -67,8 +67,10 @@ We are now going to see a demo on how to add **ButtonAdv** control in WinForms . {% highlight c# %} ButtonAdv button = new ButtonAdv(); -button.Text = ”ButtonAdv”; -this.controls.add(button); +button.Text = "ButtonAdv"; +button.Location = new System.Drawing.Point(100, 100); +button.Size = new System.Drawing.Size(200, 30); +this.Controls.Add(button); {% endhighlight %} {% endtabs %} diff --git a/WindowsForms/dotnet-core-designtime-feature.md b/WindowsForms/dotnet-core-designtime-feature.md index 3645ae3f3..228ff5f1b 100644 --- a/WindowsForms/dotnet-core-designtime-feature.md +++ b/WindowsForms/dotnet-core-designtime-feature.md @@ -11,7 +11,7 @@ documentation: ug ## Overview -We have expanded design-time support—such as Smart Tags, Custom Collection Editors, and Custom Forms for UITypeEditor—to include controls targeting .NET 6 and higher, which were previously available only in the .NET Framework. +We have added design-time support—such as Smart Tags, Custom Collection Editors, and Custom Forms for UITypeEditor—to include controls targeting .NET 6 and higher, which were previously available only in the .NET Framework. ## Why We Use the WinForms Designer SDK Microsoft has introduced the **WinForms Designer SDK** NuGet package to support custom design-time experiences in Visual Studio for .NET Core and later versions. This SDK replaces the traditional designer APIs that were previously part of the .NET Framework and Windows OS. @@ -22,11 +22,11 @@ The new Designer SDK offers several key advantages: * Not reliant on the .NET Framework * Fully integrated with Visual Studio -It provides essential extension points and base classes that allow developers to implement advanced design-time features such as, **Smart Tags, Custom Collection Editors, Custom Forms for UITypeEditor**. +It provides essential extension points and base classes that allow developers to implement advanced design-time features such as **Smart Tags, Custom Collection Editors, Custom Forms for UITypeEditor**. These features are now available for controls targeting .NET 6 and higher. -To enable this functionality, we have included the **WinForms Designer SDK** as a dependency in our control NuGet packages starting from this version **v26.1.35**. This ensures a consistent and enhanced design-time experience across modern .NET platforms. +To enable this functionality, we have added the **WinForms Designer SDK** as a dependency in our control NuGet packages starting from this version **v26.1.35**. This ensures a consistent and enhanced design-time experience across modern .NET platforms, including .NET 6, .NET 7, .NET 8, .NET 9, and later. ## Control Package Details We have added the **WinForms Designer SDK** as a dependency in the following control packages. Please refer to the table below for details: @@ -145,6 +145,6 @@ N> The listed package assemblies are built against the Designer SDK to provide i Certain controls properties in .NET Core WinForms have known design‑time limitations. These issues are largely caused by the out‑of‑process WinForms Designer architecture, which results in UITypeEditors, collection editors, and smart tags having only limited communication with the design surface. -We have documented these details in the following Knowledge Base article. Please refer to it for comprehensive information. +We have documented these details in the following Knowledge Base article. Please refer to it for comprehensive information. Refer to the [Visual Studio version requirements](https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes) for the .NET 6 and later WinForms Designer SDK support. **KB Link** : [Known Design-Time Limitations in .NET Core WinForms and Syncfusion Controls](https://support.syncfusion.com/kb/article/22154/known-design-time-limitations-in-net-core-winforms-and-syncfusion-controls) diff --git a/WindowsForms/dotnet-framework-compatibility.md b/WindowsForms/dotnet-framework-compatibility.md index 9e58bd47d..50a6d24af 100644 --- a/WindowsForms/dotnet-framework-compatibility.md +++ b/WindowsForms/dotnet-framework-compatibility.md @@ -9,11 +9,11 @@ documentation: ug # .NET Framework and .NET Core Compatibility -Syncfusion® Windows Forms Controls are always compatible latest .NET Framework and .NET Core versions. +Syncfusion® Windows Forms Controls are always compatible with the latest .NET Framework and .NET Core versions. ## Version Compatibility -Below table represents the supported Syncfusion® Essential Studio® version for .NET Framework and .NET Core versions. +The following table summarizes the supported Syncfusion® Essential Studio® versions for .NET Framework and .NET Core versions. diff --git a/WindowsForms/right-to-left.md b/WindowsForms/right-to-left.md index a7645d577..4b7d811d5 100644 --- a/WindowsForms/right-to-left.md +++ b/WindowsForms/right-to-left.md @@ -9,6 +9,6 @@ documentation: ug # Right to Left support in Syncfusion Windows Forms Controls -Right to Left (RTL) support displays the content from right-to-left direction by setting the [RightToLeft](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.righttoleft?redirectedfrom=MSDN&view=netframework-4.8#System_Windows_Forms_Control_RightToLeft) property to `Yes`. This is helpful to support the Right-to-Left scripted languages like Arabic, Hebrew, Urdu, etc., +Right to Left (RTL) support displays the content from right-to-left direction by setting the [RightToLeft](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.righttoleft?redirectedfrom=MSDN&view=netframework-4.8#System_Windows_Forms_Control_RightToLeft) property to `Yes`. This is useful for supporting the Right-to-Left scripted languages like Arabic, Hebrew, Urdu, etc. -All Windows Forms Syncfusion controls supports Right-to-Left (RTL) based on FlowDirection property. In addition to that, all controls provides [localization](https://help.syncfusion.com/windowsforms/localization) support to change language of strings used in control specific to any culture. +All Windows Forms Syncfusion controls support Right-to-Left (RTL). In addition to that, all controls provide [localization](https://help.syncfusion.com/windowsforms/localization) support to change the language of strings used in a control specific to any culture. \ No newline at end of file diff --git a/WindowsForms/skins/Getting-Started.md b/WindowsForms/skins/Getting-Started.md index 6f448620a..9c99fb476 100644 --- a/WindowsForms/skins/Getting-Started.md +++ b/WindowsForms/skins/Getting-Started.md @@ -294,10 +294,4 @@ Me.treeViewAdv1.ThemeStyle.TreeNodeAdvStyle.TextColor = System.Drawing.Color.Red {% endtabs %} -![WinForms Skin Manager shows Office2019 theme applied in control](skin_images/winforms-skin-manager-shows-office2019-theme.png) - -## Troubleshooting - -* **Theme not applied:** Ensure the `Syncfusion.Shared.Base` assembly and the required theme assembly are referenced in the project, and that the SkinManager is associated with the target control or form via the `Controls` property. -* **Missing theme assembly errors:** When using Office2016Theme, Office2019Theme, or HighContrastTheme, call `SkinManager.LoadAssembly` (see [Loading theme assemblies](#loading-theme-assemblies)) before setting `ApplicationVisualTheme` or `ThemeName`. -* **Custom styles overridden by theme:** Set `CanOverrideStyle = true` on the control before applying the theme if you want the theme to override control-level `Style` or `ThemeStyle` settings. \ No newline at end of file +![WinForms Skin Manager shows Office2019 theme applied in control](skin_images/winforms-skin-manager-shows-office2019-theme.png) \ No newline at end of file diff --git a/WindowsForms/theme-studio/theme-studio.md b/WindowsForms/theme-studio/theme-studio.md index ed7494c48..d12148cbd 100644 --- a/WindowsForms/theme-studio/theme-studio.md +++ b/WindowsForms/theme-studio/theme-studio.md @@ -9,89 +9,100 @@ documentation: ug # Getting Started With Windows Forms Theme Studio -Theme Studio for WinForms can be used to create and apply new theme for Syncfusion® controls from an existing theme. The primary goal here is to deliver an appearance rich Syncfusion® controls that suits bests for every user application, based on their needs. +Theme Studio for WinForms can be used to create and apply a new theme for Syncfusion® controls from an existing theme. The primary goal here is to deliver appearance-rich Syncfusion® controls that best suit every user application, based on the application's needs. -## Customizing theme color from theme studio +## Customizing Theme Color in Theme Studio -In theme studio utility, each theme has a unique common variable list. When user change the common variable color code value, it will reflect in all the Syncfusion® WinForms controls. All Syncfusion® WinForms control styles are derived from these theme-based common variables. This common variable list is handled inside the theme studio application for customizing theme-based colors. +In the Theme Studio utility, each theme has a unique common variable list. When the user changes a common variable's color code value, it will reflect in all the Syncfusion® WinForms controls. All Syncfusion® WinForms control styles are derived from these theme-based common variables. -Let us now see the step-by-step procedure to launch and work with the theme studio utility below. +The following steps describe how to launch and work with the Theme Studio utility. **Step 1:** -On installing the "Syncfusion® Windows Forms" suite, launch and select "Theme Studio" from the start-up panel. +After installing the "Syncfusion® Windows Forms" suite, launch and select "Theme Studio" from the start-up panel. ![Theme Studio for Windows Forms](ThemeStudio_images/Built-In-Themes.png) **Step 2:** -The theme studio application form has been divided into two sections: the controls preview section on the right, and the theme customization section on the left. +The Theme Studio window is divided into two sections: a controls preview on the right and a theme-customization panel on the left. ![Theme Studio for Windows Forms](ThemeStudio_images/theme-studio.png) **Step 3:** -Click the color pickers in the theme customization section to select the desired color. +Click a color picker in the theme-customization section to select a color. ![Choose color in Theme Studio for Windows Forms](ThemeStudio_images/color-selected-in-theme-studio.png) **Step 4:** -The Syncfusion® WinForms controls will be rendered with the newly selected colors in the preview section, after selecting the desired color. +The Syncfusion® WinForms controls render with the newly selected colors in the preview section. ![Color reflected in controls loaded inside Theme Studio for Windows Forms](ThemeStudio_images/color-reflected-theme-studio.png) -## Export the customized theme +## Export the Customized Theme You can export the custom theme after changing the theme colors. **Step 1:** -Click the Export button in the bottom left corner of the theme studio application. +Click the Export button in the bottom left corner of the Theme Studio application. ![Export option in Theme Studio for Windows Forms](ThemeStudio_images/Export-Theme-studio.png) **Step 2:** -Now the export dialog appears with an option to select either entire controls or just the desired control(s). This option is useful when you have integrated a selective list of Syncfusion® WinForms controls in your application. The theme studio will filter only the selected controls and customize the final output for those controls alone thereby reducing the final output assembly size. +Now the export dialog appears with an option to select either all controls or just the desired control(s). This option is useful when you have integrated a selective list of Syncfusion® WinForms controls in your application. The Theme Studio will filter only the selected controls and customize the final output for those controls alone, thereby reducing the final output assembly size. ![Export dialog in Theme Studio for Windows Forms](ThemeStudio_images/Export-dialog-theme-studio.png) **Step 3:** -The download theme will come as an assembly (*.dll) file that contains color codes for the selected Syncfusion® WinForms controls. +The exported theme is delivered as an assembly (*.dll) file that contains color codes for the selected Syncfusion® WinForms controls. ![Export Theme assembly from Theme Studio for Windows Forms](ThemeStudio_images/Theme-Assembly-Theme-studio.png) -N> You can enter the assembly name of your own choice while exporting. But remember that the assembly (*.dll) name will be custom theme name, when you refer it in your WinForms application. +**Note:** You can enter the assembly name of your own choice while exporting. But remember that the assembly (*.dll) name will be the custom theme name, when you refer to it in your WinForms application. -## Using customized theme in a Windows Forms application +## Using the Customized Theme in a Windows Forms Application -You can now add the exported assembly in your Windows Forms application and set the custom theme to the appropriate controls. In this illustration, we are going to witness the custom theme set for SfDataGrid. +You can now add the exported assembly to your Windows Forms application and set the custom theme to the appropriate controls. In the following example, the custom theme is applied to the SfDataGrid control. **Step 1:** -Attach the exported assembly (*.dll) in your Windows Forms project. +Add the exported assembly (*.dll) as a reference in your Windows Forms project (for example, right-click the project in **Solution Explorer** and choose **Add** → **Reference** → **Browse**, then select the exported DLL). -![Export dialog in Theme Studio for Windows Forms](ThemeStudio_images/Export-dialog-theme-studio.png) +**Note:** Close Theme Studio before referencing the exported DLL to avoid file-lock errors. + +![Attach exported assembly in Windows Forms project](ThemeStudio_images/Export-dialog-theme-studio.png) **Step 2:** -Load the Theme assembly in Program.cs of your application and the initialize a SfDataGrid control in the main form and set it’s "ThemeName" property exactly to the assembly name. +Load the theme assembly in `Program.cs` of your application and then initialize the SfDataGrid control in the main form. Set the `ThemeName` property of the SfDataGrid exactly to the exported assembly name. The exported assembly name and the class name follow the convention `Syncfusion.YourThemeName.Theme` (for example, `Syncfusion.VioletTheme.Theme`). +**C# — Program.cs** + +{% capture codesnippet1 %} {% tabs %} {% highlight c# %} +using System; +using System.Windows.Forms; +using Syncfusion.Licensing; +using Syncfusion.WinForms.Themes; +namespace ThemeStudioDemo +{ static class Program { /// @@ -100,37 +111,113 @@ Load the Theme assembly in Program.cs of your application and the initialize a S [STAThread] static void Main() { - Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(DemoCommon.FindLicenseKey()); - SkinManager.LoadAssembly(typeof(VioletTheme).Assembly); + // Replace with your actual Syncfusion license key. + // See https://help.syncfusion.com/windowsforms/licensing for details. + SyncfusionLicenseProvider.RegisterLicense("YOUR_LICENSE_KEY"); + + // Load the exported theme assembly before any Syncfusion control is created. + SkinManager.LoadAssembly(typeof(Syncfusion.VioletTheme.Theme).Assembly); + Application.EnableVisualStyles(); + // SetCompatibleTextRenderingDefault must be called before any control is created. Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } - -sfDataGrid1.ThemeName = "VioletTheme"; - +} +{% endhighlight %} +{% endtabs %} +{% endcapture %} +{{ codesnippet1 | OrderList_Indent_Level_1 }} + +**C# — Form1.cs** + +{% capture codesnippet2 %} +{% tabs %} +{% highlight c# %} +using System.Windows.Forms; +using Syncfusion.WinForms.DataGrid; + +namespace ThemeStudioDemo +{ + public partial class Form1 : Form + { + private SfDataGrid sfDataGrid1; + + public Form1() + { + InitializeComponent(); + + // The ThemeName must match the exported assembly name. + sfDataGrid1 = new SfDataGrid(); + sfDataGrid1.ThemeName = "VioletTheme"; + this.Controls.Add(sfDataGrid1); + } + } +} {% endhighlight %} +{% endtabs %} +{% endcapture %} +{{ codesnippet2 | OrderList_Indent_Level_1 }} + +**VB — Program.vb** + +{% capture codesnippet3 %} +{% tabs %} {% highlight vb %} +Imports System +Imports System.Windows.Forms +Imports Syncfusion.Licensing +Imports Syncfusion.WinForms.Themes Module Program Private Sub Main() - Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(DemoCommon.FindLicenseKey()) - SkinManager.LoadAssembly(GetType(VioletTheme).Assembly) + ' Replace with your actual Syncfusion license key. + ' See https://help.syncfusion.com/windowsforms/licensing for details. + SyncfusionLicenseProvider.RegisterLicense("YOUR_LICENSE_KEY") + + ' Load the exported theme assembly before any Syncfusion control is created. + SkinManager.LoadAssembly(GetType(Syncfusion.VioletTheme.Theme).Assembly) + Application.EnableVisualStyles() + ' SetCompatibleTextRenderingDefault must be called before any control is created. Application.SetCompatibleTextRenderingDefault(False) Application.Run(New Form1()) End Sub End Module +{% endhighlight %} +{% endtabs %} +{% endcapture %} +{{ codesnippet3 | OrderList_Indent_Level_1 }} + +**VB — Form1.vb** + +{% capture codesnippet4 %} +{% tabs %} +{% highlight vb %} +Imports System.Windows.Forms +Imports Syncfusion.WinForms.DataGrid -sfDataGrid1.ThemeName = "VioletTheme" +Public Class Form1 + Private sfDataGrid1 As SfDataGrid + Public Sub New() + InitializeComponent() + + ' The ThemeName must match the exported assembly name. + sfDataGrid1 = New SfDataGrid() + sfDataGrid1.ThemeName = "VioletTheme" + Me.Controls.Add(sfDataGrid1) + End Sub +End Class {% endhighlight %} {% endtabs %} +{% endcapture %} +{{ codesnippet4 | OrderList_Indent_Level_1 }} **Step 3:** -Compile and run the Windows Forms application and you can now witness the custom theme applied to SfDataGrid control at run-time. +Compile and run the Windows Forms application. The custom theme is applied to the SfDataGrid control at run-time. -![Theme applied in SfDataGrid](ThemeStudio_images/Theme-applied-SfDataGrid.png) +![Theme applied in SfDataGrid](ThemeStudio_images/Theme-applied-SfDataGrid.png) \ No newline at end of file From 8ba31a6943af72085b59cd23ea211afe3dbf9937 Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Thu, 16 Jul 2026 10:45:06 +0530 Subject: [PATCH 03/11] Committing the CI Fixes --- ...ompatibility-with-the-NIST-MBARK-framework.md | 2 +- WindowsForms/HighDPI-support.md | 10 ++++------ WindowsForms/Installation.md | 4 ++-- WindowsForms/dotnet-core-compatibility.md | 4 +--- WindowsForms/theme-studio/theme-studio.md | 16 ++-------------- 5 files changed, 10 insertions(+), 26 deletions(-) diff --git a/WindowsForms/Compatibility-with-the-NIST-MBARK-framework.md b/WindowsForms/Compatibility-with-the-NIST-MBARK-framework.md index 4d8849e18..e2dca5227 100644 --- a/WindowsForms/Compatibility-with-the-NIST-MBARK-framework.md +++ b/WindowsForms/Compatibility-with-the-NIST-MBARK-framework.md @@ -12,4 +12,4 @@ documentation: ug # Compatibility with the NIST MBARK Framework Syncfusion components are compatible with the [NIST's MBARK](https://www.nist.gov/services-resources/software/multimodal-biometric-application-resource-kit-mbark) Framework applications. `NIST MBARK` is public domain source code that may be leveraged to develop the next generation of biometric and personal identity verification applications. `NIST MBARK` application is based on .NET 3.5 SP1 Framework and latest .NET Framework versions. Incorporating the `MBARK` libraries can yield a variety of enhancements critical for the success of any real-world system. -`NIST's MBARK` is originally envisioned as a tool to develop a large database of face, fingerprint and iris images for performance testing of biometric systems. `MBARK` has evolved into a standardized, flexible middleware package that will enable organizations to plug in sensors from different manufacturers. \ No newline at end of file +`NIST's MBARK` was originally envisioned as a tool to develop a large database of face, fingerprint, and iris images for performance testing of biometric systems. `MBARK` has evolved into a standardized, flexible package that enables organizations to plug in sensors from different manufacturers. \ No newline at end of file diff --git a/WindowsForms/HighDPI-support.md b/WindowsForms/HighDPI-support.md index 6a689db94..75b79b236 100644 --- a/WindowsForms/HighDPI-support.md +++ b/WindowsForms/HighDPI-support.md @@ -20,7 +20,7 @@ Desktop applications fall into two categories based on the DPI awareness: ### Non-DPI aware application -Non-DPI aware applications always render at 96 DPI, scale it up to the actual DPI, and leave entire scaling to the operating system. It keeps your application layout intact at the cost of quality - blurred images and more. The operating system applies font scaling and bitmap stretching in this mode. +Non-DPI aware applications always render at 96 DPI, scale it up to the actual DPI, and leave entire scaling to the operating system. It keeps your application layout intact at the cost of quality - blurred images and more. Refer to the following DataGrid sample demo screenshot that runs under 192 DPI with blurred text and icons. @@ -138,7 +138,7 @@ To turn your desktop application into DPI-aware and add `app.manifest` file, fol {% capture codesnippet1 %} {% tabs %} -{% highlight xml %} +{% highlight xaml %} @@ -146,7 +146,7 @@ To turn your desktop application into DPI-aware and add `app.manifest` file, fol -{% endhighlight %} +{% endhighlight xaml %} {% endtabs %} {% endcapture %} {{ codesnippet1 | OrderList_Indent_Level_1 }} @@ -275,6 +275,4 @@ buttonAdv1.Image = imageListAdv1.Images(0) #### 200 Scaling -![Adding images and index](HighDPI_images/DPI_200.png) - - +![Adding images and index](HighDPI_images/DPI_200.png) \ No newline at end of file diff --git a/WindowsForms/Installation.md b/WindowsForms/Installation.md index 414a865cb..219800e9a 100644 --- a/WindowsForms/Installation.md +++ b/WindowsForms/Installation.md @@ -8,7 +8,7 @@ documentation: ug --- -# Installation in Windows Forms controls +# Installing Essential Studio for Windows Forms ## Manual Installation @@ -21,7 +21,7 @@ The following procedure illustrates how to manually install Essential Studio for 5. Click Next. Then, Select the Installation and Samples Folder window opens. 6. To install it in the displayed default location, click “Install”. 7. Select the “Run Dashboard” check box to launch the Dashboard after installing. -8. Click "Finish". Essential Studio is installed on the system and the Syncfusion Essential Studio [Dashboard](https://help.syncfusion.com/common/essential-studio/dashboard) is launched automatically. +8. Click **Finish**. Essential Studio is installed on the system, and the Syncfusion Essential Studio [Dashboard](https://help.syncfusion.com/common/essential-studio/overview) is launched automatically. ## Command Line installation diff --git a/WindowsForms/dotnet-core-compatibility.md b/WindowsForms/dotnet-core-compatibility.md index 5df46b056..607db2ce7 100644 --- a/WindowsForms/dotnet-core-compatibility.md +++ b/WindowsForms/dotnet-core-compatibility.md @@ -7,7 +7,7 @@ control: .NET Core documentation: ug --- -# WinForms Applications using .NET Core and Syncfusion® WinForms Controls +# Using Syncfusion WinForms with .NET Core Syncfusion® Essential Studio® for Windows Forms provides .NET Core assemblies for building Windows Forms .NET Core applications using Syncfusion® Controls. This section explains how to create the project in a .NET Core application and using Syncfusion® Windows Forms controls. @@ -68,8 +68,6 @@ We are now going to see a demo on how to add **ButtonAdv** control in WinForms . ButtonAdv button = new ButtonAdv(); button.Text = "ButtonAdv"; -button.Location = new System.Drawing.Point(100, 100); -button.Size = new System.Drawing.Size(200, 30); this.Controls.Add(button); {% endhighlight %} diff --git a/WindowsForms/theme-studio/theme-studio.md b/WindowsForms/theme-studio/theme-studio.md index d12148cbd..805370f69 100644 --- a/WindowsForms/theme-studio/theme-studio.md +++ b/WindowsForms/theme-studio/theme-studio.md @@ -81,9 +81,9 @@ You can now add the exported assembly to your Windows Forms application and set **Step 1:** -Add the exported assembly (*.dll) as a reference in your Windows Forms project (for example, right-click the project in **Solution Explorer** and choose **Add** → **Reference** → **Browse**, then select the exported DLL). +Add the exported assembly (*.dll) as a reference in your Windows Forms project (for example, right-click the project in **Solution Explorer** and choose **Add** → **Reference** → **Browse**, select the exported assembly file). -**Note:** Close Theme Studio before referencing the exported DLL to avoid file-lock errors. +**Note:** Close Theme Studio before referencing the exported assembly file to avoid file locking errors. ![Attach exported assembly in Windows Forms project](ThemeStudio_images/Export-dialog-theme-studio.png) @@ -93,7 +93,6 @@ Load the theme assembly in `Program.cs` of your application and then initialize **C# — Program.cs** -{% capture codesnippet1 %} {% tabs %} {% highlight c# %} using System; @@ -127,12 +126,9 @@ namespace ThemeStudioDemo } {% endhighlight %} {% endtabs %} -{% endcapture %} -{{ codesnippet1 | OrderList_Indent_Level_1 }} **C# — Form1.cs** -{% capture codesnippet2 %} {% tabs %} {% highlight c# %} using System.Windows.Forms; @@ -157,12 +153,9 @@ namespace ThemeStudioDemo } {% endhighlight %} {% endtabs %} -{% endcapture %} -{{ codesnippet2 | OrderList_Indent_Level_1 }} **VB — Program.vb** -{% capture codesnippet3 %} {% tabs %} {% highlight vb %} Imports System @@ -188,12 +181,9 @@ Module Program End Module {% endhighlight %} {% endtabs %} -{% endcapture %} -{{ codesnippet3 | OrderList_Indent_Level_1 }} **VB — Form1.vb** -{% capture codesnippet4 %} {% tabs %} {% highlight vb %} Imports System.Windows.Forms @@ -213,8 +203,6 @@ Public Class Form1 End Class {% endhighlight %} {% endtabs %} -{% endcapture %} -{{ codesnippet4 | OrderList_Indent_Level_1 }} **Step 3:** From 0a38c3640396ef61fd3bee7ceb7ec29856441afe Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Thu, 16 Jul 2026 11:01:28 +0530 Subject: [PATCH 04/11] Committing the updated Skin Manager and the CI issue Fix --- WindowsForms/HighDPI-support.md | 12 ++---------- WindowsForms/skins/Getting-Started.md | 2 +- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/WindowsForms/HighDPI-support.md b/WindowsForms/HighDPI-support.md index 75b79b236..8e69061de 100644 --- a/WindowsForms/HighDPI-support.md +++ b/WindowsForms/HighDPI-support.md @@ -136,7 +136,6 @@ To turn your desktop application into DPI-aware and add `app.manifest` file, fol 4. When setting the `dpiAware` to true, the control will be drawn using the current DPI value. In this, the font size and image size will be automatically increased. The high DPI controls can be enabled by the following code snippet. -{% capture codesnippet1 %} {% tabs %} {% highlight xaml %} @@ -146,10 +145,8 @@ To turn your desktop application into DPI-aware and add `app.manifest` file, fol -{% endhighlight xaml %} +{% endhighlight %} {% endtabs %} -{% endcapture %} -{{ codesnippet1 | OrderList_Indent_Level_1 }} 5. Most of the Syncfusion controls support high DPI through a manifest file. But the following Syncfusion control provides the high DPI support by adding both manifest file and enabling the [DpiAware](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.ScrollControl.html#Syncfusion_Windows_Forms_ScrollControl_DpiAware) property. @@ -159,7 +156,7 @@ To turn your desktop application into DPI-aware and add `app.manifest` file, fol * GridDataBoundGrid * GridListControl -{% capture codesnippet2 %} + {% tabs %} {% highlight c# %} @@ -192,8 +189,6 @@ gridListControl1.Grid.DpiAware = True {% endhighlight %} {% endtabs %} -{% endcapture %} -{{ codesnippet2 | OrderList_Indent_Level_1 }} ## Automatically change images based on DPI through ImageListAdv component @@ -241,7 +236,6 @@ The steps below illustrate the setting of image for a ButtonAdv using ImageListA 8. Now map the desired image from the [`Images`](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.Tools.ImageListAdv.html#Syncfusion_Windows_Forms_Tools_ImageListAdv_Images) collection to the ButtonAdv control using its [`Image`](https://help.syncfusion.com/cr/windowsforms/Syncfusion.Windows.Forms.ButtonAdv.html) property. -{% capture codesnippet3 %} {% tabs %} {% highlight c# %} @@ -255,8 +249,6 @@ buttonAdv1.Image = imageListAdv1.Images(0) {% endhighlight %} {% endtabs %} -{% endcapture %} -{{ codesnippet3 | OrderList_Indent_Level_1 }} 9. Run the application and the image for the ButtonAdv will be displayed as per the image set for different DPI scaling as shown below. diff --git a/WindowsForms/skins/Getting-Started.md b/WindowsForms/skins/Getting-Started.md index 9c99fb476..d8a3b9895 100644 --- a/WindowsForms/skins/Getting-Started.md +++ b/WindowsForms/skins/Getting-Started.md @@ -15,7 +15,7 @@ This section briefly describes how to create a new Windows Forms project in Visu SkinManager is present in the `Syncfusion.Shared.Base` assembly. -N> Prerequisite: The corresponding Syncfusion WinForms assemblies (e.g., `Syncfusion.Shared.Base`, and the theme-specific assemblies listed below) must be referenced in the project. The Syncfusion WinForms Toolbox installer / Visual Studio extension must be installed for the SkinManager component to appear in the toolbox. +N> The corresponding Syncfusion WinForms assemblies (e.g., `Syncfusion.Shared.Base`, and the theme-specific assemblies listed below) must be referenced in the project. The Syncfusion WinForms Toolbox installer / Visual Studio extension must be installed for the SkinManager component to appear in the toolbox.
From 62498e2630ecd177c60541cdca5de9e66f87946e Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Fri, 17 Jul 2026 11:48:14 +0530 Subject: [PATCH 05/11] Committing the updated content of the UG in the listed files AI,Installation,Licensing,Section508,Upgrade,Visual-Studio-Integration,skills,theme-studio-issue. --- .../AI-Coding-Assistant/mcp-server.md | 17 +- WindowsForms/AI-Coding-Assistant/overview.md | 8 +- .../AI-Coding-Assistant/prompt-library.md | 246 +++++++++--------- .../Applying-patches/Applying-patches.md | 29 +-- .../Installation/Installation-errors.md | 10 +- .../Installation/install-nuget-packages.md | 68 +++-- .../offline-installer/how-to-download.md | 20 +- .../offline-installer/how-to-install.md | 56 ++-- .../web-installer/how-to-download.md | 16 +- .../web-installer/how-to-install.md | 66 +++-- WindowsForms/Licensing/how-to-generate.md | 24 +- .../how-to-register-in-an-application.md | 6 +- WindowsForms/Licensing/licensing-errors.md | 62 ++--- .../licensing-faq/CI-license-validation.md | 43 +-- ...ion-Essential-Studio-license-validation.md | 8 +- ...rial-version-after-purchasing-a-license.md | 8 +- ...g-syncfusion-account-for-nuget-org-user.md | 12 +- .../where-can-i-get-a-license-key.md | 11 +- WindowsForms/Licensing/overview.md | 2 + WindowsForms/Section508Compliance/VPAT.md | 2 +- ...ncfusion-components-using-vs-extensions.md | 24 +- WindowsForms/Upgrade/how-to-upgrade.md | 10 +- ...rade-syncfusion-winforms-nuget-packages.md | 56 ++-- .../Add-References.md | 22 +- .../Check-for-Updates.md | 10 +- .../Item-Template.md | 38 +-- .../Visual-Studio-Integration/Overview.md | 24 +- .../Syncfusion-Notifications.md | 14 +- .../Template-Studio.md | 21 +- .../Toolbox-Configuration.md | 6 +- .../Troubleshooting.md | 4 +- .../download-and-installation.md | 6 +- .../ai-tools/ai-powered-development.md | 6 +- WindowsForms/skills/component-skills.md | 46 ++-- WindowsForms/skills/ui-builder-skill.md | 15 +- WindowsForms/skins/Getting-Started.md | 8 +- WindowsForms/skins/Overview.md | 6 +- WindowsForms/theme-studio/theme-studio.md | 118 +++------ 38 files changed, 627 insertions(+), 521 deletions(-) diff --git a/WindowsForms/AI-Coding-Assistant/mcp-server.md b/WindowsForms/AI-Coding-Assistant/mcp-server.md index f3adc189a..49dbf6ccd 100644 --- a/WindowsForms/AI-Coding-Assistant/mcp-server.md +++ b/WindowsForms/AI-Coding-Assistant/mcp-server.md @@ -24,7 +24,7 @@ The [SyncfusionWinFormsAssistant](https://www.npmjs.com/package/@syncfusion/winf Before using [SyncfusionWinFormsAssistant](https://www.npmjs.com/package/@syncfusion/winforms-assistant), ensure you have: * Required [node](https://nodejs.org/en/) version >= 18 -* A [compatible MCP client](https://modelcontextprotocol.io/clients) (VS Code with GitHub Copilot, [Syncfusion® CodeStudio](https://www.syncfusion.com/code-studio/), etc.) +* A [compatible MCP client](https://modelcontextprotocol.io/clients) (VS Code with GitHub Copilot, [Syncfusion® Code Studio](https://www.syncfusion.com/code-studio/), etc.) * An active Syncfusion® license (any of the following): - [Commercial License](https://www.syncfusion.com/sales/unlimitedlicense) - [Free Community License](https://www.syncfusion.com/products/communitylicense) @@ -51,10 +51,10 @@ Before you can invoke the `SyncfusionWinFormsAssistant` MCP server, you need to - **npm package name**: `@syncfusion/winforms-assistant` - **Type**: stdio (standard input/output transport) - **Command**: npx -- **Arguments**: -y +- **Arguments**: `["-y", "@syncfusion/winforms-assistant@latest"]` - **Server name**: SyncfusionWinFormsAssistant -You need to add your [Syncfusion API key](https://syncfusion.com/account/api-key) as an env parameter in the configuration file: +You need to add your [Syncfusion API key](https://syncfusion.com/account/api-key) as an env parameter in the configuration file. The `Syncfusion_API_Key` variable authenticates requests from the MCP server to Syncfusion's documentation service: ```json "env": { @@ -66,7 +66,8 @@ Below are setup instructions for popular MCP clients: ### Syncfusion® Code Studio -* In [Code Studio](https://www.syncfusion.com/code-studio/), open MCP Marketplace and navigate to the `Custom Servers` tab. +* Sign in to [Code Studio](https://www.syncfusion.com/code-studio/) with your Syncfusion account before installing the server. +* In Code Studio, open MCP Marketplace and navigate to the `Custom Servers` tab. * Enter the Server Name as `winforms-mcp`, choose Server Type as npm package, and set the NPM Package name to `@syncfusion/winforms-assistant`. * Add an environment variable as `Syncfusion_API_Key` and value as your [Syncfusion API key](https://syncfusion.com/account/api-key), then click **Install Server**. * Once installed, the server will appear in the User Installed Server list, and will be added to the **config.yaml** file. @@ -102,6 +103,7 @@ Below are setup instructions for popular MCP clients: ### Visual Studio (GitHub Copilot MCP) +* MCP server support requires Visual Studio 2022 or later. * To configure an MCP server for a specific workspace, you can create a `.vs/mcp.json` file in your workspace folder. ```json @@ -122,13 +124,13 @@ Below are setup instructions for popular MCP clients: } ``` -* After updating the mcp.json configuration, open the GitHub Copilot Chat window. Click the Ask arrow, then select Agent. +* After updating the mcp.json configuration, open the GitHub Copilot Chat window. Click the Ask arrow, then select **Agent** mode (Ask/Edit modes do not expose MCP tools). * Select the [SyncfusionWinFormsAssistant](https://www.npmjs.com/package/@syncfusion/winforms-assistant) from the tools section. * For more details, refer to the official [Visual Studio documentation](https://learn.microsoft.com/en-us/visualstudio/ide/mcp-servers?view=vs-2022). ### Cursor -To configure an MCP server for a specific workspace, you can create a .cursor/mcp.json file in your workspace folder. +To configure an MCP server for a specific workspace, you can create a .cursor/mcp.json file in your workspace folder. After saving the file, restart Cursor and confirm the server appears under **Settings → MCP**. ```json { @@ -172,7 +174,7 @@ For more details, refer to the [Cursor documentation](https://cursor.com/docs/co } ``` -* Click OK and Apply. +* Click OK and Apply. Verify the server is listed under **Settings → Tools → AI Assistant → Model Context Protocol (MCP)**. For further assistance, see the [JetBrains documentation](https://www.jetbrains.com/help/ai-assistant/mcp.html#connect-to-an-mcp-server). @@ -229,7 +231,6 @@ Product support is available through the following mediums. * [Support ticket](https://support.syncfusion.com/support/tickets/create) - Guaranteed Response in 24 hours \| Unlimited tickets \| Holiday support * [Community forum](https://www.syncfusion.com/forums/windowsforms) * [Request feature or report bug](https://www.syncfusion.com/feedback/winforms) -* Live chat ## See also diff --git a/WindowsForms/AI-Coding-Assistant/overview.md b/WindowsForms/AI-Coding-Assistant/overview.md index 53ae2483b..9a952b3c4 100644 --- a/WindowsForms/AI-Coding-Assistant/overview.md +++ b/WindowsForms/AI-Coding-Assistant/overview.md @@ -9,7 +9,7 @@ documentation: ug # Syncfusion® AI Coding Assistant Overview -The **Syncfusion® AI Coding Assistant** are designed to streamline your development workflow when building Windows Forms applications with Syncfusion® components. It uses contextual knowledge of the Syncfusion® component library to generate accurate code snippets, configuration examples, and guided explanations—minimizing documentation searches and maximizing productivity. +The **Syncfusion® AI Coding Assistant** is designed to streamline your development workflow when building Windows Forms applications with Syncfusion® components. It uses contextual awareness based on Syncfusion's documentation to generate accurate code snippets, configuration examples, and guided explanations—minimizing documentation searches and maximizing productivity. AI Coding Assistant: @@ -29,6 +29,8 @@ To use the AI Coding Assistant, you need: * An active [API KEY](https://syncfusion.com/account/api-key) * A [Windows Forms application that includes Syncfusion Windows Forms](https://help.syncfusion.com/windowsforms/overview) +The AI Coding Assistant is supported on Syncfusion WinForms current and previous major releases. See the [SyncfusionWinFormsAssistant MCP Server](https://help.syncfusion.com/windowsforms/ai-coding-assistant/mcp-server) page for setup steps and the [Prompt Library](https://help.syncfusion.com/windowsforms/ai-coding-assistant/prompt-library) for ready-made prompts. + ## Unlimited Access Syncfusion® offers unlimited access to the AI Coding Assistant, with no limitations on: @@ -53,7 +55,7 @@ This ensures users can fully leverage Syncfusion® ## Recommendations * Session Management: Start new sessions when switching tasks to ensure prompt relevance and maintain content focus. -* Model Compatibility: For optimal performance, use the tools with advanced AI models such as GPT-5 or Claude Sonnet 4. +* Model Compatibility: For optimal performance, use the tools with a current advanced AI model available in your region, such as GPT-5 or Claude Sonnet 4. ## Privacy & Data Handling @@ -66,5 +68,5 @@ The Syncfusion® AI Coding Assistant is desi ## See also -* Add the **SyncfusionWinFormsAssistant MCP Server** to an MCP-enabled client. +* Add the [SyncfusionWinFormsAssistant MCP Server](https://help.syncfusion.com/windowsforms/ai-coding-assistant/mcp-server) to an MCP-enabled client. * [Syncfusion® Windows Forms Documentation](https://help.syncfusion.com/windowsforms/overview). diff --git a/WindowsForms/AI-Coding-Assistant/prompt-library.md b/WindowsForms/AI-Coding-Assistant/prompt-library.md index cb1f99ad4..aef834d29 100644 --- a/WindowsForms/AI-Coding-Assistant/prompt-library.md +++ b/WindowsForms/AI-Coding-Assistant/prompt-library.md @@ -13,7 +13,7 @@ Speed up your WinForms projects using these ready-made prompts for popular Syncf ## How to Use -Before starting, make sure your MCP Server is set up and running. +Before starting, make sure your MCP Server is set up and running. Confirm `SyncfusionWinFormsAssistant` is listed as an active tool in your MCP client. * Choose a prompt that fits your need. * Copy the full prompt with the #SyncfusionWinFormsAssistant handle. @@ -21,6 +21,8 @@ Before starting, make sure your MCP Server is set up and running. * Execute via the MCP Server. * Always check and test the code before adding it to your project. +Prompts target the current major Syncfusion WinForms release and are validated against the latest APIs available in that release. + ## Component-Specific Prompts ### DataGrid @@ -64,31 +66,31 @@ The Syncfusion WinForms DataGrid provides fast, flexible tabular views for large The Syncfusion WinForms Chart suite offers versatile visualizations across many series types for clear, insightful data representation. -{% promptcards %} -{% promptcard Data Binding %} +{% promptcards %} +{% promptcard %} #SyncfusionWinFormsAssistant How to bind data sources to a Syncfusion WinForms Chart for dynamic visualization? -{% endpromptcard %} -{% promptcard MVVM Support %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How can I integrate Syncfusion WinForms Charts with MVVM-style patterns for clean architecture? -{% endpromptcard %} -{% promptcard Chart Types %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant What chart types are available in Syncfusion WinForms Chart and how to configure them? -{% endpromptcard %} -{% promptcard Zooming and Panning %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to enable zooming and panning in WinForms Charts for large datasets? -{% endpromptcard %} -{% promptcard Trendlines %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Add trendlines to highlight patterns and predictions in WinForms Charts. -{% endpromptcard %} -{% promptcard Export to Image or PDF %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to export a Syncfusion Chart to PDF or an image format? -{% endpromptcard %} -{% promptcard Print Support %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Enable print functionality for a Syncfusion WinForms Chart component. -{% endpromptcard %} -{% promptcard Data Labels and Tooltips %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Enable tooltips and data labels in a Syncfusion WinForms Chart. -{% endpromptcard %} +{% endpromptcard %} {% promptcard Tooltips and Trackball %} #SyncfusionWinFormsAssistant Show interactive tooltips and a trackball with formatted labels and multiple series value display. {% endpromptcard %} @@ -110,187 +112,187 @@ The Syncfusion WinForms Chart suite offers versatile visualizations across many {% promptcard Gridlines and Chart Area Styling %} #SyncfusionWinFormsAssistant Customize major/minor gridlines, tick lines, chart area background, and border. {% endpromptcard %} -{% promptcard Drill-Down Support %} +{% promptcard %} #SyncfusionWinFormsAssistant How to implement drill-down functionality in WinForms Charts for detailed exploration? -{% endpromptcard %} -{% promptcard Multiple Series Types %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to combine bar and line chart types in a single Syncfusion Chart? {% endpromptcard %} -{% promptcard Custom Markers and Labels %} +{% promptcard %} #SyncfusionWinFormsAssistant Show me an example of customizing chart markers and data label styles. -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ### Diagram The Syncfusion WinForms Diagram library is powerful, extensible, and feature-rich for creating and editing interactive diagrams. -{% promptcards %} -{% promptcard Data Source %} +{% promptcards %} +{% promptcard %} #SyncfusionWinFormsAssistant How to populate the Diagram from a database or XML data? -{% endpromptcard %} -{% promptcard Nodes %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Create a custom symbol in the Syncfusion Diagram component. -{% endpromptcard %} -{% promptcard ToolTip Support for Nodes %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Show how to display tooltips for symbols in the Syncfusion Diagram component? -{% endpromptcard %} -{% promptcard Connectors Customization %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to customize connector styles? -{% endpromptcard %} -{% promptcard Decorator Customization %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to customize decorator shapes and styles? -{% endpromptcard %} -{% promptcard Annotation %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to disable label editing? -{% endpromptcard %} -{% promptcard Ports %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to add ports to a custom symbol? -{% endpromptcard %} -{% promptcard Export to Word Document %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to export a diagram to a Word document? -{% endpromptcard %} -{% promptcard Print support %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to print a diagram on a single page? -{% endpromptcard %} -{% promptcard Serialization %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to serialize a node’s custom properties? -{% endpromptcard %} -{% promptcard Selection Handles Customization %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Show me an example of customizing the appearance of selection handles? -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ### Ribbon The Syncfusion WinForms Ribbon is an Office-inspired command bar with tabs and groups, Backstage, Quick Access Toolbar, KeyTips, themes, and High DPI support. -{% promptcards %} -{% promptcard Add Ribbon Items %} +{% promptcards %} +{% promptcard %} #SyncfusionWinFormsAssistant Add RibbonTab, ToolStripEx (group), ToolStripButton, ToolStripDropDownButton, ToolStripSplitButton, ToolStripComboBox, and ToolStripGallery items to the Ribbon? -{% endpromptcard %} -{% promptcard Application Menu (Backstage) %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Configure the Backstage (application menu) with tabs, buttons, and recent items in the Ribbon. -{% endpromptcard %} -{% promptcard Quick Access Toolbar %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Add, remove, and customize items in the Quick Access Toolbar (QAT). -{% endpromptcard %} -{% promptcard ScreenTip / SuperToolTip %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Configure ScreenTips or SuperToolTips on Ribbon items. -{% endpromptcard %} +{% endpromptcard %} {% promptcard KeyTips %} #SyncfusionWinFormsAssistant How to enable and customize KeyTips (keyboard access keys) for Ribbon items? -{% endpromptcard %} -{% promptcard Serialization %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to save and restore the Ribbon layout, QAT, and Backstage state between sessions? -{% endpromptcard %} -{% promptcard Contextual Tabs %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to add contextual (category) Ribbon tabs and show/hide them at runtime? -{% endpromptcard %} -{% promptcard Ribbon Gallery %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to create a Ribbon gallery with item preview, grouping, and selection handling? -{% endpromptcard %} -{% promptcard Themes and High DPI %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to apply Office themes and ensure proper High DPI scaling in the Ribbon? -{% endpromptcard %} -{% promptcard Simplified / Collapsed Layout %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to enable a simplified or collapsed layout with automatic resizing rules? -{% endpromptcard %} -{% promptcard Ribbon Merging (MDI) %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to merge parent and MDI child Ribbon tabs/groups dynamically? -{% endpromptcard %} -{% promptcard Custom Caption and Form Integration %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to integrate the Ribbon with the Form title bar, custom caption buttons, and window icon behavior? -{% endpromptcard %} -{% promptcard Localization and RTL %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to localize Ribbon text /resources and enable right-to-left (RTL) layout? -{% endpromptcard %} -{% promptcard Runtime Item Management %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to add, remove, or reorder Ribbon tabs, groups, and items programmatically at runtime? -{% endpromptcard %} -{% promptcard Keyboard and Shortcuts %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to assign keyboard shortcuts and handle command routing for Ribbon items? -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ### Docking Manager The Syncfusion WinForms Docking Manager provides Visual Studio–like dockable windows for your applications. -{% promptcards %} -{% promptcard Add Dock Panels Programmatically %} +{% promptcards %} +{% promptcard %} #SyncfusionWinFormsAssistant How to create and add dockable panels (UserControl/Control) programmatically to the Docking Manager? -{% endpromptcard %} -{% promptcard Dock Support Control %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to enable or disable docking for specific controls or globally? -{% endpromptcard %} -{% promptcard Drag Support %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to enable or disable drag/resize behavior for docked windows? -{% endpromptcard %} -{% promptcard Float and Auto-Hide Programmatically %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to float, auto-hide, or restore a docked window via code? -{% endpromptcard %} -{% promptcard Tabbed Documents %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to create tabbed document windows and manage document groups? -{% endpromptcard %} -{% promptcard Prevent Close or Customize Caption %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to prevent closing certain dock windows and customize caption text, icons, and buttons? -{% endpromptcard %} -{% promptcard Context Menu Customization %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to disable or customize the dock window/tab context menu? -{% endpromptcard %} -{% promptcard Events for State Changes %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Which events track dock state changes (docked, floating, auto-hide, closed) and how to handle them? -{% endpromptcard %} -{% promptcard Serialization / Layout Persistence %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to save and restore the Docking Manager layout to a file/stream and handle versioned changes? -{% endpromptcard %} -{% promptcard Theming and High DPI %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to apply themes and ensure High DPI scaling for Docking Manager windows and tabs? -{% endpromptcard %} -{% promptcard Runtime Add/Remove Panels %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to dynamically add and remove dock panels at runtime and update the layout? -{% endpromptcard %} -{% promptcard Restrict Docking Targets %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to restrict where a panel can dock (left/right/top/bottom/tabbed) or disallow floating? -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ### Calendar The Syncfusion WinForms Calendar supports flexible date selection, localization, and custom rendering. -{% promptcards %} -{% promptcard Date Range Selection %} +{% promptcards %} +{% promptcard %} #SyncfusionWinFormsAssistant How to enable date range selection in the Syncfusion WinForms Calendar? -{% endpromptcard %} -{% promptcard Globalization Support %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Configure the Calendar to support multiple cultures and languages. -{% endpromptcard %} -{% promptcard Multi-Date Selection %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Show me how to allow users to select multiple dates in the Calendar. -{% endpromptcard %} -{% promptcard Skip Months Feature %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Enable skipping months in Calendar navigation for faster browsing. -{% endpromptcard %} -{% promptcard Show Other-Month Days %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant How to show days from adjacent months in the current Calendar view? -{% endpromptcard %} -{% promptcard Custom Day Cell Format %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Customize the day cell format to show short weekday names. -{% endpromptcard %} -{% promptcard Highlight Weekends %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Highlight weekends in the Calendar with a different background color. -{% endpromptcard %} -{% promptcard Multi-Selection and Range %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Enable both multi-date selection and range selection in the Calendar. -{% endpromptcard %} -{% promptcard Troubleshooting Date Range %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Why isn’t my Calendar selecting the correct date range? -{% endpromptcard %} -{% promptcard Advanced Calendar Setup %} +{% endpromptcard %} +{% promptcard %} #SyncfusionWinFormsAssistant Create a Calendar with date range, multi-selection, globalization, and weekend highlights. -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ## See also diff --git a/WindowsForms/Applying-patches/Applying-patches.md b/WindowsForms/Applying-patches/Applying-patches.md index 66bcf9734..946fdc817 100644 --- a/WindowsForms/Applying-patches/Applying-patches.md +++ b/WindowsForms/Applying-patches/Applying-patches.md @@ -11,63 +11,46 @@ documentation: ug Syncfusion provides patch installer for major version or service pack version, either to add new features or to fix issues. You have to install the patches in the order you have received. - ## Installing the Patch installer The steps below show how to install a patch. - -I> Before installing the patch, ensure that corresponding Essential Studio version platform has been installed in your machine. - - +I> Before installing the patch, ensure that the corresponding Essential Studio version is installed on your machine. 1. Double-click the Syncfusion Essential Studio patch installer. The Syncfusion Essential Studio Service Pack opens. ![Welcome Wizard](Patches_images/Installing-a-Patch-Setup_img2.png) - - - 2. Click Next. The Assembly Manager screen opens. ![Assembly Manager](Patches_images/Installing-a-Patch-Setup_img3.png) - - - 3. Select the Run Assembly Manager check box to install the assemblies in GAC. 4. Click Next. The Ready To Install screen opens. ![Ready To Install](Patches_images/Installing-a-Patch-Setup_img4.png) - - - 5. Click Install to continue installing. ![Installation Progress](Patches_images/Installing-a-Patch-Setup_img5.png) N> The patch is installed on your computer, and a dialog box appears when the installation is complete. - - ![Finish Wizard](Patches_images/Installing-a-Patch-Setup_img7.png) - -6. Click Finish. The new assemblies are placed in the Pre-Compiled Assemblies folder. These new assemblies can be referenced in your project. - +6. Click Finish. The new assemblies are placed in the **Pre-Compiled Assemblies** folder. By default this folder is located at `%ProgramFiles%\Syncfusion\Essential Studio\\Pre-Compiled Assemblies`. These new assemblies can be referenced in your project. ## Patch Assembly Version Format -In the patch assembly, the **File Version** and **Product Version** will be different. Product Version will be the release version and File Version will be the increment of the release version's **revision** number. For each patch, the File Version will be a different one. You can differentiate between the build and patch assemblies by File Version. - +In the patch assembly, the **File Version** and **Product Version** will be different. The **Product Version** matches the release version of Essential Studio. The **File Version** increments the release version's **revision** number; each patch ships with a different File Version, which is how you distinguish a patched assembly from a release assembly. To view these values, right-click a Syncfusion assembly, choose **Properties**, and open the **Details** tab. + **File Version of the assembly shipped in build:** -![Patch Assembly](Patches_images/Installing-a-Patch-Setup_img8.png) +![File Version of a patched assembly](Patches_images/Installing-a-Patch-Setup_img8.png) **Product Version of the assembly shipped in patch:** -![Patch Assembly](Patches_images/Installing-a-Patch-Setup_img9.png) +![Product Version of a patched assembly](Patches_images/Installing-a-Patch-Setup_img9.png) diff --git a/WindowsForms/Installation/Installation-errors.md b/WindowsForms/Installation/Installation-errors.md index 18abd2c43..6612d6ca6 100644 --- a/WindowsForms/Installation/Installation-errors.md +++ b/WindowsForms/Installation/Installation-errors.md @@ -32,7 +32,7 @@ You are attempting to use a Trial unlock key to unlock the licensed installer. ### Suggested solution -Only a licensed unlock key can unlock a licensed installer. So, to unlock the Licensed installer, use the Licensed unlock key. To generate the licensed unlock key, refer to [this](http://syncfusion.com/kb/2326) article. +Only a licensed unlock key can unlock a licensed installer. So, to unlock the Licensed installer, use the Licensed unlock key. To generate the licensed unlock key, refer to [this](https://www.syncfusion.com/kb/2326) article. You can retrieve the licensed unlock key from your registered account's [License & Downloads](https://www.syncfusion.com/account/downloads) page. ## License has expired @@ -76,7 +76,7 @@ You can choose from the options listed below. The following are possible causes of this error: -* When your trial period expired +* When your trial period has expired * When you don't have a license or an active trial * You are not the license holder of your license * Your account administrator has not yet assigned you a license. @@ -86,9 +86,9 @@ The following are possible causes of this error: You can choose from the options listed below. 1. You can get a new license [here](https://www.syncfusion.com/sales/products). -2. Contact your account administrator. -3. Send an email to to request a license. -4. You can reach out to our sales team by emailing . +2. Contact your account administrator. To find the administrator of your Syncfusion account, sign in to the [Syncfusion account](https://www.syncfusion.com/account) and check the **Account Settings** page, where the account owner is listed. +3. Send an email to to request a license. +4. You can reach out to our sales team by emailing . ## Unable to install because of another installation diff --git a/WindowsForms/Installation/install-nuget-packages.md b/WindowsForms/Installation/install-nuget-packages.md index 4dd80cde9..f9202367b 100644 --- a/WindowsForms/Installation/install-nuget-packages.md +++ b/WindowsForms/Installation/install-nuget-packages.md @@ -12,9 +12,32 @@ documentation: ug ## Overview -**NuGet** is a Package management system for Visual Studio. It makes it easy to add, update and remove external libraries in our application. Syncfusion publishing all WinForms NuGet packages in [nuget.org](https://www.nuget.org/packages?q=Tags%3A%22Winforms%22+syncfusion). The Syncfusion WinForms NuGet packages can be used without installing the Syncfusion Essential Studio setup. You can simply exploit the Syncfusion WinForms NuGet packages in WinForms application to develop with the Syncfusion WinForms components. +**NuGet** is a Package management system for Visual Studio. It makes it easy to add, update and remove external libraries in our application. Syncfusion publishes all WinForms NuGet packages in [nuget.org](https://www.nuget.org/packages?q=Tags%3A%22Winforms%22+syncfusion). The Syncfusion WinForms NuGet packages can be used without installing the Syncfusion Essential Studio setup. You can simply use the Syncfusion WinForms NuGet packages in a WinForms application to develop with the Syncfusion WinForms components. -> From v16.2.0.46 (2018 Volume 2 Service Pack 1) onwards, all the Syncfusion WinForms components are available as NuGet packages at nuget.org. +> From v16.2.0.46 (2018 Volume 2 Service Pack 1) onwards, all the Syncfusion WinForms components are available as NuGet packages at nuget.org. The current major package naming uses the `Syncfusion.WinForms.` convention; older packages may still be published under the legacy `Syncfusion..Windows` naming. + +## Supported Frameworks and Visual Studio + +The Syncfusion WinForms NuGet packages support the following project target frameworks: + +| Target Framework | Supported | +|------------------|-----------| +| .NET Framework 4.5 - 4.8 | Yes | +| .NET Core 3.0 - 3.1 | Yes | +| .NET 5.0 - 8.0 | Yes | +| .NET Standard 2.0+ | Yes | + +The Package Manager UI and Package Manager Console require **Visual Studio 2019 or later** with the .NET desktop development workload installed. + +## Available NuGet Packages + +The complete list of Syncfusion WinForms NuGet packages is available on [nuget.org](https://www.nuget.org/packages?q=Tags%3A%22winforms%22+syncfusion). Commonly used packages include: + +- `Syncfusion.WinForms.Grid` +- `Syncfusion.WinForms.Charts` +- `Syncfusion.WinForms.Diagram` +- `Syncfusion.WinForms.Ribbon` +- `Syncfusion.WinForms.Scheduler` ## Installation using Package Manager UI @@ -26,7 +49,9 @@ The NuGet **Package Manager UI** allows you to search, install, uninstall, and u As an alternative, after opening the WinForms application in Visual Studio, go to the **Tools** menu and after hovering **NuGet Package Manager**, select **Manage NuGet Packages for Solution...** -2. The Manage NuGet Packages window will open. Navigate to the **Browse** tab, then search for the Syncfusion WinForms NuGet packages using a term like **"Syncfusion.WinForms"** and select the appropriate Syncfusion WinForms NuGet package for your development. + > You need Visual Studio 2019 or later with the .NET desktop development workload installed to use the Package Manager UI. + +2. The Manage NuGet Packages window will open. Navigate to the **Browse** tab, then search for the Syncfusion WinForms NuGet packages using a term like **"Syncfusion.WinForms"** (or the legacy **"Syncfusion.Grid.Windows"** package for the specific control shown in the examples below) and select the appropriate Syncfusion WinForms NuGet package for your development. > The [nuget.org](https://api.nuget.org/v3/index.json) package source is selected by default in the Package source drop-down. If your Visual Studio does not have nuget.org configured, follow the instructions in the [Microsoft documents](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio#package-sources) to set up the nuget.org feed URL. @@ -34,11 +59,11 @@ The NuGet **Package Manager UI** allows you to search, install, uninstall, and u 3. When you select a package, the right side panel will provide more information about it. -4. By default, the package selected with latest version. You can choose the required version and click the **Install** button and accept the license terms. The package will be added to your WinForms application. +4. By default, the package is selected with the latest version. You can choose the required version and click the **Install** button and accept the license terms. The package will be added to your WinForms application. ![WinForms NuGet Packages Install](Platform_images/InstallNuGet.png) -5. At this point, your application has all the required Syncfusion assemblies, and you will be ready to start building high-performance, responsive app with [Syncfusion WinForms components](https://www.syncfusion.com/winforms-ui-controls). Also, you can refer to the [Syncfusion WinForms help document](https://help.syncfusion.com/windowsforms/overview) for development. +5. After installation, register your Syncfusion license key in the WinForms application as described in the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). ## Installation using Dotnet (.NET) CLI @@ -46,15 +71,18 @@ The [dotnet Command Line Interface (CLI)](https://learn.microsoft.com/en-us/nuge Follow the below instructions to use the dotnet CLI command to install the Syncfusion WinForms NuGet packages. -1. Open a command prompt and navigate to the directory where your Syncfusion WinForms project file is located. +1. Open a command prompt and navigate to the directory where your Syncfusion WinForms project file is located using the `cd` command. For example: + + `cd C:\Projects\MyWinFormsApp` + 2. To install a NuGet package, run the following command. - ```dotnet add package ``` + `dotnet add package ` **For Example:** dotnet add package Syncfusion.Grid.Windows - > If you don’t provide a version flag, this command will be upgrading to the latest version by default. To specify a version, add the -v parameter: dotnet add package Syncfusion.Grid.Windows -v 19.2.0.57 + > If you don’t provide a version flag, this command will be upgrading to the latest version by default. To specify a version, add the -v parameter: dotnet add package Syncfusion.Grid.Windows -v 34.1.31 3. Examine the Syncfusion WinForms project file after the command has completed to ensure that the Syncfusion WinForms package was installed. To see the added reference, open the .csproj file. @@ -70,36 +98,42 @@ Follow the below instructions to use the dotnet CLI command to install the Syncf The **Package Manager Console** saves NuGet packages installation time since you don't have to search for the Syncfusion WinForms NuGet package which you want to install, and you can just type the installation command to install the appropriate Syncfusion WinForms NuGet package. Follow the instructions below to use the Package Manager Console to reference the Syncfusion WinForms component as NuGet packages in your WinForms application. -1. To show the Package Manager Console, open your WinForms web application in Visual Studio and navigate to **Tools -> NuGet Package Manager -> Package Manager Console**. +1. To show the Package Manager Console, open your WinForms application in Visual Studio and navigate to **Tools -> NuGet Package Manager -> Package Manager Console**. In the **Default project** dropdown, select the project in which you want to install the package. ![Package Manager Console ](Platform_images/console.png) -2. The **Package Manager Console** will be shown at the bottom of the screen. You can install the Syncfusion WinForms NuGet packages by enter the following NuGet installation commands. +2. The **Package Manager Console** will be shown at the bottom of the screen. You can install the Syncfusion WinForms NuGet packages by entering the following NuGet installation commands. - ***Install specified Syncfusion WinForms NuGet package.*** + **Install specified Syncfusion WinForms NuGet package.** The below command will install the Syncfusion WinForms NuGet package in the default WinForms application. - ```Install-Package ``` + `Install-Package ` **For example:** Install-Package Syncfusion.Grid.Windows > You can find the list of Syncfusion WinForms NuGet packages which are published in nuget.org from [here](https://www.nuget.org/packages?q=Tags%3A%22winforms%22+syncfusion) - ***Install specified Syncfusion WinForms NuGet package in specified WinForms application*** + **Install specified Syncfusion WinForms NuGet package in specified WinForms application** The below command will install the Syncfusion WinForms NuGet package in the given WinForms application. - ```Install-Package -ProjectName ``` + `Install-Package -ProjectName ` **For example:** Install-Package Syncfusion.Grid.Windows -ProjectName SyncfusionWinformsApp -3. By default, the package will be installed with latest version. You can give the required version with the -Version term like below to install the Syncfusion WinForms NuGet packages in the appropriate version. +3. By default, the package will be installed with the latest version. You can give the required version with the -Version term like below to install the Syncfusion WinForms NuGet packages in the appropriate version. - ```Install-Package Syncfusion.Grid.Windows -Version 19.2.0.59``` + ```Install-Package Syncfusion.Grid.Windows -Version 34.1.31``` ![Package Manager Console Output ](Platform_images/ConsoleInstallationOutput.png) 4. The NuGet package manager console will install the Syncfusion WinForms NuGet package as well as the dependencies it has. When the installation is complete, the console will show that your Syncfusion WinForms package has been successfully added to the application. -5. At this point, your application has all the required Syncfusion assemblies, and you will be ready to start building high-performance, responsive app with [Syncfusion WinForms components](https://www.syncfusion.com/winforms-ui-controls). Also, you can refer to the [Syncfusion WinForms help document](https://help.syncfusion.com/windowsforms/overview) for development. \ No newline at end of file +5. After installation, register your Syncfusion license key in the WinForms application as described in the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). + +## Post-installation + +After installing the Syncfusion WinForms NuGet packages by any of the methods above, your application has all the required Syncfusion assemblies. You are now ready to start building high-performance, responsive apps with [Syncfusion WinForms components](https://www.syncfusion.com/winforms-ui-controls). For more information, refer to the [Syncfusion WinForms help document](https://help.syncfusion.com/windowsforms/overview). + +You can add Syncfusion WinForms controls to your application by referring to the [Add Syncfusion controls](https://help.syncfusion.com/windowsforms/add-syncfusion-controls) topic. \ No newline at end of file diff --git a/WindowsForms/Installation/offline-installer/how-to-download.md b/WindowsForms/Installation/offline-installer/how-to-download.md index 1862193b7..a3485d1a2 100644 --- a/WindowsForms/Installation/offline-installer/how-to-download.md +++ b/WindowsForms/Installation/offline-installer/how-to-download.md @@ -38,7 +38,7 @@ Our 30-day trial can be downloaded in two ways. 7. Click the More Download Options (element 2 in the above screenshot) button to get the Essential Studio Windows Forms Offline trial installer which is available in EXE and ZIP format. - ![License and downloads of Syncfusion Essential Studio](images/start-trial-download-offline-installer.png) + ![Offline trial installer formats for Syncfusion Essential Studio](images/start-trial-download-offline-installer.png) ### Start Trials if using components through [NuGet.org](https://www.nuget.org/packages?q=syncfusion) @@ -50,7 +50,7 @@ You should initiate an evaluation if you have already obtained our components th ![Trial and downloads of Syncfusion Essential Studio](images/start-trial-download.png) -2. To access this page, you must sign up\log in with your Syncfusion account. +2. To access this page, you must sign up or log in with your Syncfusion account. 3. Begin your trial by selecting the Windows Forms product. N> If you've already used the trial products and they haven't expired, you won't be able to start the trial for the same product again. @@ -68,13 +68,19 @@ You should initiate an evaluation if you have already obtained our components th 2. You can view all the licenses (both active and expired) associated with your account. 3. Click the Download (element 1 in the screenshot below) button to download the respective product’s installer. 4. The most recent version of the installer will be downloaded from this page. -5. To download older version installers, go to [Downloads Older Versions](https://www.syncfusion.com/account/downloads/studio) (element 2 in the screenshot below). -6. You can download other platform\add-on installers by going to More Downloads Options (element 3 in the screenshot below). +5. To download older version installers, go to [Download Older Versions](https://www.syncfusion.com/account/downloads/studio) (element 2 in the screenshot below). +6. You can download other platform or add-on installers by going to More Downloads Options (element 3 in the screenshot below). ![License and downloads of Syncfusion Essential Studio](images/license-download.png) -7. For Windows OS, EXE and Zip formats are available for download. They are both Offline Installers. +7. For Windows OS, EXE and Zip formats are available for download. Both formats are offline installers. - ![License and downloads of Syncfusion Essential Studio](images/start-trial-download-offline-installer.png) + ![Offline installer formats for Syncfusion Essential Studio](images/start-trial-download-offline-installer.png) -You can also refer to the [**Offline installer**](https://help.syncfusion.com/windowsforms/installation/offline-installer/how-to-install) links for step-by-step installation guidelines. +You can also refer to the [**Offline installer**](https://help.syncfusion.com/windowsforms/installation/offline-installer/how-to-install) links for step-by-step installation guidelines. + +For information about retrieving and using your license key after installation, see the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). + +## Verify the Downloaded Installer + +After downloading the offline installer, you can verify its integrity by checking the digital signature of the EXE or ZIP file. Right-click the downloaded file in Windows Explorer, select **Properties**, and then open the **Digital Signatures** tab. The signature should be issued to **Syncfusion, Inc.** If the digital signature is missing or invalid, re-download the installer from the Syncfusion website. diff --git a/WindowsForms/Installation/offline-installer/how-to-install.md b/WindowsForms/Installation/offline-installer/how-to-install.md index 106135e60..13656600d 100644 --- a/WindowsForms/Installation/offline-installer/how-to-install.md +++ b/WindowsForms/Installation/offline-installer/how-to-install.md @@ -13,9 +13,11 @@ documentation: ug ## Installing with UI -The steps below show how to install the Essential Studio Windows Forms installer. +Before starting the installation, close all Visual Studio instances and any running Syncfusion applications. -1. Open the Syncfusion Windows Forms offline installer file from downloaded location by double-clicking it. The Installer Wizard automatically opens and extracts the package. +The steps below show how to install the Essential Studio for Windows Forms installer. + +1. Open the Syncfusion Windows Forms offline installer file from the downloaded location by double-clicking it. The Installer Wizard automatically opens and extracts the package. ![Installer extraction wizard](images/Step-by-Step-Installation_img1.png) @@ -51,15 +53,17 @@ The steps below show how to install the Essential Studio Windows Forms installer 3. After reading the License Terms and Privacy Policy, check the **“I agree to the License Terms and Privacy Policy”** check box. Click the Next button. -4. Change the install and sample locations here. You can also change the Additional settings. Click Next\Install to install with the default settings. +4. Change the install and sample locations here. You can also change the additional settings. Click Next and then Install to install with the default settings. ![Advanced options](images/Step-by-Step-Installation_img4.png) **Additional Settings** + + The following additional settings can be configured for the installation: - * Select the **Install Demos** check box to install Syncfusion samples, or leave the check box unchecked, if you do not want to install Syncfusion samples - * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in GAC, or clear this check box when you do not want to install the latest assemblies in GAC. + * Select the **Install Demos** check box to install Syncfusion samples, or leave the check box unchecked if you do not want to install Syncfusion samples. + * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in the Global Assembly Cache (GAC), or clear this check box when you do not want to install the latest assemblies in the GAC. The GAC option applies only to .NET Framework projects; for .NET Core and .NET 5+ projects, the assemblies are referenced from the NuGet packages and GAC registration is not applicable. * Select the **Configure Syncfusion controls in Visual Studio** check box to configure the Syncfusion controls in the Visual Studio toolbox, or clear this check box when you do not want to configure the Syncfusion controls in the Visual Studio toolbox during installation. Note that you must also select the Register Syncfusion assemblies in GAC check box when you select this check box. * Select the **Configure Syncfusion Extensions controls in Visual Studio** checkbox to configure the Syncfusion Extensions in Visual Studio or clear this check box when you do not want to configure the Syncfusion Extensions in Visual Studio. * Check the **Create Desktop Shortcut** checkbox to add a desktop shortcut for Syncfusion Control Panel @@ -68,10 +72,10 @@ The steps below show how to install the Essential Studio Windows Forms installer -5. If any previous versions of the current product is installed, the Uninstall Previous Version(s) wizard will be opened. Select **Uninstall** checkbox to uninstall the previous versions and then click the Proceed button. +5. If any previous version of the current product is installed, the Uninstall Previous Version(s) wizard will be opened. Select **Uninstall** checkbox to uninstall the previous versions and then click the Proceed button. - ![Advanced options](images/Step-by-Step-Installation_img7.png) + ![Uninstall Previous Versions wizard](images/Step-by-Step-Installation_img7.png) N> From the 2021 Volume 1 release, Syncfusion has added the option to uninstall previous versions from 18.1 while installing the new version. @@ -95,14 +99,16 @@ The steps below show how to install the Essential Studio Windows Forms installer ![Completed wizard](images/Step-by-Step-Installation_img10.png) -7. After installing, click the **Launch Control Panel** link to open the Syncfusion Control Panel. +6. After installing, click the **Launch Control Panel** link to open the Syncfusion Control Panel. + +7. Click the Finish button. Your system has been installed with the Syncfusion Essential Studio for Windows Forms product. -8. Click the Finish button. Your system has been installed with the Syncfusion Essential Studio Windows Forms product. +After installation, you can register your Syncfusion license key in your application as described in the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). ## Installing in silent mode -The Syncfusion Essential Studio Windows Forms Installer supports installation and uninstallation via the command line. +The Syncfusion Essential Studio for Windows Forms Installer supports installation and uninstallation via the command line. The command prompt must be run as Administrator to install or uninstall the product silently. ### Command Line Installation @@ -111,27 +117,41 @@ To install through the Command Line in Silent mode, follow the steps below. 1. Run the Syncfusion Windows Forms installer by double-clicking it. The Installer Wizard automatically opens and extracts the package. 2. The file syncfusionessentialwindowsforms_(version).exe file will be extracted into the Temp directory. 3. Run %temp%. The Temp folder will be opened. The syncfusionessentialwindowsforms_(version).exe file will be located in one of the folders. -4. Copy the extracted syncfusionessentialwindowsforms_(version).exe file in local drive. +4. Copy the extracted syncfusionessentialwindowsforms_(version).exe file to a local drive. 5. Exit the Wizard. 6. Run Command Prompt in administrator mode and enter the following arguments. - - **Arguments:** “installer file path\SyncfusionEssentialStudio(product)_(version).exe” /Install silent /UNLOCKKEY:“(product unlock key)” [/log “{Log file path}”] [/InstallPath:{Location to install}] [/InstallSamples:{true/false}] [/InstallAssemblies:{true/false}] [/UninstallExistAssemblies:{true/false}] [/InstallToolbox:{true/false}] + The available arguments are: + + | Argument | Required | Description | + |----------|----------|-------------| + | `/Install silent` | Yes | Specifies that the installer should run in silent mode. | + | `/UNLOCKKEY:""` | Yes | The product unlock key. | + | `/log ""` | No | Path to the log file. | + | `/InstallPath:` | No | Location to install. | + | `/InstallSamples:{true/false}` | No | Whether to install samples. | + | `/InstallAssemblies:{true/false}` | No | Whether to install assemblies. | + | `/UninstallExistAssemblies:{true/false}` | No | Whether to uninstall existing assemblies. | + | `/InstallToolbox:{true/false}` | No | Whether to configure the Visual Studio toolbox. | + + **Arguments:** "installer file path\SyncfusionEssentialStudio(product)_(version).exe" /Install silent /UNLOCKKEY:"(product unlock key)" [/log "{Log file path}"] [/InstallPath:{Location to install}] [/InstallSamples:{true/false}] [/InstallAssemblies:{true/false}] [/UninstallExistAssemblies:{true/false}] [/InstallToolbox:{true/false}] N> [..] – Arguments inside the square brackets are optional. - **Example:** “D:\Temp\syncfusionessentialwindowsforms_x.x.x.x.exe” /Install silent /UNLOCK:“product unlock key” /log “C:\Temp\EssentialStudio_Platform.log” /InstallPath:C:\Syncfusion\x.x.x.x /InstallSamples:true /InstallAssemblies:true /UninstallExistAssemblies:true /InstallToolbox:true + **Example:** "D:\Temp\syncfusionessentialwindowsforms_x.x.x.x.exe" /Install silent /UNLOCKKEY:"product unlock key" /log "C:\Temp\EssentialStudio_Platform.log" /InstallPath:C:\Syncfusion\x.x.x.x /InstallSamples:true /InstallAssemblies:true /UninstallExistAssemblies:true /InstallToolbox:true 7. Essential Studio for Windows Forms is installed. N> x.x.x.x should be replaced with the Essential Studio version and the Product Unlock Key needs to be replaced with the Unlock Key for that version. + + N> The installer returns exit code `0` on success and a non-zero exit code on failure. The log file specified by `/log` records the installation progress and any errors. ### Command Line Uninstallation -Syncfusion Essential Windows Forms can be uninstalled silently using the Command Line. +Syncfusion Essential Studio for Windows Forms can be uninstalled silently using the Command Line. 1. Run the Syncfusion Windows Forms installer by double-clicking it. The Installer Wizard automatically opens and extracts the package. 2. The file syncfusionessentialwindowsforms_(version).exe file will be extracted into the Temp directory. @@ -140,11 +160,9 @@ Syncfusion Essential Windows Forms can be uninstalled silently using the Command 5. Exit the Wizard. 6. Run Command Prompt in administrator mode and enter the following arguments. - **Arguments:** “Copied installer file path\syncfusionessentialwindowsforms_(version).exe” /uninstall silent  - - **Example:** “D:\Temp\syncfusionessentialwindowsforms_x.x.x.x.exe" /uninstall silent - + **Arguments:** "Copied installer file path\syncfusionessentialwindowsforms_(version).exe" /uninstall silent + **Example:** "D:\Temp\syncfusionessentialwindowsforms_x.x.x.x.exe" /uninstall silent 7. Essential Studio for Windows Forms is uninstalled. diff --git a/WindowsForms/Installation/web-installer/how-to-download.md b/WindowsForms/Installation/web-installer/how-to-download.md index 49b3431c5..ccfb65d6c 100644 --- a/WindowsForms/Installation/web-installer/how-to-download.md +++ b/WindowsForms/Installation/web-installer/how-to-download.md @@ -46,7 +46,7 @@ You should initiate an evaluation if you have already obtained our components th ![Trial and downloads of Syncfusion Essential Studio](images/start-trial-download.png) -2. To access this page, you must sign up\log in with your Syncfusion account. +2. To access this page, you must sign up or log in with your Syncfusion account. 3. Begin your trial by selecting the Windows Forms product. N> If you've already used the trial products and they haven't expired, you won't be able to start the trial for the same product again. @@ -64,8 +64,8 @@ You should initiate an evaluation if you have already obtained our components th 2. You can view all the licenses (both active and expired) associated with your account. 3. Click the Download (element 1 in the screenshot below) button to download the Windows Forms web installer. 4. The most recent version of the installer will be downloaded from this page. -5. To download older version installers, go to [Downloads Older Versions](https://www.syncfusion.com/account/downloads/studio) (element 2 in the screenshot below). -6. You can download other platform\add-on installers by going to More Downloads Options (element 3 in the screenshot below). +5. To download older version installers, go to [Download Older Versions](https://www.syncfusion.com/account/downloads/studio) (element 2 in the screenshot below). +6. You can download other platform or add-on installers by going to More Downloads Options (element 3 in the screenshot below). ![License and downloads of Syncfusion Essential Studio](images/license-download.png) @@ -75,6 +75,12 @@ You should initiate an evaluation if you have already obtained our components th 8. After downloading, the Syncfusion Windows Forms web installer can be unlocked using Syncfusion registered login credential. - N> For Syncfusion trial and licensed products, there is no separate web installer. Based on your account license, Syncfusion trial or licensed products will be installed via web installer. + N> The Syncfusion web installer handles both trial and licensed installations. When you sign in, the installer uses your account license to determine whether to install a trial or licensed version. -You can also refer to the [**web installer**](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-install) links for step-by-step installation guidelines. +You can also refer to the [**web installer**](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-install) links for step-by-step installation guidelines. + +For information about retrieving and using your license key after installation, see the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). + +## Verify the Downloaded Installer + +After downloading the web installer, you can verify its integrity by checking the digital signature of the downloaded file. Right-click the file in Windows Explorer, select **Properties**, and then open the **Digital Signatures** tab. The signature should be issued to **Syncfusion, Inc.** If the digital signature is missing or invalid, re-download the installer from the Syncfusion website. diff --git a/WindowsForms/Installation/web-installer/how-to-install.md b/WindowsForms/Installation/web-installer/how-to-install.md index 6dcfd023a..f737f5226 100644 --- a/WindowsForms/Installation/web-installer/how-to-install.md +++ b/WindowsForms/Installation/web-installer/how-to-install.md @@ -7,24 +7,23 @@ control: Installation and Deployment documentation: ug --- -# Installaing Syncfusion Windows Forms Web Installer +# Installing Syncfusion Windows Forms Web Installer - -## Overview - -For the Essential Studio Windows Forms product, Syncfusion offers a Web Installer. This installer alleviates the burden of downloading a larger installer. You can simply download and run the online installer, which will be smaller in size and will download and install the Essential Studio products you have chosen. You can get the most recent version of Essential Studio Web Installer [here](https://www.syncfusion.com/downloads/latest-version). +For the Essential Studio for Windows Forms product, Syncfusion offers a Web Installer. This installer alleviates the burden of downloading a larger installer. You can simply download and run the online installer, which will be smaller in size and will download and install the Essential Studio products you have chosen. You can get the most recent version of Essential Studio Web Installer [here](https://www.syncfusion.com/downloads/latest-version). ## Installation -The steps below show how to install Essential Studio Windows Forms Web Installer. +Before starting the installation, close all Visual Studio instances and any running Syncfusion applications. Verify that your machine has an active internet connection, since the web installer downloads the product packages at install time. -1. Open the Syncfusion Essential Studio Windows Forms Web Installer file from downloaded location by double-clicking it. The Installer Wizard automatically opens and extracts the package. +The steps below show how to install Essential Studio for Windows Forms Web Installer. + +1. Open the Syncfusion Essential Studio for Windows Forms Web Installer file from the downloaded location by double-clicking it. The Installer Wizard automatically opens and extracts the package. ![Installer Extraction Wizard](images/Step-by-Step-Installation_img1.png) - N> The installer wizard extracts the syncfusionessentialwpfwebinstaller_{version}.exe dialog, which displays the package's unzip operation. + N> The installer wizard extracts the `syncfusionessentialwindowsformswebinstaller_{version}.exe` dialog, which displays the package's unzip operation. 2. The Syncfusion Windows Forms Web Installer's welcome wizard will be displayed. Click the Next button. @@ -66,7 +65,7 @@ The steps below show how to install Essential Studio Windows Forms Web Installer ![Confirmation for install/uninstall](images/Step-by-Step-Installation_img15.png) - N> By clicking the **Download Size and Installation** Size links, you can determine the approximate size of the download and installation + N> By clicking the **Download Size** and **Installation Size** links, you can determine the approximate size of the download and installation. 7. The Configuration Wizard will appear. You can change the Download, Install, and Demos locations from here. You can also change the Additional settings on a product-by-product basis. Click Next to install with the default settings. @@ -74,9 +73,11 @@ The steps below show how to install Essential Studio Windows Forms Web Installer ![Install and samples location for install](images/Step-by-Step-Installation_img8.png) **Additional settings** + + The following additional settings can be configured on a per-product basis. (For more details on each option, see the [offline installer Additional Settings](https://help.syncfusion.com/windowsforms/installation/offline-installer/how-to-install#installing-with-ui) section.) - * Select the **Install Demos** check box to install Syncfusion samples, or leave the check box unchecked, if you do not want to install Syncfusion samples - * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in GAC, or clear this check box when you do not want to install the latest assemblies in GAC. + * Select the **Install Demos** check box to install Syncfusion samples, or leave the check box unchecked if you do not want to install Syncfusion samples. + * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in the Global Assembly Cache (GAC), or clear this check box when you do not want to install the latest assemblies in the GAC. The GAC option applies only to .NET Framework projects; for .NET Core and .NET 5+ projects, the assemblies are referenced from the NuGet packages and GAC registration is not applicable. * Select the **Configure Syncfusion controls in Visual Studio** check box to configure the Syncfusion controls in the Visual Studio toolbox, or clear this check box when you do not want to configure the Syncfusion controls in the Visual Studio toolbox during installation. Note that you must also select the Register Syncfusion assemblies in GAC check box when you select this check box. * Select the **Configure Syncfusion Extensions controls in Visual Studio** checkbox to configure the Syncfusion Extensions in Visual Studio or clear this check box when you do not want to configure the Syncfusion Extensions in Visual Studio. * Check the **Create Desktop Shortcut** checkbox to add a desktop shortcut for Syncfusion Control Panel @@ -92,7 +93,7 @@ The steps below show how to install Essential Studio Windows Forms Web Installer I> The products you have chosen will be installed based on your Syncfusion License (Trial or Licensed). -10. The download and installation\uninstallation progress will be displayed as shown below. +10. The download and installation/uninstallation progress will be displayed as shown below. ![Download and Installation progress install](images/Step-by-Step-Installation_img10.png) @@ -108,6 +109,35 @@ The steps below show how to install Essential Studio Windows Forms Web Installer +After installation, you can register your Syncfusion license key in your application as described in the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). + +## Silent Installation + +The Syncfusion Essential Studio for Windows Forms Web Installer supports installation and uninstallation via the command line. The command prompt must be run as Administrator. + +The following arguments are available: + +| Argument | Required | Description | +|----------|----------|-------------| +| `/Install silent` | Yes | Specifies that the installer should run in silent mode. | +| `/UNLOCKKEY:""` | Yes | The product unlock key. | +| `/log ""` | No | Path to the log file. | +| `/InstallPath:` | No | Location to install. | +| `/InstallSamples:{true/false}` | No | Whether to install samples. | +| `/InstallAssemblies:{true/false}` | No | Whether to install assemblies. | +| `/InstallToolbox:{true/false}` | No | Whether to configure the Visual Studio toolbox. | +| `/uninstall silent` | Yes (for uninstall) | Specifies that the installer should uninstall in silent mode. | + +**Example (install):** + +`"path\to\syncfusionessentialwindowsformswebinstaller_x.x.x.x.exe" /Install silent /UNLOCKKEY:"product unlock key" /log "C:\Temp\EssentialStudio_WebInstaller.log"` + +**Example (uninstall):** + +`"path\to\syncfusionessentialwindowsformswebinstaller_x.x.x.x.exe" /uninstall silent` + +N> The installer returns exit code `0` on success and a non-zero exit code on failure. The log file specified by `/log` records the installation progress and any errors. + ## Uninstallation Syncfusion Windows Forms installer can be uninstalled in two ways. @@ -115,7 +145,7 @@ Syncfusion Windows Forms installer can be uninstalled in two ways. * Uninstall the Windows Forms using the Syncfusion Windows Forms web installer * Uninstall the Windows Forms from Windows Control Panel -Follow either one of the option below to uninstall Syncfusion Essential Studio Windows Forms installer. +Follow either of the options below to uninstall Syncfusion Essential Studio for Windows Forms installer. **Option 1: Uninstall the Windows Forms using the Syncfusion Windows Forms web installer** @@ -126,13 +156,13 @@ Syncfusion provides the option to uninstall products of the same version directl **Option 2: Uninstall the Windows Forms from Windows Control Panel** -You can uninstall all the installed products by selecting the **Syncfusion Essential Studio {version}** entry (element 1 in the below screenshot) from the Windows control panel, or you can uninstall Windows Forms alone by selecting the **Syncfusion Essential Studio for Windows Forms {version}** entry (element 2 in the below screenshot) from the Windows control panel. +You can uninstall all the installed products by selecting the **Syncfusion Essential Studio {version}** entry (element 1 in the below screenshot) from the Windows control panel, or you can uninstall Windows Forms alone by selecting the **Syncfusion Essential Studio for Windows Forms {version}** entry (element 2 in the below screenshot) from the Windows control panel. The Essential Studio entry removes all Syncfusion products installed in the same version, while the per-product entry only removes the Windows Forms setup. ![Control Panel](images/Step-by-Step-Installation_img22.png) -N> If the **Syncfusion Essential Studio for Windows Forms {version}** entry is selected from the Windows control panel, the Syncfusion Essential Studio Windows Forms alone will be removed and the below default MSI uninstallation window will be displayed. +N> If the **Syncfusion Essential Studio for Windows Forms {version}** entry is selected from the Windows control panel, only the Syncfusion Essential Studio for Windows Forms will be removed and the Web Installer will launch so you can complete the uninstallation. Follow the steps below. -1. The Syncfusion Windows Forms Web Installer's welcome wizard will be displayed. Click the Next button +1. The Syncfusion Windows Forms Web Installer's welcome wizard will be displayed. Click the Next button. ![Welcome wizard uninstall](images/Step-by-Step-Installation_img2.png) @@ -160,7 +190,7 @@ N> If the **Syncfusion Essential Studio for Windows Forms {version}** entry is s ![Confirmation for install/uninstall](images/Step-by-Step-Installation_img15.png) - N> By clicking the **Download Size and Installation** Size links, you can determine the approximate size of the download and installation + N> By clicking the **Download Size** and **Installation Size** links, you can determine the approximate size of the download and installation. 6. The Configuration Wizard will appear. You can change the Download, Install, and Demos locations from here. You can also change the Additional settings on a product-by-product basis. Click Next to install with the default settings. @@ -178,7 +208,7 @@ N> If the **Syncfusion Essential Studio for Windows Forms {version}** entry is s ![Download and Installation progress install/uninstall](images/Step-by-Step-Installation_img17.png) -10. When the installation is finished, the **Summary** wizard will appear. Here you can see the list of products that have been successfully and unsuccessfully installed/uninstalled. To close the Summary wizard, click Finish. +10. When the installation is finished, the **Summary** wizard will appear. Here you can see the list of products that have been installed/uninstalled successfully or unsuccessfully. To close the Summary wizard, click Finish. ![Summary install/uninstall](images/Step-by-Step-Installation_img18.png) diff --git a/WindowsForms/Licensing/how-to-generate.md b/WindowsForms/Licensing/how-to-generate.md index ef859ba71..21ec83fc5 100644 --- a/WindowsForms/Licensing/how-to-generate.md +++ b/WindowsForms/Licensing/how-to-generate.md @@ -8,45 +8,51 @@ documentation: ug --- -# Generate Syncfusion Windows Forms License key +# Generate Syncfusion Windows Forms License Key -License keys for Windows Forms can be generated from the [License & Downloads](https://syncfusion.com/account/downloads) or [Trail & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) section from your Syncfusion account. +License keys for Windows Forms can be generated from the [License & Downloads](https://www.syncfusion.com/account/downloads) or [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) section from your Syncfusion account. + +1. Sign in to your [Syncfusion account](https://www.syncfusion.com/account). +2. Navigate to the [License & Downloads](https://www.syncfusion.com/account/downloads) section. +3. Select the **Windows Forms** platform and the required version, then click **Generate Key**. ![Get License Key](licensing-images/generate-license.png) I> * Syncfusion license keys are **version and platform specific**, refer to the [KB](https://support.syncfusion.com/kb/article/7898/how-to-generate-license-key-for-licensed-products) to generate the license key for the required version and platform. * Refer this [KB](https://support.syncfusion.com/kb/article/7865/which-version-syncfusion-license-key-should-i-use-in-my-application) to know about which version of the Syncfusion license key should be used in the application. -## Claim License key +## Claim License Key -Syncfusion License keys can also be generated from the **"Claim License Key"** page based on the trial or valid license associated with your Syncfusion account. +Syncfusion license keys can also be generated from the **"Claim License Key"** page based on the trial or valid license associated with your Syncfusion account. The **Claim License Key** button is also available directly from the application licensing-warning popup. You can get the license key, based on license availability in your Syncfusion account. ### Active License -If you have a Syncfusion account associated with valid license, license key will be generated from claim license key page. +If you have a Syncfusion account associated with a valid license, the license key will be generated from the claim license key page. ![Active License](licensing-images/active-license.png) ### Active Trial -If you have a Syncfusion account associated with valid trial license, license key will be generated from claim license key page with expiry date. +If you have a Syncfusion account associated with a valid trial license, the license key will be generated from the claim license key page with an expiry date. ![Active Trial](licensing-images/active-trial.png) ### Expired License -If you have a Syncfusion account with an expired license, your license subscription must be renewed in order to obtain a valid license key for the latest Essential Studio version. Meanwhile, a temporary license key with a 5-day validity period will be generated. +If you have a Syncfusion account with an expired license, your license subscription must be renewed to obtain a valid license key for the latest Essential Studio version. Meanwhile, a temporary license key with a 5-day validity period will be generated. + +To renew, see [My Renewals](https://www.syncfusion.com/account/my-renewals). ![Expired License](licensing-images/expired-license.png) ### No Trial or No License or Expired trial -If the Syncfusion account is not associated with a trial, license, or expired trial, you can try to claim either a trial or a valid license from claim license page. +If the Syncfusion account is not associated with a trial, license, or expired trial, you can start a new trial from the [Start Trial](https://www.syncfusion.com/account/manage-trials/start-trials) page. After starting the trial, generate the key from the [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. ![No Trial or No License](licensing-images/no-active-trial-or-license.png) ## See Also -* [How to Register Syncfusion License Key in Windows Forms Application?](https://github.com/syncfusion-content/windowsforms-docs/blob/master/WindowsForms/Licensing/how-to-register-in-an-application.md) \ No newline at end of file +* [How to Register Syncfusion License Key in Windows Forms Application?](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) \ No newline at end of file diff --git a/WindowsForms/Licensing/how-to-register-in-an-application.md b/WindowsForms/Licensing/how-to-register-in-an-application.md index 8777b70d1..ec9cb3bf7 100644 --- a/WindowsForms/Licensing/how-to-register-in-an-application.md +++ b/WindowsForms/Licensing/how-to-register-in-an-application.md @@ -8,7 +8,7 @@ documentation: ug --- -# Register Syncfusion License key in Windows Forms application +# Register Syncfusion License Key in Windows Forms application The generated license key is just a string that needs to be registered before any Syncfusion control is initiated. The following code is used to register the license. @@ -18,14 +18,14 @@ Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR LICENSE KEY {% endhighlight %} {% endtabs %} -N> * Place the license key between double quotes. Also, ensure that Syncfusion.Licensing.dll is referenced in your project where the license key is being registered. +N> * Place the license key between double quotes. Also, ensure that Syncfusion.Licensing.dll is referenced in your project where the license key is being registered. * Syncfusion license validation is done offline during application execution and does not require internet access. Apps registered with a Syncfusion license key can be deployed on any system that does not have an internet connection. I> Syncfusion license keys can be validated during the Continuous Integration (CI) processes to ensure proper licensing and prevent licensing errors during deployment. Refer to the [CI License Validation](https://help.syncfusion.com/windowsforms/licensing/licensing-faq/ci-license-validation) section for detailed instructions on how to implement it. ### Windows Forms -You can register the licensing code in static void main method before calling **Application.Run()** method in C#. In Visual Basic, register the licensing code in **Application.designer.vb** file constructor. +You can register the licensing code in the `static void Main` method before calling the `Application.Run()` method in C#. In Visual Basic, register the licensing code in **Application.designer.vb** file constructor. N> * If the **Application.Designer.vb** file is not included by default in the project, it will be generated in the **My Project** folder in your VB project directory. * Ensure to register the license key at the beginning of the application's entry point class. diff --git a/WindowsForms/Licensing/licensing-errors.md b/WindowsForms/Licensing/licensing-errors.md index 5a5d472d6..67b953302 100644 --- a/WindowsForms/Licensing/licensing-errors.md +++ b/WindowsForms/Licensing/licensing-errors.md @@ -9,77 +9,73 @@ documentation: ug # Syncfusion Licensing Errors -Licensing error popup is displayed with various messages under different circumstances. Here are some ways to resolve different issues. +A licensing error pop-up is displayed with various messages under different circumstances. Here are some ways to resolve different issues. ## Licensing errors -### License key not registered\Trial Expired +### License key not registered / Trial Expired -The following error message will be shown if a Syncfusion license key has not been registered in your application or if the trial key has expired after 30 days. +The following error message will be shown if a Syncfusion license key has not been registered in your application or if the trial key has expired after 30 days. -**Error message:** This application was built using a trial version of Syncfusion Essential Studio. You should include the valid license key to remove the license validation message permanently. +**Error message:** "This application was built using a trial version of Syncfusion Essential Studio. You should include the valid license key to remove the license validation message permanently." ![License key not registered](licensing-images/new-licensing-alert.png) -**Solution:** - -* Generate a valid license key from here [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform or License keys can also be generated from the Claim License Key page by clicking the **"Claim License"** button click from Syncfusion licensing warning message. Refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/how-to-generate#Claim-License-Key) for more details. +**Solution:** +* Generate a valid license key from [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform. License keys can also be generated from the Claim License Key page by clicking the **"Claim License"** button on the Syncfusion licensing warning message. Refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/how-to-generate#claim-license-key) for more details. * In your application, register the generated license key. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) for information on registering the license key. ### Invalid key -If the application is registered with an invalid key, another version of license key, or another platform's license key, the following error message will pop up when launching the application. +If the application is registered with an invalid key, another version of license key, or another platform's license key, the following error message will pop up when launching the application. -**Error Message:** The included Syncfusion license key is invalid. +**Error Message:** "The included Syncfusion license key is invalid." -![License key not registered](licensing-images/new-invalid-key.png) +![Invalid license key error](licensing-images/new-invalid-key.png) **Solution:** -* Generate a valid license key from here [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform or License keys can also be generated from the Claim License Key page by clicking the **"Claim License"** button click from Syncfusion licensing warning message. Refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/how-to-generate#Claim-License-Key) for more details.. - +* Generate a valid license key from [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform. License keys can also be generated from the Claim License Key page by clicking the **"Claim License"** button on the Syncfusion licensing warning message. Refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/how-to-generate#claim-license-key) for more details. * In your application, register the generated license key. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) for information on registering the license key. Refer to the license key [generation](https://help.syncfusion.com/windowsforms/licensing/how-to-generate) and [registration](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) topic. ## Licensing errors from version 16.2.0* to 20.3.0* -### License key not registered +### License key not registered -The following error message will be shown if a Syncfusion license key has not been registered in your application. +The following error message will be shown if a Syncfusion license key has not been registered in your application. -**Error message:** This application was built using a trial version of Syncfusion Essential Studio. Please include a valid license to permanently remove this license validation message. You can also obtain a free 30 day evaluation license to temporarily remove this message during the evaluation period. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#license-key-not-registered) for more information. +**Error message:** "This application was built using a trial version of Syncfusion Essential Studio. Please include a valid license to permanently remove this license validation message. You can also obtain a free 30 day evaluation license to temporarily remove this message during the evaluation period. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#license-key-not-registered) for more information." ![License key not registered](licensing-images/licensing-alert.png) **Solution:** -* Generate a valid license key from here [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform. - +* Generate a valid license key from [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform. * In your application, register the generated license key. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) for information on registering the license key. ### Invalid key If the application is registered with an invalid key, another version of license key, or another platform's license key, the following error message will pop up when launching the application. -**Error Message:** The included Syncfusion license is invalid. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#invalid-key) for more information. +**Error Message:** "The included Syncfusion license is invalid. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#invalid-key) for more information." ![License key not registered](licensing-images/invalid-key.png) **Solution:** -* Generate a valid license key from here [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform. - +* Generate a valid license key from [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform. * In your application, register the generated license key. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) for information on registering the license key. ### Trial Expired The following error message will be shown if the trial key has expired after 30 days. -**Error Message:** Your Syncfusion trial license has expired. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#trial-expired) for more information. +**Error Message:** "Your Syncfusion trial license has expired. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#trial-expired) for more information." -![License key not registered](licensing-images/trial-expired.png) +![Trial expired](licensing-images/trial-expired.png) **Solution:** Purchase from [here](https://www.syncfusion.com/sales/teamlicense) to get a valid Syncfusion license. @@ -89,7 +85,7 @@ If the application is registered with another platform's license key, the follow **Error Message:**The included Syncfusion license is invalid (Platform mismatch). Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#platform-mismatch) for more information. -![License key not registered](licensing-images/platform-mismatch.png) +![Platform mismatch](licensing-images/platform-mismatch.png) **Solution:** * Generate a valid license key from here [Licensed users](https://www.syncfusion.com/account/downloads) or [Trial users](https://www.syncfusion.com/account/manage-trials/downloads) for a specific version and platform. @@ -100,9 +96,11 @@ If the application is registered with another platform's license key, the follow If the application is registered with another version's license key, the following error message will pop up when launching the application. -**Error Message:**The included Syncfusion license ({Registered Version}) is invalid for version {Required version}. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#version-mismatch) for more information. +**Error Message:** "The included Syncfusion license ({Registered Version}) is invalid for version {Required version}. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#version-mismatch) for more information." + +A version mismatch means the key was generated for an Essential Studio version different from the assemblies referenced in the project. Syncfusion license keys validate the same major release forward; if the key is older than the assemblies, regenerate it for the new version. -![License key not registered](licensing-images/version-mismatch.png) +![Version mismatch](licensing-images/version-mismatch.png) **Solution:** @@ -112,17 +110,21 @@ If the application is registered with another version's license key, the followi ## Could not load Syncfusion.Licensing.dll assembly version...? -Please ensure that all Syncfusion NuGet packages including [Syncfusion.Licensing](https://www.nuget.org/packages/Syncfusion.Licensing) were installed properly, and assembly references are upgraded to the required version. Also, verify that the csproj and packages.config/web.config files references have been referred with the updated version. +This error applies to all supported versions. + +Please ensure that all Syncfusion NuGet packages including [Syncfusion.Licensing](https://www.nuget.org/packages/Syncfusion.Licensing) were installed properly, and assembly references are upgraded to the required version. Also, verify that the `.csproj` (or `.vbproj`) and `packages.config` file references have been updated to the new version. + +After upgrading, perform a Clean and then Rebuild of the solution to ensure stale binaries are removed. -To avoid run-time errors, set copy local to true. Copy Local determines whether a reference is copied to the project output path. +To avoid run-time errors, set **Copy Local** to true. **Copy Local** determines whether a reference is copied to the project output path. -![Set copy local to true](licensing-images/SetCopyLocalTrue.png) +![Set Copy Local to true](licensing-images/SetCopyLocalTrue.png) -Set “CopyLocal” as True for Syncfusion.Licensing.dll along with all other Syncfusion assemblies and ensure that the Syncfusion.Licensing.dll assembly is also present in the output folder or deployment folder of the application. +Set **Copy Local** as True for `Syncfusion.Licensing.dll` along with all other Syncfusion assemblies and ensure that the `Syncfusion.Licensing.dll` assembly is also present in the output folder or deployment folder of the application. For .NET Framework projects, you may also need a binding redirect in `app.config` if multiple Syncfusion assemblies reference different versions of `Syncfusion.Licensing.dll`. ![Output folder](licensing-images/OutputFolder.png) -Refer to this knowledge base articles to set [copy local](https://www.syncfusion.com/kb/4808/how-to-resolve-server-error-could-not-load-or-assembly-when-publishing-an-application) as true. +Refer to this knowledge base article to set [Copy Local](https://www.syncfusion.com/kb/4808/how-to-resolve-server-error-could-not-load-or-assembly-when-publishing-an-application) as true. diff --git a/WindowsForms/Licensing/licensing-faq/CI-license-validation.md b/WindowsForms/Licensing/licensing-faq/CI-license-validation.md index f74fad49a..c65a53f4f 100644 --- a/WindowsForms/Licensing/licensing-faq/CI-license-validation.md +++ b/WindowsForms/Licensing/licensing-faq/CI-license-validation.md @@ -20,7 +20,11 @@ documentation: ug # Syncfusion License Key Validation in CI Services -Syncfusion license key validation in CI services ensures that Syncfusion Essential Studio components are properly licensed during CI processes. Validating the license key at the CI level can prevent licensing errors during deployment. Set up the continuous integration process to fail when the license key validation fails by surfacing a non-zero exit code from the validation script. +Syncfusion license key validation in CI services ensures that Syncfusion Essential Studio components are properly licensed during CI processes. Validating the license key at the CI level can prevent licensing errors during deployment. Set up the CI process to fail when the license key validation fails by surfacing a non-zero exit code from the validation script. + +This feature is supported from version 16.2.0.41 of Essential Studio and later. From v34.1.29 onwards, the platform identifier changed from `WindowsForms` to `UIComponent`; this is a breaking change for the validator script's `/platform:` argument. + +The PowerShell validator returns exit code `0` on success and a non-zero exit code on failure; the CI pipeline should treat any non-zero exit as a build failure. The following sections show how to validate the Syncfusion license key in CI services. @@ -29,7 +33,7 @@ The following sections show how to validate the Syncfusion license key in CI ser * Open the `LicenseKeyValidation.ps1` PowerShell script in a text or code editor, as shown in the example below. {% tabs %} -{% highlight c# tabtitle="v34.1.29 and later" %} +{% highlight powershell tabtitle="v34.1.29 and later" %} # Replace the parameters with the desired platform, version, and actual license key. $result = & $PSScriptRoot"\LicenseKeyValidatorConsole.exe" /platform:"UIComponent" /version:"34.1.29" /licensekey:"Your License Key" @@ -37,7 +41,7 @@ $result = & $PSScriptRoot"\LicenseKeyValidatorConsole.exe" /platform:"UIComponen Write-Host $result {% endhighlight %} -{% highlight c# tabtitle="Before v34.1.29" %} +{% highlight powershell tabtitle="Before v34.1.29" %} # Replace the parameters with the desired platform, version, and actual license key. $result = & $PSScriptRoot"\LicenseKeyValidatorConsole.exe" /platform:"WindowsForms" /version:"26.2.4" /licensekey:"Your License Key" @@ -48,13 +52,13 @@ Write-Host $result * Update the parameters in the script: - **Platform:** Set /platform:"**UIComponent**" for v34.1.29 and later, or /platform:"**WindowsForms**" for earlier versions (use the relevant Syncfusion platform as needed). + **Platform:** Set `/platform:"UIComponent"` for v34.1.29 and later, or `/platform:"WindowsForms"` for earlier versions (use the relevant Syncfusion platform as needed). - **Version:** Change the value for `/version:` to the required version (e.g., `"26.2.4"`). + **Version:** Change the value for `/version:` to the required version (e.g., `"34.1.29"` for v34+ or `"26.2.4"` for earlier versions). **License Key:** Replace the value for `/licensekey:` with your actual license key (e.g., `"YOUR LICENSE KEY"`). - N> This feature is supported from version 16.2.0.41 of Essential Studio and later. + N> This feature is supported from version 16.2.0.41 of Essential Studio and later. The `Platform.UIComponent` value replaces `Platform.WindowsForms` from v34.1.29 onwards. ## Azure Pipelines @@ -67,7 +71,7 @@ Write-Host $result The following example shows the syntax for Windows build agents. {% tabs %} -{% highlight c# tabtitle="YAML" %} +{% highlight yaml tabtitle="YAML" %} pool: vmImage: 'windows-latest' @@ -97,7 +101,7 @@ steps: The following example shows the syntax for validating the Syncfusion license key in GitHub Actions. {% tabs %} -{% highlight c# tabtitle="YAML" %} +{% highlight yaml tabtitle="YAML" %} steps: - name: Syncfusion License Validation shell: pwsh @@ -112,10 +116,10 @@ The following example shows the syntax for validating the Syncfusion license key * Add a stage in the Jenkins pipeline to execute the `LicenseKeyValidation.ps1` script in PowerShell. On Windows agents, use the `bat` step (the `sh` step is for Linux/Unix agents). -The following example shows the syntax for validating the Syncfusion license key in the Jenkins pipeline. +The following example shows the syntax for validating the Syncfusion license key in the Jenkins pipeline on a Windows agent. {% tabs %} -{% highlight json %} +{% highlight groovy tabtitle="Jenkinsfile (Windows agent)" %} pipeline { agent any environment { @@ -124,7 +128,7 @@ pipeline { stages { stage('Syncfusion License Validation') { steps { - sh 'pwsh ${LICENSE_VALIDATION}' + bat 'pwsh %LICENSE_VALIDATION%' } } } @@ -134,9 +138,9 @@ pipeline { ## Validate the License Key By Using the ValidateLicense() Method -* Register the license key properly by calling RegisterLicense("License Key") method with the license key. +* Register the license key properly by calling `RegisterLicense("License Key")` with the license key. -* Once the license key is registered, it can be validated by using the `ValidateLicense(Platform.WindowsForms)` method. This ensures that the license key is valid for the platform and version you are using. Refer to the following example. +* Once the license key is registered, it can be validated by using the `ValidateLicense(Platform.WindowsForms)` method (or `ValidateLicense(new[] { Platform.UIComponent })` for v34.1.29+). This ensures that the license key is valid for the platform and version you are using. The method returns `true` when the registered key is valid; the `out string validationMessage` overload also returns a description of any failure. Refer to the following example. {% tabs %} {% highlight c# tabtitle="v34.1.29 and later" %} @@ -163,9 +167,8 @@ bool isValid = SyncfusionLicenseProvider.ValidateLicense(Platform.WindowsForms); N> Use `Platform.UIComponent` for UI component license validation in v34.1.29 and later. `Platform.WindowsForms` is not supported from v34.1.29 onwards. -* If the ValidateLicense() method returns true, registered license key is valid and can proceed with deployment. - -* If the ValidateLicense() method returns false, there will be invalid license errors in deployment due to either an invalid license key or an incorrect assembly or package version that is referenced in the project. Please ensure that all the referenced Syncfusion assemblies or NuGet packages are all on the same version as the license key’s version before deployment. +* If the `ValidateLicense()` method returns `true`, the registered license key is valid and the build can proceed with deployment. +* If the `ValidateLicense()` method returns `false`, the deployment will report invalid license errors. This typically means the license key is invalid or the referenced assembly/package version does not match the license key's version. Please ensure that all the referenced Syncfusion assemblies or NuGet packages are on the same version as the license key's version before deployment. ## Validate the License Key By Using the Unit Test Project @@ -175,7 +178,7 @@ N> Use `Platform.UIComponent` for UI component license validation in v34.1.29 an * For more details on creating unit test projects in Visual Studio, refer to the [Getting Started with Unit Testing guide](https://learn.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2022&tabs=dotnet%2Cmstest#create-unit-tests). -* Add a reference (or NuGet package) for `Syncfusion.Licensing` to the test project, and register the license key by calling the `RegisterLicense("YOUR LICENSE KEY")` method in the test project's setup. +* Add a reference to the application/project under test (or to the same `Syncfusion.Licensing` NuGet package the application uses), and add the `Syncfusion.Licensing` NuGet package to the test project. Register the license key by calling the `RegisterLicense("YOUR LICENSE KEY")` method in the test project's setup (or load it from an environment variable / secret). N> * Place the license key between double quotes (e.g., `RegisterLicense("YOUR LICENSE KEY")`). Ensure that `Syncfusion.Licensing.dll` is referenced in the project where the license key is being registered. @@ -184,7 +187,7 @@ N> * Place the license key between double quotes (e.g., `RegisterLicense("YOUR L * Refer to the following example, which demonstrates how to register and validate the license key in the unit test project. {% tabs %} -{% highlight c# %} +{% highlight c# tabtitle="NUnit" %} public void TestSyncfusionWindowsFormsLicense() { var platform = Platform.WindowsForms; @@ -203,7 +206,7 @@ public void TestSyncfusionWindowsFormsLicense() {% endhighlight %} {% endtabs %} -* Once the unit test is executed, if the license key validation passes for the specified platform, the output similar to the following will be displayed in the Test Explorer window. +* After running the test, the output below appears in the Test Explorer window on success. ![License Validation Success Message](licensing-images/unit-test-success-message.png) @@ -213,7 +216,7 @@ public void TestSyncfusionWindowsFormsLicense() ### Troubleshooting -License validation fails due to either an invalid license key or an incorrect assembly or package version referenced in the project. In such cases: +License validation fails due to either an invalid license key or an incorrect assembly or package version referenced in the project. Perform the following steps: 1. Verify that you are using a valid license key for the platform. 2. Ensure that the assembly or package versions referenced in the project match the version of the license key. diff --git a/WindowsForms/Licensing/licensing-faq/Is-an-internet-connection-required-for-Syncfusion-Essential-Studio-license-validation.md b/WindowsForms/Licensing/licensing-faq/Is-an-internet-connection-required-for-Syncfusion-Essential-Studio-license-validation.md index cc5ed5c82..a1cdedc71 100644 --- a/WindowsForms/Licensing/licensing-faq/Is-an-internet-connection-required-for-Syncfusion-Essential-Studio-license-validation.md +++ b/WindowsForms/Licensing/licensing-faq/Is-an-internet-connection-required-for-Syncfusion-Essential-Studio-license-validation.md @@ -1,14 +1,14 @@ --- layout: post -title: Licensing FAQ – Net need for ES license validation | Syncfusion -description: Learn here some information about whether syncfusion Essential Studio license validation needs internet conncetion. +title: Licensing FAQ – Internet connection for ES license validation | Syncfusion +description: Learn here some information about whether syncfusion Essential Studio license validation needs internet connection. platform: WindowsForms control: Essential Studio documentation: ug --- -# Is an internet required for Essential Studio license validation? +# Is an internet connection required for Essential Studio license validation? -* Syncfusion license validation is done offline during application execution and does not require internet access. +* Syncfusion license validation is performed offline during application execution and does not require internet access. * Apps registered with a Syncfusion license key can be deployed on any system that does not have an internet connection. \ No newline at end of file diff --git a/WindowsForms/Licensing/licensing-faq/how-to-upgrade-from-trial-version-after-purchasing-a-license.md b/WindowsForms/Licensing/licensing-faq/how-to-upgrade-from-trial-version-after-purchasing-a-license.md index b4263a870..5ae5b5a50 100644 --- a/WindowsForms/Licensing/licensing-faq/how-to-upgrade-from-trial-version-after-purchasing-a-license.md +++ b/WindowsForms/Licensing/licensing-faq/how-to-upgrade-from-trial-version-after-purchasing-a-license.md @@ -7,11 +7,11 @@ control: Essential Studio documentation: ug --- -# How to upgrade from Trial version after purchasing a license? +# How to upgrade from Trial version after purchasing a license To upgrade from trial version, there are two possible solutions. -* Uninstall the trial version and install the fully licensed build from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. -* If you are using Syncfusion controls from [nuget.org](https://www.nuget.org/packages?q=syncfusion), replace the currently used trial license key with a paid license key that can be generated from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. Refer to [this](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) topic for more information regarding registering the license in the application. +1. Uninstall the trial version and install the fully licensed build from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. +2. If you are using Syncfusion controls from [nuget.org](https://www.nuget.org/packages?q=syncfusion), replace the currently used trial license key with a paid license key that can be generated from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. Register the new paid key in your project as described in [How to Register Syncfusion License Key in WindowsForms Application](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application). -N> License registration is not required if you reference Syncfusion assemblies from Licensed installer. These licensing changes applicable to all evaluators who refers the Syncfusion assemblies from evaluation installer and those who use Syncfusion NuGet packages from [nuget.org](https://www.nuget.org/). \ No newline at end of file +N> License registration is not required if you reference Syncfusion assemblies from a Licensed installer. These licensing changes apply to all evaluators who reference the Syncfusion assemblies from the evaluation installer and those who use Syncfusion NuGet packages from [nuget.org](https://www.nuget.org/). \ No newline at end of file diff --git a/WindowsForms/Licensing/licensing-faq/registering-syncfusion-account-for-nuget-org-user.md b/WindowsForms/Licensing/licensing-faq/registering-syncfusion-account-for-nuget-org-user.md index d79094ea2..0609d1a52 100644 --- a/WindowsForms/Licensing/licensing-faq/registering-syncfusion-account-for-nuget-org-user.md +++ b/WindowsForms/Licensing/licensing-faq/registering-syncfusion-account-for-nuget-org-user.md @@ -7,11 +7,11 @@ control: Essential Studio documentation: ug --- -# Registering Syncfusion account for direct NuGet.org user +# Registering Syncfusion account for direct NuGet.org users -If you have directly obtained Syncfusion assemblies from [NuGet.org](https://www.nuget.org/) and do not have a Syncfusion account, follow the steps to obtain a free 30-day trial license key: - -* Register for a free Syncfusion account [here](https://www.syncfusion.com/account/register) -* Go to the start trials [page](https://syncfusion.com/account/manage-trials/start-trials) and start a trial -* Finally proceed to the [Trial & Downloads section](https://www.syncfusion.com/account/manage-trials/downloads) to obtain the [license key](https://help.syncfusion.com/windowsforms/licensing/how-to-generate) +If you have directly obtained Syncfusion assemblies from [NuGet.org](https://www.nuget.org/) and do not have a Syncfusion account, follow these steps to obtain a free 30-day trial license key: +* Register for a free Syncfusion account [here](https://www.syncfusion.com/account/register). +* Go to the [Start Trials](https://www.syncfusion.com/account/manage-trials/start-trials) page and start a trial. +* Confirm the trial is active on the [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page before generating the key. +* Finally, proceed to the [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) section to obtain the [license key](https://help.syncfusion.com/windowsforms/licensing/how-to-generate). \ No newline at end of file diff --git a/WindowsForms/Licensing/licensing-faq/where-can-i-get-a-license-key.md b/WindowsForms/Licensing/licensing-faq/where-can-i-get-a-license-key.md index 95df4f795..60781bc10 100644 --- a/WindowsForms/Licensing/licensing-faq/where-can-i-get-a-license-key.md +++ b/WindowsForms/Licensing/licensing-faq/where-can-i-get-a-license-key.md @@ -7,16 +7,11 @@ control: Essential Studio documentation: ug --- -# Where can I get a license key? +# Where can I get a license key License keys can be generated from the [License & Downloads](https://syncfusion.com/account/downloads) or [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) section of the Syncfusion website. -![Get License Key](licensing-images/generate-license.png) +![Generate the Windows Forms license key](licensing-images/generate-license.png) I> * Syncfusion license keys are **version and platform specific**, refer to the [KB](https://support.syncfusion.com/kb/article/7898/how-to-generate-license-key-for-licensed-products) to generate the license key for the required version and platform. -* Refer this [KB](https://support.syncfusion.com/kb/article/7865/which-version-syncfusion-license-key-should-i-use-in-my-application) to know about which version of the Syncfusion license key should be used in the application. - - - - - +* Refer this [KB](https://support.syncfusion.com/kb/article/7865/which-version-syncfusion-license-key-should-i-use-in-my-application) to know about which version of the Syncfusion license key should be used in the application. \ No newline at end of file diff --git a/WindowsForms/Licensing/overview.md b/WindowsForms/Licensing/overview.md index fa78b8426..819d7369e 100644 --- a/WindowsForms/Licensing/overview.md +++ b/WindowsForms/Licensing/overview.md @@ -40,6 +40,8 @@ This application was built using a trial version of Syncfusion Essential Studio. | **Trial installer** | If the Syncfusion assemblies used in Build Server were from Trial Installer, we should register the license key in the application for the corresponding version and platforms, to avoid trial license warning. | Yes | Use any developer trial license to [generate](https://help.syncfusion.com/windowsforms/licensing/how-to-generate) keys for Build Environments as well. | | **Licensed installer** |If the Syncfusion assemblies used in Build Server were from Licensed Installer, then there is no need to register the license keys.

You can [download](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-download#download-the-license-version) and [install](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-install) the licensed version of our installer. | No | Not applicable | +For CI validation, see the [CI License Validation](https://help.syncfusion.com/windowsforms/licensing/licensing-faq/ci-license-validation) topic. + ## See Also * [How to Generate Syncfusion WindowsForms License Key?](https://help.syncfusion.com/windowsforms/licensing/how-to-generate) diff --git a/WindowsForms/Section508Compliance/VPAT.md b/WindowsForms/Section508Compliance/VPAT.md index eab494951..a3baedcc1 100644 --- a/WindowsForms/Section508Compliance/VPAT.md +++ b/WindowsForms/Section508Compliance/VPAT.md @@ -1,6 +1,6 @@ --- layout: post -title: Section 508 Compilance for Syncfusion Windows Forms products +title: Section 508 Compliance for Syncfusion Windows Forms products description: Learn here all about Voluntary Product Accessibility Template of Syncfusion Windows Forms products and more. platform: WindowsForms control: General diff --git a/WindowsForms/Upgrade/how-to-upgrade-syncfusion-components-using-vs-extensions.md b/WindowsForms/Upgrade/how-to-upgrade-syncfusion-components-using-vs-extensions.md index f4ab8764e..0b9acdf91 100644 --- a/WindowsForms/Upgrade/how-to-upgrade-syncfusion-components-using-vs-extensions.md +++ b/WindowsForms/Upgrade/how-to-upgrade-syncfusion-components-using-vs-extensions.md @@ -1,28 +1,36 @@ --- layout: post -title: Upgrading Syncfusion WinForms components to a latest version +title: Upgrading Syncfusion WinForms components to the latest version description: Learn here about the how upgrade Syncfusion WinForms components to a latest version from NuGet manager and migrate. platform: WindowsForms control: Essential Studio documentation: ug --- -# Upgrading Syncfusion Windows Forms components to latest version +# Upgrading Syncfusion Windows Forms components to the latest version -Syncfusion publishes the Visual Studio extension in the [Visual Studio marketplace](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Windows-Extensions) for every Syncfusion Volume releases, with exciting new features and Service Pack release with major bug fixes in the volume releases. +Syncfusion publishes the Visual Studio extension in the [Visual Studio marketplace](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Windows-Extensions) for every Syncfusion Volume release, with exciting new features, and a Service Pack release with major bug fixes in the volume release. You can upgrade to our latest version from any installed Syncfusion version. ## Upgrading to the latest version -1. In Visual Studio go to Extensions -> Manage Extensions -> Updates and find the Syncfusion WinForms extension. +Before starting the upgrade, close all Visual Studio instances and stop any running debugging sessions. Updating the extension while Visual Studio is running requires closing Visual Studio during the install step. - N> In Visual Studio 2017 or lower, go to Tools -> Extensions and Updates. +1. In Visual Studio go to **Extensions -> Manage Extensions -> Updates** and find the Syncfusion WinForms extension. -2. Then, click on the Update button to update the extension. + N> In Visual Studio 2017 or earlier, go to **Tools -> Extensions and Updates**. + +2. Then, click on the **Update** button to update the extension. ![Update WinForms Extensions](images/UpdateExtensionUI.png) -3. Now close the Visual Studio and click on the Modify button in VSIX installer dialog. +3. Close Visual Studio and click **Modify** in the VSIX installer dialog. + + ![Update WinForms Extensions](images/InstallUpdatedVersion.png) + +4. After the VSIX installer finishes, restart Visual Studio. Open **Extensions -> Manage Extensions -> Installed** and verify the Syncfusion WinForms extension shows the new version. + +### Toolbox recovery - ![Update WinForms Extensions](images/InstallUpdatedVersion.png) \ No newline at end of file +If the Syncfusion toolbox controls disappear after the extension update, run the Syncfusion installer (or re-run the extension installer) with the **Configure Syncfusion controls in Visual Studio** option enabled. This re-registers the toolbox items for the current Visual Studio version. \ No newline at end of file diff --git a/WindowsForms/Upgrade/how-to-upgrade.md b/WindowsForms/Upgrade/how-to-upgrade.md index bf94c9268..f07e53f8c 100644 --- a/WindowsForms/Upgrade/how-to-upgrade.md +++ b/WindowsForms/Upgrade/how-to-upgrade.md @@ -1,13 +1,13 @@ --- layout: post -title: Upgrading Syncfusion Windows Forms installer to latest version +title: Upgrading Syncfusion Windows Forms installer to the latest version description: Learn here about the how upgrade Syncfusion Windows Forms installer to a latest version from website and control panel. platform: WindowsForms control: Essential Studio documentation: ug --- -# Upgrading Syncfusion Windows Forms installer to a latest version +# Upgrading Syncfusion Windows Forms installer to the latest version Syncfusion releases new volumes once every three months, with exciting new features. There will be one Service Pack release for these volume releases. Service Pack releases are provided to address major bug fixes in the volume releases. @@ -18,13 +18,14 @@ See our "[**Upgrade Guide**](https://help.syncfusion.com/upgrade-guide/winforms- ## Upgrading to the latest version +Before starting the upgrade, close all Visual Studio instances and any running Syncfusion applications. + The most recent version of Syncfusion Windows Forms can be downloaded and installed by clicking on the "Latest Version: {Version}" link at the top of the Syncfusion Windows Forms Control Panel. ![Control Panel](images/upgrade-control-panel.png) You can also upgrade to the latest version just by downloading and installing the products you require from [this](https://www.syncfusion.com/account/downloads) link. The existing installed versions are not required to be uninstalled. - It is not required to install the Volume release before installing the Service Pack release. As releases for Volume and Service Packs work independently, you can install the latest version with major bug fixes directly. @@ -35,5 +36,4 @@ To upgrade from trial version, there are two possible solutions. * Uninstall the trial version and install the fully licensed build from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. * If you are using Syncfusion controls from [nuget.org](https://www.nuget.org/packages?q=syncfusion), replace the currently used trial license key with a paid license key that can be generated from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. Refer to [this](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) topic for more information regarding registering the license in the application. -N> License registration is not required if you reference Syncfusion assemblies from Licensed installer. These licensing changes applicable to all evaluators who refers the Syncfusion assemblies from evaluation installer and those who use Syncfusion NuGet packages from [nuget.org](https://www.nuget.org/packages?q=syncfusion). - +N> License registration is not required if you reference Syncfusion assemblies from Licensed installer. These licensing changes applicable to all evaluators who refers the Syncfusion assemblies from evaluation installer and those who use Syncfusion NuGet packages from [nuget.org](https://www.nuget.org/packages?q=syncfusion). \ No newline at end of file diff --git a/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md b/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md index a50c4bc65..f9179141f 100644 --- a/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md +++ b/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md @@ -1,17 +1,17 @@ --- layout: post -title: Upgrade Syncfusion WinForms NuGet packages to a latest version -description: Learn here about the how to upgrading Syncfusion WinForms NuGet packages to a latest version using NuGet manager and package manager UI. +title: Upgrade Syncfusion WinForms NuGet packages to the latest version +description: Learn here about the how to upgrade Syncfusion WinForms NuGet packages to the latest version using the NuGet manager and package manager UI. platform: WindowsForms control: Essential Studio documentation: ug --- -# Upgrading Syncfusion WinForms NuGet packages to a latest version +# Upgrading Syncfusion WinForms NuGet packages to the latest version Every three months, Syncfusion releases new volumes with interesting new features. For this volume, there will be weekly NuGet releases and a service pack. Syncfusion WinForms NuGet packages are released on a weekly basis to address critical issue fixes. -From any Syncfusion WinForms NuGet version you have installed; you can update to our most recent version. +From any Syncfusion WinForms NuGet version you have installed, you can update to our most recent version. ## Upgrade NuGet packages through Package Manager UI @@ -27,52 +27,70 @@ The NuGet **Package Manager UI** in Visual Studio allows you to easily install, > The [nuget.org](https://api.nuget.org/v3/index.json) package source is selected by default in the Package source drop-down. If your Visual Studio does not have nuget.org configured, follow the instructions in the [Microsoft documents](https://docs.microsoft.com/en-us/nuget/tools/package-manager-ui#package-sources) to set up the nuget.org feed URL. -3. By default, the package selected with latest version. You can select the required version and click the **Update** button and accept the license terms. The package will be upgraded to selected version in your WinForms application. +3. By default, the package is selected with the latest version. You can select the required version and click the **Update** button and accept the license terms. The package will be upgraded to the selected version in your WinForms application. ![Winforms Upgrade](images/NuGetUpgrade.png) You can choose the multiple NuGet packages by selecting the checkbox like below and click the **Update** button to update the multiple Syncfusion NuGet packages in your application. - ![Winform NuGet Upgrade](images/MultipleNuGetUpgrade.png) + ![Select multiple Syncfusion NuGet packages for upgrade](images/MultipleNuGetUpgrade.png) + +4. After the upgrade, perform a **Clean** and then **Rebuild** of the solution. Verify the upgraded version in the `.csproj`/`.vbproj` file or in the **Installed** tab of the NuGet Package Manager. ## Upgrade NuGet packages through .NET CLI -There is no distinct command for the update procedure in the .NET CLI. Unless you specify the package version, .NET CLI installs the latest version of the Syncfusion WinForms NuGet packages when you use the dotnet add package command. +The .NET CLI does not have a separate update command. To upgrade an already-installed Syncfusion WinForms NuGet package to a newer version, navigate to the project folder and re-run `dotnet add package` with the desired version. The CLI replaces the existing reference in the `.csproj` file and then runs `dotnet restore`. + +1. Open a command prompt and navigate to the project folder: + + `cd C:\Projects\MyWinFormsApp` + +2. To upgrade to a specific version, run: + + ```dotnet add package Syncfusion.Grid.Windows -v 26.1.0.35``` -To specify a version, add the -v parameter: + To upgrade to the latest version, omit the `-v` parameter: -```dotnet add package Syncfusion.Grid.Windows -v 19.2.0.59``` + ```dotnet add package Syncfusion.Grid.Windows``` + +3. After the command completes, perform a **Clean** and then **Rebuild** of the solution. + +N> The `dotnet add package` command uses the `-v` flag to specify a version. This is different from the Package Manager Console, which uses the `-Version` parameter. + +N> To roll back to a previous version, run `dotnet add package -v ` again with the desired older version. ## Upgrade NuGet packages through Package Manager Console The **Package Manager Console** saves NuGet packages upgrade time since you don't have to search for the package you want to update, and you can just type the command to update the appropriate Syncfusion WinForms NuGet package. Follow the steps below to upgrade the installed Syncfusion NuGet packages using the Package Manager Console in your WinForms application. -1. To show the Package Manager Console, open your WinForms application in Visual Studio and navigate to **Tools** in the Visual Studio menu and after hovering **NuGet Package Manager**, select **Package Manager Console**. +1. To show the Package Manager Console, open your WinForms application in Visual Studio and navigate to **Tools** in the Visual Studio menu and after hovering **NuGet Package Manager**, select **Package Manager Console**. In the **Default project** dropdown at the top of the Package Manager Console, select the project in which you want to update the package. ![Package Manager Console](images/console.png) -2. The Package Manager Console will be shown at the bottom of the screen. You can install the Syncfusion WinForms NuGet packages by enter the following NuGet update commands. +2. The **Package Manager Console** will be shown at the bottom of the screen. You can update the Syncfusion WinForms NuGet packages by entering the following NuGet update commands. - ***Update specified Syncfusion WinForms NuGet package*** + ### Updating a specified Syncfusion WinForms NuGet package - The below command will update the Syncfusion WinForms NuGet package in the default WinForms application + The command below updates the Syncfusion WinForms NuGet package in the default WinForms application. ```Update-Package ``` **For example:** Update-Package Syncfusion.Grid.Windows - ***Update specified Syncfusion WinForms NuGet package in specified WinForms application*** + ### Updating a specified Syncfusion WinForms NuGet package in a specified WinForms application - The below command will update the Syncfusion WinForms NuGet package in the given WinForms application alone + The command below updates the Syncfusion WinForms NuGet package in the given WinForms application. ```Update-Package -ProjectName ``` - **For example:** Update-Package Syncfusion.Grid.Windows -ProjectName SyncfusionWinformsApp + **For example:** `Update-Package Syncfusion.Grid.Windows -ProjectName SyncfusionWinformsApp` -3. By default, the package will be installed with latest version. You can give the required version with the -Version term like below to install the Syncfusion WinForms NuGet packages in the appropriate version. +3. By default, the package will be updated to the latest version. To update to a specific version, use the `-Version` parameter (note: Package Manager Console uses `-Version`, while the .NET CLI uses the shorter `-v`). - ```Update-Package Syncfusion.Grid.Windows -Version 19.2.0.59``` + ```Update-Package Syncfusion.GridF.Windows -Version 26.1.0.35``` ![Package Manager Console Output](images/UpdateConsole.png) -4. The NuGet package manager will update the Syncfusion WinForms NuGet package as well as the dependencies it has. \ No newline at end of file +4. The NuGet package manager will update the Syncfusion WinForms NuGet package as well as its dependencies. When the update is complete, the console shows the updated package version. + +5. After the upgrade, perform a **Clean** and then **Rebuild** of the solution. Verify the upgraded version in the **Installed** tab of the NuGet Package Manager or in the `.csproj`/`.vbproj` file. \ No newline at end of file diff --git a/WindowsForms/Visual-Studio-Integration/Add-References.md b/WindowsForms/Visual-Studio-Integration/Add-References.md index f9329b57d..4687d44c3 100644 --- a/WindowsForms/Visual-Studio-Integration/Add-References.md +++ b/WindowsForms/Visual-Studio-Integration/Add-References.md @@ -1,7 +1,7 @@ --- layout: post -title: Add a Syncfusion References| WinForms | Syncfusion -description: Syncfusion Reference Manger extension is add-in to add the Syncfusion references into the WinForms application +title: Add a Syncfusion Reference | WinForms | Syncfusion +description: The Syncfusion Reference Manager extension is an add-in that adds the required Syncfusion references to a WinForms application. platform: windowsforms control: Syncfusion Extensions documentation: ug @@ -15,23 +15,23 @@ N> This Reference Manager can be applied to a project for Syncfusion® assembly Follow the given steps to add the Syncfusion® references in Visual Studio: -> Before use the Syncfusion® WinForms Reference Manager, check whether the **WinForms Extensions - Syncfusion** installed or not in Visual Studio Extension Manager by going to Extensions -> Manage Extensions -> Installed for Visual Studio 2019 or later and for Visual Studio 2017 or lower by going to Tools -> Extensions and Updates -> Installed. If this extension not installed, please install the extension by follow the steps from the [download and installation](https://help.syncfusion.com/windowsforms/visual-studio-integration/download-and-installation) help topic. +> Before using the Syncfusion® WinForms Reference Manager, verify that the **Syncfusion WinForms** extension is installed by going to **Extensions → Manage Extensions → Installed** in Visual Studio 2019 or later, or **Tools → Extensions and Updates → Installed** in Visual Studio 2017 or lower. If this extension is not installed, install the extension by following the steps from the [download and installation](https://help.syncfusion.com/windowsforms/visual-studio-integration/download-and-installation) help topic. 1. Open a new or existing **WinForms** application. -2. To open Syncfusion® Reference Manager Wizard, follow either one of the options below: +2. To open the Syncfusion® Reference Manager, follow either of the options below: **Option 1:** - Click **Extensions->Syncfusion Menu** and choose **Essential Studio® for WinForms > Add References…** or any other Form in **Visual Studio**. + Click **Extensions -> Syncfusion Menu** and choose **Essential Studio® for WinForms -> Add References…** or any other Form in **Visual Studio**. ![Syncfusion Reference Manager via Syncfusion Menu](Syncfusion-Reference-Manger_images/Syncfusion_Menu_AddReference-latest.png) - N> In Visual Studio 2017 or lower, you can see the Syncfusion menu directly in the Visual Studio menu. + N> In Visual Studio 2017 or lower, the Syncfusion® menu is available directly in the Visual Studio main menu. [Syncfusion Reference Manager via Syncfusion Menu](Syncfusion-Reference-Manger_images/Syncfusion_Menu_AddReference.png) **Option 2:** - Right-click the selected project file from Solution Explorer, then select **Syncfusion® Reference Manager…** from **Context Menu**. The following screenshot shows this option in Visual Studio. + Right-click the selected project file in **Solution Explorer**, then select **Syncfusion® Reference Manager…** from the context menu. The following screenshot shows this option in Visual Studio. ![Syncfusion Reference Manager add-in](Syncfusion-Reference-Manger_images/Syncfusion-Reference-Manger-img1.png) @@ -53,17 +53,15 @@ Follow the given steps to add the Syncfusion® references in Visual Studio: ![Assembly location option in Syncfusion Reference Manger](Syncfusion-Reference-Manger_images/Syncfusion-Reference-Manger1-img4.png) - - N> Window Forms (.NET Core 3.1 and .NET 5.0) application in Visual Studio 2019 is supported from 18.2.0.44 version and .NET 6.0 application in Visual Studio 2022 is supported from 19.4.0.38 and .NET 7.0 application in Visual Studio 2022 is supported from 20.4.0.38 and .NET 8.0 application in Visual Studio 2022 is supported from 23.2.4. Version combobox is not visible for nuget option. - + N> Windows Forms (.NET Core 3.1 and .NET 5.0) applications in Visual Studio 2019 are supported from 18.2.0.44. .NET 6.0 applications in Visual Studio 2022 are supported from 19.4.0.38. .NET 7.0 applications in Visual Studio 2022 are supported from 20.4.0.38. .NET 8.0 applications in Visual Studio 2022 are supported from 23.2.4. The Version combobox is not visible for the NuGet option. 4. Choose the required controls that you want to include in the project. Then, click Done to add the required assemblies for the selected controls into the project. The following screenshot shows the list of required assemblies for the selected controls to be added. ![Syncfusion Reference Manager new assemblies add information dialog](Syncfusion-Reference-Manger_images/Syncfusion-Reference-Manger-img5.png) -5. Click **OK**. The listed Syncfusion assemblies are added to project. Then it notifies “Syncfusion assemblies have been added successfully” in Visual Studio status bar. +5. Click **OK**. The listed Syncfusion assemblies are added to the project. A notification **"Syncfusion assemblies have been added successfully"** appears in the Visual Studio status bar. - ![Syncfusion Reference Manager success status in Visual Studio status bar](Syncfusion-Reference-Manger_images/Syncfusion-Reference-Manger-img6.png) + ![Syncfusion Reference Manager success status in the Visual Studio status bar](Syncfusion-Reference-Manger_images/Syncfusion-Reference-Manger-img6.png) 6. Then, Syncfusion® licensing registration required message box will be shown, if you installed the trial setup or NuGet packages since Syncfusion® introduced the licensing system from 2018 Volume 2 (v16.2.0.41) Essential Studio® release. Navigate to the [help topic](https://help.syncfusion.com/common/essential-studio/licensing/license-key#how-to-generate-syncfusion-license-key), which is shown in the licensing message box to generate and register the Syncfusion license key to your project. Refer to this [blog](https://blog.syncfusion.com/post/Whats-New-in-2018-Volume-2-Licensing-Changes-in-the-1620x-Version-of-Essential-Studio.aspx) post for understanding the licensing changes introduced in Essential Studio®. diff --git a/WindowsForms/Visual-Studio-Integration/Check-for-Updates.md b/WindowsForms/Visual-Studio-Integration/Check-for-Updates.md index fb3ded4fd..ac3a998ae 100644 --- a/WindowsForms/Visual-Studio-Integration/Check-for-Updates.md +++ b/WindowsForms/Visual-Studio-Integration/Check-for-Updates.md @@ -9,21 +9,21 @@ documentation: ug # Check for Updates in Syncfusion® Essential Windows Forms -Syncfusion® provides the check for update extensions to find the latest version of the essential release. If it is available, then provide the option to update to the most recent version of the Essential Studio® release. So that you always get the latest features, fixes, and improvements by installing the latest version. +Syncfusion® provides the Check for Updates extension to find the latest version of the Essential Studio® release. If an update is available, the extension provides the option to update to the most recent version. This ensures you always get the latest features, fixes, and improvements by installing the most recent version. -I> The Syncfusion® Check for updates is available from v17.1.0.32. +I> The Syncfusion® Check for Updates feature is available from v17.1.0.32. -You can check updates availability in Visual Studio, and then install the update version if required. +You can check for available updates in Visual Studio, and then install the update version if required. 1. Choose **Extensions->Syncfusion -> Check for Updates…** in the Visual Studio menu ![Syncfusion check for updates menu](Check-for-Updates_images/Check-for-Updates_images-img1-latest.png) - N> In Visual Studio 2017 or lower, you can see the Syncfusion menu directly in the Visual Studio menu. + N> In Visual Studio 2017 or lower, the Syncfusion® menu is available directly in the Visual Studio main menu. ![Syncfusion check for updates menu](Check-for-Updates_images/Check-for-Updates_images-img1.png) -2. When there is an update, **Update** dialog box opens. +2. The **Check for Updates** dialog opens. If no update is available, the dialog indicates that you are using the latest version. If an update is available, the dialog lists the latest version and provides the **Update** option. ![Syncfusion check for updates wizard](Check-for-Updates_images/Check-for-Updates_images-img2.png) diff --git a/WindowsForms/Visual-Studio-Integration/Item-Template.md b/WindowsForms/Visual-Studio-Integration/Item-Template.md index dcf7cbaf2..bbbadb164 100644 --- a/WindowsForms/Visual-Studio-Integration/Item-Template.md +++ b/WindowsForms/Visual-Studio-Integration/Item-Template.md @@ -15,39 +15,43 @@ I> The Syncfusion® Windows Forms item templates are available from v13.1.0.21. The following steps will guide you in adding the Syncfusion® WinForms components to your Visual Studio WinForms application. -> Check whether the **WinForms Extensions - Syncfusion** are installed or not in Visual Studio Extension Manager by going to **Extensions -> Manage Extensions -> Installed** for Visual Studio 2019 or later and Visual Studio 2017 or lower by going to **Tools -> Extensions and Updates -> Installed**. If this extension is not installed, please install the extension by following the steps from the [download and installation](https://help.syncfusion.com/windowsforms/visual-studio-integration/download-and-installation) help topic. +> Check whether the **Syncfusion WinForms** extension is installed in Visual Studio Extension Manager by going to **Extensions → Manage Extensions → Installed** for Visual Studio 2019 or later, and to **Tools → Extensions and Updates → Installed** for Visual Studio 2017 or lower. If this extension is not installed, install the extension by following the steps from the [download and installation](https://help.syncfusion.com/windowsforms/visual-studio-integration/download-and-installation) help topic. -## Add components using Syncfusion® Item Template +N> Item Templates are available from v13.1.0.21. The Item Template wizard supports **WinForms App (.NET Framework)** and **WinForms App (.NET)** project types. -1. Open a new or existing WinForms application. +## Add components using Syncfusion® Item Template - **Option 1:** +1. Open a new or existing **WinForms** project. Then choose one of the following options to open the wizard: -2. From the **Solution Explorer, right-click** on the WinForms application. Choose **Add Syncfusion Item...**. + - **Option 1:** In **Solution Explorer**, right-click the WinForms project and choose **Add Syncfusion Item...**. - ![Choose Add Syncfusion Item option from right click project](Item-Template-images/Add-syncfusion-item.png) + ![Add Syncfusion Item option in the Solution Explorer context menu](Item-Template-images/Add-syncfusion-item.png) - **Option 2:** + - **Option 2:** Click **Extensions → Essential Studio® for WinForms → Add Syncfusion Item…** in Visual Studio. -3. Click **Extensions > Essential Studio® for WinForms > Add Syncfusion Item…** in Visual Studio. + ![Add Syncfusion Item option in the Extensions menu](Item-Template-images/Add-item.png) - ![Choose Add Syncfusion Item option from menu](Item-Template-images/Add-item.png) +2. The Syncfusion® WinForms Item Template wizard opens as shown below. -4. The Syncfusion® WinForms Item Template wizard will be launched as follows. + ![Syncfusion® WinForms Item Template wizard showing available forms and components](Item-Template-images/Add-syncfusion-ui.png) - ![Syncfusion WinForms Item template components](Item-Template-images/Add-syncfusion-ui.png) +3. Choose one of the following scenarios to add a Syncfusion® form in your application: -5. Please choose one of the following scenarios to add Syncfusion Forms in your application: + | Scenario | When to use | + |----------|-------------| + | Default Form with Syncfusion® Component | Use the default Microsoft WinForms layout, but add a Syncfusion® control. | + | Syncfusion® Form with Syncfusion® Component | Use a Syncfusion® form (e.g., MetroForm, RibbonForm) and add a Syncfusion® control. | + | Syncfusion® Form without Syncfusion® Component | Add a blank Syncfusion® form without any components. | - **Default Form with Syncfusion Component:** If you select the **Default** form and then choose any Syncfusion® component and the specific features that are essential for your project, the selected component will be added with the default Microsoft form layout. + **Default Form with Syncfusion® Component:** If you select the **Default** form and then choose any Syncfusion® component and the specific features that are essential for your project, the selected component is added with the default Microsoft WinForms layout. - ![Default Form with Syncfusion Component](Item-Template-images/Default-Form-with-Syncfusion-Component.png) + ![Default form with a Syncfusion® component added](Item-Template-images/Default-Form-with-Syncfusion-Component.png) - **Syncfusion Form with Syncfusion Component:** If you select a Syncfusion® form and then choose any Syncfusion® component and the specific features that are essential for your project, the selected component will be added with the layout of the selected Syncfusion® form. + **Syncfusion® Form with Syncfusion® Component:** If you select a Syncfusion® form and then choose any Syncfusion® component and the specific features that are essential for your project, the selected component is added with the layout of the selected Syncfusion® form. Available Syncfusion® forms include MetroForm, RibbonForm, Office2007Form, Office2010Form, TabbedForm, and XPMainForm. - ![Syncfusion Form with Syncfusion Component](Item-Template-images/Syncfusion-Form-with-Syncfusion-Component.png) + ![Syncfusion® form with a Syncfusion® component added](Item-Template-images/Syncfusion-Form-with-Syncfusion-Component.png) - **Syncfusion Form without Syncfusion Components:** If you select a Syncfusion® form and then choose the **Blank** option from the Syncfusion® component list, a blank Syncfusion® form will be added without any Syncfusion® components. + **Syncfusion® Form without Syncfusion® Components:** If you select a Syncfusion® form and then choose **Blank** from the Syncfusion® component list, a blank Syncfusion® form is added without any Syncfusion® components. ![Syncfusion Form without Syncfusion Components](Item-Template-images/Syncfusion-Form-without-Syncfusion-Components.png) diff --git a/WindowsForms/Visual-Studio-Integration/Overview.md b/WindowsForms/Visual-Studio-Integration/Overview.md index 804638c0e..c4a8d6b7a 100644 --- a/WindowsForms/Visual-Studio-Integration/Overview.md +++ b/WindowsForms/Visual-Studio-Integration/Overview.md @@ -17,27 +17,27 @@ N> Syncfusion® Extension is published in Visual Studio Marketplace. We provided [Visual Studio 2019 or lower](https://marketplace.visualstudio.com/items?itemName=SyncfusionInc.Windows-Extensions). -I> The Syncfusion® WinForms menu option is available from v17.1.0.32. +I> The Syncfusion® WinForms menu option is available from v17.1.0.32. The same availability note also applies to the [Check for Updates](https://help.syncfusion.com/windowsforms/visual-studio-integration/check-for-updates) feature. -The Syncfusion® provides the following supports in Visual Studio: +Syncfusion® provides the following features in Visual Studio: -1. [Create Project](https://help.syncfusion.com/windowsforms/Visual-Studio-Integration/Create-Project): Creates the Syncfusion® WinForms application by adding the required Syncfusion® assemblies and forms. -2. [Item Template](https://help.syncfusion.com/windowsforms/Visual-Studio-Integration/Item-Template): Add predefined Syncfusion® items (Forms) and the required Syncfusion® assemblies in WinForms Application. -3. [Add References](https://help.syncfusion.com/windowsforms/Visual-Studio-Integration/Add-References): Add the required Syncfusion® assembly to Windows project reference based on the selected control(s). +1. [Create Project](https://help.syncfusion.com/windowsforms/visual-studio-integration/template-studio): Creates the Syncfusion® WinForms application by adding the required Syncfusion® assemblies and forms. +2. [Item Template](https://help.syncfusion.com/windowsforms/visual-studio-integration/item-template): Add predefined Syncfusion® items (Forms) and the required Syncfusion® assemblies in WinForms Application. +3. [Add References](https://help.syncfusion.com/windowsforms/visual-studio-integration/add-references): Add the required Syncfusion® assembly to Windows project reference based on the selected control(s). 4. [Toolbox](https://help.syncfusion.com/windowsforms/visual-studio-integration/toolbox-configuration): Configure the Syncfusion® controls into the Visual Studio .NET toolbox. -5. [Troubleshooting](https://help.syncfusion.com/windowsforms/Visual-Studio-Integration/Troubleshooting): Troubleshoots the project with the Syncfusion® configuration and apply the fix like, wrong Framework Syncfusion® assembly added to the project or missing any Syncfusion® dependent assembly of a referred assembly. +5. [Troubleshooting](https://help.syncfusion.com/windowsforms/visual-studio-integration/troubleshooting): Troubleshoots the project with the Syncfusion® configuration and apply the fix like, wrong Framework Syncfusion® assembly added to the project or missing any Syncfusion® dependent assembly of a referred assembly. -**No project selected in Visual Studio** +**Figure 1: Syncfusion® menu when no project is selected in Visual Studio** -![Syncfusion Menu when No project selected in Visual Studio](Overview-images/Syncfusion_Menu_OverView1.png) +![Syncfusion® menu when no project is selected in Visual Studio](Overview-images/Syncfusion_Menu_OverView1.png) -**Selected Microsoft WinForms application in Visual Studio** +**Figure 2: Syncfusion® menu when a Microsoft WinForms application is selected in Visual Studio** -![Syncfusion Menu when Selected Microsoft WinForms application in Visual Studio](Overview-images/Syncfusion_Menu_OverView2.png) +![Syncfusion® menu when a Microsoft WinForms application is selected in Visual Studio](Overview-images/Syncfusion_Menu_OverView2.png) -**Selected Syncfusion® WinForms application in Visual Studio** +**Figure 3: Syncfusion® menu when a Syncfusion® WinForms application is selected in Visual Studio** -![Syncfusion Menu when Selected Synfusion WinForms application in Visual Studio](Overview-images/Syncfusion_Menu_OverView3.png) +![Syncfusion® menu when a Syncfusion® WinForms application is selected in Visual Studio](Overview-images/Syncfusion_Menu_OverView3.png) N> In Visual Studio 2017 or lower, you can see the Syncfusion menu directly in the Visual Studio menu. diff --git a/WindowsForms/Visual-Studio-Integration/Syncfusion-Notifications.md b/WindowsForms/Visual-Studio-Integration/Syncfusion-Notifications.md index 49873efe6..955c28d4c 100644 --- a/WindowsForms/Visual-Studio-Integration/Syncfusion-Notifications.md +++ b/WindowsForms/Visual-Studio-Integration/Syncfusion-Notifications.md @@ -15,11 +15,19 @@ N> The Syncfusion® Notification feature is available from Essential Studio® v2 ## Notification Configuration -The Syncfusion® Options page allows you to configure notification settings. Customise trial and newer version notifications with a simple true or false toggle. +The Syncfusion® Options page allows you to configure notification settings. Each notification can be toggled **on** (true) or **off** (false). Toggling a notification off suppresses that notification at runtime, while leaving the others active. -It can be accessed by clicking **Tools -> Options -> Syncfusion -> Winforms** +To configure a notification: -![Option Page](images/winforms-optionPage.png) +1. Open Visual Studio. +2. Navigate to **Tools → Options → Syncfusion → WinForms**. +3. Locate the notification to disable. +4. Set its value to **False** to disable the notification or **True** to enable it. +5. Click **OK**. + +The toggles are per-user settings stored in the Visual Studio profile, and they persist across Visual Studio upgrades on the same machine. + +![Syncfusion® WinForms Options page listing the notification toggles](images/winforms-optionPage.png) ## Notification Types diff --git a/WindowsForms/Visual-Studio-Integration/Template-Studio.md b/WindowsForms/Visual-Studio-Integration/Template-Studio.md index 8d7b43380..4f92b574e 100644 --- a/WindowsForms/Visual-Studio-Integration/Template-Studio.md +++ b/WindowsForms/Visual-Studio-Integration/Template-Studio.md @@ -20,9 +20,9 @@ Create the Syncfusion® WinForms project using the Visual Studio Project Templat > Check whether the **WinForms Extensions - Syncfusion** are installed or not in Visual Studio Extension Manager by going to **Extensions -> Manage Extensions -> Installed** for Visual Studio 2019 or later, and for Visual Studio 2017 by going to **Tools -> Extensions and Updates -> Installed**. If this extension is not installed, please install the extension by following the steps from the [download and installation](https://help.syncfusion.com/windowsforms/visual-studio-integration/download-and-installation) help topic. -1. Open the Visual Studio 2022. +1. Open Visual Studio 2017, 2019, or 2022. -2. Select one of the following options to create the Syncfusion® WinForms application +2. Select one of the following options to create the Syncfusion® WinForms application: **Option 1:** Choose **Extension -> Syncfusion -> Essential Studio® for WinForms -> Create New Syncfusion Project…** from the Visual Studio menu. @@ -52,17 +52,17 @@ Create the Syncfusion® WinForms project using the Visual Studio Project Templat ![Syncfusion WinForms project type selection wizard](Template-Studio-Images/WF-4.png) - **Predefined template:** Choose this option to select from 5 predefined templates, including Calendar, Contact, Outlook, Docking Manager, and Spreadsheet. By choosing one of these templates, you can create your application without needing to follow any further steps. + **Predefined template:** Choose this option to select from 5 predefined templates, including Calendar, Contact, Outlook, Docking Manager, and Spreadsheet. You can create your application without further steps. ![Syncfusion WinForms Predefined template wizard](Template-Studio-Images/WF-10.png) - **Project type:** Choose this option to select from 4 project types, including Blank, Menu Bar, Ribbon, and Tabbed Form. + **Project type:** Choose this option to select from 4 project types, including Blank, Menu Bar, Ribbon, and Tabbed Form. Blank creates an empty project, Menu Bar creates a project with a top menu bar, Ribbon creates a project with a ribbon, and Tabbed Form creates a project with a tabbed MDI layout. 6. Click **Next** or navigate to the **Pages** tab to access a list of available Syncfusion® WinForms components you can add to the application. ![Syncfusion WinForms pages selection wizard](Template-Studio-Images/WF-6.png) - To unselect the added control(s), Click ‘x’ for the corresponding control in the control list from the Project Details. + To unselect an added control, click the X icon next to the corresponding control in the **Project Details** list. N> The Control Features option is not accessible for Blank Pages. @@ -74,7 +74,7 @@ Create the Syncfusion® WinForms project using the Visual Studio Project Templat ![Syncfusion WinForms app features selection wizard](Template-Studio-Images/WF-7.png) - N> The App Features option is not accessible for .NET Framework. + N> The App Features option is not accessible for .NET Framework because the generated DI setup targets .NET (non-Framework) hosts. **Project Details Section** @@ -88,6 +88,8 @@ Create the Syncfusion® WinForms project using the Visual Studio Project Templat ![NuGetEntry](Template-Studio-Images/NuGetEntry.png) + N> After the project is created, open the **Package Manager Console** or the **NuGet Package Manager** and confirm that all Syncfusion® packages restored successfully. If any package shows a warning, run **Update-Package -reinstall** for that package. + To find out which NuGet packages are needed for other WinForms controls, please refer to this [documentation link](https://help.syncfusion.com/windowsforms/control-dependencies) for detailed information on the required packages for each control. 10. When you create a WinForms project, the following Dependency Injection (DI) setup is added to the **Program.cs** file. This setup registers services, view models, and views with the DI container, ensuring proper functionality and service management within your application. The **ConfigureServices** method in the **Program.cs** file establishes this DI setup by managing the application’s services, view models, and views. Here’s a detailed breakdown: @@ -125,7 +127,7 @@ Here's a simple explanation: ![Resources](Template-Studio-Images/Resources.png) - > The .NET 8.0 and .NET 9.0 options will be available in the Select a framework version dropdown only if the respective .NET SDKs are installed on your system. The table below outlines the .NET versions, the specific product versions from which they are available, and the Visual Studio versions that support them: + > The .NET 8.0, .NET 9.0, and .NET 10.0 options are available in the **Select a framework version** dropdown only if the respective .NET SDKs are installed on the system. The table below outlines the .NET versions, the product versions from which they are available, and the Visual Studio versions that support them: >
> > @@ -145,6 +147,11 @@ Here's a simple explanation: > > > + > + > + > + > + > > >
v27.2.2Visual Studio 2022
.NET 10.0v28.1.6Visual Studio 2022
diff --git a/WindowsForms/Visual-Studio-Integration/Toolbox-Configuration.md b/WindowsForms/Visual-Studio-Integration/Toolbox-Configuration.md index b22820652..e3ac7a30e 100644 --- a/WindowsForms/Visual-Studio-Integration/Toolbox-Configuration.md +++ b/WindowsForms/Visual-Studio-Integration/Toolbox-Configuration.md @@ -17,7 +17,9 @@ Syncfusion® controls will be automatically configured in the Visual Use the following steps to add the Syncfusion® WinForms controls through the Syncfusion® Toolbox Installer: -1. To launch Toolbox configuration utility, follow either one of the options below: +N> The Syncfusion® Essential Studio® WinForms installer must be installed before running the Toolbox Installer. If multiple Visual Studio versions are installed on the same machine, run the Toolbox Installer once and select each Visual Studio version to configure. + +1. To launch the Toolbox Configuration utility, follow either of the options below: **Option 1:** To open the Syncfusion Control Panel, click **Add On and Utilities > Toolbox Installer**. @@ -45,7 +47,7 @@ Use the following steps to add the Syncfusion® WinForms controls through the Sy N> You can also configure Syncfusion® controls from a lower version Framework assembly to higher version of Visual Studio. -3. The successful configuration of Toolbox is indicated by an Information message. Click **OK**. +3. The successful configuration of the Toolbox is indicated by an information message. Click **OK**. ![Toolbox Installer](Toolbox-Configuration_images/Toolbox-Configuration_img3.png) diff --git a/WindowsForms/Visual-Studio-Integration/Troubleshooting.md b/WindowsForms/Visual-Studio-Integration/Troubleshooting.md index b1520934e..8464e1b6c 100644 --- a/WindowsForms/Visual-Studio-Integration/Troubleshooting.md +++ b/WindowsForms/Visual-Studio-Integration/Troubleshooting.md @@ -9,10 +9,10 @@ documentation: ug # Troubleshoot the project -Troubleshoot your project for Syncfusion® configuration issues and apply necessary fixes, such as adding a Syncfusion® assembly targeting the incorrect .NET Framework version or resolving missing dependent Syncfusion® assemblies. The Syncfusion Troubleshooter is capable of performing the following tasks: +Troubleshoot your project for Syncfusion® configuration issues. Apply fixes such as adding a Syncfusion® assembly that targets the correct .NET Framework version, or resolving missing dependent Syncfusion® assemblies. The Syncfusion® Troubleshooter performs the following tasks: -* Report the Configuration issues. +* Report the configuration issues. * Apply the solution. ## Report the Configuration issues diff --git a/WindowsForms/Visual-Studio-Integration/download-and-installation.md b/WindowsForms/Visual-Studio-Integration/download-and-installation.md index 935a187ad..99da7b273 100644 --- a/WindowsForms/Visual-Studio-Integration/download-and-installation.md +++ b/WindowsForms/Visual-Studio-Integration/download-and-installation.md @@ -1,6 +1,6 @@ --- layout: post -title: Downloand and Installation | WinForms | Syncfusion +title: Download and Installation | WinForms | Syncfusion description: this section provide the information about how to download and install the extensions in Visual Studio. platform: windowsforms control: Syncfusion Extensions @@ -19,7 +19,9 @@ Syncfusion® publishes its Visual Studio extension on the Visual Stud The following software prerequisites must be installed to use the Syncfusion® WinForms extension for creating projects, adding code snippets, converting, and upgrading Syncfusion® WinForms applications. -* [Visual Studio 2010 or later](https://visualstudio.microsoft.com/downloads). +* [Visual Studio 2015 or later](https://visualstudio.microsoft.com/downloads). + +N> In Visual Studio 2017 or lower, the Syncfusion® menu is available directly in the Visual Studio main menu. In Visual Studio 2019 or later, the Syncfusion® menu is available under **Extensions** in the Visual Studio menu. ## Install through the Visual Studio Manage Extensions diff --git a/WindowsForms/ai-tools/ai-powered-development.md b/WindowsForms/ai-tools/ai-powered-development.md index 3973bf79b..bb01580c7 100644 --- a/WindowsForms/ai-tools/ai-powered-development.md +++ b/WindowsForms/ai-tools/ai-powered-development.md @@ -98,7 +98,7 @@ Choose one of these two options: **Option 1: Install MCP Server** -The MCP Server establishes a direct connection between your IDE-integrated AI and Syncfusion WinForms documentation, enabling the AI to retrieve real-time information for unfamiliar controls. Using Retrieval-Augmented Generation (RAG), it injects relevant documentation into the AI's context to generate accurate and up-to-date code suggestions. +The MCP Server establishes a direct connection between your IDE-integrated AI and Syncfusion WinForms documentation, enabling the AI to retrieve real-time information for unfamiliar controls. Using Retrieval-Augmented Generation (RAG), it injects relevant documentation into the AI's context to generate accurate and up-to-date code suggestions. For setup steps, see the [SyncfusionWinFormsAssistant MCP Server](https://help.syncfusion.com/windowsforms/ai-coding-assistant/mcp-server) page. **What you get:** @@ -190,7 +190,7 @@ public partial class EmployeeForm : Form InitializeComponent(); SetupGrid(); } - + private void SetupGrid() { employeeGrid = new GridControl(); @@ -213,7 +213,7 @@ public partial class EmployeeForm : Form this.Controls.Add(employeeGrid); LoadEmployees(); } - + private void LoadEmployees() { // Load employee data diff --git a/WindowsForms/skills/component-skills.md b/WindowsForms/skills/component-skills.md index b4fba710d..53348c8b5 100644 --- a/WindowsForms/skills/component-skills.md +++ b/WindowsForms/skills/component-skills.md @@ -10,7 +10,7 @@ domainurl: ##DomainURL## # Syncfusion Windows Forms Agent Skills for AI Assistants -This guide introduces **Syncfusion Windows Forms Skills**, a knowledge package that enables AI assistants (VS Code, Cursor, CodeStudio, etc.) to understand and generate accurate Windows Forms code using official APIs, patterns, and theming guidelines. +This guide introduces **Syncfusion Windows Forms Skills**, a knowledge package that enables AI assistants (Visual Studio Code, Cursor, CodeStudio, etc.) to understand and generate accurate Windows Forms code using official APIs, patterns, and theming guidelines. These skills eliminate common issues with generic AI suggestions by grounding the assistant in accurate component usage patterns, API structures, supported features, and project‑specific configuration. @@ -20,7 +20,8 @@ Before installing Syncfusion® Windows Forms - Required [Node.js](https://nodejs.org/en/) version >= 16 - Windows Forms application (existing or new); see [Overview](https://help.syncfusion.com/windowsforms/overview) -- A supported AI agent or IDE that integrates with the Skills CLI (VS Code, Syncfusion® Code Studio, Cursor, etc.) +- A supported AI agent or IDE that integrates with the Skills CLI (Visual Studio Code, Syncfusion® Code Studio, Cursor, etc.) +- A Syncfusion® Essential Studio for Windows Forms release that matches the skill pack version installed. ## Key Benefits @@ -37,7 +38,7 @@ Before installing Syncfusion® Windows Forms **Design‑System Guidance** - Theme usage, including light and dark variants -- VisualStyle patterns and customization approaches +- [VisualStyle](https://help.syncfusion.com/windowsforms/visualstyle) patterns and customization approaches - Consistent design alignment across Syncfusion® Windows Forms components ## Installation @@ -46,7 +47,7 @@ Install [Syncfusion® Windows Forms componen ### Install all skills -Use the following command to install all component skills at once in the `.agents/skills` directory: +From your project root, run the following command to install all component skills at once in the `.agents/skills` directory. The `-y` flag accepts the default answers (project scope, default agent) without prompting. {% tabs %} {% highlight bash tabtitle="NPM" %} @@ -58,7 +59,7 @@ npx skills add syncfusion/winforms-ui-components-skills -y ### Install selected skills -Use the following command to install skills interactively: +Run the command below from your project root to install skills interactively. The command opens a list of available skills and prompts for the target agent and installation scope. {% tabs %} {% highlight bash tabtitle="NPM" %} @@ -68,7 +69,7 @@ npx skills add syncfusion/winforms-ui-components-skills {% endhighlight %} {% endtabs %} -The terminal will display a list of available skills. Use the arrow keys to navigate, the space bar to select the desired skills, and the Enter key to confirm. +The terminal will display a list of available skills. Use the **arrow keys** to move between skills, the **space bar** to toggle a skill on or off, and the **Enter** key to confirm your selection. If you do not select any skills and press Enter, the command exits without installing. {% tabs %} {% highlight bash tabtitle="CMD" %} @@ -125,26 +126,26 @@ Choose your installation scope (project-level or global), then confirm to comple {% endhighlight %} {% endtabs %} -This registers the Syncfusion® skill pack so your AI assistant can automatically load it in supported IDEs such as [Code Studio](https://help.syncfusion.com/code-studio/reference/configure-properties/skills), [Visual Studio Code](https://code.visualstudio.com/docs/copilot/customization/agent-skills), and [Cursor](https://cursor.com/docs/skills). +This registers the Syncfusion® skill pack so your AI assistant can automatically load it in supported IDEs such as [Syncfusion® Code Studio](https://help.syncfusion.com/code-studio/reference/configure-properties/skills), [Visual Studio Code](https://code.visualstudio.com/docs/copilot/customization/agent-skills), and [Cursor](https://cursor.com/docs/skills). After installation, restart your IDE (or use the **Reload Window** command) so the IDE can detect the newly added skill files. To learn more about the Skills CLI, refer [here](https://www.skills.sh/docs). -## How Syncfusion® Agent Skills Work - -1. **Reads relevant Skill files based on queries**, retrieving component usage patterns, APIs, and best‑practice guidance from installed Syncfusion® Skills. The assistant initially loads only skill names and descriptions, then dynamically loads the required skill and reference files as needed to provide accurate Syncfusion guidance. -2. **Enforces Syncfusion® best practices**, including: - - - Using the required assemblies for each component. - - Injecting applicable component controls (for example, paging, sorting, filtering, and other feature controls). - - Adding the correct theme and VisualStyle settings. -3. **Generates component‑accurate code**, avoiding invalid properties or unsupported patterns. - ### Using the AI Assistant Once skills are installed, the assistant can be used to generate and update Syncfusion® Windows Forms code for tasks such as: - "Add a DataGrid with paging, sorting, and filtering." -- "Create a Scheduler with week view and drag‑drop." +- "Create a Schedule control with week view and drag‑drop." + +## How Syncfusion® Agent Skills Work + +1. **Reads relevant Skill files based on queries**, retrieving component usage patterns, APIs, and best‑practice guidance from installed Syncfusion® Skills. The assistant initially loads only skill names and descriptions. It then dynamically loads the required skill and reference files as needed to provide accurate Syncfusion guidance. Skill files are matched to the query by name, description, and file references declared inside the skill. +2. **Enforces Syncfusion® best practices** when generating code, including: + + - Using the required assemblies for each component. + - Recommending applicable feature controls (for example, paging, sorting, filtering) so they are included in the generated code. + - Adding the correct theme and [VisualStyle](https://help.syncfusion.com/windowsforms/visualstyle) settings. Supported themes include Office2007, Office2010, Office2013, Office2016, Office2019, Metro, and HighContrast. +3. **Generates component‑accurate code**, avoiding invalid properties or unsupported patterns. ## Skills CLI Commands @@ -152,7 +153,7 @@ After installation, manage Syncfusion® Agen ### List Skills -View all installed skills in your current project or global environment: +View all installed skills in your current project or global environment. Use this command to discover the exact `` values used by the other commands: {% tabs %} {% highlight bash tabtitle="NPM" %} @@ -164,7 +165,7 @@ npx skills list ### Remove a Skill -Uninstall a specific skill from your environment: +Uninstall a specific skill from your environment. Run `npx skills list` first to confirm the exact name to pass: {% tabs %} {% highlight bash tabtitle="NPM" %} @@ -212,9 +213,10 @@ Yes. Once installed, supported agents automatically detect and load relevant ski **Skills are not being loaded** -Verify that skills are installed in the correct agent directory, restart the IDE, and confirm that the agent supports external skill files. +Verify that skills are installed in the correct agent directory (for example, `.agents/skills/`), confirm with `npx skills list`, restart the IDE (or run the **Reload Window** command), and confirm that the agent supports external skill files. Check the agent's log output for the location of any skill-load error messages. ## See also - [Agent Skills Standards](https://agentskills.io/home) -- [Skills CLI](https://www.skills.sh/docs) \ No newline at end of file +- [Skills CLI](https://www.skills.sh/docs) +- [VisualStyle](https://help.syncfusion.com/windowsforms/visualstyle) \ No newline at end of file diff --git a/WindowsForms/skills/ui-builder-skill.md b/WindowsForms/skills/ui-builder-skill.md index 3e2fdba36..b18f8f214 100644 --- a/WindowsForms/skills/ui-builder-skill.md +++ b/WindowsForms/skills/ui-builder-skill.md @@ -72,7 +72,7 @@ apm --version ### Install the Syncfusion® Windows Forms UI Builder package using APM -Use the APM CLI to install the WinForms UI Builder skill for your preferred environment: +Use the APM CLI to install the WinForms UI Builder skill for your preferred environment. The `-t` flag selects the deployment target. Run the command from your project root: {% tabs %} {% highlight bash tabtitle="Copilot" %} @@ -136,7 +136,7 @@ Key enforcement points: After installing Windows Forms UI Builder with APM, the relevant agent and skill files are added to your project under: -- `.agent/skills/` (skill files) +- `.agents/skills/` (skill files) - `.github/agents/` (Windows Forms UI builder agent configuration, based on the selected target) To start using the skill: @@ -159,7 +159,7 @@ Create a CMS Admin Dashboard UI featuring a collapsible TreeView in a left panel {% endpromptcard %} {% endpromptcards %} -Generated code follows Windows Forms best practices with proper control layout, event handling, data bindings, strong C# typing, and built-in security measures such as input validation and avoidance of hardcore secrets. The code is fully compatible with Visual Studio designer and Windows Forms conventions. +Generated code follows Windows Forms best practices with proper control layout, event handling, data bindings, strong C# typing, and built-in security measures such as input validation and avoidance of hard-coded secrets. The code is fully compatible with Visual Studio designer and Windows Forms conventions. ## Best Practices @@ -173,7 +173,7 @@ Follow these guidelines to get the most out of UI Builder and ensure high-qualit ## Troubleshooting -- **APM installation failure**: Refer to this [documentation](https://microsoft.github.io/apm/getting-started/installation/#troubleshooting) +- **APM installation failure**: Refer to this [documentation](https://microsoft.github.io/apm/getting-started/installation/#troubleshooting). - **Skills not loading**: Ensure the **.agent/** and **.github/agents/** folders exist in your project and that the skill was installed successfully using APM. Verify that the correct agent is selected from the Agent dropdown in your IDE. @@ -188,15 +188,18 @@ Follow these guidelines to get the most out of UI Builder and ensure high-qualit Any Skills-compatible agent that reads local skill files (Code Studio, VS Code, Cursor, etc.). **Are skills loaded automatically?** -Yes. Supported agents automatically load relevant skills based on your query. +Yes. Supported agents automatically load relevant skills based on your query. To disable automatic loading, deselect the skill in the agent's skill manager. **Can I customize the generated styles?** Yes — the generated Windows Forms controls include clear integration points for style adjustments. **Does it modify files automatically?** -The skill proposes changes and requires confirmation for insertion; automatic dependency installation may be offered depending on agent permissions. +The skill proposes changes and requires confirmation for insertion. Automatic dependency installation may be offered depending on agent permissions (file-read, file-write, and package-install scopes). ## See also - [Agent Skills Standards](https://agentskills.io/home) - [Agent Package Manager](https://microsoft.github.io/apm/getting-started/quick-start/) +- [Theme Studio](https://help.syncfusion.com/windowsforms/skinmanager/theme-studio) +- [VisualStyle](https://help.syncfusion.com/windowsforms/visualstyle) +- [Licensing](https://help.syncfusion.com/windowsforms/licensing) diff --git a/WindowsForms/skins/Getting-Started.md b/WindowsForms/skins/Getting-Started.md index d8a3b9895..56795906b 100644 --- a/WindowsForms/skins/Getting-Started.md +++ b/WindowsForms/skins/Getting-Started.md @@ -15,7 +15,7 @@ This section briefly describes how to create a new Windows Forms project in Visu SkinManager is present in the `Syncfusion.Shared.Base` assembly. -N> The corresponding Syncfusion WinForms assemblies (e.g., `Syncfusion.Shared.Base`, and the theme-specific assemblies listed below) must be referenced in the project. The Syncfusion WinForms Toolbox installer / Visual Studio extension must be installed for the SkinManager component to appear in the toolbox. +N> Ensure that the required Syncfusion WinForms assemblies, such as `Syncfusion.Shared.Base` and any theme-specific assemblies, are referenced in the project. The Syncfusion WinForms Toolbox installer or Visual Studio extension must be installed for the SkinManager component to appear in the toolbox. @@ -80,13 +80,13 @@ SkinManager.LoadAssembly(GetType(Syncfusion.WinForms.Themes.Office2016Theme).Ass ## Through designer -1) Create a new Windows Forms application in Visual Studio. +1 Create a new Windows Forms application in Visual Studio. 2) Open the target form in the designer. -3) The `SkinManager` component can be added to the designer by dragging it from the toolbox to the design view. +3) Drag the `SkinManager` component from the toolbox and drop it onto the designer. -4) Select the `SkinManager` component on the form and use the `Controls` property in the Properties window to choose the control or form to which the theme should be applied. +4) Select the `SkinManager` component and use the `Controls` property in the Properties window to choose the control or form to which the theme should be applied. The following dependent assemblies will be added automatically: diff --git a/WindowsForms/skins/Overview.md b/WindowsForms/skins/Overview.md index 7401c1b39..d88bdf53d 100644 --- a/WindowsForms/skins/Overview.md +++ b/WindowsForms/skins/Overview.md @@ -73,8 +73,4 @@ Overloads: 1) (Control, String) 2) (Control,VisualTheme) -
NA Void NA
- -## Next Steps - -Refer to the [Getting Started](https://help.syncfusion.com/windowsforms/skins/getting-started) page to create a new project and apply themes using the SkinManager component. +
\ No newline at end of file diff --git a/WindowsForms/theme-studio/theme-studio.md b/WindowsForms/theme-studio/theme-studio.md index 805370f69..35b66a031 100644 --- a/WindowsForms/theme-studio/theme-studio.md +++ b/WindowsForms/theme-studio/theme-studio.md @@ -85,127 +85,95 @@ Add the exported assembly (*.dll) as a reference in your Windows Forms project ( **Note:** Close Theme Studio before referencing the exported assembly file to avoid file locking errors. -![Attach exported assembly in Windows Forms project](ThemeStudio_images/Export-dialog-theme-studio.png) +![Export dialog in Theme Studio for Windows Forms](ThemeStudio_images/Export-dialog-theme-studio.png) **Step 2:** -Load the theme assembly in `Program.cs` of your application and then initialize the SfDataGrid control in the main form. Set the `ThemeName` property of the SfDataGrid exactly to the exported assembly name. The exported assembly name and the class name follow the convention `Syncfusion.YourThemeName.Theme` (for example, `Syncfusion.VioletTheme.Theme`). - -**C# — Program.cs** +Load the exported theme assembly and apply the custom theme to the SfDataGrid control. {% tabs %} -{% highlight c# %} + +{% highlight C# %} + +using Syncfusion.Windows.Forms; using System; +using System.Reflection; using System.Windows.Forms; -using Syncfusion.Licensing; -using Syncfusion.WinForms.Themes; namespace ThemeStudioDemo { static class Program { - /// - /// The main entry point for the application. - /// [STAThread] static void Main() { - // Replace with your actual Syncfusion license key. - // See https://help.syncfusion.com/windowsforms/licensing for details. - SyncfusionLicenseProvider.RegisterLicense("YOUR_LICENSE_KEY"); - - // Load the exported theme assembly before any Syncfusion control is created. - SkinManager.LoadAssembly(typeof(Syncfusion.VioletTheme.Theme).Assembly); + SkinManager.LoadAssembly(Assembly.LoadFrom("VioletTheme.dll")); Application.EnableVisualStyles(); - // SetCompatibleTextRenderingDefault must be called before any control is created. Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } -{% endhighlight %} -{% endtabs %} - -**C# — Form1.cs** - -{% tabs %} -{% highlight c# %} -using System.Windows.Forms; -using Syncfusion.WinForms.DataGrid; -namespace ThemeStudioDemo -{ - public partial class Form1 : Form - { - private SfDataGrid sfDataGrid1; - - public Form1() - { - InitializeComponent(); - - // The ThemeName must match the exported assembly name. - sfDataGrid1 = new SfDataGrid(); - sfDataGrid1.ThemeName = "VioletTheme"; - this.Controls.Add(sfDataGrid1); - } - } -} {% endhighlight %} -{% endtabs %} -**VB — Program.vb** +{% highlight VB %} -{% tabs %} -{% highlight vb %} -Imports System +Imports Syncfusion.Windows.Forms +Imports System.Reflection Imports System.Windows.Forms -Imports Syncfusion.Licensing -Imports Syncfusion.WinForms.Themes Module Program - - Private Sub Main() - ' Replace with your actual Syncfusion license key. - ' See https://help.syncfusion.com/windowsforms/licensing for details. - SyncfusionLicenseProvider.RegisterLicense("YOUR_LICENSE_KEY") - - ' Load the exported theme assembly before any Syncfusion control is created. - SkinManager.LoadAssembly(GetType(Syncfusion.VioletTheme.Theme).Assembly) + + Sub Main() + SkinManager.LoadAssembly(Assembly.LoadFrom("VioletTheme.dll")) Application.EnableVisualStyles() - ' SetCompatibleTextRenderingDefault must be called before any control is created. Application.SetCompatibleTextRenderingDefault(False) Application.Run(New Form1()) End Sub End Module + {% endhighlight %} + {% endtabs %} -**VB — Form1.vb** +**Step 3:** + +Set the exported theme name to the `ThemeName` property of the SfDataGrid control. {% tabs %} -{% highlight vb %} -Imports System.Windows.Forms -Imports Syncfusion.WinForms.DataGrid -Public Class Form1 - Private sfDataGrid1 As SfDataGrid +{% highlight C# %} - Public Sub New() - InitializeComponent() +public Form1() +{ + InitializeComponent(); + + sfDataGrid1.ThemeName = "VioletTheme"; +} - ' The ThemeName must match the exported assembly name. - sfDataGrid1 = New SfDataGrid() - sfDataGrid1.ThemeName = "VioletTheme" - Me.Controls.Add(sfDataGrid1) - End Sub -End Class {% endhighlight %} + +{% highlight VB %} + +Public Sub New() + InitializeComponent() + + sfDataGrid1.ThemeName = "VioletTheme" +End Sub + +{% endhighlight %} + {% endtabs %} -**Step 3:** +N> The `sfDataGrid1` control should already be added to the form through the designer or created in code. + +**Step 4:** Compile and run the Windows Forms application. The custom theme is applied to the SfDataGrid control at run-time. -![Theme applied in SfDataGrid](ThemeStudio_images/Theme-applied-SfDataGrid.png) \ No newline at end of file +![Theme applied in SfDataGrid](ThemeStudio_images/Theme-applied-SfDataGrid.png) + +N> Replace `VioletTheme` with the actual name used while exporting the custom theme assembly from Theme Studio. Ensure that the exported theme assembly, such as `VioletTheme.dll`, is added to the project and copied to the application output directory. \ No newline at end of file From 4771a64a35f09c2d6afd0106a88aa1ee024fe605 Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Fri, 17 Jul 2026 12:11:30 +0530 Subject: [PATCH 06/11] Resolve the CI fixes --- .../Installing-a-Patch-Setup_img9.png | Bin 103915 -> 101133 bytes WindowsForms/Licensing/licensing-errors.md | 2 +- ...ion-Essential-Studio-license-validation.md | 4 ++-- ...rial-version-after-purchasing-a-license.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/WindowsForms/Applying-patches/Patches_images/Installing-a-Patch-Setup_img9.png b/WindowsForms/Applying-patches/Patches_images/Installing-a-Patch-Setup_img9.png index 5dcb19e3a808f310b732ae56699ee67279d32ac3..092de580504446b159951c314daaa8028b4ca94b 100644 GIT binary patch literal 101133 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 z zA115>)47(8zwJH6a{Pmo2HWj+zlQ7NdX9PwViAvXkl~X5e3=i3Ckk)i-5TeA49H*4 zdB;j2+%aEjOTW^w~NOL11Oh zWcwYiq%4A@#LvJzV%9=x9O4_^$ezs2@UXK+3-!dpOS)AzR^#pU=~yB=)*D6Ow(xsW zcCQd@xp(iG!CTzz9Tg(-ne3IXz{#==GvC$1?j;JK*oguuHfI-5y9 z=QcgfZD5Pq(CvvujHsE2W#@%AoFZ>{-K&3pzVY{X3Ho-dTzbK|xYTZy%@{)R zv!bV?d?+;d`naOl5O}itew2MauC^H_{jSylpJgT2eYRV~c|*G}(aAaHT&j zE2JojFV6jkKz!|pfDh=}N|P7xx*HqtA@?##x_Le|qF<=XqL``))0I}pGv{eg1K zd`cskzJ=5irZZT-K#M8$=t=EgYhriZkF+!8px%8$|M7aCr;wA)zjFXs*U@(#f46I-CYRk7>z)BBPJEu~vJro?Nm%)vk%lX$RP`tl0E zyi$cTrz|DUX5=$a>}hhU=?m9X5XRrTr@?kq0juEV4U!<|GeZW{FdB{Ju1DI=CU<|l z-cHCyToZDplzn{cZh>Plz6WQ7u@nNc|D6bboUWIk_`Et7h<2m}fs@9tL|tsiJp4Xd zQ!saa!`||6h05{*i1rBjoNU-(0K^vd_S0&6kKs=d?AtHQbz0|cBio_RH#O*DmQldz(o#Lic zJxVe#7_u9uPJbjEi%sb^R{M>1I_AG+I0VchzN-E37RZI|@_H&V*lu>tPLi6|>X}&u z#3deJ#49UHL#}n-AYC=znBJXa-(PHob_)l-+^ahYuJLA*`TzS(G8q5UGx~B_$Wa^q z6pPPxh5Py!_L`5EU;{sFMp|RyZ)GIhVNrxrAxF<_oHu%6;DmdB+;hb{U5r9y2gUJl0OOE8OrwRervM+f+v94+yyKmIZYx1aswSe9b_mccg*U}0vOjTCXN zfom!v2rFo9j)s8YzP)eMoADBBP4^dF8MYbNtaV!8jMbXMo3CA`ivMsClT~dq1%-o} z(I)Ye1`yb2xS}0T#J+1azzP<{iIW|mjeFXu1pUL*u8zy9S zDobkpWJ(?CLwjSPdKlPnw^{qx)ZuVj6wDQWlKEU0jfr#a9MJJ|0`AXMnj#h(metTD z8l8j>G$=wG{&JAP+9T8AAl~;4WHiyIBBOz;0>!}6Ni?-bS?Dq@8;58B@(r8BBO?%x ztKz}1_NsG050HFnc*{R#wDgR6oPscWEZoo9il@+J*jku~_7BSN$t~Z%Rj$QiMUC_N zRy5*UZ{o_7abA|j0Se@&CXz(gd3+ggYm7Kb^|+W$NtMiHR7>RB-dia`oSdgws?X(e zdkd_8@HSS) z(rHtxqRXn__CvJd-8GB0-_(vvo|M@~(ww(*vb}QnW1PUe9-&wvNp*&854pGcdT1{g z_U6BDz&Rz*^wsHicUPuxkg@lPCvCZX+@;p<`D5Wor)|8xjD?~ZRmjL|_horafTbW`g+7|pe-jCV48 zVsn*Z1T-M|vFJ-BIaQ`B!_!1#XB>>gjssHqARF&2Jc{*ey(8J8shiymwN}`NBAYfc z9xrS^hK|cP1u(rg6CO7aABz?4^*h5Dqpp8@%j-%l$0@oX0)d>K)NqbU+1;cnk$u-K z)nUO^t(jC0;pl0pbqt$eY*>O-vLja!R94{G=5o8vdlvBapOfUt=VL<~!hqa{qyQLL z_>Hufu&Tj;DfjS&+tXZ`#^{Flp5H-VfNg(lypXju+9^sKpo>~6u-MfvlF9D3CD61H zKBh!uXT-dvTQpX%m(GO2u4WM$%hVAo8n89#T6lWlwV1X$gmY*B*K zFSpcvia}IKf|P0mcb_c7+Y7m~7{+cfQP$=;9jfnY8=Y1+Q=g)pkGU<9;a{WZ-Y9zC zNQ0j3UbwFEI<7I>QANJpe1$^&=X)0-yHp6^c~1@I^>{J*-ZE=`FjpiyFf@er{kyQa zIW-&{TqeMeC}OY=q%;D1zHHeB<967C0%dMhXw;w)63T%}0Hma(g`gJJ>%B#y^2K@! zioeg>V_xFk{pmbtF)A9G2xy(z*;(B#Ps}d;=`eIE$H=dlJW)-0tf?G;f`|x2US6J< zm>4QP{&_Q$dlhnJ9v1uM%{%kmSI%iVAGWN3;&;GAOH ztwVsZ+q-2Fzj*t4~YJ;R)7O$Gm-6WUg{!o&1O@+00!=9DUd?w@RH51Y)t>1K&+Js8 zr~7;7&UTOiC+Ioi)R}ih)%S_z)g+5e#gT6_94pc^N@`6s72s`S}iO zLl{_t5Q4ytIl$6Y7xd12amc)2$1&<}a~AkRuF{N^ z*U}>~Z^Z$<%|F4Xw#jmi-sVA+4~alqP)zrq5&! z+r_k-EoMusamfcFV=ZPdN+eyW=9TF}m-$^FFj`0A$9SoQxlAO*)qqqVl{%zQp71#^ z$}d1j=Jl{d%J3KbQN_;;Y*S{&9eO9M%rPEi(gD9US*ET5zN^lJjs{te9fyZ)!#d4U z^(wsBi7+3bj-dnJ+b&>*l~lv#&bTe+jDC8gL_!KS3LW=-=3Rvu&)3E|l2JkfmO+mV zr5@|J_sQpJm98oS17I16HA^gL|K|Nq1<&DpK}?Z*kZh3noo}NgKW2Gn7)qG`?GKk{80YeQ2rs z5?9ENuhfE0_6njR2eFoF&AyP^2ayR5y_K77)7Z^7U0SUknak`IkX`i0s+#nGSFrd) z2b#b_Ds*ggNux2O$4}ODxTkF6N9^iNcZt7Wc0AT@*+aCq)y=-5?;-QC??2X}V{cXtTx47&6C-+Mpo*4EZmf9tMSs{5&a?7ZiM zjlMW<z4fwH#kv zg9%JGKA2e58V^}DTCevm5V-?VG<@6F_VxnTcE7$;J&Ws@-k=P4=?K!m$TF-sYOL{O z9-o~>b`_(SZ)`PFO~&Agvc|j%SpML3FmYbr(un6!voj^L?Bg$d5&u$k4<*y_NO@ts?Y%PfL#Cg@9|f-0y4SXnjm4*rnIrV zeZ-%2SV|sW!5pv5v{t;@VW8b`B4#Dt^E#Yt8L+;5vSSeO3%sGJU^VZTxqL{04L`I zz*apmaWQvPKYc`9Dc-MQ+gmTKI_~KQKd7Z)*kznYb>E3q$oLk4i4FP6ujgHEOl&RI+&9Kxm(1{BYIC`LXKkhG&87fSAt*-M_tA?o%>4 zG@^j=y8bUuoquRZuTFONv2yi6`~HBT^8*3k}o)86(SlV%Y57BZ5gx=QJxHL z&!7251e3bkdKwKPQr_?#(Hp#MQK)bN+-*!Y4@$}y$1Nl;}IAmf(st3z z{sTetN%Eq=xWxtfyy;9s2VxH-Zca1jdM+N%SNnzAB|r7ct4TS-PrOLR3{Wqh?CR#$ z`m)HAo$|X{t@Z~omrtD({|i}P`y!L;WqAF+l|W+cwr_LxFc{H?`+=bs%mtxn1%+`r zaf~Mp{a(+Q=G6kd1KGH9ZQR;zPKD-&sP!aQpUde_OduN%5$1)4XOinjGlkr|n)7>S zH}EM=Tax&DS?E^}wdvEvKjZT_^gM?X?c6+gY;CFg2ZoHD#%|`)J)SijWu%FEXEU>l zlp|qJFD}`+hp@(&D*Su(rO2qsvEtcQr5}Fyt3Qk>2E46goUdX`xti4u{;WM4!#R4A zl5KT7lX$4&HCeU(3R-`zaXFUc1ls=$uz?j0!_1Y-{qw(m&+bQ1GyE^+NuZL4gK^iV zDwYYbVIhUBL^#!PrIv5toA`y}q$Pjcx75Mlr(n4v$7w;-weBEl%%VGN0x)dSyJ8UN zK!_|+>Hh*HUGTpAuoypEyJVSAG9RwOR>zT!?aeI-rz!&^1ptNrDbxEIpWAg?h3)Q4 zD;6YM3eV0gFGTYOg+E7O5XOfstHhYCbIBbFpzQc0gn%;ID|6i{(=hMGyk0$nJIYaW ztEW?|64^eGtb+^N@GaQOcVorch}<_k63Q3D28I8we(g|N@8 z<9-DFe{Vv$-k1$Xb7qh29B`np!Z+30+FFwa4J1sen6@K^J8Og|48{G87JK7l>zeP- zxNh_6ZV||049@u9u?{rCPGv|!|8J;7w&y(_G_)LBUoPZf@~xUZZuWrKor9sz`rj>} z@n-w${p$a`T#Bhm6`J{SRZ1o%^zS!aP+FL!GbdyOcq0&A_`n}GH!cZk1qB5dF)=Zi z@6;n#R@L?OtQPD9BKhd?BLVYf!qv_^OIg!0-wjeCyie}jDpY7F;y>q4hfEle(M?<# z#YS8iA;-tX`6+}!!%kZ4FVK1YdwkZdDB0Ms>L$8qga7w6)YV03e+V{QsW)wA?a--) zDNIlh7Z(S-#l^?ZM-p%-L9PF(Tnp{9@|UEF(RKAiI!zUFa&klPmz=n`I3;MnJ6EOM zHV4fZ=I2Tk=TDbG%GEj@bF~ITN+WUPi4#U+go6_k(!wGlWfanBC5|TxrPKMM<+i(n zrGZ~?%5rkPJMNESVSW7?1Mn(LK>GAaPPIx)UO+&=Y`Ztm49df2c6&5!w%+PkCLT}m zi7-Ohj8`V06!S626a3bSF@Q(L8WmvSb+ znaTN(e*$VDTU)w`adCNZc7_gv*>?0d7_+1QlZjQwtDHkWSiobpSk4z{AW#1r?!Wss zu-}gUyZt2w%HjNpRLkf8q-evx`JcSJ;I0q)hGsEjWu4d7!{yo^VK!du2x=SGJo(e^ zuD=D<6AteYEi&!Xd-xStyP*Q3Ra-v&oVf58tvy^iet`yw*Q7euiujR5bS%c5!uxg7 zF7C$lyI=IY|14FgU{*c?z}4aJk+eb*<6otO%8Ni(VO7_)zYs!BR4__ZW=B> zs0%4E^d(5|t&nSNaX34g;Imc{W^)FqWHy>F#2##lgnm>7+cV6+Ou=7bkdpg3jM2^b zwEG{}AMT*l-ykT^GaZ6RD{L-ClFHrjZdQs3`9YcDmf<-gyir4cL)*X|1WfPU0xOvc z0`UMM0@2g;wzUrTI+=~hWn{9_b))e|9YSgM|H6x%;i6>H9E>aeaZy1bg%l*T4 z*u8=~jD|cxt`L|m2qqcHBb4isPj`oDw#yxcI1yaS4-+`5#ug&;I6zr{yk7e zS2l8g2=>@Rp%8ZLoNKIafw@3ilus)&8HfMTS3I(5wzVb*{W)`g^!j;rcrgD-Ey@rW z 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 cyPXfPU=mKy1Lh{ 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 z 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 License registration is not required if you reference Syncfusion assemblies from a Licensed installer. These licensing changes apply to all evaluators who reference the Syncfusion assemblies from the evaluation installer and those who use Syncfusion NuGet packages from [nuget.org](https://www.nuget.org/). \ No newline at end of file From 51048b134f27417ce5f23151438ec56553164425 Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Fri, 17 Jul 2026 15:07:43 +0530 Subject: [PATCH 07/11] Changes in the fix --- .../AI-Coding-Assistant/mcp-server.md | 13 +- .../AI-Coding-Assistant/prompt-library.md | 244 +++++++++--------- .../Applying-patches/Applying-patches.md | 4 +- .../Installation/Installation-errors.md | 4 +- .../Installation/install-nuget-packages.md | 43 +-- .../web-installer/how-to-install.md | 33 +-- .../licensing-faq/CI-license-validation.md | 4 - .../ai-tools/ai-powered-development.md | 2 - WindowsForms/skills/component-skills.md | 6 +- WindowsForms/skills/ui-builder-skill.md | 4 +- 10 files changed, 144 insertions(+), 213 deletions(-) diff --git a/WindowsForms/AI-Coding-Assistant/mcp-server.md b/WindowsForms/AI-Coding-Assistant/mcp-server.md index 49dbf6ccd..48f43941a 100644 --- a/WindowsForms/AI-Coding-Assistant/mcp-server.md +++ b/WindowsForms/AI-Coding-Assistant/mcp-server.md @@ -51,10 +51,10 @@ Before you can invoke the `SyncfusionWinFormsAssistant` MCP server, you need to - **npm package name**: `@syncfusion/winforms-assistant` - **Type**: stdio (standard input/output transport) - **Command**: npx -- **Arguments**: `["-y", "@syncfusion/winforms-assistant@latest"]` +- **Arguments**: -y - **Server name**: SyncfusionWinFormsAssistant -You need to add your [Syncfusion API key](https://syncfusion.com/account/api-key) as an env parameter in the configuration file. The `Syncfusion_API_Key` variable authenticates requests from the MCP server to Syncfusion's documentation service: +You need to add your [Syncfusion API key](https://syncfusion.com/account/api-key) as an env parameter in the configuration file: ```json "env": { @@ -103,7 +103,6 @@ Below are setup instructions for popular MCP clients: ### Visual Studio (GitHub Copilot MCP) -* MCP server support requires Visual Studio 2022 or later. * To configure an MCP server for a specific workspace, you can create a `.vs/mcp.json` file in your workspace folder. ```json @@ -124,13 +123,13 @@ Below are setup instructions for popular MCP clients: } ``` -* After updating the mcp.json configuration, open the GitHub Copilot Chat window. Click the Ask arrow, then select **Agent** mode (Ask/Edit modes do not expose MCP tools). +* After updating the mcp.json configuration, open the GitHub Copilot Chat window. Click the Ask arrow, then select **Agent**. * Select the [SyncfusionWinFormsAssistant](https://www.npmjs.com/package/@syncfusion/winforms-assistant) from the tools section. * For more details, refer to the official [Visual Studio documentation](https://learn.microsoft.com/en-us/visualstudio/ide/mcp-servers?view=vs-2022). ### Cursor -To configure an MCP server for a specific workspace, you can create a .cursor/mcp.json file in your workspace folder. After saving the file, restart Cursor and confirm the server appears under **Settings → MCP**. +To configure an MCP server for a specific workspace, you can create a .cursor/mcp.json file in your workspace folder. ```json { @@ -174,7 +173,7 @@ For more details, refer to the [Cursor documentation](https://cursor.com/docs/co } ``` -* Click OK and Apply. Verify the server is listed under **Settings → Tools → AI Assistant → Model Context Protocol (MCP)**. +* Click OK and Apply. For further assistance, see the [JetBrains documentation](https://www.jetbrains.com/help/ai-assistant/mcp.html#connect-to-an-mcp-server). @@ -231,7 +230,7 @@ Product support is available through the following mediums. * [Support ticket](https://support.syncfusion.com/support/tickets/create) - Guaranteed Response in 24 hours \| Unlimited tickets \| Holiday support * [Community forum](https://www.syncfusion.com/forums/windowsforms) * [Request feature or report bug](https://www.syncfusion.com/feedback/winforms) - +* Live Chat ## See also * [Syncfusion Windows Forms Documentation](https://help.syncfusion.com/windowsforms/overview) diff --git a/WindowsForms/AI-Coding-Assistant/prompt-library.md b/WindowsForms/AI-Coding-Assistant/prompt-library.md index aef834d29..8bb95173c 100644 --- a/WindowsForms/AI-Coding-Assistant/prompt-library.md +++ b/WindowsForms/AI-Coding-Assistant/prompt-library.md @@ -13,7 +13,7 @@ Speed up your WinForms projects using these ready-made prompts for popular Syncf ## How to Use -Before starting, make sure your MCP Server is set up and running. Confirm `SyncfusionWinFormsAssistant` is listed as an active tool in your MCP client. +Before starting, make sure your MCP Server is set up and running. * Choose a prompt that fits your need. * Copy the full prompt with the #SyncfusionWinFormsAssistant handle. @@ -66,31 +66,31 @@ The Syncfusion WinForms DataGrid provides fast, flexible tabular views for large The Syncfusion WinForms Chart suite offers versatile visualizations across many series types for clear, insightful data representation. -{% promptcards %} -{% promptcard %} +{% promptcards %} +{% promptcard Data Binding %} #SyncfusionWinFormsAssistant How to bind data sources to a Syncfusion WinForms Chart for dynamic visualization? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard MVVM Support %} #SyncfusionWinFormsAssistant How can I integrate Syncfusion WinForms Charts with MVVM-style patterns for clean architecture? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Chart Types %} #SyncfusionWinFormsAssistant What chart types are available in Syncfusion WinForms Chart and how to configure them? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Zooming and Panning %} #SyncfusionWinFormsAssistant How to enable zooming and panning in WinForms Charts for large datasets? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Trendlines %} #SyncfusionWinFormsAssistant Add trendlines to highlight patterns and predictions in WinForms Charts. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Export to Image or PDF %} #SyncfusionWinFormsAssistant How to export a Syncfusion Chart to PDF or an image format? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Print Support %} #SyncfusionWinFormsAssistant Enable print functionality for a Syncfusion WinForms Chart component. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Data Labels and Tooltips %} #SyncfusionWinFormsAssistant Enable tooltips and data labels in a Syncfusion WinForms Chart. -{% endpromptcard %} +{% endpromptcard %} {% promptcard Tooltips and Trackball %} #SyncfusionWinFormsAssistant Show interactive tooltips and a trackball with formatted labels and multiple series value display. {% endpromptcard %} @@ -112,187 +112,187 @@ The Syncfusion WinForms Chart suite offers versatile visualizations across many {% promptcard Gridlines and Chart Area Styling %} #SyncfusionWinFormsAssistant Customize major/minor gridlines, tick lines, chart area background, and border. {% endpromptcard %} -{% promptcard %} +{% promptcard Drill-Down Support %} #SyncfusionWinFormsAssistant How to implement drill-down functionality in WinForms Charts for detailed exploration? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Multiple Series Types %} #SyncfusionWinFormsAssistant How to combine bar and line chart types in a single Syncfusion Chart? {% endpromptcard %} -{% promptcard %} +{% promptcard Custom Markers and Labels %} #SyncfusionWinFormsAssistant Show me an example of customizing chart markers and data label styles. -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ### Diagram The Syncfusion WinForms Diagram library is powerful, extensible, and feature-rich for creating and editing interactive diagrams. -{% promptcards %} -{% promptcard %} +{% promptcards %} +{% promptcard Data Source %} #SyncfusionWinFormsAssistant How to populate the Diagram from a database or XML data? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Nodes %} #SyncfusionWinFormsAssistant Create a custom symbol in the Syncfusion Diagram component. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard ToolTip Support for Nodes %} #SyncfusionWinFormsAssistant Show how to display tooltips for symbols in the Syncfusion Diagram component? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Connectors Customization %} #SyncfusionWinFormsAssistant How to customize connector styles? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Decorator Customization %} #SyncfusionWinFormsAssistant How to customize decorator shapes and styles? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Annotation %} #SyncfusionWinFormsAssistant How to disable label editing? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Ports %} #SyncfusionWinFormsAssistant How to add ports to a custom symbol? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Export to Word Document %} #SyncfusionWinFormsAssistant How to export a diagram to a Word document? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Print support %} #SyncfusionWinFormsAssistant How to print a diagram on a single page? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Serialization %} #SyncfusionWinFormsAssistant How to serialize a node’s custom properties? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Selection Handles Customization %} #SyncfusionWinFormsAssistant Show me an example of customizing the appearance of selection handles? -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ### Ribbon The Syncfusion WinForms Ribbon is an Office-inspired command bar with tabs and groups, Backstage, Quick Access Toolbar, KeyTips, themes, and High DPI support. -{% promptcards %} -{% promptcard %} +{% promptcards %} +{% promptcard Add Ribbon Items %} #SyncfusionWinFormsAssistant Add RibbonTab, ToolStripEx (group), ToolStripButton, ToolStripDropDownButton, ToolStripSplitButton, ToolStripComboBox, and ToolStripGallery items to the Ribbon? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Application Menu (Backstage) %} #SyncfusionWinFormsAssistant Configure the Backstage (application menu) with tabs, buttons, and recent items in the Ribbon. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Quick Access Toolbar %} #SyncfusionWinFormsAssistant Add, remove, and customize items in the Quick Access Toolbar (QAT). -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard ScreenTip / SuperToolTip %} #SyncfusionWinFormsAssistant Configure ScreenTips or SuperToolTips on Ribbon items. -{% endpromptcard %} +{% endpromptcard %} {% promptcard KeyTips %} #SyncfusionWinFormsAssistant How to enable and customize KeyTips (keyboard access keys) for Ribbon items? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Serialization %} #SyncfusionWinFormsAssistant How to save and restore the Ribbon layout, QAT, and Backstage state between sessions? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Contextual Tabs %} #SyncfusionWinFormsAssistant How to add contextual (category) Ribbon tabs and show/hide them at runtime? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Ribbon Gallery %} #SyncfusionWinFormsAssistant How to create a Ribbon gallery with item preview, grouping, and selection handling? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Themes and High DPI %} #SyncfusionWinFormsAssistant How to apply Office themes and ensure proper High DPI scaling in the Ribbon? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Simplified / Collapsed Layout %} #SyncfusionWinFormsAssistant How to enable a simplified or collapsed layout with automatic resizing rules? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Ribbon Merging (MDI) %} #SyncfusionWinFormsAssistant How to merge parent and MDI child Ribbon tabs/groups dynamically? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Custom Caption and Form Integration %} #SyncfusionWinFormsAssistant How to integrate the Ribbon with the Form title bar, custom caption buttons, and window icon behavior? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Localization and RTL %} #SyncfusionWinFormsAssistant How to localize Ribbon text /resources and enable right-to-left (RTL) layout? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Runtime Item Management %} #SyncfusionWinFormsAssistant How to add, remove, or reorder Ribbon tabs, groups, and items programmatically at runtime? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Keyboard and Shortcuts %} #SyncfusionWinFormsAssistant How to assign keyboard shortcuts and handle command routing for Ribbon items? -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ### Docking Manager The Syncfusion WinForms Docking Manager provides Visual Studio–like dockable windows for your applications. -{% promptcards %} -{% promptcard %} +{% promptcards %} +{% promptcard Add Dock Panels Programmatically %} #SyncfusionWinFormsAssistant How to create and add dockable panels (UserControl/Control) programmatically to the Docking Manager? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Dock Support Control %} #SyncfusionWinFormsAssistant How to enable or disable docking for specific controls or globally? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Drag Support %} #SyncfusionWinFormsAssistant How to enable or disable drag/resize behavior for docked windows? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Float and Auto-Hide Programmatically %} #SyncfusionWinFormsAssistant How to float, auto-hide, or restore a docked window via code? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Tabbed Documents %} #SyncfusionWinFormsAssistant How to create tabbed document windows and manage document groups? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Prevent Close or Customize Caption %} #SyncfusionWinFormsAssistant How to prevent closing certain dock windows and customize caption text, icons, and buttons? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Context Menu Customization %} #SyncfusionWinFormsAssistant How to disable or customize the dock window/tab context menu? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Events for State Changes %} #SyncfusionWinFormsAssistant Which events track dock state changes (docked, floating, auto-hide, closed) and how to handle them? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Serialization / Layout Persistence %} #SyncfusionWinFormsAssistant How to save and restore the Docking Manager layout to a file/stream and handle versioned changes? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Theming and High DPI %} #SyncfusionWinFormsAssistant How to apply themes and ensure High DPI scaling for Docking Manager windows and tabs? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Runtime Add/Remove Panels %} #SyncfusionWinFormsAssistant How to dynamically add and remove dock panels at runtime and update the layout? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Restrict Docking Targets %} #SyncfusionWinFormsAssistant How to restrict where a panel can dock (left/right/top/bottom/tabbed) or disallow floating? -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ### Calendar The Syncfusion WinForms Calendar supports flexible date selection, localization, and custom rendering. -{% promptcards %} -{% promptcard %} +{% promptcards %} +{% promptcard Date Range Selection %} #SyncfusionWinFormsAssistant How to enable date range selection in the Syncfusion WinForms Calendar? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Globalization Support %} #SyncfusionWinFormsAssistant Configure the Calendar to support multiple cultures and languages. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Multi-Date Selection %} #SyncfusionWinFormsAssistant Show me how to allow users to select multiple dates in the Calendar. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Skip Months Feature %} #SyncfusionWinFormsAssistant Enable skipping months in Calendar navigation for faster browsing. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Show Other-Month Days %} #SyncfusionWinFormsAssistant How to show days from adjacent months in the current Calendar view? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Custom Day Cell Format %} #SyncfusionWinFormsAssistant Customize the day cell format to show short weekday names. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Highlight Weekends %} #SyncfusionWinFormsAssistant Highlight weekends in the Calendar with a different background color. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Multi-Selection and Range %} #SyncfusionWinFormsAssistant Enable both multi-date selection and range selection in the Calendar. -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Troubleshooting Date Range %} #SyncfusionWinFormsAssistant Why isn’t my Calendar selecting the correct date range? -{% endpromptcard %} -{% promptcard %} +{% endpromptcard %} +{% promptcard Advanced Calendar Setup %} #SyncfusionWinFormsAssistant Create a Calendar with date range, multi-selection, globalization, and weekend highlights. -{% endpromptcard %} +{% endpromptcard %} {% endpromptcards %} ## See also diff --git a/WindowsForms/Applying-patches/Applying-patches.md b/WindowsForms/Applying-patches/Applying-patches.md index 946fdc817..505489d66 100644 --- a/WindowsForms/Applying-patches/Applying-patches.md +++ b/WindowsForms/Applying-patches/Applying-patches.md @@ -51,6 +51,4 @@ In the patch assembly, the **File Version** and **Product Version** will be diff **Product Version of the assembly shipped in patch:** -![Product Version of a patched assembly](Patches_images/Installing-a-Patch-Setup_img9.png) - - +![Product Version of a patched assembly](Patches_images/Installing-a-Patch-Setup_img9.png) \ No newline at end of file diff --git a/WindowsForms/Installation/Installation-errors.md b/WindowsForms/Installation/Installation-errors.md index 6612d6ca6..27cfebef2 100644 --- a/WindowsForms/Installation/Installation-errors.md +++ b/WindowsForms/Installation/Installation-errors.md @@ -32,7 +32,7 @@ You are attempting to use a Trial unlock key to unlock the licensed installer. ### Suggested solution -Only a licensed unlock key can unlock a licensed installer. So, to unlock the Licensed installer, use the Licensed unlock key. To generate the licensed unlock key, refer to [this](https://www.syncfusion.com/kb/2326) article. You can retrieve the licensed unlock key from your registered account's [License & Downloads](https://www.syncfusion.com/account/downloads) page. +Only a licensed unlock key can unlock a licensed installer. So, to unlock the Licensed installer, use the Licensed unlock key. To generate the licensed unlock key, refer to [this](https://www.syncfusion.com/kb/2326) article. ## License has expired @@ -86,7 +86,7 @@ The following are possible causes of this error: You can choose from the options listed below. 1. You can get a new license [here](https://www.syncfusion.com/sales/products). -2. Contact your account administrator. To find the administrator of your Syncfusion account, sign in to the [Syncfusion account](https://www.syncfusion.com/account) and check the **Account Settings** page, where the account owner is listed. +2. Contact your account administrator. 3. Send an email to to request a license. 4. You can reach out to our sales team by emailing . diff --git a/WindowsForms/Installation/install-nuget-packages.md b/WindowsForms/Installation/install-nuget-packages.md index f9202367b..ab61d82ca 100644 --- a/WindowsForms/Installation/install-nuget-packages.md +++ b/WindowsForms/Installation/install-nuget-packages.md @@ -14,30 +14,7 @@ documentation: ug **NuGet** is a Package management system for Visual Studio. It makes it easy to add, update and remove external libraries in our application. Syncfusion publishes all WinForms NuGet packages in [nuget.org](https://www.nuget.org/packages?q=Tags%3A%22Winforms%22+syncfusion). The Syncfusion WinForms NuGet packages can be used without installing the Syncfusion Essential Studio setup. You can simply use the Syncfusion WinForms NuGet packages in a WinForms application to develop with the Syncfusion WinForms components. -> From v16.2.0.46 (2018 Volume 2 Service Pack 1) onwards, all the Syncfusion WinForms components are available as NuGet packages at nuget.org. The current major package naming uses the `Syncfusion.WinForms.` convention; older packages may still be published under the legacy `Syncfusion..Windows` naming. - -## Supported Frameworks and Visual Studio - -The Syncfusion WinForms NuGet packages support the following project target frameworks: - -| Target Framework | Supported | -|------------------|-----------| -| .NET Framework 4.5 - 4.8 | Yes | -| .NET Core 3.0 - 3.1 | Yes | -| .NET 5.0 - 8.0 | Yes | -| .NET Standard 2.0+ | Yes | - -The Package Manager UI and Package Manager Console require **Visual Studio 2019 or later** with the .NET desktop development workload installed. - -## Available NuGet Packages - -The complete list of Syncfusion WinForms NuGet packages is available on [nuget.org](https://www.nuget.org/packages?q=Tags%3A%22winforms%22+syncfusion). Commonly used packages include: - -- `Syncfusion.WinForms.Grid` -- `Syncfusion.WinForms.Charts` -- `Syncfusion.WinForms.Diagram` -- `Syncfusion.WinForms.Ribbon` -- `Syncfusion.WinForms.Scheduler` +> From v16.2.0.46 (2018 Volume 2 Service Pack 1) onwards, all the Syncfusion WinForms components are available as NuGet packages at nuget.org. ## Installation using Package Manager UI @@ -77,7 +54,7 @@ Follow the below instructions to use the dotnet CLI command to install the Syncf 2. To install a NuGet package, run the following command. - `dotnet add package ` + ```dotnet add package ``` **For Example:** dotnet add package Syncfusion.Grid.Windows @@ -98,23 +75,23 @@ Follow the below instructions to use the dotnet CLI command to install the Syncf The **Package Manager Console** saves NuGet packages installation time since you don't have to search for the Syncfusion WinForms NuGet package which you want to install, and you can just type the installation command to install the appropriate Syncfusion WinForms NuGet package. Follow the instructions below to use the Package Manager Console to reference the Syncfusion WinForms component as NuGet packages in your WinForms application. -1. To show the Package Manager Console, open your WinForms application in Visual Studio and navigate to **Tools -> NuGet Package Manager -> Package Manager Console**. In the **Default project** dropdown, select the project in which you want to install the package. +1. To show the Package Manager Console, open your WinForms application in Visual Studio and navigate to **Tools -> NuGet Package Manager -> Package Manager Console**. ![Package Manager Console ](Platform_images/console.png) 2. The **Package Manager Console** will be shown at the bottom of the screen. You can install the Syncfusion WinForms NuGet packages by entering the following NuGet installation commands. - **Install specified Syncfusion WinForms NuGet package.** + ***Install specified Syncfusion WinForms NuGet package.*** The below command will install the Syncfusion WinForms NuGet package in the default WinForms application. - `Install-Package ` + ```Install-Package ``` **For example:** Install-Package Syncfusion.Grid.Windows > You can find the list of Syncfusion WinForms NuGet packages which are published in nuget.org from [here](https://www.nuget.org/packages?q=Tags%3A%22winforms%22+syncfusion) - **Install specified Syncfusion WinForms NuGet package in specified WinForms application** + ***Install specified Syncfusion WinForms NuGet package in specified WinForms application*** The below command will install the Syncfusion WinForms NuGet package in the given WinForms application. @@ -130,10 +107,4 @@ The **Package Manager Console** saves NuGet packages installation time since you 4. The NuGet package manager console will install the Syncfusion WinForms NuGet package as well as the dependencies it has. When the installation is complete, the console will show that your Syncfusion WinForms package has been successfully added to the application. -5. After installation, register your Syncfusion license key in the WinForms application as described in the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). - -## Post-installation - -After installing the Syncfusion WinForms NuGet packages by any of the methods above, your application has all the required Syncfusion assemblies. You are now ready to start building high-performance, responsive apps with [Syncfusion WinForms components](https://www.syncfusion.com/winforms-ui-controls). For more information, refer to the [Syncfusion WinForms help document](https://help.syncfusion.com/windowsforms/overview). - -You can add Syncfusion WinForms controls to your application by referring to the [Add Syncfusion controls](https://help.syncfusion.com/windowsforms/add-syncfusion-controls) topic. \ No newline at end of file +5. After installation, register your Syncfusion license key in the WinForms application as described in the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). \ No newline at end of file diff --git a/WindowsForms/Installation/web-installer/how-to-install.md b/WindowsForms/Installation/web-installer/how-to-install.md index f737f5226..f0414a935 100644 --- a/WindowsForms/Installation/web-installer/how-to-install.md +++ b/WindowsForms/Installation/web-installer/how-to-install.md @@ -107,37 +107,6 @@ The steps below show how to install Essential Studio for Windows Forms Web Insta ![Control Panel](images/Step-by-Step-Installation_img19.png) - - -After installation, you can register your Syncfusion license key in your application as described in the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). - -## Silent Installation - -The Syncfusion Essential Studio for Windows Forms Web Installer supports installation and uninstallation via the command line. The command prompt must be run as Administrator. - -The following arguments are available: - -| Argument | Required | Description | -|----------|----------|-------------| -| `/Install silent` | Yes | Specifies that the installer should run in silent mode. | -| `/UNLOCKKEY:""` | Yes | The product unlock key. | -| `/log ""` | No | Path to the log file. | -| `/InstallPath:` | No | Location to install. | -| `/InstallSamples:{true/false}` | No | Whether to install samples. | -| `/InstallAssemblies:{true/false}` | No | Whether to install assemblies. | -| `/InstallToolbox:{true/false}` | No | Whether to configure the Visual Studio toolbox. | -| `/uninstall silent` | Yes (for uninstall) | Specifies that the installer should uninstall in silent mode. | - -**Example (install):** - -`"path\to\syncfusionessentialwindowsformswebinstaller_x.x.x.x.exe" /Install silent /UNLOCKKEY:"product unlock key" /log "C:\Temp\EssentialStudio_WebInstaller.log"` - -**Example (uninstall):** - -`"path\to\syncfusionessentialwindowsformswebinstaller_x.x.x.x.exe" /uninstall silent` - -N> The installer returns exit code `0` on success and a non-zero exit code on failure. The log file specified by `/log` records the installation progress and any errors. - ## Uninstallation Syncfusion Windows Forms installer can be uninstalled in two ways. @@ -156,7 +125,7 @@ Syncfusion provides the option to uninstall products of the same version directl **Option 2: Uninstall the Windows Forms from Windows Control Panel** -You can uninstall all the installed products by selecting the **Syncfusion Essential Studio {version}** entry (element 1 in the below screenshot) from the Windows control panel, or you can uninstall Windows Forms alone by selecting the **Syncfusion Essential Studio for Windows Forms {version}** entry (element 2 in the below screenshot) from the Windows control panel. The Essential Studio entry removes all Syncfusion products installed in the same version, while the per-product entry only removes the Windows Forms setup. +You can uninstall all the installed products by selecting the **Syncfusion Essential Studio {version}** entry (element 1 in the below screenshot) from the Windows control panel, or you can uninstall Windows Forms alone by selecting the **Syncfusion Essential Studio for Windows Forms {version}** entry (element 2 in the below screenshot) from the Windows control panel. ![Control Panel](images/Step-by-Step-Installation_img22.png) diff --git a/WindowsForms/Licensing/licensing-faq/CI-license-validation.md b/WindowsForms/Licensing/licensing-faq/CI-license-validation.md index c65a53f4f..5df32127b 100644 --- a/WindowsForms/Licensing/licensing-faq/CI-license-validation.md +++ b/WindowsForms/Licensing/licensing-faq/CI-license-validation.md @@ -22,10 +22,6 @@ documentation: ug Syncfusion license key validation in CI services ensures that Syncfusion Essential Studio components are properly licensed during CI processes. Validating the license key at the CI level can prevent licensing errors during deployment. Set up the CI process to fail when the license key validation fails by surfacing a non-zero exit code from the validation script. -This feature is supported from version 16.2.0.41 of Essential Studio and later. From v34.1.29 onwards, the platform identifier changed from `WindowsForms` to `UIComponent`; this is a breaking change for the validator script's `/platform:` argument. - -The PowerShell validator returns exit code `0` on success and a non-zero exit code on failure; the CI pipeline should treat any non-zero exit as a build failure. - The following sections show how to validate the Syncfusion license key in CI services. * Download and extract the `LicenseKeyValidator.zip` utility from the following link: [LicenseKeyValidator](https://s3.amazonaws.com/files2.syncfusion.com/Installs/LicenseKeyValidation/LicenseKeyValidator.zip). Extract the contents to a known location, for example `D:\LicenseKeyValidator`. diff --git a/WindowsForms/ai-tools/ai-powered-development.md b/WindowsForms/ai-tools/ai-powered-development.md index bb01580c7..78aa53560 100644 --- a/WindowsForms/ai-tools/ai-powered-development.md +++ b/WindowsForms/ai-tools/ai-powered-development.md @@ -100,7 +100,6 @@ Choose one of these two options: The MCP Server establishes a direct connection between your IDE-integrated AI and Syncfusion WinForms documentation, enabling the AI to retrieve real-time information for unfamiliar controls. Using Retrieval-Augmented Generation (RAG), it injects relevant documentation into the AI's context to generate accurate and up-to-date code suggestions. For setup steps, see the [SyncfusionWinFormsAssistant MCP Server](https://help.syncfusion.com/windowsforms/ai-coding-assistant/mcp-server) page. - **What you get:** - Complete documentation for all 145+ WinForms controls - Live API references (properties, methods, events) @@ -249,7 +248,6 @@ If you encounter unexpected results, use this as a quick diagnostic reference: | Data binding not working | Incorrect binding setup or DataSource not assigned | Set DataSource property correctly; use WinForms binding patterns with GridControl and other bound controls | | NuGet package conflicts | Multiple incompatible Syncfusion versions installed | Use matching Syncfusion versions for all components in your project | - ## Quick Reference | If you want... | Do this... | diff --git a/WindowsForms/skills/component-skills.md b/WindowsForms/skills/component-skills.md index 53348c8b5..8bdb32c27 100644 --- a/WindowsForms/skills/component-skills.md +++ b/WindowsForms/skills/component-skills.md @@ -153,7 +153,7 @@ After installation, manage Syncfusion® Agen ### List Skills -View all installed skills in your current project or global environment. Use this command to discover the exact `` values used by the other commands: +View all installed skills in your current project or global environment: {% tabs %} {% highlight bash tabtitle="NPM" %} @@ -165,7 +165,7 @@ npx skills list ### Remove a Skill -Uninstall a specific skill from your environment. Run `npx skills list` first to confirm the exact name to pass: +Uninstall a specific skill from your environment: {% tabs %} {% highlight bash tabtitle="NPM" %} @@ -213,7 +213,7 @@ Yes. Once installed, supported agents automatically detect and load relevant ski **Skills are not being loaded** -Verify that skills are installed in the correct agent directory (for example, `.agents/skills/`), confirm with `npx skills list`, restart the IDE (or run the **Reload Window** command), and confirm that the agent supports external skill files. Check the agent's log output for the location of any skill-load error messages. +Verify that skills are installed in the correct agent directory (for example, `.agents/skills/`), confirm with `npx skills list`, restart the IDE (or run the **Reload Window** command), and confirm that the agent supports external skill files. ## See also diff --git a/WindowsForms/skills/ui-builder-skill.md b/WindowsForms/skills/ui-builder-skill.md index b18f8f214..6adcf82dc 100644 --- a/WindowsForms/skills/ui-builder-skill.md +++ b/WindowsForms/skills/ui-builder-skill.md @@ -72,7 +72,7 @@ apm --version ### Install the Syncfusion® Windows Forms UI Builder package using APM -Use the APM CLI to install the WinForms UI Builder skill for your preferred environment. The `-t` flag selects the deployment target. Run the command from your project root: +Use the APM CLI to install the WinForms UI Builder skill for your preferred environment: {% tabs %} {% highlight bash tabtitle="Copilot" %} @@ -188,7 +188,7 @@ Follow these guidelines to get the most out of UI Builder and ensure high-qualit Any Skills-compatible agent that reads local skill files (Code Studio, VS Code, Cursor, etc.). **Are skills loaded automatically?** -Yes. Supported agents automatically load relevant skills based on your query. To disable automatic loading, deselect the skill in the agent's skill manager. +Yes. Supported agents automatically load relevant skills based on your query. **Can I customize the generated styles?** Yes — the generated Windows Forms controls include clear integration points for style adjustments. From 266a0d5d19600298566a246ecacc43481d22dcdb Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Wed, 22 Jul 2026 11:21:07 +0530 Subject: [PATCH 08/11] Updated the AI-Coding-Assistant and ai-tools --- WindowsForms/AI-Coding-Assistant/overview.md | 2 -- WindowsForms/AI-Coding-Assistant/prompt-library.md | 2 -- WindowsForms/ai-tools/ai-powered-development.md | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/WindowsForms/AI-Coding-Assistant/overview.md b/WindowsForms/AI-Coding-Assistant/overview.md index 9a952b3c4..31c4dc6a0 100644 --- a/WindowsForms/AI-Coding-Assistant/overview.md +++ b/WindowsForms/AI-Coding-Assistant/overview.md @@ -29,8 +29,6 @@ To use the AI Coding Assistant, you need: * An active [API KEY](https://syncfusion.com/account/api-key) * A [Windows Forms application that includes Syncfusion Windows Forms](https://help.syncfusion.com/windowsforms/overview) -The AI Coding Assistant is supported on Syncfusion WinForms current and previous major releases. See the [SyncfusionWinFormsAssistant MCP Server](https://help.syncfusion.com/windowsforms/ai-coding-assistant/mcp-server) page for setup steps and the [Prompt Library](https://help.syncfusion.com/windowsforms/ai-coding-assistant/prompt-library) for ready-made prompts. - ## Unlimited Access Syncfusion® offers unlimited access to the AI Coding Assistant, with no limitations on: diff --git a/WindowsForms/AI-Coding-Assistant/prompt-library.md b/WindowsForms/AI-Coding-Assistant/prompt-library.md index 8bb95173c..cb1f99ad4 100644 --- a/WindowsForms/AI-Coding-Assistant/prompt-library.md +++ b/WindowsForms/AI-Coding-Assistant/prompt-library.md @@ -21,8 +21,6 @@ Before starting, make sure your MCP Server is set up and running. * Execute via the MCP Server. * Always check and test the code before adding it to your project. -Prompts target the current major Syncfusion WinForms release and are validated against the latest APIs available in that release. - ## Component-Specific Prompts ### DataGrid diff --git a/WindowsForms/ai-tools/ai-powered-development.md b/WindowsForms/ai-tools/ai-powered-development.md index 78aa53560..7591f1e91 100644 --- a/WindowsForms/ai-tools/ai-powered-development.md +++ b/WindowsForms/ai-tools/ai-powered-development.md @@ -98,7 +98,7 @@ Choose one of these two options: **Option 1: Install MCP Server** -The MCP Server establishes a direct connection between your IDE-integrated AI and Syncfusion WinForms documentation, enabling the AI to retrieve real-time information for unfamiliar controls. Using Retrieval-Augmented Generation (RAG), it injects relevant documentation into the AI's context to generate accurate and up-to-date code suggestions. For setup steps, see the [SyncfusionWinFormsAssistant MCP Server](https://help.syncfusion.com/windowsforms/ai-coding-assistant/mcp-server) page. +The MCP Server establishes a direct connection between your IDE-integrated AI and Syncfusion WinForms documentation, enabling the AI to retrieve real-time information for unfamiliar controls. Using Retrieval-Augmented Generation (RAG), it injects relevant documentation into the AI's context to generate accurate and up-to-date code suggestions. **What you get:** - Complete documentation for all 145+ WinForms controls From fceb3b9d664f3f7030673f4044aa3983593075a9 Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Mon, 27 Jul 2026 14:43:53 +0530 Subject: [PATCH 09/11] Ensured the all the updated content --- .../Installation/install-nuget-packages.md | 6 +- .../offline-installer/how-to-download.md | 6 +- .../offline-installer/how-to-install.md | 21 +------ .../web-installer/how-to-download.md | 6 +- .../web-installer/how-to-install.md | 2 +- WindowsForms/Licensing/licensing-errors.md | 14 +---- .../licensing-faq/CI-license-validation.md | 4 +- ...rade-syncfusion-winforms-nuget-packages.md | 22 ++----- .../Item-Template.md | 8 +-- WindowsForms/skills/component-skills.md | 13 +---- WindowsForms/skills/ui-builder-skill.md | 2 +- WindowsForms/skins/Getting-Started.md | 2 - WindowsForms/theme-studio/theme-studio.md | 57 +++---------------- 13 files changed, 24 insertions(+), 139 deletions(-) diff --git a/WindowsForms/Installation/install-nuget-packages.md b/WindowsForms/Installation/install-nuget-packages.md index ab61d82ca..3ab6cce17 100644 --- a/WindowsForms/Installation/install-nuget-packages.md +++ b/WindowsForms/Installation/install-nuget-packages.md @@ -26,8 +26,6 @@ The NuGet **Package Manager UI** allows you to search, install, uninstall, and u As an alternative, after opening the WinForms application in Visual Studio, go to the **Tools** menu and after hovering **NuGet Package Manager**, select **Manage NuGet Packages for Solution...** - > You need Visual Studio 2019 or later with the .NET desktop development workload installed to use the Package Manager UI. - 2. The Manage NuGet Packages window will open. Navigate to the **Browse** tab, then search for the Syncfusion WinForms NuGet packages using a term like **"Syncfusion.WinForms"** (or the legacy **"Syncfusion.Grid.Windows"** package for the specific control shown in the examples below) and select the appropriate Syncfusion WinForms NuGet package for your development. > The [nuget.org](https://api.nuget.org/v3/index.json) package source is selected by default in the Package source drop-down. If your Visual Studio does not have nuget.org configured, follow the instructions in the [Microsoft documents](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio#package-sources) to set up the nuget.org feed URL. @@ -48,9 +46,7 @@ The [dotnet Command Line Interface (CLI)](https://learn.microsoft.com/en-us/nuge Follow the below instructions to use the dotnet CLI command to install the Syncfusion WinForms NuGet packages. -1. Open a command prompt and navigate to the directory where your Syncfusion WinForms project file is located using the `cd` command. For example: - - `cd C:\Projects\MyWinFormsApp` +1. Open a command prompt and navigate to the directory where your Syncfusion WinForms project file is located. 2. To install a NuGet package, run the following command. diff --git a/WindowsForms/Installation/offline-installer/how-to-download.md b/WindowsForms/Installation/offline-installer/how-to-download.md index a3485d1a2..7219d65a4 100644 --- a/WindowsForms/Installation/offline-installer/how-to-download.md +++ b/WindowsForms/Installation/offline-installer/how-to-download.md @@ -79,8 +79,4 @@ You should initiate an evaluation if you have already obtained our components th You can also refer to the [**Offline installer**](https://help.syncfusion.com/windowsforms/installation/offline-installer/how-to-install) links for step-by-step installation guidelines. -For information about retrieving and using your license key after installation, see the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). - -## Verify the Downloaded Installer - -After downloading the offline installer, you can verify its integrity by checking the digital signature of the EXE or ZIP file. Right-click the downloaded file in Windows Explorer, select **Properties**, and then open the **Digital Signatures** tab. The signature should be issued to **Syncfusion, Inc.** If the digital signature is missing or invalid, re-download the installer from the Syncfusion website. +For information about retrieving and using your license key after installation, see the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). \ No newline at end of file diff --git a/WindowsForms/Installation/offline-installer/how-to-install.md b/WindowsForms/Installation/offline-installer/how-to-install.md index 13656600d..5afa9db91 100644 --- a/WindowsForms/Installation/offline-installer/how-to-install.md +++ b/WindowsForms/Installation/offline-installer/how-to-install.md @@ -63,7 +63,7 @@ The steps below show how to install the Essential Studio for Windows Forms insta The following additional settings can be configured for the installation: * Select the **Install Demos** check box to install Syncfusion samples, or leave the check box unchecked if you do not want to install Syncfusion samples. - * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in the Global Assembly Cache (GAC), or clear this check box when you do not want to install the latest assemblies in the GAC. The GAC option applies only to .NET Framework projects; for .NET Core and .NET 5+ projects, the assemblies are referenced from the NuGet packages and GAC registration is not applicable. + * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in the Global Assembly Cache (GAC), or clear this check box when you do not want to install the latest assemblies in the GAC. * Select the **Configure Syncfusion controls in Visual Studio** check box to configure the Syncfusion controls in the Visual Studio toolbox, or clear this check box when you do not want to configure the Syncfusion controls in the Visual Studio toolbox during installation. Note that you must also select the Register Syncfusion assemblies in GAC check box when you select this check box. * Select the **Configure Syncfusion Extensions controls in Visual Studio** checkbox to configure the Syncfusion Extensions in Visual Studio or clear this check box when you do not want to configure the Syncfusion Extensions in Visual Studio. * Check the **Create Desktop Shortcut** checkbox to add a desktop shortcut for Syncfusion Control Panel @@ -121,19 +121,6 @@ To install through the Command Line in Silent mode, follow the steps below. 5. Exit the Wizard. 6. Run Command Prompt in administrator mode and enter the following arguments. - The available arguments are: - - | Argument | Required | Description | - |----------|----------|-------------| - | `/Install silent` | Yes | Specifies that the installer should run in silent mode. | - | `/UNLOCKKEY:""` | Yes | The product unlock key. | - | `/log ""` | No | Path to the log file. | - | `/InstallPath:` | No | Location to install. | - | `/InstallSamples:{true/false}` | No | Whether to install samples. | - | `/InstallAssemblies:{true/false}` | No | Whether to install assemblies. | - | `/UninstallExistAssemblies:{true/false}` | No | Whether to uninstall existing assemblies. | - | `/InstallToolbox:{true/false}` | No | Whether to configure the Visual Studio toolbox. | - **Arguments:** "installer file path\SyncfusionEssentialStudio(product)_(version).exe" /Install silent /UNLOCKKEY:"(product unlock key)" [/log "{Log file path}"] [/InstallPath:{Location to install}] [/InstallSamples:{true/false}] [/InstallAssemblies:{true/false}] [/UninstallExistAssemblies:{true/false}] [/InstallToolbox:{true/false}] @@ -145,8 +132,6 @@ To install through the Command Line in Silent mode, follow the steps below. 7. Essential Studio for Windows Forms is installed. N> x.x.x.x should be replaced with the Essential Studio version and the Product Unlock Key needs to be replaced with the Unlock Key for that version. - - N> The installer returns exit code `0` on success and a non-zero exit code on failure. The log file specified by `/log` records the installation progress and any errors. ### Command Line Uninstallation @@ -163,6 +148,4 @@ Syncfusion Essential Studio for Windows Forms can be uninstalled silently using **Arguments:** "Copied installer file path\syncfusionessentialwindowsforms_(version).exe" /uninstall silent **Example:** "D:\Temp\syncfusionessentialwindowsforms_x.x.x.x.exe" /uninstall silent -7. Essential Studio for Windows Forms is uninstalled. - - +7. Essential Studio for Windows Forms is uninstalled. \ No newline at end of file diff --git a/WindowsForms/Installation/web-installer/how-to-download.md b/WindowsForms/Installation/web-installer/how-to-download.md index ccfb65d6c..43aa3189e 100644 --- a/WindowsForms/Installation/web-installer/how-to-download.md +++ b/WindowsForms/Installation/web-installer/how-to-download.md @@ -79,8 +79,4 @@ You should initiate an evaluation if you have already obtained our components th You can also refer to the [**web installer**](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-install) links for step-by-step installation guidelines. -For information about retrieving and using your license key after installation, see the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). - -## Verify the Downloaded Installer - -After downloading the web installer, you can verify its integrity by checking the digital signature of the downloaded file. Right-click the file in Windows Explorer, select **Properties**, and then open the **Digital Signatures** tab. The signature should be issued to **Syncfusion, Inc.** If the digital signature is missing or invalid, re-download the installer from the Syncfusion website. +For information about retrieving and using your license key after installation, see the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). \ No newline at end of file diff --git a/WindowsForms/Installation/web-installer/how-to-install.md b/WindowsForms/Installation/web-installer/how-to-install.md index f0414a935..d489fca5f 100644 --- a/WindowsForms/Installation/web-installer/how-to-install.md +++ b/WindowsForms/Installation/web-installer/how-to-install.md @@ -77,7 +77,7 @@ The steps below show how to install Essential Studio for Windows Forms Web Insta The following additional settings can be configured on a per-product basis. (For more details on each option, see the [offline installer Additional Settings](https://help.syncfusion.com/windowsforms/installation/offline-installer/how-to-install#installing-with-ui) section.) * Select the **Install Demos** check box to install Syncfusion samples, or leave the check box unchecked if you do not want to install Syncfusion samples. - * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in the Global Assembly Cache (GAC), or clear this check box when you do not want to install the latest assemblies in the GAC. The GAC option applies only to .NET Framework projects; for .NET Core and .NET 5+ projects, the assemblies are referenced from the NuGet packages and GAC registration is not applicable. + * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in the Global Assembly Cache (GAC), or clear this check box when you do not want to install the latest assemblies in the GAC. * Select the **Configure Syncfusion controls in Visual Studio** check box to configure the Syncfusion controls in the Visual Studio toolbox, or clear this check box when you do not want to configure the Syncfusion controls in the Visual Studio toolbox during installation. Note that you must also select the Register Syncfusion assemblies in GAC check box when you select this check box. * Select the **Configure Syncfusion Extensions controls in Visual Studio** checkbox to configure the Syncfusion Extensions in Visual Studio or clear this check box when you do not want to configure the Syncfusion Extensions in Visual Studio. * Check the **Create Desktop Shortcut** checkbox to add a desktop shortcut for Syncfusion Control Panel diff --git a/WindowsForms/Licensing/licensing-errors.md b/WindowsForms/Licensing/licensing-errors.md index c2c8fd8be..3a1c248e6 100644 --- a/WindowsForms/Licensing/licensing-errors.md +++ b/WindowsForms/Licensing/licensing-errors.md @@ -98,8 +98,6 @@ If the application is registered with another version's license key, the followi **Error Message:** "The included Syncfusion license ({Registered Version}) is invalid for version {Required version}. Please refer to this [help topic](https://help.syncfusion.com/windowsforms/licensing/licensing-errors#version-mismatch) for more information." -A version mismatch means the key was generated for an Essential Studio version different from the assemblies referenced in the project. Syncfusion license keys validate the same major release forward; if the key is older than the assemblies, regenerate it for the new version. - ![Version mismatch](licensing-images/version-mismatch.png) **Solution:** @@ -120,16 +118,8 @@ To avoid run-time errors, set **Copy Local** to true. **Copy Local** determines ![Set Copy Local to true](licensing-images/SetCopyLocalTrue.png) -Set **Copy Local** as True for `Syncfusion.Licensing.dll` along with all other Syncfusion assemblies and ensure that the `Syncfusion.Licensing.dll` assembly is also present in the output folder or deployment folder of the application. For .NET Framework projects, you may also need a binding redirect in `app.config` if multiple Syncfusion assemblies reference different versions of `Syncfusion.Licensing.dll`. +Set **Copy Local** as True for `Syncfusion.Licensing.dll` along with all other Syncfusion assemblies and ensure that the `Syncfusion.Licensing.dll` assembly is also present in the output folder or deployment folder of the application. ![Output folder](licensing-images/OutputFolder.png) -Refer to this knowledge base article to set [Copy Local](https://www.syncfusion.com/kb/4808/how-to-resolve-server-error-could-not-load-or-assembly-when-publishing-an-application) as true. - - - - - - - - +Refer to this knowledge base article to set [Copy Local](https://www.syncfusion.com/kb/4808/how-to-resolve-server-error-could-not-load-or-assembly-when-publishing-an-application) as true. \ No newline at end of file diff --git a/WindowsForms/Licensing/licensing-faq/CI-license-validation.md b/WindowsForms/Licensing/licensing-faq/CI-license-validation.md index 5df32127b..1a7541e25 100644 --- a/WindowsForms/Licensing/licensing-faq/CI-license-validation.md +++ b/WindowsForms/Licensing/licensing-faq/CI-license-validation.md @@ -115,7 +115,7 @@ The following example shows the syntax for validating the Syncfusion license key The following example shows the syntax for validating the Syncfusion license key in the Jenkins pipeline on a Windows agent. {% tabs %} -{% highlight groovy tabtitle="Jenkinsfile (Windows agent)" %} +{% highlight json %} pipeline { agent any environment { @@ -124,7 +124,7 @@ pipeline { stages { stage('Syncfusion License Validation') { steps { - bat 'pwsh %LICENSE_VALIDATION%' + sh 'pwsh ${LICENSE_VALIDATION}' } } } diff --git a/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md b/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md index f9179141f..a0ffb0a76 100644 --- a/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md +++ b/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md @@ -39,25 +39,11 @@ The NuGet **Package Manager UI** in Visual Studio allows you to easily install, ## Upgrade NuGet packages through .NET CLI -The .NET CLI does not have a separate update command. To upgrade an already-installed Syncfusion WinForms NuGet package to a newer version, navigate to the project folder and re-run `dotnet add package` with the desired version. The CLI replaces the existing reference in the `.csproj` file and then runs `dotnet restore`. +There is no distinct command for the update procedure in the .NET CLI. Unless you specify the package version, .NET CLI installs the latest version of the Syncfusion WinForms NuGet packages when you use the dotnet add package command. -1. Open a command prompt and navigate to the project folder: +To specify a version, add the -v parameter: - `cd C:\Projects\MyWinFormsApp` - -2. To upgrade to a specific version, run: - - ```dotnet add package Syncfusion.Grid.Windows -v 26.1.0.35``` - - To upgrade to the latest version, omit the `-v` parameter: - - ```dotnet add package Syncfusion.Grid.Windows``` - -3. After the command completes, perform a **Clean** and then **Rebuild** of the solution. - -N> The `dotnet add package` command uses the `-v` flag to specify a version. This is different from the Package Manager Console, which uses the `-Version` parameter. - -N> To roll back to a previous version, run `dotnet add package -v ` again with the desired older version. +```dotnet add package Syncfusion.Grid.Windows -v 19.2.0.59``` ## Upgrade NuGet packages through Package Manager Console @@ -87,7 +73,7 @@ The **Package Manager Console** saves NuGet packages upgrade time since you don' 3. By default, the package will be updated to the latest version. To update to a specific version, use the `-Version` parameter (note: Package Manager Console uses `-Version`, while the .NET CLI uses the shorter `-v`). - ```Update-Package Syncfusion.GridF.Windows -Version 26.1.0.35``` + ```Update-Package Syncfusion.Grid.Windows -Version 19.2.0.59``` ![Package Manager Console Output](images/UpdateConsole.png) diff --git a/WindowsForms/Visual-Studio-Integration/Item-Template.md b/WindowsForms/Visual-Studio-Integration/Item-Template.md index bbbadb164..792ef3448 100644 --- a/WindowsForms/Visual-Studio-Integration/Item-Template.md +++ b/WindowsForms/Visual-Studio-Integration/Item-Template.md @@ -37,17 +37,11 @@ N> Item Templates are available from v13.1.0.21. The Item Template wizard suppor 3. Choose one of the following scenarios to add a Syncfusion® form in your application: - | Scenario | When to use | - |----------|-------------| - | Default Form with Syncfusion® Component | Use the default Microsoft WinForms layout, but add a Syncfusion® control. | - | Syncfusion® Form with Syncfusion® Component | Use a Syncfusion® form (e.g., MetroForm, RibbonForm) and add a Syncfusion® control. | - | Syncfusion® Form without Syncfusion® Component | Add a blank Syncfusion® form without any components. | - **Default Form with Syncfusion® Component:** If you select the **Default** form and then choose any Syncfusion® component and the specific features that are essential for your project, the selected component is added with the default Microsoft WinForms layout. ![Default form with a Syncfusion® component added](Item-Template-images/Default-Form-with-Syncfusion-Component.png) - **Syncfusion® Form with Syncfusion® Component:** If you select a Syncfusion® form and then choose any Syncfusion® component and the specific features that are essential for your project, the selected component is added with the layout of the selected Syncfusion® form. Available Syncfusion® forms include MetroForm, RibbonForm, Office2007Form, Office2010Form, TabbedForm, and XPMainForm. + **Syncfusion® Form with Syncfusion® Component:** If you select a Syncfusion® form and then choose any Syncfusion® component and the specific features that are essential for your project, the selected component is added with the layout of the selected Syncfusion® form. ![Syncfusion® form with a Syncfusion® component added](Item-Template-images/Syncfusion-Form-with-Syncfusion-Component.png) diff --git a/WindowsForms/skills/component-skills.md b/WindowsForms/skills/component-skills.md index 8bdb32c27..c6170c2d3 100644 --- a/WindowsForms/skills/component-skills.md +++ b/WindowsForms/skills/component-skills.md @@ -21,7 +21,6 @@ Before installing Syncfusion® Windows Forms - Required [Node.js](https://nodejs.org/en/) version >= 16 - Windows Forms application (existing or new); see [Overview](https://help.syncfusion.com/windowsforms/overview) - A supported AI agent or IDE that integrates with the Skills CLI (Visual Studio Code, Syncfusion® Code Studio, Cursor, etc.) -- A Syncfusion® Essential Studio for Windows Forms release that matches the skill pack version installed. ## Key Benefits @@ -47,7 +46,7 @@ Install [Syncfusion® Windows Forms componen ### Install all skills -From your project root, run the following command to install all component skills at once in the `.agents/skills` directory. The `-y` flag accepts the default answers (project scope, default agent) without prompting. +Use the following command to install all component skills at once in the `.agents/skills` directory: {% tabs %} {% highlight bash tabtitle="NPM" %} @@ -137,16 +136,6 @@ Once skills are installed, the assistant can be used to generate and update Sync - "Add a DataGrid with paging, sorting, and filtering." - "Create a Schedule control with week view and drag‑drop." -## How Syncfusion® Agent Skills Work - -1. **Reads relevant Skill files based on queries**, retrieving component usage patterns, APIs, and best‑practice guidance from installed Syncfusion® Skills. The assistant initially loads only skill names and descriptions. It then dynamically loads the required skill and reference files as needed to provide accurate Syncfusion guidance. Skill files are matched to the query by name, description, and file references declared inside the skill. -2. **Enforces Syncfusion® best practices** when generating code, including: - - - Using the required assemblies for each component. - - Recommending applicable feature controls (for example, paging, sorting, filtering) so they are included in the generated code. - - Adding the correct theme and [VisualStyle](https://help.syncfusion.com/windowsforms/visualstyle) settings. Supported themes include Office2007, Office2010, Office2013, Office2016, Office2019, Metro, and HighContrast. -3. **Generates component‑accurate code**, avoiding invalid properties or unsupported patterns. - ## Skills CLI Commands After installation, manage Syncfusion® Agent Skills using the following commands: diff --git a/WindowsForms/skills/ui-builder-skill.md b/WindowsForms/skills/ui-builder-skill.md index 6adcf82dc..bdeca9bc2 100644 --- a/WindowsForms/skills/ui-builder-skill.md +++ b/WindowsForms/skills/ui-builder-skill.md @@ -194,7 +194,7 @@ Yes. Supported agents automatically load relevant skills based on your query. Yes — the generated Windows Forms controls include clear integration points for style adjustments. **Does it modify files automatically?** -The skill proposes changes and requires confirmation for insertion. Automatic dependency installation may be offered depending on agent permissions (file-read, file-write, and package-install scopes). +The skill proposes changes and requires confirmation for insertion. Automatic dependency installation may be offered depending on agent permissions ## See also diff --git a/WindowsForms/skins/Getting-Started.md b/WindowsForms/skins/Getting-Started.md index 56795906b..4d983221f 100644 --- a/WindowsForms/skins/Getting-Started.md +++ b/WindowsForms/skins/Getting-Started.md @@ -15,8 +15,6 @@ This section briefly describes how to create a new Windows Forms project in Visu SkinManager is present in the `Syncfusion.Shared.Base` assembly. -N> Ensure that the required Syncfusion WinForms assemblies, such as `Syncfusion.Shared.Base` and any theme-specific assemblies, are referenced in the project. The Syncfusion WinForms Toolbox installer or Visual Studio extension must be installed for the SkinManager component to appear in the toolbox. - diff --git a/WindowsForms/theme-studio/theme-studio.md b/WindowsForms/theme-studio/theme-studio.md index 35b66a031..8d76d28f0 100644 --- a/WindowsForms/theme-studio/theme-studio.md +++ b/WindowsForms/theme-studio/theme-studio.md @@ -95,39 +95,29 @@ Load the exported theme assembly and apply the custom theme to the SfDataGrid co {% highlight C# %} -using Syncfusion.Windows.Forms; -using System; -using System.Reflection; -using System.Windows.Forms; - -namespace ThemeStudioDemo -{ static class Program { [STAThread] static void Main() { - SkinManager.LoadAssembly(Assembly.LoadFrom("VioletTheme.dll")); + Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(DemoCommon.FindLicenseKey()); + SkinManager.LoadAssembly(typeof(VioletTheme).Assembly); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } -} {% endhighlight %} {% highlight VB %} -Imports Syncfusion.Windows.Forms -Imports System.Reflection -Imports System.Windows.Forms - Module Program - Sub Main() - SkinManager.LoadAssembly(Assembly.LoadFrom("VioletTheme.dll")) + Private Sub Main() + Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(DemoCommon.FindLicenseKey()) + SkinManager.LoadAssembly(GetType(VioletTheme).Assembly) Application.EnableVisualStyles() Application.SetCompatibleTextRenderingDefault(False) @@ -141,39 +131,6 @@ End Module **Step 3:** -Set the exported theme name to the `ThemeName` property of the SfDataGrid control. - -{% tabs %} - -{% highlight C# %} - -public Form1() -{ - InitializeComponent(); - - sfDataGrid1.ThemeName = "VioletTheme"; -} - -{% endhighlight %} - -{% highlight VB %} - -Public Sub New() - InitializeComponent() - - sfDataGrid1.ThemeName = "VioletTheme" -End Sub - -{% endhighlight %} - -{% endtabs %} - -N> The `sfDataGrid1` control should already be added to the form through the designer or created in code. - -**Step 4:** - -Compile and run the Windows Forms application. The custom theme is applied to the SfDataGrid control at run-time. - -![Theme applied in SfDataGrid](ThemeStudio_images/Theme-applied-SfDataGrid.png) +Compile and run the Windows Forms application and you can now witness the custom theme applied to SfDataGrid control at run-time. -N> Replace `VioletTheme` with the actual name used while exporting the custom theme assembly from Theme Studio. Ensure that the exported theme assembly, such as `VioletTheme.dll`, is added to the project and copied to the application output directory. \ No newline at end of file +![Theme applied in SfDataGrid](ThemeStudio_images/Theme-applied-SfDataGrid.png) \ No newline at end of file From 0fb8abfe05ae951ac623f253c2eb36749f4990bf Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Mon, 27 Jul 2026 15:18:58 +0530 Subject: [PATCH 10/11] Rechecked the update of the documentation content --- ...egistering-syncfusion-account-for-nuget-org-user.md | 7 +++---- WindowsForms/Licensing/overview.md | 3 +-- .../upgrade-syncfusion-winforms-nuget-packages.md | 3 +-- .../Visual-Studio-Integration/Item-Template.md | 2 -- .../Visual-Studio-Integration/Template-Studio.md | 4 ++-- .../download-and-installation.md | 2 -- WindowsForms/skills/component-skills.md | 10 ++++++++++ 7 files changed, 17 insertions(+), 14 deletions(-) diff --git a/WindowsForms/Licensing/licensing-faq/registering-syncfusion-account-for-nuget-org-user.md b/WindowsForms/Licensing/licensing-faq/registering-syncfusion-account-for-nuget-org-user.md index 0609d1a52..1542ff434 100644 --- a/WindowsForms/Licensing/licensing-faq/registering-syncfusion-account-for-nuget-org-user.md +++ b/WindowsForms/Licensing/licensing-faq/registering-syncfusion-account-for-nuget-org-user.md @@ -11,7 +11,6 @@ documentation: ug If you have directly obtained Syncfusion assemblies from [NuGet.org](https://www.nuget.org/) and do not have a Syncfusion account, follow these steps to obtain a free 30-day trial license key: -* Register for a free Syncfusion account [here](https://www.syncfusion.com/account/register). -* Go to the [Start Trials](https://www.syncfusion.com/account/manage-trials/start-trials) page and start a trial. -* Confirm the trial is active on the [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page before generating the key. -* Finally, proceed to the [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) section to obtain the [license key](https://help.syncfusion.com/windowsforms/licensing/how-to-generate). \ No newline at end of file +* Register for a free Syncfusion account [here](https://www.syncfusion.com/account/register) +* Go to the start trials [page](https://syncfusion.com/account/manage-trials/start-trials) and start a trial +* Finally proceed to the [Trial & Downloads section](https://www.syncfusion.com/account/manage-trials/downloads) to obtain the [license key](https://help.syncfusion.com/windowsforms/licensing/how-to-generate) \ No newline at end of file diff --git a/WindowsForms/Licensing/overview.md b/WindowsForms/Licensing/overview.md index 819d7369e..732bb18e2 100644 --- a/WindowsForms/Licensing/overview.md +++ b/WindowsForms/Licensing/overview.md @@ -40,9 +40,8 @@ This application was built using a trial version of Syncfusion Essential Studio. | **Trial installer** | If the Syncfusion assemblies used in Build Server were from Trial Installer, we should register the license key in the application for the corresponding version and platforms, to avoid trial license warning. | Yes | Use any developer trial license to [generate](https://help.syncfusion.com/windowsforms/licensing/how-to-generate) keys for Build Environments as well. | | **Licensed installer** |If the Syncfusion assemblies used in Build Server were from Licensed Installer, then there is no need to register the license keys.

You can [download](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-download#download-the-license-version) and [install](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-install) the licensed version of our installer. | No | Not applicable | -For CI validation, see the [CI License Validation](https://help.syncfusion.com/windowsforms/licensing/licensing-faq/ci-license-validation) topic. - ## See Also * [How to Generate Syncfusion WindowsForms License Key?](https://help.syncfusion.com/windowsforms/licensing/how-to-generate) * [How to Register Syncfusion License Key in WindowsForms Application?](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) +* For CI validation, see the [CI License Validation](https://help.syncfusion.com/windowsforms/licensing/licensing-faq/ci-license-validation) topic. \ No newline at end of file diff --git a/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md b/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md index a0ffb0a76..9411d7273 100644 --- a/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md +++ b/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md @@ -49,8 +49,7 @@ To specify a version, add the -v parameter: The **Package Manager Console** saves NuGet packages upgrade time since you don't have to search for the package you want to update, and you can just type the command to update the appropriate Syncfusion WinForms NuGet package. Follow the steps below to upgrade the installed Syncfusion NuGet packages using the Package Manager Console in your WinForms application. -1. To show the Package Manager Console, open your WinForms application in Visual Studio and navigate to **Tools** in the Visual Studio menu and after hovering **NuGet Package Manager**, select **Package Manager Console**. In the **Default project** dropdown at the top of the Package Manager Console, select the project in which you want to update the package. - +1. To show the Package Manager Console, open your WinForms application in Visual Studio and navigate to **Tools** in the Visual Studio menu and after hovering **NuGet Package Manager**, select **Package Manager Console**. ![Package Manager Console](images/console.png) 2. The **Package Manager Console** will be shown at the bottom of the screen. You can update the Syncfusion WinForms NuGet packages by entering the following NuGet update commands. diff --git a/WindowsForms/Visual-Studio-Integration/Item-Template.md b/WindowsForms/Visual-Studio-Integration/Item-Template.md index 792ef3448..29c1d0b97 100644 --- a/WindowsForms/Visual-Studio-Integration/Item-Template.md +++ b/WindowsForms/Visual-Studio-Integration/Item-Template.md @@ -17,8 +17,6 @@ The following steps will guide you in adding the Syncfusion® WinForms component > Check whether the **Syncfusion WinForms** extension is installed in Visual Studio Extension Manager by going to **Extensions → Manage Extensions → Installed** for Visual Studio 2019 or later, and to **Tools → Extensions and Updates → Installed** for Visual Studio 2017 or lower. If this extension is not installed, install the extension by following the steps from the [download and installation](https://help.syncfusion.com/windowsforms/visual-studio-integration/download-and-installation) help topic. -N> Item Templates are available from v13.1.0.21. The Item Template wizard supports **WinForms App (.NET Framework)** and **WinForms App (.NET)** project types. - ## Add components using Syncfusion® Item Template 1. Open a new or existing **WinForms** project. Then choose one of the following options to open the wizard: diff --git a/WindowsForms/Visual-Studio-Integration/Template-Studio.md b/WindowsForms/Visual-Studio-Integration/Template-Studio.md index 4f92b574e..7ef10fa69 100644 --- a/WindowsForms/Visual-Studio-Integration/Template-Studio.md +++ b/WindowsForms/Visual-Studio-Integration/Template-Studio.md @@ -74,8 +74,8 @@ Create the Syncfusion® WinForms project using the Visual Studio Project Templat ![Syncfusion WinForms app features selection wizard](Template-Studio-Images/WF-7.png) - N> The App Features option is not accessible for .NET Framework because the generated DI setup targets .NET (non-Framework) hosts. - + N> The App Features option is not accessible for .NET Framework. + **Project Details Section** In the **Project Details** section, modify configurations and project types. Additionally, you can remove one or more controls from the selected list and remove the chosen application feature. diff --git a/WindowsForms/Visual-Studio-Integration/download-and-installation.md b/WindowsForms/Visual-Studio-Integration/download-and-installation.md index 99da7b273..c7cb1bf20 100644 --- a/WindowsForms/Visual-Studio-Integration/download-and-installation.md +++ b/WindowsForms/Visual-Studio-Integration/download-and-installation.md @@ -21,8 +21,6 @@ The following software prerequisites must be installed to use the Syncfusion In Visual Studio 2017 or lower, the Syncfusion® menu is available directly in the Visual Studio main menu. In Visual Studio 2019 or later, the Syncfusion® menu is available under **Extensions** in the Visual Studio menu. - ## Install through the Visual Studio Manage Extensions The steps below assist you to how to install the Syncfusion WinForms extensions from **Visual Studio Manage Extensions**. diff --git a/WindowsForms/skills/component-skills.md b/WindowsForms/skills/component-skills.md index c6170c2d3..568e80acd 100644 --- a/WindowsForms/skills/component-skills.md +++ b/WindowsForms/skills/component-skills.md @@ -129,6 +129,16 @@ This registers the Syncfusion® skill pack s To learn more about the Skills CLI, refer [here](https://www.skills.sh/docs). +## How Syncfusion® Agent Skills Work + +1. **Reads relevant Skill files based on queries**, retrieving component usage patterns, APIs, and best‑practice guidance from installed Syncfusion® Skills. The assistant initially loads only skill names and descriptions, then dynamically loads the required skill and reference files as needed to provide accurate Syncfusion guidance. +2. **Enforces Syncfusion® best practices**, including: + + - Using the required assemblies for each component. + - Injecting applicable component controls (for example, paging, sorting, filtering, and other feature controls). + - Adding the correct theme and VisualStyle settings. +3. **Generates component‑accurate code**, avoiding invalid properties or unsupported patterns. + ### Using the AI Assistant Once skills are installed, the assistant can be used to generate and update Syncfusion® Windows Forms code for tasks such as: From c9e19129e21d134b1e38eab98fb75c1ee295bfce Mon Sep 17 00:00:00 2001 From: MonikaTheerthagiri Date: Mon, 27 Jul 2026 17:34:55 +0530 Subject: [PATCH 11/11] Cross checked the content --- WindowsForms/AI-Coding-Assistant/overview.md | 2 +- WindowsForms/Applying-patches/Applying-patches.md | 4 ++-- .../Installation/install-nuget-packages.md | 4 ++-- .../offline-installer/how-to-download.md | 4 +--- .../offline-installer/how-to-install.md | 2 +- .../Installation/web-installer/how-to-download.md | 6 ++---- .../Installation/web-installer/how-to-install.md | 4 ++-- WindowsForms/Licensing/how-to-generate.md | 10 ++-------- WindowsForms/Licensing/licensing-errors.md | 14 +++++--------- .../licensing-faq/CI-license-validation.md | 10 +++++----- ...rom-trial-version-after-purchasing-a-license.md | 3 +-- .../upgrade-syncfusion-winforms-nuget-packages.md | 2 +- .../Visual-Studio-Integration/Add-References.md | 10 ++-------- WindowsForms/skills/component-skills.md | 7 +++---- WindowsForms/theme-studio/theme-studio.md | 12 +++++++++--- 15 files changed, 39 insertions(+), 55 deletions(-) diff --git a/WindowsForms/AI-Coding-Assistant/overview.md b/WindowsForms/AI-Coding-Assistant/overview.md index 31c4dc6a0..724ea29e6 100644 --- a/WindowsForms/AI-Coding-Assistant/overview.md +++ b/WindowsForms/AI-Coding-Assistant/overview.md @@ -67,4 +67,4 @@ The Syncfusion® AI Coding Assistant is desi ## See also * Add the [SyncfusionWinFormsAssistant MCP Server](https://help.syncfusion.com/windowsforms/ai-coding-assistant/mcp-server) to an MCP-enabled client. -* [Syncfusion® Windows Forms Documentation](https://help.syncfusion.com/windowsforms/overview). +* [Syncfusion® Windows Forms Documentation](https://help.syncfusion.com/windowsforms/overview). \ No newline at end of file diff --git a/WindowsForms/Applying-patches/Applying-patches.md b/WindowsForms/Applying-patches/Applying-patches.md index 505489d66..33b8f6b93 100644 --- a/WindowsForms/Applying-patches/Applying-patches.md +++ b/WindowsForms/Applying-patches/Applying-patches.md @@ -39,11 +39,11 @@ I> Before installing the patch, ensure that the corresponding Essential Studio v ![Finish Wizard](Patches_images/Installing-a-Patch-Setup_img7.png) -6. Click Finish. The new assemblies are placed in the **Pre-Compiled Assemblies** folder. By default this folder is located at `%ProgramFiles%\Syncfusion\Essential Studio\\Pre-Compiled Assemblies`. These new assemblies can be referenced in your project. +6. Click Finish. The new assemblies are placed in the Pre-Compiled Assemblies folder. These new assemblies can be referenced in your project. ## Patch Assembly Version Format -In the patch assembly, the **File Version** and **Product Version** will be different. The **Product Version** matches the release version of Essential Studio. The **File Version** increments the release version's **revision** number; each patch ships with a different File Version, which is how you distinguish a patched assembly from a release assembly. To view these values, right-click a Syncfusion assembly, choose **Properties**, and open the **Details** tab. +In the patch assembly, the **File Version** and **Product Version** will be different. Product Version will be the release version and File Version will be the increment of the release version's **revision** number. For each patch, the File Version will be a different one. You can differentiate between the build and patch assemblies by File Version. **File Version of the assembly shipped in build:** diff --git a/WindowsForms/Installation/install-nuget-packages.md b/WindowsForms/Installation/install-nuget-packages.md index 3ab6cce17..dd3130111 100644 --- a/WindowsForms/Installation/install-nuget-packages.md +++ b/WindowsForms/Installation/install-nuget-packages.md @@ -26,7 +26,7 @@ The NuGet **Package Manager UI** allows you to search, install, uninstall, and u As an alternative, after opening the WinForms application in Visual Studio, go to the **Tools** menu and after hovering **NuGet Package Manager**, select **Manage NuGet Packages for Solution...** -2. The Manage NuGet Packages window will open. Navigate to the **Browse** tab, then search for the Syncfusion WinForms NuGet packages using a term like **"Syncfusion.WinForms"** (or the legacy **"Syncfusion.Grid.Windows"** package for the specific control shown in the examples below) and select the appropriate Syncfusion WinForms NuGet package for your development. +2. The Manage NuGet Packages window will open. Navigate to the **Browse** tab, then search for the Syncfusion WinForms NuGet packages using a term like **"Syncfusion.WinForms"** and select the appropriate Syncfusion WinForms NuGet package for your development. > The [nuget.org](https://api.nuget.org/v3/index.json) package source is selected by default in the Package source drop-down. If your Visual Studio does not have nuget.org configured, follow the instructions in the [Microsoft documents](https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio#package-sources) to set up the nuget.org feed URL. @@ -103,4 +103,4 @@ The **Package Manager Console** saves NuGet packages installation time since you 4. The NuGet package manager console will install the Syncfusion WinForms NuGet package as well as the dependencies it has. When the installation is complete, the console will show that your Syncfusion WinForms package has been successfully added to the application. -5. After installation, register your Syncfusion license key in the WinForms application as described in the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). \ No newline at end of file +5. At this point, your application has all the required Syncfusion assemblies, and you will be ready to start building high-performance, responsive app with [Syncfusion WinForms components](https://www.syncfusion.com/winforms-ui-controls). Also, you can refer to the [Syncfusion WinForms help document](https://help.syncfusion.com/windowsforms/overview) for development. \ No newline at end of file diff --git a/WindowsForms/Installation/offline-installer/how-to-download.md b/WindowsForms/Installation/offline-installer/how-to-download.md index 7219d65a4..e914bd302 100644 --- a/WindowsForms/Installation/offline-installer/how-to-download.md +++ b/WindowsForms/Installation/offline-installer/how-to-download.md @@ -77,6 +77,4 @@ You should initiate an evaluation if you have already obtained our components th ![Offline installer formats for Syncfusion Essential Studio](images/start-trial-download-offline-installer.png) -You can also refer to the [**Offline installer**](https://help.syncfusion.com/windowsforms/installation/offline-installer/how-to-install) links for step-by-step installation guidelines. - -For information about retrieving and using your license key after installation, see the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). \ No newline at end of file +You can also refer to the [**Offline installer**](https://help.syncfusion.com/windowsforms/installation/offline-installer/how-to-install) links for step-by-step installation guidelines. \ No newline at end of file diff --git a/WindowsForms/Installation/offline-installer/how-to-install.md b/WindowsForms/Installation/offline-installer/how-to-install.md index 5afa9db91..f10946124 100644 --- a/WindowsForms/Installation/offline-installer/how-to-install.md +++ b/WindowsForms/Installation/offline-installer/how-to-install.md @@ -108,7 +108,7 @@ After installation, you can register your Syncfusion license key in your applica ## Installing in silent mode -The Syncfusion Essential Studio for Windows Forms Installer supports installation and uninstallation via the command line. The command prompt must be run as Administrator to install or uninstall the product silently. +The Syncfusion Essential Studio for Windows Forms Installer supports installation and uninstallation via the command line. ### Command Line Installation diff --git a/WindowsForms/Installation/web-installer/how-to-download.md b/WindowsForms/Installation/web-installer/how-to-download.md index 43aa3189e..fac6f2351 100644 --- a/WindowsForms/Installation/web-installer/how-to-download.md +++ b/WindowsForms/Installation/web-installer/how-to-download.md @@ -75,8 +75,6 @@ You should initiate an evaluation if you have already obtained our components th 8. After downloading, the Syncfusion Windows Forms web installer can be unlocked using Syncfusion registered login credential. - N> The Syncfusion web installer handles both trial and licensed installations. When you sign in, the installer uses your account license to determine whether to install a trial or licensed version. + N> For Syncfusion trial and licensed products, there is no separate web installer. Based on your account license,Syncfusion trial or licensed products will be installed via web installer. -You can also refer to the [**web installer**](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-install) links for step-by-step installation guidelines. - -For information about retrieving and using your license key after installation, see the [Licensing overview](https://help.syncfusion.com/windowsforms/licensing/overview). \ No newline at end of file +You can also refer to the [**web installer**](https://help.syncfusion.com/windowsforms/installation/web-installer/how-to-install) links for step-by-step installation guidelines. \ No newline at end of file diff --git a/WindowsForms/Installation/web-installer/how-to-install.md b/WindowsForms/Installation/web-installer/how-to-install.md index d489fca5f..d42ad296a 100644 --- a/WindowsForms/Installation/web-installer/how-to-install.md +++ b/WindowsForms/Installation/web-installer/how-to-install.md @@ -9,6 +9,8 @@ documentation: ug # Installing Syncfusion Windows Forms Web Installer +## Overview + For the Essential Studio for Windows Forms product, Syncfusion offers a Web Installer. This installer alleviates the burden of downloading a larger installer. You can simply download and run the online installer, which will be smaller in size and will download and install the Essential Studio products you have chosen. You can get the most recent version of Essential Studio Web Installer [here](https://www.syncfusion.com/downloads/latest-version). @@ -73,8 +75,6 @@ The steps below show how to install Essential Studio for Windows Forms Web Insta ![Install and samples location for install](images/Step-by-Step-Installation_img8.png) **Additional settings** - - The following additional settings can be configured on a per-product basis. (For more details on each option, see the [offline installer Additional Settings](https://help.syncfusion.com/windowsforms/installation/offline-installer/how-to-install#installing-with-ui) section.) * Select the **Install Demos** check box to install Syncfusion samples, or leave the check box unchecked if you do not want to install Syncfusion samples. * Select the **Register Syncfusion Assemblies in GAC** check box to install the latest Syncfusion assemblies in the Global Assembly Cache (GAC), or clear this check box when you do not want to install the latest assemblies in the GAC. diff --git a/WindowsForms/Licensing/how-to-generate.md b/WindowsForms/Licensing/how-to-generate.md index 21ec83fc5..2c2f37565 100644 --- a/WindowsForms/Licensing/how-to-generate.md +++ b/WindowsForms/Licensing/how-to-generate.md @@ -12,10 +12,6 @@ documentation: ug License keys for Windows Forms can be generated from the [License & Downloads](https://www.syncfusion.com/account/downloads) or [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) section from your Syncfusion account. -1. Sign in to your [Syncfusion account](https://www.syncfusion.com/account). -2. Navigate to the [License & Downloads](https://www.syncfusion.com/account/downloads) section. -3. Select the **Windows Forms** platform and the required version, then click **Generate Key**. - ![Get License Key](licensing-images/generate-license.png) I> * Syncfusion license keys are **version and platform specific**, refer to the [KB](https://support.syncfusion.com/kb/article/7898/how-to-generate-license-key-for-licensed-products) to generate the license key for the required version and platform. @@ -23,7 +19,7 @@ I> * Syncfusion license keys are **version and platform specific**, refer to the ## Claim License Key -Syncfusion license keys can also be generated from the **"Claim License Key"** page based on the trial or valid license associated with your Syncfusion account. The **Claim License Key** button is also available directly from the application licensing-warning popup. +Syncfusion license keys can also be generated from the **"Claim License Key"** page based on the trial or valid license associated with your Syncfusion account. You can get the license key, based on license availability in your Syncfusion account. @@ -43,13 +39,11 @@ If you have a Syncfusion account associated with a valid trial license, the lice If you have a Syncfusion account with an expired license, your license subscription must be renewed to obtain a valid license key for the latest Essential Studio version. Meanwhile, a temporary license key with a 5-day validity period will be generated. -To renew, see [My Renewals](https://www.syncfusion.com/account/my-renewals). - ![Expired License](licensing-images/expired-license.png) ### No Trial or No License or Expired trial -If the Syncfusion account is not associated with a trial, license, or expired trial, you can start a new trial from the [Start Trial](https://www.syncfusion.com/account/manage-trials/start-trials) page. After starting the trial, generate the key from the [Trial & Downloads](https://www.syncfusion.com/account/manage-trials/downloads) page. +If the Syncfusion account is not associated with a trial, license, or expired trial, you can try to claim either a trial or a valid license from claim license page. ![No Trial or No License](licensing-images/no-active-trial-or-license.png) diff --git a/WindowsForms/Licensing/licensing-errors.md b/WindowsForms/Licensing/licensing-errors.md index 3a1c248e6..b74d50711 100644 --- a/WindowsForms/Licensing/licensing-errors.md +++ b/WindowsForms/Licensing/licensing-errors.md @@ -108,18 +108,14 @@ If the application is registered with another version's license key, the followi ## Could not load Syncfusion.Licensing.dll assembly version...? -This error applies to all supported versions. +Please ensure that all Syncfusion NuGet packages including [Syncfusion.Licensing](https://www.nuget.org/packages/Syncfusion.Licensing) were installed properly, and assembly references are upgraded to the required version. Also, verify that the csproj and packages.config/web.config files references have been referred with the updated version. -Please ensure that all Syncfusion NuGet packages including [Syncfusion.Licensing](https://www.nuget.org/packages/Syncfusion.Licensing) were installed properly, and assembly references are upgraded to the required version. +To avoid run-time errors, set copy local to true. Copy Local determines whether a reference is copied to the project output path. -After upgrading, perform a Clean and then Rebuild of the solution to ensure stale binaries are removed. +![Set copy local to true](licensing-images/SetCopyLocalTrue.png) -To avoid run-time errors, set **Copy Local** to true. **Copy Local** determines whether a reference is copied to the project output path. - -![Set Copy Local to true](licensing-images/SetCopyLocalTrue.png) - -Set **Copy Local** as True for `Syncfusion.Licensing.dll` along with all other Syncfusion assemblies and ensure that the `Syncfusion.Licensing.dll` assembly is also present in the output folder or deployment folder of the application. +Set “CopyLocal” as True for Syncfusion.Licensing.dll along with all other Syncfusion assemblies and ensure that the Syncfusion.Licensing.dll assembly is also present in the output folder or deployment folder of the application. ![Output folder](licensing-images/OutputFolder.png) -Refer to this knowledge base article to set [Copy Local](https://www.syncfusion.com/kb/4808/how-to-resolve-server-error-could-not-load-or-assembly-when-publishing-an-application) as true. \ No newline at end of file +Refer to this knowledge base articles to set [copy local](https://www.syncfusion.com/kb/4808/how-to-resolve-server-error-could-not-load-or-assembly-when-publishing-an-application) as true. \ No newline at end of file diff --git a/WindowsForms/Licensing/licensing-faq/CI-license-validation.md b/WindowsForms/Licensing/licensing-faq/CI-license-validation.md index 1a7541e25..f2df7112a 100644 --- a/WindowsForms/Licensing/licensing-faq/CI-license-validation.md +++ b/WindowsForms/Licensing/licensing-faq/CI-license-validation.md @@ -50,11 +50,11 @@ Write-Host $result **Platform:** Set `/platform:"UIComponent"` for v34.1.29 and later, or `/platform:"WindowsForms"` for earlier versions (use the relevant Syncfusion platform as needed). - **Version:** Change the value for `/version:` to the required version (e.g., `"34.1.29"` for v34+ or `"26.2.4"` for earlier versions). + **Version:** Change the value for `/version:` to the required version (e.g., `"34.1.29"`). **License Key:** Replace the value for `/licensekey:` with your actual license key (e.g., `"YOUR LICENSE KEY"`). - N> This feature is supported from version 16.2.0.41 of Essential Studio and later. The `Platform.UIComponent` value replaces `Platform.WindowsForms` from v34.1.29 onwards. + N> This feature is supported from version 16.2.0.41 of Essential Studio and later. ## Azure Pipelines @@ -112,7 +112,7 @@ The following example shows the syntax for validating the Syncfusion license key * Add a stage in the Jenkins pipeline to execute the `LicenseKeyValidation.ps1` script in PowerShell. On Windows agents, use the `bat` step (the `sh` step is for Linux/Unix agents). -The following example shows the syntax for validating the Syncfusion license key in the Jenkins pipeline on a Windows agent. +The following example shows the syntax for validating the Syncfusion license key in the Jenkins pipeline. {% tabs %} {% highlight json %} @@ -136,7 +136,7 @@ pipeline { * Register the license key properly by calling `RegisterLicense("License Key")` with the license key. -* Once the license key is registered, it can be validated by using the `ValidateLicense(Platform.WindowsForms)` method (or `ValidateLicense(new[] { Platform.UIComponent })` for v34.1.29+). This ensures that the license key is valid for the platform and version you are using. The method returns `true` when the registered key is valid; the `out string validationMessage` overload also returns a description of any failure. Refer to the following example. +* Once the license key is registered, it can be validated by using the `ValidateLicense(Platform.WindowsForms)` method (or `ValidateLicense(new[] { Platform.UIComponent })` for v34.1.29+). . This ensures that the license key is valid for the platform and version you are using. Refer to the following example. {% tabs %} {% highlight c# tabtitle="v34.1.29 and later" %} @@ -174,7 +174,7 @@ N> Use `Platform.UIComponent` for UI component license validation in v34.1.29 an * For more details on creating unit test projects in Visual Studio, refer to the [Getting Started with Unit Testing guide](https://learn.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing?view=vs-2022&tabs=dotnet%2Cmstest#create-unit-tests). -* Add a reference to the application/project under test (or to the same `Syncfusion.Licensing` NuGet package the application uses), and add the `Syncfusion.Licensing` NuGet package to the test project. Register the license key by calling the `RegisterLicense("YOUR LICENSE KEY")` method in the test project's setup (or load it from an environment variable / secret). +* Add a reference (or NuGet package) for `Syncfusion.Licensing` to the test project, and register the license key by calling the `RegisterLicense("YOUR LICENSE KEY")` method in the test project's setup. N> * Place the license key between double quotes (e.g., `RegisterLicense("YOUR LICENSE KEY")`). Ensure that `Syncfusion.Licensing.dll` is referenced in the project where the license key is being registered. diff --git a/WindowsForms/Licensing/licensing-faq/how-to-upgrade-from-trial-version-after-purchasing-a-license.md b/WindowsForms/Licensing/licensing-faq/how-to-upgrade-from-trial-version-after-purchasing-a-license.md index f81ef2cf0..35c07c9a6 100644 --- a/WindowsForms/Licensing/licensing-faq/how-to-upgrade-from-trial-version-after-purchasing-a-license.md +++ b/WindowsForms/Licensing/licensing-faq/how-to-upgrade-from-trial-version-after-purchasing-a-license.md @@ -12,6 +12,5 @@ documentation: ug To upgrade from trial version, there are two possible solutions. 1. Uninstall the trial version and install the fully licensed build from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. -2. If you are using Syncfusion controls from [nuget.org](https://www.nuget.org/packages?q=syncfusion), replace the currently used trial license key with a paid license key that can be generated from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. Register the new paid key in your project as described in [How to Register Syncfusion License Key in Windows Forms Application](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application). - +2. If you are using Syncfusion controls from [nuget.org](https://www.nuget.org/packages?q=syncfusion), replace the currently used trial license key with a paid license key that can be generated from the [License & Downloads](https://www.syncfusion.com/account/downloads) section of our website. Refer to [this](https://help.syncfusion.com/windowsforms/licensing/how-to-register-in-an-application) topic for more information regarding registering the license in the application. N> License registration is not required if you reference Syncfusion assemblies from a Licensed installer. These licensing changes apply to all evaluators who reference the Syncfusion assemblies from the evaluation installer and those who use Syncfusion NuGet packages from [nuget.org](https://www.nuget.org/). \ No newline at end of file diff --git a/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md b/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md index 9411d7273..6a32c3ff0 100644 --- a/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md +++ b/WindowsForms/Upgrade/upgrade-syncfusion-winforms-nuget-packages.md @@ -70,7 +70,7 @@ The **Package Manager Console** saves NuGet packages upgrade time since you don' **For example:** `Update-Package Syncfusion.Grid.Windows -ProjectName SyncfusionWinformsApp` -3. By default, the package will be updated to the latest version. To update to a specific version, use the `-Version` parameter (note: Package Manager Console uses `-Version`, while the .NET CLI uses the shorter `-v`). +3. By default, the package will be installed with latest version. You can give the required version with the -Version term like below to install the Syncfusion WinForms NuGet packages in the appropriate version. ```Update-Package Syncfusion.Grid.Windows -Version 19.2.0.59``` diff --git a/WindowsForms/Visual-Studio-Integration/Add-References.md b/WindowsForms/Visual-Studio-Integration/Add-References.md index 4687d44c3..0ffb6700a 100644 --- a/WindowsForms/Visual-Studio-Integration/Add-References.md +++ b/WindowsForms/Visual-Studio-Integration/Add-References.md @@ -15,7 +15,7 @@ N> This Reference Manager can be applied to a project for Syncfusion® assembly Follow the given steps to add the Syncfusion® references in Visual Studio: -> Before using the Syncfusion® WinForms Reference Manager, verify that the **Syncfusion WinForms** extension is installed by going to **Extensions → Manage Extensions → Installed** in Visual Studio 2019 or later, or **Tools → Extensions and Updates → Installed** in Visual Studio 2017 or lower. If this extension is not installed, install the extension by following the steps from the [download and installation](https://help.syncfusion.com/windowsforms/visual-studio-integration/download-and-installation) help topic. +> Before use the Syncfusion® WinForms Reference Manager, check whether the **WinForms Extensions - Syncfusion** installed or not in Visual Studio Extension Manager by going to Extensions -> Manage Extensions -> Installed for Visual Studio 2019 or later and for Visual Studio 2017 or lower by going to Tools -> Extensions and Updates -> Installed. If this extension not installed, please install the extension by follow the steps from the [download and installation](https://help.syncfusion.com/windowsforms/visual-studio-integration/download-and-installation) help topic. 1. Open a new or existing **WinForms** application. @@ -67,10 +67,4 @@ Follow the given steps to add the Syncfusion® references in Visual Studio: ![Syncfusion license registration required information dialog in Syncfusion Reference Manager](Syncfusion-Reference-Manger_images/Syncfusion-Reference-Manger-img7.png) -N> Syncfusion® provides Reference Manager support for specific .NET Framework versions, based on the assemblies shipped with the Syncfusion® Essential Studio® setup. If you attempt to add Syncfusion® assemblies to a project whose target framework is not supported by the selected Syncfusion® version, a dialog will appear with the following message: **“Current build v{version} does not support this framework v{Framework Version}.”** - - - - - - +N> Syncfusion® provides Reference Manager support for specific .NET Framework versions, based on the assemblies shipped with the Syncfusion® Essential Studio® setup. If you attempt to add Syncfusion® assemblies to a project whose target framework is not supported by the selected Syncfusion® version, a dialog will appear with the following message: **“Current build v{version} does not support this framework v{Framework Version}.”** \ No newline at end of file diff --git a/WindowsForms/skills/component-skills.md b/WindowsForms/skills/component-skills.md index 568e80acd..b62bffa66 100644 --- a/WindowsForms/skills/component-skills.md +++ b/WindowsForms/skills/component-skills.md @@ -58,7 +58,7 @@ npx skills add syncfusion/winforms-ui-components-skills -y ### Install selected skills -Run the command below from your project root to install skills interactively. The command opens a list of available skills and prompts for the target agent and installation scope. +Use the following command to install skills interactively: {% tabs %} {% highlight bash tabtitle="NPM" %} @@ -68,8 +68,7 @@ npx skills add syncfusion/winforms-ui-components-skills {% endhighlight %} {% endtabs %} -The terminal will display a list of available skills. Use the **arrow keys** to move between skills, the **space bar** to toggle a skill on or off, and the **Enter** key to confirm your selection. If you do not select any skills and press Enter, the command exits without installing. -{% tabs %} +The terminal will display a list of available skills. Use the **arrow keys** to move between skills, the **space bar** to toggle a skill on or off, and the **Enter** key to confirm. {% highlight bash tabtitle="CMD" %} Select skills to install (space to toggle) @@ -125,7 +124,7 @@ Choose your installation scope (project-level or global), then confirm to comple {% endhighlight %} {% endtabs %} -This registers the Syncfusion® skill pack so your AI assistant can automatically load it in supported IDEs such as [Syncfusion® Code Studio](https://help.syncfusion.com/code-studio/reference/configure-properties/skills), [Visual Studio Code](https://code.visualstudio.com/docs/copilot/customization/agent-skills), and [Cursor](https://cursor.com/docs/skills). After installation, restart your IDE (or use the **Reload Window** command) so the IDE can detect the newly added skill files. +This registers the Syncfusion® skill pack so your AI assistant can automatically load it in supported IDEs such as [Code Studio](https://help.syncfusion.com/code-studio/reference/configure-properties/skills), [Visual Studio Code](https://code.visualstudio.com/docs/copilot/customization/agent-skills), and [Cursor](https://cursor.com/docs/skills). After installation, restart your IDE (or use the **Reload Window** command) so the IDE can detect the newly added skill files. To learn more about the Skills CLI, refer [here](https://www.skills.sh/docs). diff --git a/WindowsForms/theme-studio/theme-studio.md b/WindowsForms/theme-studio/theme-studio.md index 8d76d28f0..11e73b005 100644 --- a/WindowsForms/theme-studio/theme-studio.md +++ b/WindowsForms/theme-studio/theme-studio.md @@ -89,7 +89,7 @@ Add the exported assembly (*.dll) as a reference in your Windows Forms project ( **Step 2:** -Load the exported theme assembly and apply the custom theme to the SfDataGrid control. +Load the Theme assembly in Program.cs of your application and the initialize a SfDataGrid control in the main form and set it’s "ThemeName" property exactly to the assembly name. {% tabs %} @@ -97,24 +97,28 @@ Load the exported theme assembly and apply the custom theme to the SfDataGrid co static class Program { + /// + /// The main entry point for the application. + /// [STAThread] static void Main() { Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(DemoCommon.FindLicenseKey()); SkinManager.LoadAssembly(typeof(VioletTheme).Assembly); - Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } +sfDataGrid1.ThemeName = "VioletTheme"; + {% endhighlight %} {% highlight VB %} Module Program - + Private Sub Main() Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(DemoCommon.FindLicenseKey()) SkinManager.LoadAssembly(GetType(VioletTheme).Assembly) @@ -125,6 +129,8 @@ Module Program End Sub End Module +sfDataGrid1.ThemeName = "VioletTheme" + {% endhighlight %} {% endtabs %}
Theme name