页面逻辑添加
This commit is contained in:
@@ -128,6 +128,7 @@ namespace 头罩视野.Views
|
||||
|
||||
testTimer.Start();
|
||||
ma.BtnClickFunction(Function.ButtonType.复归型, 101);
|
||||
MessageBox.Show("开始测试");
|
||||
}
|
||||
|
||||
private async void Timer_Tick(object sender, EventArgs e)
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
<Grid Grid.Row="3">
|
||||
<TextBlock Text="右眼" FontSize="16" Margin="0,10,0,5"/>
|
||||
<Button Content="保存" FontSize="18"
|
||||
Width="120" Height="50" Background="#3498DB" Foreground="White" HorizontalAlignment="Left" Margin="850,0,0,5" />
|
||||
Width="120" Height="50" Background="#3498DB" Foreground="White" HorizontalAlignment="Left" Margin="850,0,0,5" Click="btnSaveLeft_Click" />
|
||||
</Grid>
|
||||
<!--表格2-->
|
||||
<Grid Grid.Row="4" Margin="0 0 0 10">
|
||||
@@ -207,9 +207,9 @@ ScrollViewer.HorizontalScrollBarVisibility="Auto"
|
||||
<Grid Grid.Row="5" >
|
||||
<!-- 停止 -->
|
||||
<Button Content="保存" FontSize="18"
|
||||
Width="120" Height="50" Background="#3498DB" Foreground="White" HorizontalAlignment="Left" Margin="850,0,0,0" />
|
||||
Width="120" Height="50" Background="#3498DB" Foreground="White" HorizontalAlignment="Left" Margin="850,0,0,0" Click="btnSaveRight_Click"/>
|
||||
<Button Content="清除" FontSize="18"
|
||||
Width="120" Height="50" Background="White" BorderBrush="red" Foreground="red" HorizontalAlignment="Left" Margin="14,0,0,0" />
|
||||
Width="120" Height="50" Background="White" BorderBrush="red" Foreground="red" HorizontalAlignment="Left" Margin="14,0,0,0" PreviewMouseLeftButtonDown ="btnClear_MouseDown" PreviewMouseLeftButtonUp ="btnClear_MouseUp" />
|
||||
<TextBlock HorizontalAlignment="Left" Foreground="red"
|
||||
FontSize="18"
|
||||
Width="142" Margin="148,25,0,23" RenderTransformOrigin="0.5,0.5">
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using Sunny.UI;
|
||||
using Microsoft.Win32;
|
||||
using Sunny.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
@@ -11,7 +13,6 @@ using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
namespace 头罩视野.Views
|
||||
{
|
||||
/// <summary>
|
||||
@@ -22,31 +23,48 @@ namespace 头罩视野.Views
|
||||
public partial class RecordDate : Page
|
||||
|
||||
{
|
||||
// 数据存储列表
|
||||
private List<dynamic> LeftEyeDataList = new List<dynamic>();
|
||||
private List<dynamic> RightEyeDataList = new List<dynamic>();
|
||||
|
||||
// 长按清除用
|
||||
private bool _isClearPressed = false;
|
||||
private Thread _clearThread;
|
||||
public RecordDate()
|
||||
{
|
||||
InitializeComponent();
|
||||
// 1. 固定列:编号、时间、日期
|
||||
//dataGrid1.Columns.Add(new DataGridTextColumn { Header = "编号", Binding = new System.Windows.Data.Binding("Num") });
|
||||
//dataGrid1.Columns.Add(new DataGridTextColumn { Header = "时间", Binding = new System.Windows.Data.Binding("Time") });
|
||||
//dataGrid1.Columns.Add(new DataGridTextColumn { Header = "日期", Binding = new System.Windows.Data.Binding("Date") });
|
||||
DynamicHeader();
|
||||
AddTestRow();
|
||||
}
|
||||
// 2. 调用(名字和上面的变量一致)
|
||||
AddDataRow(dataGrid1, LeftEyeDataList, 64);
|
||||
AddDataRow(dataGrid2, RightEyeDataList, 64);
|
||||
// 测试数据
|
||||
void AddTestRow()
|
||||
/// <summary>
|
||||
/// 给表格添加一行数据(自动存起来,用于保存)
|
||||
/// </summary>
|
||||
/// <param name="dg">目标表格</param>
|
||||
/// <param name="dataList">数据存储列表</param>
|
||||
/// <param name="channelCount">通道数量 64/32</param>
|
||||
void AddDataRow(DataGrid dg, List<dynamic> dataList, int channelCount)
|
||||
{
|
||||
var row = new Dictionary<string, object>
|
||||
// 创建一行数据
|
||||
dynamic row = new System.Dynamic.ExpandoObject();
|
||||
var dict = (IDictionary<string, object>)row;
|
||||
|
||||
// 固定列
|
||||
dict["Id"] = dataList.Count + 1;
|
||||
dict["Time"] = DateTime.Now.ToString("HH:mm:ss");
|
||||
dict["Date"] = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
|
||||
// 通道列(Ch1 ~ Ch64)
|
||||
for (int i = 1; i <= channelCount; i++)
|
||||
{
|
||||
{ "Num", 1 },
|
||||
{ "Time", DateTime.Now.ToString("HH:mm:ss") },
|
||||
{ "Date", DateTime.Now.ToString("yyyy-MM-dd") }
|
||||
};
|
||||
dict[$"Ch{i}"] = 0; // 这里你可以替换成真实数据
|
||||
}
|
||||
|
||||
for (int i = 1; i <= 64; i++)
|
||||
row[$"Ch{i}"] = new Random().Next(10, 100);
|
||||
|
||||
dataGrid1.Items.Add(row);
|
||||
dataGrid2.Items.Add(row);
|
||||
// 存起来 + 显示
|
||||
dataList.Add(row);
|
||||
dg.Items.Add(row);
|
||||
}
|
||||
}
|
||||
//动态生成表头
|
||||
void DynamicHeader()
|
||||
@@ -67,14 +85,83 @@ namespace 头罩视野.Views
|
||||
}
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
||||
private void btnBack_Click(object sender, RoutedEventArgs e)
|
||||
// 保存左眼
|
||||
private void btnSaveLeft_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
NavigationService.Content = null;
|
||||
SaveToCsv(LeftEyeDataList, $"左眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
|
||||
}
|
||||
|
||||
// 保存右眼
|
||||
private void btnSaveRight_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
SaveToCsv(RightEyeDataList, $"右眼数据_{DateTime.Now:yyyyMMddHHmmss}.csv");
|
||||
}
|
||||
|
||||
private void SaveToCsv(List<dynamic> dataList, string defaultFileName)
|
||||
{
|
||||
if (dataList == null || dataList.Count == 0)
|
||||
{
|
||||
MessageBox.Show("无数据可保存");
|
||||
return;
|
||||
}
|
||||
|
||||
// 打开文件夹选择框
|
||||
var folderDialog = new OpenFolderDialog();
|
||||
if (folderDialog.ShowDialog() != true)
|
||||
return;
|
||||
|
||||
string folder = folderDialog.FolderName;
|
||||
string path = System.IO.Path.Combine(folder, defaultFileName);
|
||||
|
||||
// 写入 CSV
|
||||
using (var sw = new StreamWriter(path, false, Encoding.UTF8))
|
||||
{
|
||||
var first = (IDictionary<string, object>)dataList[0];
|
||||
sw.WriteLine(string.Join(",", first.Keys));
|
||||
|
||||
foreach (var item in dataList)
|
||||
{
|
||||
var dict = (IDictionary<string, object>)item;
|
||||
sw.WriteLine(string.Join(",", dict.Values));
|
||||
}
|
||||
}
|
||||
|
||||
MessageBox.Show("保存成功:\n" + path);
|
||||
}
|
||||
|
||||
|
||||
private void btnClear_MouseDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
_isClearPressed = true;
|
||||
_clearThread = new Thread(() =>
|
||||
{
|
||||
Thread.Sleep(500); // 长按1秒触发
|
||||
if (_isClearPressed)
|
||||
{
|
||||
Application.Current.Dispatcher.Invoke(() => ClearAllData());
|
||||
}
|
||||
});
|
||||
_clearThread.Start();
|
||||
}
|
||||
// 清除所有数据
|
||||
private void ClearAllData()
|
||||
{
|
||||
LeftEyeDataList.Clear();
|
||||
dataGrid1.Items.Clear();
|
||||
|
||||
RightEyeDataList.Clear();
|
||||
dataGrid2.Items.Clear();
|
||||
|
||||
MessageBox.Show("数据已清除");
|
||||
}
|
||||
|
||||
private void btnClear_MouseUp(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
_isClearPressed = false;
|
||||
_clearThread?.Join(100); // 等待线程结束最多100毫秒,然后强制结束
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user