08. november 2004 - 22:38Der er
14 kommentarer og 1 løsning
ArrayList indeholder en Stuct, skal vises i en ComboBox
Hej venner,
Jeg har en ArrayList som indeholder Variable af følgende struct. public struct PrinterInfo { public string Printer; public string Path; public string Location; public string Comment; }
Der er nok ca. 4 elementer i mit Array, jeg gerne vil have det vist i en ComboBox, men jeg er ikke helt klar over hvordan jeg gør det.
Indtil vidre har jeg prøvet følgende: PrintersName.DataSource = o.Printers; PrintersName.DisplayMember = ((PrinterInfo)o.Printers).Printer; og PrintersName.DataSource = (PrinterInfo)o.Printers; PrintersName.DisplayMember = "Printer";
Men de fejler begge med "D:\Documents and Settings\Mikael Syska\My Documents\Visual Studio Projects\ComputerReg\main.cs(622): Cannot convert type 'System.Collections.ArrayList' to 'ComputerReg.PrinterInfo'"
Men er list på hærens mark nu, hvordan jeg angiver hvad DisplayMember og ValueMember skal være....eller i det hele taget bare får det til at virke.....
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Det har ikke nogen indflydelse om jeg har den med eller ej, der kommer stadig til at stå "ComputerReg.PrinterInfo" 3 gange, hvis der er 3 printere i min ArrayList, jeg skal vel på en eller anden måde fortælle at den skal caste o.Printers til min struct, og derefter sige at den skal bruge "Printer" som DisplayMember
Egentlig det jeg ville lidt udenom hvis det kunne lade sig gøre, for det er også den eneste anden måde jeg lige har set, men hvis det ikke kan lade sig gøre på den her måde kan jeg jo blive nød til at bøje mig.... :-(
using System; using System.Collections; using System.Drawing; using System.Windows.Forms;
public class X { private string a; private string b; public X(string a, string b) { this.a = a; this.b = b; } public string A { get { return a; } } public string B { get { return b; } } }
public class MainForm : Form { private ComboBox cbx; public MainForm() { try { InitializeComponent(); } catch(Exception ex) { MessageBox.Show(ex.Message); } } public static void Main(string[] args) { Application.Run(new MainForm()); } private void InitializeComponent() { cbx = new ComboBox(); SuspendLayout(); cbx.Location = new Point(50, 50); cbx.Size = new Size(100, 25); cbx.Name = "Dynamic Combo Box"; cbx.SelectedIndexChanged += new EventHandler(ChooseHandler); ArrayList list = new ArrayList(); list.Add(new X("Et", "Dette er et")); list.Add(new X("To", "Dette er to")); list.Add(new X("Tre", "Dette er tre")); cbx.DataSource = list; cbx.DisplayMember = "B"; cbx.ValueMember = "A"; ClientSize = new Size(200, 200); Name = "Main Form"; Text = "Main Form"; Controls.Add(cbx); ResumeLayout(false); } private void ChooseHandler(object o, EventArgs e) { MessageBox.Show("Du valgte " + ((ComboBox)o).SelectedValue); } }
Så jeg håber ikke at du brugte så meget tid på det, ville bare vide om det kunne alde sig gøre med struct's men det kunne det vist ikke, men du får da selvf point, hvis du smider et svar.....
For at du kan gøre dig fortjent til dine point ;-P, har jeg lige et lille ekstra spm.
Har snakket med en af mine venner som er startet som Datamatiker, og de har Java (som jeg også ved at du kan) han siger at man aldrig bør referere direkte. Altså siger han at jeg ikke bør har min ArrayList public i min class o, men lave en funktion inde i den, til at adde, fjerne, etc, og så lave den private så jeg ikke har direkte adgang til mine variabler, hvad er din mening om det, da jeg er ret sikker på du kender til problemet?
Smid et svar, så du kan få dine velfortjente point?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.