PDA

View Full Version : استفاده از یه کلاس در button؟؟؟



hossein0112
سه شنبه 10 اردیبهشت 1392, 17:04 عصر
سلام

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

saeed zarei
سه شنبه 10 اردیبهشت 1392, 17:14 عصر
خب این کار بستگی به این داره که ورودی و خروجی کلاست چی باشه
به نظرم بهتره کل کلاس یا خط تعریف متد کلاست رو بزاری تا سریعتر کمکت کنیم

hossein0112
سه شنبه 10 اردیبهشت 1392, 17:25 عصر
خط تعرف چطوری بزارم یعنی ایجوری؟؟

buuble bubl=new bubble();
کد دیگه ای هست بگین؟؟؟

saeed zarei
سه شنبه 10 اردیبهشت 1392, 17:32 عصر
نه - منظورم اینه که کلاس رو چطوری تعریف کردین

مثلا :
public class test
{
public int[] sort(int[] arr)
{
Array.Sort(arr);
return arr;
}
}
این کلاس یه متد Sort داره که ارایه ای از اعداد رو به عنوان ورودی گرفته و مرتب میکنه و بعد میفرسته به خروجی
حالا طریقه استفادش ، وقتی روی دکمه دابل کلیک کردی این کد رو بنویس :
test t = new test();
t.sort(ارسال ارایه به عنوان ورودی);

hossein0112
سه شنبه 10 اردیبهشت 1392, 17:47 عصر
ممنون قسمت اخر ارسال ارایه به عنوان ورودی یعنی چی چی بزارم؟؟ من عددام تو لیست بوکس هستش همونجا میخوام مرتب شن
؟؟

saeed zarei
سه شنبه 10 اردیبهشت 1392, 18:13 عصر
خب اون اعداد رو از کجا وارد کومبو باکس کردی ؟ از طریق کد نویسی یا در محیط طراحی فرم ؟
در هر صورت به نظرم این کار رو انجام بدی بهتره :
ابتدا یه ارایه درست کن و اعدادت رو بریز داخلش و بعد اونا رو مرتب کن و در نهایت به کامبو باکست Bind کن ، قسمت اول رو که توضیح دادم ، اینم قسمت اخر (همون Bind کردن)
int[] aa={10 , 12 , 2 , 5 , 25 , 33};
test t = new test();
t.sort(aa);
comboBox1.DataSource = aa;

کمک خواستی بگو

hossein0112
سه شنبه 10 اردیبهشت 1392, 18:22 عصر
مرسی ...من عددم را از فرم ریختم یه تکس باکس دارم یکی یکی عدد میدم میره تو لیست باکس حالام میخوام لیست باکس و مرتب کنم ممنون میشم کمک کنی

saeed zarei
سه شنبه 10 اردیبهشت 1392, 19:10 عصر
این یه نمونه هست . مشکل داشتی بگو
http://uploadtak.com/images/j9836_WindowsFormsApplicat.zip

hossein0112
سه شنبه 10 اردیبهشت 1392, 20:08 عصر
متاسفانه نشد... اگه میشه یه مثال از کلاس بزن

saeed zarei
سه شنبه 10 اردیبهشت 1392, 20:51 عصر
میخای یه پروژه جدید با کنترل هایی که میخای داخلش باشه ، درست کن و بفرست تا برات درست کنم . راستش جوابهات خیلی مبهمه . مشکلتو کامل با کد بنویس تا کمک کنیم

hossein0112
سه شنبه 10 اردیبهشت 1392, 21:26 عصر
تو این تایپک هم شکل فرمم هست هم کلاسی که نوشتم.فقط یه کد میخوام تو باتن مرتب کردن بزارم

http://barnamenevis.org/showthread.php?396135-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%DA%A9%D9%84%D8%A7%D8%B3-%D9%85%D8%B1%D8%AA%D8%A8-%D8%B3%D8%A7%D8%B2%DB%8C%D8%9F%D8%9F%D8%9F-%28%D8%AE%D9%88%D8%A7%D9%87%D8%B4%D8%A7-%DA%A9%D9%85%DA%A9-%DA%A9%D9%86%DB%8C%D9%86%29

