Manuele plaatsing van een formulier

Status
Niet open voor verdere reacties.

pdedecker

Gebruiker
Lid geworden
19 jul 2008
Berichten
35
Ik probeer een formulier in de rechterbenedenhoek van het scherm te krijgen, taakbalk niet inbegrepen. Ik stelde de eigenschap frmPopup.StartPosition dus in op Manual via de designer en voegde de volgende code toe aan het script:
Code:
public frmPopup()
        {
            [B]this.Location = new Point(Screen.PrimaryScreen.WorkingArea.Width - this.Width, Screen.PrimaryScreen.WorkingArea.Height - this.Height);[/B]
            InitializeComponent();
            this.Hide();
        }
Dit geeft het volgende als resultaat:


Zoals je ziet, staat het venster niet in de rechterbenedenhoek van het scherm. Wat doe ik verkeerd? En waarom wordt het venster niet verborgen bij het opstarten, ondanks de opdracht this.Hide();?
 
a.Zoek even verder, je hebt het bijna
b. probeer de visible property van je form eens.
 
Aha, ik heb een van de twee problemen opgelost door de code in het Load-gedeelte van mijn formulier te zetten.

Code:
private void frmTelevised_Load(object sender, EventArgs e)
        {
            this.Visible = false;
            this.Left = Screen.PrimaryScreen.WorkingArea.Width - this.Width;
            this.Top = Screen.PrimaryScreen.WorkingArea.Height - this.Height;
            // Meer code...
        }
this.Visible = false; werkt echter nog niet. Enig idee wat het probleem is?
 
De visible eigenschap van een formulier kan pas opgeroepen worden nadat het form effectief door GDI+ op het scherm gerendered. Het is een contradictie om in je load je form te gaan verbergen. Oorspronkelijk was dit dan ook een bug maar Microsoft heeft beslist dit niet op te lossen net omdat het een contradictie is. Eer je de visible eigenschap van eender welk control wil oproepen moet je form visible zijn.
Alternatieven:
* Je hide() of visible = false oproepen in de Form_shown methode
* Je form minimaliseren

succes en excuses voor het late antwoord

Edit: dit geldt ook voor de methode hide() en show() die eigenlijk een implementatie zijn van de visible property.
 
Laatst bewerkt:
Ik heb het opgelost met een Form_Shown-methode. Dit brengt echter een klein probleempje met zich mee: als het programma opstart, zie je het hoofdvenster voor een nanoseconde op je scherm. Ik heb het via de WindowState proberen op te lossen (Minimized bij opstarten; Normal nadat ik het venster heb verborgen), maar dan komt het venster helemaal niet tevoorschijn als ik het wil openen.
 
Wat probeer je eigenlijk te doen? Waarom moet die venster verborgen zijn?
 
Wel, ik heb een programmaatje dat actief is in het systeemvak rechtsonder op het scherm. Het kan opgeroepen worden door te dubbelklikken op het programma-icoontje. Vandaar dat het hoofdvenster in eerste instantie verborgen moet zijn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan