IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

'Name' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. (BC30451)


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Points : 51
    Points
    51
    Par défaut 'Name' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. (BC30451)
    Bonjour,

    Je ne comprends pas quelque chose qui parait si simple...

    J'ai dans Xaml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			<my:RdBtn x:Name="Button1" Tag="Images/lp.png" Content="Images/lp_p.png" Grid.Column="2" Command="{x:Static my:TBar.Button1Command}" />
    			<my:RdBtn x:Name="Button2" Tag="Images/Csr.png" Content="Images/Csr_p.png" Grid.Column="2" Command="{x:Static my:TBar.Button2Command}" />
    En code behind j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	Public Sub CommandBinding_Button1()
    		If 	Button1.Visibility = Visibility.Visible Then
    			Button1.Visibility = Visibility.Collapsed
    			Button2.Visibility = Visibility.Visible
    		End If
    	End Sub
    	Public Sub CommandBinding_Button2()
    		If 	Button2.Visibility = Visibility.Visible Then
    			Button2.Visibility = Visibility.Collapsed
    			Button1.Visibility = Visibility.Visible
    		End If
    	End Sub
    Button1 et Button2 sont déclarés dans mon xaml dans la classe TBar pourquoi ils ne sont pas reconnus dans mon code behind alors qu'ils partagent la même class qui est TBar ?
    Quelqu'un pourrait m'aider ?
    Ce que je cherche à faire c'est d'avoir un bouton avec 2 fonctions et 2 logos différents, donc le bouton change de logo au clique et de fonction par la même occasion.

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonsoir,

    Je ne suis pas sûr de comprendre le problème ...
    Pour ce que je comprends, le code suivant fait le travail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
        Private Sub MesBoutons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click
            If sender.name = "Button1" Then
                ' traitement sur click de Button1
                ' ....
                MessageBox.Show(sender.name) ' pour le test
                ' ....
                Button1.Hide()
                Button2.Show()
            Else
                ' traitement sur click de Button2
                ' ....
                MessageBox.Show(sender.name)
                ' ....
                Button2.Hide()
                Button1.Show()
            End If
        End Sub
    Les deux boutons sont déposés exactement l'un sur l'autre sur le formulaire et seul celui qui est visible réagit au clic. Il est possible d'en rendre un invisible au chargement du Form.

    Ceci t'aide-t-il ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Points : 51
    Points
    51
    Par défaut
    Alors tout d'abord merci de m'aider !

    Les deux boutons sont déposés exactement l'un sur l'autre sur le formulaire et seul celui qui est visible réagit au clic. Il est possible d'en rendre un invisible au chargement du Form.
    Oui les 2 boutons sont déposés l'un sur l'autre et effectivement celui qui est visible est le seul à réagir au clic.
    Donc de base j'ai Button1 qui est visible avec son image puis lorsque je clique j'ai Button2 qui apparaît avec son image.
    Si ce n'est pas clair n’hésitez pas à me demander !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     	Private WithEvents Button1 As RdBtn
     	Private WithEvents Button2 As RdBtn
    Voici ce que j'ai fait dans le xaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			<my:RdBtn x:Name="Button1" Tag="Images/lp.png" Content="Images/lp_p.png" Grid.Column="2" Click="Buttons_Click" />
    			<my:RdBtn x:Name="Button2" Tag="Images/Csr.png" Content="Images/Csr_p.png" Grid.Column="2" Click="Buttons_Click" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	Public Sub Buttons_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click
     
    		If sender.ToString Is "Images/lp_p.png" = True Then 'j'ai mis "Images/lp_p.png" car c'est ce que me renvoie sender, il ne me renvoie pas le name mais le Content
    			MessageBox.Show(sender.ToString) 'test
    			Button1.Visibility = Visibility.Hidden
    			Button2.Visibility = Visibility.Visible
    		Else
    			MessageBox.Show(sender.ToString) 'test
    			Button2.Visibility = Visibility.Hidden
    			Button1.Visibility = Visibility.Visible
    		End If
     
    	End Sub
    Voici mon erreur "La référence d'objet n'est pas définie à une instance d'un objet." donc de ce que je comprends Button1 dans mon xaml et Button1 dans mon code behind (mon.vb) ne sont pas les mêmes... mais comment les lier ? DataContext ?
    J'ai l'impression d'avoir un "Button1" dans mon xaml et un autre dans mon code behind donc 2 "Button1" donc celui qui est utilisé dans ma méthode Buttons_Click est vide

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Je ne comprends pas tes déclarations de Button1 et Button2 :
    1. Qu'est-ce que le type RdBtn ?
    2. Comment positionnes-tu les boutons (l'un sur l'autre) sur le Form ?
    Ce qui est sûr, c'est que si tu déposes 2 Button sur le Form et l'un sur l'autre, le code que je t'ai envoyé fonctionne.
    J'ai l'impression que tes Button1 et 2 n'existent pas ou bien qu'ils ne sont pas des boutons, ce suggère ta remarque (car un sender est toujours un objet et un objet a toujours un Name) :
    'j'ai mis "Images/lp_p.png" car c'est ce que me renvoie sender, il ne me renvoie pas le name mais le Content
    Ne peux-tu faire un ZIP de ton dossier de développement et me l'envoyer ? je tâcherais de mettre le doigt sur le problème ...

    Question subsidiaire : pourquoi programmer dans xaml ?
    N'utilises-tu pas le "Concepteur Windows Form" ?
    Je suppose qu'il y a là un aspect de la programmation VB que je n'ai jamais approché et j'aimerais comprendre ...

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par Phil Rob Voir le message
    Question subsidiaire : pourquoi programmer dans xaml ?
    N'utilises-tu pas le "Concepteur Windows Form" ?
    Je suppose qu'il y a là un aspect de la programmation VB que je n'ai jamais approché et j'aimerais comprendre ...
    C'est peut-être un devoir.

    Ou bien c'est une application "universelle" devant être portée sur Android ou sur Apple. Là, XAML est apparemment la meilleure solution. (Mais je ne m'y connais pas trop en "portabilité".)
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Points : 51
    Points
    51
    Par défaut
    Merci pour l'aide que vous m'apportez !

    Qu'est-ce que le type RdBtn ?
    C'est un type RadioButton.

    Comment positionnes-tu les boutons (l'un sur l'autre) sur le Form ?
    Ils sont positionnés l'un sur l'autre dans le sens où ils partagent la même grid row et même grid column.

    Ne peux-tu faire un ZIP de ton dossier de développement et me l'envoyer ? je tâcherais de mettre le doigt sur le problème ...
    Malheureusement j'aurai aimé pouvoir le faire mais je ne peux pas car ce travail est confidentiel (je travaille dans une entreprise qui travaille avec airbus entre autre).

    pourquoi programmer dans xaml ?
    Je suis arrivé en cours de projet, il est programmé en .vb mais également xaml.

    N'utilises-tu pas le "Concepteur Windows Form" ?
    Non WPF.

    C'est peut-être un devoir.

    Ou bien c'est une application "universelle" devant être portée sur Android ou sur Apple. Là, XAML est apparemment la meilleure solution. (Mais je ne m'y connais pas trop en "portabilité".)
    Effectivement c'est juste ce que tu dis.



    Sinon pour en revenir à ma première question je n'arrive toujours pas à comprendre pourquoi ça ne fonctionne pas, or dans d'autre form (ou view je ne sais pas le terme approprié) la même méthode fonctionne...

    Je vous remets mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	Public Sub CommandBinding_Button1()
    		If 	Button1.Visibility = Visibility.Visible Then
    			Button1.Visibility = Visibility.Collapsed
    			Button2.Visibility = Visibility.Visible
    		End If
    	End Sub
    	Public Sub CommandBinding_Button2()
    		If 	Button2.Visibility = Visibility.Visible Then
    			Button2.Visibility = Visibility.Collapsed
    			Button1.Visibility = Visibility.Visible
    		End If
    	End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			<my:RdBtn x:Name="Button1" Tag="Images/lp.png" Content="Images/lp_p.png" Grid.Column="2" Command="{x:Static my:TBar.Button1Command}" />
    			<my:RdBtn x:Name="Button2" Tag="Images/Csr.png" Content="Images/Csr_p.png" Grid.Column="2" Command="{x:Static my:TBar.Button2Command}" />
    Button1 et Button2 sont bien reconnus dans mon .vb mais en tant que "Friend" je ne sais pas ce que ça veut dire ?
    Du coup j'arrive bien à faire Button1.Visibility etc... sauf que j'obtiens ce message :
    "'Button1' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection."

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Dur ... dur ...
    J'en reviens à une idée déjà suggérée dans mon message précédent : tes Button1 et Button2 ne sont pas réellement instanciés.
    Peux-tu essayer en les déclarant avec NEW (pour autant que la classe qui sert de type "RdBtn" à tes boutons implémente le constructeur New) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private WithEvents Button1 As New RdBtn
    Private WithEvents Button2 As New RdBtn
    CONFIRMATION :
    Vois mon code ci-dessous où je crée les boutons "manuellement", sans le "Concepteur Windows Form", 2 choses ont indispensables pour que les boutons soient vsibles sur le Form et que mon code de l'autre jour fonctionne encore :
    1. Les boutons doivent être déclarés avec NEW;
    2. Il faut les ajouter à la collection des Controls du Form (Me.Controls.Add(Button3)).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Public Class FTest2Boutons
     
        Dim WithEvents Button3 As New Button
        Dim WithEvents Button2 As New Button
     
        Private Sub MesBoutons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click, Button3.Click
            If sender.name = "Button3" Then
                ' traitement sur click de Button1
                ' ....
                MessageBox.Show(sender.name)
                ' ....
                Button3.Hide()
                Button2.Show()
            Else
                ' traitement sur click de Button2
                ' ....
                MessageBox.Show(sender.name)
                ' ....
                Button2.Hide()
                Button3.Show()
            End If
        End Sub
     
        Private Sub FDebCred_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     
            Button3.Top = 50
            Button3.Left = 50
            Button3.Width = 120
            Button3.Height = 30
            Button3.Name = "Button3"
            Button3.Text = "Bouton3"
            Me.Controls.Add(Button3)
     
            Button2.Top = Button3.Top
            Button2.Left = Button3.Left
            Button2.Width = Button3.Width
            Button2.Height = Button3.Height
            Button2.Name = "Button2"
            Button2.Text = "Bouton2"
            Me.Controls.Add(Button2)
     
            Button2.Show()
     
        End Sub
    End Class
    J'espère que ceci te permettra de résoudre ton problème ...

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Points : 51
    Points
    51
    Par défaut
    Bonjour !

    Merci beaucoup pour ton aide, hélas ce n'est pas fonctionnel dans mon cas en revanche oui ton code fonctionne dans un projet annexe mais pas dans le mien... Pourquoi je ne sais pas...

    Sinon j'ai fait un mini projet annexe pour faire ce que je recherche, tout est fonctionnel j'obtiens bien ce que je veux, ça fonctionne voici ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <Window
    	x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    	xmlns:my="clr-namespace:test_buttons"
    	Title="test_buttons"
    	Height="320"
    	Width="380">
    	<Window.CommandBindings>
    		<CommandBinding  Command="{x:Static my:MainWindow.Button1Command}" Executed ="CommandBinding_Button1" />
    		<CommandBinding  Command="{x:Static my:MainWindow.Button2Command}" Executed ="CommandBinding_Button2" />
    	</Window.CommandBindings>	
    	<Grid>
    		<Button
    			x:Name="Button1"
    			Content="Bouton Bleu"
    			Grid.Column="0"
    			Grid.Row="0"
    			HorizontalAlignment="Stretch"
    			VerticalAlignment="Top"
    			Margin="35,69,34,0"
    			Width="221"
    			Height="112"
    			Background="Blue"
    			Command="{x:Static my:MainWindow.Button1Command}" />
    		<Button
    			x:Name="Button2"
    			Content="Bouton Rouge"
    			Grid.Column="0"
    			Grid.Row="0"
    			HorizontalAlignment="Stretch"
    			VerticalAlignment="Top"
    			Margin="35,69,34,0"
    			Width="221"
    			Height="112"
    			Background="Red"
    			Command="{x:Static my:MainWindow.Button2Command}" />
    	</Grid>
    </Window>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Public Partial Class MainWindow
    	Inherits Window
    	Public Shared ReadOnly Button1Command As New RoutedCommand()
    	Public Shared ReadOnly Button2Command As New RoutedCommand()
    	Public Sub New()
    		InitializeComponent()
    	End Sub
    	Public Sub CommandBinding_Button1()
    		If Button1.Visibility = Visibility.Visible Then
    			Button1.Visibility = Visibility.Hidden
    			Button2.Visibility = Visibility.Visible
    		End If		
    	End Sub
    	Public Sub CommandBinding_Button2()
    		If Button2.Visibility = Visibility.Visible Then
    			Button2.Visibility = Visibility.Hidden
    			Button1.Visibility = Visibility.Visible
    		End If
    	End Sub		
    End Class
    Mais lorsque j'utilise cette methode dans mon projet principal ça ne fonctionne pas...

    Dans mon projet principal les boutons sont de type RadioButton et dans mon mini projet annexe mes boutons sont de type Buton Quelle est la différence entre un RadioButton et un Button ? Le problème peux venir de là ? Button1 et Button2 sont considérés comme "Friend" dans mon code behind est ce un prob ? Quelqu'un a une idée ?

    Merci sincèrement en tt cas @Phil Rob pour ton aide et surtout pour le temps que tu m'as consacré !!

  9. #9
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    J'avais oublié de répondre à ta question à propos de Friend : c'est la portée par défaut de tous les composants qu'on dépose sur un Form avec le Concepteur Windows Form. Elle signifie "Public" dans le projet en cours et "Private" pour les autres projets. On accède aux composants en mentionnant le nom de leur conteneur suivi du nom du composant, par exemple : CeForm.CeBouton.Hide pour cacher le bouton CeBouton du formulaire CeForm. Nous pouvons aussi déclarer Friend des variables et des procédures.
    Il s'en suit que Friend n'est probablement pas la cause de tes soucis.

    Dans ton mini projet, les boutons sont de type Button au lieu de RadioButton et cela ne change rien : ils ont une propriété Name dans un cas comme dans l'autre et ils peuvent tous deux être montrés/cachés et subir d'autres modifications en cours d'exécution.

    Attention, dans ton mini projet tu instancies les bouton avec NEW, ce qui n'était le cas dans le code du début de cette discussion :
    Public Shared ReadOnly Button1Command As New RoutedCommand()
    Public Shared ReadOnly Button2Command As New RoutedCommand()
    Tu n'utilisais pas non plus Shared ReadOnly (ce qui ne me semble pas nécessaire), par contre tu utilisais WithEvents ce qui est nécessaire pour les procédures évènementielle.

    Bonne chance pour la suite ..

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 150
    Points : 51
    Points
    51
    Par défaut
    Bonsoir,

    Merci encore @Phil Rob pour ton aide !

    J'avais oublié de répondre à ta question à propos de Friend : c'est la portée par défaut de tous les composants qu'on dépose sur un Form avec le Concepteur Windows Form. Elle signifie "Public" dans le projet en cours et "Private" pour les autres projets. On accède aux composants en mentionnant le nom de leur conteneur suivi du nom du composant, par exemple : CeForm.CeBouton.Hide pour cacher le bouton CeBouton du formulaire CeForm. Nous pouvons aussi déclarer Friend des variables et des procédures.
    Il s'en suit que Friend n'est probablement pas la cause de tes soucis.
    Ok ça marche ! Nickel je comprends un peu mieux.

    Malheureusement j'ai laissé tombé pour le moment, car d'après mes collègues c'est beaucoup plus compliqué qu'il n'y parait.

    Je te remercie énormément du temps que tu m'as consacré !!!

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/04/2014, 10h45
  2. problème de compilation en pdf: le fichier est endommagé et ne peut être réparé
    Par yvan denis dans le forum Erreurs - Avertissements
    Réponses: 5
    Dernier message: 25/09/2012, 23h03
  3. CS0122: .. est inaccessible en raison de son niveau de protection
    Par laurent12345 dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 13/12/2011, 12h39
  4. Réponses: 3
    Dernier message: 02/04/2008, 10h32
  5. Réponses: 2
    Dernier message: 11/03/2007, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo