[C++] Vill använda resultatet av MessageBoxButtons::YesNo i en if() sats.

Permalänk
Medlem

[C++] Vill använda resultatet av MessageBoxButtons::YesNo i en if() sats.

if(score == 3) MessageBox::Show("You won! Want to restart?", "Game over!", MessageBoxButtons::YesNo); else if(computerScore == 3) MessageBox::Show("You lost. Want to restart?", "Game over!", MessageBoxButtons::YesNo);

Vill kunna använda om användaren klickade Yes eller No som ett villkor i en senare if() sats för att kunna starta om programmet, förstår däremot inte hur jag ska lyckas... Försökt kolla mig runt och hittade någon som gjorde en variabel som typ hete MessageBoxResult, men det verkar vara på en tidigare version av Visual studio och jag lyckades inte med det.

Permalänk
Medlem

Kolla exemplet här:

https://msdn.microsoft.com/en-us/library/0x49kd7z(v=vs.110).a...

Förklara gärna för mig vad :: innan DialogResult::Yes innebär. Jag brukar normalt använda :: för att komma åt static members, men då går det ju efter klassnamnet. T.ex. Class::static_function()

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Hedersmedlem
Skrivet av sunefred:

Förklara gärna för mig vad :: innan DialogResult::Yes innebär. Jag brukar normalt använda :: för att komma åt static members, men då går det ju efter klassnamnet. T.ex. Class::static_function()

Det betyder att man menar den globala DialogResult::Yes, men varför det skulle vara bra här är oklart.
https://msdn.microsoft.com/en-us/library/aa273549%28v=vs.60%2...

Permalänk
Medlem
Skrivet av Elgot:

Det betyder att man menar den globala DialogResult::Yes, men varför det skulle vara bra här är oklart.
https://msdn.microsoft.com/en-us/library/aa273549%28v=vs.60%2...

Så :: är även en accessor för globala variabler/klasser i namespaces? Hittar ingen specification på googles

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Hedersmedlem
Skrivet av sunefred:

Så :: är även en accessor för globala variabler/klasser i namespaces? Hittar ingen specification på googles

Just "::" är ju lite lurigt att söka efter, men "scope resolution operator" ger en del träffar. T.ex.
http://stackoverflow.com/questions/4269034/what-is-the-meanin...
http://stackoverflow.com/questions/9338217/why-does-c-need-th...

Permalänk
Medlem
Skrivet av Elgot:

Just "::" är ju lite lurigt att söka efter, men "scope resolution operator" ger en del träffar. T.ex.
http://stackoverflow.com/questions/4269034/what-is-the-meanin...
http://stackoverflow.com/questions/9338217/why-does-c-need-th...

Tackar! Kallas alltså scope resolution operator, och är betydligt bredare än bara åtkomst av statics. Dagens lärdom :: används för statics/global, och . används för normala member variables. Lite anvädningsområden:

Namepspace1::Subnamespace2::global_var;

using Namepspace1::Subnamespace2;
::global_var;

MyClass::static_var;

#2 är det som används i MS exempel ovan, även om vi inte ser using någonstans.

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Hedersmedlem
Skrivet av sunefred:

#2 är det som används i MS exempel ovan, även om vi inte ser using någonstans.

Det är dock som sagt inte helt uppenbart varför de gör sådär. Om de har en sådan using hade ju
DialogResult::Yes
varit tillräckligt och dessutom skriver de ju ut hela sökvägen några rader upp.
Ett användningsområde för "::" är dock att aktivera intellisense-popuprutan; kanske har någon bara varit lat?

Permalänk
Medlem
Skrivet av Elgot:

Det är dock som sagt inte helt uppenbart varför de gör sådär. Om de har en sådan using hade ju
DialogResult::Yes
varit tillräckligt och dessutom skriver de ju ut hela sökvägen några rader upp.
Ett användningsområde för "::" är dock att aktivera intellisense-popuprutan; kanske har någon bara varit lat?

Det kan också vara en kodstil för att vara tydlig med att funktionen är global/static och inte lokal till klassen. Ett motsatt exempel är folk som använder this->func() för att tydligöra lokal klass access istället. Denna lösning är betydligt elegantare.

I mina egna projekt väljer jag istället att använda full sökväg, så till exempel använder jag std::min() för att vara tydlig vilken min() som används. Å andra sidan har jag inga nestlade namespaces vilket ger lite renare kod. Jag är en vokal motståndare till using.

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Skrivet av Trisstar:

if(score == 3) MessageBox::Show("You won! Want to restart?", "Game over!", MessageBoxButtons::YesNo); else if(computerScore == 3) MessageBox::Show("You lost. Want to restart?", "Game over!", MessageBoxButtons::YesNo);

String msg = ""; DialogResult result; if(score == 3) msg = "You won! Want to restart?"; else if(computerScore == 3) msg = "You lost Want to restart?"; result = MessageBox.Show(msg, "Game over!", MessageBoxButtons::YesNo); if(result == System.Windows.Forms.DialogResult.Yes) ... ...

Borde man inte kunna göra något liknande sådär?

[EDIT] Fixade till koden lite

Permalänk
Hedersmedlem
Skrivet av Trisstar:

Försökt kolla mig runt och hittade någon som gjorde en variabel som typ hete MessageBoxResult, men det verkar vara på en tidigare version av Visual studio och jag lyckades inte med det.

Är det just resultathanteringen som krånglar eller fungerar inte dialogrutan alls? Att använda gamla exempel orsakar normalt inga problem, men det där förutsätter ju att man kör c++/cli (vilket är en smula ovanligt (och mallarna för att skapa sådana projekt har försvunnit i senare versioner av VS)). Gör du det?