نوشته شده توسط
MasoudAdmin
با سلام
من در فرم لاگین یک TextBox به عنوان نام کاربری دارم. حالا می خوام هر کاربری که یک بار نام کاربریش رو در این TextBox وارد کرد، موقع لاگین در مرتبه های بعدی هنگامی که کاربر شروع به تایپ کرد، مقادیر ورود شده از قبل رو به کاربر نشان دهد تا کاربر دیگر مجبور به تایپ مجدد همه موارد نباشد.
ممنون
اول اون TextBox تون رو بردارید بندازید دور. بدرد کار ما نمیخوره. بجاش یک ComboBox بذارید.
در تنظیمات ComboBox هم این وارد رو وارد کنید (دوست داشتید در پنجره Properties و نخواستید در کد برنامه موقع بالا اومدن فرم)
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
comboBox1.DropDownStyle = ComboBoxStyle.Simple;
}
حالا موقعی که فرم باز میشه، باید لیست کاربری رو بذاریم داخل ComboBox که موقع تایپ کردن خودکار پیشنهاد کنه.
اما اول باید محل ذخیره شدن لیست کاربری رو مشخص کنیم. در منوی Project ویژوال استدیو اون گزینه ...project name} Properties} رو انتخاب کنید که project name اسم پروژه شما است.
در زبانه Settings اش در آخرین سطر لیست در ستون Name روی Settings دوبار کلیک کنید و تا به حالت ویرایش دربیاد و بنویسید Usernames و Enter رو بزنید تا عنوان Usernames از نوع string ایجاد بشه. پروژه رو ذخیره کنید و برگردید سر کد فرم تون. در دو جا باید به این Usernames مون رجوع کنیم. یکی وقتی فرم تازه داره نمایش داده میشه یعنی رخداد Shown :
private void Form1_Shown(object sender, EventArgs e)
{
var users = Properties.Settings.Default.Usernames.Split(new char[] { '\t' }
, StringSplitOptions.RemoveEmptyEntries);
comboBox1.Items.Clear();
comboBox1.Items.AddRange(users);
}
و دفعه دومی وقتی که نام کاربری وارد شده رو تایید کردید و لاگین انجام شده و احتمال میدیم که این نام کاربر در لیست جدید ئه و باید برای دفعات بعدی ذخیره بشه :
var username = comboBox1.Text.Trim();
var users = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
foreach (string user in comboBox1.Items)
{
users[user] = 0;
}
if (users.ContainsKey(username) == false)
{
users.Add(username, 0);
comboBox1.Items.Add(username);
comboBox1.AutoCompleteSource = AutoCompleteSource.None;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
}
var usernames = new string[users.Count];
users.Keys.CopyTo(usernames, 0);
Properties.Settings.Default.Usernames = string.Join("\t", usernames);
Properties.Settings.Default.Save();