SystemMenuClose etc

Public support forum for peer to peer support with related to the Visual Objects and Vulcan.NET products
BiggyRat

SystemMenuClose etc

Post by BiggyRat »

Hi Johan, OK, I had tried to use the USING statement at the top of the file, but what I assumed to be the top, seems not to be the case. Again not documented anywhere on the net that I could find.

Originally I tried this:
// Application : MdiApp1
// Form1.prg , Created : 10/3/2019 12:06 PM
// User : Jeff
USING System.Windows.Forms

that DID NOT work surely the first 3 lines of code are just a header/notation then the "top of the file" would be next. Basically just as it did in Clipper. But this DID work:

USING System.Windows.Forms
// Application : MdiApp1
// Form1.prg , Created : 10/3/2019 12:06 PM
// User : Jeff

be that as it may, the MessageBox still doesn't display...
User avatar
wriedmann
Posts: 3678
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

SystemMenuClose etc

Post by wriedmann »

Hi Jeff,
ok, please look here:
https://docs.xsharp.it/doku.php?id=name ... _reference
Do you had added the System.Windows.Forms library to your references?
Wolfgang
P.S. if it does not work, please export yur application and attach the viaef file zipped to your message. We'll give it a look
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Chris
Posts: 4635
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

SystemMenuClose etc

Post by Chris »

Jeff,

All this conversation would had taken just one post, if you had simply zipped and posted your project folder. Or do it a different way, select Project->Export Project and then send only the one file that will be created. Then it will be just a very simple thing for somebody to have a look and tell you exactly what the problem is.

Right now we are going in the dark, so our suggestions is just speculation really. It could be a using statement missing, it could be references missing, it could be something else, but if you give us the exact project you are working on, it will not take more than 5 minutes to give you a solution and explain to you exactly what is going on an why.
Chris Pyrgas

XSharp Development Team test
chris(at)xsharp.eu
BiggyRat

SystemMenuClose etc

Post by BiggyRat »

OK, here it is. Bear in mind it's a crap app. Designed purely for my testing purposes...
Attachments

[The extension viaef has been deactivated and can no longer be displayed.]

User avatar
wriedmann
Posts: 3678
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

SystemMenuClose etc

Post by wriedmann »

Hi Jeff,
first error:

Code: Select all

e:Cancel = true
must be

Code: Select all

e:Cancel := true
The same is in the line before:

Code: Select all

var result = MessageBox.Show("Business Manager 2.0", "Do you really want to quit?", MessageBoxButtons.YesNo, MessageBoxIcon.Hand)
should be

Code: Select all

var result := MessageBox.Show("Business Manager 2.0", "Do you really want to quit?", MessageBoxButtons.YesNo, MessageBoxIcon.Hand)
But the main problem is another one: you are mixing VO GUI ( the App class) and WinForms.
The VO GUI classes don't know nothing about the WinForms classes - it is entirely another world.
In a WinForms application the Start() function needs this code:

Code: Select all

oWin := Form1{}
Application.Run(oWin)
And to understand why your application does not runs, you should add a basic error handling:

Code: Select all

try
oWin := Form1{}
Application.Run(oWin)

catch oEx as Exception
MessageBox.Show( oEx:Message + CRLF + oEx:StackTrace, "Runtime error" )
end try
or look in the event viewer what is going wrong.
And the please use not the "run", but the "Debug" function.
On my system, I had to remove all the VO compatibility libraries, and remove and add again the X# runtime.
And then it runs:
jeffApp.png
jeffApp.png (741.38 KiB) Viewed 291 times
Please find your changed application attached.
Wolfgang
Attachments
Jeff_App.zip
(3 MiB) Downloaded 31 times
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
wriedmann
Posts: 3678
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

SystemMenuClose etc

Post by wriedmann »

Hi Jeff,
after posting my message I have tried the code that closed the window.
This is your code:

Code: Select all

method Form1FormClosing(sender as System.Object , e as System.Windows.Forms.FormClosingEventArgs) as void
var result := MessageBox.Show("Business Manager 2.0", "Do you really want to quit?", MessageBoxButtons.YesNo, MessageBoxIcon.Hand)
if result == DialogResult.Yes
  e:Cancel := true
endif
return
but it should be:

Code: Select all

method Form1FormClosing(sender as System.Object , e as System.Windows.Forms.FormClosingEventArgs) as void
var result := MessageBox.Show("Business Manager 2.0", "Do you really want to quit?", MessageBoxButtons.YesNo, MessageBoxIcon.Hand)
if result != DialogResult.Yes
  e:Cancel := true
endif
return
Please find the app attached to this message.
Wolfgang
Attachments
Jeff_App.zip
(3 MiB) Downloaded 28 times
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Chris
Posts: 4635
Joined: Thu Oct 08, 2015 7:48 am
Location: Greece

