PDA

View Full Version : سوال: کنترل پویا



masmlink
پنج شنبه 04 شهریور 1389, 23:06 عصر
با سلام
مجبور به ایجاد کنترل پویا با یک حلقه for شده ام و نام کنترلها به شکل ترکیبی از اندیس حلقه ورشته حروف همراه سایر خصوصیات در حلقه تعیین میشوند .کنترلها همزمان با ایجاد از دیتا بیس تکست میگیرند ولی چون تا زمان اجرا ایجاد نمی شوند نمیتوانم برایشان کد بنویسم. . به وسیله قطعه کدهایی از اینکه حضور آنها در فرم به رسمیت شناخته نمیشود مطمئن شده ام. با این اوصاف ،مثلا برای RadioButton های ایجاد شده میخواه ببینم آیا کاربر آنها را انتخاب کرده یا نه. چنین کاری شدنی هست یا نه؟چگونه؟
با تشکر

C Sharp
جمعه 05 شهریور 1389, 06:08 صبح
اول از همه ، حتما این مسئله رو رعایت کردی که بعد از تعریف کنترلهات اونا رو به کنترل های فرم اضافه کرده باشی
یعنی اینجوری :


this.Controls.Add(radioButton1);


البته به نظر من اگه از groupBox واسه نگهداشتن کنترلهات استفاده کنی قشنگتره(فقط قشنگتره)

واسه چک کردنشون هم میتونی به این شکل عمل کنی :




foreach (Control control in this.Controls)
{
if ((control is RadioButton) && ((RadioButton)control).Checked == true)
//Do anything that you want...
}

mmd2009
جمعه 05 شهریور 1389, 07:39 صبح
با سلام.

دوست عزیز شما با کدهای زیر مثلا میتونی رادیو باتن هایی رو ایجاد کنی:



for (int i = 0; i <= 10; i++)
{
RadioButton rd = new RadioButton();
rd.Text = i.ToString();

flowLayoutPanel1.Controls.Add(rd);

}


و حالا با کدهای زیر میتونی چک کنی ببینی کدوم یکیش چک خورده.



foreach (Control d in Controls)
{
foreach (RadioButton c in d.Controls)
{
if (c.Checked == true)
MessageBox.Show(c.Text.ToString());

}


}


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

موفق باشید

masmlink
یک شنبه 07 شهریور 1389, 11:29 صبح
از راهنماییتون ممنون ولی من که گفتم کنترلهای پویا روی فرم به حساب نمی آیند،یعنی این شرط رادیو باتم هایی که روی فرم وجود داره چک میکنه نه اونهایی که به شکل پویا ساختیم. حالا چه کار باید کرد؟

foreach (Control control in this.Controls)
{
if ((control is RadioButton) && ((RadioButton)control).Checked == true)
//Do anything that you want...
}

C Sharp
یک شنبه 07 شهریور 1389, 12:41 عصر
خوب بالاخره یه جایی تو یه آرایه ای ، این کنترلهای پویا رو نگه میداری دیگه ؟
اگه اینکارو نکردی حتما انجام بده ، ولی چیزی که مسلمه اینه که تا این RadioButton ها رو تو لیست کنترلهای فرم یا پنل یا .... اضافه نکنی ، کاربر نمیبینشون که بخواد انتخابشون کنه حتی!

اگه مشکلت حل نشد ، کدی که واسه ایجاد کنترلهای پویا نوشتی رو بذار

Reza_Yarahmadi
یک شنبه 07 شهریور 1389, 13:05 عصر
نميدونم منظورتون از به رسميت شناختن چيه! اين نمونه كوچيك رو نگاه كنيد ببينيد كجاش رو به رسميت نميشناسه.

masmlink
دوشنبه 08 شهریور 1389, 11:50 صبح
تا اینجا از لطف شما ممنون
این قطعه کد مربوط به ایجاد متن سوالات و گزینه های آن از دیتا یس است .چون تعداد سوالات از قبل معلوم نیست ازکنترل پویا استفاده کردم . نمایش سوالات وگزینه ها و انتخاب اونها درست اجرا میشه. ( البته درباره پنل اول هم مشکلی هست و اون اینه که اگه نباشه ، گزینه ها هنگام انتخاب چهار تا چهار تا از هم جدا نمی شوند و اگه باشه، با این مدلی که من تعریف کرده ام برای هر سوال موقعیتش نسبت به پنل اصلی کمی جابجا میشه .) حالا در در یک باتن دیگه میخوام ببینم کاربر به هر یک از سوالات چه پاسخی داده ؟


