For me it's a bit hard to answer your question, since I have only theoretical knowledge of reflection. Let's hope either Rick or Paul or Bonnie will jump in and straight this out for you.
>Naomi,
>
>Thanks. This got me closer but I'm still missing something, probably because I just barely understand what I'm doing. That thread points to Rick Strahl's blog which offers the following code:
>
>
>public const BindingFlags MemberAccess =
>
> BindingFlags.Public | BindingFlags.NonPublic |
>
> BindingFlags.Static | BindingFlags.Instance | BindingFlags.IgnoreCase ;
>
>
>
>String MyTextBoxName = "txtCompany";
>
>String ValueToSet = "NewValue";
>
>
>
>// *** Get a reference to the TextBox
>
>TextBox MyTextBox = (TextBox) this.GetType().GetField(MyTextBox,BindingFlags).GetValue(this,MyTextBoxName);
>
>
>
>MyTextBox.GetType().GetProperty("Text",BindingFlags).SetValue(MyTextBox,ValueToSet,null);
>
>
>
>
>
>I have checked several times and think I typed in what he suggested accurately. Here's what I tried:
>
>
> public const BindingFlags MemberAccess = BindingFlags.Public | BindingFlags.NonPublic |
> BindingFlags.Static | BindingFlags.Instance | BindingFlags.IgnoreCase;
>
> /// <summary>
> /// Constructor
> /// </summary>
> public PatientMaint(int currentPatientId)
> {
> . . .
> oCoverageType = (CoverageType)this.RegisterBizObj(new CoverageType());
> . . .
> InitializeComponent();
> oCoverageType.GetAllData();
>
>
> int CvgTypeCount = oCoverageType.GetRowCount();
> //ArrayList aCvgType = new ArrayList(CvgTypeCount);
> for (int i = 0; i < CvgTypeCount; i = i + 1)
> {
> oCoverageType.DataRow = oCoverageType.DataSet.Tables[0].Rows[i];
> string CvgTypeTextBoxName = "txtCoverage" + i.ToString();
> TextBox CvgTypeTextBox = (TextBox)this.GetType().GetField(CvgTypeTextBox, BindingFlags).GetValue(this, CvgTypeTextBoxName);
> CvgTypeTextBox.GetType().GetProperty("Text", MemberAccess).SetValue(CvgTypeTextBox, oCoverageType.Entity.CoverageType, null);
> //aCvgType.Add(oCoverageType.Entity.CoverageType);
> }
>
>
>
>When I try to run this, I get a compile error: 'System.Reflection.BindingFlags' is a 'type' but is used like a 'variable'. Then I tried changing BindingFlags to MemberAccess, thinking that I needed to reference the variable name. When I do that I get the following error: Error 1 The best overloaded method match for 'System.Type.GetField(string, System.Reflection.BindingFlags)' -- Error 2 Argument '1': cannot convert from 'System.Windows.Forms.TextBox' to 'string'
>
>Any help is greatly appreciated.
>
>
>
>
>>See if this thread can help
>>
Re: Converting a string to an object property Thread #
1323589>>
>>>I have a Windows form on which I need to display a series of text boxes, each displaying the value of a field from a different row of the dataset. In FoxPro, one way I have done is by using a macro to get an indirect reference to the text box name.
>>>
>>>For example:
>>>
>>>
>>>* Using the indirect reference
>>>lcBaseName = "TypeDesc"
>>>lcRowCount = 1
>>>use myTable
>>>scan
>>> lcCurrentTextBox = lcBaseName + str(lnRowCount)
>>> &lcCurrentTextBox.Value = myTable.TypeDesc
>>>endfor
>>>
>>>
>>>
>>>In .NET, I tried creating a variable with a type of Control and building it's name property using a counter but I couldn't get that to work.
>>>
>>>The other way I have done this in FoxPro is to set the ControlSource to an element of an array built from the table. In .NET, I tried creating an arraylist from the table and assigning an element to the BindingSource and the Text properties (not at the same time) with no success.
>>>
>>>Does anyone have any suggestions? I really don't want to hard code this if I can avoid it.
>>>
>>>Thanks in advance.
If it's not broken, fix it until it is.
My Blog