Closing a Windows Form, using the Close Window button, when a Validation Message is showing









up vote
0
down vote

favorite












I have a Windows form that has a validation event on a textBox so that if the value of that TextBox is a value that already exists it triggers a validation error.



 private void txtUsername_Validating(object sender, CancelEventArgs e)

var alreadyExists = _logic.UserIdExists(txtUsername.Text.Trim());

if(alreadyExists)

errorProvider1.SetError(txtUsername, "This Userid already exists, please choose an alternative");
e.Cancel = true;



private void txtUsername_Validated(object sender, EventArgs e)

errorProvider1.SetError(txtUsername, "");



this.txtUsername.Validating += new System.ComponentModel.CancelEventHandler(this.txtUsername_Validating);
this.txtUsername.Validated += new System.EventHandler(this.txtUsername_Validated);


This results in an error image appearing next to that textBox along with a tooltip error message.



If I try and close the application, using the Close button at the top of the window, at this time I cannot as the above Event keeps firing even when I try and close the window (due to me taking focus away from the Text box).



Is there a way of closing the window, without resorting to creating an additional Close button on the form?










share|improve this question





















  • have you tried giving the focus back to the main window after the textBox is shown?
    – TheMri
    Nov 8 at 15:20










  • @TheMri I'm not sure exactly what you mean. Can you elaborate please?
    – Sperick
    Nov 8 at 15:34










  • A simple workaround is to use a bool field (e.g., bool IsFormClosing), set to true just by the FormClosing() handler. Set the validation handlers to execute only when IsFormClosing is false.
    – Jimi
    Nov 8 at 16:32














up vote
0
down vote

favorite












I have a Windows form that has a validation event on a textBox so that if the value of that TextBox is a value that already exists it triggers a validation error.



 private void txtUsername_Validating(object sender, CancelEventArgs e)

var alreadyExists = _logic.UserIdExists(txtUsername.Text.Trim());

if(alreadyExists)

errorProvider1.SetError(txtUsername, "This Userid already exists, please choose an alternative");
e.Cancel = true;



private void txtUsername_Validated(object sender, EventArgs e)

errorProvider1.SetError(txtUsername, "");



this.txtUsername.Validating += new System.ComponentModel.CancelEventHandler(this.txtUsername_Validating);
this.txtUsername.Validated += new System.EventHandler(this.txtUsername_Validated);


This results in an error image appearing next to that textBox along with a tooltip error message.



If I try and close the application, using the Close button at the top of the window, at this time I cannot as the above Event keeps firing even when I try and close the window (due to me taking focus away from the Text box).



Is there a way of closing the window, without resorting to creating an additional Close button on the form?










share|improve this question





















  • have you tried giving the focus back to the main window after the textBox is shown?
    – TheMri
    Nov 8 at 15:20










  • @TheMri I'm not sure exactly what you mean. Can you elaborate please?
    – Sperick
    Nov 8 at 15:34










  • A simple workaround is to use a bool field (e.g., bool IsFormClosing), set to true just by the FormClosing() handler. Set the validation handlers to execute only when IsFormClosing is false.
    – Jimi
    Nov 8 at 16:32












up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have a Windows form that has a validation event on a textBox so that if the value of that TextBox is a value that already exists it triggers a validation error.



 private void txtUsername_Validating(object sender, CancelEventArgs e)

var alreadyExists = _logic.UserIdExists(txtUsername.Text.Trim());

if(alreadyExists)

errorProvider1.SetError(txtUsername, "This Userid already exists, please choose an alternative");
e.Cancel = true;



private void txtUsername_Validated(object sender, EventArgs e)

errorProvider1.SetError(txtUsername, "");



this.txtUsername.Validating += new System.ComponentModel.CancelEventHandler(this.txtUsername_Validating);
this.txtUsername.Validated += new System.EventHandler(this.txtUsername_Validated);


This results in an error image appearing next to that textBox along with a tooltip error message.



If I try and close the application, using the Close button at the top of the window, at this time I cannot as the above Event keeps firing even when I try and close the window (due to me taking focus away from the Text box).



Is there a way of closing the window, without resorting to creating an additional Close button on the form?










share|improve this question













I have a Windows form that has a validation event on a textBox so that if the value of that TextBox is a value that already exists it triggers a validation error.



 private void txtUsername_Validating(object sender, CancelEventArgs e)

var alreadyExists = _logic.UserIdExists(txtUsername.Text.Trim());

if(alreadyExists)

errorProvider1.SetError(txtUsername, "This Userid already exists, please choose an alternative");
e.Cancel = true;



private void txtUsername_Validated(object sender, EventArgs e)

errorProvider1.SetError(txtUsername, "");



this.txtUsername.Validating += new System.ComponentModel.CancelEventHandler(this.txtUsername_Validating);
this.txtUsername.Validated += new System.EventHandler(this.txtUsername_Validated);


This results in an error image appearing next to that textBox along with a tooltip error message.



