[C#]Dwie formy obok siebie

0

Witam. Mam problem z ustawieniem drugiej formy ktora wyswietlam po nacisnieciu przycisku. Chce zeby ta druga forma byla przymocowana do prawej krawedzi glownej formy. Nie mam pojecia jak to zrobic. Prosze o pomoc :(

0
  1. Pobierz właściwość Location i Size pierwszej formy;
  2. Użyj matematyki;
  3. Ustaw właściwość Location drugiej formy.
0

tam myslalem tylko z punktem 2) mam problemy :). Nie wiem dokladnie jak mam dodawac pozycje okien :(

0
 Point pt = new Point();
            pt = this.Location;

            Size size = new Size();
            size = this.Size;

            Form2 form2 = new Form2();
            
            form2.StartPosition = FormStartPosition.Manual;
            form2.Location = new Point(pt.X + size.Width, pt.Y);
            form2.Size = new Size(size.Width, size.Height);
            
            form2.Show();
0
carck3r napisał(a)
 Point pt = new Point();
            pt = this.Location;

            Size size = new Size();
            size = this.Size;

            Form2 form2 = new Form2();
            
            form2.StartPosition = FormStartPosition.Manual;
            form2.Location = new Point(pt.X + size.Width, pt.Y);
            form2.Size = new Size(size.Width, size.Height);
            
            form2.Show();

Hmm... Po co tyle zbędnych zmiennych i operacji? ;>

Form2 f2 = new Form2();
f2.StartPosition = FormStartPosition.Manual;
f2.Location = new Point(this.Location.X + this.Width, this.Location.Y);
f2.Show();
0

Działa super jesli chodzi o pokazywanie teraz tylko jak zrobic zeby druga forma byla caly czas przyklejona do pierwszej podczas zmiany polozenia

0

Zdarzenie Move dla Form1 i kod:
form2.Location = new Point(this.Location.X + this.Size.Width, this.Location.Y);
Dla drugiej formy musisz pokombinować.

0

ok. przyklejanie formy dziala. a co zrobic zeby kolejne nacisniecie buttona nie tworzylo drugiej takiej samej formy ?

0

Na przykład sprawdzać, czy przypadkiem głupi user już wcześniej nie kazał utworzyć.

0

Tworzysz jakąś zmienną bool. Jak naciśnie, to ustawiasz true, jak zamknie, to false.
Gdy znowu naciśnie, to sprawdzasz czy bool == true, jeśli tak, to wywalasz messageBoxa.

Druga metoda (łatwiejsza):
Po kliknięciu i pojawieniu się formy 2, ustawiasz button.enabled = false.
Po wyłaczeniu formy 2 ustawiasz button.enabled = true.

0

jest jeszcze inna metoda:

f2.ShowDialog();

tym sposobem user nie bedzie mogl nacisnac na forme wczesniejsza dopoki nie zamknie f2.

0

Są jeszcze dwie metody:

  1. zaimplementować Form2 jako Singletona;
  2. pole typu Form2 w Form1. To może być najlepsze, skoro chcemy z tego samego obiektu Form2 korzystać w więcej niż jednej metodzie Form1. Łatwiej też będzie zorganizować potem przekazywanie danych i wywoływanie metod z innej formatki.
using System;
using System.Drawing;
using System.Windows.Forms;

namespace TwoForms
{
    public partial class Form1 : Form
    {
        private Form2 f2;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (f2 == null)
            {
                f2 = new Form2();
                f2.StartPosition = FormStartPosition.Manual;
                f2.Location = new Point(this.Location.X + this.Width, this.Location.Y);
                f2.Show();
            }
        }

        private void Form1_Move(object sender, EventArgs e)
        {
            f2.Location = new Point(this.Location.X + this.Width, this.Location.Y);
        }
    }
}
0

Ja bym po prostu sprawdził czy obiekt formy już istnieje ; p.

0
Daron napisał(a)

Ja bym po prostu sprawdził czy obiekt formy już istnieje ; p.

A co ja robię w kodzie powyżej?

1 użytkowników online, w tym zalogowanych: 0, gości: 1