Telerik生態整合:Kendo UI for Angular組件在WinForms應用中的深度嵌入(一)

Telerik DevCraft包含一個完整的產品棧來構建您下一個Web、移動和桌面應用程序。它使用HTML和每個.NET平臺的UI庫,加快開發速度。Telerik DevCraft提供完整的工具箱,用于構建現代和面向未來的業務應用程序,目前提供UI for ASP.NET MVC、Kendo UI、UI for ASP.NET AJAX、UI for WPF、UI for Xamarin、Reporting等眾多控件。

在這篇文章中,我們將演示如何在Telerik UI for WinForms應用程序中使用Kendo UI for Angular組件。您將了解其中的陷阱,以及如何從WinForms實現與Angular的通信,并從Angular獲取事件。

Telerik 2025 Q1最新正式版下載

有幾種情況可以應用此方法:

  • 開始從傳統的WinForms應用程序遷移到Angular
  • 本地資源集成(本地數據庫和其他WinForms資源)
  • 在復雜的WinForms應用程序中構建輕量級UI應用程序
  • 構建具有Web應用程序外觀和感覺的WinForms應用程序
  • 執行在Docker、IIS或Cloud中運行的分布式UI
  • 無需更新WinForms應用程序客戶端應用程序即可更新UI

這些來自遺留應用程序的轉換場景可以幫助您在開發新的服務/應用程序時使用激活的生產資源,混合解決方案可以保留當前的WinForms,同時授權開發人員構建客戶端應用程序。

入門指南

要復制這個示例,您必須創建一個WinForms應用和一個Angular項目來承載所需的控件。如果正在集成一個舊的WinForms應用,只需要創建Angular項目。

在終端提示符上安裝最新版本的Angular:

npm install -g @angular/cli.

進入目標目錄,例如C:\Telerik,并創建新項目:

ng new my-app

選擇CSS的選項:

Telerik生態整合:Kendo UI for Angular組件在WinForms應用中的深度嵌入

啟用或禁用SSR(服務器端呈現)或SSG(靜態站點生成)。對于小型應用程序,我更喜歡SSG,來避免持續的網絡流量:

Telerik生態整合:Kendo UI for Angular組件在WinForms應用中的深度嵌入

等待安裝完成:

Telerik生態整合:Kendo UI for Angular組件在WinForms應用中的深度嵌入

Kendo UI for Angular App

按照以下步驟配置和使用來自WinForms的控件。

我們將使用Kendo UI,特別是Kendo UI for Angular餅圖控件。在創建圖表及其功能之前,安裝它以便應用程序可以訪問它。在my-app項目的根目錄下,輸入這個安裝命令:

ng add @progress/kendo-angular-charts

這個命令為我們做了很多事情(比如安裝圖表及其依賴項),現在將kendo-angular-charts添加到main中,有必要創建頁面和組件主機,并添加接口和CustomEvent來返回數據。

1. 開始使用喜歡的控件創建頁面,生成一個名為graph-control的angular組件來存放這些組件,graph-control將承載Angular圖表組件:

ng g c graph-control

2. 將新組件添加到app.routes.ts中,即組件所在頁面的路由:

import { Routes } from '@angular/router';
import { GraphControlComponent } from './graph-control/graph-control.component';export const routes: Routes = [
{
path: 'graph-control',
component: GraphControlComponent
}
];

3. 使用命令行創建組件來承載控件,在這個示例中,我們目前只演示了圖表組件:

ng g c win-chart

4. 自定義控件。

添加將用于交換與WinForms集成的數據(receiveData)的接口,您可以添加多個接口來傳輸數據:

1. declare global {
2. interface Window {
3. receiveData: (data: any) => void;
4. }
5. }

現在在WinChart組件中,需要創建一個公共的winFormsData: any = null; 變量來保存數據。

5. 接下來,讓我們結合本地存儲來保存數據。可以用它來存儲頁面刷新之間的數據,在init函數中,可以從本地存儲中獲取數據并更新winFormsData值(如果savedData存在)。

1. public winFormsData: any = null;
2. constructor() {
3. window.receiveData = (data: any) => {
4. this.winFormsData = data;
5. localStorage.setItem('winFormsData', JSON.stringify(data));
6. };
7. }
8.
9. ngOnInit() {
10. const savedData = localStorage.getItem('winFormsData');
11. if (savedData) {
12. this.winFormsData = JSON.parse(savedData);
13. }
14. }

在component.html中為圖表添加一個click事件:

1. onSeriesClick(event: SeriesClickEvent): void {
2. const category = event.category;
3. const value = event.value;
4.
5. console.log('Category:', category);
6. console.log('Value:', value);
7.
8. const message = JSON.stringify({ category, value });
9.
10. // Create a new custom event
11. const eventClick = new CustomEvent('MyClick', {
12. detail: { message: message }, // Pass any necessary data
13. });
14.
15. window.dispatchEvent(eventClick);
16. }

提示:這是一個陷阱;注意您將返回的JSON。錯誤的JSON格式會導致交付崩潰:

1. const message = JSON.stringify({ category, value });

從win-chart.component.html中刪除默認的HTML,繼續添加一個Kendo UI Chart,它將使用我們剛剛創建的系列點擊。

1. <div *ngIf="winFormsData === null">Loading....</div>
2. // check the var winFormsData
3.
4. <div *ngIf="winFormsData !== null">
5. <kendo-chart
6. (seriesClick)="onSeriesClick($event)">
7. <kendo-chart-title
8. color="black"
9. font="12pt sans-serif"
10. text="WinForms x Angular - Data integration"
11. >
12. </kendo-chart-title>
13. <kendo-chart-legend position="top"></kendo-chart-legend>
14. <kendo-chart-series>
15. <kendo-chart-series-item
16. [data]="winFormsData"
17. [labels]="{ visible: true, content: label}"
18. [type]="typeChart"
19. categoryField="name"
20. colorField="color"
21. field="value">
22. </kendo-chart-series-item>
23. </kendo-chart-series>
24. </kendo-chart>
25. </div>

在圖形控件頁面上,添加要綁定的HTML:

1. <app-win-chart></app-win-chart>

為了加快速度,我將提供win-chart.component.ts的完整文件:

1. import { Component } from '@angular/core';
2. import { ChartsModule, LegendLabelsContentArgs, SeriesClickEvent, SeriesType } from "@progress/kendo-angular-charts";
3. import { CommonModule } from '@angular/common';
4.
5. declare global {
6. interface Window {
7. receiveData: (data: any) => void;
8. }
9. }
10.
11. @Component({
12. selector: 'app-win-chart',
13. standalone: true,
14. imports: [ChartsModule, CommonModule],
15. templateUrl: './win-chart.component.html',
16. styleUrls: ['./win-chart.component.css']
17. })
18. export class WinChartComponent {
19. public winFormsData: any = null;
20. public typeChart: SeriesType = "pie";
21.
22. constructor() {
23. window.receiveData = (data: any) => {
24. this.winFormsData = data;
25. localStorage.setItem('winFormsData', JSON.stringify(data));
26. };
27. }
28.
29. ngOnInit() {
30. const savedData = localStorage.getItem('winFormsData');
31. if (savedData) {
32. this.winFormsData = JSON.parse(savedData);
33. }
34. }
35.
36. public label(args: LegendLabelsContentArgs): string {
37. return `${args.dataItem.name}`;
38. }
39.
40. onSeriesClick(event: SeriesClickEvent): void {
41. const category = event.category;
42. const value = event.value;
43.
44. console.log('Category:', category);
45. console.log('Value:', value);
46.
47. const message = JSON.stringify({ category, value });
48.
49. // Create a new custom event
50. const eventClick = new CustomEvent('MyClick', {
51. detail: { message: message }, // Pass any necessary data
52. });
53.
54. window.dispatchEvent(eventClick);
55. }
56.
57. }

現在Angular應用已經準備好了,接下來我們將繼續介紹如何使用WinForms應用。(下期見......)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83606.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83606.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年6月4日收獲

Authorization Authorization是一種通用的、標準化的權限控制和認證的通用框架&#xff0c;它能夠使跨系統和跨域的身份驗證和授權管理更容易&#xff0c;使不同應用程序之間能夠更輕松地實現單點登錄&#xff08;SSO&#xff09;、用戶身份驗證和授權控制等。 在前端使用 axi…

實時數據湖架構設計:從批處理到流處理的企業數據戰略升級

企業數據處理架構正在經歷一場深刻的變革。從最初的數據倉庫T1批處理模式&#xff0c;到如今的實時流處理架構&#xff0c;這一演進過程反映了業務對數據時效性要求的不斷提升。 文章目錄 第一章&#xff1a;數據湖演進歷程與現狀分析 第二章&#xff1a;實時數據湖核心架構剖…

iptables實戰案例

目錄 一、實驗拓撲 二、網絡規劃 三、實驗要求 四、環境準備 1.firewall &#xff08;1&#xff09;配置防火墻各大網卡IP并禁用 firewall和selinux &#xff08;2&#xff09;打開firewall路由轉發 2.PC1&#xff08;內網&#xff09; &#xff08;1&#xff09;配置防…

macOS 連接 Docker 運行 postgres,使用navicat添加并關聯數據庫

下載 docker注冊一個賬號&#xff0c;登錄 Docker創建 docke r文件 mkdir -p ~/.docker && touch ~/.docker/daemon.json寫入配置&#xff08;全量替換&#xff09; {"builder": {"gc": {"defaultKeepStorage": "20GB",&quo…

docker離線鏡像下載

背景介紹 在某些網絡受限的環境中&#xff0c;直接從Docker Hub或其他在線倉庫拉取鏡像可能會遇到困難。為了在這種情況下也能順利使用Docker鏡像&#xff0c;我們可以提前下載好所需的鏡像&#xff0c;并通過離線方式分發和使用。 當前鏡像有&#xff1a;python-3.8-slim.ta…

Android 3D球形水平圓形旋轉,旋轉動態更換圖片

看效果圖 1、事件監聽類 OnItemClickListener&#xff1a;3D旋轉視圖項點擊監聽器接口 public interface OnItemClickListener {/*** 當旋轉視圖中的項被點擊時調用** param view 被點擊的視圖對象* param position 被點擊項在旋轉視圖中的位置索引&#xff08;從0開始&a…

48V帶極性反接保護-差共模浪涌防護方案

在工業自動化&#xff08;電動機驅動 / 工業機器人&#xff09;、交通基礎設施&#xff08;充電樁 / 車載電子&#xff09;、安防系統&#xff08;監控攝像頭 / 門禁&#xff09;、儲能設備&#xff08;BMS / 離網控制器&#xff09;等領域&#xff0c;DC48V 電源因安全特低電壓…

CentOS在vmware局域網內搭建DHCP服務器【踩坑記錄】

1. 重新設置環境 配置dhcp服務踩了不少坑&#xff0c;這里重頭搭建記錄一下&#xff1a; 1.1 centos 網卡還原 如果之前搭了亂七八糟的環境&#xff0c;導致NAT模式也沒法上網&#xff0c;這里重新還原 我們需要在NAT模式下聯網&#xff0c;下載DHCP服務 先把centos的網卡還…

《Docker》架構

文章目錄 架構模式單機架構應用數據分離架構應用服務器集群架構讀寫分離/主從分離架構冷熱分離架構垂直分庫架構微服務架構容器編排架構什么是容器&#xff0c;docker&#xff0c;鏡像&#xff0c;k8s 架構模式 單機架構 單機架構其實就是應用服務器和單機服務器都部署在同一…

Web3時代的數據保護挑戰與應對策略

隨著互聯網技術的飛速發展&#xff0c;我們正步入Web3時代&#xff0c;這是一個以去中心化、用戶主權和數據隱私為核心的新時代。然而&#xff0c;Web3時代也帶來了前所未有的數據保護挑戰。本文將探討這些挑戰&#xff0c;并提出相應的應對策略。 數據隱私挑戰 在Web3時代&a…

