SCSF: MDI zarovnání child objektů

MyEgo.cz

home foto blogy mywindows.cz kontakt

SCSF: MDI zarovnání child objektů

Vcelku jednoduchá zaležitost, ale hotové řešení pro někoho jiného se vždycky hodí. :-)

Prvně, nastavení umístění child objektů pro MDI parent form se mění pomocí metody LayoutMdi an objektu Form. Např.

LayoutMdi(MdiLayout.TileHorizontal);

Pro porovnání oken jsem použil tento postup:

  • V menu jsou klasicky dostupné položky pro různé typy rozmístění oken.
  • Při kliknutí na vybranou položku se vyvolá klasický command, který vyvolá event, kterou si odebere shell form.
  • V shell formu se pak volá samotné zarovnání child objektů.

Prakticky by se ani nemusela volat ta event a šlo by napřímo odebrat ten command, který se volá při kliku na položku menu, ale event se dá volat programově, což umožňuje případně volat zarovnání child objektů i z jiných míst než jsou položky menu, třeba kliknutím na tlačítko a podobně.

Kód pro zarovnání child objektů z Shellform.cs:

[EventSubscription(EventTopicNames.MdiLayoutCascade, ThreadOption.UserInterface)]
public void OnMdiLayoutCascadeChange(object sender, EventArgs<string> eventArgs){
LayoutMdi(MdiLayout.Cascade);
}

[EventSubscription(EventTopicNames.MdiLayoutHorizontal, ThreadOption.UserInterface)]
public void OnMdiLayoutHorizontalChange(object sender, EventArgs<string> eventArgs){
LayoutMdi(MdiLayout.TileHorizontal);
}

[EventSubscription(EventTopicNames.MdiLayoutVertical, ThreadOption.UserInterface)]
public void OnMdiLayoutVerticalChange(object sender, EventArgs<string> eventArgs){
LayoutMdi(MdiLayout.TileVertical);
}

Kód pro zachycení kliknutí na položku menu a vyvolání události s požadavkem na zarovnání child objektů.

[CommandHandler(CommandNames.LayoutCascade)]
public void OnLayoutCascade(object sender, EventArgs e){
WorkItem.EventTopics[EventTopicNames.MdiLayoutCascade].Fire(this, new
EventArgs<string>(EventTopicNames.MdiLayoutCascade), null, PublicationScope.Global);
}
[CommandHandler(CommandNames.LayoutHorizontally)]
public void OnLayoutHorizontally(object sender, EventArgs e){
WorkItem.EventTopics[EventTopicNames.MdiLayoutHorizontal].Fire(this, new
EventArgs<string>(EventTopicNames.diLayoutHorizontal), null, PublicationScope.Global);
}
[CommandHandler(CommandNames.LayoutVertically)]
public void OnLayoutVertically(object sender, EventArgs e){
WorkItem.EventTopics[EventTopicNames.MdiLayoutVertical].Fire(this, new
EventArgs<string>(EventTopicNames.MdiLayoutVertical), null, PublicationScope.Global);
}

 


Nový komentář