16. januar 2007 - 12:15Der er
31 kommentarer og 1 løsning
Delegates på tværs af usercontrols
Hej!
Er der nogen mulighed for at benytte Delegates på tværs af usercontrols?
Hvis ja, hvor skal jeg evt. gøre?
Hvis ikke det kan lade sig gøre, kan man så via reference til den enkelte usercontrol sender events til dem?
Jeg har nemlig et hovedprojekt som er almindeligt C# projekt, samtidig har jeg x antal usercontrols som jeg loader ind i dette hovedprogram. Jeg ønsker fra nogle af mine usercontrols af bede hovedprogrammet om at vise en anden usercontrol end den aktuelle.
Nogen som har en ide til hvordan det kan lade sig gøre?
Mit hovedprogram ligger i et namespace og mine usercontrols ligger i forskellige namespaces.
Jeg havde planer om at inkludere mit hovedprogram i hver usercontrol og på den måde have adgang til dens namespace, men det kan jeg ikke, da den så vil gå i loop!
Men i min usercontrol ønsker jeg at kalde en funktion i mit hovedprogram, kan jeg dette
ah nu tror jeg at jeg er med: Jeg har en windows form som indeholder denne kode: public delegate void FindSubjectMethod(int itemid);
/// <summary> /// Used for setting the active index in the binding source /// </summary> /// <param name="itemid">the</param> public void FindSubject(int itemid) { if (InvokeRequired) { FindSubjectMethod method = new FindSubjectMethod(FindSubject); Invoke(method, new object[] { itemid }); return; } label.text = itemid.ToString(); }
Men hvordan får du så tilføjet en reference i din usercontrol som tillader et objekt af hovedformen, når hovedformen allerede har en reference til din usercontrol
eller skal det bare være af type object i usercontrollen?
Min konstruktør til userkontrollen ser sådan ud: private HelpDeskForm MainForm; public HelpDeskApplicationContext(HelpDeskForm mainForm, Splash sp) { this.MainForm = mainForm; //load data først sp.Show(); sp.Disposed += new EventHandler(sp_Disposed); //ListOfSubjects.LoadSubjects();
}
når jeg laver en instans af usercontrollen sender jeg hoved formen med på denne måde: HelpDeskApplicationContext applicationContext = new HelpDeskApplicationContext(this, new Splash(this));
Jeg får ikke love til den der private erklæring: får følgende debug fejl Error 2 The type or namespace name 'Console_name' could not be found (are you missing a using directive or an assembly reference?) D:\Visual Studio 2005\Projects\_Console\ConsoleView\ConsoleView.cs 17 17 ConsoleView
Jeg kan ikke tilføje denne reference da jeg jo har tilføjet min Usercontrol som reference i mit hovedprogram?
Min usercontrol ------------------------------------------------------ using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms;
namespace ConsoleView { public partial class Console_view : UserControl { private string _productionreport = ""; private bool _pluconfirmed = false; private int _type = 0;
Mit hovedprogram ------------------------------------------------------ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading;
namespace Console_name { public partial class Console_main : Form { private SystemHandle.TextElement[] element = new SystemHandle.TextElement[6]; private System.Windows.Forms.Timer t_clock = new System.Windows.Forms.Timer();
public Console_main() { InitializeComponent(); this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true); this.BackColor = Color.FromArgb(162, 162, 162); this.header.Show(); this.uc_console.ProductionReportName = "Productdisplay"; element[0] = new SystemHandle.TextElement("Lineconsole", "uc_console"); element[1] = new SystemHandle.TextElement("Item Database", "uc_webinterface"); element[2] = new SystemHandle.TextElement("Lineviewer", "uc_lineviewer"); element[3] = new SystemHandle.TextElement("Analyser", "uc_productionreport"); element[4] = new SystemHandle.TextElement("Productdisplay", "uc_product_display"); element[5] = new SystemHandle.TextElement("Linestatus", "uc_linestatus"); this.header_time.Text = DateTime.Now.ToShortDateString() + "-" + DateTime.Now.ToLongTimeString(); // InitializePanels(); InitializeTimer();
// Opretter objekt af usercontrol this.uc_console = new ConsoleView.Console_view(); }
------------------------------------------------------------------------- I mit hovedprogram har jeg ligeledes en reference til ConsoleView, i References
Skriv hvis der er flere ting du vil have jeg skal poste
Error 1 The type or namespace name 'Console_name' could not be found (are you missing a using directive or an assembly reference?) D:\Visual Studio 2005\Projects\_Console\ConsoleView\ConsoleView.cs 17 29 ConsoleView
namespace Console_name { public partial class Console_main : Form { private SystemHandle.TextElement[] element = new SystemHandle.TextElement[6]; private System.Windows.Forms.Timer t_clock = new System.Windows.Forms.Timer();
public Console_main() { this.uc_console = new ConsoleView.Console_view(); uc_console.OnEvent+= New EventHandler(uc_console_OnEvent)
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.