Korzystam z projektu Windows Form. W moim formularzu nadrzędnym MDI chcę pokazać logo mojej firmy w prawym rogu. Więc przeciągnąłem obrazek i ustawiłem obraz.

Ale nie spełniam moich wymagań, obraz nie jest we właściwej pozycji. Próbowałem też wyściółki. Dock zwiększa wysokość obrazu do pełnej wysokości formularza. Więc to też mi nie pomoże.

Przed uruchomieniem rozwiązania. (Chcę to jako czas wykonywania).. tu wpisz opis obrazu

W momencie uruchomienia rozwiązania. (Niechciane miejsce po prawej stronie)

enter image description here

A forma MDI jest maksymalizowana w czasie wykonywania. za pomocą poniższego kodu.

this.WindowState = FormWindowState.Maximized;
1
Sagotharan 20 luty 2012, 12:32

3 odpowiedzi

Najlepsza odpowiedź

Będziesz musiał ustawić właściwość Zakotwiczenie pola obrazu na Góra, prawo domyślnie jej ustawienie to Top, Left

3
Maheep 20 luty 2012, 12:40

To nie zadziała, wkrótce przekonasz się, kiedy zaczniesz tworzyć okna klienckie MDI. Ramka graficzna zawsze znajduje się na górze okien klienta. Wymagane jest narysowanie obrazu w oknie klienta MDI, ciemnoszarym oknie na zrzutach ekranu. To wymaga sporej ilości nietypowego kodu, musisz uzyskać odniesienie do tej kontrolki, aby móc zaimplementować dla niego własne zdarzenie Paint. Musisz również pamiętać, że zmienia się rozmiar okna, dzięki czemu możesz odmalować obraz w nowej lokalizacji. I musisz coś zrobić z migotaniem, które normalnie widzisz. Spraw, aby Twój kod wyglądał podobnie do tego:

using System.Reflection;
...

    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
            foreach (Control ctl in this.Controls) {    // Find the MDI client window
                if (ctl is MdiClient) {
                    ctl.Paint += new PaintEventHandler(MdiClient_Paint);
                    ctl.Resize += delegate { ctl.Invalidate(); };
                    // Hackorama to avoid flicker:
                    var dblBuf = ctl.GetType().GetProperty("DoubleBuffered", BindingFlags.NonPublic | BindingFlags.Instance);
                    dblBuf.SetValue(ctl, true, null);
                    break;
                }
            }
        }

        void MdiClient_Paint(object sender, PaintEventArgs e) {
            var client = (MdiClient)sender;
            using (var bmp = Properties.Resources.Logo) {    // change this
                e.Graphics.DrawImage(bmp, new Point(client.ClientSize.Width - bmp.Width, 0));
            }
        }
    }
2
Hans Passant 20 luty 2012, 16:34

Umieść ramkę graficzną w pojemniku i najpierw zadokuj pojemnik. Następnie zadokuj tylko kontener po prawej stronie. I umieść obraz i obraz w polu graficznym.

1
user1220413user1220413 20 luty 2012, 12:38