[ Script ] demande d'aide pour interface , syntaxe ? bug ?

braabu

Nouveau
24 Avril 2016
32
  • Auteur de la discussion
  • #1
bien le bonjour messieurs et mesdames !

je me lance dans la création d'une interface pour un script que j'ai fait, j'ai une 1ere version qui marche très bien, mais je voudrais l’améliorer.. et la c'est le drame ..

dans le code qui suit
je crée la fenetre, un bouton, et ce bouton doit , pour le moment me sélectionner un calque précis, le calque poche,
et bien si je met le code dans le main() ça marche sans problème , si je demande la même chose par un bouton ... paff ça ne marche plus ..

une idée du pourquoi ??

merci d'avance !!


Code:
Sub main()
    Dim Form1 As New System.Windows.Forms.form
    Dim OK_button As New System.Windows.Forms.button
    dim ZoneLayer as Layer
    dim ZoneLayerName as string = "Poche"
    Dim calque as layer
    if HasLayer("Poche") = False then
    ZoneLayer = CreateLayer(ZoneLayerName)
    SetActiveLayer(ZoneLayerName)
    Activelayer.color = color.White
    End If
    Form1.Size = New System.Drawing.Size(120, 100)
    Form1.Text = "test."
    Form1.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
    OK_button.Text = "OK"
    OK_button.Location = New System.Drawing.Point(10,10)
Form1.Controls.Add(OK_button)
Addhandler OK_button.click, AddressOf OK_CLICKED
Form1.Show()
End Sub


Sub OK_CLICKED(ByVal sender As Object, ByVal e As EventArgs)
traitement("Poche")
end sub

sub traitement(calque)
msgbox(calque) ' <--- ca renvoi bien "poche"
SetActiveLayer(calque) ' <--- ca plante
end sub
 

petit_lulu

Ouvrier
11 Janvier 2015
457
gers
salut,
je ne suis pas un grand specialiste de la programmation mais je pense que tu dois envoyer le "calque" dans ta routine "traitement" car le "calque" declarer dans la sub "ok_clicked" est simplement un string mais surement pas le "calque" de ta sub "main"
au pire declare ta variable "calque" en "public" dans un module ou autre mais pas dans le "main" afin de la rendre accessible et refais un test.
par contre enleve le "calque" de ton sub "traitement"
je ne suis pas certain d'etre bien clair ...:roll:

ta sub "traitement" doit avoir le "calque" declare par un "byval calque as layer" ou bien "byref calque as layer" et celui-ci doit correspondre a celui declare dans le "main".
j'ai pas tout suivi mais ce "layer" n'est pas le "sender" de la sub "ok_clicked"?

a+
 

dh42

Compagnon
4 Septembre 2009
5 024
Près de St Etienne (42)
Salut,

Le fait que ton sub main() soit terminé quand tu clique sur le bouton fait que le script n'a plus de référence au document en cours.

Si tu ne l'utilise qu'une fois dans ta sub, tu peux donner le chemin complet comme suit.

Code:
sub traitement(calque as string)
    CamBamUI.MainUI.ActiveView.CADFile.SetActiveLayer(calque)
end sub
si tu a besoin d'accéder plusieurs fois à des objets du documents tu peux créer un "pointeur" vers le document ; exemple, ici je lis le nom du calque actif, puis j'active le calque "Poche" et enfin je lis de nouveau le nom du calque actif.

newdoc deviens un pointeur vers le document en cours.

Code:
sub traitement(calque as string)
   
    dim newdoc as CADFile = CamBamUI.MainUI.ActiveView.CADFile
   
    msgbox(newdoc.ActiveLayer.Name) 'retourne nom du calque actif

    newdoc.SetActiveLayer(calque) 'defini le calque actif d'après son nom
   
    msgbox(newdoc.ActiveLayer.Name) 'retourne nom du calque actif

end sub
++
David
 
Dernière édition:

Sujets similaires


Haut