PDA

View Full Version : سوال: غیرفعال کردن دکمه ای که نام آنرا در اختیار داریم



veniz2008
چهارشنبه 04 مرداد 1391, 11:21 صبح
سلام. من 3 تا دکمه روی فرم دارم با نام های btn1 و btn2 و btn3 ویک دکمه هم برای غیرفعال کردن این 3 دکمه. حالا یک textbox گذاشتم و میخوام نام هر کدوم از دکمه ها رو که واردکردم (مثلا btn2)، بعد از اجرا، اون دکمه غیرفعال بشه.اینو بگم که نمیخوام که با if چک کنم که آیا نامی که درون تکست باکس وارد کردم با نام دکمه ها یکسان هست یا نه. میخوام با توجه به مقداری که از تکست باکس بدست میارم اون دکمه خاص رو غیرفعال کنم. من خودم مقدار تکست باکس (یعنی btn2) رو داخل رشته ریختم ولی مشکلی که هست اینه که رشته ها خاصیت enable ندارن. بطور ساده بگم: من اگه مستقیم نام دکمه رو بنویسم،خاصیت enable وجود داره ولی اگه نام دکمه رو درون یه رشته بذارم و بخوام از اون طریق دکمه رو غیرفعال کنم جواب نمیده. چه راهکاری پیشنهاد میدید؟

barnamenevisforme
چهارشنبه 04 مرداد 1391, 11:42 صبح
سلام
دکمه ها یه شی اند به نام button و اون چیزی که با عبارت btn1 مشخص میشه مشخصه نام اون هست که از جنس رشته یا string هست.(البته و صد البته که خودتون اینو میدونید.)
حالا به نظر شما مقایسه و یا هر عمل دیگه ای با دو تا مورد نا همجنس مقدوره؟
ولی من حدس میزنم هدف شما از این کار ایجاد دکمه های جدید با نام دلخواه هست.و یا شاید هدف دیگه ای رو دنبال می کنید.
اگه هدفتون مشخص میشد شاید به نتیجه بهتری میرسیدیم.

harani
چهارشنبه 04 مرداد 1391, 11:44 صبح
ببین این کد خوبه ؟ :

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
try
{
this.Controls[textBox1.Text].Enabled = false;
}
catch (System.Exception)
{
MessageBox.Show("این نام وجود ندارد");
}
}

ali_habibi1384
چهارشنبه 04 مرداد 1391, 11:50 صبح
Controls["Name"].Enabled = false;

veniz2008
چهارشنبه 04 مرداد 1391, 12:00 عصر
دوستان،من یک جدول دارم که در کنار نام کاربری هر کاربر، یک سری محدودیت ها هم برای اون کاربر در نظر گرفتم. حالا میخوام که هنگام لاگین کاربر،اون محدودیت ها رو بدست بیارم و غیرفعال کنم.(مثلا کاربر1، منوی m1 و m4 براش غیرفعال باشه). حالا نام ها رو در اختیار داشتم و با استفاده از کدی که جناب حبیبی گذاشتن به مقصودم رسیدم. از بقیه دوستان هم که نظر دادن تشکر میکنم.

barnamenevisforme
چهارشنبه 04 مرداد 1391, 12:14 عصر
سلام
خوب واسه هر محدودیت یک فیلد از نوع bit تعریف میکردید.موقع login کردن اون کاربر مقدارش رو اختصاص میدادید به خاصیت enabled دکمه مربوطه.اینجوری موقع ویرایش محدودیت ها هم میتونستید فیلد مربوطه رو به یک checkbox مقید کنید.
90208
البته راه حلی که دوستان ارائه کردن درست و قابل احترامه و این فقط یک پیشنهاد بود.

ali_habibi1384
چهارشنبه 04 مرداد 1391, 12:15 عصر
دوستان،من یک جدول دارم که در کنار نام کاربری هر کاربر، یک سری محدودیت ها هم برای اون کاربر در نظر گرفتم. حالا میخوام که هنگام لاگین کاربر،اون محدودیت ها رو بدست بیارم و غیرفعال کنم.(مثلا کاربر1، منوی m1 و m4 براش غیرفعال باشه). حالا نام ها رو در اختیار داشتم و با استفاده از کدی که جناب حبیبی گذاشتن به مقصودم رسیدم. از بقیه دوستان هم که نظر دادن تشکر میکنم.
شما بايد نام فرمي رو هم كه قراره اون كنترل غيرفعال بشه هم قرار ميدادي كه چك كني اگر اين همون فرمي هست كه كنترل درونش هست اينكارو بكني.در غير اينصورت ممكنه در دو فرم شما دو كليد همنام داشته باشي و يكيشو نخواي invisable كني.

ali_habibi1384
چهارشنبه 04 مرداد 1391, 12:23 عصر
البته اين موضوع سليقه ايه.من تركيبي از كار آقاي barnamenevisfrome رو به همراه Node استفاده كردم:
http://1.0.0.img98.net/out.php/i413516_mahdodiat.jpg

veniz2008
چهارشنبه 04 مرداد 1391, 12:29 عصر
نام ها بصورت یکتا هستن.(مثلا منو ها رو بصورت زیرنامگذاری کردم: M1 و M2 و ... . یا مثلا زیرمنوی مربوط به M1 رو بصورت M11 و M12 در نظر گرفتم). و کلا برای هر کاربر یک(یا چند) منو یا زیرمنو غیرفعال میشه که طبق نامگذاری که انجام دادم متفاوت خواهند بود.

veniz2008
چهارشنبه 04 مرداد 1391, 14:51 عصر
آقای حبیبی این نمونه ای که گذاشتید لطف میکنید بیشتر توضیح بدید،اینکه محدودیتها رو برای یک کاربر چطور در بانک ذخیره میکنید و چطوری موقع لاگین کاربر تشخیص میدید. البته شما و دوستمون در بالا اشاره کردید ولی دقیقا متوجه نشدم.اگرم نمونه برنامه ای برای این کار دارید ممنون میشم بذارید.

ali_habibi1384
چهارشنبه 04 مرداد 1391, 16:19 عصر
واسه فرمها و منوهايي كه كاربر نياز داره كه براش محدوديت بذاره واسه هركدوم يه فيلد درست ميكنيم توي ديتابيس و نوعش رو Boolean ميذارم.وقتي كاربر تعريف ميشه دامنه دسترسيش هم تعريف ميشه.حالا كاربر كه لاگين ميكنه كافيه Enable چيزهايي كه براي كاربر تعيين كرديم برابر اون فيلد مربوط به جدول ديتابيست كني.به همين راحتي:براي راحتي كار وقتي فرم اصليم لود ميشه همه رو توي يه تري ويو لود ميكنم:


Class.Mali.User refUser = new User();
//load etelaat va namayesh anha dar textbox va checkbox ha
DataTable dtUser = new DataTable();
dtUser = refUser.SelectRowByUserName (UserName );
treeView1.Nodes["BakhshMali"].Checked = (Boolean)dtUser.Rows[0]["BakhshMali"];
treeView1.Nodes["BakhshMali"].Nodes["Sarfaslha"].Checked = (Boolean)dtUser.Rows[0]["Sarfaslha"];
treeView1.Nodes["BakhshMali"].Nodes["Sarfaslha"].Nodes["NewSarfasl"].Checked = (Boolean)dtUser.Rows[0]["NewSarfasl"];
treeView1.Nodes["BakhshMali"].Nodes["Sarfaslha"].Nodes["EditSarfasl"].Checked = (Boolean)dtUser.Rows[0]["EditSarfasl"];
treeView1.Nodes["BakhshMali"].Nodes["Sarfaslha"].Nodes["DeleteSarfasl"].Checked = (Boolean)dtUser.Rows[0]["DeleteSarfasl"];

سپس enable هر منو يا كليد رو معادل سازي ميكنم:


ttMali.Enabled = treeView1.Nodes["BakhshMali"].Checked;
ttAnbar.Enabled = treeView1.Nodes["BakhshAnbar"].Checked;
ttCheck.Enabled = treeView1.Nodes["BakhshCheck"].Checked;
ttSetting.Enabled = treeView1.Nodes["BakhshTanzimat"].Checked;
//bakhshhaye 2 vom
سرفصلحسابهاToolStripMenuItem1.Enabled = treeView1.Nodes["BakhshMali"].Nodes["Sarfaslha"].Checked;
اسنادToolStripMenuItem.Enabled = treeView1.Nodes["BakhshMali"].Nodes["Asnad"].Checked;
دفاترحسابداريToolStripMenuItem.Enable d = treeView1.Nodes["BakhshMali"].Nodes["GozareshatMali"].Checked;