PDA

View Full Version : آموزش: استفاده از inputbox در #c



reza_edu
چهارشنبه 08 دی 1389, 22:06 عصر
سلام به همه مهندسان گرامی
ابتدا باید بگم که من درمورد این موضوع تو سرچینگ سایت جستجو نکردم تا ببینم قبلا مطرح شده یانه . اما گفتم که من هم بگم شاید ضرر نداشته باشه پس از مدیران این تالار پوزش میخوام اگه دوباره کاری شده.
حالا بگم چرا این موضوع رو مطرح کردم من خودم دراصل vb کار هستم اما خوب مثل دیگر برنامه نویسان هرپروژه ای به زبان های .net به پستم بخوره کار میکنم تو یه برنامه با #c مجبور شدم تا داده هارو مثل vb.net از inputbox بگیرم هرچی تو خود msdn گشتم دیدم که نه مثل اینکه #c آماده همچین چیزی نداره(یا من کم دقتی کردم و متوجه نشدم) خلاصه کنم با کمی گشت و گذار تو سایت های دیگر (انگلیسی) کلاسی رو دیدم که برایمن بسیار جالب بود خواستم اون رو تو برنامه نویس بزارم تا دیگر دوستان هم بتونن استفاده کنن.
اول یه کلاس به نام inputbox تو برنامه درست کنید و کد زیر رو توش قرار بدید:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsApplication1
{

#region InputBox return result

/// <summary>
/// Class used to store the result of an InputBox.Show message.
/// </summary>
public class InputBoxResult
{
public DialogResult ReturnCode;
public string Text;
}

#endregion

/// <summary>
/// Summary description for InputBox.
/// </summary>
public class InputBox
{

#region Private Windows Contols and Constructor

// Create a new instance of the form.
private static Form frmInputDialog;
private static Label lblPrompt;
private static Button btnOK;
private static Button btnCancel;
private static TextBox txtInput;

public InputBox()
{
}

#endregion

#region Private Variables

private static string _formCaption = string.Empty;
private static string _formPrompt = string.Empty;
private static InputBoxResult _outputResponse = new InputBoxResult();
private static string _defaultValue = string.Empty;
private static int _xPos = -1;
private static int _yPos = -1;

#endregion

#region Windows Form code

private static void InitializeComponent()
{
// Create a new instance of the form.
frmInputDialog = new Form();
lblPrompt = new Label();
btnOK = new Button();
btnCancel = new Button();
txtInput = new TextBox();
frmInputDialog.SuspendLayout();
//
// lblPrompt
//
lblPrompt.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right)));
lblPrompt.BackColor = SystemColors.Control;
lblPrompt.Font = new Font("Microsoft Sans Serif", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((Byte)(0)));
lblPrompt.Location = new Point(12, 9);
lblPrompt.Name = "lblPrompt";
lblPrompt.Size = new Size(302, 82);
lblPrompt.TabIndex = 3;
//
// btnOK
//
btnOK.DialogResult = DialogResult.OK;
btnOK.FlatStyle = FlatStyle.Popup;
btnOK.Location = new Point(326, 8);
btnOK.Name = "btnOK";
btnOK.Size = new Size(64, 24);
btnOK.TabIndex = 1;
btnOK.Text = "&OK";
btnOK.Click += new EventHandler(btnOK_Click);
//
// btnCancel
//
btnCancel.DialogResult = DialogResult.Cancel;
btnCancel.FlatStyle = FlatStyle.Popup;
btnCancel.Location = new Point(326, 40);
btnCancel.Name = "btnCancel";
btnCancel.Size = new Size(64, 24);
btnCancel.TabIndex = 2;
btnCancel.Text = "&Cancel";
btnCancel.Click += new EventHandler(btnCancel_Click);
//
// txtInput
//
txtInput.Location = new Point(8, 100);
txtInput.Name = "txtInput";
txtInput.Size = new Size(379, 20);
txtInput.TabIndex = 0;
txtInput.Text = "";
//
// InputBoxDialog
//
frmInputDialog.AutoScaleBaseSize = new Size(5, 13);
frmInputDialog.ClientSize = new Size(398, 128);
frmInputDialog.Controls.Add(txtInput);
frmInputDialog.Controls.Add(btnCancel);
frmInputDialog.Controls.Add(btnOK);
frmInputDialog.Controls.Add(lblPrompt);
frmInputDialog.FormBorderStyle = FormBorderStyle.FixedDialog;
frmInputDialog.MaximizeBox = false;
frmInputDialog.MinimizeBox = false;
frmInputDialog.Name = "InputBoxDialog";
frmInputDialog.ResumeLayout(false);
}

