الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أعمل id لعناصر الmenustrip

بدأه raniahassan1 في 14 سبتمبر 2010 · 5 رد · 523 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سؤالي هو كيف أعمل id لعناصر الmenustrip في البرنامج وذلك لضمان السريه فالبرنامج يستخدمه اكثر من مستخدم لكل منهم صلاحيات خاصه به مثال توضيحي:- لدي قائمه منسدله في البرنامج بإسم البيانات الأساسيه وتحتوي العناصر التاليه الجهات السابقه, العلاوات, علاوات الموظفين اريد إعطاء id لكل عنصر من العناصر السابق ذكرها وذلك لإستخدامه في إظهار او إخفاء العناصر السابق ذكرها عند دخول مستخدم معين أي أنه عند دخول المستخدم 1 مثلا يتم إظهار العنصر العلاوات ويتم إخفاء العنصرين الباقيين .رجاءا الرد مع الشرح المفصل لأني مبتدءه وهذا البرنامج أولي خطواتي في الحياه العمليه عفوا علي الإطاله

#2

اخي العزيز السلام عليكم ..

حسب ما فهت من السؤال انه تريد ان تخصص بعض الامور لشخص وتخفي عنه الاخرى .. وكذلك بالنسبة للباقين ..

اذا كان كذلك ..

هذا نسميه في هذه النوعية من البرامج بانظمة الصلاحيات .. يعني انت تعطي الصلاحية ل(س) من الناس باستعراض الاسماء مثلا بينما العضو (ص) لا يستطيع ..

او كما تكون في بعض الاحيان .. لدينا 3 مستويات من العضوية مثلا المنتدى .. عضو عادي ومشرف واداري .. وتلاحظ ان العضو العادي لايستطيع ان يحذف موضوع او ان يغيير عنوان او ينقل موضوع ..

بينما المشرف يستطيع ذلك لانها من ضمن صلاحياته .. وبنفس الوقت لا يستطيع المشرف ان يلغي قسم باكمله وينشأ قسم جديد لانها ليست من صلاحياته بل من صلاحيات الاداري ..

هذه الامور كلها تتم من خلال قاعدة بيانات المستخدمين ..

تحتاج الى قاعدة بيانات تتضمن التالي :

ملاحظة : ركز بان ما قلته لك هو لايسمى id كما ذكرت حضرتك لان id هو رقم المعرف في القاعدة .. وليس كالهوية المستخدمة للدخول .. ركز على التالي

id .. رقم السجل في القاعدة ويكون رقم يتغير تلقائي اي عداد كلما تضيف مستخدم جديد للنظام فانه يقوم بالزيادة تلقائيا .. وهو كما يسمى بالاكسس برقم المعرف .

user .. العمود الخاص باسم المستخدم

pass .. العمود الخاص بكلمة السر

per .. مختصرة من الصلاحيات .. ممكن ان ترمز لها في الانظمة العادية الى ارقام خصوصا وان كثر لديك انواع الاعضاء حسب صلاحياتهم .. يعني مثلا العضو ذي الper 1 يكون المدير وله كافة الصلاحيات للمشاهدة بينما العضو ذي القيمة 2 هو النائب يحجب عنه خاصية ما .. والاخر له 3 يحذف منه خاصية ما اخرى .. وهكذا دواليك ...

وعندما يعمل البرنامج بعد ربط القاعدة .. يسجل المستخدم الدخول للبرنامج .. نقوم بعدها باختبار هذه القيمة وعليها نقوم بالمعالجة .. ماذا يظهر له وماذا يختفي ..

اذا كانت لديك القدرة لتحويل ما كتبته اعلاه الى كود برمجي فهو جيد جدا .. ومتوفر على شبكة الانترنت ..واذا لا .. ساحاول باذن الله رفع برنامج مثال لك كامل

ولكن اخبرني اولا هل هي الفكرة الملوبة ام كان فهمي خاطئا للموضوع ؟؟؟

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#3

شكرا أخي العزيز علي الإهتمام وسرعة الرد

نعم هذه هي الفكره المراد تنفيذها ولكني لازلت أريد أن أعرف كيف سأحدد أن العنصر (ص) مثلا في القائمه المنسدله سيظهر للمستخدم (س) وتختفي بقية عناصر القائمه المنسدله لذلك طلبت أن أعمل لعناصر القائمه المنسدله id

