Witam.
Mam 2 pytania dotyczących winfroms'a:
-
Jak zrobić żeby forma nr.2 pojawiała się (po kliknięciu w button) przy LEWEJ krawędzie formy nr.1?
-
Jak zrobić żeby pierwsze kliknięcie w button otwierało forme 2, a drugie zamykało?
Witam.
Mam 2 pytania dotyczących winfroms'a:
Jak zrobić żeby forma nr.2 pojawiała się (po kliknięciu w button) przy LEWEJ krawędzie formy nr.1?
Jak zrobić żeby pierwsze kliknięcie w button otwierało forme 2, a drugie zamykało?
Ad.1 Musisz odczytać obecne położenie form1 i znając jej rozmiar obliczyć w jakich współrzędnych powinna otwierać się form2.
Ad.2 Jeżeli utworzysz w nowej formie przycisk OK i we właściwościach dasz mu DialogResult = OK to będzie działało tak samo. Ewentualnie musisz pokombinować i zrobić jakiś warunek że jeżeli form2 jest otwarta to naciśnięcie przycisku ją zamyka, a jeżeli nie jest otwarta to naciśnięcie przycisku ją otwiera. Myślę że da się to ogarnąć
Ja bym tak zrobił.. ale się nie znam. Poczekaj na kogoś kto używa winforms :)
Location = new Point(this.Location.X - this.Width, this.Location.Y);
ale nie działa
Ad. 1 - this.formDrugi.Location = this.Location;
Ad. 2 - this.formDrugi.Visible = !this.formDrugi.Visible
Wybacz, ale nie rozumiem...
Jak to zastosować?
Tutaj kod jakim wywołuję formę 2:
private void button_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
//f.StartPosition = FormStartPosition.Manual;
//f.Location = new Point(this.Location.X - this.Width, this.Location.Y);
f.Show();
Musisz próbować, bawić się tym :) Zrobiłem coś takiego jeżeli chodzi o wyświetlanie Form2 obok lewej krawędzi Form1. Na pewno można to zrobić 10razy prościej i lepiej. Także próbuj :)
public partial class Form1 : Form
{
public int X { get; set; }
public int Y { get; set; }
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.X = this.Location.X;
this.Y = this.Location.Y;
}
private void button1_Click_1(object sender, EventArgs e)
{
Form2 form2 = new Form2(X, Y);
form2.ShowDialog();
}
}
public partial class Form2 : Form
{
public int LocationX { get; set; }
public int LocationY { get; set; }
public Form2(int x, int y)
{
LocationX = x;
LocationY = y;
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
this.Location = new Point(LocationX - this.Size.Width, LocationY);
}
}
KaKtusEl napisał(a):
Wybacz, ale nie rozumiem...
Jak to zastosować?Tutaj kod jakim wywołuję formę 2:
private void button_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
//f.StartPosition = FormStartPosition.Manual;
//f.Location = new Point(this.Location.X - this.Width, this.Location.Y);
f.Show();
A czemu chcesz tworzyć nową instancję formy za każdym razem? Nie wystarczy tak?
using System;
using System.Windows.Forms;
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private readonly Form2 form2 = new Form2();
private void button1_Click(object sender, EventArgs e)
{
this.form2.StartPosition = FormStartPosition.Manual;
this.form2.Location = this.Location;
this.form2.Visible = !this.form2.Visible;
}
}
}
RideorDie, no właśnie kombinuje i nic :D
somekind, ok, fajnie działa to zamykanie i włączeni buttonem +, ale co do pojawianie się formy: chodziło mi o to żeby pojawiał się przy lewej krawędzi po zewnętrznej stronie, a nie w środku.
No to jak przy zewnętrznej, to wystarczy trochę arytmetyki tylko:
this.form2.Location = new Point(this.Location.X - this.form2.Width, this.Location.Y);
Tak też zrobiłem (patrz posty wyżej) jednakże forma w ogóle się nie pojawia (podejrzewam że się pojawia, ale gdzieś poza ekranem)
SOA #1
Z tego, co widzę w kodzie, to robiłeś to trochę inaczej. Od X pierwszego okienka musisz odjąć szerokość drugiego.
- Jak zrobić żeby forma nr.2 pojawiała się (po kliknięciu w button) przy LEWEJ krawędzie formy nr.1?
Wypadałoby sprawdzić, czy tam się ta forma w ogóle zmieści (jeśli nie - wyświetlić po prawej albo przesunąć formę 1...)
https://msdn.microsoft.com/en-us/library/45zswy9x%28v=vs.110%29.aspx