#endregion

#region Private function, InputBox Form move and change size

static private void LoadForm()
{
OutputResponse.ReturnCode = DialogResult.Ignore;
OutputResponse.Text = string.Empty;

txtInput.Text = _defaultValue;
lblPrompt.Text = _formPrompt;
frmInputDialog.Text = _formCaption;

// Retrieve the working rectangle from the Screen class
// using the PrimaryScreen and the WorkingArea properties.
System.Drawing.Rectangle workingRectangle = Screen.PrimaryScreen.WorkingArea;

if ((_xPos >= 0 && _xPos < workingRectangle.Width - 100) && (_yPos >= 0 && _yPos < workingRectangle.Height - 100))
{
frmInputDialog.StartPosition = FormStartPosition.Manual;
frmInputDialog.Location = new System.Drawing.Point(_xPos, _yPos);
}
else
frmInputDialog.StartPosition = FormStartPosition.CenterScreen;


string PrompText = lblPrompt.Text;

int n = 0;
int Index = 0;
while (PrompText.IndexOf("\n", Index) > -1)
{
Index = PrompText.IndexOf("\n", Index) + 1;
n++;
}

if (n == 0)
n = 1;

System.Drawing.Point Txt = txtInput.Location;
Txt.Y = Txt.Y + (n * 4);
txtInput.Location = Txt;
System.Drawing.Size form = frmInputDialog.Size;
form.Height = form.Height + (n * 4);
frmInputDialog.Size = form;

txtInput.SelectionStart = 0;
txtInput.SelectionLength = txtInput.Text.Length;
txtInput.Focus();
}

#endregion

#region Button control click event

static private void btnOK_Click(object sender, System.EventArgs e)
{
OutputResponse.ReturnCode = DialogResult.OK;
OutputResponse.Text = txtInput.Text;
frmInputDialog.Dispose();
}

static private void btnCancel_Click(object sender, System.EventArgs e)
{
OutputResponse.ReturnCode = DialogResult.Cancel;
OutputResponse.Text = string.Empty; //Clean output response
frmInputDialog.Dispose();
}

#endregion

#region Public Static Show functions

static public InputBoxResult Show(string Prompt)
{
InitializeComponent();
FormPrompt = Prompt;

// Display the form as a modal dialog box.
LoadForm();
frmInputDialog.ShowDialog();
return OutputResponse;
}

static public InputBoxResult Show(string Prompt, string Title)
{
InitializeComponent();

FormCaption = Title;
FormPrompt = Prompt;

// Display the form as a modal dialog box.
LoadForm();
frmInputDialog.ShowDialog();
return OutputResponse;
}

static public InputBoxResult Show(string Prompt, string Title, string Default)
{
InitializeComponent();

FormCaption = Title;
FormPrompt = Prompt;
DefaultValue = Default;

// Display the form as a modal dialog box.
LoadForm();
frmInputDialog.ShowDialog();
return OutputResponse;
}

static public InputBoxResult Show(string Prompt, string Title, string Default, int XPos, int YPos)
{
InitializeComponent();
FormCaption = Title;
FormPrompt = Prompt;
DefaultValue = Default;
XPosition = XPos;
YPosition = YPos;

// Display the form as a modal dialog box.
LoadForm();
frmInputDialog.ShowDialog();
return OutputResponse;
}

#endregion

#region Private Properties

static private string FormCaption
{
set
{
_formCaption = value;
}
} // property FormCaption

static private string FormPrompt
{
set
{
_formPrompt = value;
}
} // property FormPrompt

static private InputBoxResult OutputResponse
{
get
{
return _outputResponse;
}
set
{
_outputResponse = value;
}
} // property InputResponse

static private string DefaultValue
{
set
{
_defaultValue = value;
}
} // property DefaultValue

static private int XPosition
{
set
{
if (value >= 0)
_xPos = value;
}
} // property XPos

