PDA

نسخه کامل مشاهده نسخه کامل : اینو چه جوری درست کنم ؟



shadmehrshadow1
22-10-2010, 20:29
ما 81 تا تکست باکس روی فرم داریم . به شکل زیر

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
من میخوام وقتی که توی یکی از این تکست باکس ها عددی رو ینویسم (اعداد میتونه از 1 تا 9 باشه ) اونوقت چک کنه که آیا این عدد توی اون سطر یا ستون و یا توی اون بلوک (مثلا تکست باکس های 1 تا 9 یا 37 تا 45 ) هست یا نه . اگه بود رنگ Backcolor اون تکست باکس قرمز بشه و وقتی که اصلاح شد دوباره رنگش به حالت عادی یعنی سفبد برگرده . امید وارم که منظورم رو خوب رسونده باشم.

IP007
22-10-2010, 20:46
از یه لیست یا آرایه استفاده کن،
با استفاده از ایندکس ، راحت میتونی کارتو انجام بدی

shadmehrshadow1
23-10-2010, 19:34
مثلا چه جوری ؟ یه مثال با کد بگید .

---------- Post added at 07:34 PM ---------- Previous post was at 07:32 PM ----------

مثلا چه جوری ؟ یه مثال با کد بزنید

IP007
23-10-2010, 19:41
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این تعریفش بود.
حالا


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


حالا، با ایندکس مختص به لیست lbs ، میتونی برنامه رو پیاده کنی،
اونم توضیح میخوای یا خودت در موردش فکر کردی؟! :دی

---------- Post added at 07:41 PM ---------- Previous post was at 07:38 PM ----------

برای قسمت دوم، از یه حلقه foreach ، استفاده کن، که this.Controls رو بخونه، بعد چک کنه که آیا از نوع TextBox هست یا نه؟! بعدش به لیست اضافش کن،

shadmehrshadow1
25-10-2010, 10:29
نميدونم . يا شما درست سوال من رو متوجه نشديد يا من .
جواب شما اصلا شبيه اون چيزي كه من ميخوام نيست. لطفا يك بار ديگه سوال رو بخونيد

anvar.net
25-10-2010, 22:15
ساده ترین راه همونه که دوستان در بالا گفتند

ولی یه راه جالب تر برات می ذارم شاید بهتر باشه.

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

رویداد های تمامی این کنترل ها هم بصورت مشترک در رویدهادهای همان کنترل ارایه قایل دسترسی هستند.

مثلا واسه مثالی که خودت زدی , کنترل آرایه رو که بصورت DLL هست رو به پروژه ات اضافه کن تا در تول باکس کنترل جدیدی به نام Control array اضافه شود. حالا کنترل رو بنداز رو فرمت, در سینی کامپوننت های فرم اضافه می شود و با راست کلیک بر روی آن و انتخاب زیر منوی Add or remove controls می تونی کنترل های تکست باکس رو بهش اضافه کنی.

حالا تمامی کنترل های تکست باکس شما رویدادهای مشترکی خواهند داشت که برای گرفتن ایندکس هر کنترل در آرایه می تونی مشابه با زیر عمل کنی. مثلا نام کنترل ارایه شما Controlarray1 هست

if arraycontrol1.controls.indexof(sender)=2 then
control array1.controls(2).backcolor=Color.Blue
end if


اگه سوالی بود مطرح کن

لینک دانلود کنترل

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

shadmehrshadow1
25-10-2010, 22:21
اصلا مشکل من آرایه نیست . سوال من اینه که :

من میخوام وقتی که توی یکی از این تکست باکس ها عددی رو ینویسم (اعداد میتونه از 1 تا 9 باشه ) اونوقت چک کنه که آیا این عدد توی اون سطر یا ستون و یا توی اون بلوک (مثلا تکست باکس های 1 تا 9 یا 37 تا 45 ) هست یا نه . اگه بود رنگ Backcolor اون تکست باکس قرمز بشه و وقتی که اصلاح شد دوباره رنگش به حالت عادی یعنی سفبد برگرده .

در ضمن آدرسی رو که گذاشتید ف + ی + ل + ت + ر هست .

anvar.net
25-10-2010, 22:28
خوب دقیقا منظور بنده هم همین بود.

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

یه مثال ساده برات می ذارم

فرض کن 9عدد کنترل تکست باکس داریم با ایندکس های 0 تا 8 که در یک کنترل ارایه به نام controlarray1 قرار دارند.

حالا در رویداد Textchange کنترل ارایه می تونیم شرایط رو چک کنیم

اول ایندکس کنترل تکست باکس فعلی رو می گیریم

Dim a as integer=controlarray1.controls.indexof(sender)

حالا ایندکس کنترلی رو که کاربر در حال تایپ هست داریم.

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

If ControlArray1.Controls(a).Text = ControlArray1.Controls(5).Text then

ControlArray1.Controls(a).BackColor = Color.Red

else

..........................................

shadmehrshadow1
27-10-2010, 15:31
ببینید کد شما مشکلی نداره ولی این کد برای زمانی که تعداد کنترل ها کم باشه همون طور که خودتون گفتید و میشه همه کنترل ها رو یکی
یکی چک کرد ولی اگه خوب به سوال من دقت کرده باشید 81 کنترل تکست باکس هست اینجا دیگه نمیشه از کد شما استفاده کرد . اول باید
بفهمید که کاربر توی کدوم تکست باکس مقدار وارد کرده که این مشکلی نیست مثلا فرض کنید باتوجه به چینش تکس باکس هایی که من توی
سوال گفتم توی تکست باکس 41 یک مقدار قرار داده بشه . حالا ما باید چک کنیم که در تکست باکس های 29،32،35،38،44،47،50،53
مقداری رو که توی تکست 41 نوشتیم وجود داره یا نه اگه داشت که رنگ تکس 41 قرمز میشه واگه نه که سفید . الآن ما فقط ستون مورد نظر رو
چک کردیم در حالی که باید سطر مورد نظر و همچنین بلوک مورد نظر رو هم چک کنیم . اگه توی تکس باکس 41 مقداری وارد شده باشه سطر و
ستون و بلوک هایی که باید چک بشه مثل زیر میشه :
سطر : 13،14،15،40،42،67،68،69
ستون : 29،32،35،38،44،47،50،53
بلوک : 37 ، 38 ، 39 ، 40 ، 42 ، 43 ، 44 ، 45
فکر کنم که دیگه خوب توضیح داده باشم و فهمیده باشید که چی میخوام

IP007
27-10-2010, 16:16
من خیلی شفاف توضیح دادم!
معلومه اشراف درستی بر دستورات c# ندارین، توصیه میکنم کتابی رو در این زمینه مطالعه کنین

water_lily_2012
27-10-2010, 16:38
اگر اشتباه نکنم شما می خواهید برنامه جدول سودوکو بنویسید.
درسته.

shadmehrshadow1
27-10-2010, 17:37
بله . تقریبا کامل هست و مونده همین قسمتش .

و اینکه و دارم توی vb.net می نویسم نه توی C# .

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

IP007
27-10-2010, 18:57
دوست من ، سی شارپ و ویبی هیچ فرقی ندارن، جوابتون با دوستان، من همون حاشیمو میرم

shadmehrshadow1
27-10-2010, 22:16
دوست من ، سی شارپ و ویبی هیچ فرقی ندارن، جوابتون با دوستان، من همون حاشیمو میرم


دوست من چرا ناراحت میشید .قصد بدی نداشتم.
مثلا همین پست یکی مونده به آخر رو که توضیح دادم کدشو بزارید .که برفرض تکست باکس 41 رو گفتم.
و حالا که سی شارپ و ویبی فرقی ندارن پس ویبی

عــــلی
28-10-2010, 07:23
سلام دوست عزیز.
شما باید از روش آرایه های دو بعدی استفاده کنید.
هرچند اصلاً حاضر نیستم 81 کادر متن رو فرمم ببینم ولی میگم براتون.

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدحالا کادر متن هارو به صورت لیست در سطر ها میریزیم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدخوب روی تابع زیر زیاد وقت فکر کردن نداشتم ولی درست کار میکنه شاید الگوریتمش کمی نادرست باشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
استفاده:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدموفق باشید.

IP007
28-10-2010, 09:37
حالا کادر متن هارو به صورت لیست در سطر ها میریزیم:
کد:
TextColumn.Add(new List<TextBox>() { textBox1, textBox2, textBox3, textBox4, textBox5, textBox6, textBox7, textBox8, textBox9 });
TextColumn.Add(new List<TextBox>() { textBox10, textBox11, textBox12, textBox13, textBox14, textBox15, textBox16, textBox17, textBox18 });
TextColumn.Add(new List<TextBox>() { textBox19, textBox20, textBox21, textBox22, textBox23, textBox24, textBox25, textBox26, textBox27 });
TextColumn.Add(new List<TextBox>() { textBox28, textBox29, textBox30, textBox31, textBox32, textBox33, textBox34, textBox35, textBox36 });
TextColumn.Add(new List<TextBox>() { textBox37, textBox38, textBox39, textBox40, textBox41, textBox42, textBox43, textBox44, textBox45 });
TextColumn.Add(new List<TextBox>() { textBox46, textBox47, textBox48, textBox49, textBox50, textBox51, textBox52, textBox53, textBox54 });
TextColumn.Add(new List<TextBox>() { textBox55, textBox56, textBox57, textBox58, textBox59, textBox60, textBox61, textBox62, textBox63 });
TextColumn.Add(new List<TextBox>() { textBox64, textBox65, textBox66, textBox67, textBox68, textBox69, textBox70, textBox71, textBox72 });
TextColumn.Add(new List<TextBox>() { textBox73, textBox74, textBox75, textBox76, textBox77, textBox78, textBox79, textBo


من این رو پیشنهاد میکنم، البته به نظرم، دو بعدی نیازی نیست:31:
ولی بدون دو بعدی بکم سخت تر میشه، پس بیخیلش:31:

این روش پیشنهاد میشه :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

عــــلی
28-10-2010, 12:40
من این رو پیشنهاد میکنم، البته به نظرم، دو بعدی نیازی نیست[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ولی بدون دو بعدی بکم سخت تر میشه، پس بیخیلش[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

این روش پیشنهاد میشه :
منم با حلقه اینکارو کردم:31: ولی برای اینکه خوانا تر بشه از اون حالت در آوردم.
یعنی اونهمه کد رو که میبینی ویژوال استادیو برام نوشته:31:.

IP007
28-10-2010, 14:04
منم با حلقه اینکارو کردم:31: ولی برای اینکه خوانا تر بشه از اون حالت در آوردم.
یعنی اونهمه کد رو که میبینی ویژوال استادیو برام نوشته:31:.

در این که شکی نیست،:10:
میخواستم، دوستمون هم اگه بلد نیست، این روش رو یاد بگیره:31:

---------- Post added at 02:04 PM ---------- Previous post was at 02:03 PM ----------

یادمه، این روش رو از خودت یاد گرفتم، شایدم از مدیر تالار :دی

shadmehrshadow1
29-10-2010, 16:29
کد شما c بود ومن تبدیل به ویبی کردمش شد این :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولی خطای زیر رو میده :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اگه مشکل حل شد که شد وگر نه خودم یه راه دیگه پیدا کردم و همونو استفاده میکنم

IP007
29-10-2010, 17:00
خوب شما نباید تبدیل میکردی :دی[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اشتباه تبدیل شده :دی[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

---------- Post added at 04:59 PM ---------- Previous post was at 04:56 PM ----------

چرا روشی که گفتمو تبدیل نمیکنی؟!


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

---------- Post added at 05:00 PM ---------- Previous post was at 04:59 PM ----------

این تبدیل شده ی روش دوم :



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

shadmehrshadow1
31-10-2010, 17:20
کد هایی که به شکل زیر بودند از Form به بعدش زیرش خط کشیده شده بود :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که وقتی تبدیل به زیرش کردم فقط زیر Form خط می کشه .:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توی کد دوم هم که در خط زیر خطا وجود داره :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته من قصد داشتم که به جای GetType دومی از TypeOf استفاده کنم ولی نشد .
یه سوال پیش اومده برام . شما این کد ها رو توی ویبی 2008 امتحان کردید ؟

IP007
31-10-2010, 22:05
نه ، من کلا با ویبی مشکل دارم :دی

shadmehrshadow1
01-11-2010, 10:54
ما یه آرایه به صورت زیر داریم :

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و توی این بخش ایندکس ها قرار میگیره :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا می خواهیم بفهمیم که کدوم خونه ها مقدار تکراری مثل هم دارن و به ما جواب رو بده . مثلا با توجه به مثال بالا دو جواب میده :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
که برای تکرار عدد 2 هست و

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای تکرار عدد یک .
حالا میشه اون خونه هایی رو که مقدار تکراری دارن رو رنگ متنشون رو قرمز کرد و بقیه رو سیاه .
مثلا برای تکرار عدد یک خونه های 1 و 9 رو به ما داده و ما از توی متغیر Inx میزیم و ایندکس تکست باکس ها رو در میاریم و رنگ متنشون رو تغییر میدیم . مثلا مثل زیر :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته ممکن این راه حل زیاد خوب نباشه ولی خوب .
اگه بتونید یه الگوریتمی چیزی برای پیاده سازی این راه هم بگید بد نیست .

عــــلی
02-11-2010, 07:39
سلام.
این که 18 تا بیشتر خونه نداره!!!
چطوری میخواین جواب بگیرین؟
شما باید یک آرایه دوبعدی تعریف کنید که 9 خونه داشته باشه.9 * 9 = 81.
آخر اون کد رو تبدیل کردین به VB؟

shadmehrshadow1
02-11-2010, 15:18
تبدیل شده ش رو گذاشتم . گفتم که ارروز میده.

بله فعلا 9 تا خونه هست نه 18 تا . اگه بشه این 9 خونه رو با این روش درست کنم بقیه رو هم درست میکنم.

shadmehrshadow1
04-11-2010, 22:45
کسی راهی پیدا نکرد