PDA

View Full Version : نام منوها



mansour161
پنج شنبه 01 مرداد 1394, 23:27 عصر
با سلام
دوستان یه اشکال کوچیک برام پیش امده
من دوتا صفحه دارم
اولی لاگین و دومی صفحه اصلی

الان من تو صفحه لاگین این کد رو نوشتم و جواب داد و در صفحه اصلی منو 1 رو برای کاربر غیر فعال میکرد

MainWindow f = new MainWindow();
f.Show();
f.menu1.IsEnabled = false;


خلاصه کنم
من میخوام این اسم menu1 رو تو پایگاه داده ثبت کنم و از اونجا بخونمش

که این کارم کردم فقط تو این موندم


f.??????.IsEnabled = false;

به جای علامت سوال چی بزارم؟
با تشکر

_4rm4n_
پنج شنبه 01 مرداد 1394, 23:35 عصر
سلام

foreach(Control x in f.Controls)
{
if(x isTextBox)
{
((TextBox)x).Enabled=false;
}
}

Amir4317
پنج شنبه 01 مرداد 1394, 23:37 عصر
سلام
من که سر در نیاوردم چی میگی! :گیج:


اگه میخوای سطح دسترسی بذاری توی بانک مقدار عددی بذار و چکش کن
یا مقدار بولین برای هرکنترلی که درون بانک اسمش رو آوردی درست کن و true یا false قرار بده. :لبخند:

mansour161
پنج شنبه 01 مرداد 1394, 23:52 عصر
ممنون از شما دوستان ولی من منظورمو نتونستم برسونم
من دو تا دسترسی کاربری دارم
که مدیریت و کاربر ساده هست
مدیریت داخل صفحه اصلیش مثلا men1 رو برای کاربر ساده میخواد ببنده که من اینا رو انحام دادم و در پایگاه داده ذخیره میکنم با نام men1
الان کاربر می خواد بره داخل صفخه اصلی
وقتی که لاگین میکنه من دیتا بیس رو میخونم و اسم men1 رو درمیارم و داخل یه متغیر string میریزم
الان میخوام بنویسم

MainWindow f = new MainWindow();

f.Show();


f.(?????).IsEnabled = false
چی به جای علامت سوال ها بنویسم
اسم متغییر رو بزارم میگه که این متد در داخل صفحه اصلی نیست .

_4rm4n_
جمعه 02 مرداد 1394, 00:16 صبح
ممنون از شما دوستان ولی من منظورمو نتونستم برسونم
من دو تا دسترسی کاربری دارم
که مدیریت و کاربر ساده هست
مدیریت داخل صفحه اصلیش مثلا men1 رو برای کاربر ساده میخواد ببنده که من اینا رو انحام دادم و در پایگاه داده ذخیره میکنم با نام men1
الان کاربر می خواد بره داخل صفخه اصلی
وقتی که لاگین میکنه من دیتا بیس رو میخونم و اسم men1 رو درمیارم و داخل یه متغیر string میریزم
الان میخوام بنویسم

MainWindow f = new MainWindow();

f.Show();


f.(?????).IsEnabled = false
چی به جای علامت سوال ها بنویسم
اسم متغییر رو بزارم میگه که این متد در داخل صفحه اصلی نیست .
کدی که دادم با یکم تغییر راه ساز بود ...
شما مثلا یک تکست باکس دارید با اسم txt1 که میخواید اون برای کاربر ساده که همونطور که ادمین مشخص کرده غیرفعال باشه ..
خب توی دیتابیس ثبت کنید که textbox...
بعد اینو توی متغیر a میریزید ...
با یک شرط اول میسنجید که a چیه ...
مثلا
if(a=="textbox")
if(a == "label")
,...
حالا با شرطمون مثلا دیدیم که a یک تکست باکس هست ! میایم حالا از کد استفاده میکنیم :

foreach(Control x in f.Controls)
{
if(x isTextBox)
{
((TextBox)x).Enabled=false;
}
}

حلقه اول میاد تمام کنترل های فرم رو میکشه بیرون بعد میاد هرکدوم که تکست باکس بود رو enabled رو غیر فعال میکنه ... حالا شرط رو مثلا با Name هم میتونید محدود ترش بکنید ...

mansour161
جمعه 02 مرداد 1394, 11:11 صبح
کدی که دادم با یکم تغییر راه ساز بود ...
شما مثلا یک تکست باکس دارید با اسم txt1 که میخواید اون برای کاربر ساده که همونطور که ادمین مشخص کرده غیرفعال باشه ..
خب توی دیتابیس ثبت کنید که textbox...
بعد اینو توی متغیر a میریزید ...
با یک شرط اول میسنجید که a چیه ...
مثلا
if(a=="textbox")
if(a == "label")
,...
حالا با شرطمون مثلا دیدیم که a یک تکست باکس هست ! میایم حالا از کد استفاده میکنیم :

