Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e941113da9 | |||
| 533ca5a0fd | |||
| 98d0111560 | |||
| 0bc8dce03e | |||
| b2848b4510 | |||
| 9b2d17d0ea |
@@ -2,7 +2,7 @@
|
|||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="clr-namespace:自救器呼吸器综合检验仪"
|
xmlns:local="clr-namespace:自救器呼吸器综合检验仪"
|
||||||
Title="自救器呼吸器综合检验仪" Height="900" Width="1280"
|
Title="自救器呼吸器综合检验仪" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
FontFamily="Microsoft YaHeui" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
FontFamily="Microsoft YaHeui" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
FontSize="14" Foreground="#CCFFFFFF" Margin="0,5,0,0"/>-->
|
FontSize="14" Foreground="#CCFFFFFF" Margin="0,5,0,0"/>-->
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal" Margin="2" HorizontalAlignment="Center">
|
<StackPanel Orientation="Horizontal" Margin="2" HorizontalAlignment="Center">
|
||||||
<TextBlock Text="样品编号:" FontSize="26" FontWeight="Bold" Foreground="White" Style="{StaticResource LabelStyle}"/>
|
<TextBlock Text="样品编号:" FontSize="26" FontWeight="Bold" Foreground="White" Margin="200 0 0 0" Style="{StaticResource LabelStyle}"/>
|
||||||
<TextBox x:Name="pressureDiff2" Text="" Width="180" Style="{StaticResource TextBoxStyle}" LostFocus="pressureDiff2_GotFocus"/>
|
<TextBox x:Name="pressureDiff2" Text="" Width="180" Style="{StaticResource TextBoxStyle}" LostFocus="pressureDiff2_GotFocus"/>
|
||||||
|
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
@@ -100,6 +100,7 @@
|
|||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="2*"/>
|
<ColumnDefinition Width="2*"/>
|
||||||
<ColumnDefinition Width="1*"/>
|
<ColumnDefinition Width="1*"/>
|
||||||
|
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<!-- 左侧:配置与监控区 -->
|
<!-- 左侧:配置与监控区 -->
|
||||||
@@ -120,9 +121,9 @@
|
|||||||
|
|
||||||
<!-- 检验时间配置 -->
|
<!-- 检验时间配置 -->
|
||||||
<StackPanel Orientation="Horizontal" Margin="0,0,0,15">
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,15">
|
||||||
<TextBlock Text="检验时间:" Width="100" VerticalAlignment="Center"
|
<TextBlock Text="检验时间:" Width="84" VerticalAlignment="Center"
|
||||||
FontSize="14" FontWeight="SemiBold" Foreground="#2C3E50"/>
|
FontSize="14" FontWeight="SemiBold" Foreground="#2C3E50"/>
|
||||||
<TextBox x:Name="settingtime" Text="0" Width="100" Height="35"
|
<TextBox x:Name="settingtime" Text="0" Width="66" Height="34"
|
||||||
VerticalContentAlignment="Center" TextAlignment="Center"
|
VerticalContentAlignment="Center" TextAlignment="Center"
|
||||||
BorderBrush="#DCDFE6" BorderThickness="1" Background="#FAFBFC"
|
BorderBrush="#DCDFE6" BorderThickness="1" Background="#FAFBFC"
|
||||||
FontSize="14" TextChanged="settingtime_TextChanged"/>
|
FontSize="14" TextChanged="settingtime_TextChanged"/>
|
||||||
@@ -131,23 +132,23 @@
|
|||||||
|
|
||||||
<Button Content="🔧 设置参数" Click="BtnWrite401_Click"
|
<Button Content="🔧 设置参数" Click="BtnWrite401_Click"
|
||||||
Background="#3498DB" Foreground="White" FontSize="13" FontWeight="Bold"
|
Background="#3498DB" Foreground="White" FontSize="13" FontWeight="Bold"
|
||||||
Width="120" Height="38" BorderThickness="0" Margin="0,0,25,0"
|
Width="100" Height="38" BorderThickness="0" Margin="-30,0,25,0"
|
||||||
Cursor="Hand"/>
|
Cursor="Hand"/>
|
||||||
|
|
||||||
<Button x:Name="btn_flow2" Content="定量供氧L/min" Click="BtnWrite400_Click"
|
<Button x:Name="btn_flow2" Content="定量供氧L/min" Click="BtnWrite400_Click"
|
||||||
Background="#3498DB" Foreground="White" FontSize="13" FontWeight="Bold"
|
Background="#3498DB" Foreground="White" FontSize="13" FontWeight="Bold"
|
||||||
Width="120" Height="38" BorderThickness="0" Margin="0,0,25,0"
|
Width="100" Height="38" BorderThickness="0" Margin="-20,0,25,0"
|
||||||
Cursor="Hand"/>
|
Cursor="Hand"/>
|
||||||
|
|
||||||
<Button x:Name="btn_flow3" Content="自动/手动补给供氧(L/min)" Click="BtnWrite400_Click1"
|
<Button x:Name="btn_flow3" Content="自动/手动补给供氧(L/min)" Click="BtnWrite400_Click1"
|
||||||
Background="#3498DB" Foreground="White" FontSize="13" FontWeight="Bold"
|
Background="#3498DB" Foreground="White" FontSize="13" FontWeight="Bold"
|
||||||
Width="174" Height="38" BorderThickness="0" Margin="0,0,25,0"
|
Width="157" Height="38" BorderThickness="0" Margin="-20,0,25,0"
|
||||||
Cursor="Hand"/>
|
Cursor="Hand"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!--<Border Background="#F8F9FA" Padding="10,6" BorderBrush="#E1E8ED" BorderThickness="1">-->
|
<!--<Border Background="#F8F9FA" Padding="10,6" BorderBrush="#E1E8ED" BorderThickness="1">-->
|
||||||
<!--<TextBlock x:Name="label_flow" Text="0-100L/min" VerticalAlignment="Center"
|
<!--<TextBlock x:Name="label_flow" Text="0-100L/min" VerticalAlignment="Center"
|
||||||
FontSize="12" FontWeight="Bold" Foreground="#3498DB"/>-->
|
FontSize="12" FontWeight="Bold" Foreground="#3498DB"/>-->
|
||||||
|
|
||||||
<!--</Border>-->
|
<!--</Border>-->
|
||||||
@@ -286,7 +287,7 @@
|
|||||||
|
|
||||||
<Button Content="🔬 定量供应检验"
|
<Button Content="🔬 定量供应检验"
|
||||||
Background="#3498DB" Foreground="White" FontSize="12" FontWeight="Bold"
|
Background="#3498DB" Foreground="White" FontSize="12" FontWeight="Bold"
|
||||||
Width="140" Height="40" BorderThickness="0" Margin="8,5" Cursor="Hand"/>
|
Width="140" Height="40" BorderThickness="0" Margin="8,5" Cursor="Hand" Click="Button_Click_8"/>
|
||||||
|
|
||||||
<Button Content="📉 负压气密性检验" Click="Button_Click_5"
|
<Button Content="📉 负压气密性检验" Click="Button_Click_5"
|
||||||
Background="White" Foreground="#2C3E50" FontSize="12" FontWeight="Bold"
|
Background="White" Foreground="#2C3E50" FontSize="12" FontWeight="Bold"
|
||||||
@@ -305,5 +306,6 @@
|
|||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Border>
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
@@ -14,6 +14,7 @@ using System.Windows.Data;
|
|||||||
using System.Windows.Documents;
|
using System.Windows.Documents;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
using System.Windows.Navigation;
|
using System.Windows.Navigation;
|
||||||
using System.Windows.Shapes;
|
using System.Windows.Shapes;
|
||||||
@@ -282,6 +283,7 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
string plcIp = "192.168.1.10";
|
string plcIp = "192.168.1.10";
|
||||||
|
//string plcIp = "127.0.0.1";
|
||||||
bool initSuccess = Data.ModbusResourceManager.Instance.Init(plcIp, 502);
|
bool initSuccess = Data.ModbusResourceManager.Instance.Init(plcIp, 502);
|
||||||
if (!initSuccess)
|
if (!initSuccess)
|
||||||
{
|
{
|
||||||
@@ -384,44 +386,106 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
// 1. 停止当前窗口的定时器(不释放资源)
|
// 停止当前窗口的定时器(不释放资源)
|
||||||
_readTimer?.Stop();
|
_readTimer?.Stop();
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
// 检查资源是否可用(添加重连机制)
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
// 创建一个简易的加载覆盖窗口,作为状态栏/遮罩,避免白屏
|
||||||
if (windowInstance == null)
|
Window overlay = null;
|
||||||
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
_readTimer?.Start();
|
WindowStyle = WindowStyle.None,
|
||||||
//this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
// 取消遮罩背景色,使用完全透明背景以避免暗色遮罩
|
||||||
|
Background = Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
// 内容:底部居中的状态文本(不遮挡背景)
|
||||||
this.Hide();
|
var grid = new Grid();
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
var tb = new TextBlock
|
||||||
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
Background = Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
// 显示遮罩
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
// 如果目标已可见,直接激活并隐藏当前
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建或复用窗口实例
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
_readTimer?.Start();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
ShowErrorMsg($"切换窗口失败:{ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加重连方法
|
// 添加重连方法
|
||||||
@@ -635,6 +699,11 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Button_Click_8(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="clr-namespace:自救器呼吸器综合检验仪"
|
xmlns:local="clr-namespace:自救器呼吸器综合检验仪"
|
||||||
Title="自救器呼吸器综合检验仪" Height="900" Width="1280"
|
Title="自救器呼吸器综合检验仪" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
FontFamily="Microsoft YaHeui" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
FontFamily="Microsoft YaHeui" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ using System.Windows.Media.Imaging;
|
|||||||
using System.Windows.Navigation;
|
using System.Windows.Navigation;
|
||||||
using System.Windows.Shapes;
|
using System.Windows.Shapes;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
using 自救器呼吸器综合检验仪;
|
using 自救器呼吸器综合检验仪;
|
||||||
using 自救器呼吸器综合检验仪.Data;
|
using 自救器呼吸器综合检验仪.Data;
|
||||||
|
|
||||||
@@ -478,44 +479,98 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
// 1. 停止当前窗口的定时器(不释放资源)
|
|
||||||
_readTimer?.Stop();
|
_readTimer?.Stop();
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
Window overlay = null;
|
||||||
if (windowInstance == null)
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
_readTimer?.Start();
|
WindowStyle = WindowStyle.None,
|
||||||
//this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
Background = Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
var grid = new Grid();
|
||||||
this.Hide();
|
var tb = new TextBlock
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
Background = Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
_readTimer?.Start();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
ShowErrorMsg($"切换窗口失败:{ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 添加重连方法
|
// 添加重连方法
|
||||||
private bool TryReconnect()
|
private bool TryReconnect()
|
||||||
@@ -643,7 +698,7 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
}
|
}
|
||||||
string No = ConfigurationManager.AppSettings["No"]?.ToString();
|
string No = ConfigurationManager.AppSettings["No"]?.ToString();
|
||||||
// 添加记录到窗口(无论窗口是否显示)
|
// 添加记录到窗口(无论窗口是否显示)
|
||||||
_reportWindow2.AddRecord(currentTime, currentDate, startPress, endPress, diffPress, ProtectTime,No);
|
_reportWindow2.AddRecord(currentTime, currentDate, startPress, endPress, diffPress, ProtectTime, No);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="clr-namespace:自救器呼吸器综合检验仪"
|
xmlns:local="clr-namespace:自救器呼吸器综合检验仪"
|
||||||
Title="自救器呼吸器综合检验仪" Height="900" Width="1280"
|
Title="自救器呼吸器综合检验仪" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
FontFamily="Microsoft YaHeui"
|
FontFamily="Microsoft YaHeui"
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ using System.Windows.Media.Imaging;
|
|||||||
using System.Windows.Navigation;
|
using System.Windows.Navigation;
|
||||||
using System.Windows.Shapes;
|
using System.Windows.Shapes;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
using 自救器呼吸器综合检验仪;
|
using 自救器呼吸器综合检验仪;
|
||||||
using 自救器呼吸器综合检验仪.Data;
|
using 自救器呼吸器综合检验仪.Data;
|
||||||
|
|
||||||
@@ -451,44 +452,98 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
// 1. 停止当前窗口的定时器(不释放资源)
|
|
||||||
_readTimer?.Stop();
|
_readTimer?.Stop();
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
Window overlay = null;
|
||||||
if (windowInstance == null)
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
_readTimer?.Start();
|
WindowStyle = WindowStyle.None,
|
||||||
//this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
Background = Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
var grid = new Grid();
|
||||||
this.Hide();
|
var tb = new TextBlock
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
Background = Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
_readTimer?.Start();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
ShowErrorMsg($"切换窗口失败:{ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 添加重连方法
|
// 添加重连方法
|
||||||
private bool TryReconnect()
|
private bool TryReconnect()
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:local="clr-namespace:自救器呼吸器综合检验仪"
|
xmlns:local="clr-namespace:自救器呼吸器综合检验仪"
|
||||||
Title="自救器呼吸器综合检验仪" Height="900" Width="1280"
|
Title="自救器呼吸器综合检验仪" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
Background="Transparent"
|
Background="Transparent"
|
||||||
FontFamily="Microsoft YaHeui"
|
FontFamily="Microsoft YaHeui"
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ using System.Windows.Media.Imaging;
|
|||||||
using System.Windows.Navigation;
|
using System.Windows.Navigation;
|
||||||
using System.Windows.Shapes;
|
using System.Windows.Shapes;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
using 自救器呼吸器综合检验仪;
|
using 自救器呼吸器综合检验仪;
|
||||||
using 自救器呼吸器综合检验仪.Data;
|
using 自救器呼吸器综合检验仪.Data;
|
||||||
|
|
||||||
@@ -296,44 +297,98 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
// 1. 停止当前窗口的定时器(不释放资源)
|
|
||||||
_readTimer?.Stop();
|
_readTimer?.Stop();
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
Window overlay = null;
|
||||||
if (windowInstance == null)
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
_readTimer?.Start();
|
WindowStyle = WindowStyle.None,
|
||||||
//this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
Background = Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
//return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
var grid = new Grid();
|
||||||
this.Hide();
|
var tb = new TextBlock
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = Brushes.Black,
|
||||||
|
Background = Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
_readTimer?.Start();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
ShowErrorMsg($"切换窗口失败:{ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
private bool TryReconnect()
|
private bool TryReconnect()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Window x:Class="自救器呼吸器综合检验仪.ParameterSettingsWindow"
|
<Window x:Class="自救器呼吸器综合检验仪.ParameterSettingsWindow"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Title="参数设置" Height="768" Width="1024"
|
Title="参数设置" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
ResizeMode="NoResize" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
ResizeMode="NoResize" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Windows;
|
|||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
using 自救器呼吸器综合检验仪.Data;
|
using 自救器呼吸器综合检验仪.Data;
|
||||||
|
|
||||||
namespace 自救器呼吸器综合检验仪
|
namespace 自救器呼吸器综合检验仪
|
||||||
@@ -118,44 +119,100 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
// 1. 停止当前窗口的定时器(不释放资源)
|
// 停止当前窗口的定时器(不释放资源)
|
||||||
_readTimer?.Stop();
|
_readTimer?.Stop();
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
Window overlay = null;
|
||||||
if (windowInstance == null)
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
_readTimer?.Start();
|
WindowStyle = WindowStyle.None,
|
||||||
this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
var grid = new Grid();
|
||||||
this.Hide();
|
var tb = new TextBlock
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = System.Windows.Media.Brushes.Black,
|
||||||
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
_readTimer?.Start();
|
||||||
|
this.Show();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
ShowErrorMsg($"切换窗口失败:{ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Window x:Class="自救器呼吸器综合检验仪.ReportWindow"
|
<Window x:Class="自救器呼吸器综合检验仪.ReportWindow"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Title="定量供氧检验报表" Height="900" Width="1280"
|
Title="定量供氧检验报表" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing" >
|
WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing" >
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using System.Text;
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using 自救器呼吸器综合检验仪.Data;
|
using 自救器呼吸器综合检验仪.Data;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
|
||||||
namespace 自救器呼吸器综合检验仪
|
namespace 自救器呼吸器综合检验仪
|
||||||
{
|
{
|
||||||
@@ -230,6 +231,14 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void BtnPrint_Click(object sender, RoutedEventArgs e)
|
private void BtnPrint_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
// 判断是否有数据可打印
|
||||||
|
if (_records == null || _records.Count == 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show("当前没有可打印的数据。", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触发打印/硬件动作
|
||||||
ma.BtnClickFunctionForNew(Function.ButtonType.切换型, 15);
|
ma.BtnClickFunctionForNew(Function.ButtonType.切换型, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,42 +263,96 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
Window overlay = null;
|
||||||
if (windowInstance == null)
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
|
WindowStyle = WindowStyle.None,
|
||||||
this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
var grid = new Grid();
|
||||||
this.Hide();
|
var tb = new TextBlock
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = System.Windows.Media.Brushes.Black,
|
||||||
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
this.Show();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
//ShowErrorMsg($"切换窗口失败:{ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnClose_Click(object sender, RoutedEventArgs e)
|
private void BtnClose_Click(object sender, RoutedEventArgs e)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Window x:Class="自救器呼吸器综合检验仪.ReportWindow2"
|
<Window x:Class="自救器呼吸器综合检验仪.ReportWindow2"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Title="负压气密性检验报表" Height="900" Width="1280"
|
Title="负压气密性检验报表" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using System.Text;
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using 自救器呼吸器综合检验仪.Data;
|
using 自救器呼吸器综合检验仪.Data;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
|
||||||
namespace 自救器呼吸器综合检验仪
|
namespace 自救器呼吸器综合检验仪
|
||||||
{
|
{
|
||||||
@@ -250,6 +251,12 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void BtnPrint_Click(object sender, RoutedEventArgs e)
|
private void BtnPrint_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
// 判断是否有数据可打印
|
||||||
|
if (_records == null || _records.Count == 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show("当前没有可打印的数据。", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ma.BtnClickFunctionForNew(Function.ButtonType.切换型, 15);
|
ma.BtnClickFunctionForNew(Function.ButtonType.切换型, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,42 +281,96 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
Window overlay = null;
|
||||||
if (windowInstance == null)
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
|
WindowStyle = WindowStyle.None,
|
||||||
this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
var grid = new Grid();
|
||||||
this.Hide();
|
var tb = new TextBlock
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = System.Windows.Media.Brushes.Black,
|
||||||
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
this.Show();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
//ShowErrorMsg($"切换窗口失败:{ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnClose_Click(object sender, RoutedEventArgs e)
|
private void BtnClose_Click(object sender, RoutedEventArgs e)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Window x:Class="自救器呼吸器综合检验仪.ReportWindow3"
|
<Window x:Class="自救器呼吸器综合检验仪.ReportWindow3"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Title="正压气密性检验报表" Height="900" Width="1280"
|
Title="正压气密性检验报表" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ using System.Text;
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using 自救器呼吸器综合检验仪.Data;
|
using 自救器呼吸器综合检验仪.Data;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
|
||||||
namespace 自救器呼吸器综合检验仪
|
namespace 自救器呼吸器综合检验仪
|
||||||
{
|
{
|
||||||
@@ -191,6 +193,12 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void BtnPrint_Click(object sender, RoutedEventArgs e)
|
private void BtnPrint_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
// 判断是否有数据可打印
|
||||||
|
if (_records == null || _records.Count == 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show("当前没有可打印的数据。", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ma.BtnClickFunctionForNew(Function.ButtonType.切换型, 15);
|
ma.BtnClickFunctionForNew(Function.ButtonType.切换型, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -272,42 +280,96 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
Window overlay = null;
|
||||||
if (windowInstance == null)
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
|
WindowStyle = WindowStyle.None,
|
||||||
this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
var grid = new Grid();
|
||||||
this.Hide();
|
var tb = new TextBlock
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = System.Windows.Media.Brushes.Black,
|
||||||
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
this.Show();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
//ShowErrorMsg($"切换窗口失败:{ex.Message}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnClose_Click(object sender, RoutedEventArgs e)
|
private void BtnClose_Click(object sender, RoutedEventArgs e)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<Window x:Class="自救器呼吸器综合检验仪.ReportWindow4"
|
<Window x:Class="自救器呼吸器综合检验仪.ReportWindow4"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
Title="排气阀检验报表" Height="900" Width="1280"
|
Title="排气阀检验报表" Height="730" Width="1024"
|
||||||
WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing" >
|
WindowStartupLocation="CenterScreen" Loaded="Window_Loaded" Closed="Window_Closed" Closing="Window_Closing" >
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ using System.Text;
|
|||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using 自救器呼吸器综合检验仪.Data;
|
using 自救器呼吸器综合检验仪.Data;
|
||||||
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
|
||||||
namespace 自救器呼吸器综合检验仪
|
namespace 自救器呼吸器综合检验仪
|
||||||
{
|
{
|
||||||
@@ -233,6 +235,12 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void BtnPrint_Click(object sender, RoutedEventArgs e)
|
private void BtnPrint_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
// 判断是否有数据可打印
|
||||||
|
if (_records == null || _records.Count == 0)
|
||||||
|
{
|
||||||
|
MessageBox.Show("当前没有可打印的数据。", "提示", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ma.BtnClickFunctionForNew(Function.ButtonType.切换型, 15);
|
ma.BtnClickFunctionForNew(Function.ButtonType.切换型, 15);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,42 +321,96 @@ namespace 自救器呼吸器综合检验仪
|
|||||||
|
|
||||||
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : Window, new()
|
||||||
{
|
{
|
||||||
|
|
||||||
// 2. 检查资源是否可用(添加重连机制)
|
|
||||||
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
if (_tcpClient == null || !_tcpClient.Connected || _modbusMaster == null)
|
||||||
{
|
{
|
||||||
// 尝试重新连接
|
if (!TryReconnect())
|
||||||
bool reconnectSuccess = TryReconnect();
|
|
||||||
if (!reconnectSuccess)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
MessageBox.Show("TCP连接已断开,请重新连接!", "提示");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 复用窗口实例:不存在则创建,存在则激活
|
Window overlay = null;
|
||||||
if (windowInstance == null)
|
try
|
||||||
{
|
{
|
||||||
windowInstance = createFunc();
|
overlay = new Window
|
||||||
// 添加窗口关闭事件处理
|
|
||||||
windowInstance.Closed += (s, args) =>
|
|
||||||
{
|
{
|
||||||
// 窗口关闭时重新启动定时器并显示当前窗口
|
Owner = this,
|
||||||
|
WindowStyle = WindowStyle.None,
|
||||||
this.Show();
|
AllowsTransparency = true,
|
||||||
this.Activate();
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
ShowInTaskbar = false,
|
||||||
|
ResizeMode = ResizeMode.NoResize,
|
||||||
|
Width = this.ActualWidth,
|
||||||
|
Height = this.ActualHeight,
|
||||||
|
Left = this.Left,
|
||||||
|
Top = this.Top,
|
||||||
|
ShowActivated = false,
|
||||||
|
Topmost = true
|
||||||
};
|
};
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 激活已存在的窗口(前置显示)
|
|
||||||
windowInstance.Activate();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 切换窗口:隐藏当前窗口,显示目标窗口(非模态)
|
var grid = new Grid();
|
||||||
this.Hide();
|
var tb = new TextBlock
|
||||||
windowInstance.Show(); // 使用 Show() 而不是 ShowDialog()
|
{
|
||||||
|
Text = "正在加载,请稍候...",
|
||||||
|
Foreground = System.Windows.Media.Brushes.Black,
|
||||||
|
Background = System.Windows.Media.Brushes.Transparent,
|
||||||
|
HorizontalAlignment = HorizontalAlignment.Center,
|
||||||
|
VerticalAlignment = VerticalAlignment.Bottom,
|
||||||
|
Margin = new Thickness(0, 0, 0, 20),
|
||||||
|
FontSize = 16
|
||||||
|
};
|
||||||
|
grid.Children.Add(tb);
|
||||||
|
overlay.Content = grid;
|
||||||
|
|
||||||
|
overlay.Show();
|
||||||
|
|
||||||
|
void ShowTargetWindow(T target)
|
||||||
|
{
|
||||||
|
if (target.IsVisible)
|
||||||
|
{
|
||||||
|
target.Activate();
|
||||||
|
this.Hide();
|
||||||
|
overlay?.Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.Opacity = 0;
|
||||||
|
void OnContentRendered(object s, EventArgs e)
|
||||||
|
{
|
||||||
|
target.ContentRendered -= OnContentRendered;
|
||||||
|
var anim = new DoubleAnimation(0, 1, TimeSpan.FromMilliseconds(200));
|
||||||
|
target.BeginAnimation(Window.OpacityProperty, anim);
|
||||||
|
this.Hide();
|
||||||
|
target.Activate();
|
||||||
|
overlay?.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
target.ContentRendered += OnContentRendered;
|
||||||
|
target.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windowInstance == null)
|
||||||
|
{
|
||||||
|
windowInstance = createFunc();
|
||||||
|
windowInstance.Closed += (s, args) =>
|
||||||
|
{
|
||||||
|
this.Show();
|
||||||
|
this.Activate();
|
||||||
|
};
|
||||||
|
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ShowTargetWindow(windowInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
overlay?.Close();
|
||||||
|
MessageBox.Show($"切换窗口失败:{ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnClose_Click(object sender, RoutedEventArgs e)
|
private void BtnClose_Click(object sender, RoutedEventArgs e)
|
||||||
|
|||||||
56
oxygen_testsystem.sql
Normal file
56
oxygen_testsystem.sql
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
-- --------------------------------------------------------
|
||||||
|
-- 主机: 127.0.0.1
|
||||||
|
-- 服务器版本: 10.3.2-MariaDB - mariadb.org binary distribution
|
||||||
|
-- 服务器操作系统: Win64
|
||||||
|
-- HeidiSQL 版本: 9.4.0.5125
|
||||||
|
-- --------------------------------------------------------
|
||||||
|
|
||||||
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
|
/*!40101 SET NAMES utf8 */;
|
||||||
|
/*!50503 SET NAMES utf8mb4 */;
|
||||||
|
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||||
|
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||||
|
|
||||||
|
|
||||||
|
-- 导出 oxygen_testsystem 的数据库结构
|
||||||
|
DROP DATABASE IF EXISTS `oxygen_testsystem`;
|
||||||
|
CREATE DATABASE IF NOT EXISTS `oxygen_testsystem` /*!40100 DEFAULT CHARACTER SET utf8 */;
|
||||||
|
USE `oxygen_testsystem`;
|
||||||
|
|
||||||
|
-- 导出 表 oxygen_testsystem.test_records 结构
|
||||||
|
DROP TABLE IF EXISTS `test_records`;
|
||||||
|
CREATE TABLE IF NOT EXISTS `test_records` (
|
||||||
|
`Id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`Time` varchar(10) NOT NULL,
|
||||||
|
`Date` varchar(10) NOT NULL,
|
||||||
|
`FlowRate` decimal(10,2) NOT NULL,
|
||||||
|
`Duration` varchar(10) NOT NULL,
|
||||||
|
`CreateTime` datetime NOT NULL,
|
||||||
|
`Type` int(11) NOT NULL,
|
||||||
|
`FlowRate2` decimal(10,2) unsigned zerofill DEFAULT NULL,
|
||||||
|
`No` varchar(50) NOT NULL,
|
||||||
|
PRIMARY KEY (`Id`) USING BTREE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=139 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
|
||||||
|
|
||||||
|
-- 数据导出被取消选择。
|
||||||
|
-- 导出 表 oxygen_testsystem.test_recordsfornegativepressure 结构
|
||||||
|
DROP TABLE IF EXISTS `test_recordsfornegativepressure`;
|
||||||
|
CREATE TABLE IF NOT EXISTS `test_recordsfornegativepressure` (
|
||||||
|
`Id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`Time` varchar(10) NOT NULL,
|
||||||
|
`Date` varchar(10) NOT NULL,
|
||||||
|
`StartPress` decimal(10,2) NOT NULL,
|
||||||
|
`Duration` varchar(10) DEFAULT NULL,
|
||||||
|
`CreateTime` datetime NOT NULL,
|
||||||
|
`EndPress` decimal(10,2) NOT NULL,
|
||||||
|
`DiffPress` decimal(10,2) NOT NULL,
|
||||||
|
`ProtectTime` decimal(10,2) NOT NULL,
|
||||||
|
`Type` int(11) NOT NULL,
|
||||||
|
`No` varchar(50) NOT NULL,
|
||||||
|
PRIMARY KEY (`Id`) USING BTREE
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
|
||||||
|
|
||||||
|
-- 数据导出被取消选择。
|
||||||
|
/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
|
||||||
|
/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
|
||||||
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
Reference in New Issue
Block a user