Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά,

έχω βάλει σε μια φόρμα το control menustrip

εχω προσθέσει μενου και υπομενού.

κάποια υπομενού θα τα βλέπει ο χρήστης άν έχει τα "δικαιώματα"

βάζω αυτό:

 

>
	 if (admin == "1")
	 {
		 menuStrip1.Items["usrMenuItem"].Visible = true;							
	 }

 

Το μενου "μαμα" το έχω ονομάσει "SetUpMenuItem"

Οταν κάνω debug παιζει μια χαρα.

στο exe του όμως μου πετάει μηνυμα λαθους

object reference not set to an instance of an object

 

Τι μποιρώ να κάνω;

Δημοσ.

Χμ

 

απ' οσο ξέρω, το 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");
    }
   }

Δημοσ.

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 και εμένα με ψάρωσε

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...