Connecting Tech Pros Worldwide Forums | Help | Site Map

Locate MessageBox over Window

Ed Bitzer
Guest
 
Posts: n/a
#1: Nov 21 '05

One option of the messagebox object indicates it can be placed over a
selected window rather than just appearing centered on the desktop. The
function is "Overloads Public Shared Function Show(IWin32Window, String) As
DialogResult"

I have unsuccessfully tried:
///
Dim winhandle as string
Dim rtn as DialogResult
winHandle = Me.Handle.ToString()
rtn = MessageBox.Show(winhandle, "My message")
\\\

Unfortunately the winhandle becomes the content with the My message as the
title and the box in the center of the desktop, not over form1.
Appreciate some help.

Ed



Herfried K. Wagner [MVP]
Guest
 
Posts: n/a
#2: Nov 21 '05

re: Locate MessageBox over Window


"Ed Bitzer" <edbitzer@yahoo.com> schrieb:[color=blue]
> One option of the messagebox object indicates it can be placed over a
> selected window rather than just appearing centered on the desktop.[/color]

You can position a messagebox window by using a hook. A VB6 sample which
can be converted to VB.NET can be found here:

<URL:http://dotnet.mvps.org/vb/samples/misc/DialogPosition.zip>

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>

Ed Bitzer
Guest
 
Posts: n/a
#3: Nov 21 '05

re: Locate MessageBox over Window



"Herfried K. Wagner [MVP]" <hirf-spam-me-here@gmx.at> wrote in message
news:eBFcC6mMFHA.2704@TK2MSFTNGP15.phx.gbl...
[color=blue]
> You can position a messagebox window by using a hook. A VB6 sample which
> can be converted to VB.NET can be found here:
>
> <URL:http://dotnet.mvps.org/vb/samples/misc/DialogPosition.zip>[/color]

Herfried,
I do thank you but converting that code is over my head. The vb.net
messagebox object appears to have the capability and simply executed but I
do not understand the window identification syntax.

Ed


Stephany Young
Guest
 
Posts: n/a
#4: Nov 21 '05

re: Locate MessageBox over Window


The 'owner' parameter to the MessageBox.Show() method is of type
IWin32Window. It does not represent a window handle, rather it represents a
window. so in your case it should be: rtn = MessageBox.Show(Me, "My
message").

The bigger point to understand when you read the documentation is that "You
can use the owner parameter to specify a particular object, which implements
the IWin32Window interface, to place the message box in front of.". Note the
use of the phrase 'in front of'. This means the position of the dialog in
the z-order, not the location of the dialog on the screen.

I have never understood how this parameter is useful. Because the dialog is
modal to the application, I can't see any point in displaying the dialog in
front of a window that might be behind the current window. One would have to
move the current window to see it but the dialog is modal so you can't.


"Ed Bitzer" <edbitzer@yahoo.com> wrote in message
news:%23GsG10mMFHA.1884@TK2MSFTNGP15.phx.gbl...[color=blue]
>
> One option of the messagebox object indicates it can be placed over a
> selected window rather than just appearing centered on the desktop. The
> function is "Overloads Public Shared Function Show(IWin32Window, String)
> As DialogResult"
>
> I have unsuccessfully tried:
> ///
> Dim winhandle as string
> Dim rtn as DialogResult
> winHandle = Me.Handle.ToString()
> rtn = MessageBox.Show(winhandle, "My message")
> \\\
>
> Unfortunately the winhandle becomes the content with the My message as the
> title and the box in the center of the desktop, not over form1.
> Appreciate some help.
>
> Ed
>
>[/color]


Herfried K. Wagner [MVP]
Guest
 
Posts: n/a
#5: Nov 21 '05

re: Locate MessageBox over Window


Ed,

"Ed Bitzer" <edbitzer@yahoo.com> schrieb:[color=blue][color=green]
>> You can position a messagebox window by using a hook. A VB6 sample which
>> can be converted to VB.NET can be found here:
>>
>> <URL:http://dotnet.mvps.org/vb/samples/misc/DialogPosition.zip>[/color]
>
> I do thank you but converting that code is over my head. The vb.net
> messagebox object appears to have the capability and simply executed but I
> do not understand the window identification syntax.[/color]

The .NET messagebox doesn't have this capability out of the box (although
you can specify an owner window). I doubt that it's worth the effort to
center a messagebox.

