26. august 2002 - 10:19Der er
86 kommentarer og 1 løsning
Scrollbar i form
Er det muligt i en form der har 2 subforms at få de 2 scrollbars der hører til de 2 subforms at køre synkroniseret? Altså når du rykker den ene rykker du også den anden?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Men, hvis du binder begge subforms sammen med hovedformen med Child/Parent, så rykker de rundt, så de viser de data, som tilhører den record, der lige vises i hovedformen. Hvis der så er en link fra subform1 til subform2, så vil det samme kunne lade sig gøre:
Du skal blot lade subform2 være subform til subform1 og så forbinde dem med Child/Parent.
Lige for at du forstår mig rigtigt. Så hovedformen indeholder/viser ingen records. Subform1 er en søgeform som viser den record man har søgt efter og lige nedenunder den er subform2 som viser alle records der er tilgængelige.
Ok. Så er der jo ikke nogen fast dataforbindelse imellem dem.
Du kan anvende et recordset til søge formen og så sætte filter på den (søgekriterierne). Derefter kan du tage den bookmark, som din søgning gav og lægge ind på edin "total" subform, så stiller den sig på den samme record. MEN det skal være en ægte Clone:
søgeform: Datasource = rs så skal total-form: Datasource = rs.clone
Og, hvis du laver en requery, så taber clonen kontakten, så du skal bruge total-form: Datasource = rs.clone igen.
Den skal ikke finde den samme record begge steder. Den skal hvis man tager den horisontale scrollbar og flytter den til venstre på total-formen så skal søgeformen også følge med derudaf.
Så vidt jeg lige ved, findes der ikke nogen Scrollbar-events. Dvs. det er ikke muligt at finde ud af hvad der er foretaget med scrollbaren. Derfor kan det du beskriver ikke laves.
Når det så er sagt, er muligheden måske et anderledes design af dine formularer.
Hvis placerer begge subforms på en formular og gør bredden af dem så stor som nødvendigt, så kan du bruge den nye forms scroll - og den virker på dem begge samtidigt!
Det er selvfølgeligt lidt bøvlet for nu får du forms i tre lag.
Havde ikke set dit svar moses. Det virker som en interessant mulighed - hvis man bruger et datagrid virker mit forslag jo nærmest klodset, men også kun hvis man bruger et datagrid. :o)
De to tabeller, som skal "følges ad" skal jo have de samme antal felter horisontalt. Det skal jo være sådan, at når du flytter visningen af den ene tabel, så f.eks. kolonne 3-7 kan ses, så skal den anden tabel også rykke sig hen, så kolonne 3-7 kan ses.
Datagrid kan du spørge om, hvad kolonnenummeret er på den venstre kolonne, der kan ses. Hvis der er 100 kolonner og du har rullet dig hen på midten af en record, så du kun kan se kolonne 50-55, så angiver DATAGRID.LEFTCOL 50. Det er rent visuelt !
Du tager en reference ind til DATAGRID, klistrer den i din form istedet for din tabel, forbinder den til din recordsource i dens properties. Og så sætter du f.eks. en timer til at holde øje med LEFTCOL fra begge DATAGRIDS. Når den ene ændrer sig siden sidste timeout, sætter du blot den anden LEFTCOL til samme nye værdi.
moses ... kan jeg ikke få dig til at lave en test database, hvor du laver datagrids i og får det til at virke som det skal? Jeg er sådan rimelig meget lost. Tror det er fordi jeg har haft weekend ;)
Jeg har også "holdt weekend". Indrømmet - det gør lidt ondt ;-)
Det er ikke nok, at jeg laver det for dig. Du skal have controllen registreret på din PC. Jeg ved ikke lige, hvilke programmer, der trækker Datagrid controllen med sig.
Prøv lige at gå ind i din Access, åben din form i design visning og vælg følgende menupunkt:
Insert / ActiveX Control
Der kommer en liste i alfabetisk rækkefølge. Nu skal du så bare lige finde: "Microsoft Datagrid ...."
Hvis den ikke står der, så er den ikke registreret på din PC og det skal så først gøres, før du kan bruge den.
Jeg kan godt finde microsoft datagrid og indsætte det. Men jeg kan ikke lige helt forstå opsætningen af datagriden. Jeg vil ikke copy/paste det du laver men istedet lige gennemgå hvordan du sætter det op, da jeg ikke lige helt er med hvordan det skal gøres. Og har lige været hjemme i pausen og set at en af mine harddiske opfører sig MEGET mærkeligt. :/
Så kan du lave en timer (findes direkte i Access et eller andet sted) og lade den se på Datagrid1.LeftCol og Datagrid2.LeftCol og kontrollere om deres værdier har ændret sig siden sidste timeout. Den der har ændret sig skrives over i den anden.
Belaster det ikke pc'en at timeren skal bruges til at checke positionen hele tiden? Hvis timeren sættes til større værdier kommer det til at se lidt pudsigt ud, men det virker selvfølgelig.
Ja ! Der er ikke tale om "den samme database". Datagrid controllen kender kun sig selv og ikke sine omgivelser. Dem skal du forklare den.
Alle Dim'erne lægger du i headeren (øverste del af koden udenfor alle subroutines og functions. Selve min kode lægger du bare ind i formens OnOpen event.
Nej - når du insert'er disse datagrids, giver systemet dem et default-navn. Du kan jo se navnet ved at klikke en gang på dem og læse ovre i properties feltet "Name" - og det er dette navn du skal bruge.
Så er det da også rigtigt nok at sådan som du skriver koden skal navnene være datagrid1 og datagrid2? :) Navnet lige nu er: ActiveXCtl25 kan det passe?
Sikkert nok. Det ser skørt nok ud til at være et sandt defaultnavn ;-) Du kan se det, hvis du skriver navnet inde i koden og trykker et punktum lige derefter. Så skal der komme nogle valgmuligheder op. Det er de properties og methods, som denne control har. Og deriblandt skal også være "datasource" og "leftcol", som er dem du skal bruge.
Du skal snart til at være færdig - min kaffekande er ved at løbe tør !!!!!! Det ligger i rædselskategorien mellem Cola i keyboardet på en bærbar og Processor Overheat for en AMD 2000+.
What... er du bange for at få cola i tastaturet? så skal du bare tage det med i bad så virker det igen bagefter :) (har prøvet) *lol* Tror nok at det istedet ligger omkring rædselskategorien Computere bliver forbudt :P
Nej det virker ikke fordi det er ado og jeg bruger dao.. men den burde jo kunne køre med begge slags.
Men er din kaffekande fyldt op imorgen tidlig igen? ;)
Pyt med, om du nu bruger ADO, DAO eller en syvende. De har ikke noget med hinanden at gøre og kører helt parallelt. Men er et recordset åbnet med ADO, så skal man selvfølgelig bruge ADO.
Du siger bare til når du har fået den sidste dråbe ud af kanden så stopper vi bare for idag. Du skulle jo nødigt nå at blive frustreret pga du ikke har mere kaffe ;)
Den error du får skyldes manglende registrering af en kontrol eller reference. Check lige, at du har de forskellige komponenter. Der kan risikere at stå MISSING ud for din ADO reference fra før. Så er det, at jeg ikke kan huske, hvad man så skal gøre - AV - Ikke slå !!
Og har du husket at fortælle Access, at den ikke skal give dig eneret på at lukke MDB filen op, for så kan ingen andre komme ind imens. Det gør du i Access menu: Tools / Options
Hmm... jeg har et lille bitte problem nu. Hvordan skal jeg få datagrid'en til at loade indholdet? Der er nemlig ikke en funktion der hedder datagrid_onload()
Fik den til at loade nu. Men kan ikke få den der scroll funktion til at virke. Hvis jeg prøver at lave en msgbox på datagrid1.left så siger den hele tiden 0 ligemeget hvor jeg er henne.
UPS Min mail server er nede, så jeg har heller ikke fået mail fra eksperten-robotten.
Man loader ikke et datagrid. Man definerer blot det hele og så er den "på".
Du skal nok bruge den rigtige property - og den hedder:
Datagrid1.LeftCol
og angiver nummeret på den kolonne, der er længst til venstre og som stadig kan ses i kontrollens eget scope. (Det sidste betyder bare, at det KUN gælder rullegardinet inde i selve kontrollens område. Det gælder altså ikke, hvis du laver et område for lille til selve kontrollen.)
I slutningen af din "scroll" subrutine sætter du dem til hhv. den ene og den anden LeftCol værdi. Så laver du en dobbeltomvendt Scroll funktion:
if LeftCol1 <> Datagrid1.LeftCol then Datagrid2.LeftCol = Datagrid1.LeftCol else if LeftCol2 <> Datagrid2.LeftCol then Datagrid1.LeftCol = Datagrid2.LeftCol endif endif
Så er det nemlig ligemeget, hvilket datagrid du rykker i, så følges de ad.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.