Done that, thank you! I still can't seem to figure out couple of things, could yo help?
1. When I'm switching between mdi child forms it looks like the next one is maximizing - there's that blue windows title bar animating inside parent form briefly. How do I turn one child form off and activate new child form without visual artifacts, i.e. fast and smoothly?
2. I can't get rid of the (main?) menu strip at the top of the parent form, no matter how I try when I got mdi child forms. How do I remove that menu, which is not needed and makes the view look bad?
I what to create an Add-ons for firefox... What are the things I should know before working on that.. actually I have google it but dont get any clue... so please guide me.. looking for a quick response..
i wonder y this piece of code does not erase my rectangle drawn over the display dc. really annoying this stuffs, not works like specified when code :x)
ok friends, i have drawn a rectangle on the display dc as specified in the first post, assume drawn over the system tray area. so now i use the below code to erase it. the code is perfect. but winodws does not react to it
My question is quite simple and i'm not sure there is a solution. But if you have any suggestions to go round, it would be great as i'm not really content of what i'm doing so far.
Here is the problem :
Let say you have a base form named FORM and 3 derived forms (FORM1...).
On the base form you have several controls (buttons, textbox, labels, more than 10) taking all space of the form.
On the derived forms you can see them all (design- and run-time)
Very easy so far.
Let say now that i wan't to replace a textbox by a combobox ONLY on FORM1.
I add my combobox at the right place, i make my textbox non-visible by setting the property and all is ok at run-time... but not in the designer ! where i don't have the place to put my inherited textbox cause it's still visible at design-time and my form is full of controls.
To make even more simple, i would like to prevent the designer from showing, in a particular derived form, a control inherited from a base form.
My "solution" for the moment is to set the location property of my textbox at "1000;1000" so it is not visible in the designer.
I suspect you must have some reasons for not doing this, but wouldn't this be more straightforward if you just stripped the controls from the base form that don't actually appear on all the derived forms, and just leave a hole where these replaceable controls go?
Actually I have 8 derived forms which use 15+ identical controls. But for 1 of these derived forms, 4 controls have to be replaced.
What you suggest, tell me if i'm wrong, is to remove these 4 controls from the base form and add them in each derived forms (7 here). But if i do that i'll loose the factorisation benefit for these controls.
That's a clean and acceptable solution since you don't have to deal with many controls on many derived forms. I simplified the example to make it clear but if i do that in my real case, i will multiply the depth of inheritance and the forms without a functional purpose.
I've seen this question in various forms in several places, but I have yet to see a satisfactory solution.
Using .Net Framework 2, I've got a DataSet with elements bound to several TextBoxes which are scattered on several tab pages on a form. I can then change any of the TextBox texts, and the corresponding changes do appear in the DataSet.
I want to enable an Apply button when any of these elements have changed. I tried to use the DataSet's HasChanges, but it will not return a 'true'. I also tried a RowChanged event on one of the DataTables in the DataSet, but it never triggered. I tried to resort to using the TextChanged event from all the TextBoxes. That almost works, but the event is raised when the binding initially sets the TextBox contents. I can tolerate that on the first tab page of my form, but the TextBoxes on the other tab pages don't get set until you initially select those tabs, and it is difficult to distinguish between a user-initiated change and the original setting.
This is what I do. Have form level boolean bLoading instantiated to True, do your binding in the formloading event, the last thing in the formload event is to set bLoading to false and turn off the save button.
bLoading can also be used to short circuit the combo selection events and any selected index change events during the loading by putting If bLoading then Exit Sub/function in the event method.
Never underestimate the power of human stupidity
I think I am actually doing the equivalent. I'm loading the DataSet in formload, and then I disable the 'apply' button (or 'save', etc). Then, any subsequent edits of the TextBoxes will raise their TextChanged events and I can then enable 'apply'. The problem shows up on the additional tab-pages that I have on the form. Their TextBoxes don't seem to receive the bound data until the user clicks on the tab-page, and this raises their TextChanged events. And this seems to occur after the tab-page's Enter event is raised, so I can't find a good place to re-disable the 'apply'.
Don't know if it works, but maybe you can fire the load/enter event of each tabpages when the form is loading. All bindings should have been done after that.
Or you can have a boolean for each tabpages that determines if it's the firs load or not.
Not very good solutions. It's a shame you can't use events related to your datasource.
Their TextBoxes don't seem to receive the bound data until the user clicks on the tab-page,
Interesting, I have never actually bound 1 record to multiple tab pages, I must try this to verify the event sequence. As seven suggested you could use the tab changeindex to manage the button state but it is ugly.
Never underestimate the power of human stupidity
I think it's strange that I wrote my own control, sort of an editable list control thing (I don't like the DataGrid), and it seems to set the DataSet HasChanged properly (I think because my control does BeginEdit and EndEdit). I don't understand why the TextBox doesn't do as well? Like the English guy with the vacuum cleaner says, 'things just ought to work properly'.
It looks like the 'Enter' event for each of the tab pages occurs before the controls on that page are updated from the DataSource. And it looks like the 'SelectedIndexChanged' from the tab control occurs after the updating. So, I can set a flag while any of the pages are being updated and ignore any of the 'changed' events from any of the controls during that time. Not too pretty, but it seems to do the job.