static private int YPosition
{
set
{
if (value >= 0)
_yPos = value;
}
} // property YPos

#endregion

internal static object show(string p)
{
throw new NotImplementedException();
}
}
}

خوب حالا به برنامه اصلی برید و فضای نام زیر رو به برنامه اضافه کنید :

using WindowsApplication1;
خوب حالا برای استفاده آماده است یه تیکه کد مثال هم (تیکه کده کامل نیست) میزارم تا نحوه استفاده رو نشون بده :


str[i] = Convert.ToString(InputBox.Show("كاربر گرامي نام داده هاي سال" + (i + 1) + " را وارد كنيد ", "ورود اطلاعات").Text);
امید وارم که این مطلب مفید باشه. فقط خواهشن یه نظر سنجی میزارم توش شرکت کنید خواهشن چون من تو تالار vb.net مطلبی گذاشتم از 70 نفر فقط 5 نفر شرکت کرن شماکه داری مطلب رو میخونی حداقل موقع بیرون رفتن یه نظر بدی بد نیست. با تشکر.:خجالت:

habibullahkazemi
چهارشنبه 08 دی 1389, 22:37 عصر
من هم سلام خود را تقدیم شما میکنم

سلام به همه مهندسان گرامی
ابتدا باید بگم که من درمورد این موضوع تو سرچینگ سایت جستجو نکردم تا ببینم قبلا مطرح شده یانه . اما گفتم که من هم بگم شاید ضرر نداشته باشه پس از مدیران این تالار پوزش میخوام اگه دوباره کاری شده.
حالا بگم چرا این موضوع رو مطرح کردم من خودم دراصل vb کار هستم اما خوب مثل دیگر برنامه نویسان هرپروژه ای به زبان های .net به پستم بخوره کار میکنم تو یه برنامه با #c مجبور شدم تا داده هارو مثل vb.net از inputbox بگیرم هرچی تو خود msdn گشتم دیدم که نه مثل اینکه #c آماده همچین چیزی نداره(یا من کم دقتی کردم و متوجه نشدم) خلاصه کنم با کمی گشت و گذار تو سایت های دیگر (انگلیسی) کلاسی رو دیدم که برایمن بسیار جالب بود خواستم اون رو تو برنامه نویس بزارم تا دیگر دوستان هم بتونن استفاده کنن.
اول یه کلاس به نام inputbox تو برنامه درست کنید و کد زیر رو توش قرار بدید:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsApplication1
{

#region InputBox return result

/// <summary>
/// Class used to store the result of an InputBox.Show message.
/// </summary>
public class InputBoxResult
{
public DialogResult ReturnCode;
public string Text;
}

#endregion

/// <summary>
/// Summary description for InputBox.
/// </summary>
public class InputBox
{

#region Private Windows Contols and Constructor

// Create a new instance of the form.
private static Form frmInputDialog;
private static Label lblPrompt;
private static Button btnOK;
private static Button btnCancel;
private static TextBox txtInput;

public InputBox()
{
}

#endregion

#region Private Variables

private static string _formCaption = string.Empty;
private static string _formPrompt = string.Empty;
private static InputBoxResult _outputResponse = new InputBoxResult();
private static string _defaultValue = string.Empty;
private static int _xPos = -1;
private static int _yPos = -1;

#endregion

#region Windows Form code

private static void InitializeComponent()
{
// Create a new instance of the form.
frmInputDialog = new Form();
lblPrompt = new Label();
btnOK = new Button();
btnCancel = new Button();
txtInput = new TextBox();
frmInputDialog.SuspendLayout();
//
// lblPrompt
//
lblPrompt.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right)));
lblPrompt.BackColor = SystemColors.Control;
lblPrompt.Font = new Font("Microsoft Sans Serif", 8.25F, FontStyle.Regular, GraphicsUnit.Point, ((Byte)(0)));
lblPrompt.Location = new Point(12, 9);
lblPrompt.Name = "lblPrompt";
lblPrompt.Size = new Size(302, 82);
lblPrompt.TabIndex = 3;
//
// btnOK
//
btnOK.DialogResult = DialogResult.OK;
btnOK.FlatStyle = FlatStyle.Popup;
btnOK.Location = new Point(326, 8);
btnOK.Name = "btnOK";
btnOK.Size = new Size(64, 24);
btnOK.TabIndex = 1;
btnOK.Text = "&OK";
btnOK.Click += new EventHandler(btnOK_Click);
//
// btnCancel
//
btnCancel.DialogResult = DialogResult.Cancel;
btnCancel.FlatStyle = FlatStyle.Popup;
btnCancel.Location = new Point(326, 40);
btnCancel.Name = "btnCancel";
btnCancel.Size = new Size(64, 24);
btnCancel.TabIndex = 2;
btnCancel.Text = "&Cancel";
btnCancel.Click += new EventHandler(btnCancel_Click);
//
// txtInput
//
txtInput.Location = new Point(8, 100);
txtInput.Name = "txtInput";
txtInput.Size = new Size(379, 20);
txtInput.TabIndex = 0;
txtInput.Text = "";
//
// InputBoxDialog
//
frmInputDialog.AutoScaleBaseSize = new Size(5, 13);
frmInputDialog.ClientSize = new Size(398, 128);
frmInputDialog.Controls.Add(txtInput);
frmInputDialog.Controls.Add(btnCancel);
frmInputDialog.Controls.Add(btnOK);
frmInputDialog.Controls.Add(lblPrompt);
frmInputDialog.FormBorderStyle = FormBorderStyle.FixedDialog;
frmInputDialog.MaximizeBox = false;
frmInputDialog.MinimizeBox = false;
frmInputDialog.Name = "InputBoxDialog";
frmInputDialog.ResumeLayout(false);
}

