CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 12 of 12
  1. #1
    Join Date
    Jun 2008
    Posts
    154

    C# Forms - Custom Popup InputBox

    I've created a custom popup input box (much like the one from VB). It saves the string that has been inputed. Most of the code has been imported from here >>

    http://www.csharp-examples.net/inputbox/

    I want to add a Enter key functionality, in-order to speed up the process since the user will be using this box a lot.

    Code:
            private void EnterKey(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter) 
                {
                    InputResponse = this.txtInput.Text;
                    this.Close();
                }
            }
    Since the custom Input box is created on the fly - I can't simply right click its object and add the event. It needs to be done in code. But I am not able to get it correct.

    Code:
                //
                // txtInput
                //
                this.txtInput.Location = new System.Drawing.Point(10, 36);
                this.txtInput.Name = "txtInput";
                this.txtInput.Size = new System.Drawing.Size(200, 20);
                this.txtInput.TabIndex = 0;
                this.txtInput.Text = "";
                this.txtInput.??? += new System.EventHandler(this.EnterKey);
                //
    I've tried this.txtInput.TextChanged -- but the error is

    No overload for 'EnterKey' matches delegate 'System.EventHandler'

    dunno what to do here.

  2. #2
    Join Date
    Apr 2009
    Location
    Bahamas
    Posts
    33

    Re: C# Forms - Custom Popup InputBox

    You make things way too complicated. If its anything like the VB input box it has an enter button and a cancel button. You need two statements.

    Code:
    Inputbox.AcceptButton = btnEnter;
    Inputbox.CancelButton = btnCancel;
    Optionally you can set the DialogResult property for the buttons so you can tell what button was clicked.
    Thanks,
    - pgrammer

  3. #3
    Join Date
    Jun 2008
    Posts
    154

    Re: C# Forms - Custom Popup InputBox

    I already have the buttons. But I want to enter the text and hit the Enter key on my keyboard - its much faster.

  4. #4
    Join Date
    Apr 2009
    Location
    Bahamas
    Posts
    33

    Re: C# Forms - Custom Popup InputBox

    Quote Originally Posted by bixel View Post
    I already have the buttons. But I want to enter the text and hit the Enter key on my keyboard - its much faster.
    I understand what you are asking. I provided the solution above. There is no need for you to write this maunally when the .Net Framework has built in support for what you want to do.

    If you need to return a string to the calling code you can do it with a delegate. There is no need for you to test for the enter button maunally.

    Hook up your buttons like I showed you before and test it.
    Thanks,
    - pgrammer

  5. #5
    Join Date
    Jun 2008
    Posts
    154

    Re: C# Forms - Custom Popup InputBox

    I'm sorry I don't understand.

    Code:
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    
    namespace Resturant_Helper
    {
        /// <summary>
        /// Summary description for InputBox.
        ///
        public class InputBoxDialog : System.Windows.Forms.Form
        {
    
            #region Windows Contols and Constructor
    
            private System.Windows.Forms.Label lblPrompt;
            private System.Windows.Forms.Button btnOK;
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.TextBox txtInput;
            /// <summary>
            /// Required designer variable.
            ///
            private System.ComponentModel.Container components = null;
    
            public InputBoxDialog()
            {
                //
                // Required for Windows Form Designer support
                //
                InitializeComponent();
    
                //
                // TODO: Add any constructor code after InitializeComponent call
                //
            }
    
            #endregion
    
            #region Dispose
    
            /// <summary>
            /// Clean up any resources being used.
            ///
            protected override void Dispose(bool disposing)
            {
                if (disposing)
                {
                    if (components != null)
                    {
                        components.Dispose();
                    }
                }
                base.Dispose(disposing);
            }
    
            #endregion
    
            #region Windows Form Designer generated code
            /// <summary>
            /// Required method for Designer support - do not modify
            /// the contents of this method with the code editor.
            ///
            private void InitializeComponent()
            {
                this.lblPrompt = new System.Windows.Forms.Label();
                this.btnOK = new System.Windows.Forms.Button();
                this.button1 = new System.Windows.Forms.Button();
                this.txtInput = new System.Windows.Forms.TextBox();
                this.SuspendLayout();
                //
                // lblPrompt
                //
                this.lblPrompt.Anchor =
                  ((System.Windows.Forms.AnchorStyles)
                  ((((System.Windows.Forms.AnchorStyles.Top |
                  System.Windows.Forms.AnchorStyles.Bottom)
                  | System.Windows.Forms.AnchorStyles.Left)
                  | System.Windows.Forms.AnchorStyles.Right)));
                this.lblPrompt.BackColor = System.Drawing.SystemColors.Control;
                this.lblPrompt.Font =
                  new System.Drawing.Font("Microsoft Sans Serif", 10.0F,
                  System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,
                  ((System.Byte)(0)));
                this.lblPrompt.Location = new System.Drawing.Point(12, 6);
                this.lblPrompt.Name = "lblPrompt";
                this.lblPrompt.Size = new System.Drawing.Size(180, 82);
                this.lblPrompt.TabIndex = 3;
                //
                // btnOK
                //
                this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.btnOK.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
                this.btnOK.Location = new System.Drawing.Point(56, 70);
                this.btnOK.Name = "btnOK";
                this.btnOK.Size = new System.Drawing.Size(32, 20);
                this.btnOK.TabIndex = 1;
                this.btnOK.Text = "&OK";
                this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
                //
                // button1
                //
                this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel;
                this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
                this.button1.Location = new System.Drawing.Point(110, 70);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(64, 20);
                this.button1.TabIndex = 2;
                this.button1.Text = "&Cancel";
                this.button1.Click += new System.EventHandler(this.button1_Click);
                //
                // txtInput
                //
                this.txtInput.Location = new System.Drawing.Point(10, 36);
                this.txtInput.Name = "txtInput";
                this.txtInput.Size = new System.Drawing.Size(200, 20);
                this.txtInput.TabIndex = 0;
                this.txtInput.Text = "";
                //
                // InputBoxDialog
                //
                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                this.ClientSize = new System.Drawing.Size(228, 96);
                this.Controls.Add(this.txtInput);
                this.Controls.Add(this.button1);
                this.Controls.Add(this.btnOK);
                this.Controls.Add(this.lblPrompt);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
                this.MaximizeBox = false;
                this.MinimizeBox = false;
                this.Name = "InputBoxDialog";
                this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
                this.Text = "InputBox";
                this.Load += new System.EventHandler(this.InputBox_Load);
                this.ResumeLayout(false);
    
            }
            #endregion
    
            #region Private Variables
            string formCaption = string.Empty;
            string formPrompt = string.Empty;
            string inputResponse = string.Empty;
            string defaultValue = string.Empty;
            #endregion
    
            #region Public Properties
            public string FormCaption
            {
                get { return formCaption; }
                set { formCaption = value; }
            } // property FormCaption
            public string FormPrompt
            {
                get { return formPrompt; }
                set { formPrompt = value; }
            } // property FormPrompt
            public string InputResponse
            {
                get { return inputResponse; }
                set { inputResponse = value; }
            } // property InputResponse
            public string DefaultValue
            {
                get { return defaultValue; }
                set { defaultValue = value; }
            } // property DefaultValue
    
            #endregion
    
            #region Form and Control Events
            private void InputBox_Load(object sender, System.EventArgs e)
            {
                this.txtInput.Text = defaultValue;
                this.lblPrompt.Text = formPrompt;
                this.Text = formCaption;
                this.txtInput.SelectionStart = 0;
                this.txtInput.SelectionLength = this.txtInput.Text.Length;
                this.txtInput.Focus();
            }
    
            private void btnOK_Click(object sender, System.EventArgs e)
            {
                InputResponse = this.txtInput.Text;
                this.Close();
            }
    
            private void button1_Click(object sender, System.EventArgs e)
            {
                this.Close();
            }
            #endregion
    
            private void EnterKey(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Enter) 
                {
                    InputResponse = this.txtInput.Text;
                    this.Close();
                }
            }
    
        }
    }

  6. #6
    Join Date
    Apr 2009
    Location
    Bahamas
    Posts
    33

    Re: C# Forms - Custom Popup InputBox

    Sadly, I am using my cell phone to view the website right now so it is very hard for me to view rhe code.

    Until I get to a PC I won't be able to make much sense of it.

    in your Form_Load you can add this line for now.

    Code:
    this.AcceptButton = btnOk;
    If you can't figure it out and no one else helps. You'll have to wait until I get to a PC so that I can view your code. Its too hard to read it on a cell phone.
    Thanks,
    - pgrammer

  7. #7
    Join Date
    Mar 2005
    Location
    Vienna, Austria
    Posts
    4,538

    Re: C# Forms - Custom Popup InputBox

    What you are looking for is the Keydown Event from the textbox
    Code:
    this.txtBox.KeyDown += new 
    KeyEventHandler(this.txtBox_KeyDown)
     
     
    // and the delegate
    private void txtBox_KeyDown(object sender KeyEventArgs e){
     
     
    }

    Jonny Poet

    To be Alive is depending on the willingsness to help others and also to permit others to help you. So lets be alive. !
    Using Code Tags makes the difference: Code is easier to read, so its easier to help. Do it like this: [CODE] Put Your Code here [/code]
    If anyone felt he has got help, show it in rating the post.
    Also dont forget to set a post which is fully answered to 'resolved'. For more details look to FAQ's about Forum Usage. BTW I'm using Framework 3.5 and you ?
    My latest articles :
    Creating a Dockable Panel-Controlmanager Using C#, Part 1 | Part 2 | Part 3 | Part 4 | Part 5 | Part 6 | Part 7

  8. #8
    Join Date
    Apr 2009
    Location
    Bahamas
    Posts
    33

    Re: C# Forms - Custom Popup InputBox

    Quote Originally Posted by JonnyPoet View Post
    What you are looking for is the Keydown Event from the textbox
    Code:
    this.txtBox.KeyDown += new 
    KeyEventHandler(this.txtBox_KeyDown)
     
     
    // and the delegate
    private void txtBox_KeyDown(object sender KeyEventArgs e){
     
     
    }

    It would work, but I still don't understand why he is coding something manually that is already supported by the Framework. There is no reason to trap the enter key in that event in order to close the dialog.

    Anyway, Good Luck.
    Thanks,
    - pgrammer

  9. #9
    Join Date
    Mar 2005
    Location
    Vienna, Austria
    Posts
    4,538

    Re: C# Forms - Custom Popup InputBox

    Quote Originally Posted by pgrammer View Post
    It would work, but I still don't understand why he is coding something manually that is already supported by the Framework. There is no reason to trap the enter key in that event in order to close the dialog.

    Anyway, Good Luck.
    As much as I have understood he doesn't want to click one of the buttons. He has a textbox and the two buttons :Ok and cancel there, but wanted to close the box with DialogResuslt.Ok when he simple presses 'Enter' after entering some text in the textbox. So if enterkey is pressed being in the textbox the Dialog should close with result ok. So for this he can use the delegate of the KeDown in the textbox.
    Jonny Poet

    To be Alive is depending on the willingsness to help others and also to permit others to help you. So lets be alive. !
    Using Code Tags makes the difference: Code is easier to read, so its easier to help. Do it like this: [CODE] Put Your Code here [/code]
    If anyone felt he has got help, show it in rating the post.
    Also dont forget to set a post which is fully answered to 'resolved'. For more details look to FAQ's about Forum Usage. BTW I'm using Framework 3.5 and you ?
    My latest articles :
    Creating a Dockable Panel-Controlmanager Using C#, Part 1 | Part 2 | Part 3 | Part 4 | Part 5 | Part 6 | Part 7

  10. #10
    Join Date
    Jun 2008
    Posts
    2,477

    Re: C# Forms - Custom Popup InputBox

    Quote Originally Posted by JonnyPoet View Post
    As much as I have understood he doesn't want to click one of the buttons. He has a textbox and the two buttons :Ok and cancel there, but wanted to close the box with DialogResuslt.Ok when he simple presses 'Enter' after entering some text in the textbox. So if enterkey is pressed being in the textbox the Dialog should close with result ok. So for this he can use the delegate of the KeDown in the textbox.
    I believe that simply setting the "Accept" and "Cancel" button properties of the form will do just that, but I can't test it right now.

  11. #11
    Join Date
    Mar 2005
    Location
    Vienna, Austria
    Posts
    4,538

    Re: C# Forms - Custom Popup InputBox

    Quote Originally Posted by BigEd781 View Post
    I believe that simply setting the "Accept" and "Cancel" button properties of the form will do just that, but I can't test it right now.
    I just tested it. it works. I must confess I never used that. But maybe, because I normally dont have any dialogs which only have simple one textbox. And when I have more then one ( as usual in most of my programs ) I dislike to press enter for closing. In that case I want the focus to move to the next textbox ( In our firm no One uses the Tab button for this, all are wanting to have the enter button doing this.

    bixel please do the following code for example in your constructor just after InitializeComponents();
    Code:
        public partial class Form2 : Form {
            public InputBoxDialog() {
                InitializeComponent();
                this.AcceptButton = btnOK;
                this.CancelButton = button1; 
            }
        }
    Last edited by JonnyPoet; April 27th, 2009 at 01:44 PM.
    Jonny Poet

    To be Alive is depending on the willingsness to help others and also to permit others to help you. So lets be alive. !
    Using Code Tags makes the difference: Code is easier to read, so its easier to help. Do it like this: [CODE] Put Your Code here [/code]
    If anyone felt he has got help, show it in rating the post.
    Also dont forget to set a post which is fully answered to 'resolved'. For more details look to FAQ's about Forum Usage. BTW I'm using Framework 3.5 and you ?
    My latest articles :
    Creating a Dockable Panel-Controlmanager Using C#, Part 1 | Part 2 | Part 3 | Part 4 | Part 5 | Part 6 | Part 7

  12. #12
    Join Date
    Apr 2009
    Location
    Bahamas
    Posts
    33

    Re: C# Forms - Custom Popup InputBox

    Quote Originally Posted by BigEd781 View Post
    I believe that simply setting the "Accept" and "Cancel" button properties of the form will do just that, but I can't test it right now.
    It will.

    That's what I've been trying to tell the OP for several days now.

    Some people like doing things the hard way I guess.
    Thanks,
    - pgrammer

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured