PDA

View Full Version : چاپ کردن متن از کنترلهای user control ایجاد شده



harani
شنبه 20 خرداد 1391, 17:15 عصر
با سلام من یک user control به شکل زیر ساختم و آن را build کردم :


88071

سپس یکی از آن را روی فرم اصلی (فرم info) قرار دادم پس از اجرا با فشردن دکمه ی افزودن چندین user control به فرم اضافه میشود . حال من میخواهم کاربر با فشردن دکمه Save متن هر کنترل که شامل متن دکمه رادیویی انتخاب شده متن انتخابی از کامبو باکس و متن داخل تکست باکس را در یک خط کنترل richbox که واقع در فرم report است نمایش داده شود . لطفاً با کد و جامع توضیح دهید .


88069

88070


با سپاس از شما

m.akar
شنبه 20 خرداد 1391, 19:14 عصر
شما ابتدا باید برای user control خود یک تابع public بنویسید که متنی را که می خواهید از آن user control ایجاد شود را بازگرداند. چون هر user control خودش می داند مقدار فیلدهایش چقدر است و می تواند یک خروجی string از مقادیر فیلد های خود بازگرداند.

چیزی شبیه به این تابع(در استفاده از this دقت کنید حتما استفاده کنید):

public string ReturnString()
{
return this.textBox1.Text + " " + (this.checkBox1.Checked ? "true" : "false");
}
( this در این تابع به معنای user control جاری است)

بعد در رویداد کلیک دکمه save خود تمامی کنترل های موجود در فرم خود را بررسی کنید و آنهایی که از نوع user control شما هستند را به صورت مستقیم نوع دهی کنید و تابعی که string آن user control را باز می گرداند فراخوانی کنید و مقدار بازگشتی تابع را در آرایه یا لیستی قرار دهید.
اطلاعات موجود در آرایه یا لیست اطلاعاتی است که می توانید در richtext خود نمایش دهید:

private void button1_Click(object sender, EventArgs e)
{
UserControl1 usercon=new UserControl1();
List<string> returnStrings = new List<string>();
foreach (Control con in this.Controls)
{
if (con.GetType() == usercon.GetType())
{
returnStrings.Add( ((UserControl1)con).ReturnString());
}

}
}
( this در این تابع به معنای فرم جاری است)

m.akar
شنبه 20 خرداد 1391, 23:48 عصر
شما می توانید مقادیر دریافتی از تابع user control خود را درون یک string عمومی قرار دهید و در جاهای دیگر از آن استفاده کنید.

public string ReturnString = "";
private void button1_Click(object sender, EventArgs e)
{
UserControl1 usercon = new UserControl1();

foreach (Control con in this.Controls)
{
if (con.GetType() == usercon.GetType())
{
ReturnString += ((UserControl1)con).ReturnString() + "\r\n";
}

}
}
متغیر ReturnString در این تابع دارای مقادیر کل user control ها است و \r \n استفاده شده در کد برای ایجاد خط جدید در richtextbox استفاده می شود. در اصل اگر شما ReturnString را درون فیلد Text مربوط به RichTextBox بریزید اطلاعات هر یک از user control ها در یک خط از richtextbox نمایش داده می شود.

harani
یک شنبه 21 خرداد 1391, 11:40 صبح
شما می توانید مقادیر دریافتی از تابع user control خود را درون یک string عمومی قرار دهید و در جاهای دیگر از آن استفاده کنید.

public string ReturnString = "";
private void button1_Click(object sender, EventArgs e)
{
UserControl1 usercon = new UserControl1();

foreach (Control con in this.Controls)
{
if (con.GetType() == usercon.GetType())
{
ReturnString += ((UserControl1)con).ReturnString() + "\r\n";
}

}
}
متغیر ReturnString در این تابع دارای مقادیر کل user control ها است و \r \n استفاده شده در کد برای ایجاد خط جدید در richtextbox استفاده می شود. در اصل اگر شما ReturnString را درون فیلد Text مربوط به RichTextBox بریزید اطلاعات هر یک از user control ها در یک خط از richtextbox نمایش داده می شود.

پاسخ درست است اما هیچ متنی در richbox ثبت نمیشود .