#endregion

#region Private function, InputBox Form move and change size

static private void LoadForm()
{
OutputResponse.ReturnCode = DialogResult.Ignore;
OutputResponse.Text = string.Empty;

txtInput.Text = _defaultValue;
lblPrompt.Text = _formPrompt;
frmInputDialog.Text = _formCaption;

// Retrieve the working rectangle from the Screen class
// using the PrimaryScreen and the WorkingArea properties.
System.Drawing.Rectangle workingRectangle = Screen.PrimaryScreen.WorkingArea;

if ((_xPos >= 0 && _xPos < workingRectangle.Width - 100) && (_yPos >= 0 && _yPos < workingRectangle.Height - 100))
{
frmInputDialog.StartPosition = FormStartPosition.Manual;
frmInputDialog.Location = new System.Drawing.Point(_xPos, _yPos);
}
else
frmInputDialog.StartPosition = FormStartPosition.CenterScreen;


string PrompText = lblPrompt.Text;

int n = 0;
int Index = 0;
while (PrompText.IndexOf("\n", Index) > -1)
{
Index = PrompText.IndexOf("\n", Index) + 1;
n++;
}

if (n == 0)
n = 1;

System.Drawing.Point Txt = txtInput.Location;
Txt.Y = Txt.Y + (n * 4);
txtInput.Location = Txt;
System.Drawing.Size form = frmInputDialog.Size;
form.Height = form.Height + (n * 4);
frmInputDialog.Size = form;

txtInput.SelectionStart = 0;
txtInput.SelectionLength = txtInput.Text.Length;
txtInput.Focus();
}

#endregion

#region Button control click event

static private void btnOK_Click(object sender, System.EventArgs e)
{
OutputResponse.ReturnCode = DialogResult.OK;
OutputResponse.Text = txtInput.Text;
frmInputDialog.Dispose();
}

static private void btnCancel_Click(object sender, System.EventArgs e)
{
OutputResponse.ReturnCode = DialogResult.Cancel;
OutputResponse.Text = string.Empty; //Clean output response
frmInputDialog.Dispose();
}

#endregion

#region Public Static Show functions

static public InputBoxResult Show(string Prompt)
{
InitializeComponent();
FormPrompt = Prompt;

// Display the form as a modal dialog box.
LoadForm();
frmInputDialog.ShowDialog();
return OutputResponse;
}

static public InputBoxResult Show(string Prompt, string Title)
{
InitializeComponent();

FormCaption = Title;
FormPrompt = Prompt;

// Display the form as a modal dialog box.
LoadForm();
frmInputDialog.ShowDialog();
return OutputResponse;
}

