Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Καταχώρηση ονοματος πεδίου επιλογής στο Current event (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/6547-kataxorisi-onomatos-pedioy-epilogis-sto-current-event.html)

γιώργοςΚ 05-08-24 13:14

Καταχώρηση ονοματος πεδίου επιλογής στο Current event
 
1 Συνημμένο(α)
Καλησπέρα,

Στην συνημμένη βάση σε μια φόρμα έχω 6 πεδία [D1_1 - D1_6]. Προσπάθησα ανεπιτυχώς στο On Current της φόρμας να καταχωρείται στο πεδίο txtControlName το όνομα οποιουδήποτε πεδίου κάνω κλικ.

Θα εκτιμήσω την βοήθεια σας καθως στην πργματική βάση τα πεδία είναι 96 (αντι 6) και ο κωδικας σε καθε ένα απο αυτά αρκετός και θα πρέπει να βρώ λύσεις

Tasos 05-08-24 20:23

Καλησπέρα σε όλους!

Γιώργο πρόσθεσε μια μονάδα κλάσης (Εντολή: Insert > Class Module), μετονόμασε την σε "clsTextBoxes", πέρασε της τον παρακάτω κώδικα:

Κώδικας:


Option Compare Database
Option Explicit

Private WithEvents tBox As TextBox
Private refTextBox As TextBox

Public Sub SetTextBoxWithEvent(txtBox As TextBox)
    Set tBox = txtBox
    txtBox.OnEnter = "[Event Procedure]"
End Sub

Public Sub SetRefTextBox(refTBox As TextBox)
    Set refTextBox = refTBox
End Sub

Private Sub tBox_Enter()
    If Not tBox Is Nothing Then
        refTextBox.Value = tBox.Name
    End If
   
End Sub

... και αποθήκευσε.

Κατόπιν επίλεξε όλα τα πεδία κειμένου που σε ενδιαφέρουν και στην ιδιότητα "Ετικέτα" ("Tag") πληκτρολόγησε τον αριθμό 1.

Στη φόρμα σου (Form1) αφαίρεσε τα πάντα από τον κώδικα, επικόλλησε τον παρακάτω και κάνε τις δοκιμές σου:

Κώδικας:

Option Compare Database
Option Explicit

Private ctrls() As clsTextBoxes

Private Sub Form_Load()
    Dim i      As Integer
    Dim ctlCount As Integer
    Dim ctl    As Control
   
    For Each ctl In Me.Section(0).Controls
        If TypeOf ctl Is Access.TextBox Then
            If ctl.Tag = 1 Then
                i = i + 1
                ReDim Preserve ctrls(i)
                Set ctrls(i) = New clsTextBoxes
                ctrls(i).SetTextBoxWithEvent ctl
                ctrls(i).SetRefTextBox Me.txtControlName
            End If
        End If
    Next
End Sub

Καλή συνέχεια.

Τάσος

γιώργοςΚ 09-08-24 11:54

Παράθεση:

Αρχική Δημοσίευση από Tasos (Μήνυμα 35947)
Καλησπέρα σε όλους!

Γιώργο πρόσθεσε μια μονάδα κλάσης (Εντολή: Insert > Class Module), μετονόμασε την σε "clsTextBoxes", πέρασε της τον παρακάτω κώδικα:

Κώδικας:


Option Compare Database
Option Explicit

Private WithEvents tBox As TextBox
Private refTextBox As TextBox

Public Sub SetTextBoxWithEvent(txtBox As TextBox)
    Set tBox = txtBox
    txtBox.OnEnter = "[Event Procedure]"
End Sub

Public Sub SetRefTextBox(refTBox As TextBox)
    Set refTextBox = refTBox
End Sub

Private Sub tBox_Enter()
    If Not tBox Is Nothing Then
        refTextBox.Value = tBox.Name
    End If
   
End Sub

... και αποθήκευσε.

Κατόπιν επίλεξε όλα τα πεδία κειμένου που σε ενδιαφέρουν και στην ιδιότητα "Ετικέτα" ("Tag") πληκτρολόγησε τον αριθμό 1.

Στη φόρμα σου (Form1) αφαίρεσε τα πάντα από τον κώδικα, επικόλλησε τον παρακάτω και κάνε τις δοκιμές σου:

Κώδικας:

Option Compare Database
Option Explicit

Private ctrls() As clsTextBoxes

Private Sub Form_Load()
    Dim i      As Integer
    Dim ctlCount As Integer
    Dim ctl    As Control
   
    For Each ctl In Me.Section(0).Controls
        If TypeOf ctl Is Access.TextBox Then
            If ctl.Tag = 1 Then
                i = i + 1
                ReDim Preserve ctrls(i)
                Set ctrls(i) = New clsTextBoxes
                ctrls(i).SetTextBoxWithEvent ctl
                ctrls(i).SetRefTextBox Me.txtControlName
            End If
        End If
    Next
End Sub

Καλή συνέχεια.

Τάσος


Τάσο σε χαιρετω και ευχαριστω για την προθεση βοήθειας,

Εχω κανει ολα τα πιο πανω τα οποια παραθέτεις αλλα κτυπα ο κωδικας στο

Private Sub Form_Load()
Private ctrls() As clsTextBoxes
Dim i As Integer
Dim ctlCount As Integer
Dim ctl As Control

For Each ctl In Me.Section(0).Controls
If TypeOf ctl Is Access.TextBox Then
If ctl.Tag = 1 Then
i = i + 1
ReDim Preserve ctrls(i)
Set ctrls(i) = New clsTextBoxes
ctrls(i).SetTextBoxWithEvent ctl
ctrls(i).SetRefTextBox Me.txtControlName
End If
End If
Next
End Sub

γιώργοςΚ 09-08-24 11:59

Τασο συγνωμη για το προηγούμενο μηνυμα, δεν προσεξα οτι η γραμμή Private ctrls() As clsTextBoxes επρεπε να παει κατω απο το Option Explicit.

Ολα δουλεύουν ομως κατι επιπροσθετο, πως μπορω τωρα να αναφερθώ στο ονομα πεδίου που λαμβανει το txtControlName ετσι ωστε να φτιαξω κωδικα κλπ.

Δοκίμασα το txtControlName.Value χωρις αποτελεσμα

Tasos 09-08-24 19:41

1 Συνημμένο(α)
Καλησπέρα σε όλους!

Γιώργο δοκίμασε το συνημμένο και πες μου αν είναι αυτό που χρειάζεσαι.

Καλή συνέχεια.

Τάσος


Η ώρα είναι 05:11.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2