Kilka pytań Winforms

0

Witam.

Mam 2 pytania dotyczących winfroms'a:

  1. Jak zrobić żeby forma nr.2 pojawiała się (po kliknięciu w button) przy LEWEJ krawędzie formy nr.1?

  2. Jak zrobić żeby pierwsze kliknięcie w button otwierało forme 2, a drugie zamykało?

0

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 :)

0
  1. Próbowałem tak:
Location = new Point(this.Location.X - this.Width, this.Location.Y); 

ale nie działa

  1. Właśnie nie mam pomysłu jak to zrobić..
0

Ad. 1 - this.formDrugi.Location = this.Location;
Ad. 2 - this.formDrugi.Visible = !this.formDrugi.Visible

0

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(); 
0

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);
        }
    }

 
0
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;
        }
    }
}
0

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.

0

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);
0

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)

0

SOA #1

Z tego, co widzę w kodzie, to robiłeś to trochę inaczej. Od X pierwszego okienka musisz odjąć szerokość drugiego.

0
  1. 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

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