This commit is contained in:
2025-09-26 10:31:23 +08:00
commit 62e68ebcbb
87 changed files with 258646 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,123 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|c:\\users\\quella\\desktop\\dogandarmcontrol\\dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\videocaltulate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\videocaltulate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 5,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{eefa5220-e298-11d0-8f78-00a0c9110057}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "KeyControl.cs",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\KeyControl.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\KeyControl.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\KeyControl.cs",
"RelativeToolTip": "DogAndArmControl\\KeyControl.cs",
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-08T08:08:37.079Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Program.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\Program.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Program.cs",
"RelativeToolTip": "DogAndArmControl\\Program.cs",
"ViewState": "AgIAAAQAAAAAAAAAAAAnwBQAAAAMAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-08T05:13:52.832Z"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "VideoCaltulate.cs",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\VideoCaltulate.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\VideoCaltulate.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\VideoCaltulate.cs",
"RelativeToolTip": "DogAndArmControl\\VideoCaltulate.cs",
"ViewState": "AgIAAEYAAAAAAAAAAAAAwJYAAAAhAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-01T07:44:14.266Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Form1.cs",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\Form1.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
"RelativeToolTip": "DogAndArmControl\\Form1.cs",
"ViewState": "AgIAAEgBAAAAAAAAAAAAwE4BAABBAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-01T03:22:21.005Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Form1.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\Form1.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "DogAndArmControl\\Form1.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-01T03:16:18.914Z",
"EditorCaption": " [\u8BBE\u8BA1]"
}
]
},
{
"DockedWidth": 172,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:283709:0:{1a46fd64-28d5-0019-8eb3-17a02d419b53}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
}
]
}
]
}
]
}

View File

@@ -0,0 +1,123 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|c:\\users\\quella\\desktop\\dogandarmcontrol\\dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\form1.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\videocaltulate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\videocaltulate.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|C:\\Users\\Quella\\Desktop\\DogAndArmControl\\dogandarmcontrol\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}|DogAndArmControl\\DogAndArmControl.csproj|solutionrelative:dogandarmcontrol\\keycontrol.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 5,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{eefa5220-e298-11d0-8f78-00a0c9110057}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{34e76e81-ee4a-11d0-ae2e-00a0c90fffc3}"
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "KeyControl.cs",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\KeyControl.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\KeyControl.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\KeyControl.cs",
"RelativeToolTip": "DogAndArmControl\\KeyControl.cs",
"ViewState": "AgIAAAAAAAAAAAAAAADwvwAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-08T08:08:37.079Z"
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Program.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\Program.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Program.cs",
"RelativeToolTip": "DogAndArmControl\\Program.cs",
"ViewState": "AgIAAAQAAAAAAAAAAAAnwBQAAAAMAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-08T05:13:52.832Z"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "VideoCaltulate.cs",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\VideoCaltulate.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\VideoCaltulate.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\VideoCaltulate.cs",
"RelativeToolTip": "DogAndArmControl\\VideoCaltulate.cs",
"ViewState": "AgIAAEYAAAAAAAAAAAAAwJYAAAAhAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-01T07:44:14.266Z"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Form1.cs",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\Form1.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
"RelativeToolTip": "DogAndArmControl\\Form1.cs",
"ViewState": "AgIAAEgBAAAAAAAAAAAAwEsBAAAWAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-01T03:22:21.005Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Form1.cs [\u8BBE\u8BA1]",
"DocumentMoniker": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs",
"RelativeDocumentMoniker": "DogAndArmControl\\Form1.cs",
"ToolTip": "C:\\Users\\Quella\\Desktop\\DogAndArmControl\\DogAndArmControl\\Form1.cs [\u8BBE\u8BA1]",
"RelativeToolTip": "DogAndArmControl\\Form1.cs [\u8BBE\u8BA1]",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-07-01T03:16:18.914Z",
"EditorCaption": " [\u8BBE\u8BA1]"
}
]
},
{
"DockedWidth": 172,
"SelectedChildIndex": -1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:283709:0:{1a46fd64-28d5-0019-8eb3-17a02d419b53}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
}
]
}
]
}
]
}

22
DogAndArmControl.sln Normal file
View File

