evagelos_21 Δημοσ. 8 Σεπτεμβρίου 2012 Δημοσ. 8 Σεπτεμβρίου 2012 Γεια σας παιδιά, έχω βάλει σε μια φόρμα το control menustrip εχω προσθέσει μενου και υπομενού. κάποια υπομενού θα τα βλέπει ο χρήστης άν έχει τα "δικαιώματα" βάζω αυτό: > if (admin == "1") { menuStrip1.Items["usrMenuItem"].Visible = true; } Το μενου "μαμα" το έχω ονομάσει "SetUpMenuItem" Οταν κάνω debug παιζει μια χαρα. στο exe του όμως μου πετάει μηνυμα λαθους object reference not set to an instance of an object Τι μποιρώ να κάνω;
georgemarios Δημοσ. 8 Σεπτεμβρίου 2012 Δημοσ. 8 Σεπτεμβρίου 2012 Θες να βαλεις όλο τον κώδικα εδω; (τουλαχιστον αυτον που αφορα τη δημιουργια του GUI)
evagelos_21 Δημοσ. 8 Σεπτεμβρίου 2012 Μέλος Δημοσ. 8 Σεπτεμβρίου 2012 Αν εννοείς αυτό: > this.setUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.usrMenuItem = new System.Windows.Forms.ToolStripMenuItem(); το έφτιαξε μονο του το VS
georgemarios Δημοσ. 8 Σεπτεμβρίου 2012 Δημοσ. 8 Σεπτεμβρίου 2012 Χμ απ' οσο ξέρω, το menuStrip1.Items περιέχει μονο τα μενου του strip (οχι τα υπο-μενου) Έτσι, το menuStrip1.Items["usrMenuItem"] πρεπει να επιστρέφει null, και φυσικα το menuStrip1.Items["usrMenuItem"].Visible = true; χτυπα φυσιολογικα το λάθος "object reference not set to an instance of an object" Δεν καταλαβαινω όμως πως γίνεται όπως λες να παιζει σε debug...... Επίσης, δε ξερω αν είναι εφικτό το να κανεις visible/unvisible ενα submenu με αυτο το τρόπο. Εναλλακτικά, μπορεις να το προσθετεις/αφαιρεις με ενα τρόπο παρόμοιο με τον παρακάτω. Το παραδειγμα εχει ενα menu strip, ενα menu (menu1ToolStripMenuItem) που έχει ενα sub-menu (submenu1ToolStripMenuItem). Επισης έχει ενα checkbox για να οριζεις αν είσαι admin ή όχι (προφανως χρειαζεται κατι πολυ πιο σοφιστικε από αυτο, αλλα οκ for the sake of simplicity....). Καθε φορα που κανεις check-uncheck το checkbox, το submenu εμφανιζεται και εξαφανιζεται. > public partial class Form1 : Form { private bool admin = true; private ToolStripMenuItem theSubMenu; public Form1() { InitializeComponent(); checkBox1.Checked = admin; var menu = (ToolStripMenuItem)menuStrip1.Items["menu1ToolStripMenuItem"]; theSubMenu = (ToolStripMenuItem) menu.DropDownItems["submenu1ToolStripMenuItem"]; // keep track of the submenu } private void checkBox1_CheckedChanged(object sender, EventArgs e) { admin = checkBox1.Checked; if(admin) { var count = menuStrip1.Items.Count; var menu = (ToolStripMenuItem)menuStrip1.Items["menu1ToolStripMenuItem"]; var submenu = menu.DropDownItems["submenu1ToolStripMenuItem"]; if (submenu == null) menu.DropDownItems.Add(theSubMenu); } else { var menu = (ToolStripMenuItem)menuStrip1.Items["menu1ToolStripMenuItem"]; var submenu = menu.DropDownItems["submenu1ToolStripMenuItem"]; if (submenu != null) menu.DropDownItems.Remove(submenu); } } private void submenu1ToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("Hello"); } }
evagelos_21 Δημοσ. 8 Σεπτεμβρίου 2012 Μέλος Δημοσ. 8 Σεπτεμβρίου 2012 ok, ευχαριστώ πολύ. τελικά το έκανα και εγώ έτσι: > if (admin == "1") { var my_menu = (ToolStripMenuItem)menuStrip1.Items["setUpToolStripMenuItem"]; var user_submenu = my_menu.DropDownItems["usrMenuItem"]; var backup_submenu = my_menu.DropDownItems["backUpToolStripMenuItem"]; if (user_submenu != null) my_menu.DropDownItems.Remove(user_submenu); if (backup_submenu != null) my_menu.DropDownItems.Remove(backup_submenu); } Αλλά το θέμα με τον debuger και εμένα με ψάρωσε
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα