کد ساخت inputBox در c# با توضیح موجود است !

فاطمه طالبی

کاربر بیش فعال

در زبان سی شارپ اینپوت باکس وجود ندارد و شما باید با 1 فرم ،1 تکست باکس ، دو دکمه (اوکی ،کنسل )،و 1 لیبل آن را تولید کنید ،با این کدها اینپوت باکس تولید میشه:
این کد رو قبل از فرم لود بنویسین:

public static DialogResult InputBox(string title, string promptText, ref string value)
{
تعریف فرم جدید،لیبل جدید،تکست باکس ودکمه ها:
Form form = new Form();
Label label = new Label();
TextBox textBox = new TextBox();
Button buttonOk = new Button();
Button buttonCancel = new Button();

نسبت دادن تایتل(عنوان فرم) به خصوصیت تکست فرم:
form.Text = title;

نسبت دادن پرامت تکست(نوشته ی لیبل) به خصوصیت تکست لیبل:
label.Text = promptText;

نسبت دادن ولیو(مقدار تکست) به خصوصیت تکست تکست باکس:
textBox.Text = value;

buttonOk.Text = "OK";
buttonCancel.Text = "Cancel";

در اینجا اگه کاربر اوکی بزنه،نتیجه زدن دکمه اوکی=عملی که دکمه ی اوکی انجام میده :
buttonOk.DialogResult = DialogResult.OK;

اینم برای کنسله:
buttonCancel.DialogResult = DialogResult.Cancel;


اینجا موقعیت قرار گرفتن لیبل و تکست باکس و دکمه ها مشخص میشه:به این صورت که در خط زیر هرچقدر عدد اولی که نوشته شده(190) بیشتر باشد لیبل سمت راست تر قرار میگیرد.
عدد دوم در لیبل(20):بیشتر باشد=پایین تر
عدد سوم(372)وعدد چهارم(13) در لیبل رو نمیدونم باعث چه تغییری میشه چون وقتی تغییرشون میدم،هیچی نمیشه.
label.SetBounds(190, 20, 372, 13);


عدد اول در تکست باکس (12): بیشتر باشد=سمت راست تر
عدد دوم(36): بیشتر باشد=پایین تر
عدد سوم(372):کمتر باشد=سمت چپ تر
عدد چهارم(20):نمیدونم
textBox.SetBounds(12, 36, 372, 20);


عدد اول در دکمه اوکی و کنسل:کمتر باشد =سمت چپ تر
عدد دوم: بیشتر باشد=پایین تر
عدد سوم: طول دکمه است.
عدد چهارم: عرض دکمه است.
buttonOk.SetBounds(228, 72, 75, 23);
buttonCancel.SetBounds(309, 72, 75, 23);

label.AutoSize = true;
textBox.Anchor = textBox.Anchor | AnchorStyles.Right;
buttonOk.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

اندازه فرم اینپوت باکس رو مشخص میکنم،هر چه عددها بزرگتر باشند فرم بزرگتر است.عدد اول (396) طول فرم است. عدد دوم(107) عرض فرم است:
form.ClientSize = new Size(396, 107);

اضافه کردن کنترل ها(دکمه ها و تکست باکس و لیبل) به فرم اینپوت باکس:
form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });

در خط زیر عدد 10 هر چقدر بیشتر باشد، تکست باکس طویل تر میشود:
form.ClientSize = new Size(Math.Max(300, label.Right + 10), form.ClientSize.Height);

بوردر استایل فرم =فیکسد دیالوگ شده است، یعنی فرم اینپوت باکس دارای دکمه های مینی مایز و ماکسی مایز نباشد.فقط دکمه ی بستن داشته باشد.
form.FormBorderStyle = FormBorderStyle.FixedDialog;

این خط مشخص میکند که وقتی فرم اینپوت باکس باز میشه،در وسط صفحه باشه:
form.StartPosition = FormStartPosition.CenterScreen;

دکمه های مینی مایز و ماکسی مایز را نداشته باشد:
form.MinimizeBox = false;
form.MaximizeBox = false;


form.AcceptButton = buttonOk;
form.CancelButton = buttonCancel;
DialogResult dialogResult = form.ShowDialog();
value = textBox.Text;
return dialogResult;
}


کد در فرم_لود:
private void Form1_Load(object sender, EventArgs e)
{

نمایش اینپوت باکس:
string value = textBox1.Text;

اگر کابر در فرم اینپوت باکس اوکی رو زد ، مقدار وارد شده توسط کاربر در تکست باکس قرار بگیره:
if (InputBox("نام", "نام خود را وارد کنید", ref value) == DialogResult.OK)
{
textBox1.Text = value;
}


تکست باکس ناپدید میشه و لیبلی که مقدار تکست باکس رو داره ظاهر میشه:
textBox1.Visible = false;
lblname.Text = textBox1.Text;


}

کافیه یه تکست باکس به نام
textBox1
در فرم اصلی تون قرار بدین و یک لیبل به نام
lblname
که مقدار تکست باکس رو نمایش میده تا کد اجرا شه.
 

فاطمه طالبی

کاربر بیش فعال
اینم همون کد بدون توضیح:
کد:
[COLOR=blue][FONT=Tahoma]public[/FONT][/COLOR][FONT=Tahoma] [COLOR=blue]static[/COLOR] [COLOR=teal]DialogResult[/COLOR] InputBox([COLOR=blue]string[/COLOR] title, [COLOR=blue]string[/COLOR] promptText, [COLOR=blue]ref[/COLOR] [COLOR=blue]string[/COLOR] value)[/FONT]
[FONT=Tahoma]{[/FONT]
 
[FONT=Tahoma][COLOR=teal]Form[/COLOR] form = [COLOR=blue]new[/COLOR] [COLOR=teal]Form[/COLOR]();[/FONT]
[FONT=Tahoma][COLOR=teal]Label[/COLOR] label = [COLOR=blue]new[/COLOR] [COLOR=teal]Label[/COLOR]();[/FONT]
[FONT=Tahoma][COLOR=teal]TextBox[/COLOR] textBox = [COLOR=blue]new[/COLOR] [COLOR=teal]TextBox[/COLOR]();[/FONT]
[FONT=Tahoma][COLOR=teal]Button[/COLOR] buttonOk = [COLOR=blue]new[/COLOR] [COLOR=teal]Button[/COLOR]();[/FONT]
[FONT=Tahoma][COLOR=teal]Button[/COLOR] buttonCancel = [COLOR=blue]new[/COLOR] [COLOR=teal]Button[/COLOR]();[/FONT]
[FONT=Tahoma]form.Text = title;[/FONT]
[FONT=Tahoma]label.Text = promptText;[/FONT]
[FONT=Tahoma]textBox.Text = value;[/FONT]
[FONT=Tahoma]buttonOk.Text = [COLOR=maroon]"OK"[/COLOR];[/FONT]
[FONT=Tahoma]buttonCancel.Text = [COLOR=maroon]"Cancel"[/COLOR];[/FONT]
[FONT=Tahoma]buttonOk.DialogResult = [COLOR=teal]DialogResult[/COLOR].OK;[/FONT]
[FONT=Tahoma]buttonCancel.DialogResult = [COLOR=teal]DialogResult[/COLOR].Cancel;[/FONT]
[FONT=Tahoma]label.SetBounds(190, 20, 372, 13);[/FONT]
[FONT=Tahoma]textBox.SetBounds(12, 36, 372, 20);[/FONT]
[FONT=Tahoma]buttonOk.SetBounds(228, 72, 75, 23);[/FONT]
[FONT=Tahoma]buttonCancel.SetBounds(309, 72, 75, 23);[/FONT]
[FONT=Tahoma]label.AutoSize = [COLOR=blue]true[/COLOR];[/FONT]
[FONT=Tahoma]textBox.Anchor = textBox.Anchor | [COLOR=teal]AnchorStyles[/COLOR].Right;[/FONT]
[FONT=Tahoma]buttonOk.Anchor = [COLOR=teal]AnchorStyles[/COLOR].Bottom | [COLOR=teal]AnchorStyles[/COLOR].Right;[/FONT]
[FONT=Tahoma]buttonCancel.Anchor = [COLOR=teal]AnchorStyles[/COLOR].Bottom | [COLOR=teal]AnchorStyles[/COLOR].Right;[/FONT]
[FONT=Tahoma]form.ClientSize = [COLOR=blue]new[/COLOR] [COLOR=teal]Size[/COLOR](396, 107);[/FONT]
[FONT=Tahoma]form.Controls.AddRange([COLOR=blue]new[/COLOR] [COLOR=teal]Control[/COLOR][] { label, textBox, buttonOk, buttonCancel });[/FONT]
[FONT=Tahoma]form.ClientSize = [COLOR=blue]new[/COLOR] [COLOR=teal]Size[/COLOR]([COLOR=teal]Math[/COLOR].Max(300, label.Right + 10), form.ClientSize.Height);[/FONT]
[FONT=Tahoma]form.FormBorderStyle = [COLOR=teal]FormBorderStyle[/COLOR].FixedDialog;[/FONT]
[FONT=Tahoma]form.StartPosition = [COLOR=teal]FormStartPosition[/COLOR].CenterScreen;[/FONT]
[FONT=Tahoma]form.MinimizeBox = [COLOR=blue]false[/COLOR];[/FONT]
[FONT=Tahoma]form.MaximizeBox = [COLOR=blue]false[/COLOR];[/FONT]
[FONT=Tahoma]form.AcceptButton = buttonOk;[/FONT]
[FONT=Tahoma]form.CancelButton = buttonCancel;[/FONT]
[FONT=Tahoma][COLOR=teal]DialogResult[/COLOR] dialogResult = form.ShowDialog();[/FONT]
[FONT=Tahoma]value = textBox.Text;[/FONT]
[FONT=Tahoma][COLOR=blue]return[/COLOR] dialogResult;[/FONT]
 
[FONT=Tahoma]}[/FONT]
 
 
[FONT=Tahoma][COLOR=blue]private[/COLOR] [COLOR=blue]void[/COLOR] Form1_Load([COLOR=blue]object[/COLOR] sender, [COLOR=teal]EventArgs[/COLOR] e)[/FONT]
[FONT=Tahoma]{[/FONT]
 
[FONT=Tahoma][COLOR=blue]string[/COLOR] value = textBox1.Text;[/FONT]
[FONT=Tahoma][COLOR=blue]if[/COLOR] (InputBox([COLOR=maroon]"نام"[/COLOR], [COLOR=maroon]"نام خود را وارد کنید"[/COLOR], [COLOR=blue]ref[/COLOR] value) == [COLOR=teal]DialogResult[/COLOR].OK)[/FONT]
[FONT=Tahoma]{[/FONT]
[FONT=Tahoma]textBox1.Text = value;[/FONT]
[FONT=Tahoma]}[/FONT]
[FONT=Tahoma]textBox1.Visible = [COLOR=blue]false[/COLOR];[/FONT]
[FONT=Tahoma]lblname.Text = textBox1.Text;[/FONT]
 
[FONT=Tahoma]}[/FONT]
 
  [CODE/]