int k = int.Parse(numofquestionall()) + 1;

for (m_ControlCount = 1; m_ControlCount < k; m_ControlCount++)
{
cl.creatconnection();
cl.command.CommandText = "select * from CRQUVEIW where Question_ID=" + m_ControlCount;
cl.reader = cl.command.ExecuteReader();
cl.reader.Read();
m_Location.Y = m_Location.Y + 5;
Label x = newLabel();
RadioButton y1 = newRadioButton();
RadioButton y2 = newRadioButton();
RadioButton y3 = newRadioButton();
RadioButton y4 = newRadioButton();
Panel pn = newPanel();

pn.Name = "lable" + m_ControlCount.ToString();
pn.Text = "" + m_ControlCount.ToString() + " - ";
pn.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
pn.AutoSize = true;
pn.AutoScroll = true;
x.Name = "lable" + m_ControlCount.ToString();
x.Text = "" + m_ControlCount.ToString() + " - " + cl.reader["Question_Text"].ToString() + "";

//string charlenghth = cl.reader["Question_Text"].ToString();
//textBox3.Text = charlenghth.Length.ToString();

y1.Name = "1" + m_ControlCount.ToString();
y1.Text = "1-" + cl.reader["Selection_1"].ToString();
y2.Name = "2" + m_ControlCount.ToString();
y2.Text = "2-" + cl.reader["Selection_2"].ToString();
y3.Name = "3" + m_ControlCount.ToString();
y3.Text = "3-" + cl.reader["Selection_3"].ToString();
y4.Name = "4" + m_ControlCount.ToString();
y4.Text = "4-" + cl.reader["Selection_4"].ToString();
x.Location = newPoint(this.m_Location.X , this.m_Location.Y);
m_Location.Y += x.Height + 5;

y1.Location = newPoint(this.m_Location.X, this.m_Location.Y);
m_Location.Y += x.Height + 5;

y2.Location = newPoint(this.m_Location.X, this.m_Location.Y);
m_Location.Y += x.Height + 5;
y3.Location = newPoint(this.m_Location.X, this.m_Location.Y);
m_Location.Y += x.Height + 5;

y4.Location = newPoint(this.m_Location.X, this.m_Location.Y);
m_Location.Y += x.Height + 10;
x.AutoSize = true;
//x.AutoEllipsis = true;
//x.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
//x.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
pn.Controls.Add(x);
pn.Controls.Add(y1); pn.Controls.Add(y2); pn.Controls.Add(y3); pn.Controls.Add(y4);
x.BringToFront();
y1.BringToFront();// y1.AutoSize = true;
y2.BringToFront();// y2.AutoSize = true;
y3.BringToFront();// y3.AutoSize = true;
y4.BringToFront(); //y4.AutoSize = true;

panel2.Controls.Add(pn);
}
cl.connection.Close();

Reza_Yarahmadi
سه شنبه 16 شهریور 1389, 08:02 صبح
دوست عزيز به نظر من منطقي نيست به اين صورت از كنترلهاي پويا استفاده كنيد. فرض كنيد كاربر درخواست 100 سوال كنه چطور ميخوايد اين تعداد سوال رو توي يك صفحه نمايش بديد!!؟
راه حل پيشنهادي من اينه كه كلا بيخيال كنترل پويا بشيد و بصورت زير عمل كنيد:
يك صفحه درست كنيد كه بشه فقط يك سوال رو نمايش داد و دكمه هايي براي رفتن به سوال بعد و سوال قبل
بعد از تعيين تعداد سوالات ، به همين تعداد رندم بزنيد و انديس سوالات رو توليد كنيد كنيد.
توي يك متغير هم انديس سوال جاري رو نگه داريد
يه چيزي تومايه هاي برنامه زير

masmlink
سه شنبه 16 شهریور 1389, 22:01 عصر
دوست عزيز به نظر من منطقي نيست به اين صورت از كنترلهاي پويا استفاده كنيد. فرض كنيد كاربر درخواست 100 سوال كنه چطور ميخوايد اين تعداد سوال رو توي يك صفحه نمايش بديد!!؟


به خاطر وقتی که گذاشتین ممنون.
ببینید من یه گزینه گذاشتم که از کاربر می پرسه تمایل داره چند تا چند تا سوالات رو ببینه؟ تک تک ،10تا10 تا یا یکجا؟
تا یه حدودی برای این دو قسمت کد نویسی کرده ام ،به شکلی که شما پیشنهاد داده اید .ولی ماهیت پروژه طوریه که معمولا سوالات یکجا دیده میشه. تازه در نظر بگیرین که در صورت داشتن صد تا سوال کاربر باید صد بار هم دکمه بعد رو بزنه؟ به نظر خودم این هم خیلی منطقی نیست. با این وجود هنوز هم استفاده از كنترلهاي پويا لازم نیست؟

Reza_Yarahmadi
چهارشنبه 17 شهریور 1389, 07:24 صبح
ببینید من یه گزینه گذاشتم که از کاربر می پرسه تمایل داره چند تا چند تا سوالات رو ببینه؟ تک تک ،10تا10 تا یا یکجا؟
تا یه حدودی برای این دو قسمت کد نویسی کرده ام ،به شکلی که شما پیشنهاد داده اید .ولی ماهیت پروژه طوریه که معمولا سوالات یکجا دیده میشه. تازه در نظر بگیرین که در صورت داشتن صد تا سوال کاربر باید صد بار هم دکمه بعد رو بزنه؟ به نظر خودم این هم خیلی منطقی نیست. با این وجود هنوز هم استفاده از كنترلهاي پويا لازم نیست؟
اون چيزي كه من گفتم يك ايده بود منظورم اين نبود كه بايد يك سوال رو نشون بديد ميتونيد توي هر بار 3 يا 5 سوال رو نشون بديد ولي بيشتر از اين بدليل اينكه ممكنه باعث بشه فرم اسكرول بخوره زياد جالب به نطر نمياد. در ضمن توي امتحانهاي واقعي هم معمولا همه سوالات توي يك صفحه قرار داده نميشه :متفکر:
اگر شما قصد داريد به روش خودتون كار كنيد بايد از روش پويا استفاده كنيد. ولي بايد به مشكلات بسيار زياد اون هم توجه كنيد.
- چينش مرتب سوالات به طوري كه داراي نظم استانداردي باشد
- دسته بندي مرتب راديو باتنها (چون اگر همه رو همينطوري به فرم اضافه كنيد كاربر فقط يكي رو از بين همه راديو باتنها ميتونه انتخاب كنه)
- مشكل بعدي طريقه فهميدن جواب علامت زده كاربر است
- طريقه فهميدن اينكه جوابي كه علامت زده شده مربوط به كدام سوال است
- جواب علامت زده شده درست است يا نه
- ...
تازه در صورتي كه طبق نظر كاربر مجبور بشيد سوالات رو توي چند صفحه نشون بديد مشكلات خيلي زيادتر ميشه.
البته همه اينها به اين شرط به وجود مياد كه شما يكي از اصول اصلي اينطور امتحانها (تصادفي بودن سوالات و جوابها) رو رعايت كرده باشيد.
نميگم چيزي كه شما ميخوايد نشدنيه ولي دردسرش يه ذره زياده

masmlink
پنج شنبه 18 شهریور 1389, 19:13 عصر
نميگم چيزي كه شما ميخوايد نشدنيه ولي دردسرش يه ذره زياده

از این که وقت گذاشتین و جواب دادین ممنون .
من فکر می کنم چون تعداد سوالات معلوم نیست حتما باید کنترلها پویا باشند ومسائل پیرامون اون دقیقا باید حل بشه . شاید دردسرش زیاد باشه ولی چاره ای نیست ، من هم به خاطر همین مسائل راهنمایی خواستم .فقط و فقط پیدا کردن جواب کاربر به هر سوال مساله اصلی است و بقیه در مقابل این مساله خیلی فرعی هستن. بالاخره هر کنترلی با مشخصاتی تولید میشه که با نگهداری اون مشخصات میشه بعدا بهشون دست پیدا کرد . باید ببینیم چه مشخصاتی برای دسترسی دوباره لازمند؟ بعد از این که این موضوع مشخص بشه هر چند بار و به هر منظور که بخواهیم میتونیم از اون استفاده کنیم.