WPF Inaktív főablak felugró MessageBox esetén

WPF Inaktív főablak felugró MessageBox esetén
2014-03-26T13:11:03+01:00
2014-04-01T17:04:20+02:00
2022-10-15T22:06:25+02:00
Tomi026
Sziasztok. Gondom a következő. Van egy időzítőm és egy pontos időm. Ezeket 2 label írja ki. Az időzítő visszaszámlál. Ha letelt az időzítő,felugrok egy MsgBox ablak és kiírja,hogy az illető menjen ki szünetre,utána folytathatja a munkát. Egy időzítőre akartam rakni magát az ablakot is,de nem tudok hivatkozni rá,mert nem rendes buttonként funkcionál az ok gomb rajta. Így úgy gondoltam,talán egyszerűbb lenne úgy megoldani,hogy az illető ha leokézza,a mainwindow akkor is inaktív maradjon fix időre (mondjuk 5 perc),így a dolgozó biztos,hogy kimegy szünetet tartani. A gond csak az,hogy ezt nem tudom,hogy vigyem véghez.
Íme a .cs fájlom:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; namespace WpfApplication3 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DispatcherTimer idő = new DispatcherTimer(); idő.Interval = TimeSpan.FromSeconds(1); idő.Tick += timer_Tick; idő.Start(); Countdown(10, TimeSpan.FromSeconds(1), cur => Időzítő.Content = cur.ToString()); } void timer_Tick(object sender, EventArgs e) { Idő.Content = DateTime.Now.ToLongTimeString(); } void Countdown(int count, TimeSpan intervallum, Action<int> mp) { var időzít = new DispatcherTimer(); időzít.Interval = intervallum; időzít.Tick += (_, a) => { if (count-- == 0) { időzít.Stop(); MessageBoxResult eredmény = MessageBox.Show("Menjen ki szünetre! Ha visszajött folytathatja a munkát", "Figyelmeztetés", MessageBoxButton.OK); if (eredmény == MessageBoxResult.OK) { count = 10; mp(count); időzít.Start(); } } else { mp(count); } }; mp(count); időzít.Start(); } } }


XAML 2 label-e:

        <Label Name="Idő" HorizontalAlignment="Left" Margin="396,148,0,0" VerticalAlignment="Top"/>
        <Label Name="Időzítő" HorizontalAlignment="Left" Margin="359,191,0,0" VerticalAlignment="Top"/>

Akár a nyomógomb késleltetéses,akár az inaktív ablakos megoldást elfogadom. Aki tud legyen szíves segíteni!
Mutasd a teljes hozzászólást!
Szia!

- A MessageBox használata helyett készíts egy saját üzenőablakot, annak meg tudod oldani az időzített lezárását.

- Az ablak használatát így tilthatod le: this.IsEnabled = false;
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd