Windows Forms: Multiple default buttons? - c#

In a simple Guess-The-Number game I'm making, the user inputs a couple of numbers and hits a button. A second panel becomes enabled and the original one is disabled. The user now enters a number and hits another button, multiple times. Since the two panels will never be enabled at the same time, I'd like for both buttons to be "default", i.e., they will be pushed if Enter is pressed. Is this possible? Apparently, I can only set one of these per window.

A window in Windows by definition has only one default button. This is a functionality intended for dialog windows where you would never disable the default button.
What you can do instead is to switch the default button when you disable one panel.
Another option would be to throw out default buttons altogether and use KeyPreview on the form and handle the enter key yourself, sending it to the appropriate button that is currently active.

Nope, no way to accomplish that that I know of. You'll have to switch the default button when one button is pressed to the next button.

You can only have one default button per window. However, this can be changed at runtime, so when you activate a specific panel, you can make it's button the default one at that point.

Related

How to apply focus visual style for a button without actually focusing it?

Trying to get a similar effect as the Windows Run dialog. The input box is focused and taking input, and the "OK" button also gets the focused border(but not actually focused). I can't find a way to set button's visual style properly...
C# Winform, .net 4.5(higher version is also OK).
.
The property you're looking for is AcceptButton on the form it self.
Select the okButton on the form AcceptButton property to make it the default action on Enter keypress.
You also have a similar action for the CancelButton that triggers on Escape keypress.

How to apply multiple events on a single button click

So i am using Windows Forms App on visual studio c#. I am developing a game. For that i have given an "INSTRUCTIONS" Form. In that form i want to give the instructions. The game has 4 modes so for each mode i want to give separate instructions. I have used groupBox for providing instructions for each mode. Which means that in the groupBox i have added textBox for instruction. Now for 4 modes i am using 4 groupBox.
Now the question is that how to open groupBox2 then groupBox3 then groupBox4 by clicking on same "NEXT" Button?? Like when the form loads the groupBox1 loads which is for first mode. Now when the user clicks on NEXT button, the groupBox1 gets invisible and the groupBox2 becomes visible which is for second mode. Then again when user clicks on same Next button the groupBox2 gets invisible and groupBox 3 becomes visible.
In the same way for "PREVIOUS" button which will make groupBox3 invisible and groupBox2 visible.
There are a couple reasonable approaches to this.
One would be to keep a variable int step (or similar) in the class data, and inside the button's unified click handler do switch (step).
Another would be to have separate click handlers, and in the first click handler, do NextButton.Click -= Step1NextClicked; NextButton.Click += Step2NextClicked; and similarly in the others.
A variation on the second approach would be for the button click handler to not have any logic of its own, but just call an Action which points to a separate handler function at each stage. Then you can update the Action in a single assignment when changing stages, instead of having to remove the old handler and add the new one.
Yet another approach would be to swap not just the groupbox, but a borderless panel holding both the groupbox and the button. Then you actually have multiple Next buttons that display one at a time in the exact same screen location.
Personally I would use the first option, since it's very efficient. If I had more than a handful of different behaviors, I would probably use the Action approach.

Omit action when pressing Enter on button

Is there a way to omit the (whatever) performed action on a button when the key is pressed? I already got some good inputs from SO and tried to catch the event via OnKeyPress or OnKeyDown - but I could not omit the Enter-action. I also liked the idea of disabling the Tabstop property, but as soon as I click the button the problem reoccurs.
OnKeyDown only seems to fire when "casual" keys (like a or z) are pressed, but not when Enter is hit. How can I detect it - when Enter is hit - on the button itself?
When you press ENTER inside a non-multiline field on a form with a default button set, the click event for this button is fired, like a click, not like a keyevent (keypress, keyup, keydown, etc).
Form.AcceptButton
Gets or sets the button on the form that is clicked when the user
presses the ENTER key.
If you don't want this behaviour (or want to prevent it), maybe you should remove it as the default button.
But if you need it to be default only in certain situations, you can bind/unbind it programatically:
form1.AcceptButton = btnSave;
form1.AcceptButton = null;
You can use : if(e.KeyCode == Keys.Enter){}
Check the Button.IsDefault property
Well, the fact that
When you press ENTER [...] the click event for this button is fired
made me think about the use of the OnMouseUp(MouseEventArgs e) method instead of OnClick(EventArgs e). I gave it a shot and it totally fits my requirements - plus: it gives me the opportunity to only exclude the wrapped buttons from said issue, not involving any other controls in my application (like Form.AcceptButton).
Thanks for all your input, which made me think about the issue from another perspective!

How to restrict user from double clicking any command button

There is an issue that I am facing, is to restrict user from double clicking on a command button. What it does is execute twice the code written inside it's click event. I've read many solutions for it, which I find are irrelevant. The command button, they say, should be disable after a click is performed so that user won't be able to perform another click. This will create an issue when an error occur and the code that is written to enable the button didn't execute.
Is there any other way to do it? Please suggest if any one have better option than this.
You could disable it, and put all your code within a try, catch, finally clause, and put the enabling code in finally.
Give it a read.
That way it should always run, exception or not.
I assume that you are referring to WPF, as Windows Forms has a specific double click event which can be disregarded.
Unfortunately WPF does not make a distinction between double clicking a button and clicking the button twice. This means that you have to perform the check to see if the second click occurred too soon to the first click to be regarded.
This could be done by storing the DateTime.Now in a member variable in the button click event handler and if the click occurs within a too short amount of time of the previous click, simply indicate that the button click event was handled and return without doing anything.

disable default behaviour of Internet Explorer

I am using asp.net C#.
I have one html input field, and 3 image buttons (asp.net controls)
ImageButton 1 = perform delete operation
ImageButton 2 = perform Edit operation
ImageButoon 3 = perform duplicate operation
My problem occurs when the user presses the enter key when the input field is in focus.
When he presses the enter key the browser automatically fires by default the next button.
In my case it is the delete operation.
How can I prevent this?
Configure DefaultButton property properly.
you can also hide a button at the top of your page/form that will attract the attention of IE when you hit enter.
<button style='position:absolute;left:-1000px'>IE sux</button>
that button won't display on the screen but IE will click it whenever you hit enter. since it has no action on click, nothing will happen.
note: only works in IE9. perhaps useful with the default button option above.
As mentioned above, use the form's defaultbutton property or it you use a panel use that of the panel.
http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlform.defaultbutton(VS.80).aspx

Categories

Resources