@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.12.35527.113
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DogAndArmControl", "DogAndArmControl\DogAndArmControl.csproj", "{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<DevExpress.LookAndFeel.Design.AppSettings>
<setting name="DPIAwarenessMode" serializeAs="String">
<value>System</value>
</setting>
<setting name="RegisterBonusSkins" serializeAs="String">
<value>True</value>
</setting>
</DevExpress.LookAndFeel.Design.AppSettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

View File

@@ -0,0 +1,105 @@
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{43AB93EE-E7D7-40BD-8329-7500C1C47BB7}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DogAndArmControl</RootNamespace>
<AssemblyName>DogAndArmControl</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.BonusSkins.v22.2" />
<Reference Include="DevExpress.Data.Desktop.v22.2" />
<Reference Include="DevExpress.Data.v22.2" />
<Reference Include="DevExpress.Utils.v22.2" />
<Reference Include="DevExpress.Sparkline.v22.2.Core" />
<Reference Include="DevExpress.XtraBars.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v22.2" />
<Reference Include="DevExpress.Printing.v22.2.Core" />
<Reference Include="DevExpress.Drawing.v22.2" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="KeyControl.cs" />
<Compile Include="ModernButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="VideoCaltulate.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="App.config" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

355
DogAndArmControl/Form1.Designer.cs generated Normal file
View File

@@ -0,0 +1,355 @@
namespace DogAndArmControl
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.sidePanel1 = new DevExpress.XtraEditors.SidePanel();
this.ArmStatus = new DevExpress.XtraEditors.LabelControl();
this.labelControl5 = new DevExpress.XtraEditors.LabelControl();
this.DogStatus = new DevExpress.XtraEditors.LabelControl();
this.labelControl3 = new DevExpress.XtraEditors.LabelControl();
this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
this.IpEdit = new DevExpress.XtraEditors.TextEdit();
this.PortEdit = new DevExpress.XtraEditors.TextEdit();
this.tabPane1 = new DevExpress.XtraBars.Navigation.TabPane();
this.tabNavigationPage1 = new DevExpress.XtraBars.Navigation.TabNavigationPage();
this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
this.button1 = new System.Windows.Forms.Button();
this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
this.tabNavigationPage2 = new DevExpress.XtraBars.Navigation.TabNavigationPage();
this.panelControl2 = new DevExpress.XtraEditors.PanelControl();
this.button2 = new System.Windows.Forms.Button();
this.labelControl4 = new DevExpress.XtraEditors.LabelControl();
this.ArmPort = new DevExpress.XtraEditors.TextEdit();
this.labelControl6 = new DevExpress.XtraEditors.LabelControl();
this.ArmIp = new DevExpress.XtraEditors.TextEdit();
this.ArmVideo = new System.Windows.Forms.PictureBox();
this.DogVideo = new System.Windows.Forms.PictureBox();
this.ModeLabel = new System.Windows.Forms.Label();
this.sidePanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.IpEdit.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.PortEdit.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tabPane1)).BeginInit();
this.tabPane1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.panelControl2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ArmPort.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ArmIp.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ArmVideo)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.DogVideo)).BeginInit();
this.SuspendLayout();
//
// sidePanel1
//
this.sidePanel1.Appearance.BackColor = System.Drawing.Color.Silver;
this.sidePanel1.Appearance.Options.UseBackColor = true;
this.sidePanel1.Controls.Add(this.ArmStatus);
this.sidePanel1.Controls.Add(this.labelControl5);
this.sidePanel1.Controls.Add(this.DogStatus);
this.sidePanel1.Controls.Add(this.labelControl3);
this.sidePanel1.Location = new System.Drawing.Point(-1, 0);
this.sidePanel1.Name = "sidePanel1";
this.sidePanel1.Size = new System.Drawing.Size(1212, 64);
this.sidePanel1.TabIndex = 0;
this.sidePanel1.Text = "sidePanel1";
//
// ArmStatus
//
this.ArmStatus.Appearance.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold);
this.ArmStatus.Appearance.ForeColor = System.Drawing.Color.Red;
this.ArmStatus.Appearance.Options.UseFont = true;
this.ArmStatus.Appearance.Options.UseForeColor = true;
this.ArmStatus.Location = new System.Drawing.Point(406, 31);
this.ArmStatus.Name = "ArmStatus";
this.ArmStatus.Size = new System.Drawing.Size(39, 14);
this.ArmStatus.TabIndex = 3;
this.ArmStatus.Text = "未连接";
//
// labelControl5
//
this.labelControl5.Appearance.Font = new System.Drawing.Font("楷体", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.labelControl5.Appearance.Options.UseFont = true;
this.labelControl5.Location = new System.Drawing.Point(242, 27);
this.labelControl5.Name = "labelControl5";
this.labelControl5.Size = new System.Drawing.Size(158, 19);
this.labelControl5.TabIndex = 2;
this.labelControl5.Text = "机械臂连接状态:";
//
// DogStatus
//
this.DogStatus.Appearance.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Bold);
this.DogStatus.Appearance.ForeColor = System.Drawing.Color.Red;
this.DogStatus.Appearance.Options.UseFont = true;
this.DogStatus.Appearance.Options.UseForeColor = true;
this.DogStatus.Location = new System.Drawing.Point(177, 31);
this.DogStatus.Name = "DogStatus";
this.DogStatus.Size = new System.Drawing.Size(39, 14);
this.DogStatus.TabIndex = 1;
this.DogStatus.Text = "未连接";
//
// labelControl3
//
this.labelControl3.Appearance.Font = new System.Drawing.Font("楷体", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.labelControl3.Appearance.Options.UseFont = true;
this.labelControl3.Location = new System.Drawing.Point(13, 27);
this.labelControl3.Name = "labelControl3";
this.labelControl3.Size = new System.Drawing.Size(158, 19);
this.labelControl3.TabIndex = 0;
this.labelControl3.Text = "机械狗连接状态:";
//
// labelControl1
//
this.labelControl1.Location = new System.Drawing.Point(55, 18);
this.labelControl1.Name = "labelControl1";
this.labelControl1.Size = new System.Drawing.Size(33, 14);
this.labelControl1.TabIndex = 3;
this.labelControl1.Text = "远程ip";
//
// IpEdit
//
this.IpEdit.Location = new System.Drawing.Point(94, 15);
this.IpEdit.Name = "IpEdit";
this.IpEdit.Size = new System.Drawing.Size(126, 20);
this.IpEdit.TabIndex = 2;
//
// PortEdit
//
this.PortEdit.Location = new System.Drawing.Point(94, 47);
this.PortEdit.Name = "PortEdit";
this.PortEdit.Size = new System.Drawing.Size(126, 20);
this.PortEdit.TabIndex = 4;
//
// tabPane1
//
this.tabPane1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.tabPane1.Appearance.Options.UseBackColor = true;
this.tabPane1.Controls.Add(this.tabNavigationPage1);
this.tabPane1.Controls.Add(this.tabNavigationPage2);
this.tabPane1.Location = new System.Drawing.Point(-1, 70);
this.tabPane1.Name = "tabPane1";
this.tabPane1.Pages.AddRange(new DevExpress.XtraBars.Navigation.NavigationPageBase[] {
this.tabNavigationPage1,
this.tabNavigationPage2});
this.tabPane1.RegularSize = new System.Drawing.Size(537, 444);
this.tabPane1.SelectedPage = this.tabNavigationPage1;
this.tabPane1.Size = new System.Drawing.Size(537, 444);
this.tabPane1.TabIndex = 1;
this.tabPane1.Text = "tabPane1";
//
// tabNavigationPage1
//
this.tabNavigationPage1.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.tabNavigationPage1.Appearance.Options.UseBackColor = true;
this.tabNavigationPage1.Caption = "机械狗";
this.tabNavigationPage1.Controls.Add(this.panelControl1);
this.tabNavigationPage1.Enabled = true;
this.tabNavigationPage1.Name = "tabNavigationPage1";
this.tabNavigationPage1.Size = new System.Drawing.Size(537, 411);
this.tabNavigationPage1.Paint += new System.Windows.Forms.PaintEventHandler(this.tabNavigationPage1_Paint);
//
// panelControl1
//
this.panelControl1.Controls.Add(this.button1);
this.panelControl1.Controls.Add(this.labelControl2);
this.panelControl1.Controls.Add(this.PortEdit);
this.panelControl1.Controls.Add(this.labelControl1);
this.panelControl1.Controls.Add(this.IpEdit);
this.panelControl1.Location = new System.Drawing.Point(3, 3);
this.panelControl1.Name = "panelControl1";
this.panelControl1.Size = new System.Drawing.Size(531, 76);
this.panelControl1.TabIndex = 7;
//
// button1
//
this.button1.BackColor = System.Drawing.Color.Blue;
this.button1.ForeColor = System.Drawing.Color.White;
this.button1.Location = new System.Drawing.Point(239, 18);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(97, 46);
this.button1.TabIndex = 7;
this.button1.Text = "连接";
this.button1.UseVisualStyleBackColor = false;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// labelControl2
//
this.labelControl2.Location = new System.Drawing.Point(41, 50);
this.labelControl2.Name = "labelControl2";
this.labelControl2.Size = new System.Drawing.Size(47, 14);
this.labelControl2.TabIndex = 6;
this.labelControl2.Text = "远程Port";
//
// tabNavigationPage2
//
this.tabNavigationPage2.Appearance.BackColor = System.Drawing.Color.LightGray;
this.tabNavigationPage2.Appearance.Options.UseBackColor = true;
this.tabNavigationPage2.Caption = "机械臂";
this.tabNavigationPage2.Controls.Add(this.panelControl2);
this.tabNavigationPage2.Enabled = true;
this.tabNavigationPage2.Name = "tabNavigationPage2";
this.tabNavigationPage2.Size = new System.Drawing.Size(537, 411);
this.tabNavigationPage2.Paint += new System.Windows.Forms.PaintEventHandler(this.tabNavigationPage2_Paint);
//
// panelControl2
//
this.panelControl2.Controls.Add(this.button2);
this.panelControl2.Controls.Add(this.labelControl4);
this.panelControl2.Controls.Add(this.ArmPort);
this.panelControl2.Controls.Add(this.labelControl6);
this.panelControl2.Controls.Add(this.ArmIp);
this.panelControl2.Location = new System.Drawing.Point(3, 3);
this.panelControl2.Name = "panelControl2";
this.panelControl2.Size = new System.Drawing.Size(531, 76);
this.panelControl2.TabIndex = 8;
//
// button2
//
this.button2.BackColor = System.Drawing.Color.Blue;
this.button2.ForeColor = System.Drawing.Color.White;
this.button2.Location = new System.Drawing.Point(239, 18);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(97, 46);
this.button2.TabIndex = 8;
this.button2.Text = "连接";
this.button2.UseVisualStyleBackColor = false;
//
// labelControl4
//
this.labelControl4.Location = new System.Drawing.Point(41, 50);
this.labelControl4.Name = "labelControl4";
this.labelControl4.Size = new System.Drawing.Size(47, 14);
this.labelControl4.TabIndex = 6;
this.labelControl4.Text = "远程Port";
//
// ArmPort
//
this.ArmPort.Location = new System.Drawing.Point(94, 47);
this.ArmPort.Name = "ArmPort";
this.ArmPort.Size = new System.Drawing.Size(126, 20);
this.ArmPort.TabIndex = 4;
//
// labelControl6
//
this.labelControl6.Location = new System.Drawing.Point(55, 18);
this.labelControl6.Name = "labelControl6";
this.labelControl6.Size = new System.Drawing.Size(33, 14);
this.labelControl6.TabIndex = 3;
this.labelControl6.Text = "远程ip";
//
// ArmIp
//
this.ArmIp.Location = new System.Drawing.Point(94, 15);
this.ArmIp.Name = "ArmIp";
this.ArmIp.Size = new System.Drawing.Size(126, 20);
this.ArmIp.TabIndex = 2;
//
// ArmVideo
//
this.ArmVideo.BackColor = System.Drawing.Color.Black;
this.ArmVideo.Location = new System.Drawing.Point(539, 70);
this.ArmVideo.Name = "ArmVideo";
this.ArmVideo.Size = new System.Drawing.Size(669, 444);
this.ArmVideo.TabIndex = 2;
this.ArmVideo.TabStop = false;
//
// DogVideo
//
this.DogVideo.BackColor = System.Drawing.Color.Black;
this.DogVideo.Location = new System.Drawing.Point(444, 520);
this.DogVideo.Name = "DogVideo";
this.DogVideo.Size = new System.Drawing.Size(764, 536);
this.DogVideo.TabIndex = 3;
this.DogVideo.TabStop = false;
//
// ModeLabel
//
this.ModeLabel.AutoSize = true;
this.ModeLabel.Location = new System.Drawing.Point(476, 33);
this.ModeLabel.Name = "ModeLabel";
this.ModeLabel.Size = new System.Drawing.Size(38, 14);
this.ModeLabel.TabIndex = 4;
this.ModeLabel.Text = "label1";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1231, 1068);
this.Controls.Add(this.ModeLabel);
this.Controls.Add(this.DogVideo);
this.Controls.Add(this.ArmVideo);
this.Controls.Add(this.tabPane1);
this.Controls.Add(this.sidePanel1);
this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
this.Name = "Form1";
this.Text = "Form1";
this.sidePanel1.ResumeLayout(false);
this.sidePanel1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.IpEdit.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.PortEdit.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.tabPane1)).EndInit();
this.tabPane1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.panelControl2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.ArmPort.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.ArmIp.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.ArmVideo)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.DogVideo)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private DevExpress.XtraEditors.SidePanel sidePanel1;
private DevExpress.XtraBars.Navigation.TabPane tabPane1;
private DevExpress.XtraBars.Navigation.TabNavigationPage tabNavigationPage1;
private DevExpress.XtraBars.Navigation.TabNavigationPage tabNavigationPage2;
private DevExpress.XtraEditors.LabelControl labelControl1;
private DevExpress.XtraEditors.TextEdit IpEdit;
private DevExpress.XtraEditors.TextEdit PortEdit;
private DevExpress.XtraEditors.PanelControl panelControl1;
private DevExpress.XtraEditors.LabelControl labelControl2;
private System.Windows.Forms.Button button1;
private DevExpress.XtraEditors.LabelControl ArmStatus;
private DevExpress.XtraEditors.LabelControl labelControl5;
private DevExpress.XtraEditors.LabelControl DogStatus;
private DevExpress.XtraEditors.LabelControl labelControl3;
private DevExpress.XtraEditors.PanelControl panelControl2;
private System.Windows.Forms.Button button2;
private DevExpress.XtraEditors.LabelControl labelControl4;
private DevExpress.XtraEditors.TextEdit ArmPort;
private DevExpress.XtraEditors.LabelControl labelControl6;
private DevExpress.XtraEditors.TextEdit ArmIp;
private System.Windows.Forms.PictureBox ArmVideo;
private System.Windows.Forms.PictureBox DogVideo;
private System.Windows.Forms.Label ModeLabel;
}
}

423
DogAndArmControl/Form1.cs Normal file
View File

@@ -0,0 +1,423 @@

using DevExpress.Utils.Extensions;
using DevExpress.XtraPrinting.Preview;
using RoboticControlApp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
using DevExpress.XtraPrinting.Native.WebClientUIControl;
namespace DogAndArmControl
{
public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
private TcpClient mergedVideoClient; // 用于接收合并视频流的客户端
private NetworkStream mergedVideoStream; // 合并视频流
private Task videoReceiveTask;
// private ClientWebSocket webSocket; // 移除WebSocket
private CancellationTokenSource videoCancellationTokenSource;
private CancellationTokenSource cancellationTokenSource;
private TcpClient controlClient; // 新增用于控制的TCP客户端
private NetworkStream controlStream; // 新增用于控制的NetworkStream
private string currentControlMode = "DOG"; // 新增当前控制模式默认为DOG
private VideoCaltulate vic = new VideoCaltulate();
private bool Dogbutton = false;
private bool Armbutton = false;
private System.Windows.Forms.Timer keyRepeatTimer;
private Keys currentKey;
// 机械狗控制按钮
private ModernButton wDogButton, sDogButton, aDogButton, dDogButton; // 移动按钮
private ModernButton qDogButton, eDogButton, lDogButton, zDogButton, cDogButton, rDogButton, tDogButton, fDogButton; // 其他功能按钮
public Form1()
{
InitializeComponent();
Init();
}
private void Init()
{
IpEdit.Text = "192.168.0.123";
PortEdit.Text = "8088";
ArmIp.Text = "192.168.123.18"; // 机械臂IP现在也用于TCP控制
ArmPort.Text = "8000"; // 机械臂端口现在也用于TCP控制
DogVideo.SizeMode = PictureBoxSizeMode.Zoom;
ArmVideo.SizeMode = PictureBoxSizeMode.Zoom;
IpEdit.ReadOnly = true;
PortEdit.ReadOnly = true;
ArmIp.ReadOnly = true;
ArmPort.ReadOnly = true;
this.KeyDown += Form1_KeyDown;
this.KeyUp += Form1_KeyUp;
this.KeyPreview = true;
UpdateModeDisplay(); // 初始化模式显示
tabPane1.SelectedPageChanged += TabPane1_SelectedPageChanged; // 监听标签页切换事件
}
private async void button1_Click(object sender, EventArgs e)
{
try
{
if (!Dogbutton)
{
IpEdit.ReadOnly = true;
PortEdit.ReadOnly = true;
// 只建立一个TCP连接用于接收合并视频流
mergedVideoClient = new TcpClient();
await mergedVideoClient.ConnectAsync(IpEdit.Text, Convert.ToInt32(PortEdit.Text));
mergedVideoStream = mergedVideoClient.GetStream();
// 新增建立控制TCP连接
controlClient = new TcpClient();
await controlClient.ConnectAsync(ArmIp.Text, Convert.ToInt32(ArmPort.Text)); // 使用机械臂的IP和端口进行控制连接
controlStream = mergedVideoClient.GetStream();
// 自动向服务端发送"MERGED"表示已连接
byte[] mergedData = Encoding.ASCII.GetBytes("MERGED");
await controlStream.WriteAsync(mergedData, 0, mergedData.Length);
videoCancellationTokenSource?.Cancel();
videoCancellationTokenSource = new CancellationTokenSource();
// 启动接收合并视频流的任务
videoReceiveTask = Task.Run(() => vic.ReceiveVideoFramesAsync(
videoCancellationTokenSource.Token,
mergedVideoStream,
ArmVideo,
false));
DogStatus.Text = "已连接";
DogStatus.ForeColor = Color.Green;
Dogbutton = true;
button1.Text = "断开";
button1.BackColor = Color.Red;
DogVideo.BackColor = Color.Black;
ArmVideo.BackColor = Color.Black;
// 初始模式设置为DOG并发送CHANGE指令
currentControlMode = "DOG";
await SendChangeModeCommand("DOG");
UpdateModeDisplay();
}
else
{
IpEdit.ReadOnly = false;
PortEdit.ReadOnly = false;
Dogbutton = false;
DogStatus.Text = "连接";
DogStatus.ForeColor = Color.Red;
button1.Text = "连接";
button1.BackColor = Color.Blue;
videoCancellationTokenSource?.Cancel();
mergedVideoClient?.Close();
controlClient?.Close(); // 关闭控制连接
Init();
}
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
}
// 移除原有的button2_Click (WebSocket连接机械臂)
//private void button2_Click(object sender, EventArgs e)
//{
// try
// {
// if (!Armbutton)
// {
// ArmIp.ReadOnly = true;
// ArmPort.ReadOnly = true;
// Armbutton = true;
// string wsUrl = $"ws://{ArmIp.Text}:{ArmPort.Text}/ws/control";
// cancellationTokenSource = new CancellationTokenSource();
// webSocket = new ClientWebSocket();
// webSocket?.ConnectAsync(new Uri(wsUrl), cancellationTokenSource.Token);
// button2.BackColor = Color.Green;
// ArmStatus.Text = "已连接";
// ArmStatus.ForeColor = Color.Green;
// button2.Text = "断开";
// button2.BackColor = Color.Red;
// }
// else
// {
// ArmIp.ReadOnly = false;
// ArmPort.ReadOnly = false;
// Armbutton = false;
// ArmStatus.Text = "未连接";
// button2.Text = "断开";
// button2.BackColor = Color.Blue;
// ArmStatus.ForeColor = Color.Red;
// button2.BackColor = Color.Blue;
// webSocket?.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
// webSocket?.Dispose();
// }
// }
// catch (Exception) { }
//}
private async void Form1_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (keyRepeatTimer == null)
{
currentKey = e.KeyCode;
keyRepeatTimer = new System.Windows.Forms.Timer();
keyRepeatTimer.Interval = 100;
keyRepeatTimer.Tick += async (s, args) => // 修改为async
{
string key = currentKey.ToString().ToLower();
if (e.KeyCode == Keys.Menu) return;
if (controlStream != null && controlClient.Connected)
{
if (currentControlMode == "ARM") // 根据当前模式发送指令
{
string Armkey = MapKeyToCommand(e.KeyCode);
if (Armkey != null)
{
await HandleArmKey("down", Armkey); // 发送按下事件到机械臂
}
}
else if (currentControlMode == "DOG")
{
byte[] buffer = Encoding.UTF8.GetBytes(key.ToUpper());
await controlStream.WriteAsync(buffer, 0, buffer.Length); // 使用统一的controlStream发送
// Thread.Sleep(10); // 确保发送间隔对于TCP异步发送这个可能不需要或需要更精细控制
}
}
};
keyRepeatTimer.Start();
}
}
catch (IOException) { }
}
private async void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (controlStream != null && controlClient.Connected)
{
if (currentControlMode == "DOG")
{
byte[] buffer = Encoding.ASCII.GetBytes("L");
// if (mergedVideoStream != null) // 使用统一的controlStream
// {
// Task.Run(() => // 直接await
// {
for (int ii = 0; ii < 5; ii++)
{
await controlStream.WriteAsync(buffer, 0, buffer.Length);
// Thread.Sleep(10);
}
// });
// }
}
else if (currentControlMode == "ARM")
{
string key = MapKeyToCommand(e.KeyCode);
if (key != null)
{
await HandleArmKey("up", key); // 发送松开事件到机械臂
}
}
}
if (keyRepeatTimer != null)
{
keyRepeatTimer.Stop();
keyRepeatTimer.Dispose();
keyRepeatTimer = null;
}
}
// 映射按键到机械臂控制命令
private string MapKeyToCommand(Keys keyCode)
{
switch (keyCode)
{
case Keys.W: return "W"; // 前进
case Keys.S: return "S"; // 后退
case Keys.A: return "A"; // 左移
case Keys.D: return "D"; // 右移
case Keys.I: return "I"; // 上升
case Keys.K: return "K"; // 下降
case Keys.M: return "M"; // Roll +(右转)
case Keys.N: return "N"; // Roll -(左转)
case Keys.L: return "L"; // Pitch +(前倾)
case Keys.OemPeriod: return "."; // Pitch -(后倾)
case Keys.Oemcomma: return ","; // Yaw +(顺时针)
case Keys.OemQuestion: return "/"; // Yaw -(逆时针)
case Keys.O: return "O"; // 夹爪打开
case Keys.C: return "C"; // 夹爪关闭
case Keys.U: return "U"; // 复位
case Keys.J: return "J"; // 重力补偿
case Keys.P: return "P"; // 退出
case Keys.F: return "F"; //预设
case Keys.G: return "g"; //自动丢入篮筐
default: return null; // 如果按下的键不在控制范围内,返回 null
}
}
// 发送控制指令到机械臂 (现在通过TCP发送JSON)
private async Task HandleArmKey(string type, string key)
{
if (controlStream != null && controlClient.Connected)
{
//var msg = JsonConvert.SerializeObject(new { key_events = new[] { new { key, type } } });
var buffer = Encoding.UTF8.GetBytes(key.ToUpper()); // 将控制命令转为字节数组
await controlStream.WriteAsync(buffer, 0, buffer.Length); // 通过TCP发送消息
}
}
// 新增:更新模式显示
private void UpdateModeDisplay()
{
// 假设你有一个Label控件用于显示模式例如 modeLabel
// 如果没有你需要在WinForms设计器中添加一个Label控件并命名为modeLabel
// 例如this.modeLabel.Text = $"mode:{currentControlMode}";
// 这里暂时使用Debug.WriteLine代替实际应用中请替换为UI控件
Debug.WriteLine($"mode:{currentControlMode}");
// 假设ModeLabel是你的Label控件
if (ModeLabel != null)
{
ModeLabel.Text = $"mode:{currentControlMode}";
}
}
// 新增:标签页切换事件处理
private async void TabPane1_SelectedPageChanged(object sender, DevExpress.XtraBars.Navigation.SelectedPageChangedEventArgs e)
{
if (controlStream != null && controlClient.Connected)
{
if (e.Page == tabNavigationPage1) // 切换到机械狗标签页
{
currentControlMode = "DOG";
await SendChangeModeCommand("DOG");
}
else if (e.Page == tabNavigationPage2) // 切换到机械臂标签页
{
currentControlMode = "ARM";
await SendChangeModeCommand("ARM");
}
UpdateModeDisplay();
}
}
// 新增:发送切换模式命令
private async Task SendChangeModeCommand(string mode)
{
if (controlStream != null && controlClient.Connected)
{
byte[] changeCommand = Encoding.ASCII.GetBytes($"CHANGE:{mode}"); // 发送 "CHANGE:DOG" 或 "CHANGE:ARM"
await controlStream.WriteAsync(changeCommand, 0, changeCommand.Length);
Debug.WriteLine($"Sent CHANGE command: CHANGE:{mode}");
}
}
//加载机械狗的控件
private void tabNavigationPage1_Paint(object sender, PaintEventArgs e)
{
//移动控制按钮
wDogButton = new ModernButton("W", "前进");
wDogButton.Location = new Point(150, 80);
wDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(wDogButton);
//移动控制按钮
sDogButton = new ModernButton("S", "后退");
sDogButton.Location = new Point(150, 150);
sDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(sDogButton);
//移动控制按钮
aDogButton = new ModernButton("A", "左走");
aDogButton.Location = new Point(80, 150);
aDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(aDogButton);
dDogButton = new ModernButton("D", "右走");
dDogButton.Location = new Point(220, 150);
dDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(dDogButton);
qDogButton = new ModernButton("Q", "左转");
qDogButton.Location = new Point(80, 220);
qDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(qDogButton);
eDogButton = new ModernButton("E", "右转");
eDogButton.Location = new Point(220, 220);
eDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(eDogButton);
zDogButton = new ModernButton("Z", "趴下");
zDogButton.Location = new Point(80, 290);
zDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(zDogButton);
tDogButton = new ModernButton("T", "站起");
tDogButton.Location = new Point(220, 290);
tDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(tDogButton);
lDogButton = new ModernButton("F", "解除锁定");
lDogButton.Location = new Point(150, 340);
lDogButton.Size = new Size(60, 60);
tabNavigationPage1.AddControl(lDogButton);
}
//加载机械臂的控件
private void tabNavigationPage2_Paint(object sender, PaintEventArgs e)
{
//移动控制按钮
wDogButton = new ModernButton("W", "前进");
wDogButton.Location = new Point(150, 80);
wDogButton.Size = new Size(60, 60);
tabNavigationPage2.AddControl(wDogButton);
//移动控制按钮
sDogButton = new ModernButton("S", "后退");
sDogButton.Location = new Point(150, 150);
sDogButton.Size = new Size(60, 60);
tabNavigationPage2.AddControl(sDogButton);
//移动控制按钮
aDogButton = new ModernButton("A", "左走");
aDogButton.Location = new Point(80, 150);
aDogButton.Size = new Size(60, 60);
tabNavigationPage2.AddControl(aDogButton);
dDogButton = new ModernButton("D", "右走");
dDogButton.Location = new Point(220, 150);
dDogButton.Size = new Size(60, 60);
tabNavigationPage2.AddControl(dDogButton);
}
}
}

174
DogAndArmControl/Form1.resx Normal file
View File

@@ -0,0 +1,174 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="sidePanel1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="ArmStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>721, 55</value>
</metadata>
<metadata name="labelControl5.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>588, 55</value>
</metadata>
<metadata name="DogStatus.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>473, 55</value>
</metadata>
<metadata name="labelControl3.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>340, 55</value>
</metadata>
<metadata name="labelControl1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>207, 55</value>
</metadata>
<metadata name="IpEdit.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>118, 55</value>
</metadata>
<metadata name="PortEdit.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 55</value>
</metadata>
<metadata name="tabPane1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1123, 17</value>
</metadata>
<metadata name="tabNavigationPage1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>950, 17</value>
</metadata>
<metadata name="panelControl1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>813, 17</value>
</metadata>
<metadata name="labelControl2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>680, 17</value>
</metadata>
<metadata name="tabNavigationPage2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>507, 17</value>
</metadata>
<metadata name="panelControl2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>370, 17</value>
</metadata>
<metadata name="labelControl4.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>237, 17</value>
</metadata>
<metadata name="ArmPort.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>134, 17</value>
</metadata>
<metadata name="labelControl6.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>835, 55</value>
</metadata>
<metadata name="ArmIp.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>968, 55</value>
</metadata>
</root>

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DogAndArmControl
{
public class KeyControl
{
}
}

View File

@@ -0,0 +1,131 @@
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
namespace RoboticControlApp
{
public class ModernButton : Button
{
private bool isPressed = false;
private string description;
private Color normalColor = Color.FromArgb(245, 245, 245);
private Color hoverColor = Color.FromArgb(230, 230, 230);
private Color pressedColor = Color.FromArgb(0, 120, 215);
private Color borderColor = Color.FromArgb(200, 200, 200);
public ModernButton(string key, string desc)
{
description = desc;
Text = key;
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.ResizeRedraw, true);
FlatStyle = FlatStyle.Flat;
FlatAppearance.BorderSize = 0;
Font = new Font("Microsoft YaHei", 10F, FontStyle.Bold);
BackColor = normalColor;
ForeColor = Color.Black;
Cursor = Cursors.Hand;
}
public void SetPressed(bool pressed)
{
isPressed = pressed;
Invalidate();
}
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.AntiAlias;
// 确定颜色
Color bgColor = isPressed ? pressedColor : (ClientRectangle.Contains(PointToClient(MousePosition)) ? hoverColor : normalColor);
Color textColor = isPressed ? Color.White : Color.Black;
// 绘制背景
using (SolidBrush brush = new SolidBrush(bgColor))
{
g.FillRoundedRectangle(brush, ClientRectangle, 8);
}
// 绘制边框
using (Pen pen = new Pen(isPressed ? pressedColor : borderColor, 1))
{
g.DrawRoundedRectangle(pen, new Rectangle(0, 0, Width - 1, Height - 1), 8);
}
// 绘制按键文本
using (SolidBrush textBrush = new SolidBrush(textColor))
{
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
Font keyFont = new Font("Microsoft YaHei", 12F, FontStyle.Bold);
g.DrawString(Text, keyFont, textBrush, new RectangleF(0, 0, Width, Height * 0.6f), sf);
if (!string.IsNullOrEmpty(description))
{
Font descFont = new Font("Microsoft YaHei", 8F);
g.DrawString(description, descFont, textBrush, new RectangleF(0, Height * 0.6f, Width, Height * 0.4f), sf);
}
}
// 绘制按下效果
if (isPressed)
{
using (SolidBrush shadowBrush = new SolidBrush(Color.FromArgb(50, 0, 0, 0)))
{
g.FillRoundedRectangle(shadowBrush, new Rectangle(2, 2, Width - 4, Height - 4), 6);
}
}
}
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
if (!isPressed) Invalidate();
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
if (!isPressed) Invalidate();
}
}
// 扩展方法用于绘制圆角矩形
public static class GraphicsExtensions
{
public static void FillRoundedRectangle(this Graphics graphics, Brush brush, Rectangle rect, int radius)
{
using (GraphicsPath path = CreateRoundedRectanglePath(rect, radius))
{
graphics.FillPath(brush, path);
}
}
public static void DrawRoundedRectangle(this Graphics graphics, Pen pen, Rectangle rect, int radius)
{
using (GraphicsPath path = CreateRoundedRectanglePath(rect, radius))
{
graphics.DrawPath(pen, path);
}
}
private static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int radius)
{
GraphicsPath path = new GraphicsPath();
int diameter = radius * 2;
path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
path.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
path.CloseFigure();
return path;
}
}
}

View File

@@ -0,0 +1,24 @@
using DevExpress.LookAndFeel;
using DevExpress.Skins;
using DevExpress.UserSkins;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace DogAndArmControl
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

View File

@@ -0,0 +1,32 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DogAndArmControl")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DogAndArmControl")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("9006f149-aa49-4b8e-ba69-386d945fa738")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18034
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace DogAndArmControl.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DogAndArmControl.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0"></xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
<xsd:attribute name="type" type="xsd:string"></xsd:attribute>
<xsd:attribute name="mimetype" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string"></xsd:attribute>
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"></xsd:element>
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"></xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1"></xsd:attribute>
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"></xsd:attribute>
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"></xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"></xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18034
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace DogAndArmControl.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,2 @@
DevExpress.XtraBars.Navigation.TileNavPane, DevExpress.XtraBars.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v22.2, Version=22.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -0,0 +1,333 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DogAndArmControl
{
public class VideoCaltulate
{
private MemoryStream imageBuffer = new MemoryStream(); // 图像数据缓冲区
private byte[] videoBuffer = new byte[1400]; // 视频数据缓冲区
private int videoWidth;
private int videoHeight;
// 原有的单独视频流接收方法(保留兼容性)
public async Task ReceiveVideoFramesAsync(CancellationToken cancellationToken, NetworkStream videoStream, PictureBox VideoBox, bool flag)
{
try
{
while (!cancellationToken.IsCancellationRequested)
{
try
{
// 接收4字节的图像大小信息
int sizeBufferSize = 4;
byte[] sizeBuffer = new byte[sizeBufferSize];
int totalRead = 0;
while (totalRead < sizeBufferSize && !cancellationToken.IsCancellationRequested)
{
int read = await videoStream.ReadAsync(sizeBuffer, totalRead, sizeBufferSize - totalRead, cancellationToken);
if (read == 0) break;
totalRead += read;
}
if (totalRead != sizeBufferSize || cancellationToken.IsCancellationRequested)
{
throw new IOException("未接收到完整的图像大小信息");
}
int imageSize = BitConverter.ToInt32(sizeBuffer, 0);
if (imageSize <= 0 || imageSize > 20 * 1024 * 1024)
{
Debug.WriteLine($"Invalid image size: {imageSize} bytes. Skipping frame.");
continue;
}
// 接收图像数据
imageBuffer.SetLength(0); // 清空缓冲区
int bytesRead = 0;
while (bytesRead < imageSize && !cancellationToken.IsCancellationRequested)
{
int chunkSize = Math.Min(videoBuffer.Length, imageSize - bytesRead);
int read = await videoStream.ReadAsync(videoBuffer, 0, chunkSize, cancellationToken);
if (read == 0) break;
imageBuffer.Write(videoBuffer, 0, read);
bytesRead += read;
}
if (bytesRead != imageSize || cancellationToken.IsCancellationRequested)
{
throw new IOException($"未接收到完整的图像数据,预期: {imageSize}, 实际: {bytesRead}");
}
// 在UI线程上异步更新图像
await Task.Run(() => ProcessImageData(VideoBox, flag));
}
catch (Exception ex)
{
break;
}
}
}
catch (Exception) { }
}
// 新增接收合并视频流并分割显示到两个PictureBox的方法
public async Task ReceiveMergedVideoFramesAsync(CancellationToken cancellationToken, NetworkStream videoStream, PictureBox dogVideoBox, PictureBox armVideoBox)
{
try
{
while (!cancellationToken.IsCancellationRequested)
{
try
{
// 接收4字节的图像大小信息
int sizeBufferSize = 4;
byte[] sizeBuffer = new byte[sizeBufferSize];
int totalRead = 0;
while (totalRead < sizeBufferSize && !cancellationToken.IsCancellationRequested)
{
int read = await videoStream.ReadAsync(sizeBuffer, totalRead, sizeBufferSize - totalRead, cancellationToken);
if (read == 0) break;
totalRead += read;
}
int imageSize = BitConverter.ToInt32(sizeBuffer, 0);
if (imageSize <= 0 || imageSize > 20 * 1024 * 1024)
{
Debug.WriteLine($"Invalid image size: {imageSize} bytes. Skipping frame.");
continue;
}
// 接收图像数据
imageBuffer.SetLength(0); // 清空缓冲区
int bytesRead = 0;
while (bytesRead < imageSize && !cancellationToken.IsCancellationRequested)
{
int chunkSize = Math.Min(videoBuffer.Length, imageSize - bytesRead);
int read = await videoStream.ReadAsync(videoBuffer, 0, chunkSize, cancellationToken);
if (read == 0) break;
imageBuffer.Write(videoBuffer, 0, read);
bytesRead += read;
}
if (bytesRead != imageSize || cancellationToken.IsCancellationRequested)
{
throw new IOException($"未接收到完整的图像数据,预期: {imageSize}, 实际: {bytesRead}");
}
// 处理合并后的图像数据并分割显示
//await Task.Run(() => ProcessMergedImageData(dogVideoBox, armVideoBox));
await Task.Run(() => ProcessImageData(armVideoBox));
}
catch (Exception ex)
{
Debug.WriteLine($"Error receiving merged video frame: {ex.Message}");
break;
}
}
}
catch (Exception ex)
{
Debug.WriteLine($"Error in ReceiveMergedVideoFramesAsync: {ex.Message}");
}
}
// 处理合并后的图像数据并分割显示到两个PictureBox
private void ProcessMergedImageData(PictureBox dogVideoBox, PictureBox armVideoBox)
{
try
{
imageBuffer.Position = 0;
using (var mergedImage = Image.FromStream(imageBuffer))
{
// 获取合并图像的尺寸
int mergedWidth = mergedImage.Width;
int mergedHeight = mergedImage.Height;
// 计算分割点(假设是横向拼接,左右各占一半)
int halfWidth = mergedWidth / 2;
// 创建两个分割后的图像
Bitmap dogImage = new Bitmap(halfWidth, mergedHeight);
Bitmap armImage = new Bitmap(halfWidth, mergedHeight);
using (Graphics dogGraphics = Graphics.FromImage(dogImage))
using (Graphics armGraphics = Graphics.FromImage(armImage))
{
// 分割左半部分给机械狗视频
Rectangle dogSourceRect = new Rectangle(0, 0, halfWidth, mergedHeight);
Rectangle dogDestRect = new Rectangle(0, 0, halfWidth, mergedHeight);
dogGraphics.DrawImage(mergedImage, dogDestRect, dogSourceRect, GraphicsUnit.Pixel);
// 分割右半部分给机械臂视频
Rectangle armSourceRect = new Rectangle(halfWidth, 0, halfWidth, mergedHeight);
Rectangle armDestRect = new Rectangle(0, 0, halfWidth, mergedHeight);
armGraphics.DrawImage(mergedImage, armDestRect, armSourceRect, GraphicsUnit.Pixel);
}
// 在UI线程上更新两个PictureBox
UpdatePictureBox(dogVideoBox, dogImage, false);
UpdatePictureBox(armVideoBox, armImage, true); // 机械臂视频需要旋转180度
}
}
catch (Exception ex)
{
Debug.WriteLine($"Error processing merged image data: {ex.Message}");
}
}
// 更新单个PictureBox的辅助方法
private void UpdatePictureBox(PictureBox pictureBox, Bitmap image, bool rotateImage)
{
if (pictureBox.InvokeRequired)
{
pictureBox.BeginInvoke(new Action(() =>
{
try
{
if (pictureBox.Image != null)
{
pictureBox.Image.Dispose();
}
Bitmap displayImage = new Bitmap(image);
if (rotateImage)
{
displayImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
}
pictureBox.Image = displayImage;
pictureBox.Refresh();
}
catch (Exception ex)
{
Debug.WriteLine($"Error updating PictureBox: {ex.Message}");
}
}));
}
else
{
try
{
if (pictureBox.Image != null)
{
pictureBox.Image.Dispose();
}
Bitmap displayImage = new Bitmap(image);
if (rotateImage)
{
displayImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
}
pictureBox.Image = displayImage;
pictureBox.Refresh();
}
catch (Exception ex)
{
Debug.WriteLine($"Error updating PictureBox: {ex.Message}");
}
}
}
// 原有的单独图像处理方法(保留兼容性)
public void ProcessImageData(PictureBox videoPictureBox, bool flag = false)
{
try
{
imageBuffer.Position = 0;
if (videoPictureBox.InvokeRequired)
{
videoPictureBox.BeginInvoke(new Action(() =>
{
try
{
if (videoPictureBox.Image != null)
{
videoPictureBox.Image.Dispose();
}
using (var tempImage = Image.FromStream(imageBuffer))
{
// 如果需要旋转则旋转180度
Bitmap displayedImage = new Bitmap(tempImage);
if (flag)
{
displayedImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
}
// 显示图像
videoPictureBox.Image = displayedImage;
// 更新分辨率信息
videoWidth = displayedImage.Width;
videoHeight = displayedImage.Height;
}
videoPictureBox.Refresh();
}
catch (Exception ex)
{
// Handle any exceptions (e.g., image load failure)
Debug.WriteLine($"Error processing image: {ex.Message}");
}
}));
}
else
{
try
{
if (videoPictureBox.Image != null)
{
videoPictureBox.Image.Dispose();
}
using (var tempImage = Image.FromStream(imageBuffer))
{
Bitmap displayedImage = new Bitmap(tempImage);
if (flag)
{
displayedImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
}
videoPictureBox.Image = displayedImage;
videoWidth = displayedImage.Width;
videoHeight = displayedImage.Height;
}
videoPictureBox.Refresh();
}
catch (Exception ex)
{
// Handle any exceptions (e.g., image load failure)
Debug.WriteLine($"Error processing image: {ex.Message}");
}
}
}
catch (Exception ex)
{
// Handle any outer exceptions
Debug.WriteLine($"Error processing image data: {ex.Message}");
}
}
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,445 @@
<?xml version="1.0" encoding="utf-8"?>
<doc>
<assembly>
<name>DevExpress.Sparkline.v22.2.Core</name>
</assembly>
<members>
<member name="N:DevExpress.Sparkline">
<summary>
<para>Contains classes required for DevExpress sparklines.</para>
</summary>
</member>
<member name="T:DevExpress.Sparkline.AreaSparklineView">
<summary>
<para>The Area sparkline view.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.AreaSparklineView.#ctor">
<summary>
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> class with the default settings.</para>
</summary>
</member>
<member name="P:DevExpress.Sparkline.AreaSparklineView.AreaOpacity">
<summary>
<para>Specifies the opacity (0-255) of the area sparkline.</para>
</summary>
<value>A <see cref="T:System.Byte"/> value from 0 (transparent) to 255 (opaque).</value>
</member>
<member name="M:DevExpress.Sparkline.AreaSparklineView.Assign(DevExpress.Sparkline.SparklineViewBase)">
<summary>
<para>Copies all the settings from the <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> object passed as the parameter.</para>
</summary>
<param name="view">A <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> object (which is the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> descendant) whose settings are assigned to the current object. If null (Nothing in Visual Basic), then a <see cref="T:System.ArgumentNullException"/> will be thrown.</param>
</member>
<member name="P:DevExpress.Sparkline.AreaSparklineView.Type">
<summary>
<para>Gets the type of the sparkline view.</para>
</summary>
<value>Always <see cref="F:DevExpress.Sparkline.SparklineViewType.Area"/>.</value>
</member>
<member name="M:DevExpress.Sparkline.AreaSparklineView.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
<summary>
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> object.</para>
</summary>
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
</member>
<member name="T:DevExpress.Sparkline.BarSparklineView">
<summary>
<para>The Bar sparkline view.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.BarSparklineView.#ctor">
<summary>
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.BarSparklineView"/> class with the default settings.</para>
</summary>
</member>
<member name="P:DevExpress.Sparkline.BarSparklineView.Type">
<summary>
<para>Gets the type of the sparkline view.</para>
</summary>
<value>Always <see cref="F:DevExpress.Sparkline.SparklineViewType.Bar"/>.</value>
</member>
<member name="M:DevExpress.Sparkline.BarSparklineView.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
<summary>
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.BarSparklineView"/> object.</para>
</summary>
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
</member>
<member name="T:DevExpress.Sparkline.BarSparklineViewBase">
<summary>
<para>The base for Bar and WinLoss sparkline views.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.BarSparklineViewBase.Assign(DevExpress.Sparkline.SparklineViewBase)">
<summary>
<para>Copies all the settings from the <see cref="T:DevExpress.Sparkline.BarSparklineViewBase"/> object passed as the parameter.</para>
</summary>
<param name="view">A <see cref="T:DevExpress.Sparkline.BarSparklineViewBase"/> object (which is the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> descendant) whose settings are assigned to the current object. If null (Nothing in Visual Basic), then a <see cref="T:System.ArgumentNullException"/> will be thrown.</param>
</member>
<member name="P:DevExpress.Sparkline.BarSparklineViewBase.BarDistance">
<summary>
<para>Specifies the distance between two bars of a bar sparkline.</para>
</summary>
<value>An integer value (in pixels).</value>
</member>
<member name="T:DevExpress.Sparkline.ISparklineViewVisitor">
<summary>
<para>Interface implementing the Visitor pattern.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.ISparklineViewVisitor.Visit(DevExpress.Sparkline.AreaSparklineView)">
<summary>
<para>Performs the operation as required by the Visitor and the View, as defined in the Visitor pattern.</para>
</summary>
<param name="view">An <see cref="T:DevExpress.Sparkline.AreaSparklineView"/> object for which the operation is performed.</param>
</member>
<member name="M:DevExpress.Sparkline.ISparklineViewVisitor.Visit(DevExpress.Sparkline.BarSparklineView)">
<summary>
<para>Performs the operation as required by the Visitor and the View, as defined in the Visitor pattern.</para>
</summary>
<param name="view">An <see cref="T:DevExpress.Sparkline.BarSparklineView"/> object for which the operation is performed.</param>
</member>
<member name="M:DevExpress.Sparkline.ISparklineViewVisitor.Visit(DevExpress.Sparkline.LineSparklineView)">
<summary>
<para>Performs the operation as required by the Visitor and the View, as defined in the Visitor pattern.</para>
</summary>
<param name="view">An <see cref="T:DevExpress.Sparkline.LineSparklineView"/> object for which the operation is performed.</param>
</member>
<member name="M:DevExpress.Sparkline.ISparklineViewVisitor.Visit(DevExpress.Sparkline.WinLossSparklineView)">
<summary>
<para>Performs the operation as required by the Visitor and the View, as defined in the Visitor pattern.</para>
</summary>
<param name="view">An <see cref="T:DevExpress.Sparkline.WinLossSparklineView"/> object for which the operation is performed.</param>
</member>
<member name="T:DevExpress.Sparkline.LineSparklineView">
<summary>
<para>The Line sparkline view.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.LineSparklineView.#ctor">
<summary>
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.LineSparklineView"/> class with the default settings.</para>
</summary>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.ActualMarkerColor">
<summary>
<para>Gets the actual color of a sparkline marker.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual marker color.</value>
</member>
<member name="M:DevExpress.Sparkline.LineSparklineView.Assign(DevExpress.Sparkline.SparklineViewBase)">
<summary>
<para>Copies all the settings from the <see cref="T:DevExpress.Sparkline.LineSparklineView"/> object passed as the parameter.</para>
</summary>
<param name="view">A <see cref="T:DevExpress.Sparkline.LineSparklineView"/> object (which is the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> descendant) whose settings are assigned to the current object. If null (Nothing in Visual Basic), then a <see cref="T:System.ArgumentNullException"/> will be thrown.</param>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.EnableAntialiasing">
<summary>
<para>Gets or sets whether anti-aliasing (smoothing) is applied to the line view.</para>
</summary>
<value>True to apply anti-aliasing to the line view; False to disable anti-aliasing.</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.EndPointMarkerSize">
<summary>
<para>Gets or sets the size of an end points marker.</para>
</summary>
<value>An integer value specifying the marker size, in pixels.</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.LineWidth">
<summary>
<para>Specifies the width of a line in a <see cref="T:DevExpress.Sparkline.LineSparklineView"/>.</para>
</summary>
<value>An integer value specifying the line width (in pixels).</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.MarkerColor">
<summary>
<para>Gets or sets the color to draw line markers.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw line markers.</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.MarkerSize">
<summary>
<para>Gets or sets the size of markers for data points in a line sparkline.</para>
</summary>
<value>An integer value specifying the marker size, in pixels.</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.MaxPointMarkerSize">
<summary>
<para>Gets or sets the marker size of a data point that has the maximum value among all data points.</para>
</summary>
<value>An integer value specifying the marker size, in pixels.</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.MinPointMarkerSize">
<summary>
<para>Gets or sets the marker size of a data point that has the minimum value among all data points.</para>
</summary>
<value>An integer value specifying the marker size, in pixels.</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.NegativePointMarkerSize">
<summary>
<para>Gets or sets the marker size of all data points that have negative values (less than 0).</para>
</summary>
<value>An integer value specifying the marker size, in pixels.</value>
</member>
<member name="M:DevExpress.Sparkline.LineSparklineView.SetSizeForAllMarkers(System.Int32)">
<summary>
<para>Sets size for all markers of a sparkline.</para>
</summary>
<param name="markerSize">An integer value specifying the new size for sparkline markers (in pixels).</param>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.ShowMarkers">
<summary>
<para>Gets or sets a value specifying the visibility of point markers on a sparkline.</para>
</summary>
<value>true to show markers for each data point; false to hide them.</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.StartPointMarkerSize">
<summary>
<para>Gets or sets the size of a start points marker.</para>
</summary>
<value>An integer value specifying the marker size, in pixels.</value>
</member>
<member name="P:DevExpress.Sparkline.LineSparklineView.Type">
<summary>
<para>Gets the type of the sparkline view.</para>
</summary>
<value>Always <see cref="F:DevExpress.Sparkline.SparklineViewType.Line"/>.</value>
</member>
<member name="M:DevExpress.Sparkline.LineSparklineView.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
<summary>
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.LineSparklineView"/> object.</para>
</summary>
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
</member>
<member name="T:DevExpress.Sparkline.SparklineRange">
<summary>
<para>Represents a range to be used in DevExpress Sparkline controls.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.SparklineRange.#ctor">
<summary>
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.SparklineRange"/> class with the default settings.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.SparklineRange.#ctor(System.Double,System.Double)">
<summary>
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.SparklineRange"/> class with the specified minimum and maximum limits.</para>
</summary>
<param name="min">A <see cref="T:System.Double"/> value, specifying the minimum limit. This value is assigned to the <see cref="P:DevExpress.Sparkline.SparklineRange.Limit1"/> property.</param>
<param name="max">A <see cref="T:System.Double"/> value, specifying the maximum limit. This value is assigned to the <see cref="P:DevExpress.Sparkline.SparklineRange.Limit2"/> property.</param>
</member>
<member name="P:DevExpress.Sparkline.SparklineRange.IsAuto">
<summary>
<para>Gets or sets a value indicating whether or not range limits should be calculated automatically.</para>
</summary>
<value>true to calculate range limits automatically; false to use the <see cref="P:DevExpress.Sparkline.SparklineRange.Limit1"/> and <see cref="P:DevExpress.Sparkline.SparklineRange.Limit2"/> property values.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineRange.Limit1">
<summary>
<para>Gets or sets a value specifying the first limit of the range.</para>
</summary>
<value>A <see cref="T:System.Double"/> value that specifies the first limit.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineRange.Limit2">
<summary>
<para>Gets or sets a value specifying the second limit of the range.</para>
</summary>
<value>A <see cref="T:System.Double"/> value that specifies the second limit.</value>
</member>
<member name="E:DevExpress.Sparkline.SparklineRange.PropertiesChanged">
<summary>
<para>This event is hidden, because it is not appropriate for the <see cref="T:DevExpress.Sparkline.SparklineRange"/> class.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.SparklineRange.ToString">
<summary>
<para>Returns the textual representation of the <see cref="T:DevExpress.Sparkline.SparklineRange"/>.</para>
</summary>
<returns>A <see cref="T:System.String"/> value which is the textual representation of the <see cref="T:DevExpress.Sparkline.SparklineRange"/>.</returns>
</member>
<member name="T:DevExpress.Sparkline.SparklineViewBase">
<summary>
<para>The base class for sparkline views.</para>
</summary>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualColor">
<summary>
<para>Gets the actual color of a sparkline.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual sparkline color.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualEndPointColor">
<summary>
<para>Gets the actual color of a sparkline end point.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualMaxPointColor">
<summary>
<para>Gets the actual color of a sparkline maximum point.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualMinPointColor">
<summary>
<para>Gets the actual color of a sparkline minimum point.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualNegativePointColor">
<summary>
<para>Gets the actual color of sparkline negative points.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.ActualStartPointColor">
<summary>
<para>Gets the actual color of a sparkline start point.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> value that is the actual point color.</value>
</member>
<member name="M:DevExpress.Sparkline.SparklineViewBase.Assign(DevExpress.Sparkline.SparklineViewBase)">
<summary>
<para>Copies all the settings from the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object passed as the parameter.</para>
</summary>
<param name="view">A <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object (which is the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> descendant) whose settings are assigned to the current object. If null (Nothing in Visual Basic), then a <see cref="T:System.ArgumentNullException"/> will be thrown.</param>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.Color">
<summary>
<para>Gets or sets the color to draw a sparkline.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw a sparkline.</value>
</member>
<member name="M:DevExpress.Sparkline.SparklineViewBase.CreateView(DevExpress.Sparkline.SparklineViewType)">
<summary>
<para>Creates a sparkline view of the specified type.</para>
</summary>
<param name="viewType">A <see cref="T:DevExpress.Sparkline.SparklineViewType"/> enumeration value specifying the type of view to create.</param>
<returns>A <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> class descendant.</returns>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.EndPointColor">
<summary>
<para>Gets or sets the color to draw the end point of a sparkline.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw the end point.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.HighlightEndPoint">
<summary>
<para>Gets or sets a value specifying whether or not to highlight the end point of a sparkline.</para>
</summary>
<value>true, to highlight the end point; otherwise, false.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.HighlightMaxPoint">
<summary>
<para>Gets or sets a value specifying whether or not to highlight a sparkline point that has the highest value among all points.</para>
</summary>
<value>true, to highlight a point with the maximum value; otherwise, false.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.HighlightMinPoint">
<summary>
<para>Gets or sets a value specifying whether or not to highlight a sparkline point that has the lowest value among all points.</para>
</summary>
<value>true, to highlight a point with the minimum value; otherwise, false.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.HighlightStartPoint">
<summary>
<para>Gets or sets a value specifying whether or not to highlight the start point of a sparkline.</para>
</summary>
<value>true, to highlight the start point; otherwise, false.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.MaxPointColor">
<summary>
<para>Gets or sets the color to draw a sparkline point that has the highest value among all data points.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw a data point with the maximum value.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.MinPointColor">
<summary>
<para>Gets or sets the color to draw a sparkline point that has the lowest value among all data points.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw a data point with the minimum value.</value>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.NegativePointColor">
<summary>
<para>Gets or sets the color to draw sparkline points that have negative values (less than 0).</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw data points with negative values.</value>
</member>
<member name="E:DevExpress.Sparkline.SparklineViewBase.PropertiesChanged">
<summary>
<para>Occurs when any property of the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object has changed its value.</para>
</summary>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.StartPointColor">
<summary>
<para>Gets or sets the color to draw the start point of a sparkline.</para>
</summary>
<value>A <see cref="T:System.Drawing.Color"/> that defines the color to draw the start point.</value>
</member>
<member name="M:DevExpress.Sparkline.SparklineViewBase.ToString">
<summary>
<para>Returns a human-readable string that represents the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object.</para>
</summary>
<returns>A <see cref="T:System.String"/> value that represents the <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object.</returns>
</member>
<member name="P:DevExpress.Sparkline.SparklineViewBase.Type">
<summary>
<para>Gets the type of the sparkline view.</para>
</summary>
<value>A <see cref="T:DevExpress.Sparkline.SparklineViewType"/> enumeration value specifying the view type.</value>
</member>
<member name="M:DevExpress.Sparkline.SparklineViewBase.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
<summary>
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.SparklineViewBase"/> object.</para>
</summary>
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
</member>
<member name="T:DevExpress.Sparkline.SparklineViewType">
<summary>
<para>Lists the values used to specify the available view types of a sparkline.</para>
</summary>
</member>
<member name="F:DevExpress.Sparkline.SparklineViewType.Area">
<summary>
<para>Sparkline data points are represented as area.</para>
</summary>
</member>
<member name="F:DevExpress.Sparkline.SparklineViewType.Bar">
<summary>
<para>Sparkline data points are represented as bars.</para>
</summary>
</member>
<member name="F:DevExpress.Sparkline.SparklineViewType.Line">
<summary>
<para>Sparkline data points are represented as a line.</para>
</summary>
</member>
<member name="F:DevExpress.Sparkline.SparklineViewType.WinLoss">
<summary>
<para>Sparkline data points are represented as win and loss squares.</para>
</summary>
</member>
<member name="T:DevExpress.Sparkline.WinLossSparklineView">
<summary>
<para>The WinLoss sparkline view.</para>
</summary>
</member>
<member name="M:DevExpress.Sparkline.WinLossSparklineView.#ctor">
<summary>
<para>Initializes a new instance of the <see cref="T:DevExpress.Sparkline.WinLossSparklineView"/> class with the default settings.</para>
</summary>
</member>
<member name="P:DevExpress.Sparkline.WinLossSparklineView.Type">
<summary>
<para>Gets the type of the sparkline view.</para>
</summary>
<value>Always <see cref="F:DevExpress.Sparkline.SparklineViewType.WinLoss"/>.</value>
</member>
<member name="M:DevExpress.Sparkline.WinLossSparklineView.Visit(DevExpress.Sparkline.ISparklineViewVisitor)">
<summary>
<para>Invokes the Visit method of the specified visitor for the current <see cref="T:DevExpress.Sparkline.WinLossSparklineView"/> object.</para>
</summary>
<param name="visitor">An object implementing the <see cref="T:DevExpress.Sparkline.ISparklineViewVisitor"/> interface.</param>
</member>
</members>
</doc>

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<DevExpress.LookAndFeel.Design.AppSettings>
<setting name="DPIAwarenessMode" serializeAs="String">
<value>System</value>
</setting>
<setting name="RegisterBonusSkins" serializeAs="String">
<value>True</value>
</setting>
</DevExpress.LookAndFeel.Design.AppSettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]

View File

@@ -0,0 +1 @@
2e76b3282172c5c2af5dc8307255f5a3f005cec846ce8524277394d042763c58

View File

@@ -0,0 +1,85 @@
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe.config
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.pdb
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.BonusSkins.v22.2.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.Desktop.v22.2.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.v22.2.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Drawing.v22.2.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Printing.v22.2.Core.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Sparkline.v22.2.Core.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Utils.v22.2.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraEditors.v22.2.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.Desktop.v22.2.xml
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.v22.2.xml
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Utils.v22.2.xml
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Sparkline.v22.2.Core.xml
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraEditors.v22.2.xml
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Printing.v22.2.Core.xml
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.xml
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.xml
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.AssemblyReference.cache
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Form1.resources
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Properties.Resources.resources
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.GenerateResource.cache
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.CoreCompileInputs.cache
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndAr.8539BC83.Up2Date
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.pdb
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraBars.v22.2.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraBars.v22.2.xml
D:\Projects\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe.licenses
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.dll
D:\Projects\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe.config
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.pdb
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.dll
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.dll
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.dll
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.Desktop.v22.2.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.v22.2.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Utils.v22.2.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Sparkline.v22.2.Core.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraBars.v22.2.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraEditors.v22.2.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Printing.v22.2.Core.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.xml
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.AssemblyReference.cache
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe.config
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Form1.resources
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Properties.Resources.resources
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.GenerateResource.cache
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe.licenses
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.CoreCompileInputs.cache
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndAr.8539BC83.Up2Date
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe
C:\Users\36331\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.pdb
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe.config
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.exe
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DogAndArmControl.pdb
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.dll
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.dll
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.dll
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.Desktop.v22.2.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Data.v22.2.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Utils.v22.2.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Sparkline.v22.2.Core.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraBars.v22.2.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.XtraEditors.v22.2.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Printing.v22.2.Core.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\Newtonsoft.Json.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Core.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\bin\Debug\DevExpress.Pdf.v22.2.Drawing.xml
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.AssemblyReference.cache
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Form1.resources
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.Properties.Resources.resources
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.GenerateResource.cache
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe.licenses
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.csproj.CoreCompileInputs.cache
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndAr.8539BC83.Up2Date
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.exe
C:\Users\Quella\Desktop\DogAndArmControl\DogAndArmControl\obj\Debug\DogAndArmControl.pdb

Binary file not shown.

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System">
<section name="DevExpress.LookAndFeel.Design.AppSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<DevExpress.LookAndFeel.Design.AppSettings>
<setting name="DPIAwarenessMode" serializeAs="String">
<value>System</value>
</setting>
<setting name="RegisterBonusSkins" serializeAs="String">
<value>True</value>
</setting>
</DevExpress.LookAndFeel.Design.AppSettings>
</applicationSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>

Binary file not shown.

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
</packages>

Binary file not shown.

View File

@@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2007 James Newton-King
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Binary file not shown.

View File

@@ -0,0 +1,71 @@
# ![Logo](https://raw.githubusercontent.com/JamesNK/Newtonsoft.Json/master/Doc/icons/logo.jpg) Json.NET
[![NuGet version (Newtonsoft.Json)](https://img.shields.io/nuget/v/Newtonsoft.Json.svg?style=flat-square)](https://www.nuget.org/packages/Newtonsoft.Json/)
[![Build status](https://dev.azure.com/jamesnk/Public/_apis/build/status/JamesNK.Newtonsoft.Json?branchName=master)](https://dev.azure.com/jamesnk/Public/_build/latest?definitionId=8)
Json.NET is a popular high-performance JSON framework for .NET
## Serialize JSON
```csharp
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };
string json = JsonConvert.SerializeObject(product);
// {
// "Name": "Apple",
// "Expiry": "2008-12-28T00:00:00",
// "Sizes": [
// "Small"
// ]
// }
```
## Deserialize JSON
```csharp
string json = @"{
'Name': 'Bad Boys',
'ReleaseDate': '1995-4-7T00:00:00',
'Genres': [
'Action',
'Comedy'
]
}";
Movie m = JsonConvert.DeserializeObject<Movie>(json);
string name = m.Name;
// Bad Boys
```
## LINQ to JSON
```csharp
JArray array = new JArray();
array.Add("Manual text");
array.Add(new DateTime(2000, 5, 23));
JObject o = new JObject();
o["MyArray"] = array;
string json = o.ToString();
// {
// "MyArray": [
// "Manual text",
// "2000-05-23T00:00:00"
// ]
// }
```
## Links
- [Homepage](https://www.newtonsoft.com/json)
- [Documentation](https://www.newtonsoft.com/json/help)
- [NuGet Package](https://www.nuget.org/packages/Newtonsoft.Json)
- [Release Notes](https://github.com/JamesNK/Newtonsoft.Json/releases)
- [Contributing Guidelines](https://github.com/JamesNK/Newtonsoft.Json/blob/master/CONTRIBUTING.md)
- [License](https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md)
- [Stack Overflow](https://stackoverflow.com/questions/tagged/json.net)

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB