|
Who said anything about a "grid control"??
|
|
|
|
|
|
You really don't have to do much at all to get this to work.
Notice that the Form.Show() method has two possibilites? One is no parameter at all:
Dim newForm As New Form2()
newForm.Show()
The override version of this takes an IWin32Window argument. This is the form that owns the new child window and will result in you getting what you want when you minimize your parent form:
Dim newForm As New Form2()
newForm.Show(Me)
|
|
|
|
|
This works with 2 forms , Form1 and Form2.
But doesn't work when I try with form3.
This is the Situation
Form1 is open.
Form2 is open , and has a button that open form3.
If on the button's onclick event :
1) I try : Form3.show(Me) - when I press the minimize button on form 1 , the form 3 is not minimized.( all the form should minimized when I click minimize button on Form1. )
2) I try Form3.show(Form1) - The minimize process is ok , but if I click anywhere on Form2 , the form3 goes behind Form2. I want 3 forms to have this rule : Form2 on top of Form1 , Form3 on top on form1 and form2.( And form3 can be closed before form2 )
What can I do ?
modified 2-Apr-14 12:14pm.
|
|
|
|
|
dilkonika wrote: Form2 on top of Form1 , Form3 on top on form1 and form2 Show them as a dailog, if that is their purpose.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
if a show them as dialog , I can't minimize all the forms when pressing minimize button on Form1.
|
|
|
|
|
That's how it should be; that's how Windows works. You can maximize the app, not each individual window. If they're not a dialog, then they can be focussed.
I'd recommend researching how the default Windows work (and why, and why the user gets frustrated if you change the default behaviour), as opposed to trying to get your custom z-order.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
myForm3.ShowDialog()
or
myForm3.ShowDialog(Me)
Again, read the documentation on the Form class and it's methods.
|
|
|
|
|
if a show them as dialog , I can't minimize all the forms when pressing minimize button on Form1.
|
|
|
|
|
OK, so do you have any clue on how to experiment?? This took me all of about a minute to code:
Form1:
Dim frm As New Form2()
frm.MyTopLevelForm = Me
frm.Show(Me)
Form2:
Public MyTopLevelForm As Form
.
.
.
Dim frm As New Form3()
frm.Show(MyTopLevelForm)
|
|
|
|
|
Thank you !
But again ,the minimize process is ok , but if I click on form2 , the form 3 goes behind and doesn't stay on top.
|
|
|
|
|
I have no idea how you really want this to work.
All you've done is "that's nice but I want it to do this", "that's nice, but now I want that", "now I want this"...
Sorry, but you've been given the tools to experiment with. Start experimenting.
I've got my own 50,000 line app to deal with.
|
|
|
|
|
To be clear :
I have form1 , Form2 , Form3.
Form1 is open first , Form2 is open from a button on form1 , Form3 is open from a button in form2.
I want that :
- When the form2 is open , Form2 is over Form1.
- When Form3 is open , Form3 is over Form2 and Over Form1.
- This behavior is only inside application . If another window is open for example Windows explorer , all my forms should goes behind.
- If the 3 forms are open , if I press minimize button on form1 , all the forms should minimized on taskbar.
- And when the 3 forms are open they should be closed in this mode : Form3 first , Form2 and Form1.
It's clear now ?
I try different ways , but I can't realize. ( with 2 forms I have done very easy , but with 3 forms I can't do it).
It's not an experiment. I have a situation where I need this.
Thank you !
|
|
|
|
|
dilkonika wrote: It's not an experiment. I have a situation where I need this.
No, I said this is where you come up with a small test project and experiment for yourself! It's the best way to learn.
|
|
|
|
|
Create a WindowStateChanged event for your forms (you may need to override WndProc to get the underlying Windows message WM_SYSCOMMAND SC_MINIMIZE etc). Child forms need to subscribe to that event of their parent form and react appropriately.
Also look at the TopLevel property of the forms.
|
|
|
|
|
This is quite an interesting problem. To get the desired Z-order then the main form must own Form2 and Form2 must own Form3. Having set that up we find that Form3 is unaffected by minimization of the MainForm/Form2 pair.
Form3 needs to be linked to Form2 in some way, but how? My first guess was to try the SizeChanged event but found that Form2 does not raise SizeChanged when MainForm is minimized. Next guess was the LocationChanged event but it's not that either. However VisibleChanged is raised by Form2 when MainForm minimizes or restores. So Form2 is hidden when MainForm is minimized and the solution to the problem becomes clear.
Form3 could subscribe to the VisibleChanged event of Form2 and set it's visibility but I chose to do it in a different way. In the test code Form2 hides/shows all the forms in it's OwnedForms collection in response to the VisibleChanged event.
Test code
=========
Private Sub CreatePopups()
Dim f2 As New Form()
f2.Text = "First Popup"
AddHandler f2.VisibleChanged, AddressOf Form_VisibleChanged
f2.Show(Me)
Dim f3 As New Form()
f3.Text = "Second Popup"
f3.Show(f2)
End Sub
Private Sub Form_VisibleChanged(sender As Object, e As EventArgs)
Dim f As Form = DirectCast(sender, Form)
For Each ownedForm As Form In f.OwnedForms
ownedForm.Visible = f.Visible
Next
End Sub
Alan.
|
|
|
|
|
Finally , Resolved.
Thank you !
|
|
|
|
|
|
Don't call it VB.NET 6. You'll get some very confused looks. Call it VB.NET 2008.
You're looking at the old Setup and Deployment project. This wasn't available in any Express editions of Visual Studio and, really, the entire project type was removed from Visual Studio 2010 and above.
Use a 3rd party installation crafting tool like Advanced Installer, InstallShield, InnoSetup, Wix, ANYTHING but the Setup and Deployment project.
|
|
|
|
|
|
Hello !
I'm trying to write data in windows registry with this code :
Private Sub write(vl As String)
Dim key As String = "SOFTWARE"
Dim regkey As RegistryKey = Registry.LocalMachine.OpenSubKey(key, True)
If IsNothing(Registry.LocalMachine.OpenSubKey(key & "\DQ10", True)) Then
regkey.CreateSubKey("DQ10")
End If
regkey = Registry.LocalMachine.OpenSubKey(key & "\DQ10", True)
regkey.SetValue("P_US32", vl)
regkey.Close()
End Sub
But on this line :
Dim regkey As RegistryKey = Registry.LocalMachine.OpenSubKey(key, True)
I'm getting this error :
An unhandled exception of type 'System.Security.SecurityException' occurred in mscorlib.dll
Additional information: Requested registry access is not allowed.
What can I do ?
Thank you !
|
|
|
|
|
The error message is quite clear: your application doesn't have permission to write to the HKEY_LOCAL_MACHINE hive of the registry.
Either change your code to read/write from a key under the HKEY_CURRENT_USER hive, or run your application with the elevated permissions required to write to the machine hive.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
The application was running ok from the visual basic 2012. I have upgraded to visual basic 2013 , and after that I can't write anymore to this key.
and I run the application under an administrator account
modified 31-Mar-14 15:09pm.
|
|
|
|
|
It's nothing to do with the version of Visual Basic or .NET; your application simply doesn't have permission to write to the key.
Unless your application is running as a user with Local Administrator permissions with UAC elevation, you won't be able to write to the HKEY_LOCAL_MACHINE hive of the registry.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Ok , but I have noticed this problem after the upgrade process.
And I'm running my application as a Administrator user . ( if I use regedit , I can write to this key)
|
|
|
|