foreach(Control x in f.Controls)
{
if(x isTextBox)
{
((TextBox)x).Enabled=false;
}
}

حلقه اول میاد تمام کنترل های فرم رو میکشه بیرون بعد میاد هرکدوم که تکست باکس بود رو enabled رو غیر فعال میکنه ... حالا شرط رو مثلا با Name هم میتونید محدود ترش بکنید ...





شما درست می فرمایید ولی این که فرمودید برای همه صادق هست نه برا مثلا از پنج تا تکست باکس میخوام به نکست 1 و تکست 5 دسترسی داشته باشه


بزارید سوالم رو یجور دیگه بپرسم
من توصفحه اصلی هر چی نام اشیا دارم تو دیتا بیس ذخیره کردم .
می خوام تو صفحه دیگه اسم این اشیا رو از دیتابیس بگیرم

_4rm4n_
جمعه 02 مرداد 1394, 11:32 صبح
شما درست می فرمایید ولی این که فرمودید برای همه صادق هست نه برا مثلا از پنج تا تکست باکس میخوام به نکست 1 و تکست 5 دسترسی داشته باشه


بزارید سوالم رو یجور دیگه بپرسم
من توصفحه اصلی هر چی نام اشیا دارم تو دیتا بیس ذخیره کردم .
می خوام تو صفحه دیگه اسم این اشیا رو از دیتابیس بگیرم
خب برادر گلم مگه توی دیتابیس Textbox5 مثلا ثبت نشده ؟
مثلا متغیر a رو از توی دیتابیس خوندیم که مقدارش TextBox5 هست ...
خب توی اقسمت زیر فقط کافیه شرط رو محدود تر کنی اینجوری :

foreach(Control x in f.Controls)
{
if(x isTextBox)
{
if(((TextBox)x).Name==a)
{
((TextBox)x).Enabled=false;
}
}
}

_4rm4n_
جمعه 02 مرداد 1394, 11:39 صبح
حتی الآن که فکر مکینم شرط اولو اصلا میتونید بردارید چون همه ی کنترل ها Name دارند و Name مختص خودشون هست unique هست... :

foreach(Control x in f.Controls)
{
if x.Name==a)
{
((TextBox)x).Enabled=false;
}
}

ناامید
جمعه 02 مرداد 1394, 12:18 عصر
سلام.
تو این مثال menuStrip1 به وسیله رشته که نامش هست در فرم MainWindow غیر فعال میشه.
نیازی نیست سطح دسترسی کنترل public باشه.

MainWindow f = new MainWindow();
f.Controls["menuStrip1"].Enabled = false;
f.ShowDialog();

Amir4317
جمعه 02 مرداد 1394, 22:38 عصر
سلام مجدد

ببین دوست جون روش شما کاملا غیراصولی و غیرمنطقیه
چون در دستور صریح کنترلی به هیچ وجه نمیش‌تونی متغیر بذاری و بعداً بگی روی این کامپوننت اعمال کن. و خب با پخته تر شدن شما در مبحث سی شارپ و برنامه نویسی به این درک و پیدا کردن روش های صحیح می رسی (خیلی زود با مُمارست!)

اما من یک روش فعلاً معرفی میکنم وقت کردی توی انجمن جستجو کن برای کنترل سطح دسترسی زیاد بحث و گفتگو شده.

برای کنترل هایی که میخوای فعال و غیر فعال بشن در قسمت tag مقدار عددی یا حروف بگذار
مثلاً menu1 شما فقط برای مدیر و menu2 برای همه

خب حالا تگ menu1 رو admin و تگ منوی های دیگه رو all می‌گذاریم.
بعد از فرم لاگین و تعیین سطح دسترسی و ... کافیه یک حلقه یا if ساده بذاری و با توجه به نوع کاربر چ مدیر چ کارمند منوها و کنترل ها فعال و غیر فعال بشن.




//متغیر براساس اعتبارسنجی کاربر تعیین میشود
var accessLevel = admin یا all

foreach(Control x in f.Controls)
if(x.tag!= null && x.tag.tosting() != accessLevel)
x.Enabled=false;








پیروز و سربلند باشید :چشمک:

mansour161
شنبه 03 مرداد 1394, 18:03 عصر
سلام بر دوستان عزیزم و خیلی ممنونم از جوابدهی خوبتون
دوست عزیز ناامید (http://barnamenevis.org/member.php?364761-%D9%86%D8%A7%D8%A7%D9%85%DB%8C%D8%AF) این کد که نوشتید
f.Controls["menuStrip1"].Enabled = false;
کد معادلش تو wpf چی میشه ؟ مرسی
به خاطر اینکه شلوغش نکنم فرم رو اینجا پرسیدم
مرسی