Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

geteiltes Formular - Focus von Formularkopf in Detailbereich

Begonnen von puntipik, Februar 10, 2011, 21:07:52

⏪ vorheriges - nächstes ⏩

puntipik

hallo,

ich habe ein geteiltes Formular (Access 2007). Im Formularkopf sind ein paar Buttons. Im Detailbereich ist die Datenblattansicht.

Mein Vorhaben:
Ich wähle in der Datenblattansicht einen Datensatz aus und betätige einen Button im Formularkopf.
Der Button soll einen neuen Datensatz einfügen und zwei Felder automatisch befüllen. Leider funktioniert das so nicht. Er legt zwar den neuen Datensatz an (nicht gespeichert) gibt aber eine Fehlermeldung, wenn ich in ein Feld klicken will, dass das erste Pflichtfeld nicht ausgewählt ist. Der Grund liegt daran, dass der Focus im Formularkopf beim Button liegt.

Ich bekomme es aber nicht hin, dass er den Focus auf den neuen Datensatz legt bzw. das er den Focus auf die Datenblattansicht legt und dann einen neuen Datensatz anfügt.

Habe die gleiche Funktionalität zum Testen beim Doppelklicken eines Feldes in der Datenblattansicht eingefügt. Dort funktioniert der Code einwandfrei, weil der Focus in der Datenblattansicht bleibt.

Wenn ich den Focus mit "me.feld1.setfocus" setze regt er sich auf, dass der Focus nicht dorthin gewechselt werden kann. Mach ich es mit "Form_name.feld1.setfocus" markiert er zwar das Feld, der Focus (wenn ich die Pfeiltasten oder Tab drücke) bleibt aber beim Button im Formularkopf.

Hier mein Code:

Private Sub button_neuerMangelMieter_Click()
On Error GoTo Err_button_neuerMangelMieter_Click
    Dim mieterName, mieterTel, mieterSt, mieterGe, mieterTZ, bvhId
   
    Form_ein_mangelliste.Mieter.SetFocus
    mieterName = Me.Mieter
    bvhId = Me.mangel_bvh_ID
    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.GoToRecord , , acNewRec
    Me.mangel_bvh_ID = bvhId
    Me.Mieter = mieterName
Exit_button_neuerMangelMieter_Click:
    Exit Sub
    '...
restlicher_code:


lg puntipik

database

#1
Hallo,

die seit ACC2007 neue Formularform 'Geteiltes Formular' stellt eine Datenblattansicht zusätzlich zur 'normalen' Formularansicht dar.
Es ist nicht möglich das Datenblatt - außer ein paar Formatierungseinstellungen - direkt per Code zu steuern - um das zu erreichen
müsstest du auf die 'alte' Form des Unterformulars zurückgreifen.

Jeglicher Code, den du in einem geteilten Formular verwendest bezieht sich auf den Formularteil und dessen Steuerelemente und nicht auf das angezeigte Datenblatt,
welches übrigens auch nicht sichtbar ist, wenn das Formular in der Entwurfsansicht geöffnet wird!

Form_ein_mangelliste.Mieter.SetFocus
wohin setzt du denn mit diesem Code den Focus - auf's eigene Formular, auf dem sich auch der Button befindet  ???

ZitatIch bekomme es aber nicht hin, dass er den Focus auf den neuen Datensatz legt bzw. das ...
und...
ZitatWenn ich den Focus mit "me.feld1.setfocus" setze ....
Wenn du in einem geteilten Formular aus dem Kopfbereich ein Feld im Detailbereich anspringen willst musst du explizit angeben WO sich das Feld (Textbox) befindet:

In Etwa so:

Me.Section(acDetail).Controls("NameDeinesFeldes") = "xyz"
Me.Section(acDetail).Controls("NameDeinesFeldes").SetFocus

Neues Feature, neue Methoden...  ;)
Ein paar Infos zu geteilten Formularen kannst du im Punkt 4.1.3 im Link #2 in meiner Signatur nachsehen und nachlesen

HTH

puntipik

hallo, danke für die infos.

wollte jetzt zum testen folgendes szenario nachspielen:

habe ein geteiltes formular - formularkopf mit ein paar buttons und detailbereich stellt eine datenblattansicht dar.

nachdem ich im datenblatt einen record ausgewählt habe (in dem ich mich in ein feld hineinstelle) möchte ich im formularkopf einen button drücken und er setzt mir den focus in der datenblattansicht auf den ausgewählten record auf ein bestimmtes feld.

mit
Me.Section(acDetail).Controls("Mieter").SetFocus

funktioniert es aber nicht, er sagt: Der Fokus kann von NameDesProgramms nicht auf das Steuerelement Mieter verschoben werden.

gibts denn keine möglichkeit, dass ich nach der button-routine wieder in die datenblattansicht hineinspringe und der ausgewählte record den focus hat, sodass ich mit dem cursor weiterfahren kann? jetzt ist zwar der datensatz markiert, hat aber nicht den fokus, somit muss ich jedes mal mit der maus auf den datensatz klicken, damit ich dort weiterarbeiten kann.

lg puntipik

database

#3
Hallo,

...da dürfte dann das Steuerlelement Mieter nicht existieren oder es hat einen anderen Namen.
Das Codefragment oben ist getestet, das läuft schon richtig.


Zitatsomit muss ich jedes mal mit der maus auf den datensatz klicken, damit ich dort weiterarbeiten kann.
Ich fürchte, das wird dir nicht erspart bleiben.
Hmmm... was spricht denn dagegen, die Eingaben im Formularteil zu erledigen?
Da hättest du wenigstens die Möglichkeit der Eingabeprüfung, die im Datenblattbereich sowieso nicht zu realisieren ist, zu bewerkstelligen.

puntipik

der code ansich funktioniert eh. nur eben in diesem scenario (von formularkopf zu datenblattansicht) geht es nicht. das steuerelement stimmmt schon so, wenn ich einen falschen namen schreibe gibt er mir ein andere fehlmeldung aus. anscheinend funktionierts eben nur nicht, um in die datenblattansicht zu springen.

hm, anscheinend geht es nicht, dass ich vom formularkopf zum datensatz in der datenblattansicht springe.
es geht nicht um die eingabe, oder sonst, was, es sollte der focus einfach nach der button-routine wieder in datenblatt springen.

thx
puntipik

database

Hallo,

wie ich schon gesagt habe - ein neues Feature mit neuen Eigenheiten.

Für 'ordentliche' Funktionalitäten kann ich dir nur empfehlen ein 'altes' Unterformular zu erstellen.
Wenn das dann auch noch als Endlos-Form ausgeführt ist, hast du die volle Kontrolle per VBA über alle Felder.