I VB 6 så skrev jag så här för att rensa ett gäng med textfält Jag tror att jag hittade sambadet i Windows Form Designer generated code. Du kan annars försöka detta: Njaäe, det funkar bara för kontroller som direkt ligger på Me (this) containern, t.ex direkt på en form. Det finns kontroller som kan innehålla andra kontroller, t.ex en panel... för att gå igenom alla kontroller som finns direkt eller indirekt på en form/control måste du använda ett rekursivt anrop.. hojta till om du behöver kod för detta.. Jag kommer säkert att behöva det någon gång så jag kommer med största sannolikhet att hojta till. :) Eller så kollar du helt enkelt kontrollkollektionen med hjälp av <b>TypeOf</b>, <b>Is</b> och <b>Tag</b>-egenskapen.Mr.controls
Me.Controls(myTextFieldArray(intArrayNumber) & intMyNumber).Text = ""
Nu vill jag åstakomma samma sak i vb.net och då blev det genast lite problem.
Nu vill den bara ha en integer i controls typ
Me.Controls(intMyInt).Enabled = False och det funkar väl bra så länge man vet vilket index, i det här fallet, textfältet har.
Nu har jag ett antal textfält som jag då skulle vilja veta indexet på eller ännu hellre kunna sätta indexet på, hur gör man?
Om det inte går hur tusan gör man då?
MvhMonolog
Där kan man nog i alla fall räkna till sig inom vilket index textfälten befinner sig i. :)Sv: Monolog
C# ->
foreach (Control ctrl in this.Controls)
{
if (ctrl.GetType().ToString()== "System.Windows.Forms.TextBox")
{
ctrl.Text = "";
}
}
VB.Net ->
<code>
Dim ctrl As Control
For Each ctrl in Me.Controls
If ctrl.GetType.ToString = "System.Windows.Forms.TextBox" Then
ctrl.Text = String.Empty
End If
Next
</code>
Hdh
Sv: Monolog
//AndreasSv: Monolog
Sv: Monolog
private void Form1_Load(object sender, System.EventArgs e)
{
ArrayList controls=new ArrayList ();
FillControls(controls,this);
foreach (TextBox textbox in controls)
textbox.Text ="hej";
}
private void FillControls(ArrayList controls,Control current)
{
if (current is System.Windows.Forms.TextBox)
controls.Add (current);
foreach (Control child in current.Controls)
FillControls(controls,child);
}
//Roger
Sv: Monolog
Att använda sig av textrepresentationen för att bestämma typen på en kontroll är ganska intolerant för fel och dessutom inte typsäkert. Därför föredrar jag att använda <b>Is</b> och <b>TypeOf</b>.
Sätt samma sträng i <b>Tag</b>-egenskapen för de kontroller som hör samman, i exemplet nedan så har de fått strängen "controlCollection1". Sen itererar du igenom kontrollkollektionen.
<code>
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeOf (ctrl) Is TextBox And ctrl.Tag = "controlCollection1" Then
ctrl.Text = string.Empty
End If
Next
</code>
Du skulle också kunna grupper textboxarna tillsammans i en <b>GroupBox-</b> eller <b>Panelkontroll</b> och sedan istället nyttja deras kontrollkollektion för att iterera igenom alla textboxarna.
Jag har laddat upp ett exempel på båda två här: Programarkivet:Control collection i .NET