رجاءا التوضيح بالمثال الذي ذكرته

أشكرك لسعة صدرك

تم تعديل هذه المشاركة بواسطة raniahassan1 في 15 سبتمبر 2010 في 08:51

#4

وجدت مثال أعتقد أنه يفي بالمطلوب ولكني لا أفهم الكود رجاءا الشرح بالتفصيل إن أمكن ذلك وشكرا لحسن المتابعه

هذا هو الكود

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace MenuControlImage
{
	public class MenuImage : System.Windows.Forms.Form{
		private System.Windows.Forms.MainMenu mainMenu1;
		private System.Windows.Forms.MenuItem menuItem1;
		private System.Windows.Forms.MenuItem menuItem2;
		private System.Windows.Forms.MenuItem menuItem3;
		private System.Windows.Forms.MenuItem menuItem4;
		private System.Windows.Forms.Button button1;

		public System.ComponentModel.Container components = null;
		[DllImport("user32.dll")]
		public static extern IntPtr GetMenu(IntPtr hwnd);
		[DllImport("user32.dll")]
		public static extern IntPtr GetSubMenu(IntPtr hMenu,int nPos);
		[DllImport("user32.dll")]
		public static extern IntPtr GetMenuItemID(IntPtr hMenu, int nPos);
		[DllImport("user32.dll")]
		public static extern int SetMenuItemBitmaps(IntPtr hMenu, IntPtr nPosition, int wFlags, IntPtr hBitmapUnchecked, IntPtr hBitmapChecked);

		public MenuImage(){
			InitializeComponent();
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form 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.mainMenu1 = new System.Windows.Forms.MainMenu();
			this.menuItem1 = new System.Windows.Forms.MenuItem();
			this.menuItem2 = new System.Windows.Forms.MenuItem();
			this.menuItem4 = new System.Windows.Forms.MenuItem();
			this.menuItem3 = new System.Windows.Forms.MenuItem();
			this.button1 = new System.Windows.Forms.Button();
			this.SuspendLayout();
			// 
			// mainMenu1
			// 
			this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem1});
			// 
			// menuItem1
			// 
			this.menuItem1.Index = 0;
			this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem2,
																					  this.menuItem4,
																					  this.menuItem3});
			this.menuItem1.Text = "&File";
			// 
			// menuItem2
			// 
			this.menuItem2.Index = 0;
			this.menuItem2.Text = "&Open";
			// 
			// menuItem4
			// 
			this.menuItem4.Index = 1;
			this.menuItem4.Text = "-";
			// 
			// menuItem3
			// 
			this.menuItem3.Index = 2;
			this.menuItem3.Text = "E&xit";
			this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
			// 
			// button1
			// 
			this.button1.Location = new System.Drawing.Point(208, 56);
			this.button1.Name = "button1";
			this.button1.TabIndex = 0;
			this.button1.Text = "Load Image";
			this.button1.Click += new System.EventHandler(this.button1_Click);
			// 
			// MenuImage
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
			this.ClientSize = new System.Drawing.Size(292, 89);
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.button1});
			this.Menu = this.mainMenu1;
			this.Name = "MenuImage";
			this.Text = "MenuImage";
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main(){
			Application.Run(new MenuImage());
		}

		private void button1_Click(object sender, System.EventArgs e) {
			IntPtr intptrMenu,intptrSubMenu,intptrMenuItemID = IntPtr.Zero;
			int intRet = 0;

			intptrMenu = GetMenu(this.Handle);
			intptrSubMenu = GetSubMenu(intptrMenu, 0);

			intptrMenuItemID = GetMenuItemID(intptrSubMenu, 0);
			Bitmap myBitmap = new Bitmap(Environment.CurrentDirectory + "\\Open1.bmp");
			Color backColor = myBitmap.GetPixel(1, 1);
			myBitmap.MakeTransparent(backColor);
			IntPtr intp = myBitmap.GetHbitmap();
			intRet = SetMenuItemBitmaps(intptrMenu, intptrMenuItemID, 0 ,intp, intp);

			intptrMenuItemID = GetMenuItemID(intptrSubMenu, 2);
			myBitmap = new Bitmap(Environment.CurrentDirectory + "\\Exit1.bmp");
			backColor = myBitmap.GetPixel(1, 1);
			myBitmap.MakeTransparent(backColor);
			intp = myBitmap.GetHbitmap();
			intRet = SetMenuItemBitmaps(intptrMenu, intptrMenuItemID, 0 ,intp, intp);
		}

		private void menuItem3_Click(object sender, System.EventArgs e) {
			Application.Exit();
		}
	}
}

