Comment connaitre le type d'un control en VB .Net ?

Comment connaitre le type d'un control en VB .Net ? - C#/.NET managed - Programmation

Marsh Posté le 04-03-2004 à 12:30:15    

Salut à tous,
 
J'ai une question concernant les controles sous VB .Net.
Dans ma fenetre, j'ai différent type de control: des labels, des listes, etc.
 
Avec la boucle suivante:
 

Code :
  1. For I = 0 To Me.Controls.Count() - 1
  2. ..........
  3. Next I


 
... j'aimerai pouvoir 'passé' un à un les controles de ma fenêtre et si ce control est de type label, j'aimerai modifié le contenu de ce label. Mais je n'arrive pas à trouver comment savoir si tel ou tel control est de type label.
 
Merci pour votre aide.
Raoul

Reply

Marsh Posté le 04-03-2004 à 12:30:15   

Reply

Marsh Posté le 04-03-2004 à 13:08:17    

Avec l'opérateur TypeOf, regarde la doc du framework.

Reply

Marsh Posté le 04-03-2004 à 13:42:36    

Merci pour ton aide !
 
ça donne donc ceci:

Code :
  1. Dim I
  2. For I = 0 To Me.Controls.Count() - 1
  3.   If TypeOf Me.Controls(I) Is Label Then
  4.     Me.Controls(I).Text = "I"
  5.   End If
  6. Next I


 
J'ai 2 autres problèmes, si tu peux également m'éclairer:
- Comment rendre un label transparent ? Sous vb6 c'était simple mais la je trouve pas !
- J'ai créé un usercontrol ! Dans ce usercontrol, j'ai une image et un label. Ensuite, quand je vais dans ma fenêtre (form1), je rajoute 3 controls du type que je viens de créer. Mais dans les propriétés du control, il ne m'est pas possible de modifier le label et l'image  qui se trouve dans mon usercontrol ! Est-ce que je dois obligatoirement remplir ces champs via du code ? Càd:
 

Code :
  1. usercontrol1.label.text = "blablabla"
  2. usercontrol2.label.text = "salut"
  3. usercontrol3.label.text = "bonjour"


Message édité par Rarazor le 04-03-2004 à 13:44:53
Reply

Marsh Posté le 04-03-2004 à 14:03:42    

rarazor a écrit :


- Comment rendre un label transparent ? Sous vb6 c'était simple mais la je trouve pas !
Déjà, tu dois commencer par le rendre transparent via la propriété BackColor (label1.BackColor = System.Drawing.Color.Transparent). Mais ça ne le rendra transparent que vis à vis de son conteneur, qui est normalement une Form. Si tu veux le rendre transparent pour rendre visible une image sur la Form, le mieux est de placer cette image dans un Panel (via sa propriété BackgroundImage), puis de positionner le Label sur le Panel
- J'ai créé un usercontrol ! Dans ce usercontrol, j'ai une image et un label. Ensuite, quand je vais dans ma fenêtre (form1), je rajoute 3 controls du type que je viens de créer. Mais dans les propriétés du control, il ne m'est pas possible de modifier le label et l'image  qui se trouve dans mon usercontrol ! Est-ce que je dois obligatoirement remplir ces champs via du code ?
Il faut que tu crées des propriétés avec des accesseurs get/set dans ton usercontrol qui correspondront au label et à l'image. Pour les faire apparaitre dans le Designer, tu dois utiliser les attributs Description, Category et éventuellement DefaultValue. Voir la doc du framework pour plus d'infos.
Pour info, je suis en train de préparer un tuto sur la création de controles utilisateurs en C#, ça pourra certainement te servir. Jette un oeil au forum de temps en temps, ça devrait bientot être prêt.
 

Reply

Marsh Posté le 04-03-2004 à 14:30:04    

je ne comprend pas bien pour mon usercontrol...
As-tu un exemple concret sous la main ?
Comment faire ceci "Il faut que tu crées des propriétés avec des accesseurs get/set dans ton usercontrol" ?


Message édité par Rarazor le 04-03-2004 à 14:30:57
Reply

Marsh Posté le 04-03-2004 à 14:40:47    

rarazor a écrit :

je ne comprend pas bien pour mon usercontrol...
As-tu un exemple concret sous la main ?


J'en ai, mais en C#.
Par exemple, tu créés un controle qui trace une fractale, dont tu désires modifier le nombte d'itérations via le Designer.
- Tu créés une variable membre private. Cette variable ne sera pas accessible de l'extérieur :

Code :
  1. private int iterations = 512;


- Néanmoins, tu souhaites pouvoir la modifier à partir des clients qui utiliseront ton controle, et par le Designer. Tu dois donc la transformer en propriété :

Code :
  1. [Description("Nombre d'itérations." )]
  2. [Category("Paramètres" )]
  3. [DefaultValue(512)]
  4. public int Iterations
  5. {
  6.    get {return iterations;}
  7.    set {iterations = value;}
  8. }


L'attribut Description correspond à la description qui apparaitra dans la fenêtre de propriétés, l'attribut Category correspond à la catégorie (Appearance, Behavior, etc... Paramètres ici) et le DefaultValue correspond à la valeur par défaut de l'attribut, celle qui n'apparaitra pas en gras dans la fenêtre de propriétés.
Le get te permet de lire la propriété, et le set te permet d'y écrire.
En VB, l'équivalent serait :

Code :
  1. Private iterations As Int
  2. <Description("Nombre d'itérations." )>
  3. <Category("Paramètres" )>
  4. <DefaultValue(512)>
  5. Public Property Iterations() As Int
  6.    Get
  7.       Return iterations
  8.    End Get
  9.    Set
  10.       iterations = Value
  11.    End Set
  12. End Property


 
Attends le tuto que je suis en train de finir, ça te paraitra beaucoup plus clair.


Message édité par Harkonnen le 04-03-2004 à 14:41:38
Reply

Marsh Posté le 04-03-2004 à 14:43:23    

Merci encore pour ton aide !

Reply

Marsh Posté le 04-03-2004 à 14:48:57    

Il me dit que Iteration est déja déclaré :-( ... Bon je vais attendre ton tutoriel !

Reply

Marsh Posté le 04-03-2004 à 14:50:28    

rarazor a écrit :

Il me dit que Iteration est déja déclaré :-( ... Bon je vais attendre ton tutoriel !


Euh, oui, sous VB, les noms de variables ne sont pas case sensitive il me semble.
Essaie plutot :
 

Code :
  1. Public Property NbIter() As Int
  2.   Get
  3.      Return iterations
  4.   End Get
  5.   Set
  6.      iterations = Value
  7.   End Set
  8. End Property

Reply

Marsh Posté le 04-03-2004 à 14:57:59    

J'ai aussi des problèmes avec ça:
  <Description("Nombre d'itérations." )>
  <Category("Paramètres" )>
  <DefaultValue(512)>  
Il n'aime pas la syntaxe...

Reply

Marsh Posté le 04-03-2004 à 14:57:59   

Reply

Marsh Posté le 04-03-2004 à 14:59:49    

Regarde dans la doc du framework, les mots clés DescriptionAttribute, CategoryAttribute, DefaultValueAttribute, il y a des exemples d'utilisation en VB (je connais très peu VB.NET)

Reply

Marsh Posté le 04-03-2004 à 15:18:02    

En faite, il ne reconnaissait pas Description, Category et DefaultValue parce qu'il manquait "Imports System.ComponentModel" en haut de mon code...
Tout marche maintenant ! Merci ;-)
Le code exact pour VB .Net, c'est ceci:

Code :
  1. <Description("Nombre d'itérations." ), Category("Paramètres" ), DefaultValue(512)> _
  2.     Public Property NbIter() As Integer
  3.         Get
  4.             Return iterations
  5.         End Get
  6.         Set(ByVal Value As Integer)
  7.             iterations = Value
  8.         End Set
  9.     End Property

Reply

Marsh Posté le 07-01-2005 à 16:53:57    

Salut à tous,
 
<form id="frmTest" method="post" runat="server">
   <table width="100%" border="0">
      <tr>
         <td>  Repeater control with Paging functionality</td>
      </tr>
      <tr>
         <td>  <asp:label id="lblCurrentPage" runat="server"></asp:label></td>
      </tr>
      <tr>
         <td>  <asp:button id="cmdPrev" runat="server" text=" << " onclick="cmdPrev_Click"></asp:button>
             <asp:button id="cmdNext" runat="server" text=" >> " onclick="cmdNext_Click"></asp:button></td>
      </tr>
   </table>
   <table border="1">
      <asp:repeater id="repeaterItems" runat="server">
         <itemtemplate>
            <tr>
               <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemName" ) %></b></td>
               <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemDescription" ) %></b></td>
               <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemPrice" ) %></b></td>
               <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemInStock" ) %></b></td>
            </tr>
         </itemtemplate>
      </asp:repeater>
   </table>
         
   <p> </p>
   <asp:Button runat="server" Text="Cause a Postback" />
</form>
 
 
<script runat="server" language="C#">
 
      public int CurrentPage
      {
         get
         {
            // look for current page in ViewState
            object o = this.ViewState["_CurrentPage"];
            if (o == null)
               return 0;   // default to showing the first page
            else
               return (int) o;
         }
 
         set
         {
            this.ViewState["_CurrentPage"] = value;
         }
      }
 
      private void Page_Load(object sender, System.EventArgs e)
      {
         // Call the ItemsGet method to populate control,
         // passing in the sample data.
         ItemsGet();
      }
 
      private void ItemsGet()
      {
         // Read sample item info from XML document into a DataSet
         DataSet Items = new DataSet();
         Items.ReadXml(MapPath("Items.xml" ));
 
         // Populate the repeater control with the Items DataSet
         PagedDataSource objPds = new PagedDataSource();
         objPds.DataSource = Items.Tables[0].DefaultView;
         objPds.AllowPaging = true;
         objPds.PageSize = 3;
 
         objPds.CurrentPageIndex = CurrentPage;  
 
         lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of "  
            + objPds.PageCount.ToString();
 
         // Disable Prev or Next buttons if necessary
         cmdPrev.Enabled = !objPds.IsFirstPage;
         cmdNext.Enabled = !objPds.IsLastPage;
 
         repeaterItems.DataSource=objPds;
         repeaterItems.DataBind();
      }
 
      private void cmdPrev_Click(object sender, System.EventArgs e)
      {
         // Set viewstate variable to the previous page
         CurrentPage -= 1;
 
         // Reload control
         ItemsGet();
      }
 
      private void cmdNext_Click(object sender, System.EventArgs e)
      {
         // Set viewstate variable to the next page
         CurrentPage += 1;
 
         // Reload control
         ItemsGet();
      }
</script>

Reply

Marsh Posté le 07-01-2005 à 16:57:03    

Salut à tous,
 
Je veux traduire ce petit code de c# en vb.net. Merci de votre aide.
 
<form id="frmTest" method="post" runat="server">
   <table width="100%" border="0">
      <tr>
         <td>  Repeater control with Paging functionality</td>
      </tr>
      <tr>
         <td>  <asp:label id="lblCurrentPage" runat="server"></asp:label></td>
      </tr>
      <tr>
         <td>  <asp:button id="cmdPrev" runat="server" text=" << " onclick="cmdPrev_Click"></asp:button>
             <asp:button id="cmdNext" runat="server" text=" >> " onclick="cmdNext_Click"></asp:button></td>
      </tr>
   </table>
   <table border="1">
      <asp:repeater id="repeaterItems" runat="server">
         <itemtemplate>
            <tr>
               <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemName" ) %></b></td>
               <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemDescription" ) %></b></td>
               <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemPrice" ) %></b></td>
               <td>  <b><%# DataBinder.Eval(Container.DataItem, "ItemInStock" ) %></b></td>
            </tr>
         </itemtemplate>
      </asp:repeater>
   </table>
         
   <p> </p>
   <asp:Button runat="server" Text="Cause a Postback" />
</form>
 
 
<script runat="server" language="C#">
 
      public int CurrentPage
      {
         get
         {
            // look for current page in ViewState
            object o = this.ViewState["_CurrentPage"];
            if (o == null)
               return 0;   // default to showing the first page
            else
               return (int) o;
         }
 
         set
         {
            this.ViewState["_CurrentPage"] = value;
         }
      }
 
      private void Page_Load(object sender, System.EventArgs e)
      {
         // Call the ItemsGet method to populate control,
         // passing in the sample data.
         ItemsGet();
      }
 
      private void ItemsGet()
      {
         // Read sample item info from XML document into a DataSet
         DataSet Items = new DataSet();
         Items.ReadXml(MapPath("Items.xml" ));
 
         // Populate the repeater control with the Items DataSet
         PagedDataSource objPds = new PagedDataSource();
         objPds.DataSource = Items.Tables[0].DefaultView;
         objPds.AllowPaging = true;
         objPds.PageSize = 3;
 
         objPds.CurrentPageIndex = CurrentPage;  
 
         lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of "  
            + objPds.PageCount.ToString();
 
         // Disable Prev or Next buttons if necessary
         cmdPrev.Enabled = !objPds.IsFirstPage;
         cmdNext.Enabled = !objPds.IsLastPage;
 
         repeaterItems.DataSource=objPds;
         repeaterItems.DataBind();
      }
 
      private void cmdPrev_Click(object sender, System.EventArgs e)
      {
         // Set viewstate variable to the previous page
         CurrentPage -= 1;
 
         // Reload control
         ItemsGet();
      }
 
      private void cmdNext_Click(object sender, System.EventArgs e)
      {
         // Set viewstate variable to the next page
         CurrentPage += 1;
 
         // Reload control
         ItemsGet();
      }
</script>

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed