OVH Cloud OVH Cloud

Input box

2 réponses
Avatar
Fabian Vilers
Bonjour à tous,

Ne trouvant pas de classe pret à l'empoi de type InputBox, j'ai rapidement
designé un input box maison. J'ai trouvé ceci dans le doc:

public void ShowMyDialogBox()
{
Form2 testDialog = new Form2();

// Show testDialog as a modal dialog and determine if DialogResult = OK.
if (testDialog.ShowDialog(this) == DialogResult.OK)
{
// Read the contents of testDialog's TextBox.
this.txtResult.Text = testDialog.TextBox1.Text;
}
else
{
this.txtResult.Text = "Cancelled";
}
testDialog.Dispose();
}

Et si je fait pareil, j'ai evidement une erreur à la compilation me disans
que TextBox1 est inaccessible à cause de son niveau de protection. Je
comprend ce principe mais ne comprend pas pourquoi la doc propose un tel
exemple.

Je contourne mon problème avec une méthode publique qui me retourne la
chaine de caractère stockée dans le textbox.

Comment aurais je pu faire autrement? Déclarer le textbox en public
directement? Je ne suis pas sur que ce soit le meilleure solution...

Donnez moi votre avis!
Fabian

2 réponses

Avatar
Remi Thomas - MVP
"Fabian Vilers" écrivit...
Bonjour à tous,

Ne trouvant pas de classe pret à l'empoi de type InputBox, j'ai rapidement
designé un input box maison. J'ai trouvé ceci dans le doc:

public void ShowMyDialogBox()
{
Form2 testDialog = new Form2();

// Show testDialog as a modal dialog and determine if DialogResult = OK.
if (testDialog.ShowDialog(this) == DialogResult.OK)
{
// Read the contents of testDialog's TextBox.
this.txtResult.Text = testDialog.TextBox1.Text;
}
else
{
this.txtResult.Text = "Cancelled";
}
testDialog.Dispose();
}

Et si je fait pareil, j'ai evidement une erreur à la compilation me disans
que TextBox1 est inaccessible à cause de son niveau de protection. Je
comprend ce principe mais ne comprend pas pourquoi la doc propose un tel
exemple.

Je contourne mon problème avec une méthode publique qui me retourne la
chaine de caractère stockée dans le textbox.

Comment aurais je pu faire autrement? Déclarer le textbox en public
directement? Je ne suis pas sur que ce soit le meilleure solution...

Donnez moi votre avis!
Fabian




Hello,
C'est vraiment suivant ton usage.
Une propriété publique qui accéde à ton TextBox privé n'a de sens que si tu
dois controler la cohérence du TextBox (numérique uniquement, majuscule,
...)
Donc un Textbox déclaré public me semble pas trop mal.

Rémi

--
Rémi Thomas - MVP Visual C++
Développeur Windows indépendant
http://www.xtware.com/cv
Avatar
Zoury
Salut Fabian ! :O)

Je contourne mon problème avec une méthode publique qui me retourne la
chaine de caractère stockée dans le textbox.



Personnellement, je déclare une propriété publique (Value ou quelque chose
dans le genre) qui retourne la valeur, mais le concept est le même..
Exposé le Textbox publiquement me semble être une mauvaise encapsulation et
laisse beaucoup trop de contrôle à l'utilisateur de la classe à mon goût.

Voici d'ailleurs un exemple d'abus de pouvoir possible :
'***
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

Dim frm As New Form2
DirectCast(frm.TextBox1.Parent, Form).Controls.Remove(frm.TextBox1)
frm.ShowDialog()

End Sub
'***

Tu me diras que l'exemple est extrêmement débile et qu'après tout,
l'utilisateur n'a qu'à pas faire ça, MAIS il peut le faire quand et à mon
avis ça ne devrait pas être possible. :O)
Encapsuler proprement ce qui ne doit pas être exposé n'est, amha, qu'une
bonne habitude à prendre.

--
Cordialement
Yanick
MVP pour Visual Basic