PDA

View Full Version : سوال: مشکل در خواندن از TextBox



ali_up1
دوشنبه 12 تیر 1391, 14:19 عصر
سلام دوستان
وقتی یک TextBox میندازیم رو فرم از همه جا فرم به اون TextBox دسترسی داریم
مثلا میشه string str=TextBox1.Text
من ی کلاس ساختم جندتا textbox توش فقط تعریف کردم وتوی متد add بهشون size و point دادم درست مثل designer فرم و در اخر به TabPage اضافه کردم وموقع run درست سر جاشون هستن.
ولی موقع ای که توی متدی string str=TextBox1.Text رو میخونم اصلا مقدار نداره
چطور تو فرم میشه ولی من تو کلاسم نمیتونم؟
ممنون از راهنمایی تون

Beginner2013
دوشنبه 12 تیر 1391, 14:30 عصر
سلام دوستان
وقتی یک TextBox میندازیم رو فرم از همه جا فرم به اون TextBox دسترسی داریم
مثلا میشه string str=TextBox1.Text
من ی کلاس ساختم جندتا textbox توش فقط تعریف کردم وتوی متد add بهشون size و point دادم درست مثل designer فرم و در اخر به TabPage اضافه کردم وموقع run درست سر جاشون هستن.
ولی موقع ای که توی متدی string str=TextBox1.Text رو میخونم اصلا مقدار نداره
چطور تو فرم میشه ولی من تو کلاسم نمیتونم؟
ممنون از راهنمایی تون
سلام،وقتی شما میگید
TextBox1.Text
این یعنی
this.TextBox1.Text

اگر شما یه نمونه از فرمتون ساختید مثلا به اسم M پس باید بجای this بگید M.
اما اگر می خواید براحتی بگید TextBox1 باید کدتون رو همون کلاس فرمی که نوشتید قرار بدید،اگر دقت کنید کلاسی که IDE تون براتون میسازه ،یه کلمه کلیدی partial داره و این یعنی این کلاس 2 یا چند قسمته هست،که قسمت دیگه در designer فرمتون هست.

ali_up1
دوشنبه 12 تیر 1391, 14:47 عصر
سلام،وقتی شما میگید
TextBox1.Text
این یعنی
this.TextBox1.Text

اگر شما یه نمونه از فرمتون ساختید مثلا به اسم M پس باید بجای this بگید M.
اما اگر می خواید براحتی بگید TextBox1 باید کدتون رو همون کلاس فرمی که نوشتید قرار بدید،اگر دقت کنید کلاسی که IDE تون براتون میسازه ،یه کلمه کلیدی partial داره و این یعنی این کلاس 2 یا چند قسمته هست،که قسمت دیگه در designer فرمتون هست.

blogeen (http://barnamenevis.org/member.php?235308-blogeen) عزیز من از formام object نساختم فقط به پروزه ام کلاس اضافه کردم ک روی TabPage هر کلاسی ک لازم شد رو صدا میزنم
در ضمن عرض کردم دقیقا همون کاری رو کردم ک designer انجام میده

Saeed_m_Farid
دوشنبه 12 تیر 1391, 16:28 عصر
blogeen (http://barnamenevis.org/member.php?235308-blogeen) عزیز من از formام object نساختم فقط به پروزه ام کلاس اضافه کردم ک روی TabPage هر کلاسی ک لازم شد رو صدا میزنم
در ضمن عرض کردم دقیقا همون کاری رو کردم ک designer انجام میده
اگر دقیقاً همون کاری رو کرده باشید که Designer انجام میده، یعنی اینکار رو انجام دادین:

اما اگر می خواید براحتی بگید TextBox1 باید کدتون رو همون کلاس فرمی که نوشتید قرار بدید،اگر دقت کنید کلاسی که IDE تون براتون میسازه ،یه کلمه کلیدی partial داره و این یعنی این کلاس 2 یا چند قسمته هست،که قسمت دیگه در designer فرمتون هست.
همونطورکه blogeen (http://barnamenevis.org/member.php?235308-blogeen) بدرستی اشاره کردن، باید به partial دقت کنید! ولی خوب در نهایت باید کدتون رو اینجا قرار بدین تا ببینیم مشکل از کجاست؟ چون شما هیچوقت نمی‌تونید: "دقیقاً همون کاری رو کرده باشید که Designer انجام میده" چرا؟ چون کدهای Designer درون سازی شدن! حداکثر می‌تونید شبیه‌سازی انجام بدین! مثلاً یه لیست جنریک داشته باشید که مخزن TextBox های شما باشه؛ شما از کجا می‌دونید چطوری Designer آخرین نام رو انتخاب میکنه؟ TabIndex رو اختصاص میده؟ یا با تغییر Property ها در زمان طراحی (Design Time) مستقیماً در InitializeComponent مقداردهی انجام میشه و EventHandler انتساب پیدا می‌کنه و ... | فکر کنم یه جای کار دارید اشتباه می‌کنید و تشخیص این بدون کد، غیرممکن هست، کلاس بسیار ساده با یک تابع و فقط جهت آموزش برای کار شما، از دید من میشه همچین چیزی:
partial class Form1 : Form
{
private List<TextBox> dynamicTextBoxs =
new List<TextBox>();
//
// button_n
//
private void addTextBoxOnMyForm(
string name,
string text,
int x,
int y,
int width,
int height,
int tabIndex /* , ... and what ever else...*/)
{
TextBox instance = new TextBox();
this.SuspendLayout();

instance.Location = new System.Drawing.Point(x, y);
instance.Name = name;
instance.Size = new System.Drawing.Size(width, height);
instance.TabIndex = tabIndex;
instance.Text = text;
//...
//instance.Click += new System.EventHandler(this.xxxx_Click);
this.dynamicTextBoxs.Add(instance);
this.Controls.Add(this.dynamicTextBoxs.LastOrDefau lt());
this.ResumeLayout(false);
this.PerformLayout();
}
}

و نحوه استفاده، مثلاً :
addTextBoxOnMyForm("Text_n", "Salam", 400, 200, 100, 20, 10);
ولی کلاً بنظرم اینکارها عاقلانه نیست، امکان عدم مدیریت صحیح منابع و ... بوجود میاد و بعداً براتون مشکل ساز میشه!

ali_up1
دوشنبه 12 تیر 1391, 17:30 عصر
اگر دقیقاً همون کاری رو کرده باشید که Designer انجام میده، یعنی اینکار رو انجام دادین:

همونطورکه blogeen (http://barnamenevis.org/member.php?235308-blogeen) بدرستی اشاره کردن، باید به partial دقت کنید! ولی خوب در نهایت باید کدتون رو اینجا قرار بدین تا ببینیم مشکل از کجاست؟ چون شما هیچوقت نمی‌تونید: "دقیقاً همون کاری رو کرده باشید که Designer انجام میده" چرا؟ چون کدهای Designer درون سازی شدن! حداکثر می‌تونید شبیه‌سازی انجام بدین! مثلاً یه لیست جنریک داشته باشید که مخزن TextBox های شما باشه؛ شما از کجا می‌دونید چطوری Designer آخرین نام رو انتخاب میکنه؟ TabIndex رو اختصاص میده؟ یا با تغییر Property ها در زمان طراحی (Design Time) مستقیماً در InitializeComponent مقداردهی انجام میشه و EventHandler انتساب پیدا می‌کنه و ...!

ممنونم از جوابتون خیلی کامل بود منظورمنم از کار designer همین
یعنی properties , Event هایی ک نیاز بود رو مقدار دهی کردم و بعد add کردم
نیازی هم به لیست نیست چون تعداد controlها مشخص است
متاسفانه نمیتونم کد رو بزارم چون برای run کردنش باید کل پروژه بزارم!!!!!
به هر حال صددرصد مشکل از برنامه نویس است و بس