--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>

Ed Bitzer
Guest
 
Posts: n/a
#6: Nov 21 '05

re: Locate MessageBox over Window


Stephany,

I certainly misunderstood - as you suspected I was not thinking about the
z-order but the placement of the messagebox relative to my form. My program
has a relatively small window and I found the message box voicing a
confirmation could be "far away." When I saw this option I jumped, but then
stumbled with my lack of knowledge of IWin32Window interface. So the
alternate solution (besides leaning a bit more, and at 72 I am getting a bit
old for that) is to create my own form and control its position relative to
the form opening it.

Ed


"Stephany Young" <noone@localhost> wrote in message
news:%23zQIZGoMFHA.436@TK2MSFTNGP09.phx.gbl...[color=blue]
> The 'owner' parameter to the MessageBox.Show() method is of type
> IWin32Window. It does not represent a window handle, rather it represents
> a window. so in your case it should be: rtn = MessageBox.Show(Me, "My
> message").
>
> The bigger point to understand when you read the documentation is that
> "You can use the owner parameter to specify a particular object, which
> implements the IWin32Window interface, to place the message box in front
> of.". Note the use of the phrase 'in front of'. This means the position of
> the dialog in the z-order, not the location of the dialog on the screen.
>
> I have never understood how this parameter is useful. Because the dialog
> is modal to the application, I can't see any point in displaying the
> dialog in front of a window that might be behind the current window. One
> would have to move the current window to see it but the dialog is modal so
> you can't.
>
>
> "Ed Bitzer" <edbitzer@yahoo.com> wrote in message
> news:%23GsG10mMFHA.1884@TK2MSFTNGP15.phx.gbl...[color=green]
>>
>> One option of the messagebox object indicates it can be placed over a
>> selected window rather than just appearing centered on the desktop. The
>> function is "Overloads Public Shared Function Show(IWin32Window, String)
>> As DialogResult"
>>
>> I have unsuccessfully tried:
>> ///
>> Dim winhandle as string
>> Dim rtn as DialogResult
>> winHandle = Me.Handle.ToString()
>> rtn = MessageBox.Show(winhandle, "My message")
>> \\\
>>
>> Unfortunately the winhandle becomes the content with the My message as
>> the title and the box in the center of the desktop, not over form1.
>> Appreciate some help.
>>
>> Ed
>>
>>[/color]
>
>[/color]


Ed Bitzer
Guest
 
Posts: n/a
#7: Nov 21 '05

re: Locate MessageBox over Window


Herfried ,
Stephany caught my misunderstanding and I do thank you for trying to
help. Have got to lean how to convert old API's so will study the code you
offered.

Ed
"Herfried K. Wagner [MVP]" <hirf-spam-me-here@gmx.at> wrote in message
news:%23hWzQLrMFHA.1392@TK2MSFTNGP10.phx.gbl...[color=blue]
> Ed,
>
> "Ed Bitzer" <edbitzer@yahoo.com> schrieb:[color=green][color=darkred]
>>> You can position a messagebox window by using a hook. A VB6 sample
>>> which can be converted to VB.NET can be found here:
>>>
>>> <URL:http://dotnet.mvps.org/vb/samples/misc/DialogPosition.zip>[/color]
>>
>> I do thank you but converting that code is over my head. The vb.net
>> messagebox object appears to have the capability and simply executed but
>> I do not understand the window identification syntax.[/color]
>
> The .NET messagebox doesn't have this capability out of the box (although
> you can specify an owner window). I doubt that it's worth the effort to
> center a messagebox.
>
> --
> M S Herfried K. Wagner
> M V P <URL:http://dotnet.mvps.org/>
> V B <URL:http://classicvb.org/petition/>[/color]


