Zdravím,
mám jeden dotaz. Potřebuji provést určitou akci po stisknutí tlačítka maximalizace (MaximizeBox) v C#. Vím že ve Visual C# v designeru jde 2x kliknout např. na button a následně se vytvoří metoda, která se provede v případu stisknutí buttonu. Bohužel u MaximizeBoxu jsem nic takového nenašel. Nevěděl by někdo, jak lze detekovat stisknutí MaximizeBoxu, případně jestli je to vůbec možné?
Předem díky :smile1:
Fórum › .NET
Akce po stisknutí MaximizeBox
No pokud vím (možná se pletu, ostatní kdyžtak opraví, ukamenují a já nevím, co vše), tlačítko maximalizace má předem danou funkci, kterou není možné změnit. Co potřebuješ udělat, když uživatel klikne na maximalizaci? Pokud se jedná o zvětšení ostatních prvků v závislosti na velikosti formuláře, tak k tomu slouží procedura resize, kterou obsahuje formulář.
To Balaam : On ale ani nechtěl změnit funkcionalitu toho tlačítka, jen zachytit jeho událost, která bohužel není:)
Jediná možnost je skutečně zachytit událost Resize, která se vyvolá při jakékoliv změně velikosti okna, a mrknout se dovnitř vlastnosti IsMaximized a pokud je true, znamená to, že okno je maximalizováno a můžeš pak provádět svůj vlastní kód:)
To Balaam : Ano, jedná se o zvětšení komponenty WebBrowser a přemístění 1 textboxu a buttonu (na střed). Mimochodem, něco jsem nagooglil o té proceduře Resize, ale pořád nechápu jak ji aplikovat právě při maximalizaci.
To Andy : Není to procedura, ale událost, která se dá stejně jako ostatní události zachytit. Tím, jak v návrháři klikneš na tlačítko a ono ti to udělá handler události Click, tak se v pozadí aplikace zapíše podobný kód:
button1.Click += button1_Click;
Takže je to celkem jednoduché, pokud chceš zaregistrovat událost Resize metodě Form1_Resize pro hlavní form, napíšeš tento kód:this.Resize += Form1_Resize;
Napadlo me jeste trochu jine reseni. Pouziji
public class WebPanel : Panel
{
DockOrCenterlLayoutEngine _engine =
new DockOrCenterlLayoutEngine();
public override LayoutEngine LayoutEngine {
get { return _engine; } }
}
public class DockOrCenterlLayoutEngine : LayoutEngine
{
public override bool Layout(
object container,
LayoutEventArgs layoutEventArgs)
{
Panel panel = container as Panel;
if (panel == null) return false;
Point center = new Point(
panel.Width / 2, panel.Height / 2);
foreach (Control ctrl in panel.Controls)
{
if (ctrl.Dock == DockStyle.None)
{
ctrl.Location = new Point(
center.X - ctrl.Width / 2,
center.Y - ctrl.Height / 2);
}
else if (ctrl.Dock == DockStyle.Fill)
{
ctrl.Location = new Point();
ctrl.Size = panel.Size;
}
}
return false;
}
}
Uvedeny kod staci pastenout pod kod kde je definovan Form
Udelam build projektu.
Vyse definovany WebPanel pretahnu z toolboxu na Form a nastavim ho tak, aby menil velikost spolu s Formem
(Bud pouziji Anchor, nebo nastavim vlastnost Dock na Fill)
Dam do nej jeden WebBrowser a jeden normalni Panel.
Vlastnost Dock WebBrowser-u nastavim na Fill.
Do toho "obycejneho" Panel-u dam pozadovany Button a TextBox a doladim mysi jejich vzhled.
A melo by to delat co bylo zadano.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Konzole, akce po stisknutí tlačítka [x] — založil Jouker
Zjištění stisknutí klávesy — založil Garret Raziel
Odchycení stisknutí tlačítka — založil Jiří Sokolovský
C++ emulace stisknutí kláves — založil sachy
Uzavření okna po stisknuti Entru — založil Mikys
Moderátoři diskuze