Moving button stops click event happening - c#

I have a button, contained in a panel, with a click event, that works fine. However when a users presses another button, I need to move this button into another panel (this is actually a panel with a modalpopupextender), so I this code to do so:
newPanel.Controls.Add(buttonPanel)
It all get's moved and looks fine. However now when the button is clicked it doesn't fire the associated event. I have tried re-adding the event in the page_init, with this code
((Button)this.FindControl("serverModalSave")).Command += new CommandEventHandler(modalSave_Click);
But with no luck. How can I get this button to fire it's click event when moved, and why does it stop working when it's moved?
EDIT:
This Button needs to be added to a panel specified by the user at run time, so there is not a way to determine where the button will go in advance.
I could instead of moving this button, create a new one, but because this button is not created in the page_init I am having issues getting that to fire an event either.

Instead of moving the button, have another button on the other panel set to hidden.
Hide the button you wanted to move and show the hidden one when needed.
Moving the control changes the naming hierarchy and now the button can't be found and the click event can't fire.
This is due to how the page life cycle works. Here is a good (if somewhat dated) article about how view state works - if you understand this, you will understand what went wrong.

If you are creating the button in the new panel, when this button is then clicked do you re-create it in the postback ?
You must re-create all controls on each postback see here

Related

Make Button Ignore ENTER key pressed c#

im building a page using ASP.NET, however, the first element of my page is a Button and there are other elements below it, however, if the client types something and it shows a confirmation box, and he presses ENTER key, it activates the first button at the page.
I tried to change the tab order does not work.
sorry for noob question xD
Have you tried setting UseSubmitBehavior=False on the first button?
Don't handle the click event. Handle the MouseClick event instead. So whatever code is in click, simply move to the MouseClick event

C# ASP.net How to add a reload of the page/panel at the end of a button event?

I have a page that consists of an updatepanel with a DropDownList, a textbox and a button in it. The updatepanel has a trigger for the button. This works fine for all my "error" cases, such as "No input!", when I pop an alert with
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(),"noName", "window.onload = function(){alert('Please enter a username!');window.location ='Accounts.aspx';}", true); and the like.
But when I don't hit the alerts and the button event runs all it should I seem to land in some dead zone. My alerts stop displaying even though the code runs (checked by debugging), the button event does still preform all tasks as it should. However, if I refresh the page I get the classic:
To display webpage again. After I click retry my "latest" message pops up and then it works just like on first load.
So, I'm guessing that the PostBackTrigger on my button triggers a PostBack before or during the event execution since when the event is done nothing more happens until I reload. I'm thinking I need to add a reload at the end of my button event. Therefore my question is: How do I add a reload of the page/panel at the end of a button event?
Edit:
Forgot to mention that when the button event runs all it should it edits the web.config file, if this somehow could cause my issue.
I found a solution to my problem, by removing my triggers and instead using:
ScriptManager1.RegisterPostBackControl(Button);
Then I could also put an:
UpdatePanel1.Update();
At the end of my button event.

Why does a button handle a click differently to non-buttons

This may sound like a really silly question but I've noticed that the Click behaviour of my custom buttons differ when I inherit my class from a Button or UserControl.
I'm developing some controls with a customized look, among others, a button. The default user control class declaration is like this:
public partial class cButton : UserControl
After I added all of the GUI stuff, I added it to my form and tested the click-behaviour.
When I click the button in rapid succession, it only registers ever other click, not even every other click. I thought there is something wrong with the test code, but when I copied the exact code to a normal Winforms button, it registered every click no matter how fast.
Edit: the user control registers every click if I don't click to fast i.e. I wait a few seconds between every click.
I changed my custom control's decleration to inherit from the button class and made absolutely no other changes to any code:
public partial class cButton : Button
When I did my click-test the custom button behaved well, like a winforms button, not missing a click.
Just to test things, I added a list box to my form and added the same test code to its click event and it acted like a non-button, only registering a click every now and then.
I thought a click is supposed to be handled consistently, but apparently it's not that simple.
The question I have arising from this:
What does a button do differently and what could I do to ensure proper
click-behaviour when it is not possible to inherit from a Button?
Your custom UserControl is differentiating between single clicks and double clicks.
To make it operate like a button, you need to set the StandardDoubleClick control style so that when the user clicks twice in rapid succession, the control registers two single clicks and raises two click events, and not a double click event.
Within the constructor add the following statement:
this.SetStyle(ControlStyles.StandardDoubleClick, false);
I think the issue you're experiencing is that if you click the button too fast it registers as a double-click instead of a click. You can check this by writing to your output on double-click so that if your codes doesn't fire, check to see if double-click event did.

Adding Click Handler On UserControl Breaks Click On Children

I have a user control that I'm trying to make draggable. The whole control should be draggable except when you click on buttons or text boxes. I'm handling the mousedown, mouseup and mousemove events on the usercontrol itself and I can drag by clicking anywhere. The only issue is now I can't click any buttons on the user control. Any clue what's going on?
Code is something like this:
<UserControl PreviewMouseLeftButtonDown="Popup_PreviewMouseLeftButtonDown" ....STUFF...>
<!-- CAN'T CLICK THIS -->
<Button />
<UserControl>
Code Behind:
public void Popup_PreviewMouseLeftButtonDown(object sender, MouseEventArgs e)
{
mouseDown = true;
oldMousePosition = this.PointToScreen(e.GetPosition(this));
this.Popup.Child.CaptureMouse();
}
The issue arises when you use CaptureMouse() - this permanently captures all your mouse input on the window, and makes it so that you're unable to click on anything within the Window. I don't know if it's different for you, or if you checked, but it's not (just) that the Button is unclickable - it's that literally everything on the Window is unclickable.
You have to actually do something with the mouse after you've captured it, and then once you finish that, you have to return normal control by calling Mouse.Capture(null). For you, this would probably be best to do in your MouseUp() method.
However, this still leaves the child problem. I can't really think of any way you're going to be able to both capture all mouse click events on a parent control and allow them to get to the child control. I suppose you could check the mouse position against the button position, both relative to the UserControl, then route the click event to the Button every time, but this seems a little overelaborate. Is there a reason you can't just add a full-sized Grid to the UserControl with a lower ZIndex than the Button, and just use that to detect if a click was made inside the UserControl but not on the Button?

ASP:Button OnClick event not firing in one specific instance

What I have is a popup defined within a user control, that is opened within a taskbar user control, which is attached to a master page, such that:
MasterPage.TaskBarUC.PopupUC
Within the popup, there are two buttons, one to save what the user is trying to do within a database, and one to cancel. I have some codebehind that does the work when the user clicks either button.
So every page has the taskbar, and they can click a button on the taskbar to access the popup and save the information. It works perfectly. However, there is one specific page within the site that needs to access the same popup from a button located on the page, as well as from the taskbar.
The button works, and it opens the popup, but for some reason, and only in this case, the "Save" button doesn't activate my codebehind. It DOES perform the validation that I have it do though. What is also weird is that the cancel button, which also activates some codebehind, does do what its supposed to.
I tried putting a breakpoint right at the beginning of my "Save" event handler, and it never reaches it. Its as if the button is only validating, and completely ignoring its OnClick event.
.aspx
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click"
ValidationGroup="Validation" />
I guess what happens is that the validation process has failed, which cancel the handling of the Button.Click event.
To check this possibility try to set the value of the Button.CausesValidation property to false and see if the Button.Click handling is going to continue or not.
Button.CausesValidation property to false worked for me. I am using required field validator for different button. I think this could stop post back even for all other button click events (serverside).

Categories