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 :(
- Pobierz właściwość Location i Size pierwszej formy;
- Użyj matematyki;
- Ustaw właściwość Location drugiej formy.
tam myslalem tylko z punktem 2) mam problemy :). Nie wiem dokladnie jak mam dodawac pozycje okien :(
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();
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();
Działa super jesli chodzi o pokazywanie teraz tylko jak zrobic zeby druga forma byla caly czas przyklejona do pierwszej podczas zmiany polozenia
Zdarzenie Move dla Form1 i kod:
form2.Location = new Point(this.Location.X + this.Size.Width, this.Location.Y);
Dla drugiej formy musisz pokombinować.
ok. przyklejanie formy dziala. a co zrobic zeby kolejne nacisniecie buttona nie tworzylo drugiej takiej samej formy ?
Na przykład sprawdzać, czy przypadkiem głupi user już wcześniej nie kazał utworzyć.
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.
jest jeszcze inna metoda:
f2.ShowDialog();
tym sposobem user nie bedzie mogl nacisnac na forme wczesniejsza dopoki nie zamknie f2.
Są jeszcze dwie metody:
- zaimplementować Form2 jako Singletona;
- 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);
}
}
}
Ja bym po prostu sprawdził czy obiekt formy już istnieje ; p.
Daron napisał(a)
Ja bym po prostu sprawdził czy obiekt formy już istnieje ; p.
A co ja robię w kodzie powyżej?