Strona: [  << <   1 2   > >>  ]  z  2     
Autor Temat: Odwolania do obiektu przez zmienna -szybkiej pomocy dla nowiciusza potrzeba
anonim




Typ: Nie zarejestrowany
Odwolania do obiektu przez zmienna -szybkiej pomocy dla nowiciusza potrzeba

Jak odwolac sie do obiektu CommandButton_"N" nie bedac w jego procedurze zdarzenia?
Czyli:

Posiadam jego naze w zmiennej(String -jest ok?) I teraz chce aby obiekt o nazwie jaka jest zawarta w zmiennej zosatl ukryty - jak to zrobic?

Sprawdzalem:


Dim Nazwa_zmiennej As Srtring
'teraz do zmiennej przypisalem nazwe przycisku
'nie pisze bo dziala na 100%
czyli zmienna to nazwa obiektu CommandButton_"iles"
--to "iles" wlasnie jest wazne bo o nim decyduje uzytkownik!!!

Nazwa_zmiennej.Visible = False
'Dlaczego takie odwolanie do istniejacego obiektu ale przez zmienna nie dziala i jak to mam wykonac???

A dokladnie moje odwolanie do obiektu wyglada tak
NazwaPrzycisku.Visible = False
Ale niestety nie dziala i co mam zrobic???

Szybkiej pomocy mi potrzeba!
Z gory wielkie dzieki dla wszystkich!



26-08-2004 23:04
  
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Niestety względem nazwy nie można . Można jednak względem indexu. Wstaw 2 przyciski. W 1 w właściwości "Index" ustaw 0, a w drugim - 1. W module wpisz:

dim Numerek as byte
numerek=inputbox("Wpisz numer buttona do ukrycia:"
command1(numerek).visible=false


... powinno działać. Niestety nie da się tak jak ty chcesz


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

26-08-2004 23:41
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Anonimie ja robię to tak jak na poniższym, oczywiście uproszczonym przykładzie (bez obsługi błędów):

Kod w formie:

Option Explicit
'''' Project/References - TypeLib Information - (tlbinf32.dll)

'''' na formie o nazwie frmPokazPrzycisk
'''' kontrolka TextBox o nazwie "txtTest"
'''' oraz 3 kontrolki CommanButton
'''' 1-cmdPokaz - pokazuje przycisk cmdUkrywany
'''' 2-cmdUkryj - ukrywa przycisk cmdUkrywany
'''' 3-cmdUkrywany - ten przycisk jest widoczny lub niewidoczny w zależności od tego
'''' z jakim argumentem wywołamy porcedurę

PokazUkryjPrzycisk(ByVal strNazwaKontrolki As String, ByVal bVisible)
'''' nic nie stoi na przeszkodzie aby ukrywany przycisk był z tablicy kontrolek
'''' i nazwa jego np cmdUkrywany(2)
'''' to jest tylko przykład dla CommanButtona ale można się odwołać np do TextBox


Private Sub PokazUkryjPrzycisk(ByVal strNazwaKontrolki As String, ByVal bVisible)
  Dim oKontrolka As Variant
'''' frmPokazPrzycisk - forma na której znajduje sie kontrolka
  Set oKontrolka = tli.InvokeHook(frmPokazPrzycisk, strNazwaKontrolki, INVOKE_PROPERTYGET)
  oKontrolka.Visible = bVisible
  MsgBox (oKontrolka.Name & vbNewLine & IIf(bVisible, " widoczny", " niewidoczny")
End Sub

Private Sub cmdPokaz_Click()
'''' czas do textBox
    Call WartoscTextBox("txtTest", Time)
'''' pokaż przycisk o nazwie "cmdUkrywany"
    Call PokazUkryjPrzycisk("cmdUkrywany", True)

End Sub

Private Sub cmdUkryj_Click()
'''' ukryj przycisk o nazwie "cmdUkrywany"
    Call PokazUkryjPrzycisk("cmdUkrywany", False)
End Sub

Private Sub WartoscTextBox(ByVal strNazwaTextBox As String, ByVal strNapis As String)
  Dim oKontrolka As Variant
  Set oKontrolka = tli.InvokeHook(frmPokazPrzycisk, strNazwaTextBox, INVOKE_PROPERTYGET)
  oKontrolka.Text = Time()
End Sub


_____________________________________________
Karolina

27-08-2004 07:03
Pokaż profil karolinavb  Wyślij email do karolinavb   
Chudy
[TLHW]Wiktor



Typ: moderator
Postów: 574
Zarejestrowany: Aug 2002

Jeszcze jest taka procedura jak "CallByName"


_____________________________________________
Projekt "Thunder Cannons" nadchodzi...

27-08-2004 13:41
Pokaż profil Chudy  Wyślij email do Chudy   Odwiedź stronę Chudy       1220895
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

hehe "nigdy nie mów nigdy"


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

27-08-2004 14:04
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
anonim




Typ: Nie zarejestrowany
ok jeszcze dokladniej to wyjasniam!!!

Pisze taka prosta gre dla dzieci

Ma ona polegac na tym ze jest na Form wstawiony jakis Picture. Gra polega na tym, ze dziecko musi klikac zakrywajace obrazek przyciski. Oczywiscie przyciski sa poukladane równomiernie na obrazku tworzac cos w rodz. szachownicy!
Teraz aby odkryc fotke(czyli wygrac!) dziecko klika na dowolny przycisk! Ten uruchamia moja funkcje losujaca pytanie z dziedziny matematyki (np:2*5).
Jezeli zostala podana odp. prawidlowa to klikniety przycisk zostaje ukryty! Jezeli NIE to NIE i gra toczy sie dalej!
A szczerze mówiac nie chce mi sie w kazdym przycisku wpisywac(wiem Ctrl+V) funkcji losujacej!

Wiec jakie propozycje odnosnie ukrycia(lub nie) danego obiektu nie bedac w jego procedurze zdarzenia?
Oczywiscie wywolanie takiej funkcji u mnie wyglada tak:
Private Sub CommandButton99_Click()
    NazwaPrzycisku = CommandButton99.Name
    Call LosowaniePytania
End Sub

Private Sub LosowaniePytania()
    'tu losowanie pytania
    'zadawanie pytania
    'sprawdzanie odpowiedzi
    'i powinno nastepowac ukrycie(lub nie)kliknietego przycisku!
End Sub



Bardzo prosze o pomoc - z góry wielkie dzieki dla pomagajacych takiej lamie jak ja!

27-08-2004 21:33
  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Możesz zrobić np. kolekcję tych przycisków, tak że każdy będzie miał przypisany Index (robi się błyskawicznie). potem, przy wystąpieniu zdarzenia Click masz podany ten Index, losujesz pytanie i jeśli jest dobre, to "znikasz" przycisk.

Private Sub CBtButton_Click(Index As Integer)
    nAktywnyPrzycisk = Index
    ZadajPytanie  'to funkcja zadająca pytanie
End Sub

Private Sub ZadajPytanie()
    'Tutaj kod pytania, sprawdzanie odpowiedzi etc.
    '...
    '...
    If bOdpDobra Then CBtButton(nAktywnyPrzycisk).Visible = False
End Sub



_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

27-08-2004 22:12
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
anonim




Typ: Nie zarejestrowany
dzieki wielkie dla was ale...

co to znaczy: CBtButton
-a dokladnie "CBt" - czy to oznacza CommandButton'a

marcin_an  - wielkie dzieki dla Ciebie i dla wszystkich!

28-08-2004 22:32
  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Tak. To CommandButton.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

28-08-2004 22:51
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Standardowo nazywa się to chyba "cmd" (wiem, wiem - czepiam się )


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

28-08-2004 23:10
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Tak, czepiasz się. Standard standardem, a ja używam tego, co mnie informuje o naziwe klasy obiektu.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

28-08-2004 23:12
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
anonim




Typ: Nie zarejestrowany
ok ok ok

nie czepiajmy sie!
Po prostu pomyslalem ze uzywasz czegos czego ja po prostu nie znam, tym sposobem chcialem powiekszyc swoja wiedze!
Ale skoro jest to "cmd"&"Button" -to wszystko OK!

Wielkie dzieki i pozdrawiam!

29-08-2004 15:03
  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

To o czepianiu się było do mikamasa..

Owszem - odszedłem od standardu i fakt - na publicznych forach powinienem jednak starać sie pisać zgodnie ze standardami.

Potwierdzam: CBt to skrót od CommandButton.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

29-08-2004 15:29
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
anonim




Typ: Nie zarejestrowany
tak ja wiem do kogo to bylo

jednak wyjasnilem, ze nie o jakies tam czepianie sie tu powinno chodzic lecz o wspolna pomoc!
I takowa tu uzyskalem!

Ale na marginesie: nie uzylem tych podpowiedzi bo albo jakiejs dokladnie nie rozumie, albo wiecej z tym zabawy niz z wstawieniem w kazdym cmdButton_Click() mojej funkcji losujacej pytanie

Ale: Moze istnieje jakis inny sposób prosty odwolanie sie do obiektu?!
Ciekawie zapowiadalo sie to od marcin_an ale nie dokladnie wiem jak sie bawic tymi indexami! A moich przycisków jest dokladnie 121
A i jeszcze jedna wazna(?) sprawa pisze te gre w VBA! Wiec czesc z waszych podpowiedzi z gory jest skazana na przegrana!

Pozdrawiam i ogromne dzieki dla wszystkich!

29-08-2004 20:22
  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Aha.. jeśli to w VBA, to rzeczywiście indexy odpadają .

Zatem nie mam pomysłu.
Może spróbuj dać to pytanie w dziale VBA, tam krąży osoba, która ma większą wiedzę w tym temacie...


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

29-08-2004 20:32
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Jeżeli  chodzi Ci o VBA to w Accessie oczywiście można się odwołać do obiektu na formularzu przez nazwę np:

Dim nazwa_przycisku As String
'''' przykładowa nazwa przycisku
nazwa_przycisku = "Polecenie17"
Me.Controls(nazwa_przycisku).Visible =False



_____________________________________________
Karolina

29-08-2004 21:12
Pokaż profil karolinavb  Wyślij email do karolinavb   
anonim




Typ: Nie zarejestrowany
co to jest?

"polecenie17"

01-09-2004 20:41
  
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Pytanie postawione przez Ciebie brzmiało:
"Odwolania do obiektu przez zmienna"


Dim Nazwa_zmiennej As Srtring
'teraz do zmiennej przypisalem nazwe przycisku
'nie pisze bo dziala na 100%
czyli zmienna to nazwa obiektu CommandButton_"iles"
--to "iles" wlasnie jest wazne bo o nim decyduje uzytkownik!!!


Nazwa_zmiennej.Visible = False
'Dlaczego takie odwolanie do istniejacego obiektu ale przez zmienna nie dziala i jak to mam wykonac???

A dokladnie moje odwolanie do obiektu wyglada tak

NazwaPrzycisku.Visible = False
Ale niestety nie dziala i co mam zrobic???


a następnie dodałeś
"pisze te gre w VBA"

Na Twoim przykładzie powinno wyglądać to tak
1.
Nazwa_zmiennej= "CommandButton_iles"
Me.Controls(Nazwa_zmiennej).Visible =False



Albo
2.
Nazwa_zmiennej="CommandButton_" & cstr(iles)
Me.Controls(Nazwa_zmiennej).Visible =False


( bo oczywiście zapis CommandButton_"iles" - ?????)

Przykład pokazuje jedynie sposób odwołania się do CommandButtona na formularzu w Accessie i jego właściwości visible ( co też w komentarzu zostało podane - '''' przykładowa nazwa przycisku) przez nazwę tegoż CommandButtona. Takie odwołanie jest możliwe w kodzie VBA w Accessie (inaczej niż w VB). "Me" - jest odwołaniem do bieżącego formularza.


_____________________________________________
Karolina

01-09-2004 21:47
Pokaż profil karolinavb  Wyślij email do karolinavb   
anonim




Typ: Nie zarejestrowany
dobra dobra

-to daj przyklad odwolania do ponad 100-u przycisków nie znajac poczatkowo ich nazw!!!

Dokladnie jak ma wygladac takie cos opisalem wczesniej!
Ale nadal nie wiem jka to wykonac!!!

Pozdro!

03-09-2004 20:43
  
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Jeśli większa grupa kontrolek jednakowego typu na formie ma wywoływać tę sama procedurę,  wykorzystuję w MS Access klasę tworzącą tablicę kontrolek (u Ciebie np skojarzonych z obrazkiem)
KLASA przykładowa:

1. do projektu dodaj nową klasę
2. nadaj jej nazwę clsControlArray
3.Kod klasy clsControlArray

Option Compare Database
Option Explicit

Public WithEvents ButtonArray As CommandButton
Private iIndex As Integer

Private Sub ButtonArray_Click()
MsgBox "Button Index " & Me.Index
'''' dla wywołania obsługi tylko przez Activecontrol
'' ale tak bym nie robiła
'''''''''Call Forms("Lista adresowa" ).LosowaniePytania
'''' lub


Call Forms("Lista adresowa" ).LosowaniePytania(Me.Index)
End Sub
Public Property Let Index(iCount As Integer)
iIndex = iCount
End Property

Public Property Get Index() As Integer
Index = iIndex
End Property
''''koniec kodu klasy kontrolek Command Button


4. Kod FORMY na której sa te przciski

'''' nie ma mowy aby programista wstawiał przyciski i pozostawił im nie znaną sobie nazwę
'''' zakladając, że dla odróżnienia od pozostałych przycisków na formie
'''' przyciski na obrazku (czyli takie, które wykorzystują wspólna procedurę)
'''' mają wspólną część nazwy po to aby TYLKO TE przyciski dodać do tablicy kontrolek
'''' poprzez badanie wspólnej części nazwy przycisku - u mnie mają "CommandButtonObrazka"
'''' a potem dodaje im numery np 0,1,2,3 - nie musza byc kolejno i tak nazywaja się przykładowo :
'''' CommandButtonObrazka1
'''' CommandButtonObrazka2
'''' CommandButtonObrazka3
'''  ale to nie musi byc wcale kolejno może być np
'''' CommandButtonObrazka333
'''  wystarczy, że maja wspólna częśc z lewej strony nazwy
'''
'''' Stosując to rowiązanie NIE TRZEBA wklepywać ręcznie w zdarzeniu
'''' każdego buttona "Przy kliknięciu" - Click Event
'''' wywołania funkcji LosowaniePytania
'''' jest to załatwione w klasie
'''' przez wywołanie tej procedury w
'''' Sub ButtonArray_Click




Option Explicit
Option Compare Database

Dim objButtons() As New clsControlArray

Public Sub MyLoadForm()
Dim intCnt As Integer
Dim objCtl As Control
Dim strWspolnaCzescNazwy As String
strWspolnaCzescNazwy = "CommandButtonObrazka"
'''' tworzenie tablicy kontrolek z obrazka

For Each objCtl In Me.Controls
  If TypeOf objCtl Is CommandButton Then
    If Len(objCtl.Name) >= Len(strWspolnaCzescNazwy) Then
        ''''' zbadaj czy jest to przycisk z obrazka
        If Left(strWspolnaCzescNazwy, Len(strWspolnaCzescNazwy)) = strWspolnaCzescNazwy Then
            ''''nie musimy w kodzie przyporządkowywać procedury zdarzenia
            ''''do przyciski można to zrobić w oknie
            ''''własciwości przycisku
            ''''jest to konieczne dla tego by mozna było
            ''''w klasie skorzystac z tego przycisku

            If UCase(objCtl.OnClick) <> UCase("[Event procedure]" Then
                objCtl.OnClick = "[Event procedure]"
            End If
            ReDim Preserve objButtons(intCnt)
            Set objButtons(intCnt).ButtonArray = objCtl
            ' oczywiście index można przyporządkowac wdług Twojego życzenia
            objButtons(intCnt).Index = intCnt
            intCnt = intCnt + 1
        End If
    End If
  End If
Next objCtl
End Sub

Private Sub Form_Load()
Call MyLoadForm
End Sub

'''' uwaga LosowaniePytania jest teraz Public

Public Sub LosowaniePytania(Optional ByVal lButtonIndex As Integer = -1)
'''' Procedura ta jest wywoływana w ButtonArray_Click
'''' w klasie clsControlArray

On Error GoTo Err_LosowaniePytania
    '''' Twoja wstawka info zostawiłam tu losowanie pytania
    ''''zadawanie pytaniasprawdzanie odpowiedzi
    '''' i powinno nastepowac ukrycie(lub nie)kliknietego przycisku!

'''' można też wywoływać ta funkcję z parametrem
If lButtonIndex >= 0 Then
    '''' ta część procedury jest dla dla wywołania z parametrem czyli indeksem
''''przestaw focus na następna kontrolkę  bo obiekt który ma focus nie może być ukryty
    ''''Me.ObrazOdkrywany.SetFocus


'''' nie wiem jaką masz kontrolke uzyta dla obrazka
'''' czy ona ma metode SetFocus
'''' ja przestawiam focus na kontrolke Nazwisko bo taka przykładową mam
'''' na swoje formie ty możesz inaczej np na nastepny przycisk
'''' obrazka

    Me.Nazwisko.SetFocus
    Dim oButton As CommandButton
    MsgBox (UBound(objButtons))
    If UBound(objButtons) >= lButtonIndex Then
        Set oButton = objButtons(lButtonIndex).ButtonArray
        oButton.Visible = False
    End If
Else
    ' dla wywołania bez parametru z ActiveControl
    Dim ctlCurrentControl As Control
    Dim NazwaPrzycisku As String
    If Not IsNull(Me.ActiveControl) Then
        Set ctlCurrentControl = Me.ActiveControl
        NazwaPrzycisku = ctlCurrentControl.Name

        ''''przestaw focus na następna kontrolke
        '''' bo obiekt który ma focus nie może być ukryty
        ''''Me.ObrazOdkrywany.SetFocus
'''' nie wiem jaką masz kontrolke uzyta dla obrazka
'''' czy ona ma metode SetFocus
'''' ja przstawiam focus na kontrolke Nazwisko bo taka przykładową mam
'''' na swoje formie ty możesz inaczej np na nastepny przycisk
'''' obrazka

        Me.Nazwisko.SetFocus
        Me.Controls(NazwaPrzycisku).Visible = False
    End If
End If
Exit_LosowaniePytania:
    Exit Sub
Err_LosowaniePytania:
    MsgBox Err.Description & vbNewLine & Err.Number & vbNewLine & "LosowaniePytania"
    Resume Exit_LosowaniePytania
End Sub

P.S. Msgbox '-y tylko dla ilustracji u siebie wstawiłam


_____________________________________________
Karolina

04-09-2004 11:00
Pokaż profil karolinavb  Wyślij email do karolinavb   
Wszystkich odpowiedzi: 22 :: Maxymalnie na stronę: 20
Strona: [  << <   1 2   > >>  ]  z  2