نمايش فرمهاي برنامه با داشتن اسم آنها
با سلام به همه دوستان
من يك برنامه (soulotion) با چندين پروژه درون آن دارم. اسم تمامي فرمها در ديتابيس ذخيره شده است. وقتي كاربر
لاگين مي كند با توجه به دسترسي هاي تعريف شده براي آن، به ازاي هر فرمي كه دسترسي داشته باشد يك دكمه در فرم اصلي برنامه براي اون ايجاد مي شود. حالا مي خواهم كاربر با كليك روي اين دكمه ها فرمهاي مربوط به هركدام را ( كه اسم آن را بصورت استرينگ يا رشته داريم) اجرا كند.
در اين مورد خيلي جستجو كردم فقط يك راه پيشنهاد شده بود و آن استفاده از Reflection ها بود. ولي از آن چيزي متوجه نشدم.
لطفا راهنمايي فرماييد.
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
به نظرم راه سختی را برای اعمال سطح دسترسی انتخاب کردید.(ذخیره نام فرم های مجاز برای هر شخص اشتباست)
به جاش اینکه شخص میتونه به اون فرم دسترسی داشته باشه یا نه رو باید ذخیره کرد:
راه اول: کافیست در دیتابیس در جدولی که برای سطوح دسترسی درنظر گرفتید به ازای هر فرم و منو و.... که میخواهید محدودیت قائل بشید یک فیلد از نوع boolean در نظر بگیرید و سطح دسترسی را برای هر کاربر تعیین کنید. در قسمت طراحی فرم هم تمام دکمه ها و منوها را طراحی کنید و فقط در هنگام لاگین اگر کاربر مجاز بود اونوقت مقادیر سطح دسترسی را از دیتابیس خوانده و اعمال کنید(باتن ها و منوهایی که نباید دسترسی داشته باشه را مخفی(یا disable) کنید).
راه دوم: یا اینکه اگر سطوح دسترسی مشخص هست (مثلا مدیر دسترسی کامل ، اپراتور دسترسی محدودتر و ...) کافیه یک فیلد در نظر بگیرید و نوع دسترسی رو برای کاربر ذخیره کنید و موقع لاگین برحسب سطح دسترسی(اینکه چه شخصی لاگین میکنه) برای کنترل ها تصمیم بگیرید.
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
ممنون از پاسختون
تعداد فرم هاي برنامه خيلي زياد هست. كاربر وقتي لاگين ميكنه بر اساس نوع سيستمي كه انتخاب مي كنه زير سيستم هايي كه به آن دسترسي دارد مشخص مي شود. براي اينكار هم از متغير هايي از نوع Bool استفاده كردم. امكان طراحي يك مدل از قبل طراحي شده وجود ندارد بلكه بايد بصورت دايناميك دكمه هاي مورد نظر ساخته شود.
براي مثال كاربر سيستم انبار را انتخاب مي كند و بايد براي او زيرسيستم هاي ارسال،انبارش و... كه هركدام داراي فرمهاي زيادي است آورده شود.
قبلا اسم تمامي فرمها در ديتابيس ذخيره شده است. مشكل من فقط نمايش اين فرمها با فرض دانستن اسم آنها در برنامه است.
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
من یه راه حل پیشنهاد میکنم
خودم هم از هیمن راه حل همیشه استفاده میکنم
توی جدول یوزر ها یه فیلد تعرفی کن از نوع رشته ای
حالا به ازای هر سطح دسترسی 0 یا 1 رو بذار
مثلا برای فرم اشخاص:0111
که به ترتیب اضافه و ویرایش و حذف و نمایش و به همین ترتیب بقیه رو هم کنارش میذاری
که خودش میشه یه رشته بزرگ مثل 1010111100001111000 حالا کفایه با یه تابع این رشته رو به یه آرایه کاراکتری یا بولین تبدیل کنی و هرکدوم از این صفر و یک ها رو به دکمه یا منو یا هرجای دیگه ای اختصاص بدی
فقط برای هر کدوم یه کامنت بذار که بدها یادت بمونه
مزیت این کار اینه که شما هر تعداد دیگه هم بخوای اضافه کنی کافیه فقط به 0و1 ها اضاف کنی
و کاری به ساختار جدول نداری
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
نقل قول:
نوشته شده توسط
a-erfani
ممنون از پاسختون
تعداد فرم هاي برنامه خيلي زياد هست. كاربر وقتي لاگين ميكنه بر اساس نوع سيستمي كه انتخاب مي كنه زير سيستم هايي كه به آن دسترسي دارد مشخص مي شود. براي اينكار هم از متغير هايي از نوع Bool استفاده كردم. امكان طراحي يك مدل از قبل طراحي شده وجود ندارد بلكه بايد بصورت دايناميك دكمه هاي مورد نظر ساخته شود.
براي مثال كاربر سيستم انبار را انتخاب مي كند و بايد براي او زيرسيستم هاي ارسال،انبارش و... كه هركدام داراي فرمهاي زيادي است آورده شود.
قبلا اسم تمامي فرمها در ديتابيس ذخيره شده است. مشكل من فقط نمايش اين فرمها با فرض دانستن اسم آنها در برنامه است.
خوب بالاخره هر زیر سیستم یکسری فرم و باتن و منو و .... داره دیگه که باید نمایش بدید. اول کل باتن ها و منو ها و ... را طراحی کنید و بعد در قسمت لاگین برحسب اینکه چه زیر سیستمی انتخاب میشه کنترلهای غیرلازم را hide کنید(یا اصلا dispose کنید). در هر باتن هم با کد از قبل نوشته شده ، یک فرم را نمایش میدید. توی این راه حل ایجاد محدودیت با hide و show کردن باتن ها و منوها کاملا برطرف میشه و نیازی به ایجاد داینامیک نیست.
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
نقل قول:
نوشته شده توسط
a-erfani
با سلام به همه دوستان
من يك برنامه (soulotion) با چندين پروژه درون آن دارم. اسم تمامي فرمها در ديتابيس ذخيره شده است. وقتي كاربر
لاگين مي كند با توجه به دسترسي هاي تعريف شده براي آن، به ازاي هر فرمي كه دسترسي داشته باشد يك دكمه در فرم اصلي برنامه براي اون ايجاد مي شود. حالا مي خواهم كاربر با كليك روي اين دكمه ها فرمهاي مربوط به هركدام را ( كه اسم آن را بصورت استرينگ يا رشته داريم) اجرا كند.
در اين مورد خيلي جستجو كردم فقط يك راه پيشنهاد شده بود و آن استفاده از Reflection ها بود. ولي از آن چيزي متوجه نشدم.
لطفا راهنمايي فرماييد.
سلام مجدد
كسي از دوستان در زمينه Reflection مي تواند كمي كند؟
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
نقل قول:
كسي از دوستان در زمينه Reflection مي تواند كمي كند؟
اگه همه فرمها توی یک اسمبلی باشه
Assembly assem = Assembly.GetEntryAssembly();
object forms = assem.CreateInstance("WindowsFormsApplication1.For m1");
if (forms != null)
((Form)forms).Show();
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
نقل قول:
نوشته شده توسط
Reza_Yarahmadi
اگه همه فرمها توی یک اسمبلی باشه
Assembly assem = Assembly.GetEntryAssembly();
object forms = assem.CreateInstance("WindowsFormsApplication1.For m1");
if (forms != null)
((Form)forms).Show();
خيلي ممنون از پاسختون
ولي من در برنامه ام چندين پروژه دارم. وقتي كد شما را استفاده مي كنم فقط براي پروژه اصلي جواب مي دهد و براي بقيه پروژه ها مقدار forms برابر null مي شود.
لطفا راهنمايي نماييد.
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
با سلام
كسي نبود راهنمايي كند؟
نقل قول: نمايش فرمهاي برنامه با داشتن اسم آنها
با سلام به همه دوستان
بالاخره مشكل با اين كد حل شد.
string formName = "namespace.Form1";
var asm = Assembly.Load("namespace");
Type formType = asm.GetType(formName);
Form f = (Form)Activator.CreateInstance(formType);
f.Show();
از همه بخاطر توجه و پاسخهايشان متشكرم.
:لبخندساده::لبخند: