تبدیل مقدار Radio Button به عدد
سلام و درود ، من توی یک فرم چندین group box دارم که توی هر کدوم از این ها 5 تا radio button هست و بصورت گروهی باهم کار می کنن و به این شکل نوشته شدن : عالی ، خوب ، متوسط ، ضعیف و عدم اجرا ، حالا میخوام برای هر کدوم از اینها یک مقدار تعیین کنم و توی یک لیبل که جلوش گذاشتم قرار بدم ....به طور واضحتر اگر کاربر گزینه عالی رو پر کرد عدد 4 توی لیبل جلوییش آنی درج بشه و خوب رو پر کرد 3 و الی آخر ، بعدا میخوام جمع کلی همه ی این لیبل ها رو هم داشته باشم ، ممنون میشم راهنمایی کنید
18 پاسخ
ممنون استاد
من الان سر کار هستم رفت منزل عکس میگذارم حتما
ولی بخوام توضیح بدم اینطوری هست که من توی فرمم 10 تا tabcontrol دارم توی هر کدوم از این ها چندین groupbox هست توی هر کدوم از این ها یک لیبل برای توضیحات هست و 5 تا radiobutton برای دریافت مقدار عالی ، خوب و ... از کاربر ،
در انتهای همین ها هم یک لیبل گذاشتم که مقدار تگ رو از radiobutton ها دریافت می کنه
حالا در تب آخر میخوام یک لیبل بگذارم که جمع همه لیبل ها رو یکجا و بصورت اتوماتیک نشون بده
متشکرم
ممنون از شما استاد عزیز که اینقدر براتون مهمه که کاربرای سایتتون استفاده ببرن از محیطی که براشون فراهم آوردید
به شخصا واقعا لذت میبرم که به سایتتون سر بزنم و از مطالب مفیدتون استفاده ببرم
ممنون و سپاسگذارم
ممنون استاد عزیز
ببخشید مجبور شدم پشت سر هم اسپم بدم
خواهش می کنم شما همیشه لطف دارید
استاد جسارتا این دو تا کد رو دقیقا کجا قرار بدم توی لود فرم یا توی لود تب کنترل ها یا ...
یه مورد دیگه هم که برام امروز پیش اومد و به ذهنم زد اینه :
این گزارش نهایی من هست بعد از گرفتن مقادیر از کاربر اگر دقت کنید یک سری variable از نوع استرینگ هستند که با حرف L انگلیسی شروع شدند در پایان ردیف هر جدول مثل l116 و l126 الی اخر
خب این ها همون لیبل هایی هستند که میخوایم جمع شون بزنیم و در اینجا هم برای چاپ اومدن که بوسیله یک کد اطلاعات را از لیبل ها درون فرمم براشون ارسال کردم
یه سوال به ذهنم زد نمیشه از قسمت function و از متد sum استفاده کرد و این متغیرهای استرینگی رو باهم جمع زد که کار رو راحتتر کنه من خودم توی نت سرچ کردم متاسفانه جوابی براش پیدا نکردم
در پایان عذر میخوام من جسارت کردم و همین موضوع رو بصورت جداگانه در این تاپیک هم پرسیدم
در نهایت ممنون از سخاوتمندی و حوصله شما در پاسخگویی به سوالات کاربران
میخوایید مقدارشون به هم وصل بشه یا با هم جمع بشه؟؟
سلام مجدد و با سپاس از پاسخ گویی
ببخشید من هنوز مبتدی هستم و کامل نگرفتم شما چی گفتید ...
در واقع قسمت تگ رو متوجه شدم ...
چند تا سوال :
1- اول radiobutton رو انتخاب کنم و توی قیمت tag بهش مقدار بدم یا بوسیله کدنویسی اینکار رو انجام بدم اگر کدنویسی هست دقیقا کجا این کدی رو که گذاشتید رو بنویسم
2- خب با چه کدی به لیبلی که میخواد مقدار tag رو نشون بده این کار رو انجام بدم
ببخشید سوالام مبتدیانه هست خب بالاخره اول راهم ممنون میشم راهنمایی کنید
متشکرم
ممنون از اهمیتی که میدید
ببینید من توی یک فرم 57 سری radiobutton دارم که هر سری از اینها 5 تا هست که شامل عالی ، خوب ، متوسط ، ضعیف و عدم اجرا میشه البته چون تعدادشون زیاد بود توی چندین tabcontrol پیاده سازیشون کردم
بعد با کمک شما اومدم به radiobutton عالی هر کدوم از سری ها 4 دادم خوب 3 و الی آخر
و پایان همون سری یک لیبل گذاشتم که در واقع نشون میده چه گزینه ای انتخاب شده
در پایان میخوام توی tabcontrol آخر یک تکست باکس یا لیبل قرار بدم که همه لیبل ها رو باهم جمع کنه مثلا 57 تا امتیاز 4 یا ....
باز هم ممنون که وقت میگذارید متشکرم
الان شما RadioButton ها به صورت مستقیم داخل Form هستن یا Tab Control یا Panel استفاده کردید؟ می تونید یه عکس از فرمتون بزارید؟
ممنون ولی خب یه خورده پیچیده شد
من radiobutton ها رو به این صورت نامگذاری کردم :
r111 , r112 , r113 , r114, r115 برای پارامتر اول که درواقع برای نشون دادن تگشون اون ها رو با کدی که خودتون زحمتش رو کشیدید برای l116 میفرستم و همچنین
r121 , r122 , r123 , r124 , r125 برای پارامتر دوم
الی آخر
حالا اومدم از کد شما استفاده کردم و به جای "Score" شما "r" قرار دادم بقیه رو تغییر ندادم و درون load فرمم قرار دادم اما کار نکرد
کار دیگه ای باید انجام بدم
البته در کل با خوندن کد آخری که زحمتش رو کشیدید متوجه شدم که داره چه اتفاقی میفته اما چون مبتدی هستم هنوز یه خورده برام مبهمه
به نظر کجای کار اشتباه هست؟؟؟
متشکرم از لطف و محبت شما و سعه صدرتون
سلام، خوشحالم که مشکلتون حل شد.
شما می تونید از پنجره Properties هم خصوصیت Tag رو مقدار دهی کنید. شما Tag هر RadioButton رو به مقداری که مد نظرتون ست کنید، بعد تو رویداد CheckedChanged هر کدوم از RadioButton ها کد زیر رو بنویسید:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
label1.Text = ((RadioButton) sender).Tag.ToString();
}
خب بالاخره با کلی ور رفتن پیدا کردم راه حلش رو
توی گزارشم تمامی 57 تا متغیر رو از string تغییر دادم به int سپس یک متغیر int دیگه درست کردم از قسمت int by گذاشتمش روی expression و درون فیلد مربوطه اش تمامی 57 تا متغیر رو با + بینشون با هم جمع کردم به همین راحتی
باز هم ممنون از اساتید گرامی مخصوصا جناب احمدی عزیز که از کمک هاشون دریغ نکردند
یاحق
اول یک استاندارد برای نام گذاری RadioButton ها انتخاب کنید، مثلاً Score1RadioButton الی Score54RadioButton، یعنی RadioButton ها با کلمه Score شروع بشن، بعد بوسیله کد زیر می تونید لیست کل RadioButton هایی که با Score شروع شدن و انتخاب شدن رو انتخاب کنید و جمع Tag شون رو بدست بیارید، البته این و بگم که مکانیزم بدست آوردن لیست RadioButton ها دست خودتون هست و با هر روشی می تونید از لیست RadioButton ها استفاده کنید، برای مثال اگر تو TabControl هستن RadioButton ها می تونید داخل هر Tab رو با شیوه مشابهی بدست بیارید، کد زیر دید اولیه رو بهتون میده:
var scoreRadioButtons = this.Controls.OfType<RadioButton>().Where(r => r.Name.StartsWith("Score") && r.Checked);
int total = 0;
foreach (var scoreRadioButton in scoreRadioButtons)
{
total += int.Parse(scoreRadioButton.Tag.ToString());
}
TotalTextBox.Text = total.ToString();
سلام و عرض ادب، هر کنترلی که شما استفاده می کنید یک خصوصیت داره به نام Tag که می تونید هر مقداری رو بهش بدید، برای مثال عدد، رشته و ...، حالا شما موقعی که می خوایید استفاده کنید کافیه Tag رو تبدیل به نوعی کنید که زمان طراحی مقدار دهیش کردید:
radioButton1.Tag = 1; var radio1Value = (int)radioButton1.Tag;
سلام مجدد
از اونجایی که من فردا باید پروژه رو تحویل بدم لطفا از اساتید محترم کسی میدونه این مورد آخر رو راهنمایی کنه پروژه ام به پایان رسیده فقط جمع لیبل ها مونده خودم هم هر چی گشتم جوابی پیدا نکردم
ممنون
سلام به استاد احمدی عزیزی
من این کد رو گذاشتم توی فرمم بعد از using ها
private int CalculateSum(TabControl.TabPageCollection tabeCollection)
{
var sum = 0;
foreach (TabPage tabPage in tabeCollection)
{
foreach (var radioButton in tabPage.Controls.OfType<RadioButton>().Where(r=>r.Name.StartsWith("Score")))
{
sum += (int)radioButton.Tag;
}
}
return sum;
}
بعد مقدار startwith مساوی با مقدار خودم قرار دادم
و بعد این کد رو گذاشتم توی لود فرمم
TotalTextBox.Text = CalculateSum(tabControl1.TabPages).ToString();
البته ایراد گرفت مجبور شدم tostring رو اضافه کنم به انتهاش و همچنین برابر قرارش دادم با تکست باکس خودم اما مقدار رو 0 نشون میده
به نظرتون کجای کار اشکال داره
جسارتا اون موردی که خدمتتون عرض کردم هم راه حلی نداره ( جمع چند متغیر استرینگی توی گزارش استیمول سافت )
ممنون و متشکرم از شما ...
بسیار عالی ...
بله چک کردم به خوبی انجام شد ممنون و سپاسگذارم
فقط در نهایت برای جمع زدن مقدار همه لیبل ها رو هم راهنمایی کنید ممنون میشم
چون 57 تا لیبل دارم که باید همه رو جمع بزنم یعنی در واقع میخوام یک تکست باکس بصورت disable یا یک لیبل بگذارم که بعد از اینکه لیبل ها تک به تک اطلاعات را از radiobutton ها گرفتند بعد با هم جمع بشن و بلافاصله درون اون نوشته بشن
قبلا چند تا تکست باکس رو اینطوری با هم جمع زدم البته بصورت اتوماتیک :
ابتدا در رویداد کی پرس هر سه تکست باکس نوشتم
if (!(char.IsDigit(e.KeyChar) || char.IsControl(e.KeyChar) || ((int)e.KeyChar) == 32))
{
e.Handled = true;
}
بعد در رویداد هر تکست باکس نوشتم
int txt1 = 0, txt2 = 0, txt3 = 0;
textBox4.Text = "";
if (textBox1.Text != "") txt1 = int.Parse(textBox1.Text);
if (textBox2.Text != "") txt2 = int.Parse(textBox2.Text);
if (textBox3.Text != "") txt3 = int.Parse(textBox3.Text);
textBox4.Text = (txt1 + txt2 + txt3).ToString();
به نظرتون برای همین ها هم باید اینطوری بنویسم البته اون ها تکست باکس بودن اینها لیبل ...
به نظرتون برای اینها هم همین کار رو بکنم
متشکرم
از اساتید بزرگوار کسی راهنمایی نمی کنه من دقیقا گیر همین مورد هستم پروژه ام کامله ... حتی تحویل هم دادم ولی خب این مورد توش مشکل داشت باید دوباره ازش بگیرم و اصلاح کنم
متشکرم
سلام مجدد و عذرخواهی بابت اینکه دیر جواب دادم، با توجه به مواردی که فرمودید بنده این راه کار رو پیشنهاد می کنم، اول یک متدی به صورت زیر بنویسید که کل TabPage ها رو برای کنترل های RadioButton پیمایش کنه:
private int CalculateSum(TabControl.TabPageCollection tabeCollection)
{
var sum = 0;
foreach (TabPage tabPage in tabeCollection)
{
foreach (var radioButton in tabPage.Controls.OfType<RadioButton>().Where(r=>r.Name.StartsWith("Score")))
{
sum += (int)radioButton.Tag;
}
}
return sum;
}
حالا به صورت زیر از این کد استفاده کنید:
TotalTextBox.Text = CalculateSum(tabControl1.TabPages);