[C#] Dialoogvenster waarbij Parent nog wel bereikbaar is

Pagina: 1
Acties:

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Is het mogelijk vanuit een Form (Form1) een ander Form (Form2) te starten, waarbij Form2 altijd boven Form1 blijft staan, maar Form1 nog wel bereikbaar is?

Wanneer ik ShowDialog aanroep met Form1 als parameter, blijft Form2 wel altijd boven Form1 staan, maar is Form1 niet meer bereikbaar totdat Form2 wordt afgesloten.

Heb het nu gedaan door bij Form2 TopMost op true te zetten, maar als Form1 ook TopMost op true moet hebben, werkt het niet meer (omdat Form1 dan bij selectie wel weer over Form2 heenvalt).

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • whoami
  • Registratie: December 2000
  • Nu online
Tja, wat je wilt bereiken is me een raadsel, maar het is dus enkel mogelijk door met die TopMost te werken. (Dat Form1 boven komt te staan als ie ook TopMost is, is wel logisch eigenlijk).

https://fgheysels.github.io/


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Ik wil een eigenschappenschermpje weergeven in m'n eigen applicatie, maar de applicatie zelf moet dan wel bereikbaar blijven. Als je dan een ander item selecteerd, wordt in dat eigenschappenschermpje ook direct dat nieuwe item geladen. Net als in Office producten.

Dat Form1 erboven komt te staan als ie zelf ook TopMost is, is ook logisch. Maar niet wat ik wil :Y)

[ Voor 18% gewijzigd door riezebosch op 29-06-2005 11:17 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • phYzar
  • Registratie: November 2001
  • Laatst online: 10:37
Als je met meerder vensters wilt werken die je allemaal tegelijk nodig hebt, is het dan niet slimmer om met mdiparent en mdichildren te gaan werken? Ook hiermee kun je eenvoudig data heen en weer sturen tussen de forms.

[ Voor 3% gewijzigd door phYzar op 29-06-2005 11:32 ]


Verwijderd

Wat je volgens mij kan doen is het volgende:

Zet je eigenschappen venster op TopMost = true
Je Form1 op TopMost = false

De FormBorderStyle van Form2 zet je op FixedToolWindow.

Vanuit Form1 roep je Form2.Show op. Nu blijft Form2 boven Form1 staan en kun je nog altijd aan
form1.

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
phYzar schreef op woensdag 29 juni 2005 @ 11:31:
Als je met meerder vensters wilt werken die je allemaal tegelijk nodig hebt, is het dan niet slimmer om met mdiparent en mdichildren te gaan werken? Ook hiermee kun je eenvoudig data heen en weer sturen tussen de forms.
Het is puur een hoofdscherm met daarbovenop een eigenschappenschermpje. Als ik die MDI maak, kan ik 'm ook niet meer buiten m'n hoofdscherm slepen.
Verwijderd schreef op woensdag 29 juni 2005 @ 11:32:
Wat je volgens mij kan doen is het volgende:

Zet je eigenschappen venster op TopMost = true
Je Form1 op TopMost = false

De FormBorderStyle van Form2 zet je op FixedToolWindow.

Vanuit Form1 roep je Form2.Show op. Nu blijft Form2 boven Form1 staan en kun je nog altijd aan
form1.
Zo heb ik het dus. Maar Form1 moet ook de mogelijkheid hebben TopMost te zijn.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • phYzar
  • Registratie: November 2001
  • Laatst online: 10:37
riezebosch schreef op woensdag 29 juni 2005 @ 13:07:
Zo heb ik het dus. Maar Form1 moet ook de mogelijkheid hebben TopMost te zijn.
Waarom wil je 2 dingen topmost? Dat is toch onmogelijk? Als je altijd je eigenschappenvenster wilt zien wordt die topmost, waarom dan form1 óók topmost? Je kunt toch gewoon "je ding doen" in form1 en form2 mee laten updaten? Of zit form2 dan in de weg? Of blijft form2 topmost en kan er een ander programma tussen form1 en form2 komen doordat form1 onderop raakt en form2 topmost is?

<bert visscher modus>
Vertel, vertel! Niet te snel we schrijven mee! :P

//edit
zoiets?

[ Voor 13% gewijzigd door phYzar op 29-06-2005 14:00 ]


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 11:29

mulder

ik spuug op het trottoir

Je wil gewoon een soort Toolbox die StayOnTop blijft

oogjes open, snaveltjes dicht


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Juist!

Form1 heeft TopMost nodig omdat het voor de gebruiker handig kan zijn. Als deze echter de Toolbox (Form2) geopend heeft, moet deze op zijn beurt natuurlijk weer altijd boven Form1 staan. Wat dat betreft is TopMost ook weer niet de mooiste oplossing voor Form2, want als Form1 niet TopMost is en de gebruiker schakelt over naar een ander programma blijft Form2 daar weer bovenop staan.

Ik hoopte dat er een soort propertie was die je mee kon geven aan ShowDialog oid, dat het nieuwe Form wel bovenop de owner blijft staan, maar dat de owner wel ook nog bereikbaar blijft.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

ShowDialog toont enkel modal forms.

Er bestaat anders geen mogelijkheid om die TopMost te houden volgens mij.

Een focus vereist nu juist dat een form naar boven komt. Daar kun je niks aan doen.

Verwijderd

Gewoon een seintje sturen naar form2 als form1actief wordt. In Win32 is er wel een api voor om form 2 naar de voorgrond te sturen zonder de focus te krijgen. In .NET 1.1 zit er volgens mij geen native functie in. Van .NET 2.0 weet ik het niet.

Het zal tijdens het schakelen wel een flikkering geven maar dan heb je wel wat je zoekt. Tenzij tijdens het werken in form1 deze weer naar de voorgrond gedrukt wordt maar dat lijkt mij niet.

Verwijderd

Of anders een 3rd party component gebruiken om je window managment to doen?

http://www.devcomponents.com/dotnetbar/ of
http://www.divil.co.uk/net/controls/sanddock/

of een van de vele anderen natuurlijk.

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Nou, het is dus gelukt :)

Door de Win32 functie te importeren:
C#:
1
2
[DllImport("user32")]
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInserAfter, int X, int Y, int cx, int cy, int uFlags);


... en in de OnActivated van Form1 deze aan te roepen:
C#:
1
2
if (Form2.Visible)
   SetWindowPos(Form2.Handle, new IntPtr(-1), Form2.Left, Form2.Top, Form2.Width, Form2.Height, 0x0010);


... duwt Form1 bij activeren Form2 naar de voorgrond, en die blijft daar dus ook staan. Nu hoeft Form2 dus niet eens meer TopMost te zijn :)

Edit:
Laatste dus nog wel. Want als anders Form1 wél TopMost is, krijgt ie in de OnActivated niet Form2 voor zichzelft geduwt. Maar ach, dan geef ik toch gewoon aan Form2 mee of ie TopMost moet zijn of niet :P

[ Voor 17% gewijzigd door riezebosch op 29-06-2005 16:53 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

Hetgeen jij beschrijft zou ik eigenlijk zelfs niet met een Form doen, maar met een eigen gecreëerde control. Je kan er dan mee doen wat je wil.

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Ok, via een accidental hit kwam ik op deze site een nette manier tegen om mijn probleem op te lossen:

C#:
1
2
Form2.Owner = this;
Form2.Show();


Nu blijft Form2 altijd boven Form1 staan, ongeacht of Form1 TopMost is of niet en blijft Form1 wel gewoon bereikbaar. Wanneer Form1 niet TopMost is, verdwijnt Form2 ook netjes achter andere programma's wanneer die naar de voorgrond gehaald worden.

edit:

Was eigenlijk op zoek naar waarom ContextMenu's verdwijnen achter de applicatie wanneer deze TopMost is...

[ Voor 16% gewijzigd door riezebosch op 01-07-2005 11:38 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 05-05 22:23
Die dus? Wel goed lezen he? :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Inderdaad. Heb denk ik de edit van Yzar over het hoofd gezien.

Maar goed, ik kom er nu achter dat wanneer m'n Form1 wel initieel al TopMost is, ik in de OnLoad van Form2 alsnog een SetWindowPos moet doen om 'm voor Form1 te pushen. Anders wordt ie alsnog er achter geladen en krijg ik 'm dus ook met geen mogelijkheid meer er voor.

Het werkt nu zelf nog beter dan dat ik 4 posts geschreven had, want toen verdween Form2 nog achter Form1 als je iets uit het menu selecteerde. Nu blijft ie dan ook netjes er voor staan.

Alsnog bedankt, Yzar ;)

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • phYzar
  • Registratie: November 2001
  • Laatst online: 10:37
riezebosch schreef op vrijdag 01 juli 2005 @ 12:10:
Inderdaad. Heb denk ik de edit van phYzar over het hoofd gezien.

Alsnog bedankt, phYzar ;)
Graag gedaan ezebosch :P

Verwijderd

riezebosch schreef op vrijdag 01 juli 2005 @ 11:36:
Ok, via een accidental hit kwam ik op deze site een nette manier tegen om mijn probleem op te lossen:

C#:
1
2
Form2.Owner = this;
Form2.Show();


Nu blijft Form2 altijd boven Form1 staan, ongeacht of Form1 TopMost is of niet en blijft Form1 wel gewoon bereikbaar. Wanneer Form1 niet TopMost is, verdwijnt Form2 ook netjes achter andere programma's wanneer die naar de voorgrond gehaald worden.

edit:

Was eigenlijk op zoek naar waarom ContextMenu's verdwijnen achter de applicatie wanneer deze TopMost is...
dat is inderdaad de juiste manier om het te doen

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 04-05 13:09
Haha, ik weet niet wat er met me aan de hand is maar ik heb geloof ik de neiging de helft van jouw tekst over te slaan... :Z

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack

Pagina: 1