ايران ويج

نسخه‌ی کامل: کد ساخت 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
که مقدار تکست باکس رو نمایش میده تا کد اجرا شه.

اینم همون کد بدون توضیح:
کد:
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;
label.SetBounds(190, 20, 372, 13);
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;
form.ClientSize = new Size(396, 107);
form.Controls.AddRange(new Control[] { label, textBox, buttonOk, buttonCancel });
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;

}

آدرس منبعی که کد رو ازش گرفتم و کدهای بیشتر مربوط به این زمینه:
http://www.p2p.dotnetsource.com/default....ts&t=10649
سلام. چند تا چیز

لطفا کد هاتونو توی تگ کد بگذارید

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

اینم برای کنسله:
buttonCancel.DialogResult = DialogResult.Cancel
نیازی به این کار نیست، چون وقتی این کارو:
نقل قول: form.AcceptButton = buttonOk;
form.CancelButton = buttonCancel;
بکنید به صورت اتوماتیک دکمه ها مقدار DialogResult رو تغییر میدن


نقل قول: عدد سوم(372)وعدد چهارم(13) در لیبل رو نمیدونم باعث چه تغییری میشه چون وقتی تغییرشون میدم،هیچی نمیشه.
عدد چهارم(20):نمیدونم
همونطور که گفتی دو تا آخری طول و عرض کنترل رو مشخص میکنه. ولی توی Label و Textbox قضیه فرق داره. چون توی Label خاصیت AutoSize اگه True باشه طول و عرضو اوتو تغییر میده و اجازه دستکاری به شما نمیده. Textbox هم تا وقتی multiline ش false باشه اجازی تغییر Height رو نمیده.

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



و در کل این کار اصلا جالب نیست. توی همون منبعتون. تیکه دوم که با کلاس نوشته رو استفاده کنید!
اوه
مرسی
حرفاتون واقعا کمک میکنه...
اما چند مشکل دارم !

buttonOk.DialogResult = DialogResult.OK;
buttonCancel.DialogResult = DialogResult.Cancel
وقتی این خط ها رو برداشتم ، اوکی برنامه کار نکرد
!

اوتوسایز لیبل رو فالس کردم ، اما باز وقتی اون عددها رو تغییر میدم ،هیچی نمیشه!

اما مطابق گفته شما عدد چهارم (20) تو تکست باکس رو میشه با ترو کردن مالی لاینش عوض کرد.
مشکلم حل شد !!!!!