If I try and close the application, using the Close button at the top of the window, at this time I cannot as the above Event keeps firing even when I try and close the window (due to me taking focus away from the Text box).



Is there a way of closing the window, without resorting to creating an additional Close button on the form?







winforms






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 8 at 15:10









Sperick

1,51742341




1,51742341











  • have you tried giving the focus back to the main window after the textBox is shown?
    – TheMri
    Nov 8 at 15:20










  • @TheMri I'm not sure exactly what you mean. Can you elaborate please?
    – Sperick
    Nov 8 at 15:34










  • A simple workaround is to use a bool field (e.g., bool IsFormClosing), set to true just by the FormClosing() handler. Set the validation handlers to execute only when IsFormClosing is false.
    – Jimi
    Nov 8 at 16:32
















  • have you tried giving the focus back to the main window after the textBox is shown?
    – TheMri
    Nov 8 at 15:20










  • @TheMri I'm not sure exactly what you mean. Can you elaborate please?
    – Sperick
    Nov 8 at 15:34










  • A simple workaround is to use a bool field (e.g., bool IsFormClosing), set to true just by the FormClosing() handler. Set the validation handlers to execute only when IsFormClosing is false.
    – Jimi
    Nov 8 at 16:32















have you tried giving the focus back to the main window after the textBox is shown?
– TheMri
Nov 8 at 15:20




have you tried giving the focus back to the main window after the textBox is shown?
– TheMri
Nov 8 at 15:20












@TheMri I'm not sure exactly what you mean. Can you elaborate please?
– Sperick
Nov 8 at 15:34




@TheMri I'm not sure exactly what you mean. Can you elaborate please?
– Sperick
Nov 8 at 15:34












A simple workaround is to use a bool field (e.g., bool IsFormClosing), set to true just by the FormClosing() handler. Set the validation handlers to execute only when IsFormClosing is false.
– Jimi
Nov 8 at 16:32




A simple workaround is to use a bool field (e.g., bool IsFormClosing), set to true just by the FormClosing() handler. Set the validation handlers to execute only when IsFormClosing is false.
– Jimi
Nov 8 at 16:32












1 Answer
1






active

oldest

votes

















up vote
2
down vote



accepted










Based on your description, you want to maintain the default auto-validation behavior yet allow the Form to be closed using the title bar close button. I have observed that the Form.Closing event is raised in such a circumstance, however its argument Cancel property is preset to true. A simple solution is to handle this event and set e.Cancel = false. Implement any logic in the handler that you deem necessary.



private void Form1_FormClosing(object sender, FormClosingEventArgs e)

if (e.CloseReason == CloseReason.UserClosing) e.Cancel = false;






share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53210584%2fclosing-a-windows-form-using-the-close-window-button-when-a-validation-message%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    2
    down vote



    accepted










    Based on your description, you want to maintain the default auto-validation behavior yet allow the Form to be closed using the title bar close button. I have observed that the Form.Closing event is raised in such a circumstance, however its argument Cancel property is preset to true. A simple solution is to handle this event and set e.Cancel = false. Implement any logic in the handler that you deem necessary.



    private void Form1_FormClosing(object sender, FormClosingEventArgs e)

    if (e.CloseReason == CloseReason.UserClosing) e.Cancel = false;






    share|improve this answer
























      up vote
      2
      down vote



      accepted










      Based on your description, you want to maintain the default auto-validation behavior yet allow the Form to be closed using the title bar close button. I have observed that the Form.Closing event is raised in such a circumstance, however its argument Cancel property is preset to true. A simple solution is to handle this event and set e.Cancel = false. Implement any logic in the handler that you deem necessary.



      private void Form1_FormClosing(object sender, FormClosingEventArgs e)

      if (e.CloseReason == CloseReason.UserClosing) e.Cancel = false;






      share|improve this answer






















        up vote
        2
        down vote



        accepted







        up vote
        2
        down vote



        accepted






        Based on your description, you want to maintain the default auto-validation behavior yet allow the Form to be closed using the title bar close button. I have observed that the Form.Closing event is raised in such a circumstance, however its argument Cancel property is preset to true. A simple solution is to handle this event and set e.Cancel = false. Implement any logic in the handler that you deem necessary.



        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        if (e.CloseReason == CloseReason.UserClosing) e.Cancel = false;






        share|improve this answer












        Based on your description, you want to maintain the default auto-validation behavior yet allow the Form to be closed using the title bar close button. I have observed that the Form.Closing event is raised in such a circumstance, however its argument Cancel property is preset to true. A simple solution is to handle this event and set e.Cancel = false. Implement any logic in the handler that you deem necessary.



        private void Form1_FormClosing(object sender, FormClosingEventArgs e)

        if (e.CloseReason == CloseReason.UserClosing) e.Cancel = false;







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 8 at 20:41









        TnTinMn

        6,22931026




        6,22931026



























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53210584%2fclosing-a-windows-form-using-the-close-window-button-when-a-validation-message%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

            Edmonton

            Crossroads (UK TV series)