public void RespondOnClosingWithCancel() { // If Respond if called on a CloseRequest, but the close is canceled, the respose call is ignored using (var win = new Dialog()) { bool closeCanceled = false, closeResult1 = false, closeResult2 = false; win.Buttons.Add(new DialogButton(Command.Ok)); win.CloseRequested += HandleCloseRequested; Application.TimeoutInvoke(10, delegate { closeResult1 = win.Close(); Application.TimeoutInvoke(10, delegate { win.CloseRequested -= HandleCloseRequested; closeCanceled = true; closeResult2 = win.Close(); return(false); }); return(false); }); var cmd = win.Run(); Assert.IsTrue(closeCanceled, "Close not canceled"); Assert.IsFalse(closeResult1, "First close should return false"); Assert.IsTrue(closeResult2, "Second close should return true"); Assert.IsNull(cmd); } }
public void TwoResponds() { // When Respond is called twice before leaving an event handler, the last call is the good one using (var win = new Dialog()) { Application.TimeoutInvoke(10, delegate { win.Respond(Command.Ok); win.Respond(Command.Apply); return(false); }); var cmd = win.Run(); Assert.AreEqual(Command.Apply, cmd); } }
public void RespondOnClosing() { // Respond can be used in a CloseRequest handler to provide a result for the Run method using (var win = new Dialog()) { bool closeResult = false; win.Buttons.Add(new DialogButton(Command.Ok)); win.CloseRequested += delegate(object sender, CloseRequestedEventArgs args) { win.Respond(Command.Apply); }; Application.TimeoutInvoke(10, delegate { closeResult = win.Close(); return(false); }); var cmd = win.Run(); Assert.AreEqual(Command.Apply, cmd); Assert.IsTrue(closeResult); } }
public void RespondDoesNotFireClose() { // The close event is not fired after running a dialog bool closed = false, closing = false; using (var win = new Dialog()) { win.Buttons.Add(new DialogButton(Command.Ok)); win.CloseRequested += (sender, e) => closing = true; win.Closed += (sender, e) => closed = true; Application.TimeoutInvoke(10, delegate { win.Respond(Command.Apply); return(false); }); var cmd = win.Run(); Assert.IsFalse(closing, "CloseRequested event should not be fired"); Assert.IsFalse(closed, "Close event should not be fired"); Assert.AreEqual(Command.Apply, cmd); } Assert.IsFalse(closing, "CloseRequested event should not be fired when disposing"); Assert.IsFalse(closed, "Close event should not be fired when disposing"); }
public void Close() { // The Close method can be used to stop running a dialog bool closing = false, closed = false, closeResult = false; using (var win = new Dialog()) { win.Buttons.Add(new DialogButton(Command.Ok)); win.CloseRequested += delegate(object sender, CloseRequestedEventArgs args) { Assert.IsTrue(args.AllowClose); closing = true; }; win.Closed += (sender, e) => closed = true; Application.TimeoutInvoke(10, delegate { closeResult = win.Close(); return(false); }); var cmd = win.Run(); Assert.IsNull(cmd); Assert.IsTrue(closing, "CloseRequested event not fired"); Assert.IsTrue(closed, "Window not closed"); Assert.IsTrue(closeResult, "Window not closed"); } }
internal static IDisposable Add(int v, Func <bool> p) { return(Application.TimeoutInvoke(v, p)); }