arash691
سه شنبه 10 اردیبهشت 1392, 21:29 عصر
بیا دوست عزیز : از الگوریتم bubbel sort برای مرتب سازی استفاده کردم ... بجاش میتونی اون متد خودت رو بنویسی و استفاده کنی ...


void Bubbel_Sort(int[] array)
{
int temp;
for (int i = array.Length - 1; i > 0; i--)
for (int j = 0; j < i; j++)
{
if (array[j] > array[j + 1])
{
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
for (int k = 0; k < array.Length; k++)
{
listBox1.Items.Add(array[k]);
}

}
int[] a = new int[5];
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
a[i] = int.Parse(textBox1.Text);
textBox1.Clear();
listBox1.Items.Clear();
Bubbel_Sort(a);
i++;

}

hossein0112
سه شنبه 10 اردیبهشت 1392, 21:44 عصر
دستت درد نکنه داداش ولی این خطو ارور میده


a[i] = int.Parse(textBox1.Text);




Input string was not in a correct format.

arash691
سه شنبه 10 اردیبهشت 1392, 21:49 عصر
دستت درد نکنه داداش ولی این خطو ارور میده


a[i] = int.Parse(textBox1.Text);




Input string was not in a correct format.


مقداری که وارد میکنی از نوع عدد صحیح نیست که همچین خطایی میده ... دقت کن ارایه از نوع اعداد صحیح تعریف شده و عدد صحیح دریافت میکنه

saeed zarei
سه شنبه 10 اردیبهشت 1392, 22:00 عصر
فقط باید متغیر i رو بیرون تابع و به صورت Public تعریف کنی . چون محل قرار گرفتن عدد بعدی به ارایه a رو مشخص میکنه . که صددرصد به دلیل سریع جواب دادن این اشتباه کوچیک رو کردی

میتونی از این کد تو رویداد KeyPress تکست باکست استفاده کنی که کاربر نتونه غیر عدد چیزی وارد کنه . ولی حتما تبدیل رو زمانی انجام بده که باکست خالی نباشه که برای اون هم میتونی از خط زیر استفاده کنی :
if (char.IsDigit(e.KeyChar) || e.KeyChar == (char) Keys.Back)
e.Handled = false;
else
e.Handled = true;

اینم برای اینکه اگه باکس خالی بود خطا نده :
int sTemp = 0; int.TryParse(txtNumber.Text, out sTemp);

hossein0112
سه شنبه 10 اردیبهشت 1392, 22:07 عصر
دستت درد نکنه حل شد

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

saeed zarei
سه شنبه 10 اردیبهشت 1392, 22:24 عصر
اول یه نمونه از کلاست میسازی و بعد از اون استفاده میکنی :

TestClass tc = new TestClass() ;
tc.Sort(arr(;

hossein0112
سه شنبه 10 اردیبهشت 1392, 22:30 عصر
همین کارو میکنم ولی این ارورو میده

Error 1 'jostejo.bubble' does not contain a definition for 'sort' and no extension method 'sort' accepting a first argument of type 'jostejo.bubble' could be found (are you missing a using directive or an assembly reference?) F:\Program Files\Microsoft Visual Studio 10.0\EJRAEI\jostejo\jostejo\Form1.cs 27 18 jostejo

saeed zarei
سه شنبه 10 اردیبهشت 1392, 22:55 عصر
شما اومدی از تابع Sort که من نوشتم استفاده کردی . به جای TestClass نام کلاس خودت و به جای Sort نیز نام تابع خودت باید بزاری . حتما قبل از نام کلاس و تابع از کلمه Public استفاده کن . چون کلاس و تابع به طور پیش فرض Private میشن و دسترسی بهشون نداری

hossein0112
سه شنبه 10 اردیبهشت 1392, 23:10 عصر
میدونم این کلاس منه ببین درسته؟؟؟




namespace jostejo
{
public class bubble
{
public void buuble(int[] temp, int len)
{
int i, j, item;
for (i = len - 1; i > 0; i--)

for (j = 0; j < i; j++)

if (temp[j] > temp[j + 1])
{
item = temp[j];
temp[j] = temp[j + 1];
temp[j + 1] = item;


}
}
}
}



خوب حالا میخوام تو باتن کد بنویسم چی بنویسم ؟؟
طبق همون فرم قبلی عدد از تکست باکس بگیره تو لیست باکس بزاره بعدم سورت

saeed zarei
سه شنبه 10 اردیبهشت 1392, 23:19 عصر
تو این ادرس http://barnamenevis.org/showthread.php?396135-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%DA%A9%D9%84%D8%A7%D8%B3-%D9%85%D8%B1%D8%AA%D8%A8-%D8%B3%D8%A7%D8%B2%DB%8C%D8%9F%D8%9F%D8%9F-(%D8%AE%D9%88%D8%A7%D9%87%D8%B4%D8%A7-%DA%A9%D9%85%DA%A9-%DA%A9%D9%86%DB%8C%D9%86)&p=1757392&viewfull=1#post1757392 بهت که گفتم تابع تغییر کرده (طبق تعریف جدید arash691 )
حالا فقط میمونه استفادش که اونم راحته

bubble b = new bubble();
b.buuble(نام ارایه جهت مرتب سازی);


اگه مشکل داشتی کل پروژه رو بزار تا برات درست کنم

hossein0112
سه شنبه 10 اردیبهشت 1392, 23:39 عصر
http://up.toca.ir/images/ewue10fpqeqs972hkm.rar

اگه میشه درست کن ممنون

saeed zarei
چهارشنبه 11 اردیبهشت 1392, 00:02 صبح
اگه مشکل داشتی بگو ، البته صبح جواب میدم
http://uploadtak.com/images/i389_jostejo.zip
التماس دعا

hossein0112
چهارشنبه 11 اردیبهشت 1392, 17:16 عصر
سلام دستت درد نکنه ولی یه مشکایه من هر ععدی اضافه میکنم 0 نشون میده هر کاری کردم درست نشد علتش چیه؟؟؟

saeed zarei
چهارشنبه 11 اردیبهشت 1392, 17:37 عصر
من دوباره اونو تست کردم . فقط زمانی که هیچ عددی وارد نکنی یعنی باکست خالی باشه ، صفر وارد میشه که با یه شرط میتونی جلوی این کار هم بگیری
شاید شما باز روی اون تغییراتی رو اعمال کردید

hossein0112
چهارشنبه 11 اردیبهشت 1392, 17:52 عصر
حل شد خیلی ممنون

میشه فرق int.parse با int.tyeparse رو بگی؟؟


int.TryParse(textBox1.Text, out sTemp);

کد بالا out stemp چیکار میکنه؟؟

saeed zarei
چهارشنبه 11 اردیبهشت 1392, 18:11 عصر
int.parse : رشته ورودی رو به عدد تبدیل میکنه و اگه نتونست بهت خطا میده
int.tyeparse : رشته ورودی رو به عدد تبدیل میکنه و اگه نتونست تبدیل کنه دیگه خطایی دریافت نمیکنی
در هر صورت شما باید مقدار تبدیل شده رو یه جا دخیره کنی ، که من اونو تو یه متغییر به نام sTemp گذاشتم . و TryParse اگه تونس رشته رو تبدیل کنه اونو میریزه تو sTemp و اگه نتونست کاری به این متغییر نداره ، یعنی متغییر sTemp مقدارش برابر مقدار اولیش که من بهش صفر دادم میمونه (خط کد اول)

int sTemp = 0;
int.TryParse(txtNumber.Text, out sTemp);

hossein0112
چهارشنبه 11 اردیبهشت 1392, 18:29 عصر
خیلی ممنون بابت کمکات :لبخندساده: