Kilka pytań Winforms

Odpowiedz Nowy wątek
2015-07-02 17:57
KaKtusEl
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?

Pozostało 580 znaków

2015-07-02 18:41
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 :)

Pozostało 580 znaków

2015-07-02 18:47
KaKtusEl
0
  1. Próbowałem tak:

    Location = new Point(this.Location.X - this.Width, this.Location.Y); 

    ale nie działa

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

Pozostało 580 znaków

2015-07-02 18:51
0

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


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
zamiast this.formDrugi.Visible = !this.formDrugi.Visible osobiście preferuję this.formDrugi.Visible ^= true choć już kilka razy się załamałem gdy ktoś spytał co oznacza znaczek "^" :| - unikalna_nazwa 2015-07-03 14:05
Wygląda jak z IOC#CC. - somekind 2015-07-03 16:59

Pozostało 580 znaków

2015-07-02 19:19
KaKtusEl
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(); 

Pozostało 580 znaków

2015-07-02 20:43
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);
        }
    }

Pozostało 580 znaków

2015-07-02 22:32
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;
        }
    }
}

"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-07-03 00:13
KaKtusEl
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.

Pozostało 580 znaków

2015-07-03 00:59
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);

"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-07-03 10:21
KaKtusEl
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)

Pozostało 580 znaków

2015-07-03 11:32
0

SOA #1

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


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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