static public InputBoxResult Show(string Prompt, string Title, string Default)
{
InitializeComponent();

FormCaption = Title;
FormPrompt = Prompt;
DefaultValue = Default;

// Display the form as a modal dialog box.
LoadForm();
frmInputDialog.ShowDialog();
return OutputResponse;
}

static public InputBoxResult Show(string Prompt, string Title, string Default, int XPos, int YPos)
{
InitializeComponent();
FormCaption = Title;
FormPrompt = Prompt;
DefaultValue = Default;
XPosition = XPos;
YPosition = YPos;

// Display the form as a modal dialog box.
LoadForm();
frmInputDialog.ShowDialog();
return OutputResponse;
}

#endregion

#region Private Properties

static private string FormCaption
{
set
{
_formCaption = value;
}
} // property FormCaption

static private string FormPrompt
{
set
{
_formPrompt = value;
}
} // property FormPrompt

static private InputBoxResult OutputResponse
{
get
{
return _outputResponse;
}
set
{
_outputResponse = value;
}
} // property InputResponse

static private string DefaultValue
{
set
{
_defaultValue = value;
}
} // property DefaultValue

static private int XPosition
{
set
{
if (value >= 0)
_xPos = value;
}
} // property XPos

static private int YPosition
{
set
{
if (value >= 0)
_yPos = value;
}
} // property YPos

#endregion

internal static object show(string p)
{
throw new NotImplementedException();
}
}
}

خوب حالا به برنامه اصلی برید و فضای نام زیر رو به برنامه اضافه کنید :

using WindowsApplication1;
خوب حالا برای استفاده آماده است یه تیکه کد مثال هم (تیکه کده کامل نیست) میزارم تا نحوه استفاده رو نشون بده :


str[i] = Convert.ToString(InputBox.Show("كاربر گرامي نام داده هاي سال" + (i + 1) + " را وارد كنيد ", "ورود اطلاعات").Text);
امید وارم که این مطلب مفید باشه. فقط خواهشن یه نظر سنجی میزارم توش شرکت کنید خواهشن چون من تو تالار vb.net مطلبی گذاشتم از 70 نفر فقط 5 نفر شرکت کرن شماکه داری مطلب رو میخونی حداقل موقع بیرون رفتن یه نظر بدی بد نیست. با تشکر.:خجالت:

abbas.oveissi
پنج شنبه 09 دی 1389, 12:53 عصر
سلام به همه مهندسان گرامی
ابتدا باید بگم که من درمورد این موضوع تو سرچینگ سایت جستجو نکردم تا ببینم قبلا مطرح شده یانه . اما گفتم که من هم بگم شاید ضرر نداشته باشه پس از مدیران این تالار پوزش میخوام اگه دوباره کاری شده.
حالا بگم چرا این موضوع رو مطرح کردم من خودم دراصل vb کار هستم اما خوب مثل دیگر برنامه نویسان هرپروژه ای به زبان های .net به پستم بخوره کار میکنم تو یه برنامه با #c مجبور شدم تا داده هارو مثل vb.net از inputbox بگیرم هرچی تو خود msdn گشتم دیدم که نه مثل اینکه #c آماده همچین چیزی نداره(یا من کم دقتی کردم و متوجه نشدم) خلاصه کنم با کمی گشت و گذار تو سایت های دیگر (انگلیسی) کلاسی رو دیدم که برایمن بسیار جالب بود خواستم اون رو تو برنامه نویس بزارم تا دیگر دوستان هم بتونن استفاده کنن.
اول یه کلاس به نام inputbox تو برنامه درست کنید و کد زیر رو توش قرار بدید:


آقایی inputbox منظور چی چیه ؟؟؟؟

Babak-Magic
پنج شنبه 09 دی 1389, 14:39 عصر
سی شارپ InputBox نداره ولی ویبی که داره
شما از رفرنس ها Microsoft Visual Basic رو اضافه کنید و بعد این کد رو بنویسید

Microsoft.VisualBasic.Interaction.InputBox("Enter", "Hi", string.Empty, 250, 250);
ممنون از کلاسی که قرار دادی نکات اموزشی خوبی داره

m * h * d
پنج شنبه 09 دی 1389, 15:36 عصر
سلام دوست عزیز اصلان نیازی به این کار نیست فقط کافی شما توی این متد این کد رو بنویسی

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar))
e.Handled = true ;
}
همینو بس و دیگه به این همه کدی که نوشتی نیازی نیست

reza_edu
پنج شنبه 09 دی 1389, 22:03 عصر
سلام ممنون که من رو از این نکات آگه کردید من هم هیچ ادعائی ندارم دوستان من میخوام که جنبه هائی که مختلف مطرح بشه تا کسائی که مثل من از این نکات آگاه نیستن آشنا بشن شاید یه جای بدردشون خورد من دوست دارم مسئله ای مطرح کنم و اگه اشتباه میگم یا روشم غلط هست بهم گفته بشه تا اون کاری درسته انجام بشه ممنون از آموزش دوستان.
امید وارم بتونم چیزای بهتر و کارامد تری رو بیان کنم .(البته اگه زنده بمونم )

sia_2007
جمعه 10 دی 1389, 12:45 عصر
اگه دوست داری به جنبه های مختلف قضیه نگاه کنی؛ این رو هم در نظر بگیر که کدی که نوشتی اصلا Thread-Safe نیست.
دوم این که بهتر بود یه User Control بنویسی یا یه Form درست کنی؛ که Design اش راحت تر باشه؛
سوم این که بهتر بود این رو با WPF مینوشتی که زیباتر باشه
چهارم این که کدهات رو خوانا تر بنویس
چهارم این که میتونی یه enum درست کنی و مثلا موقعیت نمایش Center Owner و Center Screen و ... رو در اختیار کاربر قرار بدی
پنجم این که اگه Windows Form هم مثل WPF ؛ Safe Handler داشته باشه؛ باید اون رو در اختیار استفاده کننده قرار بدی
ششم این که قابلیت تنظیم Transparency و Fade In Fade Out رو هم داشته باشه؛ که این آخری سلیقه ایه.
باید یک تنظیم مثل Value Is Required باشه؛ که اگه True بود؛ تا زمانی که Text Box مقدار نداشته باشه؛ نشه OK کرد.
متونی یه Action هم بگیری و پس از اتمام کار انجامش بدی؛ البته این هم سلیقه ایه. (( در صورتی مفیده که Input Box ات قابلیت تنظیم به صورت این که Modal باشه یا نه رو در اختیار استفاده کننده بذاره)
در این صورت من Show اش میکنم به صورت غیر Modal ؛ و هر وقت طرف Ok کرد ؛ اون Action فراخونی میشه؛ در این صورت ؛ Thread برنامه بی جهت الاف نمیشه.
داشتن یه Timer هم که بعد از مثلا 20 ثانیه ( بنا به انتخاب کاربر )؛ Fade Out بشه؛ هم مفیده.
در ضمن به جای Return Code ؛ یه Enum بذار.
دپرس نشی یه وقت !!! :چشمک:
موفق باشی
---
پاورقی : نکته هایی که گفتم از طرف خدا به من وحی نشده؛ پس ممکنه اشکال توشون باشه؛ در عین حال زاییده ی توهمات نیست.

sia_2007
جمعه 10 دی 1389, 12:55 عصر
راستی این که Focus بگیره یا نه رو در اختیار کاربر بذار
---
فرض کن؛ میخوای تو برنامت؛ که یه سیستم چت هم داره؛ وقتی طرف داره با برنامه اصلی کار میکنه؛ زمانهایی که پیغام جدید براش میآد؛ برای امکان جواب دادن یه پنجره رو نمایش بدی.
طرف داره یه متن تو Word مینویسه؛ یا اصلا تو برنامه داره یه رکورد INSERT میکنه
یه پیغام که قراره بش نشون داده بشه؛ که نباید Focus رو بگیره.
من پنجرم روی همه ی پنجره ها نمایش داده میشه؛ ولی Focus رو نمیگیره؛ و علاوه بر اون چون Modal نیست؛ برنامه هم Thread اش علاف نمیشه
زیبا هم هست؛ هم Fade In داره هم Fade Out
کی میگه پنجره باید حتما Close و Min و ... داشته باشه ؟
برای من یه Rounded Border طلایی هستش با متن و دکمه در وسط
بعد از 7 ثانیه هم میره؛ اما اگه شروع به Type کنه؛ این زمان تمدید میشه.
خلاقیت به خرج بدین عزیزان