Ed Bitzer
Guest
 
Posts: n/a
#8: Nov 21 '05

re: Locate MessageBox over Window


Cor,

Of course there might actually be some reason to stop checking newer
solutions at my age - times running out<g>. However I admit I have not even
looked how VB.Net handles and will do so. The INI file has always made it
so easy to examine and modify content with any ASCII editor. Not having to
search through the Registry to detect my errors did seem simpler.

Ed

"Cor Ligthert" <notmyfirstname@planet.nl> wrote in message
news:%23%23dSyfENFHA.2576@TK2MSFTNGP10.phx.gbl...[color=blue]
> Ed,
>[color=green]
>> I still like ini files better.
>>[/color]
> Be cautious, this kind of behaviour can show that your age stops you to
> check newer solutions. Did you try the registry with VBNet. It is so easy
> to use.
>
> Cor
>[/color]


Cor Ligthert
Guest
 
Posts: n/a
#9: Nov 21 '05

re: Locate MessageBox over Window


Ed,

A piece of code to save your Form settings

\\\
Imports Microsoft.Win32
Public Class RegistryEd
Private Shared pFormWidth As Integer
Private Shared pFormHeight As Integer
Private Shared pFormX As Integer
Private Shared pFormY As Integer
Private Shared pWindowState As Integer
Private Shared Reg As RegistryKey = Registry.CurrentUser
Public Shared Property FormWidth() As Integer
Get
Return pFormWidth
End Get
Set(ByVal Value As Integer)
pFormWidth = Value
End Set
End Property
Public Shared Property FormHeight() As Integer
Get
Return pFormHeight
End Get
Set(ByVal Value As Integer)
pFormHeight = Value
End Set
End Property
Public Shared Property FormX() As Integer
Get
Return pFormX
End Get
Set(ByVal Value As Integer)
pFormX = Value
End Set
End Property
Public Shared Property FormY() As Integer
Get
Return pFormY
End Get
Set(ByVal Value As Integer)
pFormY = Value
End Set
End Property
Public Shared Property WindowState() As Integer
Get
Return pWindowState
End Get
Set(ByVal Value As Integer)
pWindowState = Value
End Set
End Property
Public Shared Sub Load()
Reg = Registry.CurrentUser.CreateSubKey("Software\Cor\Ed Sample")
pFormWidth = CInt(Reg.GetValue("Width", 700))
pFormHeight = CInt(Reg.GetValue("Height", 400))
pFormX = CInt(Reg.GetValue("X", 100))
pFormY = CInt(Reg.GetValue("Y", 100))
pWindowState = CInt(Reg.GetValue("WindowState", 0))
End Sub
Public Shared Sub Save()
Dim Reg As RegistryKey
Reg = Registry.CurrentUser.CreateSubKey("Software\Cors\E dSample")
Reg.SetValue("Width", pFormWidth)
Reg.SetValue("Height", pFormHeight)
Reg.SetValue("X", pFormX)
Reg.SetValue("Y", pFormY)
End Sub
End Class
///

I hope this gives a QuickStart

Cor


Cor Ligthert
Guest
 
Posts: n/a
#10: Nov 21 '05

re: Locate MessageBox over Window


Ed,

I changed some words and deleted as well some parts, where is Cors it should
be Cor or visa versa. Maybe there are more errors because of that change.

:-)

Cor


Ed Bitzer
Guest
 
Posts: n/a
#11: Nov 21 '05

re: Locate MessageBox over Window


Cor,

I do thank you -- you took all the work out of this project. Have an
example working already.

Ed
"Cor Ligthert" <notmyfirstname@planet.nl> wrote in message
news:%23IgEVdPNFHA.1392@TK2MSFTNGP10.phx.gbl...[color=blue]
> Ed,
>
> I changed some words and deleted as well some parts, where is Cors it
> should be Cor or visa versa. Maybe there are more errors because of that
> change.
>
> :-)
>
> Cor
>[/color]


Closed Thread


Similar Visual Basic .NET bytes