PDA

View Full Version : سوال: تعریف متغیر وشیی سراسری؟



user68
پنج شنبه 24 اردیبهشت 1388, 16:24 عصر
با سلام
چه طور میتونم یه متغیر که توی تمام فرم های پروژه قابل دسترسی باشه تعریف کنم و همچنین از یه شیی که توی یکی از فرما ایجاد شده توی فرمای دیگه هم استفاده کنم؟
با تشکر

مهدی رحیم زاده
پنج شنبه 24 اردیبهشت 1388, 16:46 عصر
برای متغییر می تونی اونو توی یک کلاس به صورت Public Static تعریف کنی و بعد هر جا که خواستی ازش استفاده کنی
موفق باشید

meysam_pro
پنج شنبه 24 اردیبهشت 1388, 17:18 عصر
اصولا در برنامه نویسی شی گرا این کار معنی نمیده!!
در مورد اصطلاحی به اسم Information Expert سرچ بزن.میتونی از کتاب applying UML and Patterns هم استفاده بکنی.

user68
جمعه 25 اردیبهشت 1388, 21:38 عصر
برای متغییر می تونی اونو توی یک کلاس به صورت Public Static تعریف کنی و بعد هر جا که خواستی ازش استفاده کنی
موفق باشید
میشه یک مثال بزنی چون من هرچی مینوشتم ارور میداد.


اصولا در برنامه نویسی شی گرا این کار معنی نمیده!!
در مورد اصطلاحی به اسم Information Expert سرچ بزن.میتونی از کتاب applying UML and Patterns هم استفاده بکنی.
دوست عزیز من زبانم خیلی خوب نیست ولی در کل منظور شما اینه که همچین چیزی وجود نداره؟! پس این پروژه هایی که از چند فرم استفاده میکنند چه طوریه؟

adinochestva
جمعه 25 اردیبهشت 1388, 23:46 عصر
مثال


public static class Utils
{
public static string hey()
{
return "hallo welt";
}
}
static class Program
{


static void Main()
{

MessageBox.Show(Utils.hey());

}
}

user68
جمعه 22 خرداد 1388, 12:12 عصر
اگه بخوایم یه متغیر سراسری که توی همه ی فرمها قابل استفاده باشه و بشه مقدارش رو تغییر داد چی کار میکنیم؟ چون این متغیر توی کلاس از نوع static و نمیشه مقدارش رو تغییر داد.

مهدی رحیم زاده
جمعه 22 خرداد 1388, 13:21 عصر
چرا نمیشه ؟
من خودم تعریف کردم و ازش هم استفاده می کنم و هرجا که لازم باشه مقدار دهی جدید میکنمش.
شما کجای کار اشکال دارین؟ اجرا کردین و به نتیجه نرسیدین؟
اگه آره کدی که نوشتین رو بزارید اینجا .
موفق باشید

user68
جمعه 22 خرداد 1388, 18:20 عصر
public static class Class1
{
public static string shomare = "111";
}
private void button1_Click(object sender, EventArgs e)
{
profileTableAdapter.Insert(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, Convert.ToDateTime(textBox6.Text));
profileTableAdapter.Fill(db1DataSet1.profile);

Class1.shomare =Convert.ToString(Convert.ToInt32(Class1.shomare ) + 1);
}
private void Form3_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'db1DataSet1.profile' table. You can move, or remove it, as needed.
this.profileTableAdapter.Fill(this.db1DataSet1.pro file);
textBox1.Text = Class1.shomare;
}
این خط های قرمز منظوره منه که وقتی فرم load میشه همیشه مقدار 111 روی توی textbox1 نشون میده. ومن میخوام در هربار بعد از فرم لود و زدن button 1 یکی به این عدد اضافه بشه که نمیشه.

SMRAH1
جمعه 22 خرداد 1388, 18:46 عصر
سلام

اینطوری باید بنویسی (اصلا به متغیر اضافه نمی کنی!):


public static class Class1
{
public static int shomare = 111;
}

private void button1_Click(object sender, EventArgs e)
{
profileTableAdapter.Insert(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, Convert.ToDateTime(textBox6.Text));
profileTableAdapter.Fill(db1DataSet1.profile);

Class1.shomare++;
Class1.shomare =Convert.ToString(Class1.shomare.ToString());
}
private void Form3_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'db1DataSet1.profile' table. You can move, or remove it, as needed.
this.profileTableAdapter.Fill(this.db1DataSet1.pro file);
textBox1.Text = Class1.shomare.ToString();
}

موفق باشی

user68
جمعه 22 خرداد 1388, 20:03 عصر
سلام اینکه میگید به متغیر اضافه نمیشه چرا؟مگه اشکالش چیه؟ واین کدی رو هم که نوشتید متاسفانه بازم جواب نمید البته من اینجوری نوشتم...


private void button1_Click(object sender, EventArgs e)
{
profileTableAdapter.Insert(textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, Convert.ToDateTime(textBox6.Text));
profileTableAdapter.Fill(db1DataSet1.profile);

Class1.shomare++;

}



private void Form3_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'db1DataSet1.profile' table. You can move, or remove it, as needed.
this.profileTableAdapter.Fill(this.db1DataSet1.pro file);
textBox1.Text = Class1.shomare.ToString ();
}

وبازم موقع اجرا همون 111 رو نوشته واگ button1 رو بزنم این پیغام رو میده
the change you requested to the table were not successful because they would creat duplicate values in the index ,primary key or relashtion ship. change the data in the fields or fields that contain duplicatedata,remove the index,or redefine the index to premit duplicate entrise and try again.

SMRAH1
جمعه 22 خرداد 1388, 20:09 عصر
سلام

دوشت من از هر اجرا تا اجرای دیگه همین مقدار است.به عبارت دیگه اگر الان اجرا کنی و چند فیلد اضافه کنی.بعد برنامه رو ببندی و دوباره اجرای کنی و بخوای دوباره چند مقدار دیگه اضافه بشه،این پیغام رو میده.
چرا؟
چون با هر بار اجرای این برنامه دوباره مقدار این متغیر همونی میشه که شما تعریف کردید یعنی 111 !
راه حل :
بهترین راه اینه که این عدد رو توی پایگاه دادت ذخیره کنی و بعد از هر بار اجرای برنامه این عدد رو (که در انتهای برنامه قبل ذخیره کردی) بخونی.
راه دیگه استفاده از Setting است که البته در موارد کلی توصیه نمیشه

موفق باشی