從零打造算法題刷題助手:Agent搭建保姆級攻略

我用Trae 做了一個有意思的Agent 「大廠機試助手」。 點擊 https://s.trae.com.cn/a/d2a596 立即復刻&#xff0c;一起來玩吧&#xff01; Agent 簡介 Agent名稱為大廠機試助手&#xff0c;主要功能有以下三點。 解題&#xff1a; 根據用戶給出的題目給出具體的解題思路引導做…

【JavaWeb】MVC三層架構

MVC三層架構 MVC 是什么&#xff1f;三層架構的組成&#xff08;View、Controller、Model&#xff09;各層職責劃分示例說明面試高頻問題與參考答案 MVC&#xff08;Model-View-Controller&#xff09;是一種經典的軟件設計模式&#xff0c;廣泛應用于 Web 應用開發中&#xf…

嵌入式分析利器:DuckDB與SqlSugar實戰

? 一、DuckDB 的核心特性與適用場景 DuckDB 是一款 嵌入式分析型數據庫&#xff08;OLAP&#xff09; &#xff0c;專為高效查詢設計&#xff0c;主要特點包括&#xff1a; 列式存儲與向量化引擎 數據按列存儲&#xff0c;提升聚合統計效率&#xff08;如 SUM/AVG&#xf…

React---day6、7

6、組件之間進行數據傳遞 **6.1 父傳子&#xff1a;**props傳遞屬性 父組件&#xff1a; <div><ChildCpn name"蔣乙菥" age"18" height"1,88" /> </div>子組件&#xff1a; export class ChildCpn extends React.Component…

Windows上用FFmpeg采集攝像頭推流 → MediaMTX服務器轉發流 → WSL2上拉流播放

1. Windows上 FFmpeg 推流&#xff08;攝像頭采集&#xff09; 設備名稱可用 ffmpeg -list_devices true -f dshow -i dummy 查詢&#xff0c;假設為Integrated Camera 采集推流示例&#xff08;推RTMP到MediaMTX&#xff09;&#xff1a; ffmpeg -rtbufsize 100M -f dshow …

SpringBoot1--簡單體驗

1 Helloworld 打開&#xff1a;https://start.spring.io/ 選擇maven配置。增加SpringWeb的依賴。 Generate之后解壓&#xff0c;代碼大致如下&#xff1a; hpDESKTOP-430500P:~/springboot2/demo$ tree ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── s…

MATLAB 中調整超參數的系統性方法

在深度學習中&#xff0c;超參數調整是提升模型性能的關鍵環節。以下是 MATLAB 中調整超參數的系統性方法&#xff0c;涵蓋核心參數、優化策略及實戰案例&#xff1a; 一、關鍵超參數及其影響 超參數作用典型范圍學習率 (Learning Rate)控制參數更新步長&#xff0c;影響收斂…

根目錄0xa0屬性對應的Ntfs!_SCB中的FileObject是什么時候被建立的----NTFS源代碼分析--重要

根目錄0xa0屬性對應的Ntfs!_SCB中的FileObject是什么時候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…

(二)stm32使用4g模塊(移遠ec800k)連接mqtt

下面代碼是隨手寫的&#xff0c;沒有嚴謹測試僅供參考測試 uint8_t msgBuf[200]{"msg from mcu"}; uint8_t txBuf[250]{0}; uint16_t msgid0; uint16_t mqttTaskState0; uint16_t t100msCount0; uint8_t sendFlag10; uint8_t sendFlag20; void t100msTask1(void) { …

哈希表入門:用 C 語言實現簡單哈希表(開放尋址法解決沖突)

目錄 一、引言 二、代碼結構與核心概念解析 1. 數據結構定義 2. 初始化函數 initList 3. 哈希函數 hash 4. 插入函數 put&#xff08;核心邏輯&#xff09; 開放尋址法詳解&#xff1a; 三、主函數驗證與運行結果 1. 測試邏輯 2. 運行結果分析 四、完整代碼 五、優…