2009-08-12 12 views
2

Ich habe ein Access-Formular, das eine winzige Menge an Daten für einen bestimmten Datensatz anzeigt. Im Grunde gibt es nur den Namen auf der linken Seite und auf der rechten Seite eine Reihe von Rectangle-Steuerelementen, deren Hintergrundfarbe ich in der OnLoad() -Funktion des Formulars entsprechend den Ergebnissen einer Abfrage ändert, die mit der ID dieses Datensatzes als Parameter durchgeführt wurde.Zugriff auf Endlosformulare - wie individualisiert man die Kontrollen pro Datensatz?

Das alles funktionierte gut, habe meine ID/Name auf der linken und 31 Boxen auf der rechten Seite, farbig, wenn dieser Tag des Monats reserviert ist :) Aber natürlich kann diese Funktion völlig willkürlich sein, da es Code ist.

Dann entschied ich mich, auf 'Endlosformular' zu wechseln, um so viele Einträge wie möglich anzuzeigen. Aber leider sollte es nicht sein - alle Boxen wurden entsprechend der Abfrage/Funktion gefärbt, die nur für den ersten Datensatz ausgeführt wurde. Ich vermutete, dass dies der Fall ist, weil OnLoad() aber auch nicht auf OnCurrent() geändert wurde. Wie sich herausstellt, oder was ich gelesen habe, werden die Rectangle Intances über das gesamte Formular verteilt, und wenn ich die BackColor für eines von ihnen ändere, ändert sich das für dieses Feld für jeden Datensatz.

Ich möchte in der Lage sein, dies je nach einer Abfrage pro Datensatz zu ändern. Gibt es irgendeinen Weg? Bis jetzt konnte ich nur bedingte Formatierungen finden (die Funktion, die für Rechtecke noch nicht verfügbar ist und auch nicht genau meinen Bedürfnissen entspricht) und kludgy Access 97 Textbox-Hacks.

Vielen Dank im Voraus :)

Antwort

1

können Sie aus einem HTML-Hintergrund kommen, wo Rechtecken eine natürliche Lösung wären. Sie sind nicht in Access. Ich denke nicht, dass sie für dich arbeiten werden (in der Tat könnte "Kludgy" den Versuch meiner bescheidenen Meinung nach beschreiben).

Sie können jedoch ein Bild anzeigen. Sie halten für jeden Status ein Bild bereit, das Sie abrufen können. Ich habe visuelle Darstellungen auf diese Weise gemacht. Ein wenig später kann ich vielleicht etwas Code posten, aber ich denke, Sie werden feststellen, dass dies ziemlich einfach funktioniert, selbst wenn ich es nicht tue.

HINZUGEFÜGT NOTE: Ich bin froh, dass dies aussieht, wie es für Sie arbeiten wird. Sie sind besorgt über "instanced nur einmal" in Ihrem Kommentar unten. Ja, das gilt für Rechtecke, bei denen es sich um ungebundene Steuerelemente handelt (weil sie nur für Ornamente gedacht sind). Aber Sie werden ein Bildsteuerelement verwenden, das ein gebundenes Steuerelement ist (siehe Remou).

+0

Nein. Wenn Sie 2 Bedingungen haben (reserviert = rot, offen = grün), verwenden Sie zwei Bilder. Ihr Unterformular verwendet ein Bildsteuerelement anstelle des Rechtecks. Sie können die Bilder benennen, nachdem die Variable bereits verwendet wurde. Ich habe gerade nach meinem Artefakt gesucht. Es ist nicht hier. Aber eine Hilfe Suche auf "Bild" wird Sie sofort anweisen (beginnen Sie mit der Hilfe für Access, nicht VBA). – Smandoli

+0

Ich bin ein C/C++ Lowlevel-Coder von Herzen/Beruf, eigentlich :) Was ich (offensichtlich) wollte, ist schnell zu hacken: 31 Kästchen in einer Reihe, zeigen Sie eine Farbe nach einem Codepath mit Datensätzen. Nicht elegant, aber sollte den Job machen. Das Problem besteht offensichtlich darin, dass die Steuereigenschaften nur einmal statt pro Datensatz gemeinsam verwendet/instanziert werden, was ich erwartet habe. Wie lösen Bilder das? Und bedeuten Sie mit Bildern für jede Permutation 31 verschiedene Bilder? Jedenfalls würde ich es bevorzugen, wenn die GUI-Ebene nur eine vektorisierte Form anstelle eines Bildes zeichnet.Bitte ausführlicher :) – nielsj

+0

Entschuldigung für "kludging" herum mit den Kommentaren - kann mich nie entscheiden :) Ihre Lösung klingt gut. – nielsj

0

Alle ungebundenen Steuerelemente in einer fortlaufenden Form werden identisch sein; Begrenzte Steuerelemente können mithilfe der bedingten Formatierung variiert werden.

0

Ändern jedes Rechteck in ein Textfeld Control Source:

=Iif(myConditionIsMet,"ÛÛÛÛÛ","") 

Das "U" ist der Full-Block Zeichen in Arial (auf 219).

Verwandte Themen