2009-06-15 9 views
32

To bardzo trywialny problem, ale nie mogę znaleźć sposobu na jego rozwiązanie. To mnie denerwuje, ponieważ czuję, że powinienem znać odpowiedź na to pytanie, ale albo szukam złych terminów, albo szukam niewłaściwych metod i właściwości.Jak kontrolować położenie okna dialogowego podczas korzystania z ShowDialog, aby go wyświetlić?

Mam okno dialogowe konfiguracji, które jest wywoływane z dwóch miejsc.

Pierwszy z nich pochodzi od przycisku na formularzu, który działa poprawnie - jak można się spodziewać.

Druga jest z menu kontekstowego na powiadomień w zasobniku systemowym, ale tutaj pojawia się w lewym górnym rogu ekranu. Idealnie chciałbym, aby wyglądał na wyśrodkowany na głównym ekranie lub w pobliżu zasobnika systemowego.

  • Próbowałem ustawienie Location, ale to wydaje się być pominięte podczas dialog.ShowDialog() nazywa.

  • Próbowałem użyć przeciążenia dialog.ShowDialog(IWin32Window), ale nie wydawało mi się, żebym podał null jako uchwyt okna.

  • Próbowałem zamiast tego używać dialog.Show(), ale (i to jest miejsce, w którym mógłbym pójść źle) ustawienie lokalizacji wydaje się nie dawać spójnych wyników.

  • Próbowałem nawet ustawić właściwość dialog.Parent - która oczywiście podniosła wyjątek.

Po prostu wiem, że zdaję sobie sprawę, że odpowiedź jest oczywista, kiedy (mam nadzieję) widzę kilka odpowiedzi, ale w tej chwili całkowicie utknąłem.

Dzięki za odpowiedzi - jak podejrzewałem, to było oczywiste, ale jak zwykle utknąłem w poszukiwaniu niewłaściwej trasy. Jeszcze bardziej irytujące jest to, że użyłem tej własności również od projektanta.

+1

Miał ten sam problem. Dla mnie zadziałało ustawienie lokalizacji podczas zdarzenia obciążenia – TomB

Odpowiedz

38

Można ustawić właściwość Form.StartPosition na FormStartPosition.Manual, a następnie ustawić właściwość Form.Location w wybranej lokalizacji. Po wywołaniu ShowDialog formularz powinien pojawić się w żądanym miejscu.

MyForm frm = new MyForm(); 
frm.StartPosition = FormStartPosition.Manual; 
frm.Location = new Point(10, 10); 
frm.ShowDialog(); 
+3

System.Drawing.Point to pełna nazwa klasy punktów – Argeman

21

Zakładam, że korzystasz z formularza, w którym to przypadku możesz użyć wyliczenia Form.StartPosition. Możesz znaleźć więcej informacji na ten temat here i zachowanie wyliczeniowe here.

4

Wypróbuj właściwość StartPosition w formularzu.

Powiązane problemy