کنترل TextBox

کنترل TextBox ابتدایی‌ترین وسیله برای ورود اطلاعات در یک فرم ویندوزی می‌باشد. این کار را با تایپ آنها (اطلاعات) در TextBox انجام می‌دهید. متنی که شما تایپ می‌کنید، به وسیله خاصیت Text این کنترل، قابل دسترسی است. در مثال زیر نحوه استفاده از TextBox نشان داده شده است. یک پروژه ایجاد کنید و کدهای زیر را در بخش XAML بنویسید:

 1: <StackPanel Margin="10">
 2:     <Label Content="First Number"/>
 3:     <TextBox x:Name="textBoxFirstNumber" Height="23"/>
 4:     <Label Content="Second Number"/>
 5:     <TextBox x:Name="textBoxSecondNumber" Height="23"/>
 6:     <Label x:Name="labelSum" Content="Sum = "/>
 7:     <Button x:Name="buttonAdd" Content="Button" Width="100" Click="buttonAdd_Click"/>
 8: </StackPanel>

برنامه از شما می‌خواهد که دو عدد را وارد کنید و با زدن دکمه، جمع آنها را با استفاده از یک برچسب (label) به شما نشان می‌دهد. در خطوط 3 و 5 کد بالا دو جعب متن به نام های textBoxFirstNumber و textBoxSecondNumber ایجاد کرده‌ایم. قرار است که این جعبه‌های متن اعداد را از کاربر بگیرد و کاربر با زدن دکمه، جمع آنها را در کنترل Label خط 6 نمایش دهد:

نام دکمه ما buttonAdd است در نتیجه در رویداد Click آن نام کنترل کننده رویداد را به صورت buttonAdd_Click می‌نویسیم (خط 7) تا به صورت خودکار در قسمت کدنویسی این متد ایجاد شود. البته می‌توانید با دوبار کلیک بر روی دکمه هم تمام کارها را به ویژوال استودیو بسپارید تا کنترل کننده رویداد را برای شما ایجاد کند. وارد قسمت کدنویسی شده و کدهای زیر را بنویسید:

private void buttonAdd_Click(object sender, RoutedEventArgs e)
{
    int num1 = Int32.Parse(textBoxFirstNumber.Text);
    int num2 = Int32.Parse(textBoxSecondNumber.Text);
    int sum = num1 + num2;

    labelSum.Content = "Sum = " + sum;
}

کدهای نوشته شده در داخل textBoxFirstNumber و textBoxSecondNumber با استفاده از متد ()Parse کلاس Int32 به نوع صحیح تبدیل شده و در متغیرهای مربوطه ذخیره می‌شوند. ما به این تبدیل نیاز داشتیم چون خاصیت Text از نوع رشته است. سپس جمع آنها محاسبه می‌شود. و در نهایت مقدار جمع به خاصیت Content برچسب labelSum نسبت داده می‌شود. یکی از مفیدترین رویدادهای تکست باکس، رویداد TextChanged است. این رویداد زمانی رخ می‌دهد که متن داخل تکست باکس دستکاری شود (تغییر کند). برنامه‌ی زیر یک مثال از کاربرد این رویداد نشان می‌دهد. یک برنامه دیگر را ایجاد و یک تکست باکس (Text Box) و یک برچسب (Label) به آن اضافه کنید:

<StackPanel Margin="10">
    <TextBox x:Name="textBox1" Height="23"/>
    <Label x:Name="label1" Content=""/>
</StackPanel>

حال بر روی کنترل texrBox دوبار کلیک کرده تا به صورت خودکار کنترل کننده رویداد TextChanged برای شما ایجاد شود. سپس کدهای زیر را در داخل بدنه این کنترل کننده رویداد بنویسید:

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
    label1.Content = textBox1.Text;
}

حالا برنامه را اجرا کرده و هر چیزی را که می‌خواهید درون تکست باکس بنویسید. مشاهده می‌کنید که هر چیزی که شما درون تکست باکس می‌نویسید دقیقاً به همان صورت بر روی بر چسب نوشته می‌شود:

زمانی که متن تکست باکس دستکاری می‌شود، Event Handler اجرا شده و هر متنی را که درون تکست باکس قرار دارد را دقیقاً به همان صورت درون برچسب (label1) قرار می‌دهد. به طور پیش فرض، هر تکست باکس فقط می‌تواند یک خط را درون خود جای دهد. برای اینکه چند خط درون تکست باکس قرار بگیرد، می‌توانید مقدار خاصیت TextWrapping آنرا برابر با wrap قرار دهید:

<TextBox Height="100" TextWrapping="Wrap"/>

البته عملکرد این خاصیت زمانی مشخص می‌شود که شما ارتفاع TextBox را بیشتر کنید. زمانی که مقدار خاصیت TextWrapping را برابر با wrap قرار می‌دهید، نشانگر ماوس زمانی که به انتهای قسمت راست تکست باکس می‌رسد به طور اتوماتیک به خط بعد می‌رود. اگر مقدار آن برابر با NoWrap باشد، متن در همان خط ادامه پیدا می‌کند. در مورد خاصیت TextWrapping، در بخش‌های قبلی و در کنترل TextBlock مفصل صحبت کردیم. برای اطلاعات بیشتر به آن بخش مراجعه کنید. خاصیت AcceptsReturn باعث می‌شود TextBox ما چند خطی شود و کاربر با فشردن دکمه Enter می‌تواند به خط بعدی برود.

<TextBox Height="100" AcceptsReturn="True"/>

یکی از ویژگی‌هایی که می‌توانید به کنترل TextBox خود اضافه کنید، بررسی املای زبان است. زبان‌هایی که در حال حاضر پشتیبانی می‌شود عبارتند از: انگلیسی، فرانسوی، آلمانی و اسپانیایی. به مثال زیر توجه کنید:

<TextBox Height="23" SpellCheck.IsEnabled="True" Language="en-US"/>

برای فعال کردن ویژگی بررسی املای کلمات، خاصیت SpellCheck.IsEnabled را با مقدار true به TextBox خود اصافه کردیم. همچنین با استفاده از خاصیت Language، زبان مورد بررسی را انگلیسی (en-US) تعیین کردیم. برنمه را اجرا کرده و چند کلمه اشتباه انگلیسی در داخل آن بنویسید:

حال اگر بر روی کلمه اشتباه راست کلیک کنید منویی از لغات مشابه را برای شما نمایش می‌دهد.

عملکرد این ویژگی، مشابه نرم افزار ورد است و زیر کلماتی که املای نادرستی دارند یک خط قرمز می‌کشد. می‌توان متنی را به کنترل TextBox نسبت داد و آن را به صورت فقط خواندنی درآورد. برای این کار از خاصیت IsReadOnly استفاده می‌شود که دو مقدار true و false می‌گیرد:

<TextBox Height="23" IsReadOnly="True" Text="Read Only TextBox"/>

وقتی که یه TextBox را به صورت فقط خواندنی در می‌آوریم نمی‌توان متن داخل آن را تغییر داد. یکی دیگر از ویژگی‌های TextBox این است که به صورت پیش فرض سه منوی Copy ،Cut و Paste را در اختیار شما قرار می هد و لازم نیست برای نمایش این منو هیچ کار خاصی انجام دهید: