2011-01-04 4 views
0

Ich bin ein alter Zeit Benutzer der Array von Steuerelementen in VB zurück in den Tagen. Es ist jetzt weg, also suche ich nach einem Ersatz.Wie erstellt man ein Array von Benutzersteuerelementen/Indizierung von Benutzersteuerelementen in C#/Silverlight?

Ich habe ein Benutzersteuerelement in C# für Silverlight erstellt. Dieses Steuerelement macht eine Bool-Eigenschaft IsChecked verfügbar.

<ImageButton Name"imgbutton1" IsChecked="True"/> 
<ImageButton Name"imgbutton2" IsChecked="False"/> 
<ImageButton Name"imgbutton3" IsChecked="False"/> 

in einem Kind Fenster, besiedeln ich eine Reihe dieser Kontrollen und sie als Äquivalent von Radiobuttons verwenden, das heißt, wenn ich ein Klicken, andere, die auf false ein IsChecked = true hat, wird festgelegt werden, für die ich dachte, etwas zu tun:

List<ImageButton> imgButtons= new List<ImageButton>(); 
imgButtons.Add(imgbutton1); 
imgButtons.Add(imgbutton2); 
imgButtons.Add(imgbutton3); 

Dann alle ihre IsChecked zu löschen, aber die, die ich (deutete durch ein ‚Index‘ Variable) benötigen, ich etwas tun würde, wie:

foreach (ImageButton imgbutton in imgButtons) imgbutton.IsChecked = false; 
imgbuttons[index].IsChecked = true; 

Das Problem, das ich habe, ist, dass List<ImageButton> nicht kompiliert wird. Ich bin sehr flockig in Sammlungen und kann nicht herausfinden, was ich vermisse. Ich kann für Standardsteuerungen tun, aber erlaubt mir nicht, eine Benutzerkontrolle dort zu erhalten.

Danke!

PS: Ich habe daran gedacht, nur ein RadioButton-Steuerelement anpassen, aber keine Mischung und ich verwende dieses Bild Steuerelement für andere Arten von Steuerelementen. Wenn Sie jedoch denken, dass es einen besseren Weg gibt, dies zu implementieren, lassen Sie es mich wissen.

EDIT: Compiler sagt: „Der Typ oder Namespace-Name‚Image‘konnte nicht gefunden werden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?)‘

Antwort

3

Stellen Sie sicher, dass Sie einen Verweis auf Ihre "ImageButton" -Steuerung in Ihrem Code (im "using" -Teil).

, das zu tun automatisch können Sie Rechtsklick auf „Imagebutton“ in Ihrem Code einfach und klicken Sie auf „Resolve“, es wird die Referenz automatisch hinzufügen

+0

Danke, das habe ich vermisst. Da es sich im selben Namespace befindet, wusste ich nicht, dass ich einen Verweis auf das von mir erstellte Steuerelement hinzufügen musste. Ich nahm an, dass, seitdem ich es dem Kind-Fenster hinzufügte, es auch im Code hinten sichtbar war. Ich kann die Referenz in XAML sehen. – PaulG

2

Sie uns nicht sagen, was der Compiler-Fehler war wenn Sie die „Liste ist nicht kompiliert“.

Meine Vermutung ist, dass Sie den Namespace der Liste Sammlung in Ihrer Datei enthalten müssen.

using System.Collections.Generic; 
+0

Danke, bearbeitet meine msg. – PaulG

1

einfach an etwas anderes dachte, ich bin nicht sicher, warum Sie sind eine Liste <> Ihrer ImageButtons beibehalten, wenn sie im Display angezeigt werden (in diesem Unterfenster). Wenn sie alle im gleichen Container könnte Sie so etwas wie verwenden:

// here "grd" is your Grid container, it could be another type of container though 
foreach (ImageButton imgBtn in grd.Children.OfType<ImageButton>()) 
       imgBtn.IsChecked = false; 
+0

Ich behalte eine Liste für Indexierungszwecke. Alle diese Bildschaltflächen verhalten sich wie ein RadioButton und übergeben das ausgewählte Element an seinen Aufrufer. Wenn ich eine dieser Schaltflächen einstellen muss, rufe ich einfach ihren Index und nicht den Kontrollnamen auf. Macht Sinn? – PaulG

+0

Nun können Sie den tatsächlichen Index eines untergeordneten Objekts mit grd.Children.IndexOf (imgBtn) ;. So rufen Sie dasselbe Objekt mit dem Index ab: grd.Children [i]. – danbord

+0

Dies ist auch eine interessante Lösung. Nur dass ich eine Zuordnung zwischen dem Index des Aufrufers und dem grd.Children.IndexOf (imgButton) erstellen müsste. – PaulG

-1

Dies kann helfen.

Der Code für die Benutzersteuerung:

//usercontrol1.cs 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Drawing; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Drawing; 

namespace WindowsFormsApplication1 
{ 
    public partial class UserControl1 : UserControl 
    { 
     Color formcolor; 
     public UserControl1() 
     { 
      InitializeComponent(); 

     } 


     public void setvals(string a1,string a2,string a3,string a4) 
     { 
      t1.Text=a1; 
      t2.Text=a2; 
      t3.Text=a3; 
      t4.Text=a4; 
     } 

     public Color formColor 
     { 
      get 
      { 
       return formcolor; 
      } 
      set 
      { 
       formcolor = value; 
       this.BackColor = formcolor; 
      } 
     } 

    } 
} 





usercontrol.designer.cs 

namespace WindowsFormsApplication1 
{ 
    partial class UserControl1 
    { 
     /// <summary> 
     /// Required designer variable. 
     /// </summary> 
     private System.ComponentModel.IContainer components = null; 

     /// <summary> 
     /// Clean up any resources being used. 
     /// </summary> 
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
     protected override void Dispose(bool disposing) 
     { 
      if (disposing && (components != null)) 
      { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     #region Component Designer generated code 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     private void InitializeComponent() 
     { 
      this.t1 = new System.Windows.Forms.TextBox(); 
      this.t2 = new System.Windows.Forms.TextBox(); 
      this.t3 = new System.Windows.Forms.TextBox(); 
      this.t4 = new System.Windows.Forms.TextBox(); 
      this.SuspendLayout(); 
      // 
      // t1 
      // 
      this.t1.Location = new System.Drawing.Point(20, 16); 
      this.t1.Name = "t1"; 
      this.t1.Size = new System.Drawing.Size(100, 20); 
      this.t1.TabIndex = 0; 
      // 
      // t2 
      // 
      this.t2.Location = new System.Drawing.Point(20, 42); 
      this.t2.Name = "t2"; 
      this.t2.Size = new System.Drawing.Size(100, 20); 
      this.t2.TabIndex = 1; 
      // 
      // t3 
      // 
      this.t3.Location = new System.Drawing.Point(20, 68); 
      this.t3.Name = "t3"; 
      this.t3.Size = new System.Drawing.Size(100, 20); 
      this.t3.TabIndex = 2; 
      // 
      // t4 
      // 
      this.t4.Location = new System.Drawing.Point(20, 94); 
      this.t4.Name = "t4"; 
      this.t4.Size = new System.Drawing.Size(100, 20); 
      this.t4.TabIndex = 3; 
      // 
      // UserControl1 
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.Controls.Add(this.t4); 
      this.Controls.Add(this.t3); 
      this.Controls.Add(this.t2); 
      this.Controls.Add(this.t1); 
      this.Name = "UserControl1"; 
      this.Size = new System.Drawing.Size(278, 133); 
      this.ResumeLayout(false); 
      this.PerformLayout(); 

     } 

     #endregion 

     private System.Windows.Forms.TextBox t1; 
     private System.Windows.Forms.TextBox t2; 
     private System.Windows.Forms.TextBox t3; 
     private System.Windows.Forms.TextBox t4; 
    } 
} 

nun in Form völlig dynamisch ein Array von dieser Benutzersteuerung wie diese

private UserControl1[] userControl11=new WindowsFormsApplication1.UserControl1[3]; 

eine globale Variable erstellen

und die jetzt Array von Benutzersteuerung

können Sie es auf eine Schaltfläche schreiben

this.SuspendLayout(); 
      Random r=new Random(DateTime.Now.Millisecond); 
      for (int i = 0; i < 3; i++) 
      { 

       userControl11[i] = new UserControl1(); 
       this.userControl11[i].formColor = Color.FromArgb(r.Next(255),r.Next(255),r.Next(255)); 
       this.userControl11[i].Location = new System.Drawing.Point(133 , 133*(i+1)); 
       this.userControl11[i].Name = "userControl11"; 
       this.userControl11[i].Size = new System.Drawing.Size(278, 133); 
       this.userControl11[i].TabIndex = 0; 
       this.Controls.Add(this.userControl11[i]); 
      } 
      ;