OVH Cloud OVH Cloud

reference à un form dans une fonction custom

2 réponses
Avatar
Jean Christophe Avard
Bonjour, je me suis fait une fucntion qui change tout le texte sur tout les
form de mon projet. Le probleme est que je ne sais pas comment référé à mes
form dans la function. voici mon code:

Module _mod

Public lang As String = "FRENCH"



Public main As frmMDI

Public about As frmAbout



Function loadLanguageString()



' create a connection string

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=C:\Documents and Settings\jeanca.DSD-LAN\Desktop\Signs
PRO\Signs PRO\signspro.mdb"

Dim conn As OleDbConnection = New OleDbConnection

' connection string

conn.ConnectionString = strConn

' define wich string table to load

Dim tblString As String

If lang = "FRENCH" Then

tblString = "tbl_french_string"

ElseIf lang = "ENGLISH" Then

tblString = "tbl_english_string"

End If

' create a data adapter

Dim da As OleDbDataAdapter = New OleDbDataAdapter("Select * from " &
tblString, conn)

' create a new dataset

Dim ds As DataSet = New DataSet

' fill dataset

da.Fill(ds, "string")



' copy the datatable into a hastable

Dim tbl As Hashtable = New Hashtable

Dim i As Integer = 0

For Each str As Data.DataRow In ds.Tables("string").Rows

tbl.Add(ds.Tables("string").Rows(i).Item(1),
ds.Tables("string").Rows(i).Item(2))

i = i + 1

Next

' change every text on main form

main.menuFile.Text = CType(tbl("STRING_MENU_FILE"), String)

main.menuFileExit.Text = CType(tbl("STRING_MENU_EXIT"), String)

main.menuHelp.Text = CType(tbl("STRING_MENU_HELP"), String)

main.menuHelpIndex.Text = CType(tbl("STRING_MENU_HELP_INDEX"), String)

main.menuHelpAbout.Text = CType(tbl("STRING_MENU_ABOUT"), String)

' change label text on about form

about.Label1.Text = "ljklkjlkjlkj"

End Function



End Module



J'ai un erreur qui di que ma référence nest pas une instance dun objet, et
lorsque je déclare les form comme ca:

Public main As frmMDI = new frmMDI
Public about As frmAbout = new frmAbout



et bien rien ne se passe... QQN PEUT MAIDER!?

2 réponses

Avatar
Michel
Peut-etre en utilisant le Form.parent ou quelque chose du genre,
si tu applique cela à plusieurs Form il y aussi la Form collection
qui doit te permettre de toutes les parcourir,
sinon passe ta/tes Form en parametres

function XXXX( object as Form)...

Je dis cela un peu vite sans verifier...

Jean Christophe Avard a écrit :
Bonjour, je me suis fait une fucntion qui change tout le texte sur tout les
form de mon projet. Le probleme est que je ne sais pas comment référé à mes
form dans la function. voici mon code:

Module _mod

Public lang As String = "FRENCH"



Public main As frmMDI

Public about As frmAbout



Function loadLanguageString()



' create a connection string

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=C:Documents and Settingsjeanca.DSD-LANDesktopSigns
PROSigns PROsignspro.mdb"

Dim conn As OleDbConnection = New OleDbConnection

' connection string

conn.ConnectionString = strConn

' define wich string table to load

Dim tblString As String

If lang = "FRENCH" Then

tblString = "tbl_french_string"

ElseIf lang = "ENGLISH" Then

tblString = "tbl_english_string"

End If

' create a data adapter

Dim da As OleDbDataAdapter = New OleDbDataAdapter("Select * from " &
tblString, conn)

' create a new dataset

Dim ds As DataSet = New DataSet

' fill dataset

da.Fill(ds, "string")



' copy the datatable into a hastable

Dim tbl As Hashtable = New Hashtable

Dim i As Integer = 0

For Each str As Data.DataRow In ds.Tables("string").Rows

tbl.Add(ds.Tables("string").Rows(i).Item(1),
ds.Tables("string").Rows(i).Item(2))

i = i + 1

Next

' change every text on main form

main.menuFile.Text = CType(tbl("STRING_MENU_FILE"), String)

main.menuFileExit.Text = CType(tbl("STRING_MENU_EXIT"), String)

main.menuHelp.Text = CType(tbl("STRING_MENU_HELP"), String)

main.menuHelpIndex.Text = CType(tbl("STRING_MENU_HELP_INDEX"), String)

main.menuHelpAbout.Text = CType(tbl("STRING_MENU_ABOUT"), String)

' change label text on about form

about.Label1.Text = "ljklkjlkjlkj"

End Function



End Module



J'ai un erreur qui di que ma référence nest pas une instance dun objet, et
lorsque je déclare les form comme ca:

Public main As frmMDI = new frmMDI
Public about As frmAbout = new frmAbout



et bien rien ne se passe... QQN PEUT MAIDER!?




Avatar
Christian Hubert-Hugoud
Salut,

Public main As frmMDI

main est un pointeur sur un objet de type frmMDI. Mais le pointeur vaut 0 et
n'adresse rien tant que tu n'as pas indiqué ce qu'il doit adresser.

Donc, à un moment donné :

set main = frmMDI

si tant est que frmMDI soit chargé sans quoi, ???? je pense que frmMDI est
chargé (à vérifier)

Mais, ceci est dangereux car du coup, tu as un pointeur qui référence un
objet. Tant que ce pointeur n'est pas remis à 0 (set main = nothing), il
devient théoriquement impossible d'arrêter l'application (voir tous les pb
traités à ce sujet dans la faq), car cette feuille ne peut théoriquement
plus se décharger. Ceci doit donc être manipulé avec précaution.

Passer la feuille en paramètre d'une fonction me semble mieux ; c'est ce que
je fais. Dans le load (dans l'activate etc...) je place un appel de fonction
FormLoad Me, dont le prototype est :

Sub FormLoad (f as form)
...
end sub

Moyennant quoi, je ne référence jamais une feuille deux fois.

Enfin, remarque : le nom main est aussi le nom de la fonction de démarrage
standard d'une appli. Un autre nom plus explicite serait bienvenu, selon
moi.

Christian





"Jean Christophe Avard" a écrit dans le message de news:
%
Bonjour, je me suis fait une fucntion qui change tout le texte sur tout
les form de mon projet. Le probleme est que je ne sais pas comment référé
à mes form dans la function. voici mon code:

Module _mod

Public lang As String = "FRENCH"



Public main As frmMDI

Public about As frmAbout



Function loadLanguageString()



' create a connection string

Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=C:Documents and Settingsjeanca.DSD-LANDesktopSigns
PROSigns PROsignspro.mdb"

Dim conn As OleDbConnection = New OleDbConnection

' connection string

conn.ConnectionString = strConn

' define wich string table to load

Dim tblString As String

If lang = "FRENCH" Then

tblString = "tbl_french_string"

ElseIf lang = "ENGLISH" Then

tblString = "tbl_english_string"

End If

' create a data adapter

Dim da As OleDbDataAdapter = New OleDbDataAdapter("Select * from " &
tblString, conn)

' create a new dataset

Dim ds As DataSet = New DataSet

' fill dataset

da.Fill(ds, "string")



' copy the datatable into a hastable

Dim tbl As Hashtable = New Hashtable

Dim i As Integer = 0

For Each str As Data.DataRow In ds.Tables("string").Rows

tbl.Add(ds.Tables("string").Rows(i).Item(1),
ds.Tables("string").Rows(i).Item(2))

i = i + 1

Next

' change every text on main form

main.menuFile.Text = CType(tbl("STRING_MENU_FILE"), String)

main.menuFileExit.Text = CType(tbl("STRING_MENU_EXIT"), String)

main.menuHelp.Text = CType(tbl("STRING_MENU_HELP"), String)

main.menuHelpIndex.Text = CType(tbl("STRING_MENU_HELP_INDEX"), String)

main.menuHelpAbout.Text = CType(tbl("STRING_MENU_ABOUT"), String)

' change label text on about form

about.Label1.Text = "ljklkjlkjlkj"

End Function



End Module



J'ai un erreur qui di que ma référence nest pas une instance dun objet, et
lorsque je déclare les form comme ca:

Public main As frmMDI = new frmMDI
Public about As frmAbout = new frmAbout



et bien rien ne se passe... QQN PEUT MAIDER!?