Forme de Form Plante au 3°clic

Résolu
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008 - 10 sept. 2008 à 12:27
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008 - 11 sept. 2008 à 12:41
Bonjour
J'ai un petit code pour tester la modification de la forme  de Form ou  d'un controle , mais ça plante au 3 ° clic et je me demande pourquoi : Bug de VB  ou Bug de Moi  ?
Voila le code à mettre dans Form1 Si vous voulez tester.
Public

Class Form1Dim Rond1 AsNew System.Drawing.Drawing2D.GraphicsPath

Dim reg1, reg0 AsNew Region

Dim Choix AsBoolean = True

PrivateSub Form1_Click(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Click
If Choix ThenMe.Region reg1 ElseMe.Region reg0

Choix = Not Choix

EndSub

PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load

Rond1.AddEllipse(3, 3, 190, 190)

reg1 = New System.Drawing.Region(Rond1)

reg0 = Me.Region

EndSub

EndClass

Merci d'avance
A+

8 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
10 sept. 2008 à 13:53
Salut,
Apparemment, la région n'est utilisable qu'une fois. Il suffit donc de la recréer à chaque fois:

Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
  Static Choix As Boolean = True

  If Choix Then
    Dim Rond1 As New System.Drawing.Drawing2D.GraphicsPath
    Rond1.AddEllipse(3, 3, 190, 190)
    Me.Region = New System.Drawing.Region(Rond1)
  Else
    Me.Region = Nothing
  End If

  Choix = Not Choix
End Sub
3
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
10 sept. 2008 à 16:21
Salut Kevin.Ory

Bien vue .
Mais pourquoi n'y ai-je pas pensé.
C'est dommage d'être obligé de recréer une même region !
Je viens de tester ça marche avec
If
choix ThenMe.Region reg1.Clone ElseMe.Region Nothing

et avec un array de region   "reg(i) .clone  "   ça marche aussi.

Merci et bonne journée
A+
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 sept. 2008 à 16:38
Salut




Dim reg1, reg0 AsNew Region

reg1 n'est pas déclarée en NEW REGION
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
10 sept. 2008 à 17:47
salut PCPT

A ma faible connaissance d'amateur je dirais que
Non
Dim reg1, reg0 As New Region
 est equivalent a
Dim  reg0 As New Region
Dim  reg1 As New Region
sinon exception au debogage
{"La référence d'objet n'est pas définie à une instance d'un objet."}

En plus ça marche 1 fois pour chaque region (reg0 et reg1)mais pas plus.
En nouvel appel  une region doit être recrée. Bisard mais c"est comme ça !!!

Bonne journée
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 sept. 2008 à 18:45
re,

en effet je viens de vérifier sous VS2008, la déclaration en ligne type correctement toutes les variables (contrairement à VB6)

bon à savoir ^^
désolé pour ma petite bétise
++
0
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
10 sept. 2008 à 19:36
re,
C'est pas une petite bêtise, c'est une aubaine, puisque j'ai pu étaler mon savoir
Je connais , j'ai assez de mal pour passer de VB6 à VS2005 , j'ai pas encore osé une incursion vers 2008.

Bonne soirée
A+
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
11 sept. 2008 à 05:21
Ben moi j'vais vous dire que le Newil ne faut pas le mettre

Dim reg1, reg0 As <strike>New</strike> Region
reg1 = New System.Drawing.Region(Rond1)
reg0 = Me.Region

Il ne faut pas appeler initialiser 2 fois la même variable

spoty > VS2003 ou VS2008, ça ne change rien au niveau code. Simplement que dans 2008 il y a plus de trucs comme wpf, linq... mais rien ne t'oblige à les utiliser. Un code VB2003 est compatible avec VB2008.
0
cs_spoty Messages postés 17 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 11 septembre 2008
11 sept. 2008 à 12:41
Salut

Tu as tout à fait raison .
Même si ça marche ,c'est pas utile.
Ah! les étourderies .

Merci pour l' info consernant VB2008, je crois que je vais me lancer.

Bonne journée
A+
0
Rejoignez-nous