WPF桌球计费实例
前端代码
< StackPanel > < WrapPanel > < Button x:Name="btnStart" Content="开台" Height="40" Width="80" Click="btnStart_Click"></ Button > < Button x:Name="btnStop" Content="结账" Height="40" Width="80" Click="btnStop_Click"></ Button > </ WrapPanel > < DataGrid Name="lbStage" IsReadOnly="False" CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False"> < DataGrid.Columns > < DataGridTextColumn Header="桌台编号" IsReadOnly="True" Width="100" Binding="{Binding Path=id, Mode=TwoWay}"/> < DataGridTextColumn Header="计费方案" IsReadOnly="True" Width="100" Binding="{Binding Path=name, Mode=TwoWay}"/> < DataGridTextColumn Header="开始时间" IsReadOnly="True" Width="180" Binding="{Binding Path=starttime, Mode=TwoWay}"/> < DataGridTextColumn Header="累计时间" IsReadOnly="True" Binding="{Binding Path=time, Mode=TwoWay}"/> </ DataGrid.Columns > </ DataGrid > </ StackPanel > |
后台代码
public partial class UserWindow : Window { System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer(); System.Collections.ObjectModel.ObservableCollection<Stages> listStages = new System.Collections.ObjectModel.ObservableCollection<Stages>(){ new Stages(){ id=1, name= "花式台球" }, new Stages(){ id=2, name= "花式台球" }, new Stages(){ id=3, name= "美式台球" }, new Stages(){ id=4, name= "斯诺克" }, new Stages(){ id=5, name= "麻将" } }; public UserWindow() { InitializeComponent(); this .lbStage.ItemsSource = listStages; timer.Interval = new TimeSpan(0, 0, 1); timer.Tick += new EventHandler(TimerTick); timer.Start(); } private void btnStart_Click( object sender, RoutedEventArgs e) { if (lbStage.SelectedItem != null ) { Stages stage = lbStage.SelectedItem as Stages; if (stage.status == 0) { stage.status = 1; stage.starttime = DateTime.Now.ToString( "yyyy-MM-dd HH:mm:ss" ); new System.Threading.Thread(WorkerProc) { IsBackground = true }.Start(); } else { MessageBox.Show( "您指定的台桌不是空台状态" ); } } } private void WorkerProc() { } private void btnStop_Click( object sender, RoutedEventArgs e) { if (lbStage.SelectedItem != null ) { Stages stage = lbStage.SelectedItem as Stages; if (stage.status == 0) { MessageBox.Show( "您指定的台桌是空台状态" ); } else { MessageBoxResult result = MessageBox.Show( "确定结账台桌吗?" , "温馨提示" , MessageBoxButton.YesNo); if (result.ToString() == "Yes" ) { stage.starttime = string .Empty; stage.time = string .Empty; stage.status = 0; stage.minute = 0; } } } } private void TimerTick( object sender, EventArgs e) { foreach (Stages stage in listStages) { if (stage.status == 1) { stage.minute += 1; TimeSpan ts = new TimeSpan(0, 0, stage.minute); if (ts.Days > 0) stage.time = string .Format( "{0}天{1}小时{2}分钟{3}秒" , ts.Days, ts.Hours, ts.Minutes, ts.Seconds); else if (ts.Hours > 0) stage.time = string .Format( "{0}小时{1}分钟{2}秒" , ts.Hours, ts.Minutes, ts.Seconds); else stage.time = string .Format( "{0}分钟{1}秒" , ts.Minutes, ts.Seconds); } } } } public class Stages : System.ComponentModel.INotifyPropertyChanged { public int id { set ; get ; } public int _status; public int status { get { return _status; } set { _status = value; OnPropertyChanged( "status" ); } } public int minute { set ; get ; } public string name { set ; get ; } public string _time; public string time { get { return _time; } set { _time = value; OnPropertyChanged( "time" ); } } public string _starttime; public string starttime { get { return _starttime; } set { _starttime = value; OnPropertyChanged( "starttime" ); } } protected internal virtual void OnPropertyChanged( string propertyName) { if (PropertyChanged != null ) PropertyChanged( this , new System.ComponentModel.PropertyChangedEventArgs(propertyName)); } public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)