[FONT=Tahoma]آدرس منبعی که کد رو ازش گرفتم و کدهای بیشتر مربوط به این زمینه:[/FONT]
[FONT=Tahoma]http://www.p2p.dotnetsource.com/default.aspx?g=posts&t=10649[/FONT]
 
آخرین ویرایش:

فاطمه طالبی

کاربر بیش فعال
عدد چهارم (20) در تکست باکس:

این عدد ارتفاع تکست باکس رو مشخص میکنه ، اما چون مالتی لاین تکست باکس فالس است وقتی این عدد رو تغییر میدین هیچی عوض نمیشه.پس خودتون اگه مالتی لاین تکست باکسو ترو کنین ،تغییرات حاصل از عوض کردن این عدد رو مشاهده خواهید کرد.
 

MojtabaDinarvand

عضو جدید
با سلام.

میشه دلیلتون رو برای استفاده از متد استاتیک رو بگید ؟؟؟ ایا تو سی شارپ بعنوان یک زبان کاملا شی گرا نیازی به متدهای استاتیک هست ؟
 

negin17h

مدیر تالارهای مهندسی کامپیوتر و رباتیکمتخصص #C
مدیر تالار
زمانیکه متدی یا تابعی قرار باشد در یک کلاس و بصورت داخلی استفاده شود می توان آن را با استاتيک تعريف نمود. در اينصورت در صورت تعريف نمونه از آن کلاس هم در فهرست قرار نمیگیرد (البته اگر private باشد) و کلاً کد بصورت بهينه تری در می آيد.
اگر از CodeRush هم استفاده کنيد متوجه میشوید.
 

MojtabaDinarvand

عضو جدید
تعریف استایک رو میدونم. منظورم اینه اصلا چه نیازی هست که از استاتیک استفاده کنیم ؟
الان کجای این تعریف استاتیک بهینه هست ؟
 

فاطمه طالبی

کاربر بیش فعال
وقتی اسمبلی Microsoft.VisualBasic.dll را به پروزه خود add reference میکنیم ، تو این مسیر هم اینپوت باکس هست: Microsoft.VisualBasic.Interaction.InputBox
اما
No overload for method 'InputBox' takes '0' arguments
اين خطا رو ميده
وقتی براش آرگومان میذارم بازم خطا میده.چرا؟
 

MojtabaDinarvand

عضو جدید
با سلام.

برای گرفتن اطلاعات اگر می خوایید از Inputbox زبان VB.Net استفاده بکنید کافیه روش کارو عینا طبق چیزی که میگم برید جلو

ابتدا reference زیر رو Add بکنید به برنامتون.

Microsoft Visual Basic

بعد از اضافه کردن این reference شما باید فضای نام اون رو هم یوزینگ کلید مثل کد زیر :

PHP:
using Microsoft.VisualBasic;
بعد از این کار کافیه به این صورت مثلا یک نام ورودی برای تغییر Text فرمتون بگیرید :

PHP:
        private void Form1_Load(object sender, EventArgs e)
        {
            this.Text = Interaction.InputBox("prompt", "Title", "", 10, 10);
        }
امیدوارم مفید بوده باشه.

موفق باشید.
 

Similar threads

بالا