دریافت مقادیر از دیگر فرم ها

فرم دوم را به شکل زیر جهت تغییر در بزرگی و کوچگی حروف جعبه متن موجود در فرم اول تغییر دهید :
MDI-Forms-in-c# (8)

قصد ما این است که وقتی دکمه OK کلیک شد، متن موجود در جعبه متن فرم اول، بسته به گزینه انتخاب شده تغییر کند. مشکلی که با آن روبرو می‌شویم این است که جعبه متن در فرم اول قرار دارد و نمی‌توانیم آن را ببینیم و اگر بخواهیم به آن در فرم دوم دسترسی داشته باشیم با خطا مواجه می‌شویم. راه حل این مشکل این است که جعبه متن را به صورت زیر تعریف کنیم (کدهای زیر را به فرم اول اضافه کنید) :

public static TextBox tb = new TextBox();

کد بالا باعث ایجاد یک شئ TextBox به نام tb می‌شود. این کد را در پایین شئ ایجاد شده از فرم به صورت زیر قرار می‌دهیم :

public Form1()
{
    InitializeComponent();
}

Form2 secondForm = new Form2();
public static TextBox tb = new TextBox();

private void btnFormTwo_Click(object sender, EventArgs e)
{
    secondForm.Show();
}

به این نکته توجه کنید که ما کد مربوط به نمایش پیغام را حذف کردیم چون به آن احتیاجی نداریم. حال یک شئ TextBox داریم که می‌توانیم جعبه متن موجود در فرم اول را به آن تخصیص دهیم. در رویداد Load فرم اول کد زیر را اضافه کنید :

tb = txtChangeCase;

کد نهایی فرم اول به صورت زیر می‌باشد :

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    Form2 secondForm = new Form2();
    public static TextBox tb = new TextBox();

    private void btnFormTwo_Click(object sender, EventArgs e)
    {
        secondForm.Show();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        tb = txtChangeCase;
    }
}

هنگامی که فرم اول بارگذاری (Load) می‌شود، جعبه متن در فرم دوم قابل دسترسی می‌باشد. بر روی دکمه OK فرم دوم دو بار کلیک کرده و کد زیر را در داخل آن بنویسید :

string changeCase = Form1.tb.Text;

در کد بالا یک متغیر رشته با نام changeCase ایجاد کرده‌ایم. محتوای این رشته جدید متن موجود در جعبه متن فرم اول است. برای تغییر در بزرگی و کوچکی حروف می‌توانیم از دو متد Uppercase و Lowercase به صورت زیر استفاده کنیم :

changeCase = changeCase.ToUpper();
changeCase = changeCase.ToLower();

متاسفانه سی شارپ دارای متدی برای بزرگ کردن فقط حرف اول رشته نمی‌باشد. یعنی اگر بخواهیم رشته‌ای داشته باشیم که حرف اول هر کلمه آن به صورت بزرگ و بقیه حروف به صورت کوچک نمایش داده شوند (مانند This Is Proper Case)، متدی برای این کار وجود ندارد. برای این منظور باید دو فضای نام زیر را به قسمت فضاهای نامی اضافه کنیم :

using System.Globalization;
using System.Threading;

حال که این دو فضای نامی را اضافه کردیم، کار بعدی ایجاد یک شئ CultureInfo می‌باشد:

CultureInfo properCase = Thread.CurrentThread.CurrentCulture;

CurrentCulture به ما اطلاعاتی درباره زبان یک کشور خاص ارائه می‌دهد. شئ CultureInfo را properCase می‌نامیم. این پایان کار نیست. ما به یک شئ TextInfo هم احتیاج داریم و آن را textInfoObject می‌نامیم :

TextInfo textInfoObject = properCase.TextInfo;

این شئ دارای متدی با نام ToTitleCase می‌باشد که ما برای تغییر در بزرگی و کوچکی حروف یک رشته به آن احتیاج داریم.

changeCase = textInfoObject.ToTitleCase(changeCase);

مقدار changeCase در کد بالا همان متن موجود در فرم اول می‌باشد. برای فهمیدن اینکه کدام گزینه در فرم دوم انتخاب شده به یک سری دستور if…else احتیاج داریم :

if (radioButton1.Checked == true)
{
    changeCase = changeCase.ToUpper();
}
else if(radioButton2.Checked == true)
{
    changeCase = changeCase.ToLower();
}
else if (radioButton3.Checked == true)
{
    CultureInfo ProperCase = Thread.CurrentThread.CurrentCulture;
    TextInfo textInfoObject = ProperCase.TextInfo;

    changeCase = textInfoObject.ToTitleCase(changeCase);
}

در کدهای بالا ما فقط چک کرده‌ایم که کدام دکمه رادیویی انتخاب شده و سپس با توجه به آن عمل تبدیل حروف را انجام می‌دهیم. برای اضافه کردن متن تبدیل شده به جعبه متن فرم اول کد زیر را می‌نویسیم :

Form1.tb.Text = changeCase;

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

private void btnOK_Click(object sender, EventArgs e)
{
    string changeCase = Form1.tb.Text;

    if (radioButton1.Checked == true)
    {
        changeCase = changeCase.ToUpper();
    }
    else if (radioButton2.Checked == true)
    {
        changeCase = changeCase.ToLower();
    }
    else if (radioButton3.Checked == true)
    {
        CultureInfo ProperCase = Thread.CurrentThread.CurrentCulture;
        TextInfo textInfoObject = ProperCase.TextInfo;

        changeCase = textInfoObject.ToTitleCase(changeCase);
    }
    Form1.tb.Text = changeCase;

    this.DialogResult = DialogResult.OK;
}

برنامه را اجرا و بر روی دکمه برای نمایش فرم دوم کلیک کنید. بعد از نمایان شدن فرم دوم گزینه Uppre Case را انتخاب کرده و بر روی دکمه OK کلیک کنید.

MDI-Forms-in-c# (7)
مشاهده می‌کنید که متن موجود در فرم اول به صورت بزرگ نمایش داده می‌شود.