Scrollbar u Mdi formuláře   zodpovězená otázka

VB.NET, WinForms

Dobrý den všem,

moc Vás prosím o radu. Mám rodičovský Mdi formulář. U tohoto formuláře bych potřebovala zakázat zobrazování scrollbarů. Setkal se někdo s tímto problém a mohl by mi prosím pomoci.

Moc děkuji

Terka

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pouhým nastavením vlastností to udělat nelze. Pravděpodobně by bylo nutné použít Win32 API nebo přepsat chování metody WndProc.

Proč vlastně potřebujete posuvníky odstranit? Jestliže vám někdo posune podřízená okna MDI formuláře tak nešikovně, že nebudou vidět, jak je potom bez posuvníků na MDI formuláři naleznete?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přijde mi, že když chytnu záhlaví podřízeného okna, tak ho nebudu moc pustit tak nešikovně, abych ho opět nemohla chytnout. Když posuvníky odstraním, tak v našem firemním prostředí to bude znamenat fakt, že se všichni budou bát s vnitřními okny hýbat. To je požadovaný stav.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omezování přesouvání podřízených oken v MDI formuláři pomocí odstranění posuvníků je naprostá zhovadělost, která odporuje filozofii používání oken. Je-li požadavek, aby uživatel nemohl "ujet" s oknem mimo hlavní pracovní plochu, tak zvažte jiný styl uživatelského rozhraní (SDI s jedním oknem nebo plovoucí/ukotvitelná okna jako ve Visual Studiu - open source komponenta http://sourceforge.net/projects/dockpane... ).

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Pro někoho "zhovadělost", pro někoho nutnost.

Děkuji za radu (ikdyž s vzlaštním nevybíravým způsobem)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vím přesně o čem mluvíte :)

Dát uživateli přes prsty, ještě než na něco sahne.

Rád bych vám vyvrátil to, že MDIChild okno nejde schovat tak, aby nešlo znovu chytit a přetahnout. Zkuste jej uchopit a jet s ním nahoru. Pokud máte v MDIParent okně např menu nebo lištu s ikonami, pruh MDIChild okna se vám může schovat za. V takovém případě ho bez scrollbarů již znovu nechytnete.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To jsem si vůbec neuvědomila. Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Je to prasácké řešení a nefunguje pořádně, okna při tahání u krajů problikávají, ale z vlastní zkušenosti vím, že v 99% případů mají uživatelé MDI okno jen jedno maximalizované v celé aplikaci. Stačí vnitřnímu oknu ošetřit událost Move a hlídat, jestli nevyjelo z client area. Když vyjede, tak ho nějak usměrnit zpátky.

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'vytvořit nové MDI child okno 
        Dim f2 As New Form2()
        f2.MdiParent = Me
        AddHandler f2.Move, AddressOf MdiChildMove
        f2.Show()
    End Sub

    Private Sub MdiChildMove(ByVal sender As Object, ByVal e As EventArgs)
        'při posouvání okna hlídat, aby se nedostalo z clientArea
        Dim mdiChild As Form = CType(sender, Form)
        If mdiChild.Left < Me.ClientRectangle.Left Then mdiChild.Left = Me.ClientRectangle.Left
        If mdiChild.Top < Me.ClientRectangle.Top Then mdiChild.Top = Me.ClientRectangle.Top
        If mdiChild.Left >= Me.ClientRectangle.Right - mdiChild.Width Then mdiChild.Left = Me.ClientRectangle.Right - mdiChild.Width
        If mdiChild.Top >= Me.ClientRectangle.Bottom - mdiChild.Height Then mdiChild.Top = Me.ClientRectangle.Bottom - mdiChild.Height
    End Sub

Je to ale fakt hnusné řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Moc děkuji.

T.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback