Proporcjonalna zmiana rozmiaru okna i jego kontrolek.

Odpowiedz Nowy wątek
2012-10-03 12:24
0

Witam

Jak w temacie nie mogę sobie poradzić ze zmianą rozmiaru okna podczas przeciągania, tak aby jeśli nawet rozciągnę okno po samej szerokości, to aby automatycznie rozmiar jego skorygował się do poprawnej proporcji.

Przykład:
Mam okno MdiChild, a w nim picturebox do ktorego laduje obrazki.
W momencie gdy rozciągam tylko szerokość lub wysokość, wiadome jak wygląda obrazek. Dodam, że obrazek jak zaladuje sie do picturebox, cała forma ma wielkosc dopasowaną do obrazka. Takze jest ok, poki nie użyje myszki do zmiany rozmiaru okna. Nie chce całkowicie blokować możliwości rozmiaru okna, bo czasem trzeba trochę zmniejszyć lub zwiększyć, ale jak to zrobić proporcjonalnie.

Szukałem już na stackoverflow i w google, ale nigdzie nie znalazłem działającego przykładu, no chyba, że brać pod uwagę przykład: width= height *2, co jest absurdem, przecież obrazki są o róznych proporcjach, a nie zawsze 2:1.

Oczywiście cały czas próbuje z zdarzeniem Form_Resize, ale właśnie co bym tam nie wpisywał, nie ma żadnej reakcji podczas przeciągania.

Pozostało 580 znaków

2012-10-03 13:07
Rev
0

W momencie gdy rozciągam tylko szerokość lub wysokość, wiadome jak wygląda obrazek.

W zasadzie to nie wiadome, bo skąd mamy wiedzieć co właściwie robisz?

Do poprawnej zmiany wielkości elementów formy podczas zmiany jej rozmiaru używasz właściwości Dock oraz Anchor. Jeżeli one ci nie wystarczą, wtedy będziemy myśleć.
Jeżeli sobie nie z nimi nie poradzisz, spróbuj naszkicować to, co znajduje się na formie i w jaki sposób ma zmieniać swoją wielkość.


Ale dock mam ustawiony na Fill w pictureBox, dzięki czemu picturebox ładnie mi wypełnia Frame'a, więc nie widzę, aby właściwość dock miała mi pomóc w zmienianiu proporcjonalnym Frame'a. Wiadome, że aby jakkolwiek picturebox był zależny od Frame'a to raczej powinien do niego przylegać (to jest dla mnie oczywistość, nie chciałem się w pierwszym poście rozpisywać, bo równie dobrze jest dużo właściwości, które mógłbym podać, a nawet cały kod, ale to by była przesada)Pozdrawiam - marcin.NET 2012-10-03 13:39

Pozostało 580 znaków

2012-10-03 13:11
0

po wczytaniu obrazka musisz obliczyć stosunek height do width a potem jak zmieniasz rozmiar formy to musisz brać pod uwagę obliczony stosunek


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
A jednak te holerne 30px na ten Title Frame'a, trzeba dodawać. - marcin.NET 2012-10-03 14:18

Pozostało 580 znaków

2012-10-03 13:34
0

no właśnie obliczam stosunek wychodzi ładne 0.75, tylko, że w przypadku Form_Resize nie działa, sypie się, natomiast w zdarzeniu Form_ResizeEnd już praktycznie działa, tylko jeszcze mi gdzieś robi się dziwny margines, którego nie powinno być między dolną krawędzią Frame'a, a picturebox'em. I do tego jakieś dziwne zachowanie ma, że ten resize działa także przy przesuwaniu ;p ;), ale to może być jakieś lekkie zamotanie przeze mnie, bo ogólnie po wczytaniu obrazka, od razu go skaluje na pół razem z frame'em (automatycznie podczas inicjalizacji Frame'a). Spróbuje jeszcze pokombinować i dam tutaj znać czy ten dziwny margines to jednak moja wina, czy inny problem.

Pozdrawiam
Marcin

Pozostało 580 znaków

2012-10-03 14:47
0

Hej

Ja bym to zrobił tak:

  1. Ustalił pewien stały stosunek wysokość : szerokość, bazujac na poczatkowych rozmiarach obrazka.
  2. W zdarzeniu OnResize dynamicznie zmieniał szerokość / wysokość okna - jeśli user zwieszka wysokość, to Ty zwiekszasz szerokość o obliczony wczesniej stosunek.

Pozdro,
Arek

Edit:

private void Form1_Resize(object sender, System.EventArgs e)
{
   Control control = (Control)sender;

   // Ensure the Form remains square (Height = Width). 
   if(control.Size.Height != control.Size.Width)
   {
      control.Size = new Size(control.Size.Width, control.Size.Width);
   }
}

Źródło: http://msdn.microsoft.com/en-[...]ows.forms.control.resize.aspx

edytowany 1x, ostatnio: szulak, 2012-10-03 14:51

Pozostało 580 znaków

2012-10-09 03:37
0

W sumie, może rzeczywiście lepiej od razu obliczyć stosunek frame'a, a nie obrazka. I wtedy wg tego stosunku w onResize zmieniać rozmiar. Wtedy nie trzeba by dodawać tych 30px na Title Frame'a (Frame.text).

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