تم تعديل هذه المشاركة بواسطة raniahassan1 في 15 سبتمبر 2010 في 11:05

#5

راجه هذا الرابط اخي

http://dotnetfinder.wordpress.com/2010/09/14/aspsooperfishmenu/

اسف المشاركة في المكان الخطأ لانها خاصة ب asp

تم تعديل هذه المشاركة بواسطة EMNALI في 15 سبتمبر 2010 في 13:21

وَعَبْدٌ قَدْ يَنامُ عَلَى حَرِيرٍ ××× وَذُو نَسَبٍ مَفَارِشُهُ التُّرَابُ

#6

اخي العزيز .. الكود اللي حضرتك وضعته هل جربته ؟؟

لانه اكثر من 80% منه مجرد Design للفورم ..

ركز معي وساحول لك ردي السابق الى كود ...

اول شئ .. قم بتصميم جدول اسهل من السابق يحتوي على التالي :

username ونوعه نصي

password ونعه نصي ايضا ..

الكود التالي :: هو عبارة عن دالة .. login دالة لتسجيل الدخول الى النظام واقتبستها لك من مشروع لصفحة ASP.net ولكنها نفس الامر مع السي شارب لتطبيقات الوندوز ..

الدالة تأخذ معاملين وهي الخاصة باسم المستخدم وكلمة المرور ..

    protected void logins(string username, string password)
    {
        string s;
        OleDbConnection con = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0;" + @"Data Source= DATA.mdb");
        OleDbCommand cmd = new OleDbCommand("SELECT password from TABLE where login = @id;", con);
        OleDbParameter par = cmd.Parameters.Add("@id", OleDbType.VarChar);
        par.Value = username;
        DataSet ds = new DataSet("details");
        OleDbDataAdapter details = new OleDbDataAdapter();
        details.SelectCommand = cmd;
        details.Fill(ds);
        string dbpassword = null;
        string givenpassword = TextBox2.Text;
        try
        {
            DataRow dr = ds.Tables[0].Rows[0];
            cn.Open();
            dbpassword = (string)dr["password"];
            if (dbpassword == givenpassword)
            {
                Session["username"] = TextBox1.Text;
                s = Convert.ToString(Session["username"]);
                Session["admin"] = s;
                if (s == "administrator")

 {
                    'في حالة ان الكلمة المدخلة  هي كلمة المدير ستظهر له ميزه معينة وهنا قم باظهار واخفاء ماتريد .. 
                }
                else
                {
                    في حالة انه لم يدخل اسم المستخدم المدير اظهر له مميزات اخرى .. او اخفي منه ماتريد اخفاءه 
                }
            }
            else
            {
                Label1.Text = "Invalid password";
            }
        }
        catch
        {
            con.Close();
            Label1.Text = "Invalid login and password";
            TextBox1.Text = "";
            TextBox2.Text = "";
            TextBox1.Focus();
        }


    }

في الكود اعلاه تم الاعتماد على اسم المستخدم ولو كان Admin فانه يظهر له شئ انت حدده واي شئ اخر تظهر امور اخرى ..

انت من الممكن ان تعتمد على نفس الهيكلية وهي بسيطه .. في تحديد من تريد ان يظهر له بعض الخصائص ومن تريد ان تختفي له البعض .. ولكن هذه الالية لاتخدمك في حال كان لك الكثير من المستخدمين للمشروع وايضا انك لا تستطيع تحديد المستخدمين برمجيا .. لان هذه الحالة تخدم فقط في حالة لديك مدير واقل منه .. لتقسمهم لقسمين ..

ولكن لو كان لك اكثر من ذلك فالافضل هو نفس الشئ ولكن ان تضع عمود اخر في الجدول كما اسلفت لك وهو عمود خاص بالاختبار حسب مستوى معين .. وبنفس الالية

وتختبر هل ان المدخل له الرقم 1 او 2 او 3 ولكل مستواه في الظهور ..

اعتقد الان اصبحت الامور اوضح من السابق بكثير ..

تحياتي العطرة ..

تم تعديل هذه المشاركة بواسطة سنان محمد صالح في 17 سبتمبر 2010 في 10:57

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

مواضيع مشابهة