Prevent Value Changed Events From Firing On Form Initialization?
Jun 30, 2010
Consider a simple VB.NET form with a couple of radio buttons and a checkbox.
Each of the radio buttons has a CheckedChanged handler setup that performs some action based on the state of the checkbox.
My problem is, when I initialize on the default radiobutton to be checked (from the designer properties window) the CheckedChanged event is fired for that radio button, but the Checkbox hasn't been initialized yet so I either get a null pointer exception or the wrong value is used in the handler. Either way, I don't want that handler code to be run unless the user picks a radio button after the form has been loaded.
I currently get around this by not initializing the radio button, but I need to set that default eventually and the best place is from the designer. I also can add a boolean field that's not set to true until the form is fully loaded and not process the events if that is false, but it's a dirty hack.
What can I do to prevent that handler from running its code?
When starting my application, I have a couple of classes which are required to read certain files in order to create a set of default data. The logical place (to me) to do this is in a Shared class constructor; the idea would be to throw a class-level event if the reading of the defaults file fails. Unfortunately, this does not work as attempting to access such an event, in order to attach a handler to it, fires the class constructor before the event has been attached. In a failing case, the constructor starts, fires the fail event, the constructor completes, and then the event handler is attached, after the event has fired.
The only other solution I can think of is to give the class a "typeInitialisedSuccessfully" boolean property and put a try/catch block around every call to construct an instance of the class, which seems unnecessarily kludgey to me. Can someone suggest a more elegant solution?
EDIT: Because this is a fundamental Class, used in one form or another across nearly all of our software tools, I would greatly prefer a solution that will notify future programmers that the type initialiser needs to be called, which is why I initially went towards the Shared Constructor as a solution.
Here is my code: Protected Sub BookingsGV_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles BookingsGV.SelectedIndexChanged BookingID = BookingsGV.SelectedValue Dim query = From a In db.Approvers Where a.ApprovalStatus = False And a.BookingID = BookingID Select a.ApproverEmail() [Code] ..... When I click on a row for the first time it is selected but nothing fires and my details panel is not displayed. When I click for the second time I get the expected results.
I have a TabControl in an application that started behaving strangely. this program was converted from VB6 to VB .NET 2008, and used to refer to forms using their class names. In other words, I might have a form class called frmFoo. In the code for the program you might see:
[Code]...
I opened the program and read a file. This file contained a value that should have triggered the event handler. Without making the control visible, I can change the SelectedIndex property of the tab control without the event firing.I closed the program down again, and reopened it. This time, selected the parent tab that allowed the child tab (the one whose event I'm concerned with) to become visible. I then selected a different tab in the parent control, meaning that the child control was no longer visible. When I opened the same file as before, it fired the event.
I'm tempted to implement a flag that confirms that the control has been repainted or whether the parent tab has been displayed. I may have to fire the event in code if the flag isn't set. I want to reiterate that everything worked when the program referred to the forms by their class names and much of the arrangement of controls on the forms was done in the load event. Now the program creates variables and the arrangement of the controls is done in the form's constructor. I'm sure this has something to do with the problem I'm having, but I can't understand how.
Is there a way to prevent the SelectionChanged event from firing when adding rows to a DGV programatically? I am adding rows in a loop & the SelectionChanged event fires twice, which is causing me problems. I only want it to fire when the user clicks on a row.
I would like this ASP button control to stop calling its event handler when the JavaScript client method IsCorrectPrice() returns false.
<asp:Button ID="btnsubmit" runat="server" Text="Submit" OnClientClick="javascript:IsCorrectPrice()"/> btnsubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnsubmit.Click
I'm trying to prevent a sub / function from firing multiple times on the same event.My app is for handling inbound phone calls (tapi).The app is supposed to route calls based on the callerid number.
aircode below:
Code:
Private Sub OnNewCall(ByVal sender As Object, ByVal e As NewCallEventArgs) Handles tapiManager.NewCall if newcall.callerid = "5551001" then redirect(newcall)
[code]....
If callA.callerid = "5551001" then redirect(callA)but, once it is redirected to the new extension, do not then grab the call from the new extension and try to redirect again (resulting in infinite loop).I realize I could use an integer as a counter, but the problem is, I might actually get more than 1 call at the same time from the same callerid number. And, all the calls would need to be redirected (once).the calls do have properties like (which are unique identifiers to each call):
Code:
phcall.id and phcall.hashcode
I'm thinking I need to put that unique id into a temp var / array to run a check against to see if it has been redirected, if it has then skip, if it has not then redirect.The app would run 24x7, and I don't want the temp var / array to get too big, and would want to have it clean automatically (up on a timer maybe?)(I'm guessing it would be a dynamically growing array.)
Public Sub btnGo_ServerClick(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnGo.ServerClick
The btnGo_ServerClick function needs to fire on the button click, but not on page refresh.I've tried using IsPostback, but that is always true- even on the button click.N.B. I'd rather not go into the reasons behind why I'm using a serverclick, rather than an asp:button and a click event. Suffice to say it just isn't suitable for I am doing.
I designed a DataGridView under the name "dgvTarifa" and took a chance on trying Row Validating (tried Validated, CellEnter, CellLeave, RowEnter, RowLeave all count same) event. The purpose of the code is to load the selected values of the respective columns into three textboxes in order to rephrase/revalue those and update them by pressing a button. All works fine every single line of code there's nothing wrong except one logical thing.
When the form loads the RowValidating automatically fires because I have a function that Selects the table from the Database and it fills the DataSet by then attaching it to the datasourse of the "dgvTarifa" table. After setting the datasource of the datagridview, it automatically jumps to the RowValidating event which I DONT WANT TO! It first has to finish the whole function and later when the user enters with mouse or enters/leaves a row this has to be fired. (eventually already have the CellClick event with the same code below so only RowValidating has to work properly...)
Here's the code I use at row validating
Code: Private Sub dgvTarifa_RowValidating(sender As System.Object, e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgvTarifa.RowValidating
I have a custom text box component (inherits from system.windows.forms.textbox) that I created in vb.net (2005) that handles the input of numeric data. It works well.
I would like to suppress the validating and validated events from firing if the number hasn't changed. If a user is tabbing through the form and tabs from the text box, the validating/validated events are fired.
I was thinking that the text box could cache the value and compare it to what is listed in the text property. If they are different, then I would want the validating/validate events to fire. If they are the same, nothing is fired.
I can't seem to figure out how to suppress the event. I have tried overriding the OnValidating event. That didn't work.
Update:
Here is the custom text box class. The idea is that I want to cache the value of the text box on the validate event. Once the value is cached, the next time the user tabs through the box, the validating event will check to see if the _Cache is different from the .Text. If so that is when I would like to raise the validating event to the parent form (as well as the validated event). If the _cache is the same, then I don't want to raise the event to the form. Essentially the text box will work the same as a regular text box except that the validating and validated method are only raised to the form when the text has changed.
Public Class CustomTextBox #Region "Class Level Variables" Private _FirstClickCompleted As Boolean = False 'used to indicate that all of the text should be highlighted when the user box is clicked - only when the control has had focus shifted to it
Can you write code to tell an event not to fire? Sometimes in my applications events fire unexpectedly. I know this is a broad question, but it must have happened to others out there.
I have a datagridview populated from a dataset datatable and all works well. Changing the values of columns updates the datatable except - if the 1st value changed is the last column on a row, the cellparsing and cellvaluechanged events don't fire. Others may not fire but these two I've been working with. The CellLeaving event fires and the RowLeaving event fires. Going back to the cell and changing the value again does cause the events to fire and everything works fine than.
why the events are not firing the 1st time a value is changed?
In debug I see that the datagridview iscurrentcelldirty value is true and also edit mode.
I have a windows form that can search for data and the results are results are returned in a Datagridview. The Datagridview is bound to a custom datatable object. On the CellDoubleClick and CellContentDoubleClick events, a new form is supposed to open which will display the results of that row. What I am noticing is that the datagridview doesn't always fire when I immediately double-click on a particular row. It would appear that I have to first click on the row to "select" it, then double-click the row so the event will fire. Is there a way to remove this intermediate "select" step? Is there a property in the Datagridview that needs to be activated so the double-click events will fire right away? Does something possibly need to be done in another DatagridView event?
I have a DGV in VB.Net 2008 connected to an Access DB table. The DGV is not Read Only, but is full of read-only columns except for one, which contains a combo box. The combo box allows the user to select an outcome for that particular row, and then the program copies in a pre calculated value into the "Profit" column depending upon the item selected in the combobox. Then the user hits the Save button and the DB updates (currently via SQL methods in the XSD).
Easy enough so far.
Here is the code.
Private Sub DGUserBets_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DGUserBets.EditingControlShowing
[Code]....
The problem I have is that it would seem that if a user selects the desired outcome from the combobox but does NOT hit Enter, and simply mouses on to a different combobox to again select the outcome for a different row, the first eventhandler is not disconnected and thus the events fire multiple times. This then causes various default MsgBox errors and brings up problems when the user tries to commit all changes to the DB/exit program etc etc.
What do I need to do? Do I need to .EndEdit somewhere appropriate to force the row to save the changes? And where should I call this?
I am trying to programmatically add an unspecified amount of new UserControls to a form. One will be added every time an entry is selected in a ComboBox contained within the UserControl. Problem is, the SelectedIndexChanged event fires completely erratically. Sometimes twice, sometimes 3 times, etc., but never just once. No matter how many times I set the combobox's SelectedIndex to -1, it fires at least once with a SelectedIndex of 0. Sometimes the Itemselected event fires multiple times inbetween SelectedIndexChanged events.
InvoiceEntry.vb snippet: Public Event ItemSelected As EventHandler Private Sub cboItem_SelectedIndexChanged(sender As System.Object, _ e As System.EventArgs) Handles cboItem.SelectedIndexChanged RaiseEvent ItemSelected(Me, EventArgs.Empty) End Sub [Code] .....
I'm trying to use the events Validating and Validated on a ToolStripTextbox.
Private Sub txtMenuOwnIP_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtMenuOwnIP.Validated MyIP = txtMenuOwnIP.Text StatusLabelIP.Text = MyIP End Sub
[code].....
Neither code is firing.The CausesValidatition of the txtMenuOwnIP is set to true.I can enter stuff into that Textbox and leave it using the Mouse or simply piush Enter, but the posted code won't get fired (used a Breakpoint in both subs). There are no other event routines for this command used.
Here's the situation: I have a variable number of dynamically created update panels on my page, so I thought I would write one method which handles all of the loading for each one.
My Updatepanel creation looks something like this: Dim newUpdp As New UpdatePanel newUpdatep.ChildrenAsTriggers = False
I'm creating a small game which when the user clicking a menustrip item "New game" adds event handlers to each label in a panel control.
For Each scoreLabel As Label In Me.panelScore.Controls If Not (scoreLabel.Name = "lblLeftBonus" Or scoreLabel.Name = "lblLeftTotal" _ Or scoreLabel.Name = "lblRightBonus" Or scoreLabel.Name = "lblRightTotal") Then
I have a combobox in winforms, which, depending on what you select, determines what's populated in other comboboxes. I filled the initial combobox using a dataview: combobox_process.DataSource = dataview combobox_process.DisplayMember = "UserDefine1" combobox_process.SelectedIndex = -1
Which works fine, except every one of those lines throws the SelectedIndexChanged event. The function that populates the next combobox listens for that event and so it's running three times. I asked a coworker and he suggested just looping through the data and adding them all manually as strings, but I'd prefer to stick with databinding if I can. Especially if, in the future, I need to do something that I can only do with databinding. Perhaps some way to disable that event during a portion of this code?
I have a listbox binded to a list of objects. For each list item I wanted to have a rectangle whose fill color is determined by a few properties of the binded object. So I did the following:
Made sure INotifyPropertyChanged was implemented on my object.Created a class to expose the properties I am interested in as attached properties.Binded the properties of the object to the attached properties of the rectangle Created a style that uses triggers to set the rectangle fill based on attached properties.
This works, but only the first time the property of the object changes. After that, the attached properties do not seem to be receiving notification when the data object's property changes. I have double checked and my data object is raising the INotifyPropertyChanged event.
When i use my UserControl in a project my Mouse Enter & Leave events aren't firing, i assume i fix this with a raiseevents in my usercontrol. However when i try to do this it says something about "cannot raise base event from derived class".
I am Visual Foxpro Programmer and moved to Vb.Net. In Foxpro for each control I add to the form, there is a method called Init where this is executed only once when the form run.
I have a VB.NET application. When Texter or PhraseExpress is installed and enabled, the program behaves poorly. Debugging has revealed that at times I can press Enter in a field and no event will be fired (i.e. no breakpoints in the event handlers get hit), then I press it again, and they will be fired twice. (Basically these cycle if I keep pressing enter - one time nothing will happen, the next I get two events, the next keypress does nothing, the next triggers two events, etc.)
Since Enter is used in certain places to trigger searches, or to move between fields for fast data entry using the numeric keypad, this effectively breaks the program in these spots. The problem is highly repeatable - disabling Texter or PhraseExpress causes the program behaves perfectly normally. Enabling them again causes it to break. Note that in both text expansion programs, I have assigned NO events to the Enter key. In fact, with Texter (haven't done this particular test with PE yet), it happens even if NO replacements have been defined at all, simply based on whether Texter is enable or disabled.
I fear that there is something obviously wrong with my code, but I have come across a situation where the Form.Load event is not firing when I create and show my form. The form is not subclassed (as I've seen some problems with that in some searches), and I am not getting any errors thrown when I step through the code in the debugger.
I have a break point set on the IDE-created form load function (which does have the Handles MyBase.Load signature suffix) but the breakpoint is never reached and the form does display and work.The form is passed three arguments in the constructor but the IntializeComponent() function is called before anything else is done.
I am using VB.Net for my Windows application. I will open two child form from MDI. Both forms will open. Now if I will go from form1 to form2 then Activate event for form2 will not fire.