SystemMenuClose etc

Post by Chris »

Thanks for sending the project, it's a fine app, do not worry, I have created plenty such test apps myself that are still laying in my XIDE projects and yours is way prettier than most of mine :)

To further expand on what Wolfgang said: Since you are taking the .Net way of WInForms, rather than the way of using the VOGUI, then you need to use WinForms classes and do not mix them with VOGUI. You must not use the "App" class anymore, this is a VOGUI thing. Instead, use this:

System.Windows.Forms.Application.Run(oWin)

which is the equivalent of oApp:Exec(), it just tells .Net that you want to start your app by displaying oWin and terminate the app when oWin closes. You could also do this instead, the code is self describable:

oWin:ShowDialog() // and remove Application.Run()

Seeing your code, it now explains also why you were getting an error when compiling your code for the second time. It is because you were using two GUIs together (WinFOrms and VOGUI) and even when the one got shutdown when you closed the form, the VOGUI was stil running, because you had used and instantiated the App class. Just completely remove the oApp LOCAL and its uses from your code and this problem will go away.

Wofgang has covered the rest about the code in the closing event, hope you feel more confident now to further explore the .Net framework classes!
Chris Pyrgas

XSharp Development Team test
chris(at)xsharp.eu
BiggyRat

SystemMenuClose etc

Post by BiggyRat »

Brilliant. Thanks very much Wolfgang and Chris. I really appreciate your help.

Here is an example of how I get confused/led astray... Everyone says "look at Microsoft MSDN", google it etc. Heres the syntax from the Microsoft .Net Docs. notice the difference?

// Display message box parented to the main form.
// The Help button opens the Mspaint.chm Help file,
// and the "mspaint.chm::/paint_brush.htm" Help keyword shows the
// associated topic.
DialogResult r8 = MessageBox.Show (this, "Message with Help file and keyword.",
"Help Caption", MessageBoxButtons.OK,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1, 0,
"mspaint.chm",
"mspaint.chm::/paint_brush.htm");

They say use = NOT := so, I did as they say, assuming they are correct... seems not. Also, their examples of "e" show e.cancel not e:cancel as you've used, and which I first noticed in ngpolarolo's post. As I say, it makes it damn hard to learn:

// If the no button was pressed ...
if (result == DialogResult.No) <======= Exact opposite of how it should be done it seems? (== not !=)
{
// cancel the closure of the form.
e.Cancel = true;
User avatar
lumberjack
Posts: 723
Joined: Fri Sep 25, 2015 3:11 pm
Location: South Africa

SystemMenuClose etc

Post by lumberjack »

Hi Jeff,
Remember those are c# examples. X# is the XBase version of c#.
You will soon get the hang of it. Again, and I will say it again. Get yourself ILSpy 3.2 and add the XSharp Language plug-in...

Code: Select all

Variable declarion
LOCAL i AS INT
C#: int i;
Assignment
i := 1
C#: i = 1;
Comparison:
if i = 0
if "X#" == "X"
if "X#" = "X" // c# don't have this behavior IF "X#" begins with "X"
C#: if (i = 0)
      if ("C#" == "X")
      if ("C#".StartWith("X")) // The X# if "X#" = "X"
Method calls
LOCAL s AS STRING
s := "x# rules"
s := s:ToUpper() // Method call
C#:
string s;
s = "c# sucks"
s = s.ToUpper()
Static method
VAR s := String.ToUpper("x# rules")
C#:
var s = String.ToUpper("c# sucks")
______________________
Johan Nel
Boshof, South Africa
User avatar
lumberjack
Posts: 723
Joined: Fri Sep 25, 2015 3:11 pm
Location: South Africa

SystemMenuClose etc

Post by lumberjack »

Hi Jeff,
You confusing yourself.... :lol:
BiggyRat wrote:

Code: Select all

// If the no button was pressed ...
if (result == DialogResult.No)     <======= Exact opposite of how it should be done it seems? (== not !=)
{
  // cancel the closure of the form.
  e.Cancel = true;
Well it depends what the Question was that was asked in the MessageBox example: Do you really want to close. OR Do you want to stay on this form?

Code: Select all

// If the no button was pressed ...
if (result != DialogResult.Yes)
{
  // cancel the closure of the form.
  e.Cancel = true;
Just hang in, we will ride the storm with you. You will slowly learn to read c# code, if that is a problem, most examples on MSDN also have the VB.NET code, get used to understand it. All your examples are going to be one of those languages. Look at both ways, get to understand it, it is the way you operate in .NET.

PS: By the way, how is the ILSpy 3.2 download going?
______________________
Johan Nel
Boshof, South Africa
Post Reply