<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, 10 Sept 2021 at 22:25, Marc Guillaume <<a href="mailto:alarch@alarch.pw">alarch@alarch.pw</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Le Fri, 10 Sep 2021 23:17:30 +0200,<br>
Tobias Boege via User <<a href="mailto:user@lists.gambas-basic.org" target="_blank">user@lists.gambas-basic.org</a>> a écrit :<br>
<br>
> On Fri, 10 Sep 2021, Marc Guillaume wrote:<br>
> > Hello,<br>
> > I am retrieving data from a mysql database in a gridview. I edit a<br>
> > line with a popup menu in a form which contains the data of the<br>
> > database. The data in the form are in textboxes associated with a<br>
> > label and all these couples label textbox are in a panel. To be<br>
> > able to detect if the user has modified a field I put the database<br>
> > value in textbox1.text and textbox1.tag and so on. When closing the<br>
> > form I want to check if the user has modified any fields. So I<br>
> > browse the children of the panel and if the child is a textbox I<br>
> > want to compare the text and tag values. If they are different then<br>
> > I will know that there has been a modification and I can alert the<br>
> > user. So I put this code in the closure processing. <br>
> > <br>
> > Public Sub btnCancel_Click()<br>
> > <br>
> >   Dim iResponse As Integer<br>
<span class="gmail_default" style="font-size:small"></span>> >   Dim oChild As Control<br>
> >   Dim bModif As Boolean = False<br>
> > <br>
> >   For Each oChild In panIel1.Children <br>
> >     If oChild Is TextBox<br>
> >       If oChild.text <> oChild.Tag<br>
> >         bModif = True<br>
> >       Endif<br>
> >     Endif<br>
> >   Next<br>
> >   If bModif<br>
> >     iResponse = Message.Warning( etc.<br>
> > <br>
> > But while in the for each loop I get the value of the tag without<br>
> > any problem I have an error for the text property : <br>
> > <br>
> > "Unknown text symbol in the control class"<br>
> >   <br>
> <br>
> In this case, it matters for property lookup which type your variable<br>
> is declared as. You can look up the Tag property of oChild because it<br>
> exists in the Control class, but Text does not. Even if oChild is<br>
> really a TextBox, you declared it as merely a Control.<br>
> <br>
> You can either force a dynamic symbol lookup by using<br>
> <br>
>   If oChild Is TextBox Then<br>
>     If Object.GetProperty(oChild, "Text") <> oChild.Tag Then<br>
>       ...<br>
> <br>
> or by coercing oChild into a TextBox-typed variable:<br>
> <br>
>   If oChild Is TextBox Then<br>
>     Dim tbChild As TextBox = oChild<br>
>     If tbChild.Text <> tbChild.Tag Then<br>
>       ...<br>
> <br>
> The coercion will fail at runtime if the real class of oChild is<br>
> incompatible with (i.e. does not derive from) TextBox, but you guard<br>
> for that with the enclosing If ... Is TextBox.<br>
> <br>
> Best,<br>
> Tobias<br>
> <br>
<br>
Thank you very much!<br>
<br>
I thought there was a problem with classes and class inheritance but I didn't know how to access these textbox properties from the control class.<br></blockquote><div><br></div><div style="font-size:small" class="gmail_default">Another good trick if the type of object may vary is to use Object class not Control.</div><div style="font-size:small" class="gmail_default">Ie...</div><div style="font-size:small" class="gmail_default"><span class="gmail_default" style="font-size:small"></span><b>  Dim oChild As Object</b><br>
</div><div style="font-size:small" class="gmail_default">Control class will only let you use properties that exist in Control but Object class will let you access any existing property.</div><div style="font-size:small" class="gmail_default">The downside is that Auto-complete will not pop a list relevant to your control type but if the properties exist they will get accessed.</div><div style="font-size:small" class="gmail_default"><br></div><div style="font-size:small" class="gmail_default">BruceS</div><div style="font-size:small" class="gmail_default"><br></div></div></div>